From 9c56b6f53b4b75532173569d7c914212b99650fb Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 29 Jun 2021 15:44:01 +0200 Subject: [PATCH 0001/1921] adding bwamem2/mem and index --- .../software/bwamem2/index/functions.nf | 68 +++++++++++++++++++ .../nf-core/software/bwamem2/index/main.nf | 35 ++++++++++ .../nf-core/software/bwamem2/index/meta.yml | 29 ++++++++ .../nf-core/software/bwamem2/mem/functions.nf | 68 +++++++++++++++++++ modules/nf-core/software/bwamem2/mem/main.nf | 47 +++++++++++++ modules/nf-core/software/bwamem2/mem/meta.yml | 44 ++++++++++++ 6 files changed, 291 insertions(+) create mode 100644 modules/nf-core/software/bwamem2/index/functions.nf create mode 100644 modules/nf-core/software/bwamem2/index/main.nf create mode 100644 modules/nf-core/software/bwamem2/index/meta.yml create mode 100644 modules/nf-core/software/bwamem2/mem/functions.nf create mode 100644 modules/nf-core/software/bwamem2/mem/main.nf create mode 100644 modules/nf-core/software/bwamem2/mem/meta.yml diff --git a/modules/nf-core/software/bwamem2/index/functions.nf b/modules/nf-core/software/bwamem2/index/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/bwamem2/index/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bwamem2/index/main.nf b/modules/nf-core/software/bwamem2/index/main.nf new file mode 100644 index 00000000..b667f266 --- /dev/null +++ b/modules/nf-core/software/bwamem2/index/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BWAMEM2_INDEX { + tag "$fasta" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0" + } else { + container "quay.io/biocontainers/bwa-mem2:2.2.1--he513fc3_0" + } + + input: + path fasta + + output: + path "bwamem2" , emit: index + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + mkdir bwamem2 + bwa-mem2 index $options.args $fasta -p bwamem2/${fasta} + echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bwamem2/index/meta.yml b/modules/nf-core/software/bwamem2/index/meta.yml new file mode 100644 index 00000000..9d717f73 --- /dev/null +++ b/modules/nf-core/software/bwamem2/index/meta.yml @@ -0,0 +1,29 @@ +name: bwamem2_index +description: Create BWA-mem2 index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: https://github.com/bwa-mem2/bwa-mem2#usage +input: + - fasta: + type: file + description: Input genome fasta file +output: + - index: + type: file + description: BWA genome index files + pattern: "*.{0132,amb,ann,bwt.2bit.64,pac}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@maxulysse" diff --git a/modules/nf-core/software/bwamem2/mem/functions.nf b/modules/nf-core/software/bwamem2/mem/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/bwamem2/mem/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bwamem2/mem/main.nf b/modules/nf-core/software/bwamem2/mem/main.nf new file mode 100644 index 00000000..5d0ff617 --- /dev/null +++ b/modules/nf-core/software/bwamem2/mem/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BWAMEM2_MEM { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0" + } else { + container "quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0" + } + + input: + tuple val(meta), path(reads) + path index + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def split_cpus = Math.floor(task.cpus/2) + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def read_group = meta.read_group ? "-R ${meta.read_group}" : "" + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` + + bwa-mem2 mem \\ + $options.args \\ + $read_group \\ + -t ${split_cpus} \\ + \$INDEX \\ + $reads \\ + | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam - + + echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bwamem2/mem/meta.yml b/modules/nf-core/software/bwamem2/mem/meta.yml new file mode 100644 index 00000000..2fc7713d --- /dev/null +++ b/modules/nf-core/software/bwamem2/mem/meta.yml @@ -0,0 +1,44 @@ +name: bwamem2_mem +description: Performs fastq alignment to a fasta reference using BWA +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam +tools: + - bwa: + description: | + BWA is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: http://bio-bwa.sourceforge.net/ + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" +output: + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@maxulysse" From 56043c7827c8c5db851f8167ec5761aebee12c83 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 7 Jul 2021 09:26:42 +0200 Subject: [PATCH 0002/1921] added temporary test data from sarek --- conf/test.config | 4 ++-- .../normal/tiny_n_L001_R1_xxx.fastq.gz | Bin 0 -> 45010 bytes .../normal/tiny_n_L001_R2_xxx.fastq.gz | Bin 0 -> 47703 bytes .../normal/tiny_n_L002_R1_xxx.fastq.gz | Bin 0 -> 45431 bytes .../normal/tiny_n_L002_R2_xxx.fastq.gz | Bin 0 -> 47941 bytes .../normal/tiny_n_L004_R1_xxx.fastq.gz | Bin 0 -> 44140 bytes .../normal/tiny_n_L004_R2_xxx.fastq.gz | Bin 0 -> 44343 bytes .../normal/tiny_n_L007_R1_xxx.fastq.gz | Bin 0 -> 45690 bytes .../normal/tiny_n_L007_R2_xxx.fastq.gz | Bin 0 -> 43685 bytes .../normal/tiny_n_L008_R1_xxx.fastq.gz | Bin 0 -> 40944 bytes .../normal/tiny_n_L008_R2_xxx.fastq.gz | Bin 0 -> 42844 bytes testdata_sarek/rd_tiny.csv | 12 ++++++++++++ testdata_sarek/rd_tiny.csv.old | 14 ++++++++++++++ testdata_sarek/rd_tiny.csv~ | 14 ++++++++++++++ .../tumor/tiny_t_L001_R1_xxx.fastq.gz | Bin 0 -> 27427 bytes .../tumor/tiny_t_L001_R2_xxx.fastq.gz | Bin 0 -> 26833 bytes .../tumor/tiny_t_L002_R1_xxx.fastq.gz | Bin 0 -> 47308 bytes .../tumor/tiny_t_L002_R2_xxx.fastq.gz | Bin 0 -> 45779 bytes .../tumor/tiny_t_L003_R1_xxx.fastq.gz | Bin 0 -> 45864 bytes .../tumor/tiny_t_L003_R2_xxx.fastq.gz | Bin 0 -> 45400 bytes .../tumor/tiny_t_L005_R1_xxx.fastq.gz | Bin 0 -> 48397 bytes .../tumor/tiny_t_L005_R2_xxx.fastq.gz | Bin 0 -> 48850 bytes .../tumor/tiny_t_L006_R1_xxx.fastq.gz | Bin 0 -> 46027 bytes .../tumor/tiny_t_L006_R2_xxx.fastq.gz | Bin 0 -> 45277 bytes .../tumor/tiny_t_L007_R1_xxx.fastq.gz | Bin 0 -> 20812 bytes .../tumor/tiny_t_L007_R2_xxx.fastq.gz | Bin 0 -> 21180 bytes workflows/raredisease.nf | 4 +++- 27 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz create mode 100644 testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz create mode 100644 testdata_sarek/rd_tiny.csv create mode 100644 testdata_sarek/rd_tiny.csv.old create mode 100644 testdata_sarek/rd_tiny.csv~ create mode 100644 testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz create mode 100644 testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/conf/test.config b/conf/test.config index ff4c6c82..55284c3f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -22,8 +22,8 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' + input = 'testdata_sarek/rd_tiny.csv' // Genome references - genome = 'R64-1-1' + genome = 'GRCh38' } diff --git a/testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..b25487aa91cafdd1a6873130cc3061014106c575 GIT binary patch literal 45010 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 literal 0 HcmV?d00001 diff --git a/testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..b917c80cef2c6ae89cbc1f7af4f5f237f20074ee GIT binary patch literal 47703 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 nEi0M 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 DLA~X2 literal 0 HcmV?d00001 diff --git a/testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..ae0e1e6ee75fe733472245f9198cbd11520e66b8 GIT binary patch literal 47941 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 RE~4Q7{XcKaFr@S+0st+%ySV@W literal 0 HcmV?d00001 diff --git a/testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..29e4a3bd15a88bf0207643ea2b73b0914202438d GIT binary patch literal 44140 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μPM8qNpB!2lRE&mKfL6){9IhI$g) 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 M56kM$b*t?G0B~8;>;M1& literal 0 HcmV?d00001 diff --git a/testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..f645870a8fa2f737c280e88e4f86fd34227fd9fb GIT binary patch literal 44343 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 C+#I6- literal 0 HcmV?d00001 diff --git a/testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..d03e2369c00ecb81cb6aae02192c3dae2f45f703 GIT binary patch literal 43685 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 Z5iV!1jP1C4QA36DGMp4&>#P{@v+c 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 literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..770ea2dfb7ae2d43b009fc07bd084702e73740cd GIT binary patch literal 26833 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 literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..e591b6080e30363d25f46c7bf80836517a8f1e2e GIT binary patch literal 47308 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 IyRa7m0AfZH{r~^~ literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..7c5f826f11f1d31210afb1a05782159e2a0645b6 GIT binary patch literal 45779 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

HNBd_OocP) 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 nGRFDoWuVuonUVbYCdl literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..52059387c9744f64df6fbca94676a8992f36324a GIT binary patch literal 45864 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 Y)Su^{dS1*Ia{Pb&12&p~eC*c&01B2jkpKVy literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..def85db089263b07ed944fbc7e3fc72e37e8de6b GIT binary patch literal 48397 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 F0ss_ZOVj`W literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..e6de821cddd3860c87430eb55e77077a20df237b GIT binary patch literal 48850 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%0Dh0ZmoSxTC+A;=G?T!QQ) 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�^COm&PNpzi-P^iM2av>7Iw3r0U?|t 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 bd*H-2H9qz|r7(!wSoHq^GV&ThYzP7X($B)| literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..46ef89b257c35826587e82558031129358d85a92 GIT binary patch literal 45277 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 F0swJyYIpzu literal 0 HcmV?d00001 diff --git a/testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..62e710307e8bfe85e8391661c703aaa212b4ec1b GIT binary patch literal 20812 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'xPT=MMw*OpdpZxYYppyyStfPLQb+>58 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 literal 0 HcmV?d00001 diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 13567c1d..91f61083 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -57,7 +57,9 @@ multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \" // // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) +include { FASTQC } from '../modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) +include { BWAMEM2_INDEX } from '../modules/nf-core/software/bwamem2/index/main' addParams( options: modules['bwa_mem2_index'] ) +include { BWAMEM2_MEM } from '../modules/nf-core/software/bwamem2/mem/main' addParams( options: modules['bwa_mem2_mem'] ) include { MULTIQC } from '../modules/nf-core/software/multiqc/main' addParams( options: multiqc_options ) /* From 5a5b9e71e520878542183722cab3cfed40d08676 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 7 Jul 2021 15:33:25 +0200 Subject: [PATCH 0003/1921] bwamem2 works --- conf/modules.config | 11 +++++++++-- conf/test.config | 2 +- workflows/raredisease.nf | 14 +++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 0b1bfdec..8725ffea 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -23,10 +23,17 @@ params { modules { 'fastqc' { - args = "--quiet" + args = '--quiet' + } + 'bwa_mem2_index' { + publish_dir = 'reference' + publish_files = false + } + 'bwa_mem2_mem' { + args = '' } 'multiqc' { - args = "" + args = '' } } } diff --git a/conf/test.config b/conf/test.config index 55284c3f..9e89aa2e 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,5 +25,5 @@ params { input = 'testdata_sarek/rd_tiny.csv' // Genome references - genome = 'GRCh38' + fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 91f61083..c3e0c2c5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -88,7 +88,19 @@ workflow RAREDISEASE { FASTQC ( INPUT_CHECK.out.reads ) - ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) + + // + // MODULE: Run BWAMEM2 + // + BWAMEM2_INDEX ( + params.fasta + ) + + BWAMEM2_MEM ( + INPUT_CHECK.out.reads, BWAMEM2_INDEX.out.index + ) + ch_software_versions = ch_software_versions.mix(BWAMEM2_MEM.out.version.ifEmpty(null)) // // MODULE: Pipeline reporting From c1fd2f76fb079c734f5f2441910581ede3e18ef8 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 13 Jul 2021 10:44:35 +0200 Subject: [PATCH 0004/1921] Template update for nf-core/tools version 2.0 --- .github/workflows/awsfulltest.yml | 47 +++++++---------- .github/workflows/awstest.yml | 50 +++++++------------ .vscode/settings.json | 3 ++ modules.json | 14 ++++++ .../{software => modules}/fastqc/functions.nf | 0 .../{software => modules}/fastqc/main.nf | 2 +- .../{software => modules}/fastqc/meta.yml | 0 .../multiqc/functions.nf | 0 .../{software => modules}/multiqc/main.nf | 0 .../{software => modules}/multiqc/meta.yml | 0 workflows/raredisease.nf | 4 +- 11 files changed, 56 insertions(+), 64 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 modules.json rename modules/nf-core/{software => modules}/fastqc/functions.nf (100%) rename modules/nf-core/{software => modules}/fastqc/main.nf (95%) rename modules/nf-core/{software => modules}/fastqc/meta.yml (100%) rename modules/nf-core/{software => modules}/multiqc/functions.nf (100%) rename modules/nf-core/{software => modules}/multiqc/main.nf (100%) rename modules/nf-core/{software => modules}/multiqc/meta.yml (100%) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 260b3bf4..2ca44198 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -1,45 +1,34 @@ name: nf-core AWS full size tests # This workflow is triggered on published releases. -# It can be additionally triggered manually with GitHub actions workflow dispatch. +# It can be additionally triggered manually with GitHub actions workflow dispatch button. # It runs the -profile 'test_full' on AWS batch on: release: types: [published] workflow_dispatch: - - -env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - TOWER_ACCESS_TOKEN: ${{ secrets.AWS_TOWER_TOKEN }} - AWS_JOB_DEFINITION: ${{ secrets.AWS_JOB_DEFINITION }} - AWS_JOB_QUEUE: ${{ secrets.AWS_JOB_QUEUE }} - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} - - jobs: - run-awstest: + run-tower: name: Run AWS full tests if: github.repository == 'nf-core/raredisease' runs-on: ubuntu-latest steps: - - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v2 - with: - auto-update-conda: true - python-version: 3.7 - - name: Install awscli - run: conda install -c conda-forge awscli - - name: Start AWS batch job + - name: Launch workflow via tower + uses: nf-core/tower-action@master # 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 - # Then specify `-profile test_full` instead of `-profile test` on the AWS batch command - run: | - aws batch submit-job \ - --region eu-west-1 \ - --job-name nf-core-raredisease \ - --job-queue $AWS_JOB_QUEUE \ - --job-definition $AWS_JOB_DEFINITION \ - --container-overrides '{"command": ["nf-core/raredisease", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://'"${AWS_S3_BUCKET}"'/raredisease/results-'"${GITHUB_SHA}"' -w s3://'"${AWS_S3_BUCKET}"'/raredisease/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' + + with: + workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + bearer_token: ${{ secrets.TOWER_BEARER_TOKEN }} + compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + pipeline: ${{ github.repository }} + revision: ${{ github.sha }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} + parameters: | + { + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-${{ github.sha }}" + } + profiles: '[ "test_full", "aws_tower" ]' + diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 2b5dd6d7..c072e483 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -1,42 +1,28 @@ name: nf-core AWS test -# This workflow is triggered on push to the master branch. -# It can be additionally triggered manually with GitHub actions workflow dispatch. -# It runs the -profile 'test' on AWS batch. +# This workflow can be triggered manually with the GitHub actions workflow dispatch button. +# It runs the -profile 'test' on AWS batch on: workflow_dispatch: - - -env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - TOWER_ACCESS_TOKEN: ${{ secrets.AWS_TOWER_TOKEN }} - AWS_JOB_DEFINITION: ${{ secrets.AWS_JOB_DEFINITION }} - AWS_JOB_QUEUE: ${{ secrets.AWS_JOB_QUEUE }} - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} - - jobs: - run-awstest: + run-tower: name: Run AWS tests if: github.repository == 'nf-core/raredisease' runs-on: ubuntu-latest steps: - - name: Setup Miniconda - uses: conda-incubator/setup-miniconda@v2 + - name: Launch workflow via tower + uses: nf-core/tower-action@master + with: - auto-update-conda: true - python-version: 3.7 - - name: Install awscli - run: conda install -c conda-forge awscli - - name: Start AWS batch job - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix - run: | - aws batch submit-job \ - --region eu-west-1 \ - --job-name nf-core-raredisease \ - --job-queue $AWS_JOB_QUEUE \ - --job-definition $AWS_JOB_DEFINITION \ - --container-overrides '{"command": ["nf-core/raredisease", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://'"${AWS_S3_BUCKET}"'/raredisease/results-'"${GITHUB_SHA}"' -w s3://'"${AWS_S3_BUCKET}"'/raredisease/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' + workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + bearer_token: ${{ secrets.TOWER_BEARER_TOKEN }} + compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + pipeline: ${{ github.repository }} + revision: ${{ github.sha }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} + parameters: | + { + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-${{ github.sha }}" + } + profiles: '[ "test", "aws_tower" ]' + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..649d4c59 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "git.ignoreLimitWarning": true +} diff --git a/modules.json b/modules.json new file mode 100644 index 00000000..0494c19e --- /dev/null +++ b/modules.json @@ -0,0 +1,14 @@ +{ + "name": "nf-core/raredisease", + "homePage": "https://github.com/nf-core/raredisease", + "repos": { + "nf-core/modules": { + "fastqc": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "multiqc": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + } + } + } +} diff --git a/modules/nf-core/software/fastqc/functions.nf b/modules/nf-core/modules/fastqc/functions.nf similarity index 100% rename from modules/nf-core/software/fastqc/functions.nf rename to modules/nf-core/modules/fastqc/functions.nf diff --git a/modules/nf-core/software/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf similarity index 95% rename from modules/nf-core/software/fastqc/main.nf rename to modules/nf-core/modules/fastqc/main.nf index 7ce76adf..39c327b2 100644 --- a/modules/nf-core/software/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -29,7 +29,7 @@ process FASTQC { script: // Add soft-links to original FastQs for consistent naming in pipeline def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz diff --git a/modules/nf-core/software/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml similarity index 100% rename from modules/nf-core/software/fastqc/meta.yml rename to modules/nf-core/modules/fastqc/meta.yml diff --git a/modules/nf-core/software/multiqc/functions.nf b/modules/nf-core/modules/multiqc/functions.nf similarity index 100% rename from modules/nf-core/software/multiqc/functions.nf rename to modules/nf-core/modules/multiqc/functions.nf diff --git a/modules/nf-core/software/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf similarity index 100% rename from modules/nf-core/software/multiqc/main.nf rename to modules/nf-core/modules/multiqc/main.nf diff --git a/modules/nf-core/software/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml similarity index 100% rename from modules/nf-core/software/multiqc/meta.yml rename to modules/nf-core/modules/multiqc/meta.yml diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 13567c1d..986002e7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -57,8 +57,8 @@ multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \" // // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) -include { MULTIQC } from '../modules/nf-core/software/multiqc/main' addParams( options: multiqc_options ) +include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) +include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) /* ======================================================================================== From 7720a5d725ca309b31e087e07981554c29c63264 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 13 Jul 2021 10:58:59 +0200 Subject: [PATCH 0005/1921] delete vscode folder --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 649d4c59..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "git.ignoreLimitWarning": true -} From b3a73bd7d1bd7de24da22cf7638b74b9f0cc34f4 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 13 Jul 2021 11:25:32 +0200 Subject: [PATCH 0006/1921] updated sha for bwa --- modules.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 0494c19e..f2367aff 100644 --- a/modules.json +++ b/modules.json @@ -8,7 +8,13 @@ }, "multiqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "bwamem2/index": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "bwamem2/mem": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } -} +} \ No newline at end of file From 001aa4be6a5e7cb12e5c6140467407bd8bf9d173 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 13 Jul 2021 17:25:14 +0200 Subject: [PATCH 0007/1921] added samtools merge --- conf/modules.config | 12 +++- modules.json | 6 ++ .../modules/samtools/index/functions.nf | 68 +++++++++++++++++++ .../nf-core/modules/samtools/index/main.nf | 35 ++++++++++ .../nf-core/modules/samtools/index/meta.yml | 47 +++++++++++++ .../modules/samtools/merge/functions.nf | 68 +++++++++++++++++++ .../nf-core/modules/samtools/merge/main.nf | 35 ++++++++++ .../nf-core/modules/samtools/merge/meta.yml | 44 ++++++++++++ workflows/raredisease.nf | 15 ++++ 9 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/modules/samtools/index/functions.nf create mode 100644 modules/nf-core/modules/samtools/index/main.nf create mode 100644 modules/nf-core/modules/samtools/index/meta.yml create mode 100644 modules/nf-core/modules/samtools/merge/functions.nf create mode 100644 modules/nf-core/modules/samtools/merge/main.nf create mode 100644 modules/nf-core/modules/samtools/merge/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 8725ffea..41a9d8ef 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -30,7 +30,17 @@ params { publish_files = false } 'bwa_mem2_mem' { - args = '' + args = '-M' + } + 'merge_bam_mapping' { + publish_by_meta = true + publish_files = ['bam':'mapped'] + publish_dir = 'preprocessing' + } + 'samtools_index_mapping' { + publish_by_meta = true + publish_files = ['bai':'mapped'] + publish_dir = 'preprocessing' } 'multiqc' { args = '' diff --git a/modules.json b/modules.json index f2367aff..41924fbe 100644 --- a/modules.json +++ b/modules.json @@ -14,6 +14,12 @@ }, "bwamem2/mem": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "samtools/merge": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "samtools/index": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } diff --git a/modules/nf-core/modules/samtools/index/functions.nf b/modules/nf-core/modules/samtools/index/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/samtools/index/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf new file mode 100644 index 00000000..778e9384 --- /dev/null +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_INDEX { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + } else { + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bai"), optional:true, emit: bai + tuple val(meta), path("*.csi"), optional:true, emit: csi + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools index $options.args $bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml new file mode 100644 index 00000000..5d076e3b --- /dev/null +++ b/modules/nf-core/modules/samtools/index/meta.yml @@ -0,0 +1,47 @@ +name: samtools_index +description: Index SAM/BAM/CRAM file +keywords: + - index + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +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}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - csi: + type: file + description: CSI index file + pattern: "*.{csi}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@ewels" diff --git a/modules/nf-core/modules/samtools/merge/functions.nf b/modules/nf-core/modules/samtools/merge/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/samtools/merge/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf new file mode 100644 index 00000000..81b2828c --- /dev/null +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_MERGE { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + } else { + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + } + + input: + tuple val(meta), path(bams) + + output: + tuple val(meta), path("*merged.bam"), emit: merged_bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools merge ${prefix}_merged.bam $bams + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/nf-core/modules/samtools/merge/meta.yml new file mode 100644 index 00000000..9092f22e --- /dev/null +++ b/modules/nf-core/modules/samtools/merge/meta.yml @@ -0,0 +1,44 @@ +name: samtools_merge +description: Merge BAM file +keywords: + - merge + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam,cram,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - merged_bam: + type: file + description: BAM file + pattern: "*.{bam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c5216a79..37cbe5a6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -60,6 +60,8 @@ multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \" include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) include { BWAMEM2_INDEX } from '../modules/nf-core/modules/bwamem2/index/main' addParams( options: modules['bwa_mem2_index'] ) include { BWAMEM2_MEM } from '../modules/nf-core/modules/bwamem2/mem/main' addParams( options: modules['bwa_mem2_mem'] ) +include { SAMTOOLS_MERGE } from '../modules/nf-core/modules/samtools/merge/main' addParams(options: modules['merge_bam_mapping']) +include { SAMTOOLS_INDEX } from '../modules/nf-core/modules/samtools/index/main' addParams(options: modules['samtools_index_mapping']) include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) /* @@ -102,6 +104,19 @@ workflow RAREDISEASE { ) ch_software_versions = ch_software_versions.mix(BWAMEM2_MEM.out.version.ifEmpty(null)) + bam_bwa = BWAMEM2_MEM.out.bam + + bam_bwa.map{ meta, bam -> + meta.id = meta.id.split('_')[0] + [meta, bam] + }.groupTuple().branch{ + single: it[1].size() == 1 + multiple: it[1].size() > 1 + }.set{ bam_bwa_to_sort } + + SAMTOOLS_MERGE(bam_bwa_to_sort.multiple) + ch_software_versions = ch_software_versions.mix(SAMTOOLS_MERGE.out.version.ifEmpty(null)) + // // MODULE: Pipeline reporting // From ebae6ba1c2502bfc78b8a6f153d200fcebe1c01a Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 14 Jul 2021 15:52:29 +0200 Subject: [PATCH 0008/1921] added samtools sort --- conf/modules.config | 6 ++ modules.json | 3 + .../modules/samtools/sort/functions.nf | 68 +++++++++++++++++++ modules/nf-core/modules/samtools/sort/main.nf | 35 ++++++++++ .../nf-core/modules/samtools/sort/meta.yml | 43 ++++++++++++ workflows/raredisease.nf | 17 +++-- 6 files changed, 165 insertions(+), 7 deletions(-) create mode 100644 modules/nf-core/modules/samtools/sort/functions.nf create mode 100644 modules/nf-core/modules/samtools/sort/main.nf create mode 100644 modules/nf-core/modules/samtools/sort/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 41a9d8ef..8e0a3894 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -31,8 +31,14 @@ params { } 'bwa_mem2_mem' { args = '-M' + publish_files = false + } + 'samtools_sort' { + suffix = '.sorted' + publish_files = false } 'merge_bam_mapping' { + suffix = '.sorted' publish_by_meta = true publish_files = ['bam':'mapped'] publish_dir = 'preprocessing' diff --git a/modules.json b/modules.json index 41924fbe..dc4da7a4 100644 --- a/modules.json +++ b/modules.json @@ -20,6 +20,9 @@ }, "samtools/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "samtools/sort": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } diff --git a/modules/nf-core/modules/samtools/sort/functions.nf b/modules/nf-core/modules/samtools/sort/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/samtools/sort/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf new file mode 100644 index 00000000..240e8e9f --- /dev/null +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_SORT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + } else { + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools sort $options.args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml new file mode 100644 index 00000000..704e8c1f --- /dev/null +++ b/modules/nf-core/modules/samtools/sort/meta.yml @@ -0,0 +1,43 @@ +name: samtools_sort +description: Sort SAM/BAM/CRAM file +keywords: + - sort + - 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: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +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}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@ewels" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 37cbe5a6..22840acc 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -60,6 +60,7 @@ multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \" include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) include { BWAMEM2_INDEX } from '../modules/nf-core/modules/bwamem2/index/main' addParams( options: modules['bwa_mem2_index'] ) include { BWAMEM2_MEM } from '../modules/nf-core/modules/bwamem2/mem/main' addParams( options: modules['bwa_mem2_mem'] ) +include { SAMTOOLS_SORT } from '../modules/nf-core/modules/samtools/sort/main' addParams(options: modules['samtools_sort']) include { SAMTOOLS_MERGE } from '../modules/nf-core/modules/samtools/merge/main' addParams(options: modules['merge_bam_mapping']) include { SAMTOOLS_INDEX } from '../modules/nf-core/modules/samtools/index/main' addParams(options: modules['samtools_index_mapping']) include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) @@ -95,28 +96,30 @@ workflow RAREDISEASE { // // MODULE: Run BWAMEM2 // - BWAMEM2_INDEX ( - params.fasta - ) + BWAMEM2_INDEX ( params.fasta ) BWAMEM2_MEM ( INPUT_CHECK.out.reads, BWAMEM2_INDEX.out.index ) ch_software_versions = ch_software_versions.mix(BWAMEM2_MEM.out.version.ifEmpty(null)) - bam_bwa = BWAMEM2_MEM.out.bam + SAMTOOLS_SORT( BWAMEM2_MEM.out.bam ) + + sorted_bam_bwa = SAMTOOLS_SORT.out.bam - bam_bwa.map{ meta, bam -> + sorted_bam_bwa.map{ meta, bam -> meta.id = meta.id.split('_')[0] [meta, bam] }.groupTuple().branch{ single: it[1].size() == 1 multiple: it[1].size() > 1 - }.set{ bam_bwa_to_sort } + }.set{ bam_bwa } - SAMTOOLS_MERGE(bam_bwa_to_sort.multiple) + SAMTOOLS_MERGE(bam_bwa.multiple) ch_software_versions = ch_software_versions.mix(SAMTOOLS_MERGE.out.version.ifEmpty(null)) + SAMTOOLS_INDEX(SAMTOOLS_MERGE.out.merged_bam) + // // MODULE: Pipeline reporting // From 2b963598ce3358316e2027e885dff164311033f7 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 15 Jul 2021 12:48:12 +0200 Subject: [PATCH 0009/1921] added samtools stats --- modules.json | 3 + .../modules/samtools/stats/functions.nf | 68 +++++++++++++++++++ .../nf-core/modules/samtools/stats/main.nf | 34 ++++++++++ .../nf-core/modules/samtools/stats/meta.yml | 47 +++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 modules/nf-core/modules/samtools/stats/functions.nf create mode 100644 modules/nf-core/modules/samtools/stats/main.nf create mode 100644 modules/nf-core/modules/samtools/stats/meta.yml diff --git a/modules.json b/modules.json index dc4da7a4..754655fa 100644 --- a/modules.json +++ b/modules.json @@ -23,6 +23,9 @@ }, "samtools/sort": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "samtools/stats": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } diff --git a/modules/nf-core/modules/samtools/stats/functions.nf b/modules/nf-core/modules/samtools/stats/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/samtools/stats/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf new file mode 100644 index 00000000..6bb0a4c7 --- /dev/null +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -0,0 +1,34 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_STATS { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + } else { + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + } + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("*.stats"), emit: stats + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools stats $bam > ${bam}.stats + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/samtools/stats/meta.yml b/modules/nf-core/modules/samtools/stats/meta.yml new file mode 100644 index 00000000..b549ff5c --- /dev/null +++ b/modules/nf-core/modules/samtools/stats/meta.yml @@ -0,0 +1,47 @@ +name: samtools_stats +description: Produces comprehensive statistics from SAM/BAM/CRAM file +keywords: + - statistics + - counts + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +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: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - stats: + type: file + description: File containing samtools stats output + pattern: "*.{stats}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" From 85566234d39c57f19e90cbd2bca2557b1c96801f Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 15 Jul 2021 15:25:50 +0200 Subject: [PATCH 0010/1921] added samtools view --- modules.json | 3 + .../modules/samtools/view/functions.nf | 68 +++++++++++++++++++ modules/nf-core/modules/samtools/view/main.nf | 35 ++++++++++ .../nf-core/modules/samtools/view/meta.yml | 43 ++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 modules/nf-core/modules/samtools/view/functions.nf create mode 100644 modules/nf-core/modules/samtools/view/main.nf create mode 100644 modules/nf-core/modules/samtools/view/meta.yml diff --git a/modules.json b/modules.json index 754655fa..ea50c306 100644 --- a/modules.json +++ b/modules.json @@ -26,6 +26,9 @@ }, "samtools/stats": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "samtools/view": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } diff --git a/modules/nf-core/modules/samtools/view/functions.nf b/modules/nf-core/modules/samtools/view/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/samtools/view/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf new file mode 100644 index 00000000..ec6c747f --- /dev/null +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + } else { + container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools view $options.args $bam > ${prefix}.bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/samtools/view/meta.yml b/modules/nf-core/modules/samtools/view/meta.yml new file mode 100644 index 00000000..c35a8b03 --- /dev/null +++ b/modules/nf-core/modules/samtools/view/meta.yml @@ -0,0 +1,43 @@ +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: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +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}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: filtered/converted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@joseespinosa" From ef1a98a12bfc5b9ee94a2b9fc0d96cbe5900445f Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 15 Jul 2021 19:12:41 +0200 Subject: [PATCH 0011/1921] modularized preliminary mapping --- subworkflows/nf-core/mapping.nf | 57 +++++++++++++++++++++++++++++++++ workflows/raredisease.nf | 45 ++++++++------------------ 2 files changed, 71 insertions(+), 31 deletions(-) create mode 100644 subworkflows/nf-core/mapping.nf diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf new file mode 100644 index 00000000..b12dc833 --- /dev/null +++ b/subworkflows/nf-core/mapping.nf @@ -0,0 +1,57 @@ +/* +======================================================================================== + MAPPING +======================================================================================== +*/ + +params.bwamem2_idx_options = [:] +params.bwamem2_mem_options = [:] +params.samtools_idx_options = [:] +params.samtools_merge_options = [:] +params.samtools_sort_options = [:] +params.samtools_stats_options = [:] +params.samtools_view_options = [:] + +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) +include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) +include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams(options: params.samtools_merge_options ) +include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) +include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) +include { SAMTOOLS_VIEW } from '../../modules/nf-core/modules/samtools/view/main' addParams(options: params.samtools_view_options ) + + +workflow MAPPING { + take: + reads_input // channel: [mandatory] meta, reads_input + fasta // channel: [mandatory] fasta + + main: + + BWAMEM2_INDEX ( fasta ) + BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) + bwamem2_version = BWAMEM2_MEM.out.version + + SAMTOOLS_SORT( BWAMEM2_MEM.out.bam ) + sorted_bam_bwa = SAMTOOLS_SORT.out.bam + + sorted_bam_bwa.map{ meta, bam -> + meta.id = meta.id.split('_')[0] + [meta, bam] + }.groupTuple().branch{ + single: it[1].size() == 1 + multiple: it[1].size() > 1 + }.set{ bam_bwa } + + SAMTOOLS_MERGE( bam_bwa.multiple ) + SAMTOOLS_INDEX( SAMTOOLS_MERGE.out.merged_bam ) + samtools_version = SAMTOOLS_SORT.out.version + + emit: + bam = SAMTOOLS_MERGE.out.merged_bam + bai = SAMTOOLS_INDEX.out.bai + + bwamem2_version + samtools_version +} + diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 22840acc..5d835280 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -58,13 +58,19 @@ multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \" // MODULE: Installed directly from nf-core/modules // include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) -include { BWAMEM2_INDEX } from '../modules/nf-core/modules/bwamem2/index/main' addParams( options: modules['bwa_mem2_index'] ) -include { BWAMEM2_MEM } from '../modules/nf-core/modules/bwamem2/mem/main' addParams( options: modules['bwa_mem2_mem'] ) -include { SAMTOOLS_SORT } from '../modules/nf-core/modules/samtools/sort/main' addParams(options: modules['samtools_sort']) -include { SAMTOOLS_MERGE } from '../modules/nf-core/modules/samtools/merge/main' addParams(options: modules['merge_bam_mapping']) -include { SAMTOOLS_INDEX } from '../modules/nf-core/modules/samtools/index/main' addParams(options: modules['samtools_index_mapping']) include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) +// +// SUBWORKFLOW: Consists entirely of nf-core/modules +// +include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( + bwamem2_idx_options: modules['bwa_mem2_index'], + bwamem2_mem_options: modules['bwa_mem2_mem'], + samtools_idx_options: modules['samtools_index_mapping'], + samtools_merge_options: modules['merge_bam_mapping'], + samtools_sort_options: modules['samtools_sort'], + ) + /* ======================================================================================== RUN MAIN WORKFLOW @@ -93,32 +99,9 @@ workflow RAREDISEASE { ) ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) - // - // MODULE: Run BWAMEM2 - // - BWAMEM2_INDEX ( params.fasta ) - - BWAMEM2_MEM ( - INPUT_CHECK.out.reads, BWAMEM2_INDEX.out.index - ) - ch_software_versions = ch_software_versions.mix(BWAMEM2_MEM.out.version.ifEmpty(null)) - - SAMTOOLS_SORT( BWAMEM2_MEM.out.bam ) - - sorted_bam_bwa = SAMTOOLS_SORT.out.bam - - sorted_bam_bwa.map{ meta, bam -> - meta.id = meta.id.split('_')[0] - [meta, bam] - }.groupTuple().branch{ - single: it[1].size() == 1 - multiple: it[1].size() > 1 - }.set{ bam_bwa } - - SAMTOOLS_MERGE(bam_bwa.multiple) - ch_software_versions = ch_software_versions.mix(SAMTOOLS_MERGE.out.version.ifEmpty(null)) - - SAMTOOLS_INDEX(SAMTOOLS_MERGE.out.merged_bam) + MAPPING ( INPUT_CHECK.out.reads, params.fasta ) + ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) // // MODULE: Pipeline reporting From 84867bb10b775c3a5598d02276d5ac7a2992bfdb Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 20 Jul 2021 10:56:14 +0200 Subject: [PATCH 0012/1921] modularized mapping and breaking alnmt into contigs --- conf/modules.config | 23 ++++---- modules.json | 3 -- .../samtools/merge/functions.nf | 0 .../modules => local}/samtools/merge/main.nf | 8 +-- .../modules => local}/samtools/merge/meta.yml | 0 subworkflows/local/merge2break.nf | 39 ++++++++++++++ subworkflows/nf-core/mapping.nf | 52 ++++++++----------- workflows/raredisease.nf | 11 +++- 8 files changed, 88 insertions(+), 48 deletions(-) rename modules/{nf-core/modules => local}/samtools/merge/functions.nf (100%) rename modules/{nf-core/modules => local}/samtools/merge/main.nf (82%) rename modules/{nf-core/modules => local}/samtools/merge/meta.yml (100%) create mode 100644 subworkflows/local/merge2break.nf diff --git a/conf/modules.config b/conf/modules.config index 8e0a3894..bf53a13a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -33,20 +33,21 @@ params { args = '-M' publish_files = false } + 'samtools_merge' { + args = "--write-index -f" + publish_dir = 'samtools_merge' + } + 'samtools_index' { + args = '' + } 'samtools_sort' { - suffix = '.sorted' - publish_files = false + suffix = '_sorted' } - 'merge_bam_mapping' { - suffix = '.sorted' - publish_by_meta = true - publish_files = ['bam':'mapped'] - publish_dir = 'preprocessing' + 'samtools_stats' { + args = '-s --remove-overlaps' } - 'samtools_index_mapping' { - publish_by_meta = true - publish_files = ['bai':'mapped'] - publish_dir = 'preprocessing' + 'samtools_view'{ + args = '' } 'multiqc' { args = '' diff --git a/modules.json b/modules.json index ea50c306..9f5f26be 100644 --- a/modules.json +++ b/modules.json @@ -15,9 +15,6 @@ "bwamem2/mem": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "samtools/merge": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" - }, "samtools/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/modules/nf-core/modules/samtools/merge/functions.nf b/modules/local/samtools/merge/functions.nf similarity index 100% rename from modules/nf-core/modules/samtools/merge/functions.nf rename to modules/local/samtools/merge/functions.nf diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/local/samtools/merge/main.nf similarity index 82% rename from modules/nf-core/modules/samtools/merge/main.nf rename to modules/local/samtools/merge/main.nf index 81b2828c..ba0f703f 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/local/samtools/merge/main.nf @@ -19,17 +19,19 @@ process SAMTOOLS_MERGE { } input: - tuple val(meta), path(bams) + tuple val(meta), path(bams), path(bai) + val chr output: - tuple val(meta), path("*merged.bam"), emit: merged_bam + tuple val(meta), path("*.bam"), emit: merged_bam + tuple val(meta), path("*.csi"), optional:true, emit: csi path "*.version.txt" , emit: version script: def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ - samtools merge ${prefix}_merged.bam $bams + samtools merge $options.args -R ${chr} ${prefix}.sorted.${chr}.bam $bams echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt """ } diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/local/samtools/merge/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/merge/meta.yml rename to modules/local/samtools/merge/meta.yml diff --git a/subworkflows/local/merge2break.nf b/subworkflows/local/merge2break.nf new file mode 100644 index 00000000..67761c38 --- /dev/null +++ b/subworkflows/local/merge2break.nf @@ -0,0 +1,39 @@ +// +// Merge bams and then break into contigs. +// + +params.samtools_idx_options = [:] +params.samtools_merge_options = [:] +params.samtools_view_options = [:] + +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) +include { SAMTOOLS_MERGE } from '../../modules/local/samtools/merge/main' addParams( options: params.samtools_merge_options ) +include { SAMTOOLS_VIEW } from '../../modules/nf-core/modules/samtools/view/main' addParams( options: params.samtools_view_options ) + +workflow MERGE2BREAK { + // chr = Channel.of(1..22, 'X', 'Y', 'M').map{ "chr" + it } + chr = "chr20" + // TODO: need to write a validation check for chromosomes present in bam files? potentially not needed as fastq likely to map to psuedo-regions in other chrom. + + take: + fasta // channel: [mandatory] fasta + bam // channel: [mandatory] [ val(meta), [ bam ] ] + bai // channel: [mandatory for regional merge] [ val(meta), [ bai ] ] + + main: + new_bam = bam.join(bai) + new_bam.map{ meta, bam, bai -> + new_meta = meta.clone() + new_meta.id = new_meta.id.split('_')[0] + [new_meta, bam, bai] + }.groupTuple().branch{ + single: it[1].size() == 1 + multiple: it[1].size() > 1 + }.set{ bam_bwa } + + SAMTOOLS_MERGE ( bam_bwa.multiple, chr ) + + emit: + bam = SAMTOOLS_MERGE.out.merged_bam + csi = SAMTOOLS_MERGE.out.csi +} diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index b12dc833..7f6409df 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -1,24 +1,18 @@ -/* -======================================================================================== - MAPPING -======================================================================================== -*/ +// +// Map to reference, sort + index + stats each alignment file. +// params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] params.samtools_idx_options = [:] -params.samtools_merge_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] -params.samtools_view_options = [:] include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) -include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams(options: params.samtools_merge_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) -include { SAMTOOLS_VIEW } from '../../modules/nf-core/modules/samtools/view/main' addParams(options: params.samtools_view_options ) workflow MAPPING { @@ -27,31 +21,31 @@ workflow MAPPING { fasta // channel: [mandatory] fasta main: + // Index + BWAMEM2_INDEX ( fasta ) - BWAMEM2_INDEX ( fasta ) - BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) - bwamem2_version = BWAMEM2_MEM.out.version + // Map, sort, and index + BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) + SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) + SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - SAMTOOLS_SORT( BWAMEM2_MEM.out.bam ) - sorted_bam_bwa = SAMTOOLS_SORT.out.bam + // Join the mapped bam + bai paths by their keys + bam_sorted_indexed = Channel.empty() + bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) - sorted_bam_bwa.map{ meta, bam -> - meta.id = meta.id.split('_')[0] - [meta, bam] - }.groupTuple().branch{ - single: it[1].size() == 1 - multiple: it[1].size() > 1 - }.set{ bam_bwa } + // Get stats + SAMTOOLS_STATS ( bam_sorted_indexed ) + // TODO: MIP adds an add'l line to the stats file: percentage mapped: ((mapped/total raw) * 100). I think we should write a process to handle this. - SAMTOOLS_MERGE( bam_bwa.multiple ) - SAMTOOLS_INDEX( SAMTOOLS_MERGE.out.merged_bam ) - samtools_version = SAMTOOLS_SORT.out.version + // Collect versions + bwamem2_version = BWAMEM2_MEM.out.version + samtools_version = SAMTOOLS_SORT.out.version emit: - bam = SAMTOOLS_MERGE.out.merged_bam - bai = SAMTOOLS_INDEX.out.bai + bam = SAMTOOLS_SORT.out.bam + bai = SAMTOOLS_INDEX.out.bai + stats = SAMTOOLS_STATS.out.stats - bwamem2_version - samtools_version + bwamem2_version + samtools_version } - diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5d835280..d6c3cf60 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -45,6 +45,11 @@ include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' // include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) +include { MERGE2BREAK } from '../subworkflows/local/merge2break' addParams( + samtools_merge_options: modules['samtools_merge'], + samtools_view_options: modules['samtools_view'], +) + /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -66,9 +71,9 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], - samtools_idx_options: modules['samtools_index_mapping'], - samtools_merge_options: modules['merge_bam_mapping'], + samtools_idx_options: modules['samtools_index'], samtools_sort_options: modules['samtools_sort'], + samtools_stats_options: modules['samtools_stats'] ) /* @@ -103,6 +108,8 @@ workflow RAREDISEASE { ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) + MERGE2BREAK ( params.fasta, MAPPING.out.bam, MAPPING.out.bai ) + // // MODULE: Pipeline reporting // From f56e3aa5b3676e84a0d7f21b1c3063285de9ce3e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 21 Jul 2021 10:33:43 +0200 Subject: [PATCH 0013/1921] added calculate percntg mapped --- conf/modules.config | 6 +++++- modules/local/calculate_mapped.nf | 31 +++++++++++++++++++++++++++++++ subworkflows/local/merge2break.nf | 2 ++ subworkflows/nf-core/mapping.nf | 6 ++++-- testdata_sarek/rd_tiny.csv~ | 14 -------------- 5 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 modules/local/calculate_mapped.nf delete mode 100644 testdata_sarek/rd_tiny.csv~ diff --git a/conf/modules.config b/conf/modules.config index bf53a13a..15736268 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -33,6 +33,9 @@ params { args = '-M' publish_files = false } + 'map_dir' { + publish_dir = '' + } 'samtools_merge' { args = "--write-index -f" publish_dir = 'samtools_merge' @@ -45,9 +48,10 @@ params { } 'samtools_stats' { args = '-s --remove-overlaps' + publish_files = false } 'samtools_view'{ - args = '' + args = '--output-fmt BAM' } 'multiqc' { args = '' diff --git a/modules/local/calculate_mapped.nf b/modules/local/calculate_mapped.nf new file mode 100644 index 00000000..29a4cea1 --- /dev/null +++ b/modules/local/calculate_mapped.nf @@ -0,0 +1,31 @@ +// Import generic module functions +include { initOptions; saveFiles } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process CALCULATE_MAPPED { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:"samtools", meta:[:], publish_by_meta:['id']) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + tuple val(meta), path(stats) + + output: + path "*.stats" , emit: stats + + script: + def prefix = stats.getSimpleName() + """ + cat $stats | grep -E "raw total sequences:|reads mapped:" | cut -f3 | tr '\\n' '\\t' | awk '{print (\$2/\$1) * 100}' | while read line; do awk -v p=\$line 'NR==15 {print "percentage mapped reads:\\t" p }1' $stats; done > ${prefix}.stats + """ +} diff --git a/subworkflows/local/merge2break.nf b/subworkflows/local/merge2break.nf index 67761c38..cce34384 100644 --- a/subworkflows/local/merge2break.nf +++ b/subworkflows/local/merge2break.nf @@ -32,6 +32,8 @@ workflow MERGE2BREAK { }.set{ bam_bwa } SAMTOOLS_MERGE ( bam_bwa.multiple, chr ) + // TODO: Singles? WELLL, we shall re-name instead + // SAMTOOLS_VIEW ( bam_bwa.single ) emit: bam = SAMTOOLS_MERGE.out.merged_bam diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 7f6409df..c0feeb29 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -4,6 +4,7 @@ params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] +params.calculate_mapped_options = [:] params.samtools_idx_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] @@ -13,6 +14,7 @@ include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' a include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) +include { CALCULATE_MAPPED } from '../../modules/local/calculate_mapped' addParams(options: params.calculate_mapped_options ) workflow MAPPING { @@ -35,7 +37,7 @@ workflow MAPPING { // Get stats SAMTOOLS_STATS ( bam_sorted_indexed ) - // TODO: MIP adds an add'l line to the stats file: percentage mapped: ((mapped/total raw) * 100). I think we should write a process to handle this. + CALCULATE_MAPPED ( SAMTOOLS_STATS.out.stats ) // Collect versions bwamem2_version = BWAMEM2_MEM.out.version @@ -44,7 +46,7 @@ workflow MAPPING { emit: bam = SAMTOOLS_SORT.out.bam bai = SAMTOOLS_INDEX.out.bai - stats = SAMTOOLS_STATS.out.stats + stats = CALCULATE_MAPPED.out.stats bwamem2_version samtools_version diff --git a/testdata_sarek/rd_tiny.csv~ b/testdata_sarek/rd_tiny.csv~ deleted file mode 100644 index 4127c094..00000000 --- a/testdata_sarek/rd_tiny.csv~ +++ /dev/null @@ -1,14 +0,0 @@ -sample,fastq_1,fastq_2 -1234N,testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz -1234N,testdata_sarek/dummy/normal/dummy_n_R1_xxx.fastq.gz,testdata_sarek/dummy/normal/dummy_n_R2_xxx.fastq.gz -9876T,testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz -9876T,testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz -9876T,testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz -9876T,testdata_sarek/dummy/tumor/dummy_t_R1_xxx.fastq.gz,testdata_sarek/dummy/tumor/dummy_t_R2_xxx.fastq.gz -9877R,testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz -9877R,testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz -9877R,testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz From 729446ae93bad7fa2b3704d2d5cd723dffa67ad8 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 23 Jul 2021 09:59:37 +0200 Subject: [PATCH 0014/1921] placeholder for read group map --- conf/modules.config | 2 +- subworkflows/nf-core/mapping.nf | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 15736268..503a105c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -30,7 +30,7 @@ params { publish_files = false } 'bwa_mem2_mem' { - args = '-M' + args = '-M -K 100000000' publish_files = false } 'map_dir' { diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index c0feeb29..7a6d7fd6 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -26,6 +26,16 @@ workflow MAPPING { // Index BWAMEM2_INDEX ( fasta ) + // Add @RG, there should be a conditional for this in case read group is not needed + reads_input.map{ meta, reads -> + new_meta = meta.clone() + reads[0].baseName.split('_').init() + + // Should there be a process to catch the RG from fastq headers? + // "\"@RG\\tID:${row.lane}\\t${CN}PU:${row.lane}\\tSM:${row.sample}\\tLB:${row.sample}\\tPL:ILLUMINA\"" + // meta.read_group = read_group + }.view() + // Map, sort, and index BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) From 2c341313bc153787fced9e9991fe71a30b449c88 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 12 Aug 2021 13:47:24 +0200 Subject: [PATCH 0015/1921] updated samplesheet checks in both .py and .nf --- assets/samplesheet.csv | 4 +- bin/check_samplesheet.py | 38 ++++++------------ conf/test.config | 2 +- nextflow.config | 1 + subworkflows/local/input_check.nf | 22 +++++++++- subworkflows/local/merge2break.nf | 13 +++--- subworkflows/nf-core/mapping.nf | 10 ----- testdata_sarek/rd_tiny.csv | 12 ------ testdata_sarek/rd_tiny_mod.csv | 6 +++ .../tumor/tiny_t_L001_R1_xxx.fastq.gz | Bin 27427 -> 0 bytes .../tumor/tiny_t_L001_R2_xxx.fastq.gz | Bin 26833 -> 0 bytes .../tumor/tiny_t_L002_R1_xxx.fastq.gz | Bin 47308 -> 0 bytes .../tumor/tiny_t_L002_R2_xxx.fastq.gz | Bin 45779 -> 0 bytes .../tumor/tiny_t_L003_R1_xxx.fastq.gz | Bin 45864 -> 0 bytes .../tumor/tiny_t_L003_R2_xxx.fastq.gz | Bin 45400 -> 0 bytes .../tumor/tiny_t_L005_R1_xxx.fastq.gz | Bin 48397 -> 0 bytes .../tumor/tiny_t_L005_R2_xxx.fastq.gz | Bin 48850 -> 0 bytes .../tumor/tiny_t_L006_R1_xxx.fastq.gz | Bin 46027 -> 0 bytes .../tumor/tiny_t_L006_R2_xxx.fastq.gz | Bin 45277 -> 0 bytes .../tumor/tiny_t_L007_R1_xxx.fastq.gz | Bin 20812 -> 0 bytes .../tumor/tiny_t_L007_R2_xxx.fastq.gz | Bin 21180 -> 0 bytes workflows/raredisease.nf | 6 +-- 22 files changed, 51 insertions(+), 63 deletions(-) delete mode 100644 testdata_sarek/rd_tiny.csv create mode 100644 testdata_sarek/rd_tiny_mod.csv delete mode 100644 testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 5f653ab7..d2a41795 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1 @@ -sample,fastq_1,fastq_2 -SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, +sample,sex,phenotype,paternal_id,maternal_id,case_id,lane,fastq_1,fastq_2 diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index d8831053..507ea853 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -1,8 +1,5 @@ #!/usr/bin/env python -# TODO nf-core: Update the script to check the samplesheet -# This script is based on the example at: https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv - import os import sys import errno @@ -38,17 +35,13 @@ def print_error(error, context="Line", context_str=""): sys.exit(1) -# TODO nf-core: Update the check_samplesheet function def check_samplesheet(file_in, file_out): """ This function checks that the samplesheet follows the following structure: - sample,fastq_1,fastq_2 - SAMPLE_PE,SAMPLE_PE_RUN1_1.fastq.gz,SAMPLE_PE_RUN1_2.fastq.gz - SAMPLE_PE,SAMPLE_PE_RUN2_1.fastq.gz,SAMPLE_PE_RUN2_2.fastq.gz - SAMPLE_SE,SAMPLE_SE_RUN1_1.fastq.gz, + sample,sex,phenotype,paternal_id,maternal_id,case_id,lane,fastq_1,fastq_2 - For an example see: + For an example see: MEI CHANGE THIS TO AN UPDATED LINK https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv """ @@ -57,8 +50,7 @@ def check_samplesheet(file_in, file_out): ## Check header MIN_COLS = 2 - # TODO nf-core: Update the column names for the input samplesheet - HEADER = ["sample", "fastq_1", "fastq_2"] + HEADER = ["sample", "lane", "fastq_1", "fastq_2", "sex", "phenotype", "paternal_id", "maternal_id", "case_id"] header = [x.strip('"') for x in fin.readline().strip().split(",")] if header[: len(HEADER)] != HEADER: print("ERROR: Please check samplesheet header -> {} != {}".format(",".join(header), ",".join(HEADER))) @@ -84,7 +76,7 @@ def check_samplesheet(file_in, file_out): ) ## Check sample name entries - sample, fastq_1, fastq_2 = lspl[: len(HEADER)] + sample, lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id = lspl[: len(HEADER)] sample = sample.replace(" ", "_") if not sample: print_error("Sample entry has not been specified!", "Line", line) @@ -102,15 +94,15 @@ def check_samplesheet(file_in, file_out): ) ## Auto-detect paired-end/single-end - sample_info = [] ## [single_end, fastq_1, fastq_2] + sample_info = [] ## [single_end, lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id] if sample and fastq_1 and fastq_2: ## Paired-end short reads - sample_info = ["0", fastq_1, fastq_2] + sample_info = ["0", lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id] elif sample and fastq_1 and not fastq_2: ## Single-end short reads - sample_info = ["1", fastq_1, fastq_2] + sample_info = ["1", lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id] else: print_error("Invalid combination of columns provided!", "Line", line) - ## Create sample mapping dictionary = { sample: [ single_end, fastq_1, fastq_2 ] } + ## Create sample mapping dictionary = { sample: [ single_end, sex, phenotype, paternal_id, maternal_id, case_id, lane, fastq_1, fastq_2 ] } if sample not in sample_mapping_dict: sample_mapping_dict[sample] = [sample_info] else: @@ -124,15 +116,11 @@ def check_samplesheet(file_in, file_out): out_dir = os.path.dirname(file_out) make_dir(out_dir) with open(file_out, "w") as fout: - fout.write(",".join(["sample", "single_end", "fastq_1", "fastq_2"]) + "\n") - for sample in sorted(sample_mapping_dict.keys()): - - ## Check that multiple runs of the same sample are of the same datatype - if not all(x[0] == sample_mapping_dict[sample][0][0] for x in sample_mapping_dict[sample]): - print_error("Multiple runs of a sample must be of the same datatype!", "Sample: {}".format(sample)) - - for idx, val in enumerate(sample_mapping_dict[sample]): - fout.write(",".join(["{}_T{}".format(sample, idx + 1)] + val) + "\n") + fout.write(",".join(["sample", "single_end", "lane", "fastq_1", "fastq_2", "sex", "phenotype", "paternal_id", "maternal_id", "case_id"]) + "\n") + for sample, sample_info in sorted(sample_mapping_dict.items()): + for val in sample_info: + lane = val[1] + fout.write(",".join(["{}_{}".format(sample, lane)] + val) + "\n") else: print_error("No entries to process!", "Samplesheet: {}".format(file_in)) diff --git a/conf/test.config b/conf/test.config index 9e89aa2e..84d3a223 100644 --- a/conf/test.config +++ b/conf/test.config @@ -22,7 +22,7 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'testdata_sarek/rd_tiny.csv' + input = 'testdata_sarek/rd_tiny_mod.csv' // Genome references fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' diff --git a/nextflow.config b/nextflow.config index 329e093e..a9f18428 100644 --- a/nextflow.config +++ b/nextflow.config @@ -15,6 +15,7 @@ params { // References genome = null + save_reference = false igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index b664bc8c..650258bd 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -13,11 +13,14 @@ workflow INPUT_CHECK { main: SAMPLESHEET_CHECK ( samplesheet ) .splitCsv ( header:true, sep:',' ) - .map { create_fastq_channels(it) } - .set { reads } + .set { sheet } + + reads = sheet.map { create_fastq_channels(it) } + sample = sheet.map { create_sample_channels(it) } emit: reads // channel: [ val(meta), [ reads ] ] + sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] @@ -26,6 +29,8 @@ def create_fastq_channels(LinkedHashMap row) { meta.id = row.sample meta.single_end = row.single_end.toBoolean() + // TODO: add read group to the meta map + def array = [] if (!file(row.fastq_1).exists()) { exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" @@ -40,3 +45,16 @@ def create_fastq_channels(LinkedHashMap row) { } return array } + +// Function to get a list of metadata (e.g. pedigree, case id) from the sample; [ meta ] +def create_sample_channels(LinkedHashMap row) { + def sample = [:] + sample.id = row.sample + sample.sex = row.sex + sample.phenotype = row.phenotype + sample.maternal = row.maternal_id + sample.paternal = row.paternal_id + sample.case_id = row.case_id + + return sample +} diff --git a/subworkflows/local/merge2break.nf b/subworkflows/local/merge2break.nf index cce34384..cd7af88e 100644 --- a/subworkflows/local/merge2break.nf +++ b/subworkflows/local/merge2break.nf @@ -1,19 +1,17 @@ // -// Merge bams and then break into contigs. +// Merge bams and then break into contigs (e.g. chromosomes). // -params.samtools_idx_options = [:] params.samtools_merge_options = [:] params.samtools_view_options = [:] -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) include { SAMTOOLS_MERGE } from '../../modules/local/samtools/merge/main' addParams( options: params.samtools_merge_options ) include { SAMTOOLS_VIEW } from '../../modules/nf-core/modules/samtools/view/main' addParams( options: params.samtools_view_options ) workflow MERGE2BREAK { // chr = Channel.of(1..22, 'X', 'Y', 'M').map{ "chr" + it } chr = "chr20" - // TODO: need to write a validation check for chromosomes present in bam files? potentially not needed as fastq likely to map to psuedo-regions in other chrom. + // TODO: need to write a validation check for chromosomes present in bam files and then chop bam file for each chr present. take: fasta // channel: [mandatory] fasta @@ -21,8 +19,8 @@ workflow MERGE2BREAK { bai // channel: [mandatory for regional merge] [ val(meta), [ bai ] ] main: - new_bam = bam.join(bai) - new_bam.map{ meta, bam, bai -> + bam_bai = bam.join(bai) + bam_bai.map{ meta, bam, bai -> new_meta = meta.clone() new_meta.id = new_meta.id.split('_')[0] [new_meta, bam, bai] @@ -31,8 +29,9 @@ workflow MERGE2BREAK { multiple: it[1].size() > 1 }.set{ bam_bwa } + SAMTOOLS_MERGE ( bam_bwa.multiple, chr ) - // TODO: Singles? WELLL, we shall re-name instead + // TODO: Singles? WELLL, we shall re-name instead of merge but still chop into contigs for each chr present. // SAMTOOLS_VIEW ( bam_bwa.single ) emit: diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 7a6d7fd6..c0feeb29 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -26,16 +26,6 @@ workflow MAPPING { // Index BWAMEM2_INDEX ( fasta ) - // Add @RG, there should be a conditional for this in case read group is not needed - reads_input.map{ meta, reads -> - new_meta = meta.clone() - reads[0].baseName.split('_').init() - - // Should there be a process to catch the RG from fastq headers? - // "\"@RG\\tID:${row.lane}\\t${CN}PU:${row.lane}\\tSM:${row.sample}\\tLB:${row.sample}\\tPL:ILLUMINA\"" - // meta.read_group = read_group - }.view() - // Map, sort, and index BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) diff --git a/testdata_sarek/rd_tiny.csv b/testdata_sarek/rd_tiny.csv deleted file mode 100644 index 74505e48..00000000 --- a/testdata_sarek/rd_tiny.csv +++ /dev/null @@ -1,12 +0,0 @@ -sample,fastq_1,fastq_2 -1234N,testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz -1234N,testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz -9876T,testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz -9876T,testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz -9876T,testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz -9877R,testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz -9877R,testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz -9877R,testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/testdata_sarek/rd_tiny_mod.csv b/testdata_sarek/rd_tiny_mod.csv new file mode 100644 index 00000000..7458234b --- /dev/null +++ b/testdata_sarek/rd_tiny_mod.csv @@ -0,0 +1,6 @@ +sample,lane,fastq_1,fastq_2,sex,phenotype,paternal_id,maternal_id,case_id +1234N,1,testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,4,testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,2,testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,7,testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,8,testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey diff --git a/testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz deleted file mode 100644 index 305cb53553530f9d778f1d756c97bba958cfabef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27427 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 diff --git a/testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz deleted file mode 100644 index 770ea2dfb7ae2d43b009fc07bd084702e73740cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26833 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 diff --git a/testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz deleted file mode 100644 index e591b6080e30363d25f46c7bf80836517a8f1e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47308 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 IyRa7m0AfZH{r~^~ diff --git a/testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz deleted file mode 100644 index 7c5f826f11f1d31210afb1a05782159e2a0645b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45779 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

HNBd_OocP) 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 nGRFDoWuVuonUVbYCdl diff --git a/testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz deleted file mode 100644 index 52059387c9744f64df6fbca94676a8992f36324a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45864 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 Y)Su^{dS1*Ia{Pb&12&p~eC*c&01B2jkpKVy diff --git a/testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz deleted file mode 100644 index def85db089263b07ed944fbc7e3fc72e37e8de6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48397 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 F0ss_ZOVj`W diff --git a/testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz deleted file mode 100644 index e6de821cddd3860c87430eb55e77077a20df237b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48850 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%0Dh0ZmoSxTC+A;=G?T!QQ) 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�^COm&PNpzi-P^iM2av>7Iw3r0U?|t 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 bd*H-2H9qz|r7(!wSoHq^GV&ThYzP7X($B)| diff --git a/testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz deleted file mode 100644 index 46ef89b257c35826587e82558031129358d85a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45277 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 F0swJyYIpzu diff --git a/testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz deleted file mode 100644 index 62e710307e8bfe85e8391661c703aaa212b4ec1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20812 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'xPT=MMw*OpdpZxYYppyyStfPLQb+>58 zbC#xY{b0>`wQbi9RWG)H2(Wh%T7H_sEkLV?3^%l-pTLl|`xw39#=C<-q3%#TOkIZP zU+iAH(|hHXN+6f8PY)dhnIa(`^s-I3h^95>SIRGyTT~#<^^DaYHLGLL9Q>7jJQ|-+P#gz zc0SO@+QTKAvL(lLnr|few$5=8Pj$&QaZx3_P|m@^b}PDAkOA%qyadHK6Gr>=d}PA? zy6$-x^)V<8$Gs`3yfB7J=&j3w9W#Hyk|RGMYB}a#&8k5V`vbb{i3XYQeaDBHlw{Pz zkZVd`EW+}R8EgXhsUz`zY0KBuagzF73KSOah|DziW?F9jsuXrCj8m&L zb30mStZ|>7DlJ-?`m%_%%k_0B2Ceu~)MYLt+aAtRZ(%#%;|N0a{a`!xMuz4J!~Mez zsVSEiBNR6CIGiUw$2p?1`gzK=MAy&H$uq2K-Ok6v|g$lKNgM_$gju!ehq14?skPUqa2+t6dPlC~AB4 zsi9N<#+ok;4P3mK3Ph412U4jbt7OzWhH%5m_8;tQbf?mU$@_1!^~*yD=4!nw+n=AkdA#Pjs0h_>jJUGMtpoc4Ng-F* z>MOD>?M9dp$>>48!GiFqFxCfEC*JLgA3M5Dv|eJZFQ^}ZW&7a6vZp4}herGP3Xe-R z{3Nn=4$V}MSTIURGs;y9P0YzT+))lzaw$n|y0R`sAi6*Y&V!vCUmuTu(BpQh+34xcVn+ zL$G-l2TL}GKfQN#n^O&raybx5CuLo{4?@ z!g{sak?y|#`)&t71ReF0zr`m*o@kEop~xeV2`ZQw6r1@1pGA5D;5#jyT-o0oN#2ux zy0~;X4~<_;uE#ER@bh~wx};yxAgj_Cm{NbJQ+1DmCKVth{Q%!zJMbseLP$K!k^gP)lgP-GhDh$+sf3NRq8{zaE~QJv~Afh zY=g4_%+^!hB#;iz`ShWu)wW21x5`>6`Kx0z-p+ArXEaVDxv7_ElK29cY&NK ztO{V>rCD+{Cq1vblnSPKxT;s3Y_#LsjMz)|K~a2?J2fpnk5D zpD^qzE=$<$$15fSho)~knf5JUofzOJd0#kYXF#*m6X1*S{zAE^66$Rx85Im@i_m-|4ff(5Fge0k-) zKBcZObqvenli`bOB4=%yN$1lvxpp8OEIRqj@9iVc&E=RvaK0z?>EW82zBFXy+Liz3 z*34ocCK(AG?lG{Nsbt)ySlB&__1zu3|~kZn-W^C3HZn+#j!vn;O2*&n-7;I7H}kd zeAQUCDSXWHQGn-@L5I@tUDUbXTwp|u*_?KWB+AT_D;a6AI}amba&NPXf%D+96G?Vq zi0Jyd)exHU?~s$EK!oc@e}LqYj68ef|rr+0++;04oqHe&3Gb zmWi+TnfM(AWxYSo_j9jf92n&0^n`eSso^Hw!$ZsS-tCIC!BI82GoHe&;fJh>!A7i|He!0}-wB2_LtuCN-X9GzXZ0=;GDX-Cs= zC(^83k2LPQ=CWy;q3?3&#(5Uw1>U2IZYHpm_y3jVY}lWSq#Xbll6=p0Gx6Z|Y!U=Q ztuFT;VO%s1CAKHM^+|CP=8wUC*hT%!4860xUYXZ=r8z%fc#;935?<|2lFxcN;ONVm zNln%^dDWOn_sTe5g!9*~uV0#Q&o7$nWh|Tf%}dUXDTiv^V-DKW^P{6SO_{n#6Yk^5 zEf4I`6Z0bdf?Qi4m@x&Rq|^|u_|d|70o1rNJ4bfv%JFEgunUL zm6Q@%1V)PDN+uGOW+1asn1>)exU|SPoU26ntIju)N^%Kr?e40siQH={MgciCX(Iy4 zj0FC&*vlyHjkHCNyWn4vRPW#rKE4MxiO6v~7N zsYyxxchkEu5wyZi`l%-e`dmy-#0({O78l~I46!#B-4LUsXdAZPN&2_rrksY}RjZ{S zB#KRVemlaMfGC7L|4djmGBPC|0TbpoJ+>h@_e5?Tvm2`+**^H9GK)>=Z0R2RHo7#M znFn{#uD+P$g3T%FlKPS+)ul@;sN?REdmTSHUUXfPeQldxb*~mBf4e`)ytpOV{FkLr z1_!al_cWu(TjVG)UtivJDNHuWIH#18Ha6?cpTPKlT$#|+_qe!lHJxR{Da!5g7iq%o z@uE8(G}&G{);}wxC2#0Q6639$4&P0Kl|=Ie+8~yJ;r`>ux`pqF`R)Mu_D;?UD?veSIW?MJ>~V+{HHm(rt{(b(nXrLm>-JG5iA)qQ4(&4v-5@DE%1IN?IvKq z9qLj>5bngcAmoP-l;s7qCurfd{xaWN`jbqPA>uWQa0sh(GZ3r;a7K(pky!81{&y`*r3GTahst&#%fauEt zoG70})+Y0v2gix`bAR@}H%-pIe0&<(r|!vF`*;fB%a?wNPsS2jpQ}$>{EwA%A2`i# ztl2cAfNr{a??DUyMf1tMSYAWW4lSpaw;h3kL68#t#Hw=z*82-Uc6Lw)2Xbg7y(6_H zMkR4`Rfv2$kf1O}ZZ9pzTtqwereWD6on=ba`0kpPYj4wqP|>jtM@*WUMh{Yxt|;10 znScpd1n*2~$_cB45hFA+?l%ASlTYeqb-6oN=wL-*l`x%TQU!_-h>{qm32U9kMZmRn z782x=#2t@4F6R1p&3#)9UE3Do)bTNdDE)8((%}b`mLeZe7uTo=(YPZ-1b;Tmat6nM zeGqp*!5Kg0;yKuuOlxu(GEma}2I7CXVpEj;(Dga%ma;0LWpmr0w>_y}R+YQ3zgEEt zQ~J>STz$!-!X*N861RjT!e~?ROXf$9eAL?B&7%T^vzU!vM{Vhl!!xz{EN^()=*LU$ zx{|xkb@PH}kkYF|=<;A5SaV6~NL7Ml@Sf21 z1>Zn6|2^Fx-BBp+L|XSsT9g+dR}ncsnOuI2RS07;)H9Cxetx3!UG+_G?eiRa8-CG$ z>UhaH1EXrPY>do)(N3z+TJLg`?P!9{T_qCK_-}h9wUO6ymC|BuIeE?V=KY zxTs7j1~#KweqLpu)gqiv3G3Ixnu=$YkvcZl7Y*1XZHUlnkEB>g(BAGC7!YY2tY_ zC7tVlaUs`yfzbgEZ*A_bVlA*KUSU+z?_A8mJq7FL^P}a~Bi(0<;bRe8$Z5L&r*E5f zb~b;EMhA!Ru@l|Z)V?WlzTFCkM%)V4ZBH@w6M6qS@2ZXU=fFZS>zJc`Ho3HaUg|NO zbI=NeYkAV%q&WcTKs zSGB1@Hp1%y*+5AZTtp@X#OZ=|ZmMlKk?V9WqfWVqAkI(B1#$>qb2{?mk!;WmwvO1` zlz)R(5c&vdUxhK5mH+5a&hzLpvZK2bY@1qbNPj>NBTBb0b+wsxnL*2*VT$)E4mcdUh zKY*tk#{Sf6?z^6aRs}p+_>BaCZ#U68{#k~z25y-qDlXi>D;f5c+X_vL2-ugMYH<}= zsWLdAv2c>uVTsKyeYE*buVxad9j>{ewtLf*Re`PjlEMdWD;gTxcBhr(U%obEb-f$1 z%6LJLukv32^2FVAH% zTi6=1!($*c($E3wT8?DcO`{k3qb5dPGpk~Yre=og2fSvs_fqh;4SXdJ8kn3>GZPx=A>dSk%(Z^g! zZk&-HXQb>zg**0k+J){>{O?39mv)2CxXU7uhz-j>HuW6jtqpddVKB7bdUoA&4aU{cbc}SU$7qJWuUO^YUP{Hn zf(pP^?ZMrV+C*=JsdPyzM%>c~Tq{C#I&|2RHHVqxBrcfPk*7WlO(cDOx0t0T_x0I* zi)TUt&v^m%d03VqOeV*?A^(%StBsv$Vl3HOELR`w>`CMDAMzPH0uF(!UJi!!Mn9Ec?fvh_+!preo9t3BUOd&2K06WQoPI z_G0RW+_de`)y6am zlKeWsPd~oh5Kam3_cxb4`l;dwp?A1u~Av%_aB4j}-%XOj!TQI?R z`Ql4zUlW=8%JsBwJo}&?FWGcezM*@it0!r;s6C~M3Y0q{`&%G{P1|qVep~I+++<^@ zy@8x&ID3+O+X=el$rsEq62J*FRaNO(hA4z6Qo%qUSmuKJ%MSDAcr*l$cFP$!Aq$@K zwEUL)lR1)mH(X5d1X1bD?GiFUJMlKRmoF84IIbh~97|8`R(Ii{q`NpS`HD{K+EEg8 zTCqd{MwGD+v4$Wh@Nu|8)V?!lD5&MS!%9wy+|*Ma@Ay4mii#9vWutv6VP|tXu}S9` zx-jvP(Y_;Y>Q(CI4Z;(_dvStMH3B2tB+C)}uZWgXke1AMQ-$F#)Po8W>-+Oz4`eS! zRo3LV-|nbo8);-f{t`*49D_mujD%~?bl?034FAw*()`CBFS#@wxeaxu*3JE!<_yR4 zkk=O-49tCwJ6sPwYhL@9x9GS8VO4N;qKZJ=R*BW#EUcNA{D#G}H_6yK!9nMvUOTyx zm|Q!Xs;tT#=v}w_JY;8o@(qN{dkgw?sSSUI9m)sVlkY(AXC?y1I0RyyM}iEVLwHJ4 z-+k%3ytlij$A(DibK8dY!CLE{$LFE{a%$#8-c&i?GG?5o!Vlv_eC~2K|DJoYS36#F zQ`VQEDvV5u{d0-O%fXa5CH#OuagAiJ9aB$^6#f)D+R||%kteyb(5{WkoGWWS%^?jm z|0K>dY;a_~$#uCr^+hf{@*VG4cJqA?=XlLsNByd%;wi{Ub={~5bePc%r-fhs3z+_= zJ9#$=9XdBWj%*apn+$P+Sp~#&yND7b8V|xB`*pynV~I2QtAW%FhBsxk$9O?;DTo?Y z);ueA70vb?`*A&FKd!&Xe&n3Qg5j5wjoG)8|MuzA#aGtRD5ifW;w>-XG(WewknH|> zpsU)eFe(*lVTEN0x#&i9~stW~6~XpC^h` zL@!7ndM_g}z4HTE;%L)#UK$HjKj&doeiA9#be*BG;Kxg@Xy{8{w3kA`ZNMZ_{4q|w zaca#enVfWn$F?B3h@{?dn&xFI4RjTw9?jjg+s@vd;8Uc%GZi&dt1tnqIQG#J{5$Qg ziEJjvgQ~9RYhXS!RCV;H9$i-L(3hqj@?pL-H#|T6H3s0e-n_&3?=F+8D6yQs1>&MF zs;iUsd(eWJGIZzJe5rH6Kb|q$<|>m?IXS&z3iewejLPPcY|~8Lv-UY98R!jcd)p*V z1JVvLKxX#DzcH5OoE=@ zTC`~{gDK1UW0PXJu;8NUJJPeGgJFX}T?n)*Z5-P_Q4aq%hzdZnF{m=j$ta*rF z6!bn-`S%#rn2hG23#A~Zp(XM;H5yabG;w%#Y&o@jY07-A&s}~V#*NkuGo_uwX(Fq+ z{FVdFUp<^U$ZPJ}vS9v9^KuOGcUA?z;nDm32c)p#S=ZwpwuR2S?DDzv4LpR%#_Ljt zc zPs+PVbpgyX!j>YawmrXlr}vgeY!k9;9ASSta>JTX(h&7xjsxK=?5uyBmK2TYhqi9n z0ddpp87Z}}C4ywue6aa`+SwLjSgOCb3QtT-B4O^Z?&Ub593pp!&6Mj#GFayUipepy z?HKu)b5TKq1E`@jKhS`=d}Q0I>)bSdb#4CZ(}==3!Y+&#>mRHC`Dp)jet9p7l|@gJ zkc;M0Yg_WS-S4ywFR)6GCQuL;h<#ocY)AM#?R=6YJsaM*ZYDD5KIjHHsodAZ{EIYx faOMX^Gey1i!Qi%H>$JS*|KI-yC#7D;gZ=;j=~CXC diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d6c3cf60..e8ed8b03 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -96,18 +96,18 @@ workflow RAREDISEASE { ch_input ) - // - // MODULE: Run FastQC - // + // STEP 0: QUALITY CHECK. FASTQC ( INPUT_CHECK.out.reads ) ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) + // STEP 1: MAPPING READS AND CHOP BAM INTO CONTIGS. MAPPING ( INPUT_CHECK.out.reads, params.fasta ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) + // Merge and then chop into chromosomes. MERGE2BREAK ( params.fasta, MAPPING.out.bam, MAPPING.out.bai ) // From 40f51505af8f97050ae06efc2a9a2f84b549be28 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 12 Aug 2021 13:53:15 +0200 Subject: [PATCH 0016/1921] lint --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index a9f18428..329e093e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -15,7 +15,6 @@ params { // References genome = null - save_reference = false igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false From 07ba0892b9623e856e8a9471b90e08229a79a55b Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 13 Aug 2021 10:33:49 +0200 Subject: [PATCH 0017/1921] rm'd offline test data folder and using samplesheet temporarily --- assets/samplesheet.csv | 7 ++++++- conf/test.config | 3 +-- .../normal/tiny_n_L001_R1_xxx.fastq.gz | Bin 45010 -> 0 bytes .../normal/tiny_n_L001_R2_xxx.fastq.gz | Bin 47703 -> 0 bytes .../normal/tiny_n_L002_R1_xxx.fastq.gz | Bin 45431 -> 0 bytes .../normal/tiny_n_L002_R2_xxx.fastq.gz | Bin 47941 -> 0 bytes .../normal/tiny_n_L004_R1_xxx.fastq.gz | Bin 44140 -> 0 bytes .../normal/tiny_n_L004_R2_xxx.fastq.gz | Bin 44343 -> 0 bytes .../normal/tiny_n_L007_R1_xxx.fastq.gz | Bin 45690 -> 0 bytes .../normal/tiny_n_L007_R2_xxx.fastq.gz | Bin 43685 -> 0 bytes .../normal/tiny_n_L008_R1_xxx.fastq.gz | Bin 40944 -> 0 bytes .../normal/tiny_n_L008_R2_xxx.fastq.gz | Bin 42844 -> 0 bytes testdata_sarek/rd_tiny.csv.old | 14 -------------- testdata_sarek/rd_tiny_mod.csv | 6 ------ 14 files changed, 7 insertions(+), 23 deletions(-) delete mode 100644 testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz delete mode 100644 testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz delete mode 100644 testdata_sarek/rd_tiny.csv.old delete mode 100644 testdata_sarek/rd_tiny_mod.csv diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index d2a41795..e4a3d013 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1 +1,6 @@ -sample,sex,phenotype,paternal_id,maternal_id,case_id,lane,fastq_1,fastq_2 +sample,lane,fastq_1,fastq_2,sex,phenotype,paternal_id,maternal_id,case_id +1234N,1,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L001_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L001_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,4,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L004_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L004_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,2,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L002_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L002_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,7,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L007_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L007_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey +1234N,8,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L008_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L008_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey diff --git a/conf/test.config b/conf/test.config index 84d3a223..1ad30e4b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -20,9 +20,8 @@ params { max_time = 6.h // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'testdata_sarek/rd_tiny_mod.csv' + input = 'https://raw.githubusercontent.com/Clinical-Genomics/raredisease/feature/bwamem2/assets/samplesheet.csv' // Genome references fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' diff --git a/testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz deleted file mode 100644 index b25487aa91cafdd1a6873130cc3061014106c575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45010 zcmV(%K;pk2iwFqNOpjLp19WL_d0%dCa&2L3UraDCF<(+KE@okKba4Q@TUlZoNsj%m zW7yL*UA8FYzGq}05W&1ae)RoMGT0(1FUe}V?2#pr%!MWbh=+#<$YU|aJK%r*QIb(|1$ZRaH~Hm46@{`;M^Vu_Ju}y+8msjzf;*ACPPCpmTB!$Sr(84$>=r z8@i5e1bqfbPmi4*_CG%V;RE0tG0GS66CW|95R)9qkC^Bb&!-xogK_Du=#m8?sr9kxl_3+5GYU~&nkje(qs;!io3Jh@H$85g9J zL2sddAtiBoM4%he#&_`>hPYk(xg-bIQ`vW2-*a&95`_ml2PClB!b1%f;|>dPvFT9T z#JzkIdtZ+0dVp<#W7lm$OT#`VqhaLF8y{auOrQV`6wEP%GwdadC4f^5eUN}>Q{|B? zm3ZcR)1ChD`mo(=Z~?E4CKp#z*>rU~lF{rOFdwpaW%u$^JYBE;<^#KWQue>tw4Y!3 zx!4QmbG=`7G;g|?bUQEUbT%&htXqC>ba!<OfT3?pO{`4FGv-3_3yD2`@uVuPb%Pt+JqC$8Bd$aze9ft{sC`Z8BraHl1B zy+0*(zTnuk&0}AYqpPl|#c1Ak2Y)U07~h*o-z)tri42hiC1lTA0R^H%(s)LV|2xP39pzxno1YNC zKQ+3pr=hNjP8_Y6b;yU-kBpLYKz#XbL+ftky?a5 zzAJnSZQ*ko!VhW!>T%lrvRnr*nPe-61kMzfxZ>IqpoQ#GadwPAIY|IItQ4w_4njp& z1v$CVo4tnh#Z$ls2n-J4o+5epF3Tjm1i}-Ohjt>=ZWy*TGzGiF1V!uPOg4K?Q@qg+ zajkk8aL>_;c9;E@gr%IaGW==o7ZUxbUXm#+z_S>hL_5@!cTp8sT${IxVh17!BL+5#i@#ICLY#~ZOwaG z!V<(Mx>4E1;>&zM1NbDRnvI0JSei1n#Y9b>b6z_#gXJaU!1fF<81eMALRLx{$^^y$ zjbo+svBTgU-^GD!DGJ%a6znd-2ag2TL6aB1CtP86HFZr{PQy5MgP1IvR(~C0uKHQh zw54US1~mK1ZkJsvS)CzSk(svdk?~8RUD6mY4F|TjBH~QU3`9~U7?5G6XF*m0c@6j% zU4kck^Y6QWpX?4vRkWjFmNa;2GO_KEeiv=qN@^Bzp*;E6bKVtZma{B82{i>=OJIuy*okARVVf~*%TjmrnzJNJGm6pL z1y3yg+RbI%4I}O5j`+5cu%AdghX%72lsS9tR)HMKw=+8fA)a7-iXIrd7_o5aK{Kp# zrhmsmOer;y^Zxhie2Y+rFaud93=T zkh)6z!7NIgCr>1TQ4b2u(rQu?kCM~lK{zBS9g6T)U_1zk@)e106dxx<-MailoE6Uq zmx4KJb%jPZG9gKtt_9(>vbF+4fAekODpS={-E(mFl$pq$)wBs9)VcHgB&%Q!{Kaz7535<_#Q0aEVa9F8^{EyAU0^IL%x4d7Zbl zgXrD5x-dB0CR&D9M;qiPV7sQoT(iw%U9>{NGQcY9u*yMcid9))rJ+`gyQ&CE+~kE& z5LAIAS5$H}8Y+;@HH-s>rt|Ad#QygAZ3|`bp{l#;=QGm}*xVP*)D(ko?L$7=Lkrje z&jh5%q`V}bmP>7cWG!;NsZ?c`wEQ)dWf0r^5;O!I5RIB!EjU=wL9L>;h_kRwiv2mw z5H<`8V;f~#$ej+hF^gI3=h=A6WEfGgmxr=DI-V@-}`2-9)^pAr-NJ7Tgw zh{=J92Jdemlc%7S5-h9iV8+_8;^<)J6q{fm({BV}AX1s4x7@ORcr8j-!Zt+zr$gV9 zxl{W#&hT<;>777|$>(0~+m>Lv?3P6Q z*rsZ#7^`6#+qRa_Rt{#>@}BvkBvw_x&MNquJh8dz`(bL^VHi#Id_?6g zHN+2u@t6Gi>IN&FPdAF2m(0stR*2#pPo{=5@9LW9RdA?6?`ryp8Y(Kn*r25|49{Y_ zYzN|=O<#->+i;w|QSBN`Fi;|r6SZKGF>ouqb}7N6ZZeryOGpzD@eu*+X9TGnDNc!9 z;23y6i+5vwU|KQ1_DJaDiG}e-SXle>1IDQZ^u({jmZBFn=F{r$E>VfOxDX~sfyQFUEyP3-wRXlnxwwHx!g9Y)Ix6jUqJ=vIzpU+I*A7CaA#WW;rZ)K9vxEwrV& zpg>uYvQWN=HL*wwB5T00a%pr`bmhRFE`*33r_6bXipR-DDg}vj5Lrx_i6OM4>qm-) zM~Xfy!|zsK9%lw1qel-R)Z2&Vf0ymm`QSNC4rUn2K+$E4_*p12S0O ziLZiR#=QPJi<_1#?nh}>eMc2Rwd7qp?$M`F@2ND5J6g4+4KHPGS?HFnZT=^VUF%Tj z_P;koP0{p{o>v)`T$ci1eVC6f5r9&>sZJddZ@QZ zb(eF?RjO*Hwiqc>RYg5o^?ddYt^1UvJ%Q`}Y)zuIty(5m{# z)iZrEN~(SlX`erE^eB=w;SkYMrX;*|7oQsRsj~*vNYLblfT|4NMZ@PjT>!{NpXmK0 zab4}@X6l=vp>$OdF;SbJ)<<6#RPg?WFDtO`-@vSmYbr1aguKgzpvbj}>R()0;uI}E z*38oCw*K6&l$bb~x!~Y!o1knbM@z7b3sCJf)mvM6yft(36fiz)^Q{ctUEAFDg4}H{ z!nXJ~E0hwn#~0vjePzht{xghCl_AFDMbt2Blb}4}V`tUpQWpb2PS%nyoN5ogz2rEFoEQVhz@i zm1Yi66b#m%Vk=`#TGEre3qh0O;z_C}gr?97>S@S)(<$6`($)KTSfQsVaAtrOeEoEX&%bDvm0RoEJ)7lpI95S3d3UF_@J$&|`6h~bweSH!U? zVRemWD%*gJi98O=+|AwiXTo0PF~F*n~t z=@P}>cKNQ^>QKCgTtdOSAqzTgER2X22*Z@jlr|wKWKj(TXQyCIck(7xmtI^ghSFZ% z=!Yn0HN)6wJL~Or3BiMQD#Nrrq1x?KS2e5o_1IOa|7oVukEvyFt^f~{aardQRbRCb zGz}OmQ=ig;j-*)o=frZIk_rM}0l7&Y*B7_;LjabBxL-xs6Bv)V9SyKKhjHR~rvF29 z|8a3!%_0&TnB2NjzS?fhK^>Qp?gXdfNMY#oGFs?$g~9O+;}-hiHH6pKs{3%eO`eu(oHm&gyquA0 zr>5#TLl=F|+ZnV0$FR#iH?TSyeq|kfXx)qo)Tp%+7_W?8WkGGxpy9ZUjO3o2{H*et z5TA8!dY?@MF#>?iKbLvisjZ2vmo?Ea3GHju?g#tsU+IEJzTvRRnIL-=xwu+l=G2^* z<{N4!TISrCnJAi5GX=^ZO_}%gS~p9adH)EB&p)$`q8=24$4y z9HO$8E#^wh=?=e3`$7syZceA`&?fL=?%59gSc}oSc4@xTGv6P&$-CdVVV6gW4(R{@ zTGa2xQVw%G-zBMP&YVllSZtbvvD#|pBrwkO1FXl)<+hK}SUMXU(B&~X+5k!V@Ul1o z`|;Z7uIdZc!zyXE{{o2mTMQJNxs)WMWQrihQyK^&BjiC(o^b}oBetdR#NAfqs37#@ zu3ld{&gyq*$}e}9av%5F=AP$yn|8F|K9xJPanAkp{kxJFPkj^ioP3pIDF*5U=s5~~ zX7@Y_=g`8Mj9dw{mwso2ksDJ%uS>cbY+g6?6;x{jOw^YgYoF?t+F?o76pt_;3xcEGw%XU(Xl ztLSMEu8Oxg(ezTLraD=rWn`{Z^cduMUWg$F_JY!l4!nC=^R=>?jBBFPDw4iexx+Jy z(Q1O|rcAD@G^BeQSxDq0eWe(1k{6Vv3acOsjs9b`A9p~Lf>rydAHdE z8#w<*quqHv-%7|e4vzLT5S}g0GXtXiOCj5MSfSt2ZF{TN*S_{*_w%}uQO@(M z)QiV|{khVIqatE;T|eGtir(PHc=JuWxi`AZ(>7Sa3s;3t1Y&=AH~XjKLQie3>w2oX zdZ={LQ{V<|y{5$zAEvRaUIM)YnY?s~>$k>Lu$x~Z$kWFnuPObjWB)?)G78gYMLBPu=l z844p4fT{>E0ZFGIls|jSV{eNz;lyUA-`=-TF{ z<;HU*lb+wolS(CW&sa739nP1yqe($|u5(wBPvJak!CIi2JTB#P4Ln!ivEe*L7KG*B ziyuucLKQe!K46kU+aSJ81&4O;otz~E;PRsnVPIiAdY^dKC{XzL7ti$?T!D5s^+Qk3 z`l1^Ol?;9d+05F${%r=k8FEuy$e2`6r(;y|N<)>Q+DivgYGal@ z+AaDnMJF?@_-XmPa-$Ak`J7wAt({ckt${eqM5HA8u>Q}-kMmY}s?owc6A$?s(JpPK z=S@A0W22?ysZ#=cVVOa(cFXs?GPxIxw&xAZzWuwoLnUK5r~;tPZ^^K^_*)-BJmE;& zIWF1|AZ4Ole2L1P|NKTEjMXG>W6co(o+v|X@>rMC*p~Wdl9G=P8$4Dj$<8?}$>!NM zG(*6oK(*+xK)N_bR)bYMv{@pw;3T(WG zNc)*Ac6+y^Wr1(`ju92RQ#mC2fA0L23&gT}JO`tT&ebh}t}{xoNwK>&ZcS82@M< zJC8%Xn=67m7zSA~2heFa74v0O;1Q+PM%KZh^hGmTt-NE(DLVhz)g4XEmjV5R>i+nD z&Ar)r96PQwdjCJh^6FvPlAQBAaIC!Rt9t)uIRpY=m29O3Ti)MscgvQl%55e|41qx4 z+&%Xx%x;n)tJ@B)>Z$-HLzTP|Nh=V094KH2&V3JPA5xpUGM~areklkM!=|2J;lOjE zEMl6I9pgHcCH`&*QxM*iWLdc800S8OqZ-fNq!4vjQ)uRTo4(~+u@M{`%)f{J+vAgC zuXX0C`l%y0tg1DSeAb^VS)*(gMO)8qV0OI<7+!Ps_V(lokdk zh+Y8A)d4f1z58nIw{)zB-7|F=jRDCBh+(j z%7GURa)BV5hq_(~z67>KfezWCRrpt*!quvY^FLR<_-=E4L8*ct{%aOzhAkyWkJOr- zl1J;t)e@#_otwrz*`jZY8#iyad9lf2JrcD&{ok6fnMgkAR~Fs1)i~8{&E!AS8;%|2(o?qF~w&NrhSe3 zygN4C(Zt=ao@k%u!p!EyOE?$L0ey6Y)>Bgz0}%b+C{$<~^%e@q>>067bQ@=>R8fPz zM{kYuW3p#Ltni(!)^F^>HZpBbYpe+Xq9RRlT;z(aolu#j%7$NFE!@zW+mR$Xx}uVD zyMIn-q3J$Dw&4?@ z&9g*Au5)D0w%7QRd5RvL3V;k0Mo<7rH9O+1{;>!p;L$i6n{3^u9sjY~@;nmRpTj zio|se{5V$!qU)#SP2Ll+EX5tJ>(a9#t}A+@2gB|@1uJJESXyjDz5FTCF2P?$4uS67 zL&DCh6zep86b`<4Z=VGU-U%6Emo5FPDMhC0afq5g5M;X=fp{$nmAn`vVHAd?c2phf?Q4TL{W}k z(h{uW7LCrw+4Xdqt90BU+T!fguS?3H*0nR{X<_+}xWB`Il|`NMi?V1crWgpJF^5%$ z=%`$CW`Pbsh#CL{^OAA!Mjz;M7IahEFf!Q){1bsZvm6CL0ILisBuEi0bDNR@naz1a z3|7{c0wavA8s*SYkwa=vI!z?gqRWnCNlJ)wfKV>&Gl1WjSio6y0#et2P ztRHB>`>>yRrgwX)bgr9ms#+}h5B5@lD&~bGr3^-xFSP3i>3y1f~>b z;pk?Fk8>&1bWH>yQ4x#EOecjQYDGvv znYU!FhG84WZD@K+{+B9}Vc(hL3WgP!RleRg+fVM44mS`tzvXM)w*xxK4u#&uTwQ(c zin~hLl>^VK#HTlh#y3E6W$yI8O7wClr5pGVj`zYgiQAarokL!(33Af?$_)m5x{W|S zK*Bb`iJ0Z-oY^P<3v;qv!$x9i>7(n5i>{LWsz{=vY>Ec$ux|&}?}@}UvOa$Lz@bY< zU`;wfVz76RNWgzf|6-CLd0Mxz-@2Vjj`GL>w%-MeOk{cgU2XdUOQWQ`MHcuDBV48#W>ca+?8d4vv6-xfGeMFXMl- zZQy(WEXDJB1@naIdgC!4*9=$-R$x_gM~c?!tA%HC#Wxw-<|5orEKVV- z<9X0c{*uhsw$rV5!um|VM%K-urdR*Prbx`Cv|?R7L!s+T2LAkHm(@^`*&d5h0ev=G zH^qj#Jc%*ytD>J*DZZj*P*oeWw~_;v<1Q7GM+C~yzHw6F5N!j!2R^;=sTTPLQi2Ss zQL=+}Lfx)(Ef#XZp6F5J(^$7`%QB|0%zyo!4!PY)ry`lLUyH-A z=CS2cMp5>nh9|MrkugtPY%3xpxs(Ab>@|3S{@oQE3VCae+V0abkUi7I9QN(6npyR3 z<4vANPlV>pxxL-?(T8ta3Q)ec+t9nDqw{(Z34bpUz2`sab!MwGz2cnR)|!`rD~lvh5MJoPb|8xiM`!a zEO2?;ntQdjeq^50t+_WFC@Z1XtyU}gb zmg9l>CKKMo(7SzUmZe!cJFj~RNiIz6cO-CNTuQ&!mzfp3=)Nve%v}u9EBWUMG}hk~ zE0q4IGy^Wggj}a|%r=SA9V)_UFnJ+&-3X)RMxfz1ES$Ag@uG*aZ>N5!h5=U^G6nXU z@1>U>_9H)qyQ3iHSYZQyy`2KCS6VG@Du{4BWX;^}4cRc^Rp?^EjYgz8yi%JLGY-OX zMop6Ix1MMNaU?&0>Ypxo zs7H2J7565**3axe(#Nju`=w5KmSet2&@kD+hI~sohu}z)HSvgv;Ou0!T|ct8e(xRY zITH_oO6@7NqP~t@*>YH@E4rI-WD z(LD0m>$%AHl5!0b0ZDk40c{}{h~x6&zvduxK!QN1bP>3xP^mVai?d-PpgXPo;%s~{ zc5K&uoul#gkqWlwYfkaVI1NR?ZL!a<@6XZqFI?ZBJ|M_G$5YntoJ#MsI9fQv2%Z&e zje{bj^Q*PH-{)bl!!UT_Qp|SW24aL=Tyj=(oO&~N^Val_K5lOx?rxyGQYaZ9nK;#YQ(5gP*PMZyNymb z>4@c&=z3@~JENc$&9R4?B_+fiM-~a=ARDi+ox3XQUzt>lmOviO`&@k23`&%EHSiXA z|8gV5>4`_N+RJ;P*URpi8?w$*tF+{LprHwcbYr|~r@YE1y$yO=!2U0x3bM<*$r4{L zDT=h=#(|7sA?XdbbC)m0CX*k>lv@+Fos8WU>undWMm!p~WhN+dKph$W(hfM<#vt16cZRRAR5cS&2Oq21HQF8XcMFDWxiU z7}ah4%f>k+d9SGXV^E}@{@|CHN_pOyIa%~_GdA!8J-^E-_)4K?o!k|QH-BKl%a067 z$s~b&E>fw9wHKZgt$q_w#D}$Jn&&;!m##Z2GE8n=CR#yIS6_zAF0`&JY%i<6KT2uh@d<6bCkLjZN-hHN0 z+$(Da&^V%kLr8WRv8h^+z}9P-^DDPueqwIwZAVrE=;mv7JYGSF$5}*Z0X?@ z#RH-CF?b^QJ`8}pp@j^cv1bOKn|>r0+Dk?Rk_7}Ryu?&dEwkQX#9Ur&o!B@JP6b}y zP|b{4_TzlfO<$*P(ycDR)0fhzy{8L(2rN<{^c*Z=5o%|q;U8O)1cP<4ovEAKZ~ry> zw}~_YANOgaUZUM`a`l-vniQpI&CSraUB*56Ld!CgVd4e5zKRwFMCV0&2x4PDhT3QC zJ0K77v2`v-U-5RRv&0bXyX8&hqFzc52|2VBgrvU>@};29FnNjx+;kH~rZ&Cnbj@{N z5wWD{+WHRb{R4ja)<>P!ET>oeR*2i3U*=LPd2pXWUSj_8wr{lkj2)%pzH>p^?7KL? z)o*5>&6#K|t+}hJlwef-&`2hE^RYO!yuC-R(^*uKg+c(|%(qy?!=O{ce+6`oh#-tZe`*O+f*(GqBS^C`=$}s6)al(J3 zB@YA`q(rh{wV~e;)Ol|vCMq;)v(!Y(1`BT$CQA!3YRFdBLS%9*USfn;{tKj6bmY80 zt;eP{*Ik|R$ht06Yh0;LFlYXE%-M_B_gx$&3sUzav#XRTCEt4Y6ZVbGMGK2gsS-H< zlEI_%B@aEJo=rQ*C=jpd!TYrdbbbPRGk@G9XFtXE-IH?dkX7+JtniE6s_VS zk=u=+w!UhbsU21DNAuv_PQ9V&H@ojG@qnkICx|ev%k;|8rl|ph>Q_ak#R;q-6-veN zl!Bjk4=oxu3!P8)N{j%*dpg&T|f3lk&hjLjvBF37OS?*?B zt!?%#`L}f@p6A6(VOmYcqPMnRUC}%Z>5b=WE(^j)%Bt;o(bx%_K@c9OdBDF)4O)0I zBC2)0TVTe#uQJdmTf^s9o5~nF$%l1jW43E@F5L$AW5fP6S?l`iN*Z9Zw~y(C?VqI` z5PrtRigat7AFGuKNQ5M=Yg#6XTq((3oS#lPB@KP)xp!~`?D=*nH5*|I4}{mfn!8sf zB}h&tu;=33ehaaa-RZKq(w}S&#f@aqC)YTAbs3YDZ=JwG#sT1_yL{nQck^PWGvYcH zouZPdEyr5h%6>ar6x#D?zum1C>s@aB&dd@Cp2J-wE(*gF6ChTJ)1`I`G)YY%>#HO6 zJPSS>%vMa%zB30`%GhI+Gp;0W@CnHsuCC1AA&B4$<*KD<8-*`GVdfzN_oN_ ztp!g`Bb13oN2I8W%UV3I>Pxi|tA+$U-9pn-O0)G-8{^Yz1BmNDNeLNpZ^WK02cHG; znx$a%KK%Y37<=CbGT@(UvAn_sl5w0HtZ_n^a)bZIc8$S)g%r*1zPEH;V>DdPiJRL~ z$Yp}r_H?HGy94f_Z7JgJRK?-FB#B?Y*~}@ypP8vY?R(uFw+q?qt=YP*-EkE_otYl1DdhkC1~iqXu=$% zTA90!LdYep9og|3Z;&t#4yAgI=x!rk<@cYgxg|LkD!PwQSo#ev*h^hzFP?s>(J}V9 zP^AX`I=P`8GTRQlNF1Iz-%%yziS#`7I)&uJSU1UG+i2T$*l7?5J&noA#ICSxVOiI@ zJ@r;3@0n~^3Qby2#9*(01j;IpUm3B-4c^#bX#kMjhGZJ|Mq<_6Js0vgxjpz?pA;^u zS1iOT#rq=G4s|O&5%eyaj{!A)0>#glJT(2(wOxPfqBWe=*V-^>5@~VJx~`vgHu<===5o743^%6?=gS*-9M7D#m%8L#iZhB)Q^8xtq63jhw+Cg8aJ9rwY@i#o}-j>!+gQE!wo@V-(Wtr@oOq$ar4<)r@ zH2qMP@8yz6-f`Prd&?GoJ`euxJW#qNU9rhrS>L;ET^{!2aaXst2_|N zNs+c8ZQ@@-!d_YPn1Ziq?2uH!6N^}Zz5c{z=Ctw921AIfdxQtqa6{ip5NM-NQJbJa@gTq2C8wkS4fK5B2q{ocOFV1YPd?j|+oc9v0g# z^qpjCZl?Pw*H1`5kq7CqribIf<{X|%EuLpz2LckKC2j>x3*ZTE%+5Hs*y+pAQAXbh!=7Q$gxntjP~;j6gWouX~6&DvQcYJ?~;@h-cI3}e%* zD!PkIC}UX2$Lhh@llc(5=B^lNo_P<+ihCP;qJedXmt58H-r9WSbNZKPTbUPxfjoWQYO!F8CI}hy_R=dE zCH)|nO8~x=$c{_A_+_GVu#lWBE#8ojT+xxsKVS4Pj6~orYaS};&syhDe0{BT?s&a* zPWuTx=&g36fXiCwEP1X(vb8D{PbZo!Sds{D^$RE3T>>({EEV z6jhCc%IcJZX7Bbc4K@%L8ujOZXl?hMhSWv{;=5b%kZDH&yVeYw&tlS=CU09maOu&wO>lJ zSZclTZ|jttEE;$x)v6k}t54xI-hbeQRPtUhjS&MAL?B8^s%+RI1o1d^TI0I0H%cdb zwe!$!{p$RKO&JssD|~e6K~xlarwc#3*Hoow&2`a?Q$JRf)}D{wLawjbXkE{Qh(xOc z03aFNd6$y27%gnOmNJ-Bpl?WS3fVPKp*So=C|WtgBBSOv9pQD#3`@SbZ7JODYGHaR zsx4uM)ZDzXLwxQOM6~hF`9(;tB)7~$y|Qd=zF{-Mt7XX`$K!A*P_a^sA`Qf}(t1wr z%sR4z9^-9{Z)w;j!QlRB+j%g-D{CI=u1R_1$R_O1l$ue+%}S9n|HN_AC$HCrjk=6z z?{}W?u%_6NJ-8RLesB$@z|ds-lxBs2Di&!w%|iZ5Vv?tcsYFZd*6FnSq$9c`mFFsU z&qAA!%PGz4h&VtV0BHn-nyb&-E79fM!3Gnrr98!<*T5uI%C7+jgSS{4zJX=5nGS=?uy^532B?a&&^<;%} zMc@!g7YVrfi&ULy*CC0?(6wwQ3(O-MWi2&~IYYMEzps}UPXE*vH&^DY}0$W zc;lhfOYClvyQF~{r-V3~(=|5K3EVVYp+N~OvAt?xQshbSGwA_lb>icy&R24=_vu9{ z1_-@qO0pK}sUfvEs!_xkbHt+MWEL}C+dUU@77~3Vgtze+>dpp^)TT&i(5=q4XHZF> z0`8IsG$SUI{aA!}s|0sEKh-F~;q5pncM-RRc}HTEQi>{2?}+#1xbJ`OVX_;^P*=v6 z?OdhD@#X7O{5k-5?yiXESr=0~bRvKFX-oo1JZ~|b*fMs|n-RJQ>=m0Qf%COCm(ymU z0~z_2U)Q3X-h3w%XsWkQD-Fs%ZLI32wjd3fqAb9MdzI6bvt&-3;K&3B6Nun=&y>}> zDY0yEcNB0~Ck??#RJo;9A<+mzloHlA;s@>fN|JK9>h962u}Q(_%!c(eL6drn`lhO6 zcBt%9t~!Df$PxBk-Cg?XJ}MtZcR#Ip`aZeYb<6r#f7|Wq_kLM^{Rn^bWRHE*PAP*f zdbB0HTwS`Vj*Qf!!1BETCHU?JrP(9@1=4*eu1{<2(%mYZ&*GtU9D?9Qm;@^Dk$jN@ z;4!Gmdj-R}sh?S59(;pS|4dVTdQyq&`m%&1%T+o$543g)QS+)Q6ra(a!d6?Ju1A)v z$M&`gzNj&;mnLu#?t76iRh|o-a-M`?jE%xrXCjF;r(MA5x0<6*n$}h5PFo%)C$tbj zcdp>}U2myz=7I`hgm_y((BnCSnbk0JvPE-lc2;BY^TTFRx}Q98$^+APexwPJDbphD zOX8A*?_a{c)Z4QA&pX^@o5GQ)Cte(yG5$Q+Q=(5Ld+tI%_e%C;D4+f9?X+7Qgw;A8 zE$VhJBiO>O{GynV7P=31Ka03YYN#jwT$dvf=uakg!jnJm$WT(nOThWRJ91hek~EBD82!;V(XGcH&>)W=hq$*QQ)lL-9uTM|SMuJJ7?yahV#J7O<+T~aXe&}6v@uO|G*`+xqSaRPrW6HgQ* zx%Iegh37%Q{}>Wf535_7ai+wIkp9m5eVgKLw{h|Qu}jHwy*xa&8%7NxIdHpX-7;DVt-;ywf+K_TQ)qH^>B-I-&v?@_dhNFa_O;%C3MVwb$ zByDCDgNrs6o?Ym)W|EZ}hQ1wd>J4Ilyw?~?)S{p~#L0)(D$d8-D<$~!!p9Z5W7_B% zbY^1DEWV_&4mI03qFHPdh8l*3SI8S*XdW(I`V?*M$xQDN!|38Rt#(=V6V*p7xf`as zETu;0wE}_OR;f-XGAKMa!NFj&aKSAQA`mOskzaEs-c@2ShQgJ*9pbkcGc-Lo>C&3M zB+ImYUEQ|rRFU7d)$y=;4ncfl{bc?n)h;xSt>2sotR)X;;xLCY{T=5rakSc&JXO~e zG64k+#(r!}x$yLV^l(s4UzQpKSKIKN6pSf*k&b55P&^ac}Ym zM8<)P_V!2>I`{3X-R6<%&Tggo0RFFmj{5qmcKSU=dze}lplO-{gKpkM@%ll3;*@2? zCqx@dZGJyjVri^evG`&6wpm)Iw`q4CE2>xwzWa!t(8t%@*VK>E4kMrkLq%Ce2Y73!TlR5mK&<}F3|9lyPOOhlc&YmZxq{?pt2aPuH zbb6j!#9MudYy77eU66g{VebK>2E#niINY`9+sAbe7kDYs^d@4c+t1KHYLKib)J~pR z(7!jz$|vRcJ88^QO?Pkh4^z~bE?(hFe`!peB&`qVWht9ILjeM{t<`+wwpadxq0o^))`}F&cF6OXmtMCqI>Fo zt{Uy?M_P18?b4#Te}(6&t***7LeQmnNuGj^+=M0|Q-Nyu=etc|$2=KN3MAhuDn^zM z4{b|7@x$oQ1Nc32bWxsr-C0q}C;)AYzEdc#KW^*votuO$ry5?@p zpHFx^a%__ISRe=#bXi)0mKkL?!sDvs?!aZ%1>9c7vLUL3Vh+zVBK9kSyjRv-70od6 z?1V;U{Cp}s{m@%2S{Qt#b;i$K{U(Zh7?;|kK-;QE9;EIlWHHQHK6_&faeROl*kOJQSog)YdG?{7$C8FB1g$0~Cufwbkz&oe~P@SpJd9bhEeJqa`!8 zZ*9G--8Q<#KMw1%?QHg@sp`g=c)f$ADXWXy&H7R%cDm%U8LDck>$c4UzJYS6dH(!n z_w1|CxSu6V6}`q8Uoq(@qL~hZ64HNHFQrNsm-OirlcnvQz1XmzylCpSI$v|&53DcW zm3p?}UJf{AL9sG2CJwM8CLZ`h``f7gJCmVwsNjB9@EY@JUw>y{RAeIND);?83yI@*&iFjC=IE-{zO=7zo08(#9(* zcF^Kyf#zHfB}Kh8sQhEmIm4dBqFInDimUQ>z<#b-@Qas=x-k@aE)l(g^jp*!l)S+g zB-Z}CGFel3u4wv+B=sTSdi~$~E-Esp>kA6TFK1l&VjutGeA0gzF~KS?(%q4UTy#AI z@4n1i*zB^nac#G63(Xp^JlD!B=2s$aT5>&5wW{puQ3k(gw8U(#TmBEU!)Nm*MJNnR z#!gy&{f0GwU?Ws^F9;*}o@l%A!U}RCEJc03oL=+tP0XQ)HvxoK9=eHhF{_I0g&1?& zZCdWmk{73IZpN`^wcb49`}IcOZ5S@guU^JGYq-qnYc^H1&quOtdat z+$C-E-%pQoN8Dcbv3`X2>~qSXDFE$?HqVOvP$2mWk+(<zH6J)H+`Mf-1CH=PcOe7T7I>MuybtA zpSiD_+Ik)LF?(C3Kg=#n8xON0UuAfXRcv-BwS?6Y2`YLX^g^?~>2{<I<^nZQaQvCuB-DCwW|Q$toQ}X7-{q&6?9V+czH- zi9%p+W6M||3ssGE3EM0rlw=b&;KAF!R}R<7D4JJXRWo)ZWY7=o{jk_iZuNflf!yLw z*|Ugy0v;0v4N=8}SVUdzbkB(*gVI)9H_4?UDVL0$wd=#Ywhmaz3RQ%yozCrc*|t@Y z;%(IEJ_QHScoRv=p-hx~Nb+>ah@FKTT$GkklI+9{*bH zYLZ)fMU92lToo-j=)QpAzCw6eZ1W+t)I-V`xvO20$eUu8DsyuhCWQ{g89)?c>Ngkp zFeYLnl32Q*h)g!_f~E4i#84DW2HPO9ju5>$83K!f$84ruO?LQm$KV?=~JIat#KR(JZIWaIbE{MSva!5=w^?zRmxp~BmSn*!~oq4|4b zkC?R&yW)2BI zFy1^m6V@3MghJj0=mXJ`PS-rvJxzcv%1-Acyg_!7re|pzwYS{Ti}22U0FwU_F=X0A z$3x0ik;E76;pk#+_m4qk*Q22SewF!k>A%A;>_W(3pdel>em4`2%NpkSMU22u+ObcKr;uB!_y`CjddPtt06;*$zg&?z2rMR{ znhMq^z;Gh~1K!?voyjH*>r>A#5ry5xlf=yYPkIyA>Vn(N?6=X`6o(b_*Yx5v&BJP3 zH@XMQvU({sNrBl%Vo#n9QKsaoYj`Z1m2%Y;?FEO-KUNU?D*e3Nb#e7->C}>4{kx`9 zG8{$*3vP;QazGC-LRDr2S1ZjKob%94pxtgYD*d>oP2UX#Yli(c2>k1@o~2fy_u{{ zM`0nV?gE`+jC=Qd;W;Rc3x(xIvrnQ|o#v8h&0R;WMioZb-_l*-ISP=8^jJ*ry$2H5 z+y3C#?cM#&%atm~tzlAlsVwhD?syPJNx%e&SQ!YWkyA3LQ0l}vjJ0ANX7G9gM#_@G zE4kM7N*I>boD!?C%q&2A%``r3Mi6GFyVv$iMNG2BPItpl^6lWF`24{6+66N+hP?CD*xHX5V zo)eMXRxQ9>mabF9Q7z-1rm!z4aOtLCTi^Q`W&S_f$^^mBBmJblio9)FL@kNNYb-PTBIlc53+&FP^jfG4hR0Ez70(m8>&1rb%#d57m0W;bS%-k9JlVf?k*GF~H zlIwJ+r?kf)R=iT4xxP`JxgkHAKgw0U>x<>T?ly%ER>uVymFl^!E@gN@vSpuFY0~h4 zTVg%Rt@&Jg>rCx-M=E*AZ$EbSwIw$xxgapCtRWHiWA83X@3L|!WJ$v$@GvX-j@ZpZ zyqjj>_9s3HTkYhW7e36(MnXa9KYy8?Hk7h0KX+@2J=c^q#C2P@ao8>CQDBwE+H{a- zKIE$<0Zg)9B$G!03k{`ni=(cG^EG!xS4>0Ob>NcRr&2$2dw)W@4u8UUwJ)b$770eZ zde<4VeQUoi-WnqHQmL65G+Od(PiEVG8|*z_a#A+34#i`a~1jK4Jkm>>LaWbeh<01%D*r%R-X=6FoaM8Hbv}}Wr2rwy5_QM#uS2$6=q7_ zVU{1NK7Yi#-L(M+!GkP^26<+?gYj|06so8F=jw zmq<$jO3uRD7Kx_wM3NR=k9G3Sbs>Y?RZ!>1ZQTBjOyO^23JWrY|1cLrf^FylB9n3} zc7E!YabpmF)p3*5F|<~j*~j$r)sSM#CBV5KWIFCC@~ynEE(&=_+r_V5e6$ zx+{7VB}Ww8|1^91z?d8B)jJ0THA&o&uCL9_RV=>YjTa7-@Hm>b9 ztPhJx8L8Q(reFO$&9Ss*_y2JzCo`)*k37p^tg5NO1Z0M<9ahiR~%f6 zNaR+dVJCG(Msi1tL(+BCu0iua4N;4C^Xf=0&9LThdh*7mjG08H+Gc3}c^pS$zJ33` zYy}Td{MSBq-P5``Tad8Q=pUAD|FC~9$GRaS)AHB|7v9-ade*$glI+#^I(> zAYnwp%n@fFp1iZuN($rKJSH#RkQmW!sQcL$Gzt9O!OD4tkxVwt>ZD?!)sgBEkIX1tIi{>Qu_rA3CF-H-f%nIS*yUyWIDCsIib@3=4vb|7d$Z7Yd1Ab{^!^f)Ff){QlH_QOvJ8wB;pD+k@z8`N!Ky@8w9LxZgY%mORPHrP|53`qzB zuwj2le-#Cs>-1Oumk%8~V`6Y74Xe72+RPh!rX1U`Yh85M=QFGQ(qw?+H5QnbrPXL3xj@NfNhv~lA`Ed9O_?N187%A0lyy42#&5|D z|NS^_d$BlQ7?+H8GS`DmQCVx(`8A5z>6+`hBsfegw||dL$DLJrMW-X@A_|kqeqUK{ z+-=kamColl^@B0CUf0TeZHj%L_H>HhYp8y~h@~ZuZQACsDw{6Pxq+<`iVUVyKd&EO zB?uQism!?17+ht0q_81&PXDZ+0o}kY2mwFtnB1gZn-Yc}A-Di$+T51FNE!JrXOyolKjnDmnU@@(;gwD#QpC+e)-aEek!(k z-(t$QB6TVlng@PTfqjP&quJj5H1r))neV;Pflb2J!+T`{t9q|P82GZXpOTd0=Dxge z>o6!{8@Aoq?|<#p`gdP>{~3n*oontWCh0ih9z+50jTTS7(-w%R)G4l7f@TZ}r$fMP zty*OjL3%rcr~%CnE2n;{GJ~=W(;1O#F``XT3HxkMaW~7Vap`7Q-Lw~*AEF!j6pF{) zxSgT4?R0j1je+J=v>F>8TlLARhv4~&A3$8{g&h`HDSus9lULd;Mlgf5&xhi#ly{T@=a=yWT}k2L^R}iJ)$(;Tm|!II8;= zBlvYIffvfp@(GM-6LuJ!Y=-}$7Ut-S%8v6N#1RK|%+z|u;5M#%yc2n#(vIKb$~{}B zOCGq-y&ZK>1XmZ)weAsHNa0*z6If!aZpaEb6xUdR1e9%2h_`6ELppN3p}mG@K6^RR z&TDxN9@sCBdr&cr`hjFbc-riT01EZC3|sww4>RVQsm z?<93zPf49u1+~#_2((07D3!48(LqGuCjb(3DEJ_~%c8+f;!z+V(8^N~+As8#yAix! ziBJ_Mo~OER>G^PH#}>?#qV=;dj6|91z9HeATADF_sh)hiB-C@93H4}GtOuBjY#F%q z66+wqb_z~bZv6C8-&kS4gT|}l$`{`}n3P|nWzrxCr;MZ1;q|=evg2v)EtD=5oBaGf z$s1gH*W?}*{p58mUL;BQB0KR<0Zdprx>Il{M>Fud@jP&l4fgaMvCJSAN0UZQG~%%4 zk>)Wn1|V?Q{DQ6K}1U(+H^RMiqYF_ac{=h;5fpb?V2@-E8Z(MR+Ry3OX^DAAIMNeWK zMJt=vVbBnjEGIz;Yb=q>8dfJ}Zl4oaZh!{WTa#5-S!n;0{)tW{ivV zgUc~!5OGpzB?=W)w!HOHq=woDXBi6*4&{LKVt8=)YF&4_=B^{^&`@^GpkxC*(yCu^ z2q-Ad3Q5%=jowx;!mE5`bN~gbt8|GUdgsL=(0!IxDKz-UO!CX9UQlg7k!6)^ONB5w zG}*idA5MDfHc_!%xS?~MIudwQ}4(0#c~zuMaD(&6<`2VQW760ngVlScKRg~2n9Oj>KDcD`{|Ntuq0Wqw(s8Pi+xwc z`G?}gi#CC-^KAX9N%LY?;(B^kuSk|`qhUX@!{LvdYQ$l+gX3uk-jYs5^VcXU^wg1K z*JVcehfG-Vc2hX7SM}3a^z~Gay})7lMt(k1-3!&3S`)As&+L0kR(SzYD(b!p$CoB| zk%Ea~*(tAPoQI$AA1T^)mwi+0o4GYKBlD z(Pd~L^3m?xN~eK4Fe1_oq{;*j6x4ULx0WV7dB{rpqUNGjm?pCI{_k~N zdKMcZ_~7p_Ta&DtTXy#}jLl#FY0@igoY$^ssX3=ikD@1NG@bjCHItH7y3cLfqPq&% z4%@AF&7wM#dT)_h08Bb`CT`9(#3EdeJn9Dan#+ieZz&rzfihQ`7s><*ZgO9|sGB{tM7|Ff#>NOWF)M3&6F#_x{;Vr@nEImZ zS@5zGagtx5Dho6MI9M7=ebyJ(P8}%&Sf&|RyU&09)t67!m5+N_eH(^{%?^F#T(O76 z&;;P*mH$Asiek=&W@Dt?9srZPE9v)H77eBt21@xCuwg#G@pwLBlE*l0Jh>`-b78ln zFhzZT#}y;QlgtG;gggui*cC7uH|WTe^LWbnrK1n9Xan6Sq3S(PYPMWD=k5lnpucqmQp-RvWwfI zE)<@99S0MY54zDrDEd2JG20}+-4_KXl2@y@*6X3{`9NFJL+f`W<Kg}&JIZGljy~5c;iRRz64e?GTjliQMHHXe(-Kb=s4k@%0{(a? zI7HNNGM^pMwt6bAJ@Sp1Df4j28?S3kcv1oFTK{rYl9$|94d#LXFZj6g^*=aYR5o54 z2$i)x^JQM50^L%wK$T9s7i&96Mg`5%Al+C{ec%|y(VQR7vG}>19c^CoSSAZrkKOQp zA+yeAj6GHQc0^VY*j5jrf+Q~ifv%;jXdTiSSU6os(dJCEodD*OZR@#}{kx6bOyFNi zual3a35!JgJipDnWV*~W;d^XaZKL}QnCpFPsf_r-Pyaf1pWJh$}{!&bH_MqkjGdpZyoOR zXVwr)(PstjBN9e`XSlGh_Xydo4O%O(f}lNP8Q6TqVb1ZCR8>j@Iu^akQ5bQ89t?7s z7pYmsnA@Kjv**j4PD9+F2KlYC3hm?DvNGw*2iNA@P~8AyK8S(Qai}x%348# zxd(^SFTMU(k?0Y$SgyQ4`_gU1=1YwhdWCYSQkMyL6>cPhg^{64M*ME@pRgV;QrL_y zV?$VT-S@1%-9SBz(H!glB+QM;FCv&Ox{VRHQw(?$)fb(|(Ls-8 z$+a8iY{OthCbuSoP72j5AHRxPp2a#>!bR7IePCm&6XqtaK#f7SV-hp{N8rWjSn zRpR9%k4!k8TO%vPA&+^Cd3pl8lc+N(M?or)h*M=c5~tAVH?wbh@%FFMfcr5_H0PEkiF+#v*JC z18(EAkAw!V>rVZWcACG{U(8~9I=J&b*nd4t|BNKN^rb8wU9{8M5hni5MK@Iny-Q|S z{EY6rI>-FgdJeM6%%QoVM~KC^-0r3J&g=GCaw4;Bqf=s0GT4S6Xe9MOC$^hr)>~Zs z^sNn2z4hJz3wAFO4bqZHueYZj|4}+)C4ah|W%k!r>JZsML8&??BT}o9v=UW!dt?p@ ze4Hejcf=trPAZDOgxjB$PjgX14QrLIS@Dr??Ix5Or$3@AO$pYy-L9rCIVJY$@CunYAq$AU z5~oSucd6L$$xM5_+R^1Ywew?7$rC0lUP#E}`{w(7wyj@{HQU}1%urR{EQ>SqX=YVX zr+Z5=Nmq}hupiIKd>=Jj$Gzdw@JzLLlslsA2}Tc`jGBZcQ_?F_0tF>mS)4}rbE+_p z5116*k!+fC`@F2~Mb5e`x}`-AZ6PD9eis$EW-Eq5E|>^MPBagJ#1^u_ykK7=d1P43 zlg2PZm+49)r4HM$QqPr)x-yh>(qrJR$u6B|y3;EnlN5dKjxWe^npsg5qosDErW@Kp z?(~h+d*h{Ry@?zBuSgNGlh)@!smJxk@m0#fT{I^w_Cxyn!7UI_+Y9CsqsnMWlA+^K zfR(Y8&Lj9PT;xMQF7u(OF(-NSe?N5l%R@D>=z$QTWV`FK5ZkSM`)qloeymeYu9ALT zrO!@}u~>WwMUaQ^xyh0c2P7RBgCG5-6}Zf@P|D^5E7v1`-u?pww`pO@y|G-*H9^4=~; z)7_Db5+?hO4(F9PL?(@{u_loG<{O<#yDx1H-zW6>!F z9k}g?C$s_T@Yzmz&HHa5l_1t$OV%HUOT~Iq_qXQFAuEmZA{RhMQSW@<0xVae31o;X zNz_n%{Q`Pqa&IJI>$lwv$$24=KRezeggErm*mT_N4rdC+%OO3mB47J?@+E?b@sak? zN!PpAkXwO|ppbS7NT|nOyjJAO2hn>Sz+xLs?Y`cMA6N-UB(+k4tN^NNxpyYU@wz<`EPR|vclTkn+{@2TZ}O#~+=_xw zmyYX{mb`Bvu4WIu`nC`If06^(_YX;S@RIAUCV}P#<%}2V=$|~+={OV=%ZY}%4T@WIYw5(EhnPo(K1TQQkbMxG}~n-!b0Rh3OSkQ#I}c-RMLHfuA6X+Qj{?z zE?a0*ECA^h4Wtsu>5_-OqILHyr*(G*uP5vh406`);GYlq74KJ~oR>dJs&RnIoP6uQ zAB|i4zfx-TRPS!t?OzYW>i)a@4jA;#yFAuqKQ&EXwleMJR!)AaJ;DA23tewGlD|_5 z%#B*COwJ;Rt_!lC-u~66%b23FZg$+85$uCo2J^dPug{%S)w2B>I|x^>X(mz__u3pF zi0Kz1iQzaijNm1a^w1l}n{W=S5JI_h$0SMc6ZlO)!?+<3;RGGrHRS{o=9!GFqoXr3 z0x2|u1?8Dz#SY6E!#ZLFq_DOx>L1c!WkPb*XP^P;tT!!*xmJ~WW@&E}VjFI^IwJTR zDNFkd{(FBDPLyUr54t*6vpFltWOy;zj_OTV@lMpfp!ywx6}guA_NYx52}DRMZ*m5K z8~b(7;4VFt-RumYbyU#bA6^MYnj)o=ZP#%xu%rY(_5s?nKESJTDAamgH3qZSLjx}% z!R8P}>s81cQFV_}mJpJGW>Yr>#K5ZhncyB(n^Y8cTn; z69XmcJo-gka}@A%xi3*EyZ7RwF4gODg9v(f(J5iReiY!7Ot*injzPN2tVB~K!#zsN zq>N4EDEYWsEOIDiZ69}wy*&%DfH$XgD^=d&cd}xHaPUnv)Dq}{ZUfvU@oX;3u&-Lh z{bEdraRb(!oZV#?;xD0|+tjTzWitJ!uT%C_Zm%tR97w*R8XN4ip3bX4xZY>V^7T3Y zJ}>mRYA*3Z5A6wTOi|e5vLr)2`ta@BUislK+wXl#f!RwaFBIa0Xmkc0mZjvq9mDYD=}TkxZD`Ci zvFPtiX~vrJ!KWqVAWP}z-nwN=cG17w9Ge!+!)~DU+3Q5QLoVk5pPFsdt?qukD^LGI zBg35#qDRj!#(du*Z>_s)!8s_1A}vT1RI z7ag7Lw9%vV1OG~w(T8#?@mC94`ZZ4mX5y7i0VBRT1;L1;Od=eNlmH*Ta7l*^IZSt) z&1Tk)o+C|UJzeuy(V()r7_?+{*YXCUh!~-(R2Vf@(TL1z%y9tt6J%dLk9-56ji4*4 z+MDdPClL!*JNiW<5jNNCafePEfnNWezsy@X?e1Hbj)9@}&#<_CH!g*8t1CzIW#6e< zvpp3P<UxPjf1(Sh{O;TQf_L%}*h5RZkzir~gYNhR_hag~ z0a#{BAR=8s;^(FlD){&~^d@SKHTZd=hjYH>5?!KQ(P5+S6N`5ioc*nR!OMu#rwH3#RIaoW2^Q=jR>?dQ>_c^^N6I6L;%$Lr6Czt&9!}sCaJehwz{rhPs zws|Jla|!zkI#cJ1?%K8_BUTUH|22zS=JiOojevf4EbbhCFCxV(P2};2Kw_Gth_<`ffeNx zP%p0t?#ZG#ln2>_;Duf!0qDT!AG6_Pnmg*ULO3&A-+RSFk42xd=ppN-{a;2f(Aov2J{e&i11a!Q?w^>L09aV2C zXTREg_l6LF(Ye;U;jvuyeKC)&Sd*tM(*^zZ%klOrW{gveVycFg#a#VITIn)<{R6FZ z>Gl7KfGx(IxXgbE@Hb3K7A<0KrBlUj2)WR39}<=)KFLB=Sv3VIeq;LB=7BrSuPnJM zSs<@%Wq`u_idFvAV%70-j3zBCEDA^?=m@iqq`Sh}4e2pV|D+d^ORm>t`AWoYx2@yo zjenfBY5lf5Jr2gMqkH_m4Ba*if3+!4iSyEVOW?LImcE~}X7%}+hl=*PA1X0o_E7i3 z_=p!o1X8CQW{Vz8j=cpOCCWv$$dA>6Na*ZuiqH6rr1LW^cBgX4ewJmlQ$29;J>}57NROi= zBRhm;sSCPF%N$Qvurgd0ZcY3Zzbfz;9tUQPT7X9U_!u`x|E?|VZSU+1roLg&X!G6R z8P!UQO79_DjDnGg9oj}^X8X80yLD8Gb~1ycU1QJpxgKc-bW@H@ z*T)eRH~_xt56QAnS#2S`jwo=S!#(7FNJK1_>usER2#wn_5jGuSQXku5Ht;DF6?8iS#)7Q{*b$oCAY`&-CjTxG(0+|v< z!y%OSJ+)vxrXc*WNPk-QuH-K1VO?XnIz!DY6wDDXY@u=`ha}|4m)#M6=(Qy?%YZJm zcHiiF5N27$^88(UjfIlj4G-`-0-E>zK(9Z?+gCB{DDeskNJyWmPb)lT*0aR=6_6A(Bu#rns7+FM)b7{3j~y{e00W$sjghQPw?D zXpS}|Qbx*ea~aEH?2F2qT5ut0|9Ru_s`%`y)V1pjeDRdO!JBhG`MiC_vRn}C_ zK4dvE)J-Ok3Vy}}vx^`q)LQ6L&T$%hwhVewHaT=%E70d}XA%AlhGf>$qMFsxDgiK{ z%YRp>mElIBZQP10(m!HSjXXN-I@}qN${@Dx45S!IleHOz+-^5y)%|8e*jYApqak)=Xod z(~@P)%3ZUfBL(`85GyjT@p^Z%4@HEn?54g+sjojG$WYYcn1YuwXRaUa=n{g+FgcfR zx#c^&1|9h0kxB>A<K zTAqAE3e8Q&H~MZ<6s5Hw;lI3T5^URNn-7;|MGiE#P~zFaORwhprV2u#|7PvnKBTOP zHWs5r+jiakoV<3K&TWdsDeqjLrhTa%duvU(^-GH8s(($}XGC`g%+k zd|6+)(P_~m>Dcx|*+>$7SaGnxr?0m)$_xxE%zdxy(EKv;kwb8?XD}JR&P*HuOZWoI ztZVN5RGdhdL&}@cP7FTtI1(!WqDXX4;3(p?<=4t|(6i8lRk(=-IkZZQlk50Duv6i6 z1Q`SZ_?r_m7&l->Gau$JX_q`y;bX{iyQCpr+_UA7%xGdk1NW4)ej$`U80%G#JYD9< z$o^SwMKc$NhQ^{4h0dD1)olD5HJh6nZ>HWn2N3+-2Qmsug03_PdF|=e5#IfMA6yUd z^)P>5xpi>k#CSLLysY0=>X%-7>&kr}O?)3{biU+fNcmMgVu-5d%g>Xi&l@vo4;kL& z?xJm_xW*u%q?9zGG>OLBD3qW{79VbK!|0W6G?)`C)vx5RUlifNk_VcV+qYdMWx6}o z^|PC4Z#Pp2gF^PS&y3e|r{$l;Y-ps#^aM|5d+P&aJ~NmZXYX&&ci=0WVhp!i(p+H> z)a?{-h07%j%N|+bA=!8H_+t_CbjelKjs*4&rIeu0Dv+n`B`Ush00|fOeHB4tkc8zS zfG`Q&A(}(J(Yg!cW%CoBXH_{I#^tQ@^o% ze0XB=5H*P|)>)hKgeO9~3`fq3i7qX1-T&E1Eq`z(^rLBNJFXArZOeVW=DMLVFx{Yo zWB>TkKJFNhYO1s|1HV>IuJ1vy%oCIGbrCE7Cah`I)EuK2CQkL;JlJnS}R{T0Am16)2fgQv3hF(>BZYmG}gLY z^nT}-tEk2uh>KvOfu(#oM>{2nQ4OQ1Nm;9fFrYdfd*}r|4xs}gRyj~Tzd_$#Q19aw zd|&gy22zMv<(i44H=Po!fzNi7obk4;$fAwVB!OrK-FU9r5tMKd|IPn}QgP&f_B5B| zD6C~&nx?*CVn?nj+h-T^c~SZJRoP;K_2_4EFvBd}|8`?uwt@!83uNyRp$lIdu3)m;(pH~U0mS*SKXH+R|*oKIK^#BD=vO|7PIO1c_V?m(9Po7 zw)C9Rt%>_~+CA7$bwORwZBsG10*D6(5(39t>>zkU$IXP_bhWsHgZEa^{vVPOd#}4C zTE$$lax~${W4{Fy11!k&f2Y*(VMU>cm(_^(UuG7~P~_plP0$HzX|x9?QF zOAlw|ANlRc`fi{h3TB*kLvKufmHo(NZrZk)`mr9nOriP3iX;5@_13&_E69pl#s`>Z zux>rA#qFVYX*E88t<4c7k7gQ@tFDZF`0l3=zI|`}H&PiQeuCZqLne=?K?`dV@40X_D%}Z{pYMjQdVhT;hukTrI0tg<*9lZS<9n`aY2M+RfOY|z}u|-%aMT|va z#+Z}Ibgz4)l{+*sWFYUJvVd*AiG1dyLGZAcF|tKw2V-o4&_Y)) zBYosu++{?60B@h!6}-`}thrAHY^a(NT5(c~&4=|xV9dS+j2*85W86Q;bw=k~WXe>b zVL3zRC-3@XqQ27WUyFZg>P_+8PU7(?opxqovM>4Phi?1V!{c}B;-lF%N-*qF8tTQ^ zYU6EjzUH=TyQ%B@5zWA7arRq**jpdC3(RE_AMGRA+gqLlsw287BrV*7TSuC=M`C(3 zN@U;mMY_tk%_z?Q?F~(|LUiK3k8827yM6U+_jO17$F`HMvS%d+F0OM3g`Usn6F05k zBiDOi^ANG3Tm$%V;wF=NvF6S4sFpx-Z?zB8!b80`#t*#k4=Ax%zH_89g)yCknUH&D zOttK;nwHI48U#XTWlfouGt2t88FyN=p(QtMF^v^&vmC#>^zritwV@k>9kRQ@15uH% z;1%drC0~Mc9gMWk!zCnN4py}BB)NdP0hI;Lcv3VXqiQJH9w0dM8D!S%yz$+=b3cR+ zXSKX~KhY(sK82Fjg+wD|=O9QQJ20<}DVOIjO5Zm*>GKGzOtDu>3ZE!PUT-S}g;D7- zKN1G)&y@*OJ(PIzV%wmGBMy51p*3h0#RYZ@62#1{*_Jh`eCu9pyX~nYRT+l79x#+G zg_|k&m}~2kubchbj%r|P0ga>USf&`<7>z3|v_?d6P$^jj+|SK{q{YXZ2M5`%#BRe zcp1MA18M6gr|#_To_4p!$=QF86t=v*=C&p=z;+a65(e{bg<=`nm0@boWE9c;wQDaT z#bEx042J>HXJ5=By&)waDdSi-K|dwMA`Cz7fgm9m1FlbIjX*m1G6L;<$$bTx`L@YQ zmv4s@zje*?AQTp_jdG5KGUEgQxm|OT>$qL>EVs_rJo~o@4z~bDumh)S9-6jHdky4| zxm&kn-z$ozb>wHkw}7`FF3qFOU6?YwF0sQwtx~q)+?0S2%xj^&rTHi9mJy4AfU-rI z%onM6$Dci2a#?f@b(OXKpnZeS#e=RlYXxlo_ZyL90JP}TGRc*zsw|-|SQz!t*eH_2 zRu*mv{$vV%U>FIEKQi1)3dG{lPi)*MIi2jdy|Ub$&|Awr1qtKBRxH!5ul9R3y3CfZGs)&g9bC)Lo4#fHk4YQ79WT>8w12Vn989IkgZQ zPOa^jXitA=QK*e#*u93Oq*VcJlaQiq8WIw||9lubfz8H^n%0{*211szd%gajSLlSKi&*eyF|+BoK@ zFOD5S7C->hiG&Y;&X20y8Y0X2?Q(Hn;2`%i6M)u?SM&-i3 zS?ZvyY9|9WrNC-)6G4~{)4EV~f+7#&jq`uEOT*s#dzbzX43MDV(QejG?-ZOmUovwl z#=fsH20fmGVrq#^U<4qBA$4mAJ==<0xloEFYyL+FKBKUbxhK0;Z(B~q=5i#X)Sf$+evUjd9Dxw{xrfL`@kSnXCc#~==!eGzzGg{R^u1$VEQ^PGg=7JKM6FY)!_~d!wOuYj z$n6}Y_?SOTuqmxMh!^q&qf&jZplhPv|xi5ozcOql?$jhjN|H@8xq(akl16%G}G3qzjZ?AZ+>kvwy{GW$A{xaTWtrb!WHQ5CJ~ z0lwy}{9Dcn->I3$2LvgT1O+V#>4^+aZM&rhqqE2KaXk`%gsrJQLsc#Is~UmbLy?C zsir9?HBBnxpybb&=d4hqIJeOIdMnSV(UymCSDwRFUA;PC_0=BZx;Cu*62zRpoK;mk z5u_ox@uD2S7Q+5{)M^glw%%@~1RjU(x0kuW(kT3rhVAv9r*IrPEJBvWn;Y+@fo!@I z3Q`u*S>lS#w(e2{ASmfVj2db%O2IZkNF)bI>6Jmp|L%6{U#5}Jn%lbRlYcI_Px9wX z_s&=$LX&cpzgzYPIfJxhVkxi5hc0$u*D`FuD{jlFF^?CZIu?zQeQc{?|8B?5afg3g z_RV-QY&%UzPplHy?1K zK)u-^X(si9lvFDm^?=q{=OH7OR{DDuEUmfi+Nnz`AA~LRTm=4t()a~e@n>A) zb+MUqlEKR#5Q2dOl}mJ*MMMXBfy__<7DV#u$u?8+90K(gEkkdx@gM;vH{~KK(^Q3> zy$x@zxhaUL-j!WHs-D!J4!1MmF<>~;YvH#30Y)8SzJl^{L_+5sGZVbe;WnH76QGwD z-Ss_*!Fw?)mOMI zDxz`+Xb5QIr^w^NqsmOkQZy7?vVa^b9U$JM6w(>;)2!JO>^PsVxu=%?WX2j%lzM(a zkDvC^zI~$)g@XhowZb*9(n$ONFvLEPCrWl|Pw)GyUR+QA*nTm-9Zx4ee9}gz6oVwC zx|V0%AfoWvSt112t86kbdNh=XnaW#>`;RKm6?@G6mHC1rTCqatrMBeT3_d}IgdN4_ z`qp0~=fH`4HAA0iubp(~IKJR!&5nyV`t?N*T~(wrURSJ5@_Hiq0lxO}^9Q_sfELZ- z!&oU*86Uk2LP0s2uC*umie}p{^_fsW@+t2t+U-RBd6<#*(Kx!;NU;dxfO1*uq$HZvr|I<<5nnnW8k+tU;R`TV6 z4#eblekx4tT_kISk0vX3ff5zm7O9uhJft&Fzn<#06uC5QNf2R@=YlE{Y#l17a(fmZ z*0;!f5*d)2#p5N5Tm%GWZJmY2zVw4320`UyrtH2g)LTXASKm?rXM5<|{i$}A$ba#z zligKSib30U6p-XVF7)S`-0u#yzi)DndBmjm5@iDr;1P?_#*mxbGw)>8N{=+T&oVZK zex0tkFB%3(m`w63n8%0tLnzRJCWT(Xpizk$Xmq?Q0O+9%i6~95aQ)v!${y$yMJB>1 z$!QptmRuFZG}cA=e+h+|d|%l-=Q-xda~V#kP;v!j$m=6n9YPh5xk2{a@+fmowRrJy zdM&L=OK!T6IB_yg^PZi32i`st6v^yty{&i4yJKh{&j8>X)btGfV*{j|3ha{(Y!8a@ z-2n@^8by(qEOnFq-zbHUg^C4dLl$|-Z8?&5YgHl|5eKSbl%hGJ6=o&wYASK{GAC9V zEYxPBBb4hphm})rrCw$8WDGB9ftE8Q#+J!z!XSxZ)7TpUrdm8^7jV+ynF6Sv=8v6f zu+W-^y6dKX98sS0ADFAgXTjehHLMj$c5bEff(&^)M*1^Yj~K7U`B`S8`-`zT{>srePcy*H+*2JL666x>Bw`bfus_ zEtB&-?q$rLIV#q9r)Y39V?ilJQ5iK%1SVnn;P04mtDl$s)m_^Izu0fNE3J)-QL_#pHD&w@#7DKz3?dp27(~f#326m=jMw_U%h$2;1O`d}MC*sWeRy+XPCTN9~_Q#O$>Rp`4p4o{c zhi)5rKH9smmkY3b*tg!4t$#n=+qTjN51N{{#Jy0t=* zl68b1W$@Vja%#oANV)J_voWG}N2LH>8j%S$s#rQrEF}D<>v6v3wr=~Wuluo<5{4Bj zg#}UhN1?_81hM00#bKH`4bx~$GBTULl_?5LN8ljLKik@nGQ zi4ZrZFK@27DyoVIy+sAN9Zm)^0o~uhee7bdl25)d#p{)Joa1ifOR}(=@(kilqJ-*; z^aD$L5+-!hskL_Z%BCReOw8RcJByO=CEjKZw?Xp_G(_ZN(KNhi02{6!@~ni9!2bCO#eE3qWFwgv4zI3FS_@#5OTiS{Q zl<5oUAD(S=!}mEYyr@cmLZ3J8LkrDEc4LA+a8!b!sXmabG@ELY8#lbbM~93tGC!SF zI5wK;9Hx-&bv?2xpOaOman{w&wdRMFFy3_F?aq1YJ)xh%>hRViT&6=-(!abtP4xS1SRV~DU5D@w@iu{X(`+`n&NTPNyNAa2 zaN#i>@NIJ&VP)S}lR{X_iFUft#x2ANC1Bh-%riV)bK9h|-8G|*-V;mv^FZ5A%cl7{ zMrX4zQYU`@|ppZsR`bV1jB?3$;c+$on>Mk->ZL}NF5*lfInbtfOa zzGb)5l3U`d*C4mr{{wkmNuIgO$eqO{4mKQm`r$4vK`biMBR7=h$f<3#y(re=wUep^0T$sI zC%!3*h%I;$+yQkjiqHZ~jC9TrcQt8FAOlb0D{S8`eqB+OE4I+~kq|X$BBdL*Zs{^_yESV!4)gB%eoW7(-5Mgh+ebTp zd!km13yr`|7rW|;wkQ+Ssu{50r5QBYaF&L#AEwzHQ* zta|66arBk&2x#+`DkwQDS7~x3hhX1aew8!N5(XEZx=APbqJxaUy&<*8(L!vWv z!STrFAOc*$y9I7P4q1@wS<*-^m5Sgr%R<7K4H~Ho(IQsG#QbD--|v!YaFAljlwBAv z;ubAdu{rn6MLAN(O;fV|-|u&>GsN<`i--On0X`4J=cC4g!Ls)QY>QA+3ssM64RobmuS9jD@AU0=-a}Xvo;JWvzJ7Y8p@hANu+A=t6<6T z3RrSvutZ8WTuU5$kUe)w#a+adQ7$>hi9GmZ{o|0XzumrnYrNh6abKGyMVgP3d!0!;*7-4?WJGR;I*cg9~8E}q~g3n>>YWS-kt|T~c z`F_5;r8|H8@IR@o-*ve2uUV2Ju1|5#-2j5Y&$RSUoF3}M4CW zYrAe4ScB#nOI8SrI`%^{51I)=fC&*nU463VmM6p#wm-52;IGQWUvCJDprH8);H~$a z@&FA2kM3YHAbl~=XCUTlxSeb=+>>^X?Og0h$NVCQcl4uiV;=z6-QiH$QgeSaNEui%AYw;%g; zy5_nsi}a_4J7WJdoX>R~Znz;2n?l4PFe8Nax(gM}&f^i#<4B6UJnL2KmTcS!JQ_U> z+H*8up^vNtNU7#ZEgJkrYr-(kDF8TM@<`iUj@6*^QV(z=#BFg$;GvKge*3XL=heSa zgpxb6qyjHTJXdw47Mp91F>@&t+z)v$LT<$g;l?YV7cK#n_8?(Ol$J@hYdi(rpP~ls zlnfYcGc)v`A$5ZHumTC9ltcKN8d&A1`%oPdDN(9~2WOfh1;dz z>yvqkU?)PpG>8lxDIB@k-H!Wiq(o1S+94*17%_1gdZrbR9qAHxjZ#TIO!T`Vvwrsn z^5`aMa2IFwl53_U13z22l{CcUS1|)A?JiZ;4fW8iE$P-O9s$8um-_Q9 z$TBi5(XmiT+RvHzY}6V!VW2(D1tl&43E1*1ugwk*t*fUk{U^k^8`{yJGK zJS9_BaUsVU^16S!SU*%GhPb_I*3VbmRMeQzj9kL_W1t`2i`IDV==U`E0Ng$dTAcU+ z{Ij~LBpKJuj~s+d-?|iuJT74)!HSjNMrUJ7F-h1S2jgh0V!wZWj6P3i zjb!aK3>`QI^&p~Qhmh3oOA~OtNGdq|6jt&TAzP*-SX3-56w!oZ!_=ajliYeFgG^Oa zI}JpH3$U{je3KRu^R$dLn{b(O6ul(SHbP;1BSm?tT%L*Na|BkD-09s8L!Z^8UN%yi zaNOG{`>~(}$3_%7G=C6HDYz$pGvoJ0Ex2sv(p_Gi5XU$!U$qb&%^-CvALjj(4abYF zN>aCM`Eb8ktnt5Ctho!h(b6vxJE2S?U|^B%%3kyP?39k!?7KrW5PT_RzS4Ug2?AvSj-m92i&;ryl^T+ zvLQxgmuPYgkYo%%gz4q9k^MsKem72znq#xhC;M=U;m;RccSS*U_m+i;Wroj7{mY+M zvZO_iSWZU%9O`u*ARx#F)MrGo7_2;N(vE3u`!sUf*uoURw0gg9W--Z{EfkuiAFt^$ z%^Ua`HBCi`l z@&6XneCxM|F6D*mKKq|z(ep)jWk-4jT_yeAUXP?81JVF@AW#vkTKl9BqzbLZ%iUMi zafxeS)VzL`IvsRNy_dQ>{dK}z$9Nm09H9TwR)aMZR=U?~Fhkd+D0H583QW0vsE213mzx7wH9w`dOLb4xLA7yueW%*Sc*UEd?2$ z=AXN1EV{JSWdR{TfEo~q<2HOW%Vh*aN{v#Q7jWO|bt89(@6Sn>Ii>AN~58Drl{*UeQHfeXrk z$Mso3>iV0Sw!)(EfDL?fIbF;JDb2O8@nXBR-X6H&9Z8f%*diiG`7_OXp}T#SWY8F3 z(v%<40WUH?%qwb-9nT%DcO|(SIp!*C0`}AyCE@_=swIrOK{0B;V2F2TI~qpxIBXjY zu1)9xy+J9nI7)YT|e$(#?oNohXRJspDa;*{&T$U*xL z-VYR4`ZYRfM%ck@ZF%IN6}@nV2u%9Zm(GVd1)kIu8&=Zmw$Xe~2jT0#NWJ@Ev2Mdb zpT=@p>+dA$eKND27u|Qn5gVGaFQi?PBL^{Cq9Ao-Q1I%7S8^Phc-|E>-iIIFjm6#h z1k*)z(cWboj$mvWf^E;CPI{;(ElM;130D7u4Fc@YvJIcJ{mCg=D}kLY5V+WGt<5s3jcf#e9d|g~Y`0YE z6!ldYA$LUMrL1IelYmtGjE8+Ij&yqvWFt>x<>|MoZd!De)zW(Nd(ree!gUTy7OrQc z?TFLv(faNCP!jQ+*1U7MwykLZh@q`@GgtPKA>aNsVQ!~w?NeU06BOv4>S?7vJQDo> zmhJARW}tB(T?gfDwaT64JELE;po!pr7C68q@Ol>h1BBBMB57I;Z7puFyW_OHL|C)@g5T%xo4Kv@yg#j@Z zPS*j6yx{>A+ASzkD&K25`aJiUm{By!juip?;)iN52>7@ZZYsL#iKk0CGuAIuf!t|Ks9T^eMAe*s zH4$_Zdx1g6Q6P)IoIB@|u)k@jPaP*kU*=wdO?f!xlMYOO5m_-Vd~JbB|o8zfm@wl&qi#P z3fuyj<#oe*o_k=;ydM;!k zMolX>bi6TKfOx%^i^S$&HRSVd80U|34wc z$yc+HVD*Y~)L=;A$Uys?)?7%F=$}#O00PVm_$-!&#@IaUC8+I1GD-6kqsU^F)O9x} z=RH%cDvJ2uzR!LCm|XW{Y)zxsR%fMOYwb=A_du1Z6m$1=15J4}$tb4_|59--S9vW+F^KJY8&^U|AWRa%Q@w@nX@z0qLFefKd`mB; zY^<8LhvaM8#hIqrb`y)WT~pAy?vH&vC)>BZZo`IYtXc1|A6Wl+T5Hpiy&a2vN{nB>?Mf4Yk1uD{c)hqg;3A^m^Q1?&Aj> z0EF#ZDgul4s@_K)fWkYr1dm1(-aad>!31`C$a#dxiE0fEP~3y&p4?r-5$a@&1rTcd zMXo}a&oV3O>u)P+7VXfS@Q0h+@m|_!%cEJs#`I6rH6oha86ervJ-Q3`Nt!7UuPibH zTDwV^oq9ej)#mNrefmPhoMC@xyJqS3CyKtN!i;3j>bGi``N>0~UY(I@qMcQlx7CX@3~ zTke@;y;7D4FhVg|lT&s)`pCzPH6@8r_2Qaqvf1NE-E_^^h==}!ZqOgz|Kk$_Y{0B&1Z#y^Z<_I@&DN)C*ql~y{^4QIHHEf2dt@(-?Z~B- zK&0@dhNJw3MS@j2zC58VC72g^Jk)Eo2~4_)%Eg&#6sVP zDgOQg$MX-s+24I2Css?o)U;wFLXa5w6 zso!;?FanryA&^LL%=JG$C)A!zW zy5Bz+_NUvR$`w&gchoCO<4~TR?zAv7@_F!(+45tU2plz@r=)JNU;3S;YRSMCt6SPG z#pKNtUO(GqksR|>lfwcjj$tguHPr=+?jw9OkB@}#I1U1{P!MJz?Yia^)8<}NgsmPF z(c3;N$5kNi;FYGY%w_bWT%w)=$vmYxDMTVK#SP^SNuKp`VudwV1RIp?fCj?PY`#D! z;=T7-h=yNQh0i=>QCZnS;=O~kt$^PGDnuwyM@)pVPU}`dnym6;BY5o<|6GhD6<2m6 z4+Qal1}r%QI7U@kW;rd`Mloi>Sr;;eMq|9rmG^c9fdcK)xD>Os>*T1XpJN;J^7ywc zcUhMy_-wne6#gUlFy2bQc;L={rnned%N8U@Qew}o7`O8pM0+`irhLQ5%T+Y_?HpnOp7X5o}x9PEui^Uyf}U7kwaCLretU?WRxRnWH*L z=n7IM?00+7%g3r5+)nxM2RkGx3{?@{%<69hixI$>H zJ0;Nwvo|{@bxl~VBu%T1kJSqg=ufk2Y7UkQofY!J`Z8gP7u}V~N!NYLbB(lG@hnw> zdDcBcsBuU_{mi)Wld_Un=Ze+!zWtpp&kYpwf_X{kDAmbK?v<~1mJO#IB^r5Ftf3}@ zf@RK?k10>$Ox4gY?7b*XuJMrb8x=%$2*t_m3Bvv~v56Y9TJj zon^?mu3u}k830)%0;AGZz_cznD2l=8V-ArSU_^Hwn3Np}vy@|3R;bl|RB-3rG61&^ z+{0p=Vo7%fANGZ(qwwaU9*xEXdO)JPoL0FkptQ4P=XX4X=H+}H{z4E zVE;`@g6MDu)Y?7#lBhAq zsQDx`E_lAnVDG^qASGS`HtvPySL*?9T9X6V-MGARrN_Q$rn+eh9rB~n(_Ra$8dF+5 z#+irCnK2?auP)dl&yYgx3$jfr+Cgn%;;h*B>>7)az5~})m#w4z42Z9L*78Ju5*58- zmG;&!yynu~-uA+v9m8L!W$UCZgMovB_y$AYvg**={9CKqJpo92bD0!X?5(ME} z6gtTET1R)yvxBNHoRNTKl810ivYEK9ks*^9Y)3ASU{zwrpRBo>I?@HK+mS);x6`DL zHV?j#hjFQnI?2L+)6aKO8;Va%uCe}c3ZZ5CjD1>6`hMM}z3|`HX&%i^Dn-LStwYM9 znyp_~aNzwk&vBYu^ZjXF>9+gYcI%nlu87u4$bQoor8Lw1*$yi?+BVPC)FeXeE*sn^ zlsT7SqKLX3!WYt`ruh(QM^U`EpuCaZaZx3zGv#q!bKfxO_6N~`CK9*Uk?Qd*WmRPvC|?DIqOMLwNYERqL^g5Peb z6d#l8TT{Kz<&TtV5l{?qgfI`HidGQLBd`%vIwZeBM+46hO?w-NV#JeItx?@LZ?^OM zT#k(Rj>(p>ueyqCHns!^0{G^jC7Hl_M)l zjEVG0AKdPid0o1PbqcO^jy0BfA}$lA44r~xp_wyA@%6^CYn!`Rq+`xK5nXPkp(x&P zQew{Xj4B!KuBJt|rK-}rf%u#NpwB+=0swk%`#2JFGAbhH%RfUzVX!2xMnp0=OQdzZ(tWm>MJn_1kC=>Cq4{Tt|b5 zAlb$-cQ_sCL@RFFrkWa(Lxg+&T+OiK1;r0=T~We7Cv*mOoUVo2U}4)3LtoG-iin%@ zF$2vo#z!tefdsYTXCs}k*dCkmTpo(%=oo6C)Ic(50#+PzZtyo z!d?nF>X~;=Yp&^NmtEEOGA;JA3CvQO*)>~z3enr-~zo<&pnsnG}=yU=EUlE9%Jo>kF-FK2>m&tvkxlV>*?}ANH2novho%(70YuC9i+i@D3PKU(; z%J@We;vehLcN8%U0YM&#MEMRZS)&r$;i6W(0Aj+qX+fwK#FN|1Y7wY{Uva+Tp=zn; zh5e1Ju4aJ54zI zk6TJHpon`0k<=+^E=gvo7#ieM3is$3?`uwiZ>0^M3@i@%D(q(g{c~c%3zo$Csy%5r z)P`D|rou2MXHY}LX>W_+W%3U;FVyU+Xp8y zSt}1wpf&@(&U7SusPuZ)(b@hPI@;xF9o=G6U|#RjKJTLqZAwTU=FQH1SJbU3`*f(E z9O;%+$ug0++{uv1npDS!kw$~`B@@IBO@;pC`M!~*G7cu5O3$~v0>kAD6?!~lnVZ&W zk%CZ%`-B_965MHL!jzs?L(MH`hnq*5)6B&hy!B57fNmeS-ac^L&vFO09erLj^?h;- zwzC{&%CbDfx>@5D!PyGt%mqs8DW6~=#pt`$Pix9d$DP>j=boyWs-C8yR5fOadT}dU zk@Jw{xJoJd>H_2P$vW zD@@F07ToX}i1<0!ks3nnJYrI6bV}jBV3GhO8qmAk^rWQ!8}~Au8Ed8jT|M^P9IHy6 z{-?PXcPwqZepTk&JBNPfT$7{iSp&}nLrgTFqN-|UX;bgfn!-tVW(Np}rIw8LSq8t8 zOZMDmnnE$}|7yk*o?7S5&vs9v2b;ENL}@+4b{2&h;XLJi;&eiaHNPfJbgM~btAj%NC_z$y#Cy&iEK_Ma!sFT*gjM6G>9u=~M1J3}}G{h9&)PbRS`+K6UIj z3+kuv*b&c#QsOn2TX+5|$ZTP>m$jWG9u3C)0Q|9}%<*UdBvoMdri^Nig!;vD+nsyE zf~9Xpntk1JaqbF1z-O!{uW98+%(-5G=f>PBEJO?%7BuB-O81pkv4pJ55il=9Lh5+$ zv$a+F*Q|C~lREP_iX7mPiOW_Dml9i%LkO9M%r8ck0o?bQg^|G^o4e{5Et3=AeeR=! z#4>5Fk_@?|(otv=La;D4Xw?dI=csrnJ(l%9!?H-mjUu~avK;&Q>6IndZAE;kuFQCW z)Laj(W_)&=zg%bG3*6*6V*Y+X72ez2X$0GzRk%Tk1M874iC?@7N8$58b4pJHsd>@e zNUo|bMUfgo)Snfm1{emCp9)iZfqUYuFII!nn_P9spbyhpL8?G6ty3v#D3OO(K$3Rq zIK?QtfhloTjnFUEW4wQ3Mhs#b9fYEmJ1wN5ajAgqlnb`=P$o|P_f2fN#;1&YhX{r& z$D=e?Kq_-HoA_`VlJJ_TWpYG^m4%_U*XtiF)X|!E1+Fw_rZ`)N8YzX7@J>PdIKaLj zbd%>KX@>V%#{h?guZTU9nCCS&b&-5k4VB`n2*Sx}q{0L@7l{Jz!8?ATBTPHg;eP>f@b-LuSC3*S2Dca(GOxd5*az#BdJVJbD+4shUa`;wrF(&?wiAY7nk`$WwH@11?M3R7^ z4jN0J%j?Wt4%v5u>$wqNMGJJ6Q$gniMH;S1HNp`X2pNzr!53X6z3sBvLED-SQDDF^Q@;AmmmAOlwlY;MXrv z2sS<=`Z3d_ZUb^IQNj`?boxb#$NDONeIw>VS7 z4@s#dymrFejv`_zyU(*Dm^eh&+_6Sa(A|Em6w4Ca#2iY=2KY0`6=g`OR3e2&qm@?h zg_y;7NK6SX#x>hEPO>?e@fOn~5Uw1uW@G4BuS$^+)PNReG$wT#Rk7V(m_HN+Hl(+4 zZ?sQ2Hw(EilX;2@snmEAhp9f90fRMHJRG<$OC|M6j^Twsguwa8)vBx5rz?2e2g-T5 zUd@pkc`uub?jHNEEhzv2=|7uFOaTSu9s2jQ2a>)EJ8TypZoMQ|;0+e0~~zb~JU6dydAkQ*=m<;vv-tuPp`)d0!80MUi%e0|x-SSN!a! z2=@6nu#65tmN_dLL<|UtnR$?FSD8e^iM3l@9`$pPJXC}qy(qk#`b4(j;O1cT?E3)ubnRnpt&IQZTDIYNnYsb%gDf8?U{eJ^vb<0~Gzqnac&mGxy?iKe~~ zgRT-qWc2sekn*0P$FG3HpczbX&;bakHY03)hFWDLI%Cn}J#^^5EwfvkA0m?gqaEx@ zr{zM0Ig=vSA;sadUl(7{(OGwQmS?b{=}34{3S2iN zc*(5Cmm5ZYwTu7c19>uVFg`c`=JO1=tLK8e;%MfdjhQTMVO^k;44KsS<%} z#)br@}(xS%{lxP>-N7|&`KK0D3c#bJ#sdZ9) zTy|)DQdm;bz@z!G`a0Tz8fSu??Z*AE)%3W3H!NKG+wpcs{U=Q|^;O69=T9IoAGZ&@ zT)T(H=VH}J1sXWUkz};~#*HHtDO5G6t7fz_ljyc)7{bsmF8TGCqZ)ebqFa0-QS`nqAjMs7m|1{ni&;3<@ZPWGnZFp27vB>`5&~)!1Qr>L>S&9YU<}!WZ>fd577a z2JK@$WE|i&)=8m~)hj@T2$Y}J1?OCfashr?15hNDuh_44pp>ew>mFVGsIl>0v9-NL zlU}Wxhfal(&~H2;E=jABCjxaTIm3br{(@mn+8r52tw5O@v6&yl<|o?p(b79ME=2Nd zWXdC*31*sCN*-AU(PKdFg&g2Y3iEb)S&N$1+}9*gJk%+9mXdo8p8Qpk1?(s+@gepX z>wv7qP1g3%dn~fVny&C8yjuKzJKIjfE;Z1%$|LRPf=whzV%pF(IHA#L5&}^w(F9-_ z1JCF-21K13?c|gx@*Hb+&Tp!z`JsN;cQl>hx!C71 zTUM9fCK5heyjeKBd;sX3k|UZc=ZATLD$&!^K8=oQ&~DhnmQLl?G!NZKG%1pVUDjgh zqBY&4U3Vh4y3VBczbt{si*BlhIwhO290loBlk>-{*{$`NIoZk&h9qdiB|%#zNd=Sh_RYEcKV4DfqnAG zpYaAS7R}yi63Gi_M3VFDZ+{EFsI2v7zLE7I81ALlhO@3=3lrirKQG;A{nP3|C&Y_2r=|7?%Ww|Qe>Tsz`k!}>dK;BXa8i8WDjm~ry$@k zRRe8wTcbnt$}=3MX{^!nl%nbtC2$f2-!rDIvF5B z^(;~0Ok8O2uXEOpJ)Qi%{N6pLQ(vtZwK;7M4^?a|5q8Z(nLeC??6=wrPuJYlZ842a z$$Hc%E~2$tpbo2f^8tLC|K(Qrpkl)?yid{#tvL(pMt(=yaro;E5QFkKJhHKyqW6?e zM~y-Ws`rnRC6NLiM5tZCY2)c`xW{o_oL51blvUB(qc9kAdZCA@Z^u5x+@s8kcn?hS zo58r|&-4rP6E(QjxFnf1qnWeU94p8rh+3nbxha-!xT6pz9RWihvwnY#r$0x{_JhDPdKou_6BGrlk(O(?p%`7@Xy)~<}l<||9JC_bXG&BNb zvDBEv-DV?2vS%Ic0}VDGt7+^jG>E>l55xWxcx151z8R??{DgR+6Q4^XHPgChfkYOM y$dc6n$%WCtzLj%~s0~#lV#|CJqKVG*cX=BP&9ri6H@o}t|NcK$8o%dgF9HC+0|;CI diff --git a/testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz deleted file mode 100644 index b917c80cef2c6ae89cbc1f7af4f5f237f20074ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47703 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 nEi0M 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 DLA~X2 diff --git a/testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz deleted file mode 100644 index ae0e1e6ee75fe733472245f9198cbd11520e66b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47941 zcmV(zK<2+6iwFqvOpjLp19WL_d0%dCa&2L3UraDCGG9_ME@okKba4Q*Tj_e^xUT#^ zk1^eIPu7n1g`y~ei}eEfao+z)E>NHx_u}sK%o!(fY)kTI5I~^{gng{$bfNg)|JHTg zRHJE3U01cK$9XdK+)vH?*8D;H5oxD*$d5dUk@(pzzx)#a+xeIO)3FoDBR)=a;21yL z4}M)vt`q{F5OWMMr4%SqO7bYnFCSWcq!{=~=2rsW=a6zt zK09BxLwI%R5~7oXax9Sv{0{OkdmkJvfA~8#w^cowx|+tWQ=9p=t67l_7|6f;NIv|| z2C*qv2022w?Q#UGArA?w#wYDCmH2&Nxva=8*TUvz+P25XKObJ#d1LcZc%J>^^UL`7 z&^?9Z&kXL8XAe0$NBi_H*a@s?&i8>o2#j<+2+U}8V0L}#ZhcB)`8?-JpBxF z^pUK?)u%U3jU^J~%y@f(*gS{0@CyllS^OKVI+UOCzlD9zKIO#-De_;UWTOOv#DQCu ze98He^l!0l;V=j;f=MNhr%*I-z@(=+(i?wBeh+IsUbcu2S zTaSFmA>>PtRgkrlH@|OlKeZEwT37dM^C1zU?JvGE7s5O46Sag(F z$C}B-8r2f-k~6sDH6pP&1PbCmF%7;=@L|ARR(EC?$qrT9lG?^kqJ%=eT(C-V3=yKs zg@614FXVljhpKM{$=X?rM(~N<^5Fnw{OrUcti++N!!qpGD25a17O;+}SO7bV-y@DA zxY^bS3|nBN*cUAPDlwfjOvOA|0f_`z6YIrX4qU&TvCY;>9@y;3*9>W!=QDnl(Dm3h zl^Lt9noB}QHH2Un;RkrD#^LaBu8jmYqMLMaWTkdMm;nCu0=(f7^@iY{|FV3XZHU3d zu#7(XE%mpzrETqc)E{5H+xiMYU_Ke<5S4lpLvjn3_VR=_j7Rvy; zh+K_VWHl+Uvz-8Kd9L^l;HUF_)sHTY?g?yXZfZ9Mr8Ssmeu30E$=1 zaz+Q*431q8@tVLA8MrVO^c&~Z^cQY`63vz=;5|F77ED#Ws zYw;aihgB%~E~|hVrjVsr77LCcG{D;R0DhHnGv7AR#h(9}*apk^9Jlyp1Tej+Ef(7dH38x!K$8B-nj2N7Sty z1PieYq*4?wOoi0N`wi3)Ap8pIP+E%Dw5#*+eo9M1sn|?J#XSDJmMvVAZYnKFjB?;v ztiPOyEROw_{Nk38QGCsX(Re4MJZ~Y9GO_4sLMu(iO zu^(@jtdy(sKml(ipj2!YO(``wq@pjpp!v21=R%Pk%q%@az$_=Yjq9~t*?6$-09G1} z6QGZ%^)df6yyr=1Xg3U_*2}h-(cd?j!D}#0J9jA1s6NU@H1o90byZC2-~DUZbfqKv zjk4PJ8)c@QvvM4@3i=u7WTil-6TDAtg%oGajAo%Mg~0d9vWi4=Y)K;|ER zq@*?dJTYqbb3JMwa4+&%oP`RlO`#K=ieXTeFh}}+kQ!Q}OGblnUvD5}2c7LfvH6M3 z=^fFR;GbrC@}I|fczo-~+m~q#OZxL644;V1zd*!VGgK1U^;C})LR*XJUi|d06fX6% zxOma9R=0+@BD&Sx&|Dnvq=kncEj|iX@g?kSK`j1R#o4RR3qN8212qef-|?=@Xw5h@ z?B{wM`my-=*%cSfc4{Ocb z)DzzgXnh{|aJ#Zbd~`ZneMf1AT$|v>Rd|7F$1|z5zj=Z>71Yzph5(0z4oGO}=BBg7 zt9^rf_D$rW_Qm8cq^MnmC|IWHoG!xB&>G_cP2eS2OP-v1zfRRtQ<;ugcZb^iGcI!c zeFd`LC=j4_F8V^dmFNHp=~i1AyjGBK92bQp=p9pOakIvd0xYc|u~u56Yt$~2LK?@l z{aJ19x@j^Un_jZ{BaA|YbJ?GWg_r=z6u|Tf4d?f2r_V~E0&`Y2;uq~+dyQ>~r423p zO^FJ7)v1nVFLO-04H1Br2%8j~?A*Lm`QnhwvQk^Pk6_a69ZX*jb%hRh$-dJVxKSJQ z_~gge8&?YGu<#@y1^V9E+qKbqc1)4YEHG${D{X-W>lPH?kgE0t>?+MGM5C-){Tkld zZQYn>Z@KBW-ZC!r@l6Q%e+M7#XnOH-)fVxgGaiRsoJE- z3$=L!BSDCRVe%qyx!Tycm6w4{95x$PRu#+e{OOB%eEZbVX5Z#c+5*f`y<2{}I(MAT z4NIz~YGL!CU9TOXtZ@6@yi|e~ORM^9^J+yZn{nDnilvV)Ya6C4P+!D8HML4 zjXrsfnsfFFwB3K~x(gjuYaz7{bo~$A&(a-S-P-`2({)fu#f3J={&Hwo6bDY$dR?Cu zZ%Jy+70%P7+tSg~#a7fe&X^^A(9v~MSG{z_ng%Uy z$ch7QDrEW4%^ActH0E(=6IA!3iiro^>}jcehzH%x(;c8)^_dv`^5x6?d3a>WxKV4{ z|NO%i=Wj-L-Av8Q_YEra#{ue>%@gg1pCblQ2`DZodseaZd=~7=D)DCiA+2tKG}Kwg z&&?E!vxd<-3)f;=%7uoQ!f~z6_T|qmY_INZ_UpGBdG~E*Vbz&-s)q*MFjYYR>VBOd zx7aDfGeAC+?hyK6DmZLue1d1;fEXNg?`|+$z=QA)A?w(97cLS+V_*lHLBXZ%zRg2h zRp=WuAfLx+A6?aRdEu%jG*M41yO!&3RWqGUm2b7v`x1tu1?bBl%_#wM^4f8CcYD}XjQ4tkAtyJ2{O5q!;MnyCDw z)H&8$Nw{}nDwgl*s?Ib_wS|L@wSt)T?@7h~adx%ene|mC??)Mvk<7j}jkIf~p4F9t z9!KnR(x}cBqsMx9Gwai^d1+M!Fz$r|)~CioR;;u#HE|QwkIysPKKi%Um!6&=;P4l2ijr~Q>aJhv;}FO?6wz5kxu0Si&RRW#iDa2 zrIkoWAvp(ZURdSo4#pz!D#Vlhmlv8gY@TEHhBi5pym-@WPWCKw<>SR~6Fe(HWVuv% z9i3rT*9bf?Ar0MdS55Y&t=Z;g8iqkx$qz@_;(i)@im20KEor42K<|R&C{srT3a*!v zcJx<|j{X+4q3aQnhSfzc+}lGpu6f>c2aBV6Q*Z}#dpi|`OB;to^1{Ns?VY#Fb}2&( z@h2t^!)(U3n>yWg{~PM?9I84_kUuLKf}nu=doNT?CKeP9S&jKU2B@>cZJ4Xb{@g3* zRE}R{vmb~n<8rx;Usx*tPs{-PtyYAANm3k$O1BwN$5v(GkQg$d% zBVs%IIWI!nyjHT+jU*N6g0{#-o1cMEtDB}!X63@&vAEt$tTN0fBcI=I+o%ru0P(nG zD(3}-o0ksg4Yh%rYriqKY!KOT{nPi`WAL7_D|1pV6o-F}g^7nN%!zTSx{Ar~NisNy z4z(%Ch}y3%o3Us0J$W|5@0~cv#psF#{P92OOMP1#C zR$iuiiz=TE3=ST;Pp$nv-N7Jjj_WBfR8Cbq;2WrCp`9{dfj|`07NV85l+i)RfbBBq zm&i*Wj52mEFoA>pDV&IeVDxJ}RCvU(^(PRV`am5Ik=uOUnF-%kA zrC$G<6WU+rtf^OW})tX&5U zWCSoO%hHY?+LpS7o^*07l&wms&rHNZ)~0Z_>v|~=US>m6o>ubwlE4|JdtJKM9_lgw zh>7L~-QKUZDE1$0Q5?Uqx32v}ER>wCy)s zQ)yKyvJO;!CC&I;ws~3>6Z<-C!vl4++W4P(i_b6p!{g(&Wc!IT+kTFJAGLpB^UTcC zjQvFzF_*xdIO z`?=Dl!AYl2&z{g-3{|e74l5!oenf=D8xdAEpi{VZ3&N=%bI^V0Tv`X%lT56UXBn1~ zvINpan~sN-J?QJ;P{tc!V4r3APfQ;B$;@@rp=qGC3cuR3(>p{dyuE{+KzZqI-2Oh< zulax>{o~pxD7`cdZ@B;hn)6b=UXnKAjGn0S{E4P!azyeqlo-~94cy$qw0vD016=P| zHZlKX;0wb#WqNuM#7i!Gk*S*C`*F%?SeD4dG(5XChM(9x52H*>VQ&4mG~w;6^Er|6 zkt$X;pb^wjznYkhxb-y52Byrz0e*^ zTTPYZbg#EFdf67^8JKawyCy?i3mN-b1-pbYC$wj%q~0&uIKg3i|onG3`&2?-e1_K!Tx{Z zt^~bpoLSz*le{FhWmDWhkk~JSb*@HO+)ei`z2aShH$!pW z-K8CpUwnR1--Jv{I^-WiFh<2L5I;Lcm(F%px@zvL)4i_jIel$AAFpnO^*>0ghHfC* z`X-6NCJl5R(pDlbS2!7`v21qbD)v_PH&;ovcx?f(Sc3yO?-a}?A3Nit!x@>{A9q;= z-`pt`GK8*V!}4(UF_}Ev-{1G@*U2<@r(i-D;lYG)(hBe?Ea3TzV{V%o8Dcf$lTs4P zx7qFvt9~b1l)C5_h!)(j%K51yrZTHV`IsWE5Ms#WxZckP7<|%w#@ZmnctkP=hC+4V z3${U~@6n+EEBHl}R{@jBBLcSq)Y*39(6qFjKipJ}pQsmYrCTS2SRv{sCdL&2%ESuR zn5Dv*f-SFNMAmwT6>P-TGwBB{>;m{Cg~>9*(34VAcJq`GyF@=762#QlpOGw8)fF*H z@+x@%jaHNt)S4^#)b^rHcWqM%NpvgC`dISOSU#t;>S)NC@KVrj$rMlTmonr`FWT zO%~E8lN%e1bx1xLy3R)b_}JW!V+v!hE8NB==+2!_J~hbr)X&eIcOM#a-!%i4d|P6a za5wc;^)ns0`8V}*{!>jVb-y>r??Tg`7?U8=Rq8=YkH})dW)mk^Nekl>7DeqdeH3%7 z;O7f~uMrSP#Q#DmigUF~z0VUoJXl4oJ__5zs0P)*c?D~m_5HDA28@<-ltweNcVCGA zrM8(rDgMW4_UKL#r#m$;d7aQz!UJYK{KvVBSS-0Pos>20&pyuQ zeoR@0=0G{T-oXK`47n zqum@K^G9|s;!QZF@46rJ02B0ZHmdinhl4sh2UQklIku@5DsC20gc_TOX|FA7Vf7OLfX~BjnzHU1*at1!$UeV4thX! zLenU6;Nh~zpLFz_>dE`Z(R<|CY~D56Vj&ah!HLf zLu(?e?Er6EhpJGM9v*$Lj`-{F*8FHRmYbG1KKeIiy3;*2qE*#%v3KJoi+h=gUnO%E zSqfLJ;|)h9Qma*H2wcae14;;!ax9mGdXvKnmoSEFk`)wRgCwR7B00LPbxSp25jIgO zek5E<#M~lMT{z4adP0Zw?Ex8LkXUu9t0oAZ0Sd6V6|zP+3AAIEuibBdL@ zyZ3F*KOiY``84P*yT@l!C5UPBGlcC)`DpJ3`)hP=>b;A$3XfCg`?pxk9|_%kgU6NP z#OgnfVEE7AJbRj-lOaJFg`|n5m5J($l;=6mpk-imipg=l6-X}0Is{}_uwI3m(GU{w z%V52~2|hbm+g*3&Aog#S?UF3Zd#pL6&)C+Y=eaTgVIvE3IZ-nsi4ujGKeI^da0pls zTO`SZ!)Tl_;E`AZ_H{_j1X$FudzGVb;C9N+vNFXPNf5L zO*IRPpfse`-*WFPBaGr~z;+P$VPUNZp|;*tF9Y(WPWJpu*qBL)QIygfy~03kv%{YO%eST5PYT z7J}lhy8bL3D`ay9$SM>Hy#ZxK-^NqIvJXV=)J2VUD=_tq!6y{Dv7b?9mY1`QOI!kF zq9&5H0j-V4XLUe{!yymwYOI@cr>^EZ+tuleH{?yzZ5897Qa|~8c}D$X zNQ*Iu9O)y|ee7Z4MiN;exoAwK@b#p7KxUEH+kiUhWM1GKx_b*o0D zbt_yF>6}VK@>Nk)fu@WqUlmnJMVDVOCsK?%xSapcpT6DQKRneZ3z4SzHl{`mcj~A5 z$6zBP{sLT`znV_Hbu`nM&n+BNN^|mjE&qMp4)L~kQPM10{;LoeaLmK>9Q*k5pWL2X z-$PO~oMvmMWFCfO)SdHV3bxHpnwVgdvu1g0{!su&pVZJlKf&&Q4(~`fj>lZ1Wd-~m z{<0Y3_>})mjA7DV^PJ_}+F>TdrJN?ru`RA@hg^Kv0MiiZn1+1Adpr0=%<-0)+yV22 zlnTdVh6jx#{kEh2T)u{%!gVV3oR~{7KQe1yvIuEp#CY4Qypmj{SDB;05jmTw-9~0o zi8(^@*W&pVrp}Scpp-9S!3;3TgeCvrb*e{3Y4BH^u(+@|>INXMjB3K_^|}y^831QJ z4zRfSY~I@x^u1CmaxLV7cw<^w+{0dNQ*0atZ_nf`P7XH*RnBB*nv3Mwuun-Ax3|JG zpks*7VEXfdRRpFLTySF1vVqJwm=4D|$&v3P4SA><@(-&uukB+N*qU!xUxZ4uW!Z@nrYdWjx`=|DD2EnYviBueUqtgqzgY~K z_aiLxGb%EqBB0DtCS}}7k0+5`oRFgsWk-V;%%pkO2+x!>41Q(qhuX?LbEH? zc4KW)aOX-pgN95*&d>w!LPj$r1q&Aa<}^&dSbh_!lNA7!<=UET{Su~h3fQhqb=6?h z9?Yq0&t5MO!eBWxj|Lf2etBnQ*JImgJq|tD;%!&5>I;iQ&Uy>jTnn|EcBm|BG0)oe zASU(xjoVkdbuU+W1KLF;g|UFOWWNA`p_Km@2QG@_L*3Ory8*^Jnh90x$g;@hy9Pjt zNf@o|shu1=m`gQ1`bj5E461C#aJ;UoURN;gN(o`;>W!1vYuoL%6a69u5fIJ=5`m(O zR^ru~XOsRrH{P)~H==<7ns6XL>drlc=To#vK^inU{WHNvOR)=cN|oToutSd9o7_@TOQ~{~3TezDfEI|pSJQ-GCeRa6SmJtT+Fgq0uwypC=yk*z%7VOLWWQaq%j5@m!cHa}?~{M>uQPgUGU_-tW7n#_lK#ct zuJy6xfB$mk3!w~nZok3z2TMFp5Q+eb_$l=<3w2~(f}hz_p5)Ou@<^=E)=UPzvnBP( zP4{`eAjLg~c0g(wt{&TCskl2Fa#JgfjjFzFL>+o7BiU1gy%#H;_R>DjjJU5d3s@cW}>Q#^&y(Dqtm7KFtLEu978nf;GzE^9o1YH z%Ip*v)9be;;Ftk`sj<;YwIZyNspKT+)gN5pTgC8h6X9^qFD=sK$F{4lvLvF6wV5uI zc}?%+YbtSJtrpI*FCEJ7hiw?Ls_U^opScGsl-rfJUL?+{BuV9+Rj8a)yInbRitClF z%<+zP`_=e0a`>kg|5MQ*4!LiUst$Ria4J3=lh>n|ya}$RfFR@C8ymQe5Qfz%xfZ>5 z+G#w6XGE9j9+vgPG_{XGn|OL^!pX$BYJ;`WHr?ZJ-`qRp?jPD``!vm6eI6l~n2tHl zhhsihN-J33?7H)pp~&miAx0#mJ)r`%v}kN5QyQ`joAId=?Dmpdg*+n5gs%_qc7dP4 z!I|VzfK<{h$#shQJ)D=$Z;l!8c0cxdP+CwJk!Lt6ulvY07JBmD#201x(?sUtH(qwd zws)>LFXa+w=7j5izP902L*(tcu8Sgeqao7Vutn*{W+mK(DENBaxHZkZgTjNA)GJGQ zf8C_mE$vzAY12_2wkmMgY~MXnGggJ6Zt9@B#vqeG(W1uf?h zcZMgc&v1wj$AgA*iZtItC3ejDrfTU#Gs<MnA!$r9GG*Bn zMzg=QqX)oXcvXa=ioR$*=|ZX(?TEZX%MTm#lzPG+U2HPOW7;-l!E8M(c-xdqYeZy5 z>~*#{5SX@PJfxEIWV1KI%=&OhnZAtZ9V?qk2+2d)x$WVfvb+^@O{ws zRRPxFm{r@?qpI|oQ_0VIl)mbc_%fjXep3hqu_+tKBb*T(0^|fJJ6cFm$6S&KBZd## zNUsJz8f_-L17tR1uQ03B?K}>d(nwDRl5V~Fsy#$kH>78D%vpoSi6fOPRoEZ0}C zs+qavao0)Zm!#D%HngZGiKb8y!gLe4#tGka3d7mXCM`OkOdq$db9i4eT6!`znG*8R>1PBl5c zQ$o3}#cF6jyjJGr@7tXo##Y)kiA#W~lnN3_CFQmY)CpJhgIES52LS(iT?Up7>jao*%~Em3p%~o2RC7EV}Ihk8z9es zsAD^;VnWHY!0AM|L~`O%`jl8sUz?us`zGr%yd z$+ealkLwp4miO{-6b{@j7hKC3we9r;-p!_S(Pr4K0HcPvxeFc*^MiJnO5}j``xA`P zxCxFfMg9#-_RXoqdoKnLS(*1_$pZhv=#vl0-&ZNuR^?RV%~qy69gn&0S_P+btJ;n` zH~%thAAG^>ieOz8l?-MWBQ0OHP2#H|NbrmgHKo>?(GgNZWgT+1^Y^g%eC*u8T_81ExKaliPHFaV-6RQml}EGw6&?+GxH|YimvtyDXpd~i zM3=k3^qpXe?O-|p($zHCn4VoQXYb9^y?*jEJa|gq9|IOtJnZjF$YC_ZkNm( z*13E0T0rK^ag(_GX;rjHwfI4;#a5m~fgh zxoBZG1Dmr?4qJNG!+N-2^{~&AH|eNjg@YbiG=8kwj$7{kd6H3d3B}8RmA^~rJ(ox( z0Sv1I^mi=0D(rc9yNJGy3_6HrfQB?PnIhsJaQYq5Nzn7L!a;XZ)Mw;)#m`jgER{hD z!bL(UyI_-JiF>n*H#4g!rTI~Ky_(9wP zwiD)I5zUDJeYDeHwU0!Myg)_`2Xxfl0XVskqaZGecUJdM;oTU0udgO?Tr|jH8zt!x z>EO0)Ei3g^Wb&bnu$#oq!Uaqvp`7J-j(la$B1tyQvmiFw0^U*%icW_(%aBgPrlwK? zI&ahG9n*%ou^F%q2y6R#cNKRN{}YD}+WY(6RrG7#@4La_T1g(4>)+_Pj$B<@05bBl zd$DBZ(csm4nLS+bA4 zsT^%LALfd$WSQIlx+K;?dQt0f&^37h^8Bn)-;D)LO4XNZdt2rrU@rU-na(VxkQ=)& ziL^FvJNho|3?>>t;O;_zlyOv{&UC>`Fma3~(A5EM?yS?JsqV1o3mM4L_by;J5^|59 z9VDIx>H6bY+g@P;28r~AZaWLJ>gU57%5ca-tLjm!M$2U&pNU`VVfV;rtAg)ODL%$9hW5LemT6EP zGBlKwLHPRKhx82R{dm-&Loot*P&Z0dBA}CojMQYh zP1Q7|c;^&lr*e)Q?x@OhKQVWlZ<^{+v$ACshDq;MN?nAQ#Q1qNUu>;G4bOGlE{Zf8 z#L8f`ZR~4sRu6G9DE4tq*+WA$^q^fD8m7TJi8l5$53J-D{oZd|Fp9WyjG>srL5WG$ zqSoJOHh)k;QrcRFq9-NMleb{)4edZD*(#`;uO`b8QdEtS$-QQSiword@XmM{R&Wf1YC7Oef^Qok zub$zOn9)HfEiiQSz6ZW&p8TBr#N74RGigtrDpvi zbf1!2%CQh!m6x9;Sg#KqRE-3=8?@5dMb*fd%rpwG?IbbhjBA_X(}_%c%i+ptIx)ZF zX$AvgJVksf$iV3*&gxh-hpIJ)tkk-}a&>mqFsDAwRl)YG#qAZ@tDTyw$9?huHwHqJ z4CkVx7nBU=luieQeTJAutuPE5S_prjem?_E5o!*+>0lp!d=FUO>&wea=|_v2SVI{x zh4FVd=wn?R4ycP|>aDc5l*;j1#nqnq$D}j-=Sn&gm2^hFA-2G;2}lBnDSNuEa8kgS zN#@&Pz?WQe=NgBNcMRc1f1b{abu(r|F>Yfp#{jzhDsN|ua(HHDD*Mff7)4-*I;U{E zD3z0Wt2Pj|sCiWz_%*TErI^48nwJNp@CjTm*9=+sIR^T>mdGJ%bZN;F1#v+5KJ9sJ zDmNA-eYvll+1*87ys>6lZI)HE%SDy&Bq?T=WBowoNyk;rZ6zynEoc4S8XquB~Xf{$)p2) z{jsdTR8F0w41gW?H)F!_r!irFGbYTX61gq>dEy!JLK{XND{r2PZ*<&$JQcgK{r1*Y zkb(F|;WkL|Xw6M+gj(smI-Y-r6XS8%5Scm5axB)++8K|_bv=<0mEvcxf|*l=1t}l} zH$>(XCzC!3>!CV z`juh?q&y~z=2Dm_f-nxO05@?oEO<;V>B)5c+t~JF=m6bzbO&ARA!Oc6U5(M<(9ZQ^ zky*+$D7~7-#`y7nUefB%kM{A{0OD#Wht7qw_Dfx=FTrWj+oDyHn1)Y6nx{es23aKr z0!8b)o2*LNJGLb#Ak^(Rj4XnCVuH-MDd@aXPCA5{;&3}Yyi(3-r>)SFY}lc!F=Ca= zu=jSuV%^Al8y07IQbSKM0P-59>F|shaJ7vpBhXt0#Qir=crv12g?8(}Eoa>Bkt0nJ zNgkV)}CQ(NF?XW(C;LUd_-7hXZ>sH$v5%A?v}- zMJ3ZL{k*+o3>u+H$C~C_kcoQ+b4k=u&fk~diKu3Mx!GsZ*u-ag> z3b#2gDS)wD5jLhpcyqF33&`Q^+pSo;ZtFwEa=;ajO5Rt)js7a&lr<%m3cOxXe+qt9 zA#8pzUjuGdJ^y#i{P5UMvDiKB_HD4mw^uhEUxv5cI8c!NM2jfj8s;V#<|6*hZ8q5E zW78Z(SaQ=1eU?|O_1u^qkOQE%ICcHfN0RoTAjGHmBUST@#AGlt`E;bDisd5y>d}UH zeT@RQOov`a8}TMPUY5TF)EBBW`n`^!t7N2hZzXW(^Hesr{nkB|HuP;dG)y{gZ9ySP z0ao&E_66WYeS^5Q_AXMMX`RV^9O%{e=ne9kGhl*qN-(sAaaLI}`O7c**OhgCf?_{Q z7^*mS&LC4pk=#~7z>3vQRZp&U*hA=tyrxt#sOGVN*y$$@C=BTAc|?_8+3-)+Tv4W- z8_k_>{LVGBZ^Kdjj$^}`t6AtOqz1;*vD}QcJpRhPyD+^BVYFnwXn!fE==^9s13s;5 zr9N~5<@$;Hl9SoH(11mf-oU->wq)pd%|%w4)?`JgC#eo3*ord2X?u?F0rj^`zN zjyFLK#>{V?hXp|lm*Es-wD698<}J!X0;j@Hk(#!EQ&aI;6GG`?q~KdJXgLTn z49%B$O~6y?nI1VW>o*o%v=}jj%yHIIpp(g?AdD8lJT?7mUrdL}S;{02`7@7|F`X3s z_|;i5>tx&hXKde^wju)%#x6V*4}Dkrt?G6IAv)A~bEX0O?G{wZv(L+~8OBsUl*NqT ztdc7I)gA6x5LDXhVNPv$P;zsd$5>U9+S3EIEkyxQDfY+JP`IA)2 zYhEoCQF*{$TvWVuX-PdHDya937E(z)jIJ{HiRo`zO#P36*&0kJ`}%i+uR9!c(>BMF zE_GfM%%cB0GLdU(|14kmB?T{P`QFoDB+7~?EG%(vMivg`f-ToUF)zvRD39S@dRg^m z(XDgBQxaT1bH|m@6e09`)7hzmt+zZ=7&>&lw%1%2^jVWvhAX{Xc9+y&{-Y2BwpE%D zrsMifIU?1?eyJP*TF(|)(i24*L+g0{0Itb`-Yz;aQFZzKwRTTUi!fxewi-IJ)?|{M zef3T%l+NT^ZRZkPgm_;c6;!LkCYlv zer0@L+i`wr=|!*meIIM2RpH6D^W6ET$I84unM1#$93+Nz%mTnD$`JOY>x?B=Sy{AI zUDw$)3!v2L|03+~s;?vC-jj;l&<6*iXrsg>2Y^Y+T0#0ZsFCGzB(=DyE;}U`OS~Qm7l(8ynQ#z(UT00k zma%uXb81y_xDDtY@Y}r=9KT291bNhh2`mGJ*aI7bR#jj*iOZ@c%OL{6n#33;5nf0YHu;TjbFe-Aop*XGH!iT9Xmn zhfFpZM`N=>vqK(LP(VgmL`9(XP7>mPc)F%)sVgRJ{+IBJ~OU%ltA29$o}f0Q3NcH zjgaEq4_{Q1ewNm>nt5sBGT`XSZApvH3xqJH!35EK;pACw@|;lIvvS5w!tE;32{TW{ z@)v$qf;dLEisXsVoC=}bFmLhhNJLUs2NB545*f2bU(z!ETVVZF(P&Yy=TwOe7bD(e`I%d_GmTl`q>P_iHwBbBjG{niLbGSX75Bv8e>20zCMF)TTo8LzI8WO(B=|#-YYHqxU`wCCSVV znmf*-ZtSXn{<>|=G}pox*M$?eedx0)K+t_=&hd%ftIai+aHQp8z?XAH7A#)} z1#;}d*|P^ee{6=fZ@qshA1Tp)>cZ<=6$U>%?SmieRC~a;n(z7XEjNR02WMvA$D-W5 z4c6QCzdpBgCA;SBZExnG3-g$P;~Ma7z(0 z`r=PIILI(;gno@ZQsOYzla222$&oXD7^a5Y*Gu^0H1e~fT{p)AGK`AxGxt|>f0bN+ zQZG)d6;Z+xw38#?tO?*31!|FUjoI~qkzjat*uX(rH12nlUiRK~VLY}Jy;ODCmTz{p z9tf-Xvo#;ftOUNItg6fCv)A@R)Jpu?y^x^lredNYy8JwGl-$5?mfK6hYv!pch8Hkl zX(vRNS|h^M?PUC@M*A=^_38U*$^12MS0=E^jO zHZz9#mHtH`Xo>Hz&nk?ofhX20!ah*@?zr7dHmb{m1B_U!oKwodkx)=(4+(4m2O^Av6NZw!zTd zuG z=2TdV7c-XXD(BR4XKA01NK9GMCpwlT?Wh2pE?iMzi}1WH9AWXO?26?)FRQ(a+I?P<297_U zFAV`L8R2%U0XN6kv7gpW!>|Hv8s`^IdRTm$dH!fx70k%MLGXnk34>IWfMEARWjpgF z_io-wpmW^ivXNfwWm@vQv7K1ZJ&0GIX3Q2%vr=V9Y#albXB#2!JzAXd2k%1v`26S| z_Y`!E-%9(KQ{GeVswc`DYRD$`-@h3UYGLJn=B$dAVv(jTwJrH`pn3k|K=bDHYl|)> z^QBRCD(x#pNhfN^j-{L;rN<_?K8~VaHjW+h7=)SfWie-z04hM$zkJly;9j7jGXHAH zMQI9h(s`BU68?m3SzWeV3b_ls;VZM}Ij#eALQ5R4W`6;lSXlu%t7gW5-pNY+wJdshcl7^Hw7ubkJ7IvoXey?Lonqs- zaRsAPS>V0wBp~N;0Q(3CiDr$pO|a&nh(nP4lB|CCc$zF{PARDF9nG;|MBI71l=Y$i ziSHcNUC>7*CSfWqKHe*#6!y6AU>+YlCUGVqLu`CGRDhC!&H^lX#Y2`^aB3af#&6oQ z?L{9C^k-F-S*5Mm<$@Qu6F#&uQruTH;tYd+JmQM}fKXAu_&N{cW2Sw|La@+nj$Q96 z-;*aEtr^Vt&6LLO+A5<2W!TYXbr{c?;=l#P@wM#_uIx;2!qje|J!Q=mNTrJUph&4( zg1cYM8oe7y5O=cIek$R+qGAN?7)CJ3pF-{C zZF=HQH#$3%;L@)TMg+>d%(E}&e-@r_IgA@s5fVO=g5l!Yen;V;kAehcq(R3*R1>F7 z2v3}wf|d*V(~0aHMRIfK(9q(k(G%@-w-s+=%@qR;vYa`k{zTs7QsVb(i9h{$Q{q=M zw%+GdE#b*@NfG!P{iLK~?5pQS2H;PA?#J3sl4QW351`sHq3)O-FU$?Y&NhJtShPVl zS(dqx?#<0;_Hy5V)%j}!R%*uBVNJ?udh^l8l^sv&BxI?f)J|b|iTG2t@6@-YxgQ>fH zaL;ww`|;Bo`+K1$ScaM-8dirQyXv|76$~R9FdCM58MNWvh93BIepL@U3K&ivVt}2_ zC}?i!WjjtViw^aT>=TDW>Y zAA^hMs0%qS$$E=r7c9l?AX?NmpVa>@&5lGW71&UVulj%Du53GQ99h24XV{);FItK_ zNMZ+A^)^rS|KD;EnF&_OT_szxdanDlT6Rl50tqBCBO@XcNiaOKh7gDt@xpXb(Pns> zc##sEuLLwwjXByoTt*gQkIB+Rz_biQ8OJh~hPf0}V%?%Cbni zfKKwwGuNFJ4P)~HdV0J8&ipA6FG5W}xl3mq;`diaGWVPt%1sgnVK|vWTbR&^3(2!l zhb?P%O#UsAuxxENZ#u4{3n)pp67+j(b$5r?%ZqO3Zc%ESUIww>R=@7qH($>C7OvlL zk_}F`7DWeo(M%kQ07`PD>X)|-ZJh?9M@Z*;1`Yns=I;6q+_;Xlz+4sX{k3pu%6;J5 z7q_9bJL0j0Wlct4mnAx3Oot!q1kI-9%Th0l<4a@?^;*v?Fq|AqM#UMfZmp zkl55VLsbJ`Nh-n)b@PvWk`>jV?X}(hqPR#`Q26PF7Z>CDi|~esmbzQ>N^Pm((~@`K zdn4blwDEA~9L(L{H^?+fnwEm2xrEbg12J0kFyJE;8A@h3)gSxx0^#Q$ zJMoWwx>{Ckc${_`f*3pB?FI3oLrpz(Y=|%=9cHZd{$!Wh!MiotMJDudzAltrVO;QhyJ|bW1?vq4 z8ktZcPYiB?aiiB=%v0Fx_7{=Xm-)MDBkV7M>to;|D(tyzbVu~Ta(lPsA}|0-(=slEBUdeY5)B%&jiU=5Vr&`vWbG*;f{flwkWd^ z6FL<1MaQ5cciM$b;w7|iJZTa~;_hT4EV(<(<1+Pq+tvZOGy(KfZ&O|)8;h`M6s4Ti za%I1Fh3=ZF_WLA#IZkBx+i7Buh(x1dz}L&lEl2~2L>B=U@ywQaw4X6=p!)Pu`sKLG zoXrNHC=-PQf)$_%MEC`iba%<4>N-q|o!D0D(vPGHpDo8vd)|FcRV-JBfY1ZDZnMky zBmN8IJAzmZQ3#jOY(VMf;9?k`mXc$-&5oa!eukd^VfN5)C*@0#@uTcm(7}=&#x$3} zwtQRWKTs!(AR1uW;@nl9L1hL|Sdz;o)#F&}%G&2R?b|x-j41y9jHbPm+)yanQGGFq zi_ClCn5}oxBawY2BSCMK?4$_$ar4SFgNWZ9BMEQ-=Wl|Sl&yZh{|wfnB9iOWPluoT zRq3Tg{=LgeHvX%(+ZB|;wPYXrz;2EJL$XrIZf=bRwL>W{);z3(G4nLrl6|XS-gH6z z>NR6b89=~!AfTjL^@i*2E4$e{ho!rZ_#Z@Iw4Uwun&zyYJQ!+=@P{O`;wT;?mpK9l%xGw5_67V)Sm(nXsF%d zS>UcY{PH{yNT#%>Q7<$_A(QPg0Kjzvr{Gx9vnRB0EJlgy63g92qXjVdXLa|N+^K_F zrnYTVofTV2LbV=}((x^wtiR!f=c`j8K9?zXmdAt&tc{5`GqHWw6zyoq?KHq~y8JJ- z5lXrmS9bpLR4(&zw!RNKE!!O?)%`X1BVoM|_t*K7X;)NT?%At&b-LKAq<4*pCLP@UT0 z+1?(HL5rS1>~FgH&`lSE&r|(y=6|@xkSmD7uMh$&ZS2gzfh5^MEcCdNCPKnV{7LZo zrLJN|ek45=UkhpDBn+3er-H&|R!>p+mBeU#TU}&z_mO>Qz#pZl&$;HU_s9HnYzT;n z?u}~uS=fNI*7|{F#@5#?9WCDAjChi-DMh^?;5|Jek~<5*f*u`zHOzLC&UP`p5_Q4FgkzN;9Tsl3bKs zTzx7cLU(t(JNCfrq(!b*7DZM zJ^iCBYXI;)b5qm-Wk1&pm z_r~z?qDQc}AqbYa*T3r3{MzTB_9s*2oBZ?*bU~+uC3Iv+P0brz*DSkm5_wZ@mmp@o zn0wu*wMFr*|L{OJE#;pj6B}lcie8$~wfnv|nfHzi7mU1<_bxLf)#6WcPFF5u_3x2O zi=hL4r_q;FNXMDxM?&*1=|^T=aDY{w&NQg1zEr*JjL{w(w&!Hl3F-b-#yWl(86 zC?c*?0o6T+&Ml@atZeT&ml`om_OpHT>HBCm`+asQEG3F3v*@RG7(PEe_kTULl&Yra z^qNE2+D~ElnU8UQ(Qvz5x}op6j21Na#e1%x(77W1oP7pHNrY)p_rmqN4mIYTYx6Rk z_Thu8=q9s(*R@wy>8?T=6BnU%V@Vy&-6XJ=$UC2h)v? z4s|jj4^N21hl@h>+bX#2R~+F;ve9xjr(9yQwaLaIWIgDTd`1Bf9d$PIqubUskc9FG z=f`z5_ga(XKg|Idch{-*z)ff|94EM!N`x~z69f_DRIr*~DII+-or5R@*`MiLX$DkT zo#n102KfK$sIu;$N|jMkF{tTy9P$OCWyCjKMdjW5@y{f*2w`#a6fRASBXJz1rBO3*J(+zFso|bwT1bLYbXr~B zoS`u+Nt*Jl_62b^QoxyQt>cw>EYn(-5=w^2 zq3x8^fCg>9CSn?FI+a%o+A9>8>l%M=V^0kf&~TS$y%8st=TxtnP-(sAk23$Pgl4RF zNws&eMaj3AQ^E|9NQnylDa3RoQzcsi=T*>icwU#dtgBj8SbvN|c@P*rP%bPL_0s!$ z5lk&}-$5+OaPN6{3A$8BAI>lNn`Sbz*oJ^09vNA2f;vRPWV=F1%dkR#xxvO-D&E;V z?iw>hNl8e^={?`HvgElLaW#u=+8YY6@eXm-acvb&7zuoUz|h z>PsT&Kl}LY)8`cC#e~-8tqYIeK7VQ(`?x$cQ9IQ=m5xW;L4 zOV-Jh$9Hh|L>UT39Ubg<%AfJHSZ1rAq`O`_cKhcSm|H%r07#8^7h5@wcokPVU0gtT zYXb)34Gg53`>wF*Wj?naLK*>S!+STC5KPD@ipCh-)jlzK{gUd)1DJ zJ6P3@NS1lqj)-n5<{S}a9j}#IR%4Ey3P_!K3XaFn;6x7PpoYPU8cYJKogwGMazD>l z@D?mJXLEkEo-~+qYi`?7)0(FVGAq?|GxNjl7s=s|s_Jl(XUChHTP!^92J`HzNI{eE zDn4R*0L#4d>cec}x;bkt0pa$?_aD(B`+S!WMPa$BTjp-)c#XA;u4+|HX z*j2stHXR2S7$A79eOfD_1nsDhRfiEUNU^o{eo?;M(;lF&2R*F(HkxfJdAAAd`Vh;# zecTKbb(>n#lbuEfX#DsJp#*Cl8hqNSS@>a<9`rl%Ug=EHaI14Q5agH4%o0Wp7%MoR zdCa8rF(L;nDly6ji*;+(tb@(TS*A4b49FN8Qzb(zZ=4z%AOo_YK1>11zsIr>j&$)y zcb9CShymD;B!yuTSu?M!qFz7IF49k?#iuu#77L9g?Q}nmWF-b=lK5|v3Mq(Dp6H%2 zi14#rSy$=TQj;BBCfgZsZ^*Q`q}d3Cej!fiYw30~_f1L14h>`azjS*00B>9B$KpIw z4edwI$|Er2VAX5mw;-cI$l)|#SSA~bhmAb}LSS?DBlIjZUJ~XtX+c|_xP{P7uCJ_l zn89c62eOxT}h7Q%q zS;uNs1NF0agqf6DnT%OrV?g5vj%?Q)-Y z4T0P13A9zr_@M*dluUFD+TavVs56tbZn42U+HaY#tfRf9_+wYmyJRI5%{%LbtvEF;kw(GiIe)kg?9IkN# zk(|B+2oIkl~l}FkWJhS6{t1ZFC}n?aeBg7Xq#L!&&W1!r6>2-JPyRvAH+lK z9gVo~q7nCNN1j?vk|y{H+f7y4zhk}#W~(NVIIK{er!2JOWG0J?3tF;STw6f#FaPbF zFR810ZEq_gmK=tW+jQw%xncB%&ez#x-O7Jg6<(t#a>!4qstQj#1BX?GjFd2Yn{~fQ zQW0v^W#&r|XzekJGP_*e#Rx?yX;~{aS~-mX7ZiXnGg8(-rqux>_FxfnpN7SU77c{SVfFNT~B?;Zj$)DML zryCG|ct6B1YC81i)=V9$!~*bjMayn8%$yLDDLv6#NyngIPESj8%j7w-MPMXHdRWoU zQLA+wJZ+dozp`csGD;pc&N2=8QW?E$P}a)mR{~1j7JKc*VSvjJ{svyMH0eCVWH~8J zI#SJ3xt$)q{Kw4Mq<;k6rX@FrQbsOKt0u*;!3F01(>bw{rw6{&C{7Udo7qyZa*d^S zTubaR!k(djVy9N>Jz_hPrGB2Qh8!i4Cy~xh_shod3R>!MqMK_grAJg2^K;S1DO>*j zqRU5&PZ);25+HeFGOs>J$|V<-+(K*{ChQa5==?^x^r)#T)5#bhqDzn~mVfcsYeyHf z=PAcfNlu}>-v{;NSV@@kcR(RAKTal=w0cl_Mst47cA05rj`NMTz4bw$3t%f@j6w#K`pb=%~1&4Sg&bYy5h&O={#pF66{X=*KqEc zgMnwO`L5%0Gd+UIYZi9da`P}Y$(ORR)YK(HIb1~3f4o;flJaJZO}6ovt{P{YYP{lX zN}i@Z0giaEX<73to4fDJfu6^X)kd5wz0@h3s!rj;G9fZWdb3VpSCuU~Od*-Sf=+Wu zL6%jQ*Zt|BXFGwxd}!ku<6`oZzIf6JBe+?;G~OHImsLHR=V5(bnzbB{=jV1*A?Q9? zl$BNZ{o0zR0k$-UiN;J`pVHb&muyRfbG!Ix57vR-x~N~d_fBAt)T8NKPYmaA)$vk# z&%|EU3|@BeS4T6yIJddK z=3#;{V0Sn)Y(D;Rb|iNxSGz$ouUlUvu~?$s36IpX3xpA6XJ-pu>ue6&x&=k; zx-Bl`F<&nHl7N<#FI)DDwf7f2POJ;=oAH0?dg<7SyR3R9ngO@n+4a)1V`t8)ow1!k zehO=J7A}J3shg(0B~S$Jcrb)0Nx50HdX8>DR+Hi{j&ytITN1}Iz2ZKSmELRkxMOL% zgh}3XZN^H8!8x_CEjSs&Cp1$Mqu0n}i?i>^B(iL#n*08dZku+V z0CrE)ASP4q1+w|7V+sv%n8Ov1hElN;M*$*OY$EWa9<+@*uz}^AL1?#O4$hUktZd_C z+Oi(o|LA)C*@9f+AEx!a>N0RE@TLcD5)jEItd_J_I%JI7go~3WrJ%!SFeCyExB*uGJhDFsjCAB zrQPzoEVm>rSWzpGI)N>W&!WBg=@;dnkS$Xs8DX>0(mc&_5eJFjDa<^=9)L)qk4UQ> z9!801CX3h7HiG#Mrr43`3S!J18hw)@Mr$5Q$X?o^t8?Aogy`L#hI>gtNg4ig8p;Dv zY)Lpn=;oP=$vL3hC{diyJ}3-InjQXHhS8O%J$fC!cHaywd>bCeY&R~tOLkgHO0?z8 zS}wN3YN>+{(Et9D71)n$*UQeP{_3f|xV@PyGz)ItP^J-T9l@z4$rh-LVBX|)VJ)== z6DcWxrMQq(l(5WItf?y?!e={6izjf(Q5k{ou!suqc4A8!Fe;FV;AOLj2mh}BN86QP zxos=KyTsp#M;a~ML1G6;@dCR4S$=PzG`2KL?D*w59*>j^M4-`KT~+-Q9jd3k!JXZ7 zie@6O8^j@mHug;tjQT1aD#4BT3i|rAFPRT4m?sg42%m)qXGaF^akvlXCJ6EKvFk1v;0^2L*7BPq^iLVH6s2fNi#YJ0 z6LY*(#kv+Lv<6@CD4zO6XEZD3M)`)JNl^zu*kN#Vp=oGnTNS z#HV24(IEM0DM|fy9Nl$p2g90>C}j({IL=%FIzWZg04^Ea!h_?et+8*ntU#VLdN`iDj* zR=kxH&i1g#k74j1_kO@@EHI%e`n^?w9E_LIrxp&rM~z+d-z+*6!7*>FdWQDmWZ*&d z*pnq!>RTnrx{PbFT-gq}{QNAgkPM9RAN&Zm?(Catlm)gMR!XS8#A?x2(bUi~iI3|n z<_zI#mNt_F6xFkETSpuwNkc&(SMy#NQgEAf$UT4?FWF?R$`8e{yyg+VXxlRpxNkBz zUh4MLR}OESeZEOI-t3A`(aPvK-@Aw{r88s2tXY`L8)kxPSIk$?oQM1o)kV@2IO#Oj z&LUAgB@|RoK3~wx`kl=^D&hn-=YA+IVr4$f)_z~NQsL)zI%C0aJ(seOX9&@z{5-Ek z55AWB3bt`ZI|71y#Xx4B7Bm30IuoH8BlYNPjJvvR^)#EW*(|+VNmdxf>iXP>@}>k~ z&J;Q3UP~fERtI9PKt)&1B_aHfgR{GlPB6j+}^5!Q`R z@%HsxV)&>x>JTm(KLKvJFJ4;+O$h#=_0pJnc-Sc4N67`;*RwMYr!N{00njFYa%WxJ zxp^6N7Z(BnmuDO?T5?ynkco|5#nvqU1rqd=na$?@$mEKxtRPT~DrYkG69NLw3|-ig zm)zGcSaT6VdV>Fp#t?Q1NT)$IhBASLOAr&EE_oblH7T6m#ZUQPJ|-Fg(ZNhK90QVbmdKl&MhyuYh4m1|eCo~c z&XTM1fOf8Jr|Q1oLit}>qp|xKC))fK|5cVY*DCp^P(BIRrU|)oGE1m&RheodyKpjw zbOKMQIW?I>LUl_1-3W$e24jOPnx_{5swjzY(!zNVby`bT`WV?Am$9~sX3 zdcNqkQtgBt=!*S1{vZ|X32?MEtP&Fe6RB_VmV;%n>MaA3i7yuMbtB5cGfrS!L@i(VR9yvKZVc|CpEIU=I*i3~5K9dTx==KK$rS@D6K_ z;oOcETa!?U`Ci*bo31r&JAMD_&>v4-(vJKRwa@7L%dzgsqFc;9u~*lPRdG-IeNON7 z0jD=pB#*@x&^n070d5%^RXUB@zPzX%iuXNfe}jYX+eINTcCzS|r7%Bteb9vxA zAX%D?9oF)pBK6rZqGv5NL7sF80kY;Zu4OpTqeY#1qG-OB($8-f5Lx`8=3vo+QY z(HNC4+8~O2fg001O~r8NO^w{Rkv)5_TPh)#ouE8?F%xb=i3@!;6txR1Qb<#`*Gu6k z;f$LDl8AljRQ}svPnWDzf5tzlmTdvAWrxy5TyhCEN6R9|k#kv6GD%n0HOEqH#=Nu8Z4M!|RZ6>Yz|jIKV5ya?jmtljj(g*g_k296LkL0p5oyZ(*iJL~ z7+}Rcr-(;8L~P=#$-%S7++@@b9p*V`L%>#;m<%i|+n|BpW9C12{f+uxG*;A^p+QD? zFZZ+K+)HC?GCMNsFtAmvRsNvuu0Zb5xQuQ3C|&u5d^y|ZXF z(1fFN%^A0JBe^pAZ+t%)Hi$;!vxd{las*GpN7lcyr$LT%Ta&vGTB7Y#o1w(a(K_!@ z!h$U;hwV9d!~rrktq&0;OWDPDkdhWD>pe0*&vnOz=ahxas>9h;Ujb>o8U$~}78j97{ zY>W+PqK3yqbGPFZ{1~C;etuh3eG3_Pttv(3B-j76?)AT#;l&SHxcV|GV<{GhL<`*7 zb)KE6aVYq>uqp+SZql5MX0HUbWEbyGc;_yN5kR` z4U3P^u=O4dlO{c%4Bp$$gx$$`<&t+XE<4<-s)1N-W3zAD-H$`Rx3I3>htmNkL+kuH zn2>8IkAM4yhBT}jr*Ys!OmdINr<2nNHag^1jr`<-CX^aVO3>TCg$hgig9{CQKc}#a zd`3yIJbq*erBky`(eVw&PdmfK-QgI4V_lEdL(=Jk@!oe`ZKPL^n;FHHGhAkUqRKkZ zrtwevbS-vost$wLNMbq$z9RiYTladEJ~LZ=5=_P#Qc+AvI#TRuqTu)}zhI&;ALv{C z!bJv6fgv$0t)2i*j?UDMPKM)kVu%p`k|?p4x!66-%QPbmPBRtGV$_yjY8PxU=&HW-P@FzT+pf7v^ zLyV(xIl8`^V0G5nZfna_phg!PbsV+j*AUlR}f(Qc#Y~ zh8R&a*a^i8I2_j+B+LjtN(~%TR7T;{7^F8pF{P#zSLa@hsE!>P_PqQA9p(`Z`nG9( zkAN0L;r0TmGthEK@ZQb5f`D#umP&+!2JYk;bhE_zf*D3WBHu4A$)*U&=7f4gxC#bs z-DKfhs;AZ`y!2Vh4T~NWRFp%bluUK{kD&d0gZ3pYVSAQI+OeX{(0N-gb|nlNw37H8 z(u_(QE~8T%I<+?nC8CgXS>q1p)@z7XQnN}2rYyNkp71tZ&f=ljFoPvf`2jO6A zgX;XrEq@_q6v=ZNzmGb(#GKY8M|`Zy#XHl#2H44(TwRG8H~Psh7iF!PXfr&SflW&; zuvps=H|{IWaD;L{a)v7{O?j(?#C2=`&^+jJTSb~^BUIj*#+hSSM!V|Y9K86>q9NI? zrm?SwR%qP$%0Wml>0G$nf)EMmGv46)oXg4zUXb54BNKr_VoO)bwwFcp2j!Q+>uL@e z!V>RiCsumcbd8Xlk!4Haax>#K^K=b{nbhzs<;HOW3LkV=5B0g!8C#bw-oUIY|G;mk zfxMU3_3fqpaRj6)n!*^A#g6oHusAi37{Qs#zA*jw1@*xmQuF<2u*iez6BBHw2SU{B zakA)Tf=W6Q{4k5Ocu6Cqr_DQy9`TF9*DqxvYbvB};iSXi@kVrG0k`6d3^^&ZE{Cgge4Y)(fe*AE)aTw_LQ@5py)`WZtdc$D+sdk3L65wwR4SDgF8c?p8tXwnVW zPp_+($rQlOJj2UQIO578P!<^$heO|;;NIg59IX-bGpGcTk$UJ59imy#oH=d6iyMie zfC#sno01R4#N@-FHr@^7<>&u^TS#Tq%fZ7P)GB=5qi;`rm{n4fnhY*~fCZ&A*rxkh z)A=(&n?^>QNlhn{p#OXaXMNkj;eAa+z?2G$MrYE+dWqOGi&K#Bn^5sR^vB6Wg$7GG z4il;<+un>xsl(Ly#XK79^mN4|`tOW#l&|;q)5`rfjdAaa?`Csg+^j^>r(%mtPkWTTiRDwfrS|dzti$WNoVM$nu0a| zsPXKNr*?#ta(3wGIO~w`HjbxC)xqi0rv`_9eQ!giUE`#-j`?9(5>IKxa(9lGSvWO! za6c<=R$)U)M>BKXS*AwNRu_3GwMDq3Iz#&4rf3fRSs%K%blD7caEo516q;9`T1jM!Gg%d*iz1!0XczP%6gj*FmsrzMEBc*d5#0XC0`x zNOcY)T-5o;u5PE;L!jE{^wQ1!@ujX(8uu@?K22ss%htGuTw+9X<7vveufB)z&^y=r zU_Q0A6_k&CjVXyL!*cJ5=IebX%6M(bEU%9<(e*A9T_0wms~{xC@7;tJVzB1F_ItHg zx;^xE`KqGm%f}hk+zu6-=7!zzVo5_j7@$bVkKDmgAipa&Yo&)PuveBYu6T9ee+VaJ z&?xo^N@C;i$~{bwX65ndYuvj_io0`*TRQA~)sUVJdvw^f>)>KDokDnox|2yk zon1d6VRXS!XwLu=Sh6CWd*5``W-uQgxLFF!v*DalPu`FBxxFAtBd0LuI3v4q|CuU` zJ^WNtbQ%6ljP-@ae$3e&t;6;?Y7|giRHJ2c6`MHb!fS^b8fS$jlH??0M-AaHLbx9t zauwpGXf~d&d2A}AGuLfNJlB#kt?x_&*jSzG^``#ZdNj9FzCnLC;UPZeU5wNJ`l{QH z?l_H6tJKb|wgc2w6E4e-KI;(Sas-m-%qapp!&EVq2I>{ywl z-+$kC@x{%x-uZJnAL_7}*ZFkX*9H=8n|FN$*HxNaFh)adWz%7t_sCx!=d%q~TmS0N zOKtx441wUMC-&^xALh0O}yOM+P4=%aK$9&%MWk~cM)mZB6ZX`&M1NruyXR(}3m0Bf5H zeP}w>yb(YDB;GCR-ncbhWcO|(e{$T8L%vBQW0vPFJEp|!ws|E(sa;6R|9QI-^)`;2 z`7X)sA6pm6xqFVjhkOCP|FbL#Ko2QfBTKgO=Sy~NiAvlv-DsdtsPYa}PbxSpD@(2R z`^hXVYi@+>zc=0Yyn2HU=D44C$(hOo45uT3?K zZOfCfs;+b?JZx>e3b=8-ygsJ|y-XWBUmF>>wDT3Blr&G#;sdXF2AUbu;bHc`>!uW* zF*lZLFt#a{cTSaTX;qLSiIiqgfDcd3`t0HTo<(woeiq~zOrW&R_0Bae!`Nub?e3a8 z3fO2$9(CaR$Gq$Ek)$%cm3K*T!I{ccKe3e;Ph*BkVS;PZl%8n2{`GBeRiY?n%~Ux` zDS0&7K@8Bw(A3rEJ>PfNOvO|)R&^u334&9r6RzO9msAjhI}2=uu0yFXq-9&KI1L9o z7T8$wu*DE9_l%RuYC2?Sy3LUYyc&Hn3uJmhd_6)Kfq+w zAEsr*5cOeLyKbCWhI+_LIPNal4B(PfHS;`qM_z7824AzXQ#Jlv6aiN5Op)kewuqpG zT1}-=c9pGg(fEKR4~8=0zYOKu4^hY3BQq!#!E!@x^IZM?c>L!?fg4R&7vYfWLQm<7 z2V9S-P)fILKy>qArO%na=)R+G&=YfZSLhPM?H!P?3XZX&yK~j-;$ySGmtW5UUw&Xe zO4J@6s?Z&JT4Qtg^rrp8txf+>u3evcrbwxWHIEl5TQh8VWoc!kZB+EKQD$zL*k<3B z!mZ5Ks#-ExE-xGf>xXa8!}93e$;HK-rrG*6c&e)Um&5Q4GOnTWjrGsZRW&~^Z*#wX zYt2=2>c_Tf`$jkS#~n?6Q#MZKLoILSq{CGdl1FqS4`l)es^Ls2aoM0>Wg-)LdFra` zhZn<^x#zW}uP>SEu{?U#K!6x1gaO~%+*MO`RA2N)(fnU>XD*jlRG82FfIP^eLPMDp z#EG%wp-poqQfY!^rzJlRlXY&I7rP-U{|`f{ZBye z{+c^VJ;%1`>RPg}^zU>r?w*2@)w56@MPr=d{5j7)t%W!<(?vCb;>WwexW!ud|8@|K za_BhHKIrDQ>zo-o=i;eu=2II0AK0a(YV94gpf){SSVuX}+Mm!y6>v`(d(^Ch3CSC# zdB-G4#Yd!6VDGpxYHKc8mAM2zOmUKp6t~Kr7qOC6sY5EDPnoDw{X3R%#hBoky>VFa z;><1g-tHluFvg%75{i#UF@RPUqn^s}`XQ7lc0~(PxNe5QfyvL8o6rt_Q=h?Ac_nhj z85V+vA}w}Nryn}3^aZb4h@#pHB*>;3@0@Zn9@k z=t7)W$@aLPhn-ASoyLkb_a@8yA#H}=g#lA4I_nV@-zXvY-@z2-RiwCA8AZTg#$&_& zTs>{^Xoq0JFqk+ktVd7rYRr_gVGgBBFJphCdVDpDi|(J$@6y#_{Zb8v{y;4&?l+bkjmt{`g$fB)dRNk|QOcOcFs6j1 zI#>)0iYy6^?ad1qJ#-)dp!RZX2Je86Dr6qTV1R!VV9H8gX&M%S5a*w~HR`QW>8 zoNRnNJdSgY-ST9Eo0oAoP%dii$&b)scRMY*{WbSPJ$8*@0oUtQD+{H+y#9Dti*_exjYb?VFd1E{(nVDrO(0y8DoI60lMCeiH$TG!{j~>G_ju*Z@{wK^lY33aN4SP18^LLJQ zKi4zPIo`9!*d$0ZZHmi0_4LDL-ha9B2jZY>HloQSSj9n4{GA4hsBR5-H$3AbU-tiJ?XP530ihK}*y9S1&M^3b)% zu{jyG#wZwo{BZ^Dy-58pIf@XvS;axs)Iw6|^Ri_r+TPHShM;2#NyrFtnuF&t;LUiD zc5Rp)y6-b?>zM`N7R zi{#Ie=nrP;cc#ERNTy&x6oqMN(#=aQih0q*FaC`qrwi~hcQPl3=&AFLgAd_L@08vbwl8!rXCtF*I?Mqcb&Vc8Ok^mzdoUS?nSVlpGu^fcW$nRW2o3a_j zSd;IgP#6W8q$$L56@p+W;!21=sDaobFhx}!5%HaDEogm^Sf5$x)r&&pDmFGa%Mfvm zxVbV|?J?4gz6R^*^G`mcX@0w?k~Kp{zix)6E8_?s1Lc+L7nHt#DZM&LLN8ku%6W=D z0O^Ei2$OMyayO%TQW6P|FstG&25mUhdDT+F-pB2%BEO4>G4mW{ToK|Zgr14oP_39jV5QK7 zF}gG2|1yFRn~poQR$g;$hGFcwR?I*?%os=?7@NGjMKRDBNr~39E!h>Aseahik24iR zP~YxpdCj4jX_uO>t}jkhm{ss)>)YzbLh`!HCrLjq@A4z%LVw_Tdmh)jLXw%gZ64|3 z7@r`dl%ac<9z4b60C|zHMms;b+%!B2|HX?o=wkGB%l6M7!#Ol$>m2Cy)~I>ihvr?a zZTIaNX;Koi-dAX@i)|#|Q-e$;Fjr2gpUi;e6l{$$y8tm?<&eoO?va;ZV1+ggXmj+X zsjYSv4a0<{8{3oGVr)soRjXuC7tzEbXg0}X-DUW-OqeK>x7OC;T@_XR zPXr$s7?~Iu!wF^`eOfE}P;o*qM{K6({dY}CGQFNae~*UN+0ucglN`@^qMdSLG9kr< zWiW61byaL0a6FDfuc_z1DpR3PL*jNWS(wVBOZc9&v|>qD9`S@XO2&vj?kK&U{j}=X z32%_rv090Ph65)$D-Sm8F1Z6wz3F?F>HS@@>PELwMuCPn4fsJj*c!r%Ybr}V-mN<4 z62fyYB9mJWMc39jS))FH|{Mlvp_pHXYS5GmF_Px^UiBVQ|JSUlhSAAiOp7 ziN)>u@;R2sb$dcTp<}o2zedL-3v=uY87HZr<0^wva=ND+J366h4rUy|sOjlbcA6Jw z+{24o{4#!P=7Wnahjr!G^H&TO8=;EJe$^7$~;p}yEI`_>Don>0~*W3XXIt~nx z2sHiMk^B0g$j#^dRS4q>M!NX}Q zhIZ(?Z?nR9$^8jF*}eD;el+{|B;j+*#x8m_8MKgN>+UG< zpR`W(29mRS)zMECUD4MWwC!I0pMM?7JzYMf`(1u<-N-Y)lTv;9ul+SsfiaA9d)Gn> z`*>}{n_5e+OWJmbP>a%yI`oqWSJCuzVdN5n5~_)n43f^Z)9;K8EG84-Vb(?;Shd4T zTINQxg53Y;C|RLoYl<&+jv&cakRnewI8)p!B&CbdjHc}?73a`D;J@hBwMmUL)H^Cb zppGC}QZr*Y?Hm)UYQ@O@&#})u$sTN#-7r@tJ00pdiUDKt_IX}_m9FoRZn(iE6BFUDly5E=PZ(vw~I7K zR^~69RsqqG#=Y}d3>0x|<2(Ji<>4$YE=mB6U zB8ELz5dUJ0zBzA?XmKoYJID3W@%>F_8e_iz>L+MbGXm%!&R}Oo#iqPA6bucT(>{Us z=l_|l1xf;Q-S-x4V2<0L7~W1ww*HuT%Wv{O^-Z(dID5@wwNdOp0_PrZSc|&#=`Gfn zdtU_+#ZK^UUU`^Zu+j6tAR@>X>^&G*1~u-%VOVs_u9Bx#ggt-OnFw2_=6d-WY0o0C z9(dL{YOtEoz~XK@2Qg`KL`_GjAU;bMmQgZiMHvicZLD*ERt9C;C@0UX^qJFpXS%7- ziESII#fwpFD0xRos|(vv^`OEAAyIR&=7^ zs+@9dLcXSD7ipaW=O-O})wzt@+RGunyQH`B`5M$Rp!SM8GEsOb$iqdYOk>bRXW@fksElP>#U53_ewNRP zx&io8B75l1qC~=8B6N&re6^-r^{mecTViL;4XqY#*C$HJRGnjcIoxSy`jZ}3iB9*U zS4qnbWms(IIlU`kQ(#Xf7~rZ#=f*~>B{NiM>4FMu#h9Ip$9j`i%A(Mdf=Pru!vj99 zl64KsbQr0gf*Ue)%GYUfliRB&v1UveRb4M^lFOaal~z*an941t2w=&@W$N>dVx*+m z`t$d|frtQVVp42;%8^c9qzwYMGs3p-A*8gjRg-bkGD41mTU}7D?OdEejs4sXlCg%t(~8e2N|cdCikuw4ukcJaGHQ z1_|Dbl+B!Z+k~A7I$m_s)+nwj(VqEf@Np{!-)W=2LPzD4@BY9=?Y-mHcjv7OuJ$_6 zgQT<+Vk}dd5WhUt(*D=4^s_Iztt${|+P)Lp z^tHO;#THW#xvLWFd|1!G#tl3RW?JMv=Zj0Nkk{gM&5G=}-}l!%bf}{H)|~!7H2@hC z5j;C()c|DStYSYHpaEFgJ2MN`&eJ5SVlFrccV7}m4}LUs2dq>;zaPb_W81N{Bo&q_ z8&*0sYJ@2lQQ7SGU76R#^yN~-X?`fCH9wQoE+}#!uP<@MNIQHA8q8+)CBucy37Stc zYmu|WWlQFq@Ld7 z8vq@chgs$m@P-nm%DBloR^pt%$k7~;hJuYDa+blPm2pX(5q3H*Ke81{#s-|mFdVm1B5JL#auMszJlKj?jt7dyMf8@g zBp3XQd&y0+soE&0!o09}u>%iu%|n-M9c^dR{^oAS=5#WkeGbR>eP6CWp59A=Gj(TN zx52`+o3bQT-7%Z*3o7V7GxSNXvhMStTMk1#oB4@u<@w#TEV=5(?$nxE_#|I6 zW}*q4sPxE0X;AE3K?4cgv4}CJv{lVOH2I5b+OBS)Tda3D>B@q(l$@NI)qNI`*HxJO zP|w?4at~|Cp*BUBRmI8z~ln$kYCat4AuOE%&k=j0D<;`x+zc5@!-VVI}Mk9jZOMh4bENNec(qk@3{ z$_u{P%5ESan+KE*Mk)=jJWAF>05;~4)d7?^Dh7$~}xWcG~ZK8Fv$B+_eWxo@^3~0SQWnnUy@W*2p zVH>;nq32V+U%EG(aI1~`DkLeT=}V~~HH1QabC6VJojBDnd7WqWcy66_73PfUc8V*M zYlB_h#w6G-9__}KaNeCMGups^sKNV*QZEVtx6~Tx zPgFdWNuyXQzNpX;0ISlPhoI%t!`L?TdIRMkR7kf&+s^YeKbvX9CI0;U2w9%g zkNaW!MDH1Q)zGz~G*nm+U(1BM-hE%Xu`-x|Grf-BNQsM0NZNn2cxewtb^sENKxYAy zz!^}1!$1a{e3Hd0hRac$7ssOx0K- z$l?vAW)13peH=rJ41rYxy#l*E;aU_OO5>B@9Sv$qjfZX(7kk4BY60ck}u?ly-pMPazIs8f!SU{_mtBlt z#coq}-RbFqY_pENwBAtn=-2*1Yei>f`cTpLMorm*Dg*8JZ5bA9ya@?GK8*c`B$Zc* zQie)|uYY@AgE-x4{#}g_*h* zw^@_EHwa=}fR3&?J#fPL8rBq(gn z=UR9R;~uVYe4H?eZP7BU*Ud3JR#J&#!vfu%Ik=ua2cBlc(x27c-B`14YTb&8>z;l| zzA_#E&n${Z;wEg@rTa!Hr|3+6JOF;KCQ*^iYj(qR(q3JiQ+5f$^mSE06qcgeL(|3Z zr*CvOHdWV*L*4YkX_o3s-$a>2y{iNn{-y-EXC+99*^<-bMZV?O#t!_Ft)*Q&$QCb@fEVmguLj%BX{#}{rNh3C zKdKI$AGv8LhV^xo%};Xes7tPDh#ZdEQo^t-$%Z`}BHufWOggybCMCZY%G^**mKBCZ zAcRo+48jn0=pu}LCo8q+78mQ+-uP}A<50)AJejA+L zjYC;t_+AfUjB!F~O`jW9rH2$)?V?#@$%=H=%5&B=?^qqfDyZQx-y(s`8A~h*PhlD- zExE}lAw@|o+tAAyMVKLoJ!ZUEaq9l&ny2e64XcgEhLo!nyG zME45B$Bz_@>gj7SFKKC>`f`bs$Orhprr(5bcUbr?$JSJ0W%Q{5(wUqrpQo`0^-;elfa~hk(Zdsf%_4rb`^LK;$zC)#V)x$|4Y*C!H}JQrOam4 ztQ@i95x#jfPN3VBkwU)mo*FCOqf0`W;}bK**{RwV1&8YybG-xC6UaUUxHV|YW#oEF zKmvZwnvizE$QV@++C(^hNa zyYD=kpYcZfL?6sTMat^1JeZv-ADy|b#%@rVIFSe!p~eHOm%r^zTS`T_lrEz^gwhYR zAK4Es#=SyQ8qy(M5flhSA(pRYfUGi?9ILDb`@HLp`jnea&<|#+M>si0P}Mz3&@fV! zqKK*PXgxUd&>(CZV`{O|6ma0C*-Cr;+X37QK}4P;zp)|TZN3wXp~&z@Ug6tOounKD zlR{!zZ`0GlOKTi&{G!@~eT^ux&>H~edc^krl3Iqt>TYi5A`A}S8!nxTmM(s1sKr>V zF$E>+-r8x2XWPIX+ym-iqzf)4bpLYNsz2$p>XyPio*&a#X)(qy&oIaBAWUpS?6DM0 z%_Z9{QV$_CeUw{aGm{OBpwZ{zr?9r8Td7!?AjSIK0tba|8ayW<$Q`p4%!4!ceKXcW zTWYR4BSm~hf#uEIcE8VU^VciQK&etwxYwI>j#YoD`a7wkS`5|@^vTQ^Fpq&cz@EV8+M^cSIjskRfVHzeIQ;g=d;wY94X(j*yLF-cot zU?GsvALzx=dzrX|i~Kv05o2E0=<3BpdwS@qsM})fo2su4&jdy6_WdW}>;u=#njU&z z?_%UgOH!ILj+Sdq{xU63)!qlNXOOeV=td}kX^3}a8d-If9~RGJk4+GK00a4HTXEqz`3b=d^8RPyibyKijhU|GwCmfq}`aca~I-Nbj8qQp^6Ubm; z>CDPeq9=xDzVI1DXDP9%GgzO7x@U)pH3f0kU+|k(Z5lx)0rKlMx;mImKfc`bQ&ANZ zzWbq5Z;Urox5tFHTMk@z!kctlhsJ^KD(N^V^9p4)nZnaw-xg0z!joTYJAZk$%a^aF z_D{|8%S-unXo63c$~FHw_H#S@kIJz2<>k_c(suP<&zG={jYpLpN4r_fF!8SRU#9xi zLjN+Htz^(o9X;lLvMe(v%lG$jf2?2mxjkU;N^pM&A7-hpQAXA-ccHm1hXbi zy=;R)rN~v01h)C&jsxpC>s8bg0hgck7}Q=+P8;j0%hDD90twjD2|YoXBm#|d2%A^u zf#j|OcznM({|u8g+~)Q&8xThBsRKei=U z>s?z{y}+J)g?~wg<88Nnk9hgIONqA&yTW*%ypExDxkMS<6BAvT_{&1fyaWubB_83y z-5f4g%PQ+B>y^G@i&tg2ZeU+YT}s*P{LGxHimq#`i~znz$Nv!XGklEsnOUw;R!uT_ zBu?v=Cl@%Y(-DUlM_3BlRG>`QKp5E!B=u>6ZZpud1;*}eU^8XWgghTj!dH?)m}wiP zhjA(xNy5pvOVX$88WMKppYYdmTg9DWl&#~F8=hp_7$ObhiPp1MA$xK9pE9aT?1 z40XZTSpcv5-})nj?4LfC{oYG(zr8Cf<^ByU>`c)aA@$yuLS+!AH~Xlr|Gg|Azt2>XxL5QD^t{a%sw|6j zeR9pP&A@#qb+^c57+G|9(6tGJp++;lQ0#VN1u;wq+Hdrpe(l@N&F;BfE+a*+5Y0TC z4yy*xDh4XHdvh2d{{pj5HbQT5^=0yLQ#%Qv)9CIY_g^B*q5}+zY$_v(De0;|^QQ#& zMdQVyQc>lISc=DkAG8U=n?$QP%B}BYF9pM@Gvd&I$y`-okFIT0u2-tZdkvZP_Z5p1 zGpT-}&ZWOo=WeQXaHq~mcCMkoK^azPaZ-y!;XZnsM21`U1}C1;EvZ`!6SkM&L|yC3 za3Lc?R~P_wi-Qk3f}1~uhH&T(c(1IKWsD<;HWo+V%z4tE4@UlNm-bi-a9tC=Z~lxhIZtD< z&)8v^=s&&hAHZksOx5rhwrvjcDv4bhjCP)~YY^9v&7q4&@kvNv`@yHlteTsSJmk>4 z51bTJiZMCS>%iIR6KD;$f1?QC{sVn9&)a8VR&-*p$bB;#2XIpnH_s)SL!U_(-oWu@5w(k@EiyF&*=ZYw4RTs^>CK<*SslifAc)+<(04)`;z`6VO}-@J-#*yTO?Ujth3KMU*<4+N zaj|9XIM4eu+&Gx1S|MAdO(Lijesk0MG3R;KUj>79$Y!eo$3Zx}03^nl5(TwOpO_eSN5{|E5awSR@pT_@=NLCoCtU47BI7Ls4QK zqhge$Lx?li+YEazym8_X=0wkyu0U`TD6sUax$})*p}2Jorg!VGph|o6pmAop)a5v| zVleqx3{&g0{bz2vCbxr8!q7_4o%bv{#4J}SGo{ErbP*Nq65Rv&O`*nd>_V6l0U{3a z*Q=~>xS12)HbYjCx{vn}F&w!odpP}co$TJ^m+t3=W4|{XDtY<&Yal!%HsPx;R783= z**+9>u6A1MS2sLg>Mwq6pF?;lK2N6jPz>WEw>@3&s#Mz0`yuI{=@p;&20Z0*%@mrX z_6bop-sK^0PNCnW@4!r^G`_AcV;O3CB^GNboH^__c*8I;l`Bhh*UhF69U09el*CE_ zhtjdJn}>AL7#-zf(xT(0+rj%0$E0Ra?XU-75SqOK_!R})23C9k^1Y9C9j&8;4E4rH z_tYr{)?D()1^!K15}rV7iff|uailkakEM>mqxP)aD$A~qnIPhD} zdKS8Jceej5hwh339?-qW@9-O^@){2|-rr6skGA3s7WQark4$A)d0AChl062{x;({v zUMx%|UVx_uZ#P+Z#;3x9)SR?t{HSZYq6DaW}k=Weaj#*BIsLe~j1p{(SOwUZ{xPLsE7{hoPcDk3ltuvrjgF8$`L; z_raufaKW1Ol^TrLQ!#E{;^Ji-pDy0Ne1E;rE%y*uPj&pGnU;|XoY&EfMWpY3@$2I# zRuwhC&xS`*$yW?Z*y^BDw-~CRk$R;Ki+U;)qGlvMc9Au`*r0dqXx7$R((8 zmyR<)GEbXg`+8u}7)QnlneCjE-^+ElSiA^tnLS~gaG*7_)0e&U;e8m8&)l*7ORYLI zH(B4_HDbNh&(=pNJ!1Zv{n$!)HMA;=*NxcMy4i zks~)RRpE5{TLJEjOcA4-ED}7BB%e5_&+FP#>FrJ=K5KT2XyEeG%VbhGthiu+GwcMb|Q`S*6c7+Hw> z7IcDrAZcnBBSe}IMOcbsHCLk9Z*X0W+;-}t7siG_x>KhaXWg;AjwRAxy#No zeS( zwbuuSZmEYhrt3;kH8^0LyZk~`3^O8r!|2D{ejLBeVqDAGVlY|tz% z&;d_q*hN+Ia}riIJDuDV=gLz&sb%t%_O^@u1<&l>v7q2MCed5e;?zZzj=1K_y@iQ) z3z4ds#Tv4vEj$Cf0KyTpD{3>IEIM(=vNZG$noDa>+%@^ortjOa>V~Qlna__M=ifML zh|H%*x+=d@1K6=g=T{fmT7dBcbW(wlKxGFx$J}N}u>eoAp|2vHP)BC@_^ZrXiDSbww6cq8z{G^`~xnOzofUOCkO|pmWK8Bi6verEZ8>jSF-9Fcy zpJQiU(=iW&9{-yML1NdCs21 z(28OWb;fQ969kBsfJZu8YrjwbHx2%~85)Sn$1o3_>t5>86tRV+Z&*Jrg8AUgrY(@N zx~5P@ATP;jCvj*x>?$rKGOki}=^EsI;3M+n5fp6zqL)@xM^BX zO^W8Qn^AEV*09%PFV^lmFGyn#GbywgoBkd9%`DKoWEop*(@16U5T{A``_PZFDJYuI z`N*1xp6Nsh4#;P{jMJGzm!lx>`zBDnF5p=o?ku`48}43JTvPt{=GR-EkYzm@9kGhi zp~4Ae^Xo-{TL49PmgqbSjxU3;bVY+MuvLKY~IE z`)8psP@jMPOBDcx8gpMJ9gGBJLR--*ZvY+%9MEK?)9vcvoXXkbeh%S#(ZdZ3jgI+_ znZ)s;JBnoVwXdrz52&H{by#yd3f21Ulwsd(XRXV5xS`CdEVT;*TLshlC@xWz9KOe; z>XMyWm%dhy4|Ph7Yr4@cL!YMP-3J|H?<|_XwpD9#UpC}Pu$%L%$_!mYLuO?Vb_g_tS5(9LI&H%1BOkiiJu1_vC&R%h*L zx>Zx!a4&jO+(vHFcdarlUM(roJNROkZFgNbc!T1CSD9uy&ikS>!n?0MEiQN-_P5`o z%q00V)l2#FpYLVe*r%_>Y-ocIn7(;U;PrUXec2$8QTi?L!GAXpyjx{yB|WC3aM6nH zBIavW;Zk{S;(-7f)aw~4iBSx2FylT~s~~9$`@I5CMpFZtQ`HtSq_$!f$F* zH!?E1Go~csa&au_v>3NtuGzU*{%EMap~7X3{x5h^Ztw62cu093IPK;>J_{IAVK{T4 z!NQI_GYO$u@Ikpqo_862YtXh`*+5~6l=7@&4&*N@cJZq5 zpiib1i2u_VcX}P;mi@!KfT3T5Ft9Ll8>oQYyEuDTV_7XL&r_yjrNYdRi33W){paLZ z*)^%pz*(p^M{C9$AymlOa8oO+KN_=2zh7_L?Hg|AxUgop!pi2R!y8m^M&kB$@#A7a zNT=vURR>+pkJa>0^h@3KC+OgI^jwFJ-&gfew>4lBsx37e``9z%^>EZ;+%q2xB{p+N z*AGPb-kUhog@UVSFWMxdv4HTXkno|AC+c~2l4^?d{Rv9sp7yMr;Zqi3Q?!U^GkBx6 zYdy%`^zjU_|6+a5Y@Kv>%`kP9mel8cimL(}y5JGqc+hxDBFZ*4!MA3AO%$xFw#njZFUHpLY{N0>| zZBc6IbQS%;@Nvz&=33JQE1W&x39=-IUnpO9mN zqq9s`ol%=%wlKj?6?=iTQ13nG64IA^OZVc|cAQIGt|HUvQ?{Et>pwywKLIG2D?Y&? z&|+7%`h`F*m?sHk1@t;-z1GLcd9<48rS#O{4g`@4Bjm0e`hO?#4WDAP{k6cE5xxDBk< z(z>FI?64v^b^)#|SGDUqPBeNN9i8h+WFY^@XKxp4N$(PCk>YB}h>70FH1uX?*Tpsqee0l@aW@^bA{ zUMDoJy}et^m&2U`CL;JLjhZZts53>o#KE!mDc=&!)Aq6k6O z+;1gZkPvml9M+Z zcH2QRBM@46p>dG%5HK`4$GCG%f~EA#Q@FzQ9eV#q+?s<$H$&A`{cvhdm6TS024{y~ z;OwACfj0m0a4Fw;q9`WfT3l2P62;afdt5DIyU4^5PRFUNcB=Tm5h{&q)Ha_`%OafN zy$A{3myW}do2o8`=2VLm%RpS0u-gt4M5yO*ihMPaTF z-CpU}+iQF6_R1A>VvZ}9y%-`zA~txT_YJ9!kF@&-YwI6BPZOmiqbh{1HVoB+eHiJ} zU`1vTbB3n=n#Q)GcZJgc(%s>j%M*x!r$VHu|BcpEj^5YAEx%r&LFG2zJm4tmHFpq>E32aDC2qe?{bAti zNbxTtL5F5P`R6LkC2btm%}VMbv1UE3MI=9ShN28I))KU$IfmwXm@@Ty<IE*#b7X-X3dRbhgfO6w_(r-!S zyM&S9X_+vZFbq=*68)w4xQZ&O^kwnbv+rC(GXr+;o;teLZxhD6+Kc z$Kmb$22SsKLk?m(t*}F2cF|GxoRKCL=aI~8j*q74lXYQ={X<1h)6XM)ELb=A`(vOr z_-SZi`}Wq7n-=8#Mi8-kh1BIw3aN__ag+egwRCPL8WfnwaYhaR;yIK$*s^K- z(Xhn9!d-d~ryJHFTIX_pcGC=3UHo4r^UXY0l z8KB;DOh@`V`k_c93n4QC_r7GxgH$X+yYL6hmy}o{NQD8ON!YPL=v-QM{#iuCdF8@v z?WrOQGM;hf?)CAaOVia9y{XX1G8UhcU)gj>LEe6)SY#)^OBOlh%24x>#N6!+_^~3* zvfiSA`U61&JtoR55Bbw-MZB07%U#)|QhUeOb9t)36YGnrFIC9m6PVE5>pbLuw~Ngu ztuA8PN!&q37qq6LQ0=`fU^?K}GCa2PIC=A2nTHwGcIlSY&Cl_vjSPN@+`UAzXletQ?+_WJCh8NzKoV^N&ALhg|zj|JDUZ57oi0ouemFrxzwLZqq9ex zItr6FiN@CFCUbrlAYuiKdy4JkmKmQKQ7mY*T(#QHh9qmn-B zRdBrMzD1v|sA_Y4(p#Q-&q+nlHr=K};W`C;$vwH9V8ykhgs-4)mvsGdy zHrQzfj0{=6nA9mIWv@vV$P*Y)RLB<{*bsUF+L#{YhwK+V*vEBML4k~_jO-rqsTRfS z%$e<_ZMdXj4rI3xN`ZoCV$Ru%p+KN0C2|LpVBv|kCvjYjCky9EJI^|MLhoX}{>0X8 zv;m%|#J11$k2QyES4P4b>0=1n^$PN6CJ+}d8x(WZQ?JV@>$t}Pwk)+k% zx?*~6>>MnR-pPOWsqc%%`%~3Y&Ry5d({nRFja?j`!s}V-;hH<9(G;CwA&aYKI7=Je zh-z(FI6kQyMZSJ?T=cH{*Gol7?pMuG)jLwe{7}j#Am8ZfCPcM z&Eqx^mvY_Hj+x>_Q9IDl7;2ZfMh9~9ShFemioX>5aPV6R=H;yfGjDAP51TS_GLcTT zJ5uPRN5{h_aaOp5b<{=(KspGHcN~MyE6Y)bGZPag)1TRJaE-R13(auDG8Rm^SlLR4 z^7y0Dszb_MU|O~jcJC(aaSj!rce4ZYI($pz7=IusrA*D; zGq?FnY1Q#0%23fYtnLkHf`55LTQ>b~{Cqskh- z22i3v`1A9(FJ@TX!(^?o?$P+xF18%piA^QfbxiH}&$Ef*h)l0am@&1O+E~r;lIfD7 zFxFQhLLRp3G1Piu`)%AHqu3d_-4FFnfK7Q^OFIPe_OOEn4m5mDJA>f%^kdMYptrS% z_B`ro)}q30hVJJ|H8mYtJ2i7hNhw~*hkAtAltsz8I7}gf9_V6FNExo8f-Z`FUD>$nnK>&6zff?{I-^W)|V$txmDbUY-0@qKCrUA%}($K-OGp#2fi; z&wSgiP4?FaCcnQSy!wXR$dDtw#2XjnML7nU7U&rjTkP!3k_Kd=ehj`by$HF|L!XD* z)=%S5H&ke!CoH;f(e(9j=R`Msi8>nYqR(voy=TUkJ#pUlyJ(YI`Fa;^H+Ru?^Hoc+ zphe^heSYR}qh=bLXP(-Y0lQ^rr)0$Wr5^_iedaXGu^&Cf^(F?}KMwOeyT89StzT?! zCqIoNosN&*&}Caz$hZwt0eOXYSu~g57`s=A;v2+7<3LjV5A9^hXQ)ug$fYC#v*T%Q zioyoKk38^>VKSC{>pSRh-50YsAF(_2Ac z1D_+AQv3pX>vZQZsw+~7bdv!ZS}Dzd+Gn7Tg%7|K%<4dZY-m5z`KJQ1e|~;?ews%A z07SvK0Gl&S$Dd@0rP$R z8*CsmWl27m?V5n%A1^wdi%_1f7jw$sZoaWC=Uqv>fidLXu6g=`p)p290vi%jKcXG)~wL-^D7tzK9R|FG>#l18dxV=NT6swN=n zszpaplsd!TwOmK7+NNiD(?yJhS#~SAc{w6X(SOPkh6=rDiZ)AZDPv6tyWwpo-Hdxn zsjMZ+c7?=}7UD{~$b@|%O@S^I7y%2Ot|pV($gMg$@gij*&mVi8Cy*8cV|zG?tSd-@ zWn6}8m?%SiexL;Ap$R_O>E7<{hqh?YhAyPK`h5oU9*1iC^;QnsO%3+y6pr4}yYLcc zAL#cu#CGY-qxa6)n!StwZgwCuB-hM%Q zc80_aAe1Z3i=blq64mFBtn(%5Y7>x{FRQ-z{_rq{I!%-#fB(z)o>u+ki>0c|d>c(j zKPVD?bAt<0|D|?6`>*gf_qG2%STlD0C)W(^j^b35{XYKvi80XkjBa4fqo$wMb>9aA zVKll?9mi?&5ZK|xuUur)cg|B{3b(-aBiMd3Chb(nmTR#X=W&(E`Sr=iFdgFha1?%P>S|skwCS| zU~ojfy(#J=&5Devq@7WvaEqjIJJpqgo2+>WjZyDhTB`{T@_(yaSrpJRt=ZNvtbZP2 zF*P8;rk=_Qswv%RT=_G@Ox}4J=O@?>n{iEzZ>I2uI|>^fQRr@ps;RVy&i}j*&3b3Z zGrePOSV$HjezQv)o}BETsv4Cx6+oe(0a(!lnoN RE~4Q7{XcKaFr@S+0st+%ySV@W diff --git a/testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz deleted file mode 100644 index 29e4a3bd15a88bf0207643ea2b73b0914202438d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44140 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μPM8qNpB!2lRE&mKfL6){9IhI$g) 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 M56kM$b*t?G0B~8;>;M1& diff --git a/testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz deleted file mode 100644 index f645870a8fa2f737c280e88e4f86fd34227fd9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44343 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 C+#I6- diff --git a/testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz b/testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz deleted file mode 100644 index d03e2369c00ecb81cb6aae02192c3dae2f45f703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43685 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 Z5iV!1jP1C4QA36DGMp4&>#P{@v+c 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 o$Lu1h%`tl*DBQOSi6N%pAzVoxZZisnHkm&rr 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 Q-?^;%e=q5y%~uHm0L1YDc>n+a diff --git a/testdata_sarek/rd_tiny.csv.old b/testdata_sarek/rd_tiny.csv.old deleted file mode 100644 index c53c0a3b..00000000 --- a/testdata_sarek/rd_tiny.csv.old +++ /dev/null @@ -1,14 +0,0 @@ -sample,fastq_1,fastq_2 -1234N,//testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz -1234N,//testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz -1234N,//testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz -1234N,//testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz -1234N,//testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz -1234N,//testdata_sarek/dummy/normal/dummy_n_R1_xxx.fastq.gz,//testdata_sarek/dummy/normal/dummy_n_R2_xxx.fastq.gz -9876T,//testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz -9876T,//testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz -9876T,//testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz -9876T,//testdata_sarek/dummy/tumor/dummy_t_R1_xxx.fastq.gz,//testdata_sarek/dummy/tumor/dummy_t_R2_xxx.fastq.gz -9877R,//testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz -9877R,//testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz -9877R,//testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/testdata_sarek/rd_tiny_mod.csv b/testdata_sarek/rd_tiny_mod.csv deleted file mode 100644 index 7458234b..00000000 --- a/testdata_sarek/rd_tiny_mod.csv +++ /dev/null @@ -1,6 +0,0 @@ -sample,lane,fastq_1,fastq_2,sex,phenotype,paternal_id,maternal_id,case_id -1234N,1,testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey -1234N,4,testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey -1234N,2,testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey -1234N,7,testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey -1234N,8,testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey From 1fa07e7342507eabcde798085926e30ac604f509 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 13 Aug 2021 10:37:20 +0200 Subject: [PATCH 0018/1921] sprinkled some linting magic --- .github/CONTRIBUTING.md | 6 +++--- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/linting.yml | 4 ++-- bin/scrape_software_versions.py | 2 +- lib/NfcoreTemplate.groovy | 22 +++++++++++++--------- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 032ea20b..b2f28393 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/raredisease, the standard workflow * If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/raredisease repository](https://github.com/nf-core/raredisease) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build .` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -69,7 +69,7 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new flags/options to `nextflow.config` with a default (see below). -5. Add any new flags/options to `nextflow_schema.json` with help text (with `nf-core schema build .`). +5. Add any new flags/options to `nextflow_schema.json` with help text (with `nf-core schema build`). 6. Add any new flags/options to the help message (for integer/text parameters, print to help the corresponding `nextflow.config` parameter). 7. Add sanity checks for all relevant parameters. 8. Add any new software to the `scrape_software_versions.py` script in `bin/` and the version command to the `scrape_software_versions` process in `main.nf`. @@ -83,7 +83,7 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build .` to add to `nextflow_schema.json`. +Once there, use `nf-core schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b11e3616..94c01b6c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,7 +18,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] If you've fixed a bug or added code that should be tested, add tests! - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint .`). +- [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 13b4fc81..3b448773 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -53,7 +53,7 @@ jobs: - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install editorconfig-checker run: npm install -g editorconfig-checker @@ -127,7 +127,7 @@ jobs: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index e3403e86..4cbbae3a 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -30,7 +30,7 @@ print("

{}
{}
".format(k, v)) print(" ") -# Write out regexes as csv file: +# Write out as tsv file: with open("software_versions.tsv", "w") as f: for k, v in sorted(results.items()): f.write("{}\t{}\n".format(k, v)) diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index b6e689ec..44551e0a 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -24,17 +24,21 @@ class NfcoreTemplate { public static void hostName(workflow, params, log) { Map colors = logColours(params.monochrome_logs) if (params.hostnames) { - def hostname = "hostname".execute().text.trim() - params.hostnames.each { prof, hnames -> - hnames.each { hname -> - if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.info "=${colors.yellow}====================================================${colors.reset}=\n" + - "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + - " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + - " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + - "=${colors.yellow}====================================================${colors.reset}=" + try { + def hostname = "hostname".execute().text.trim() + params.hostnames.each { prof, hnames -> + hnames.each { hname -> + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { + log.info "=${colors.yellow}====================================================${colors.reset}=\n" + + "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + + " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + + " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + + "=${colors.yellow}====================================================${colors.reset}=" + } } } + } catch (Exception e) { + log.warn "[$workflow.manifest.name] Could not determine 'hostname' - skipping check. Reason: ${e.message}." } } } From 92082d802615876ab6c5a092c14b9e25f34f2f48 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 16 Aug 2021 17:08:15 +0200 Subject: [PATCH 0019/1921] updated sex to gender, required # of cols., and refrnce link to samplesheet --- assets/samplesheet.csv | 2 +- bin/check_samplesheet.py | 22 +++++++++++----------- subworkflows/local/input_check.nf | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index e4a3d013..d8fcccca 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,4 +1,4 @@ -sample,lane,fastq_1,fastq_2,sex,phenotype,paternal_id,maternal_id,case_id +sample,lane,fastq_1,fastq_2,gender,phenotype,paternal_id,maternal_id,case_id 1234N,1,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L001_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L001_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey 1234N,4,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L004_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L004_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey 1234N,2,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L002_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L002_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 507ea853..8c00424a 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -39,18 +39,18 @@ def check_samplesheet(file_in, file_out): """ This function checks that the samplesheet follows the following structure: - sample,sex,phenotype,paternal_id,maternal_id,case_id,lane,fastq_1,fastq_2 + sample, lane, fastq_1, fastq_2, gender, phenotype, paternal_id, maternal_id, case_id - For an example see: MEI CHANGE THIS TO AN UPDATED LINK - https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv + For an example see: + https://raw.githubusercontent.com/Clinical-Genomics/raredisease/feature/bwamem2/assets/samplesheet.csv """ sample_mapping_dict = {} with open(file_in, "r") as fin: ## Check header - MIN_COLS = 2 - HEADER = ["sample", "lane", "fastq_1", "fastq_2", "sex", "phenotype", "paternal_id", "maternal_id", "case_id"] + MIN_COLS = 9 + HEADER = ["sample", "lane", "fastq_1", "fastq_2", "gender", "phenotype", "paternal_id", "maternal_id", "case_id"] header = [x.strip('"') for x in fin.readline().strip().split(",")] if header[: len(HEADER)] != HEADER: print("ERROR: Please check samplesheet header -> {} != {}".format(",".join(header), ",".join(HEADER))) @@ -76,7 +76,7 @@ def check_samplesheet(file_in, file_out): ) ## Check sample name entries - sample, lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id = lspl[: len(HEADER)] + sample, lane, fastq_1, fastq_2, gender, phenotype, paternal_id, maternal_id, case_id = lspl[: len(HEADER)] sample = sample.replace(" ", "_") if not sample: print_error("Sample entry has not been specified!", "Line", line) @@ -94,15 +94,15 @@ def check_samplesheet(file_in, file_out): ) ## Auto-detect paired-end/single-end - sample_info = [] ## [single_end, lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id] + sample_info = [] ## [single_end, lane, fastq_1, fastq_2, gender, phenotype, paternal_id, maternal_id, case_id] if sample and fastq_1 and fastq_2: ## Paired-end short reads - sample_info = ["0", lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id] + sample_info = ["0", lane, fastq_1, fastq_2, gender, phenotype, paternal_id, maternal_id, case_id] elif sample and fastq_1 and not fastq_2: ## Single-end short reads - sample_info = ["1", lane, fastq_1, fastq_2, sex, phenotype, paternal_id, maternal_id, case_id] + sample_info = ["1", lane, fastq_1, fastq_2, gender, phenotype, paternal_id, maternal_id, case_id] else: print_error("Invalid combination of columns provided!", "Line", line) - ## Create sample mapping dictionary = { sample: [ single_end, sex, phenotype, paternal_id, maternal_id, case_id, lane, fastq_1, fastq_2 ] } + ## Create sample mapping dictionary = { sample: [ single_end, gender, phenotype, paternal_id, maternal_id, case_id, lane, fastq_1, fastq_2 ] } if sample not in sample_mapping_dict: sample_mapping_dict[sample] = [sample_info] else: @@ -116,7 +116,7 @@ def check_samplesheet(file_in, file_out): out_dir = os.path.dirname(file_out) make_dir(out_dir) with open(file_out, "w") as fout: - fout.write(",".join(["sample", "single_end", "lane", "fastq_1", "fastq_2", "sex", "phenotype", "paternal_id", "maternal_id", "case_id"]) + "\n") + fout.write(",".join(["sample", "single_end", "lane", "fastq_1", "fastq_2", "gender", "phenotype", "paternal_id", "maternal_id", "case_id"]) + "\n") for sample, sample_info in sorted(sample_mapping_dict.items()): for val in sample_info: lane = val[1] diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 650258bd..027eec3c 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -50,7 +50,7 @@ def create_fastq_channels(LinkedHashMap row) { def create_sample_channels(LinkedHashMap row) { def sample = [:] sample.id = row.sample - sample.sex = row.sex + sample.gender = row.gender sample.phenotype = row.phenotype sample.maternal = row.maternal_id sample.paternal = row.paternal_id From 71cc5425bd89572042090924a5ea5677db52222f Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 18 Aug 2021 17:40:39 +0200 Subject: [PATCH 0020/1921] deleted merge2break subworkf, merge bams in mapping subworkf --- conf/modules.config | 9 +---- modules.json | 11 +++-- .../modules}/samtools/merge/functions.nf | 0 .../modules}/samtools/merge/main.nf | 18 ++++----- .../modules}/samtools/merge/meta.yml | 0 subworkflows/local/merge2break.nf | 40 ------------------- subworkflows/nf-core/mapping.nf | 28 +++++++++---- workflows/raredisease.nf | 13 ++---- 8 files changed, 39 insertions(+), 80 deletions(-) rename modules/{local => nf-core/modules}/samtools/merge/functions.nf (100%) rename modules/{local => nf-core/modules}/samtools/merge/main.nf (62%) rename modules/{local => nf-core/modules}/samtools/merge/meta.yml (100%) delete mode 100644 subworkflows/local/merge2break.nf diff --git a/conf/modules.config b/conf/modules.config index 503a105c..62b1e699 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -33,26 +33,19 @@ params { args = '-M -K 100000000' publish_files = false } - 'map_dir' { - publish_dir = '' - } 'samtools_merge' { - args = "--write-index -f" publish_dir = 'samtools_merge' } 'samtools_index' { args = '' } 'samtools_sort' { - suffix = '_sorted' + suffix = '.sorted' } 'samtools_stats' { args = '-s --remove-overlaps' publish_files = false } - 'samtools_view'{ - args = '--output-fmt BAM' - } 'multiqc' { args = '' } diff --git a/modules.json b/modules.json index 9f5f26be..bcd21e96 100644 --- a/modules.json +++ b/modules.json @@ -3,21 +3,24 @@ "homePage": "https://github.com/nf-core/raredisease", "repos": { "nf-core/modules": { - "fastqc": { + "bwamem2/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "multiqc": { + "bwamem2/mem": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "bwamem2/index": { + "fastqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "bwamem2/mem": { + "multiqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, "samtools/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "samtools/merge": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "samtools/sort": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/modules/local/samtools/merge/functions.nf b/modules/nf-core/modules/samtools/merge/functions.nf similarity index 100% rename from modules/local/samtools/merge/functions.nf rename to modules/nf-core/modules/samtools/merge/functions.nf diff --git a/modules/local/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf similarity index 62% rename from modules/local/samtools/merge/main.nf rename to modules/nf-core/modules/samtools/merge/main.nf index ba0f703f..0182b9fd 100644 --- a/modules/local/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -11,27 +11,25 @@ process SAMTOOLS_MERGE { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: - tuple val(meta), path(bams), path(bai) - val chr + tuple val(meta), path(bams) output: - tuple val(meta), path("*.bam"), emit: merged_bam - tuple val(meta), path("*.csi"), optional:true, emit: csi - path "*.version.txt" , emit: version + tuple val(meta), path("${prefix}.bam"), emit: bam + path "*.version.txt" , emit: version script: def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ - samtools merge $options.args -R ${chr} ${prefix}.sorted.${chr}.bam $bams + samtools merge ${prefix}.bam $bams echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt """ } diff --git a/modules/local/samtools/merge/meta.yml b/modules/nf-core/modules/samtools/merge/meta.yml similarity index 100% rename from modules/local/samtools/merge/meta.yml rename to modules/nf-core/modules/samtools/merge/meta.yml diff --git a/subworkflows/local/merge2break.nf b/subworkflows/local/merge2break.nf deleted file mode 100644 index cd7af88e..00000000 --- a/subworkflows/local/merge2break.nf +++ /dev/null @@ -1,40 +0,0 @@ -// -// Merge bams and then break into contigs (e.g. chromosomes). -// - -params.samtools_merge_options = [:] -params.samtools_view_options = [:] - -include { SAMTOOLS_MERGE } from '../../modules/local/samtools/merge/main' addParams( options: params.samtools_merge_options ) -include { SAMTOOLS_VIEW } from '../../modules/nf-core/modules/samtools/view/main' addParams( options: params.samtools_view_options ) - -workflow MERGE2BREAK { - // chr = Channel.of(1..22, 'X', 'Y', 'M').map{ "chr" + it } - chr = "chr20" - // TODO: need to write a validation check for chromosomes present in bam files and then chop bam file for each chr present. - - take: - fasta // channel: [mandatory] fasta - bam // channel: [mandatory] [ val(meta), [ bam ] ] - bai // channel: [mandatory for regional merge] [ val(meta), [ bai ] ] - - main: - bam_bai = bam.join(bai) - bam_bai.map{ meta, bam, bai -> - new_meta = meta.clone() - new_meta.id = new_meta.id.split('_')[0] - [new_meta, bam, bai] - }.groupTuple().branch{ - single: it[1].size() == 1 - multiple: it[1].size() > 1 - }.set{ bam_bwa } - - - SAMTOOLS_MERGE ( bam_bwa.multiple, chr ) - // TODO: Singles? WELLL, we shall re-name instead of merge but still chop into contigs for each chr present. - // SAMTOOLS_VIEW ( bam_bwa.single ) - - emit: - bam = SAMTOOLS_MERGE.out.merged_bam - csi = SAMTOOLS_MERGE.out.csi -} diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index c0feeb29..826cece0 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -1,20 +1,20 @@ // -// Map to reference, sort + index + stats each alignment file. +// Map to reference, sort + index + stats each alignment file, and then merge. // params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] -params.calculate_mapped_options = [:] params.samtools_idx_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] +params.samtools_merge_options = [:] include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) -include { CALCULATE_MAPPED } from '../../modules/local/calculate_mapped' addParams(options: params.calculate_mapped_options ) +include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) workflow MAPPING { @@ -31,13 +31,24 @@ workflow MAPPING { SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - // Join the mapped bam + bai paths by their keys + // Join the mapped bam + bai paths by their keys for stats + // Get stats for each demultiplexed read pair. bam_sorted_indexed = Channel.empty() bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) - - // Get stats SAMTOOLS_STATS ( bam_sorted_indexed ) - CALCULATE_MAPPED ( SAMTOOLS_STATS.out.stats ) + + // Merge multiple lane samples + SAMTOOLS_SORT.out.bam.map{ meta, bam -> + new_meta = meta.clone() + new_meta.id = new_meta.id.split('_')[0] + [new_meta, bam] + }.groupTuple().branch{ + single: it[1].size() == 1 + multiple: it[1].size() > 1 + }.set{ bams_to_merge } + + SAMTOOLS_MERGE ( bams_to_merge.multiple ) + bam_merged = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) // Collect versions bwamem2_version = BWAMEM2_MEM.out.version @@ -46,7 +57,8 @@ workflow MAPPING { emit: bam = SAMTOOLS_SORT.out.bam bai = SAMTOOLS_INDEX.out.bai - stats = CALCULATE_MAPPED.out.stats + stats = SAMTOOLS_STATS.out.stats + bam_merged bwamem2_version samtools_version diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e8ed8b03..3264fca5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -45,11 +45,6 @@ include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' // include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) -include { MERGE2BREAK } from '../subworkflows/local/merge2break' addParams( - samtools_merge_options: modules['samtools_merge'], - samtools_view_options: modules['samtools_view'], -) - /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -73,7 +68,8 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_mem_options: modules['bwa_mem2_mem'], samtools_idx_options: modules['samtools_index'], samtools_sort_options: modules['samtools_sort'], - samtools_stats_options: modules['samtools_stats'] + samtools_stats_options: modules['samtools_stats'], + samtools_merge_options: modules['samtools_merge'], ) /* @@ -102,14 +98,11 @@ workflow RAREDISEASE { ) ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) - // STEP 1: MAPPING READS AND CHOP BAM INTO CONTIGS. + // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. MAPPING ( INPUT_CHECK.out.reads, params.fasta ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) - // Merge and then chop into chromosomes. - MERGE2BREAK ( params.fasta, MAPPING.out.bam, MAPPING.out.bai ) - // // MODULE: Pipeline reporting // From 7aeea98a0ad79d83809cc768c6466ea7d8e23660 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 18 Aug 2021 17:45:51 +0200 Subject: [PATCH 0021/1921] publish stats, add sorted suffix to merge --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 62b1e699..815e3289 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -34,6 +34,7 @@ params { publish_files = false } 'samtools_merge' { + suffix = '.sorted' publish_dir = 'samtools_merge' } 'samtools_index' { @@ -44,7 +45,6 @@ params { } 'samtools_stats' { args = '-s --remove-overlaps' - publish_files = false } 'multiqc' { args = '' From 885d9fb28651248032438befbd2cc412c8986951 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 19 Aug 2021 10:02:20 +0200 Subject: [PATCH 0022/1921] removed local module calculatemapped --- modules/local/calculate_mapped.nf | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 modules/local/calculate_mapped.nf diff --git a/modules/local/calculate_mapped.nf b/modules/local/calculate_mapped.nf deleted file mode 100644 index 29a4cea1..00000000 --- a/modules/local/calculate_mapped.nf +++ /dev/null @@ -1,31 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process CALCULATE_MAPPED { - tag "$meta.id" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:"samtools", meta:[:], publish_by_meta:['id']) } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } - - input: - tuple val(meta), path(stats) - - output: - path "*.stats" , emit: stats - - script: - def prefix = stats.getSimpleName() - """ - cat $stats | grep -E "raw total sequences:|reads mapped:" | cut -f3 | tr '\\n' '\\t' | awk '{print (\$2/\$1) * 100}' | while read line; do awk -v p=\$line 'NR==15 {print "percentage mapped reads:\\t" p }1' $stats; done > ${prefix}.stats - """ -} From 20fa7a8adffb611d80c267f8064195133fb69071 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 19 Aug 2021 10:22:33 +0200 Subject: [PATCH 0023/1921] removing unused nf-core module: samtools/view --- modules.json | 3 - .../modules/samtools/view/functions.nf | 68 ------------------- modules/nf-core/modules/samtools/view/main.nf | 35 ---------- .../nf-core/modules/samtools/view/meta.yml | 43 ------------ 4 files changed, 149 deletions(-) delete mode 100644 modules/nf-core/modules/samtools/view/functions.nf delete mode 100644 modules/nf-core/modules/samtools/view/main.nf delete mode 100644 modules/nf-core/modules/samtools/view/meta.yml diff --git a/modules.json b/modules.json index bcd21e96..6b2b36f7 100644 --- a/modules.json +++ b/modules.json @@ -26,9 +26,6 @@ }, "samtools/stats": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" - }, - "samtools/view": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } diff --git a/modules/nf-core/modules/samtools/view/functions.nf b/modules/nf-core/modules/samtools/view/functions.nf deleted file mode 100644 index da9da093..00000000 --- a/modules/nf-core/modules/samtools/view/functions.nf +++ /dev/null @@ -1,68 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf deleted file mode 100644 index ec6c747f..00000000 --- a/modules/nf-core/modules/samtools/view/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process SAMTOOLS_VIEW { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - - conda (params.enable_conda ? "bioconda::samtools=1.12" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" - } else { - container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" - } - - input: - tuple val(meta), path(bam) - - output: - tuple val(meta), path("*.bam"), emit: bam - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - """ - samtools view $options.args $bam > ${prefix}.bam - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt - """ -} diff --git a/modules/nf-core/modules/samtools/view/meta.yml b/modules/nf-core/modules/samtools/view/meta.yml deleted file mode 100644 index c35a8b03..00000000 --- a/modules/nf-core/modules/samtools/view/meta.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: samtools_view -description: filter/convert SAM/BAM/CRAM file -keywords: - - view - - bam - - sam - - cram -tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: hhttp://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 -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}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: filtered/converted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@drpatelh" - - "@joseespinosa" From fe43686b7b7f7d784d78e3f58285de18f1ef3b7d Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 19 Aug 2021 10:46:20 +0200 Subject: [PATCH 0024/1921] indexed final bams --- subworkflows/nf-core/mapping.nf | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 826cece0..9bdbf941 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -15,6 +15,7 @@ include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/ma include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_2 } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) workflow MAPPING { @@ -36,8 +37,9 @@ workflow MAPPING { bam_sorted_indexed = Channel.empty() bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed ) + stats = SAMTOOLS_STATS.out.stats - // Merge multiple lane samples + // Merge multiple lane samples and index SAMTOOLS_SORT.out.bam.map{ meta, bam -> new_meta = meta.clone() new_meta.id = new_meta.id.split('_')[0] @@ -48,17 +50,20 @@ workflow MAPPING { }.set{ bams_to_merge } SAMTOOLS_MERGE ( bams_to_merge.multiple ) - bam_merged = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) + bam = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) + + SAMTOOLS_INDEX_2 ( bam_merged ) + bai = SAMTOOLS_INDEX_2.out.bai + // Collect versions bwamem2_version = BWAMEM2_MEM.out.version samtools_version = SAMTOOLS_SORT.out.version emit: - bam = SAMTOOLS_SORT.out.bam - bai = SAMTOOLS_INDEX.out.bai - stats = SAMTOOLS_STATS.out.stats - bam_merged + stats + bam + bai bwamem2_version samtools_version From 1a4cb632eeb04e4c7dd3f21e74c05e8cfa8b5069 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 19 Aug 2021 10:53:17 +0200 Subject: [PATCH 0025/1921] woops! quick fix --- subworkflows/nf-core/mapping.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 9bdbf941..3fe386c0 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -52,7 +52,7 @@ workflow MAPPING { SAMTOOLS_MERGE ( bams_to_merge.multiple ) bam = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) - SAMTOOLS_INDEX_2 ( bam_merged ) + SAMTOOLS_INDEX_2 ( bam ) bai = SAMTOOLS_INDEX_2.out.bai From 070aef2ac13ea16b7a4bd512f1c568da465098b9 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 20 Aug 2021 11:43:36 +0200 Subject: [PATCH 0026/1921] loaded md, pipeline emits sorted + mduped bams and metrics --- conf/modules.config | 10 ++- modules.json | 3 + .../picard/markduplicates/functions.nf | 68 +++++++++++++++++++ .../modules/picard/markduplicates/main.nf | 49 +++++++++++++ .../modules/picard/markduplicates/meta.yml | 46 +++++++++++++ subworkflows/nf-core/mapping.nf | 25 ++++--- workflows/raredisease.nf | 3 + 7 files changed, 194 insertions(+), 10 deletions(-) create mode 100644 modules/nf-core/modules/picard/markduplicates/functions.nf create mode 100644 modules/nf-core/modules/picard/markduplicates/main.nf create mode 100644 modules/nf-core/modules/picard/markduplicates/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 815e3289..ad7cfb89 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -33,13 +33,19 @@ params { args = '-M -K 100000000' publish_files = false } - 'samtools_merge' { + 'picard_markduplicates' { suffix = '.sorted' - publish_dir = 'samtools_merge' + publish_dir = 'markduplicates' + } + 'samtools_merge' { + publish_files = false } 'samtools_index' { args = '' } + 'samtools_index_md' { + publish_dir = 'markduplicates' + } 'samtools_sort' { suffix = '.sorted' } diff --git a/modules.json b/modules.json index 6b2b36f7..c819eccc 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,9 @@ "multiqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "picard/markduplicates": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "samtools/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/modules/nf-core/modules/picard/markduplicates/functions.nf b/modules/nf-core/modules/picard/markduplicates/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/picard/markduplicates/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf new file mode 100644 index 00000000..d20014bf --- /dev/null +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -0,0 +1,49 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PICARD_MARKDUPLICATES { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" + } else { + container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam") , emit: bam + tuple val(meta), path("*.metrics.txt"), emit: metrics + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + MarkDuplicates \\ + $options.args \\ + INPUT=$bam \\ + OUTPUT=${prefix}.bam \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt + + echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d: > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml new file mode 100644 index 00000000..6420ce9a --- /dev/null +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -0,0 +1,46 @@ +name: picard_markduplicates +description: Locate and tag duplicate reads in a BAM file +keywords: + - markduplicates + - pcr + - duplicates + - bam + - sam + - cram +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + - metrics: + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 3fe386c0..8de49573 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -1,5 +1,5 @@ // -// Map to reference, sort + index + stats each alignment file, and then merge. +// Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // params.bwamem2_idx_options = [:] @@ -8,6 +8,8 @@ params.samtools_idx_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] params.samtools_merge_options = [:] +params.markduplicates_options = [:] +params.samtools_idx_md_options = [:] include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) @@ -15,7 +17,8 @@ include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/ma include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_2 } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_md_options ) +include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' addParams(options: params.markduplicates_options ) workflow MAPPING { @@ -34,7 +37,6 @@ workflow MAPPING { // Join the mapped bam + bai paths by their keys for stats // Get stats for each demultiplexed read pair. - bam_sorted_indexed = Channel.empty() bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed ) stats = SAMTOOLS_STATS.out.stats @@ -50,21 +52,28 @@ workflow MAPPING { }.set{ bams_to_merge } SAMTOOLS_MERGE ( bams_to_merge.multiple ) - bam = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) + merged_bam = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) - SAMTOOLS_INDEX_2 ( bam ) - bai = SAMTOOLS_INDEX_2.out.bai + // Marking duplicates + index + MARKDUPLICATES ( merged_bam ) + marked_bam = MARKDUPLICATES.out.bam + + SAMTOOLS_INDEX_MD ( marked_bam ) + marked_bai = SAMTOOLS_INDEX_MD.out.bai // Collect versions bwamem2_version = BWAMEM2_MEM.out.version + markduplicates_version = MARKDUPLICATES.out.version samtools_version = SAMTOOLS_SORT.out.version emit: stats - bam - bai + marked_bam + marked_bai + bwamem2_version + markduplicates_version samtools_version } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3264fca5..e1dba7a5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -70,6 +70,8 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( samtools_sort_options: modules['samtools_sort'], samtools_stats_options: modules['samtools_stats'], samtools_merge_options: modules['samtools_merge'], + markduplicates_options: modules['picard_markduplicates'], + samtools_idx_md_options: modules['samtools_index_md'], ) /* @@ -101,6 +103,7 @@ workflow RAREDISEASE { // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. MAPPING ( INPUT_CHECK.out.reads, params.fasta ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(MAPPING.out.markduplicates_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) // From 05212a5833b0c0a725670e84d9438dc90458cdab Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 27 Aug 2021 13:17:09 +0200 Subject: [PATCH 0027/1921] first try with modulating index preparation --- README.md | 4 +++- conf/genomes.config | 21 +++++++++++++++++++ conf/modules.config | 3 +-- main.nf | 1 + nextflow.config | 6 ++++-- nextflow_schema.json | 14 +++++++++++++ subworkflows/local/prepare_genome.nf | 31 ++++++++++++++++++++++++++++ subworkflows/nf-core/mapping.nf | 12 +++++------ workflows/raredisease.nf | 16 ++++++++++++-- 9 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 conf/genomes.config create mode 100644 subworkflows/local/prepare_genome.nf diff --git a/README.md b/README.md index 27db6607..7bf45ce9 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,9 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +2. Map reads to reference ([`BWA mem`](http://bio-bwa.sourceforge.net/bwa.shtml), `BWA mem2`) with the option to ([`merge`](http://www.htslib.org/doc/samtools-merge.html)) +3. Mark duplicated reads ([`GATK4 MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) +4. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Quick Start diff --git a/conf/genomes.config b/conf/genomes.config new file mode 100644 index 00000000..c077f146 --- /dev/null +++ b/conf/genomes.config @@ -0,0 +1,21 @@ +/* +======================================================================================== + Nextflow config file for local reference genomes +======================================================================================== + Defines reference genomes without using iGenomes. + Can be used by any config that customises the base path using: + $params.local_genomes / --local_genomes +---------------------------------------------------------------------------------------- +*/ + +params { + genomes { + 'GRCh37' { + bwamem = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" + } + 'GRCh38' { + bwamem = "${params.local_genomes}/grch38_homo_sapiens_-v0_m-.fasta.{amb,ann,bwt,pac,sa}" + bwamem2 = "${params.local_genomes}/grch38_homo_sapiens.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + } + } +} diff --git a/conf/modules.config b/conf/modules.config index ad7cfb89..0b21cc73 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -26,8 +26,7 @@ params { args = '--quiet' } 'bwa_mem2_index' { - publish_dir = 'reference' - publish_files = false + publish_dir = 'references' } 'bwa_mem2_mem' { args = '-M -K 100000000' diff --git a/main.nf b/main.nf index 9d7ece62..c1eefa92 100644 --- a/main.nf +++ b/main.nf @@ -18,6 +18,7 @@ nextflow.enable.dsl = 2 */ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') /* ======================================================================================== diff --git a/nextflow.config b/nextflow.config index 329e093e..e9fc931d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -17,6 +17,8 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false + local_genomes = null + save_reference = false // MultiQC options multiqc_config = null @@ -68,11 +70,11 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load igenomes.config if required +// Load igenomes.config if required else load custom genomes.config if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } else { - params.genomes = [:] + includeConfig 'conf/genomes.config' } profiles { diff --git a/nextflow_schema.json b/nextflow_schema.json index d2cc50d7..059a082b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -79,6 +79,20 @@ "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`." + }, + "bwamem2_index": { + "type": "string", + "format": "directory-path", + "fa_icon": "fas fa-copy", + "description": "Path to directory or tar.gz archive for pre-built STAR index.", + "help_text": "> **NB** If none provided, will be generated automatically from the FASTA reference." + }, + "save_reference": { + "type": "boolean", + "default": false, + "description": "If generated by the pipeline save the BWA index in the results directory.", + "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times.", + "fa_icon": "fas fa-save" } } }, diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf new file mode 100644 index 00000000..3d597b7d --- /dev/null +++ b/subworkflows/local/prepare_genome.nf @@ -0,0 +1,31 @@ +// +// Prepare indices for reference genome files +// + +params.bwamem2_idx_options = [:] + +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) + +workflow PREPARE_GENOME { + take: + prepare_tool_indicies // list: tools to prepare indices for + + main: + + ch_bwamem2_index = Channel.empty() + ch_bwamem2_version = Channel.empty() + // Download BWAMEM2 index or create from scratch if required + if ('bwamem2' in prepare_tool_indicies) { + if (params.bwamem2_index) { + ch_bwamem2_index = file(params.bwamem2_index) + } else { + ch_bwamem2_index = BWAMEM2_INDEX ( params.fasta ).index + ch_bwamem2_version = BWAMEM2_INDEX.out.version + } + } + + + emit: + bwamem2_index = ch_bwamem2_index + bwamem2_version = ch_bwamem2_version +} diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 8de49573..53d4fcf0 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -2,7 +2,7 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -params.bwamem2_idx_options = [:] +// params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] params.samtools_idx_options = [:] params.samtools_sort_options = [:] @@ -11,7 +11,7 @@ params.samtools_merge_options = [:] params.markduplicates_options = [:] params.samtools_idx_md_options = [:] -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) +// include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) @@ -24,14 +24,12 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/ workflow MAPPING { take: reads_input // channel: [mandatory] meta, reads_input - fasta // channel: [mandatory] fasta + // fasta // channel: [mandatory] fasta + index // channel: /path/to/bwamem2/index/ main: - // Index - BWAMEM2_INDEX ( fasta ) - // Map, sort, and index - BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) + BWAMEM2_MEM ( reads_input, index ) SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e1dba7a5..be6a9515 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -11,7 +11,10 @@ WorkflowRaredisease.initialise(params, log) // 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 ] +def checkPathParamList = [ + params.input, params.multiqc_config, params.fasta, + params.bwamem2_index +] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters @@ -35,6 +38,8 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +def publish_idx_options = params.save_reference ? modules['bwa_mem2_index'] : [publish_files: false] +def prepareToolIndices = ['bwamem2'] // // MODULE: Local to the pipeline // @@ -63,6 +68,9 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op // // SUBWORKFLOW: Consists entirely of nf-core/modules // + +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( bwamem2_idx_options: publish_idx_options ) + include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], @@ -100,8 +108,12 @@ workflow RAREDISEASE { ) ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) + // STEP 0: PREPARE GENOME REFERENCES AND INDICES. + PREPARE_GENOME ( prepareToolIndices ) + // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. - MAPPING ( INPUT_CHECK.out.reads, params.fasta ) + // MAPPING ( INPUT_CHECK.out.reads, params.fasta ) + MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.markduplicates_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) From 37736eeede3592010160344d4aef4507fea6e44a Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 27 Aug 2021 13:20:36 +0200 Subject: [PATCH 0028/1921] updated the test input --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 1ad30e4b..d14ee681 100644 --- a/conf/test.config +++ b/conf/test.config @@ -21,7 +21,7 @@ params { // Input data // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/Clinical-Genomics/raredisease/feature/bwamem2/assets/samplesheet.csv' + input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' // Genome references fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' From 7e9269640ec082f8aa351259d08c8362939a90e5 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 27 Aug 2021 13:34:42 +0200 Subject: [PATCH 0029/1921] removed idx option for stats --- conf/modules.config | 3 --- subworkflows/nf-core/mapping.nf | 3 +-- workflows/raredisease.nf | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ad7cfb89..60a4344d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -40,9 +40,6 @@ params { 'samtools_merge' { publish_files = false } - 'samtools_index' { - args = '' - } 'samtools_index_md' { publish_dir = 'markduplicates' } diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 8de49573..d00b83f7 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -4,7 +4,6 @@ params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] -params.samtools_idx_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] params.samtools_merge_options = [:] @@ -13,7 +12,7 @@ params.samtools_idx_md_options = [:] include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e1dba7a5..dd7afcc4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -66,7 +66,6 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], - samtools_idx_options: modules['samtools_index'], samtools_sort_options: modules['samtools_sort'], samtools_stats_options: modules['samtools_stats'], samtools_merge_options: modules['samtools_merge'], From fd2901f26a9c70eb309b33dea4434a029ab95440 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 27 Aug 2021 15:52:42 +0200 Subject: [PATCH 0030/1921] address comments --- conf/modules.config | 6 +++++- subworkflows/nf-core/mapping.nf | 3 ++- workflows/raredisease.nf | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 60a4344d..e3cc051e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -34,9 +34,12 @@ params { publish_files = false } 'picard_markduplicates' { - suffix = '.sorted' + suffix = '.sorted.md' publish_dir = 'markduplicates' } + 'samtools_index' { + publish_files = false + } 'samtools_merge' { publish_files = false } @@ -45,6 +48,7 @@ params { } 'samtools_sort' { suffix = '.sorted' + publish_files = false } 'samtools_stats' { args = '-s --remove-overlaps' diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index d00b83f7..acfd0e5f 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -4,6 +4,7 @@ params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] +params.samtools_idx_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] params.samtools_merge_options = [:] @@ -12,7 +13,7 @@ params.samtools_idx_md_options = [:] include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dd7afcc4..e1dba7a5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -66,6 +66,7 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], + samtools_idx_options: modules['samtools_index'], samtools_sort_options: modules['samtools_sort'], samtools_stats_options: modules['samtools_stats'], samtools_merge_options: modules['samtools_merge'], From e3e331a402ee691accb88188fce3288fe991fc0b Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 27 Aug 2021 13:17:09 +0200 Subject: [PATCH 0031/1921] first try with modulating index preparation --- README.md | 4 +++- conf/genomes.config | 21 +++++++++++++++++++ conf/modules.config | 3 +-- main.nf | 1 + nextflow.config | 6 ++++-- nextflow_schema.json | 14 +++++++++++++ subworkflows/local/prepare_genome.nf | 31 ++++++++++++++++++++++++++++ subworkflows/nf-core/mapping.nf | 12 +++++------ workflows/raredisease.nf | 16 ++++++++++++-- 9 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 conf/genomes.config create mode 100644 subworkflows/local/prepare_genome.nf diff --git a/README.md b/README.md index 9d27eeec..e61bf69a 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,9 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +2. Map reads to reference ([`BWA mem`](http://bio-bwa.sourceforge.net/bwa.shtml), `BWA mem2`) with the option to ([`merge`](http://www.htslib.org/doc/samtools-merge.html)) +3. Mark duplicated reads ([`GATK4 MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) +4. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Quick Start diff --git a/conf/genomes.config b/conf/genomes.config new file mode 100644 index 00000000..c077f146 --- /dev/null +++ b/conf/genomes.config @@ -0,0 +1,21 @@ +/* +======================================================================================== + Nextflow config file for local reference genomes +======================================================================================== + Defines reference genomes without using iGenomes. + Can be used by any config that customises the base path using: + $params.local_genomes / --local_genomes +---------------------------------------------------------------------------------------- +*/ + +params { + genomes { + 'GRCh37' { + bwamem = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" + } + 'GRCh38' { + bwamem = "${params.local_genomes}/grch38_homo_sapiens_-v0_m-.fasta.{amb,ann,bwt,pac,sa}" + bwamem2 = "${params.local_genomes}/grch38_homo_sapiens.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + } + } +} diff --git a/conf/modules.config b/conf/modules.config index e3cc051e..21c086cd 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -26,8 +26,7 @@ params { args = '--quiet' } 'bwa_mem2_index' { - publish_dir = 'reference' - publish_files = false + publish_dir = 'references' } 'bwa_mem2_mem' { args = '-M -K 100000000' diff --git a/main.nf b/main.nf index 9d7ece62..c1eefa92 100644 --- a/main.nf +++ b/main.nf @@ -18,6 +18,7 @@ nextflow.enable.dsl = 2 */ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') /* ======================================================================================== diff --git a/nextflow.config b/nextflow.config index 329e093e..e9fc931d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -17,6 +17,8 @@ params { genome = null igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false + local_genomes = null + save_reference = false // MultiQC options multiqc_config = null @@ -68,11 +70,11 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load igenomes.config if required +// Load igenomes.config if required else load custom genomes.config if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } else { - params.genomes = [:] + includeConfig 'conf/genomes.config' } profiles { diff --git a/nextflow_schema.json b/nextflow_schema.json index 60fdb051..6a07a669 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -79,6 +79,20 @@ "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`." + }, + "bwamem2_index": { + "type": "string", + "format": "directory-path", + "fa_icon": "fas fa-copy", + "description": "Path to directory or tar.gz archive for pre-built STAR index.", + "help_text": "> **NB** If none provided, will be generated automatically from the FASTA reference." + }, + "save_reference": { + "type": "boolean", + "default": false, + "description": "If generated by the pipeline save the BWA index in the results directory.", + "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times.", + "fa_icon": "fas fa-save" } } }, diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf new file mode 100644 index 00000000..3d597b7d --- /dev/null +++ b/subworkflows/local/prepare_genome.nf @@ -0,0 +1,31 @@ +// +// Prepare indices for reference genome files +// + +params.bwamem2_idx_options = [:] + +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) + +workflow PREPARE_GENOME { + take: + prepare_tool_indicies // list: tools to prepare indices for + + main: + + ch_bwamem2_index = Channel.empty() + ch_bwamem2_version = Channel.empty() + // Download BWAMEM2 index or create from scratch if required + if ('bwamem2' in prepare_tool_indicies) { + if (params.bwamem2_index) { + ch_bwamem2_index = file(params.bwamem2_index) + } else { + ch_bwamem2_index = BWAMEM2_INDEX ( params.fasta ).index + ch_bwamem2_version = BWAMEM2_INDEX.out.version + } + } + + + emit: + bwamem2_index = ch_bwamem2_index + bwamem2_version = ch_bwamem2_version +} diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index acfd0e5f..496845a7 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -2,7 +2,7 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -params.bwamem2_idx_options = [:] +// params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] params.samtools_idx_options = [:] params.samtools_sort_options = [:] @@ -11,7 +11,7 @@ params.samtools_merge_options = [:] params.markduplicates_options = [:] params.samtools_idx_md_options = [:] -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) +// include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) @@ -24,14 +24,12 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/ workflow MAPPING { take: reads_input // channel: [mandatory] meta, reads_input - fasta // channel: [mandatory] fasta + // fasta // channel: [mandatory] fasta + index // channel: /path/to/bwamem2/index/ main: - // Index - BWAMEM2_INDEX ( fasta ) - // Map, sort, and index - BWAMEM2_MEM ( reads_input, BWAMEM2_INDEX.out.index ) + BWAMEM2_MEM ( reads_input, index ) SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1c85bb26..5e28cd9c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -11,7 +11,10 @@ WorkflowRaredisease.initialise(params, log) // 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 ] +def checkPathParamList = [ + params.input, params.multiqc_config, params.fasta, + params.bwamem2_index +] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters @@ -35,6 +38,8 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +def publish_idx_options = params.save_reference ? modules['bwa_mem2_index'] : [publish_files: false] +def prepareToolIndices = ['bwamem2'] // // MODULE: Local to the pipeline // @@ -63,6 +68,9 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op // // SUBWORKFLOW: Consists entirely of nf-core/modules // + +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( bwamem2_idx_options: publish_idx_options ) + include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], @@ -100,8 +108,12 @@ workflow RAREDISEASE { ) ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) + // STEP 0: PREPARE GENOME REFERENCES AND INDICES. + PREPARE_GENOME ( prepareToolIndices ) + // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. - MAPPING ( INPUT_CHECK.out.reads, params.fasta ) + // MAPPING ( INPUT_CHECK.out.reads, params.fasta ) + MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.markduplicates_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) From 54e1a749fa3311da4684dd842719b998a0f54353 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 6 Sep 2021 13:34:52 +0200 Subject: [PATCH 0032/1921] tidy configs --- conf/genomes.config | 3 +-- conf/test.config | 4 +++- nextflow_schema.json | 14 ++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index c077f146..7d181d5f 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,10 +11,9 @@ params { genomes { 'GRCh37' { - bwamem = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" + bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" } 'GRCh38' { - bwamem = "${params.local_genomes}/grch38_homo_sapiens_-v0_m-.fasta.{amb,ann,bwt,pac,sa}" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } } diff --git a/conf/test.config b/conf/test.config index d14ee681..136e56ad 100644 --- a/conf/test.config +++ b/conf/test.config @@ -4,8 +4,10 @@ ======================================================================================== Defines input files and everything required to run a fast and simple pipeline test. - Use as follows: + Use as follows (only works after release): nextflow run nf-core/raredisease -profile test, + For now while it's under active development: + nextflow run main.nf -profile test, ---------------------------------------------------------------------------------------- */ diff --git a/nextflow_schema.json b/nextflow_schema.json index 6a07a669..a262306b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -84,15 +84,21 @@ "type": "string", "format": "directory-path", "fa_icon": "fas fa-copy", - "description": "Path to directory or tar.gz archive for pre-built STAR index.", + "description": "Path to directory for pre-built bwamem2 index.", "help_text": "> **NB** If none provided, will be generated automatically from the FASTA reference." }, "save_reference": { "type": "boolean", "default": false, - "description": "If generated by the pipeline save the BWA index in the results directory.", - "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times.", + "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", + "fa_icon": "fas fa-map-marker-alt", + "description": "Directory / URL base for genomes references.", + "help_text": "All files are supposed to be in the same folder defining a flat structure" } } }, @@ -302,4 +308,4 @@ "$ref": "#/definitions/generic_options" } ] -} +} \ No newline at end of file From 813236370f03a35aa25cbab78ce3c2f12c5809bd Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 6 Sep 2021 13:47:45 +0200 Subject: [PATCH 0033/1921] woops! forgot to rm comments --- subworkflows/nf-core/mapping.nf | 2 -- workflows/raredisease.nf | 1 - 2 files changed, 3 deletions(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 496845a7..b834580f 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -11,7 +11,6 @@ params.samtools_merge_options = [:] params.markduplicates_options = [:] params.samtools_idx_md_options = [:] -// include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) @@ -24,7 +23,6 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/ workflow MAPPING { take: reads_input // channel: [mandatory] meta, reads_input - // fasta // channel: [mandatory] fasta index // channel: /path/to/bwamem2/index/ main: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5e28cd9c..4d763a25 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -112,7 +112,6 @@ workflow RAREDISEASE { PREPARE_GENOME ( prepareToolIndices ) // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. - // MAPPING ( INPUT_CHECK.out.reads, params.fasta ) MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.markduplicates_version.ifEmpty(null)) From 21128549ebd228383af5d3e080ba40b2ea9de518 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 6 Sep 2021 15:48:33 +0200 Subject: [PATCH 0034/1921] fix bwamem index parameter and add local fasta copy --- conf/genomes.config | 3 ++- subworkflows/local/prepare_genome.nf | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/genomes.config b/conf/genomes.config index 7d181d5f..077eb798 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -14,7 +14,8 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" } 'GRCh38' { - bwamem2 = "${params.local_genomes}/grch38_homo_sapiens.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" + bwamem2 = "${params.local_genomes}/grch38_homo_sapiens.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } } } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 3d597b7d..46da2087 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -18,6 +18,8 @@ workflow PREPARE_GENOME { if ('bwamem2' in prepare_tool_indicies) { if (params.bwamem2_index) { ch_bwamem2_index = file(params.bwamem2_index) + } else if (params.bwamem2){ + ch_bwamem2_index = file(params.bwamem2) } else { ch_bwamem2_index = BWAMEM2_INDEX ( params.fasta ).index ch_bwamem2_version = BWAMEM2_INDEX.out.version From 679023a05d45a91cbf6f68f48531b0b675da8046 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 6 Sep 2021 15:49:07 +0200 Subject: [PATCH 0035/1921] fix bwamem index parameter and add local fasta copy --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 46da2087..0a0449f5 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -14,7 +14,7 @@ workflow PREPARE_GENOME { ch_bwamem2_index = Channel.empty() ch_bwamem2_version = Channel.empty() - // Download BWAMEM2 index or create from scratch if required + // Fetch BWAMEM2 index or create from scratch if required if ('bwamem2' in prepare_tool_indicies) { if (params.bwamem2_index) { ch_bwamem2_index = file(params.bwamem2_index) From 86846763a48083bb6290ba6afccdab7190eac690 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 7 Sep 2021 11:30:22 +0200 Subject: [PATCH 0036/1921] fixed as per suggestions --- conf/genomes.config | 3 ++- main.nf | 2 +- nextflow_schema.json | 4 ++-- subworkflows/local/prepare_genome.nf | 16 ++++++---------- subworkflows/nf-core/mapping.nf | 1 - workflows/raredisease.nf | 7 ++++--- 6 files changed, 15 insertions(+), 18 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 077eb798..07acc3c0 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,11 +11,12 @@ params { genomes { 'GRCh37' { + fasta ="${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" - bwamem2 = "${params.local_genomes}/grch38_homo_sapiens.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } } } diff --git a/main.nf b/main.nf index c1eefa92..d378bf7d 100644 --- a/main.nf +++ b/main.nf @@ -18,7 +18,7 @@ nextflow.enable.dsl = 2 */ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') /* ======================================================================================== diff --git a/nextflow_schema.json b/nextflow_schema.json index a262306b..f791148c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -80,9 +80,9 @@ "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`." }, - "bwamem2_index": { + "bwamem2": { "type": "string", - "format": "directory-path", + "format": "file-path", "fa_icon": "fas fa-copy", "description": "Path to directory for pre-built bwamem2 index.", "help_text": "> **NB** If none provided, will be generated automatically from the FASTA reference." diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 0a0449f5..cb75bcc2 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -8,22 +8,18 @@ include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main workflow PREPARE_GENOME { take: - prepare_tool_indicies // list: tools to prepare indices for + fasta main: ch_bwamem2_index = Channel.empty() ch_bwamem2_version = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required - if ('bwamem2' in prepare_tool_indicies) { - if (params.bwamem2_index) { - ch_bwamem2_index = file(params.bwamem2_index) - } else if (params.bwamem2){ - ch_bwamem2_index = file(params.bwamem2) - } else { - ch_bwamem2_index = BWAMEM2_INDEX ( params.fasta ).index - ch_bwamem2_version = BWAMEM2_INDEX.out.version - } + if ( params.bwamem2 && file(params.bwamem2, checkIfExists:true) ) { + ch_bwamem2_index = file(params.bwamem2) + } else { + ch_bwamem2_index = BWAMEM2_INDEX ( fasta ).index + ch_bwamem2_version = BWAMEM2_INDEX.out.version } diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index b834580f..d74addbd 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -2,7 +2,6 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -// params.bwamem2_idx_options = [:] params.bwamem2_mem_options = [:] params.samtools_idx_options = [:] params.samtools_sort_options = [:] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4d763a25..5791a0bb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -13,7 +13,7 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2_index + params.bwamem2 ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -39,7 +39,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi def modules = params.modules.clone() def publish_idx_options = params.save_reference ? modules['bwa_mem2_index'] : [publish_files: false] -def prepareToolIndices = ['bwamem2'] + // // MODULE: Local to the pipeline // @@ -94,6 +94,7 @@ def multiqc_report = [] workflow RAREDISEASE { ch_software_versions = Channel.empty() + ch_fasta = file(params.fasta) // // SUBWORKFLOW: Read in samplesheet, validate and stage input files @@ -109,7 +110,7 @@ workflow RAREDISEASE { ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. - PREPARE_GENOME ( prepareToolIndices ) + PREPARE_GENOME ( ch_fasta ) // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) From 0f8356c88ab77efef75e8a92e5919b497795ce70 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 7 Sep 2021 16:41:04 +0200 Subject: [PATCH 0037/1921] fixed indices --- conf/genomes.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/genomes.config b/conf/genomes.config index 07acc3c0..77f9c1f8 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -12,7 +12,7 @@ params { genomes { 'GRCh37' { fasta ="${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" - bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{amb,ann,bwt,pac,sa}" + bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" From f71398dd96f5f67200fab3576741e5692bf1388c Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 9 Sep 2021 16:08:35 +0200 Subject: [PATCH 0038/1921] reformat --- conf/genomes.config | 2 +- subworkflows/local/prepare_genome.nf | 8 +++----- subworkflows/nf-core/mapping.nf | 27 +++++++++------------------ workflows/raredisease.nf | 15 ++++++++------- 4 files changed, 21 insertions(+), 31 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 77f9c1f8..d9f316b8 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,7 +11,7 @@ params { genomes { 'GRCh37' { - fasta ="${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" + fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } 'GRCh38' { diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index cb75bcc2..abb0b764 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -8,10 +8,9 @@ include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main workflow PREPARE_GENOME { take: - fasta + fasta // path: genome.fasta main: - ch_bwamem2_index = Channel.empty() ch_bwamem2_version = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required @@ -22,8 +21,7 @@ workflow PREPARE_GENOME { ch_bwamem2_version = BWAMEM2_INDEX.out.version } - emit: - bwamem2_index = ch_bwamem2_index - bwamem2_version = ch_bwamem2_version + bwamem2_index = ch_bwamem2_index // path: bwamem2/index + bwamem2_version = ch_bwamem2_version // path: *.version.txt } diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index d74addbd..6f8ac60b 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -21,7 +21,7 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/ workflow MAPPING { take: - reads_input // channel: [mandatory] meta, reads_input + reads_input // channel: [ val(meta), reads_input ] index // channel: /path/to/bwamem2/index/ main: @@ -34,7 +34,6 @@ workflow MAPPING { // Get stats for each demultiplexed read pair. bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed ) - stats = SAMTOOLS_STATS.out.stats // Merge multiple lane samples and index SAMTOOLS_SORT.out.bam.map{ meta, bam -> @@ -51,24 +50,16 @@ workflow MAPPING { // Marking duplicates + index MARKDUPLICATES ( merged_bam ) - marked_bam = MARKDUPLICATES.out.bam - SAMTOOLS_INDEX_MD ( marked_bam ) - marked_bai = SAMTOOLS_INDEX_MD.out.bai - - - // Collect versions - bwamem2_version = BWAMEM2_MEM.out.version - markduplicates_version = MARKDUPLICATES.out.version - samtools_version = SAMTOOLS_SORT.out.version emit: - stats - marked_bam - marked_bai - + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] + metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] + marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), [ marked_bam ] ] + marked_bai = SAMTOOLS_INDEX_MD.out.bai // channel: [ val(meta), [ marked_bai ] ] - bwamem2_version - markduplicates_version - samtools_version + // Collect versions + bwamem2_version = BWAMEM2_MEM.out.version // path: *.version.txt + picard_version = MARKDUPLICATES.out.version // path: *.version.txt + samtools_version = SAMTOOLS_SORT.out.version // path: *.version.txt } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5791a0bb..a0e7490e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -38,6 +38,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +// Switch for saving references def publish_idx_options = params.save_reference ? modules['bwa_mem2_index'] : [publish_files: false] // @@ -115,7 +116,7 @@ workflow RAREDISEASE { // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(MAPPING.out.markduplicates_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(MAPPING.out.picard_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) // @@ -139,12 +140,12 @@ workflow RAREDISEASE { workflow_summary = WorkflowRaredisease.paramsSummaryMultiqc(workflow, summary_params) ch_workflow_summary = Channel.value(workflow_summary) - ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) - ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = Channel.empty() + ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) + ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) MULTIQC ( ch_multiqc_files.collect() From c2b307c754cb03640b4e73f0dc9733c06ff0f5a7 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 9 Sep 2021 16:19:12 +0200 Subject: [PATCH 0039/1921] fixed fails --- subworkflows/nf-core/mapping.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 6f8ac60b..74901e67 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -50,7 +50,7 @@ workflow MAPPING { // Marking duplicates + index MARKDUPLICATES ( merged_bam ) - SAMTOOLS_INDEX_MD ( marked_bam ) + SAMTOOLS_INDEX_MD ( MARKDUPLICATES.out.bam ) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] From 09327d050d28491a71675b7a1a89c222cf7dbad4 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 13 Sep 2021 16:35:05 +0200 Subject: [PATCH 0040/1921] updated module versions --- modules.json | 8 ++++---- modules/nf-core/modules/multiqc/main.nf | 6 +++--- modules/nf-core/modules/samtools/index/main.nf | 6 +++--- modules/nf-core/modules/samtools/sort/main.nf | 6 +++--- modules/nf-core/modules/samtools/stats/main.nf | 6 +++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/modules.json b/modules.json index c819eccc..0bf492bd 100644 --- a/modules.json +++ b/modules.json @@ -13,22 +13,22 @@ "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, "multiqc": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "picard/markduplicates": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "samtools/index": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "samtools/merge": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "samtools/sort": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "samtools/stats": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" } } } diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index da780800..8b6d6f0c 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -10,11 +10,11 @@ process MULTIQC { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? "bioconda::multiqc=1.10.1" : null) + conda (params.enable_conda ? 'bioconda::multiqc=1.11' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.10.1--py_0" + container "https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0" } else { - container "quay.io/biocontainers/multiqc:1.10.1--py_0" + container "quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0" } input: diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index 778e9384..e1966fb3 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -11,11 +11,11 @@ process SAMTOOLS_INDEX { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf index 240e8e9f..0a6b7048 100644 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -11,11 +11,11 @@ process SAMTOOLS_SORT { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index 6bb0a4c7..8c72d725 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -11,11 +11,11 @@ process SAMTOOLS_STATS { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.12" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.12--hd5e65b6_0" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.12--hd5e65b6_0" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: From b0c0566b9917f56f614dd77f8756e4c048f1c3ef Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 13 Sep 2021 16:49:39 +0200 Subject: [PATCH 0041/1921] added the module --- modules/local/deepvariant/functions.nf | 68 + modules/local/deepvariant/main.nf | 1475 ++++++++++++++++++++++ modules/local/deepvariant/meta.yml | 1585 ++++++++++++++++++++++++ 3 files changed, 3128 insertions(+) create mode 100644 modules/local/deepvariant/functions.nf create mode 100644 modules/local/deepvariant/main.nf create mode 100644 modules/local/deepvariant/meta.yml diff --git a/modules/local/deepvariant/functions.nf b/modules/local/deepvariant/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/local/deepvariant/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf new file mode 100644 index 00000000..1d089031 --- /dev/null +++ b/modules/local/deepvariant/main.nf @@ -0,0 +1,1475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + modules/main.nf at c3814a760cd57a2e7906eb9492a514de1fb45afa · nf-core/modules · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + Permalink + + + +
+ +
+
+ + + c3814a760c + + + + +
+
+
+ Switch branches/tags + +
+ + + +
+ +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+ + + + Go to file + + +
+ + + + + + + + + +
+
+
+ + + + +
+ +
+
+
 
+
+ +
+
 
+ Cannot retrieve contributors at this time +
+
+ + + + + + + + + +
+ +
+ + +
+ + 45 lines (36 sloc) + + 1.48 KB +
+ +
+ + + +
+ + + + + + + + + +
+
+ +
+ +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
include { initOptions; saveFiles; getSoftwareName } from './functions'
+
params.options = [:]
options = initOptions(params.options)
+
process DEEPVARIANT {
tag "$meta.id"
label 'process_medium'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
+
conda (params.enable_conda ? "bioconda::deepvariant=1.2.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "docker://google/deepvariant:1.2.0"
} else {
container "google/deepvariant:1.2.0"
}
+
input:
tuple val(meta), path(bam), path(bai)
tuple path(fasta), path(fai)
+
output:
tuple val(meta), path("*.vcf.gz"), emit: vcf
tuple val(meta), path("*g.vcf.gz"), emit: gvcf
path "*.version.txt" , emit: version
+
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
+
"""
/opt/deepvariant/bin/run_deepvariant \\
--ref=${fasta} \\
--reads=${bam} \\
--output_vcf=${prefix}.vcf.gz \\
--output_gvcf=${prefix}.g.vcf.gz \\
${options.args} \\
--num_shards=${task.cpus}
echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' > ${software}.version.txt
"""
+
}
+ + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + +
+ + + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/modules/local/deepvariant/meta.yml b/modules/local/deepvariant/meta.yml new file mode 100644 index 00000000..972e7971 --- /dev/null +++ b/modules/local/deepvariant/meta.yml @@ -0,0 +1,1585 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + modules/meta.yml at c3814a760cd57a2e7906eb9492a514de1fb45afa · nf-core/modules · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + Permalink + + + +
+ +
+
+ + + c3814a760c + + + + +
+
+
+ Switch branches/tags + +
+ + + +
+ +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+ + + + Go to file + + +
+ + + + + + + + + +
+
+
+ + + + +
+ +
+
+ + @abhi18av + + +
+ + Latest commit + c7b0c1a + Sep 6, 2021 + + + + + + History + + +
+
+ +
+ +
+
+ + + 1 + + contributor + + +
+ +

+ Users who have contributed to this file +

+
+ + + + + + +
+
+
+
+ + + + + + + + + +
+ +
+ + +
+ + 58 lines (55 sloc) + + 1.59 KB +
+ +
+ + + +
+ + + + + + + + + +
+
+ +
+ +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
name: deepvariant
description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data
keywords:
- variant calling
- machine learning
tools:
- deepvariant:
description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data
homepage: https://github.com/google/deepvariant
documentation: https://github.com/google/deepvariant
tool_dev_url: https://github.com/google/deepvariant
doi: "https://doi.org/10.1038/nbt.4235"
licence: ['BSD-3-clause']
+
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- bam:
type: file
description: BAM file
pattern: "*.bam"
- bai:
type: file
description: Index of BAM file
pattern: "*.bai"
- fasta:
type: file
description: The reference fasta file
pattern: "*.fasta"
- fai:
type: file
description: Index of reference fasta file
pattern: "*.fai"
+
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- vcf:
type: file
description: Compressed VCF file
pattern: "*.vcf.gz"
- gvcf:
type: file
description: Compressed GVCF file
pattern: "*.g.vcf.gz"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
+
authors:
- "@abhi18av"
+ + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + +
+ + + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + From 5cfa6b1cd336b41df29693904ff5af9aaecaf83b Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 13 Sep 2021 16:56:24 +0200 Subject: [PATCH 0042/1921] omg added the wrong files but this commit fixes it --- modules/local/deepvariant/main.nf | 1520 +------------------------ modules/local/deepvariant/meta.yml | 1643 +--------------------------- 2 files changed, 103 insertions(+), 3060 deletions(-) diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf index 1d089031..e9139ee6 100644 --- a/modules/local/deepvariant/main.nf +++ b/modules/local/deepvariant/main.nf @@ -1,1475 +1,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - modules/main.nf at c3814a760cd57a2e7906eb9492a514de1fb45afa · nf-core/modules · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
- - - -
- - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - - - Permalink - - - -
- -
-
- - - c3814a760c - - - - -
-
-
- Switch branches/tags - -
- - - -
- -
- -
- - -
- -
- - - - - - - - - - - - - - - - -
- - -
-
-
-
- -
- -
- - - - Go to file - - -
- - - - - - - - - -
-
-
- - - - -
- -
-
-
 
-
- -
-
 
- Cannot retrieve contributors at this time -
-
- - - - - - - - - -
- -
- - -
- - 45 lines (36 sloc) - - 1.48 KB -
- -
- - - -
- - - - - - - - - -
-
- -
- -
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
include { initOptions; saveFiles; getSoftwareName } from './functions'
-
params.options = [:]
options = initOptions(params.options)
-
process DEEPVARIANT {
tag "$meta.id"
label 'process_medium'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
-
conda (params.enable_conda ? "bioconda::deepvariant=1.2.0" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "docker://google/deepvariant:1.2.0"
} else {
container "google/deepvariant:1.2.0"
}
-
input:
tuple val(meta), path(bam), path(bai)
tuple path(fasta), path(fai)
-
output:
tuple val(meta), path("*.vcf.gz"), emit: vcf
tuple val(meta), path("*g.vcf.gz"), emit: gvcf
path "*.version.txt" , emit: version
-
script:
def software = getSoftwareName(task.process)
def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}"
-
"""
/opt/deepvariant/bin/run_deepvariant \\
--ref=${fasta} \\
--reads=${bam} \\
--output_vcf=${prefix}.vcf.gz \\
--output_gvcf=${prefix}.g.vcf.gz \\
${options.args} \\
--num_shards=${task.cpus}
echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' > ${software}.version.txt
"""
-
}
- - - -
- -
- - - - -
- - -
- - -
-
- - -
- - - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DEEPVARIANT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::deepvariant=1.2.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "docker://google/deepvariant:1.2.0" + } else { + container "google/deepvariant:1.2.0" + } + + input: + tuple val(meta), path(bam), path(bai) + tuple path(fasta), path(fai) + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*g.vcf.gz"), emit: gvcf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + """ + /opt/deepvariant/bin/run_deepvariant \\ + --ref=${fasta} \\ + --reads=${bam} \\ + --output_vcf=${prefix}.vcf.gz \\ + --output_gvcf=${prefix}.g.vcf.gz \\ + ${options.args} \\ + --num_shards=${task.cpus} + + echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' > ${software}.version.txt + """ + +} diff --git a/modules/local/deepvariant/meta.yml b/modules/local/deepvariant/meta.yml index 972e7971..05269a3b 100644 --- a/modules/local/deepvariant/meta.yml +++ b/modules/local/deepvariant/meta.yml @@ -1,1585 +1,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - modules/meta.yml at c3814a760cd57a2e7906eb9492a514de1fb45afa · nf-core/modules · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
- - - -
- - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - - - Permalink - - - -
- -
-
- - - c3814a760c - - - - -
-
-
- Switch branches/tags - -
- - - -
- -
- -
- - -
- -
- - - - - - - - - - - - - - - - -
- - -
-
-
-
- -
- -
- - - - Go to file - - -
- - - - - - - - - -
-
-
- - - - -
- -
-
- - @abhi18av - - -
- - Latest commit - c7b0c1a - Sep 6, 2021 - - - - - - History - - -
-
- -
- -
-
- - - 1 - - contributor - - -
- -

- Users who have contributed to this file -

-
- - - - - - -
-
-
-
- - - - - - - - - -
- -
- - -
- - 58 lines (55 sloc) - - 1.59 KB -
- -
- - - -
- - - - - - - - - -
-
- -
- -
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
name: deepvariant
description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data
keywords:
- variant calling
- machine learning
tools:
- deepvariant:
description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data
homepage: https://github.com/google/deepvariant
documentation: https://github.com/google/deepvariant
tool_dev_url: https://github.com/google/deepvariant
doi: "https://doi.org/10.1038/nbt.4235"
licence: ['BSD-3-clause']
-
input:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- bam:
type: file
description: BAM file
pattern: "*.bam"
- bai:
type: file
description: Index of BAM file
pattern: "*.bai"
- fasta:
type: file
description: The reference fasta file
pattern: "*.fasta"
- fai:
type: file
description: Index of reference fasta file
pattern: "*.fai"
-
output:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- vcf:
type: file
description: Compressed VCF file
pattern: "*.vcf.gz"
- gvcf:
type: file
description: Compressed GVCF file
pattern: "*.g.vcf.gz"
- version:
type: file
description: File containing software version
pattern: "*.{version.txt}"
-
authors:
- "@abhi18av"
- - - -
- -
- - - - -
- - -
- - -
-
- - -
- - - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - +name: deepvariant +description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data +keywords: + - variant calling + - machine learning +tools: + - deepvariant: + description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "https://doi.org/10.1038/nbt.4235" + licence: ['BSD-3-clause'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.bam" + - bai: + type: file + description: Index of BAM file + pattern: "*.bai" + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - gvcf: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@abhi18av" From d3e15e0bd817a314f77d0bf33c6891c04015e213 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 13 Sep 2021 17:41:23 +0200 Subject: [PATCH 0043/1921] added subworkflow + incl. in rd.nf --- conf/modules.config | 3 +++ subworkflows/local/deepvariant_caller.nf | 23 +++++++++++++++++++++++ workflows/raredisease.nf | 12 ++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 subworkflows/local/deepvariant_caller.nf diff --git a/conf/modules.config b/conf/modules.config index 21c086cd..e8cefb20 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -32,6 +32,9 @@ params { args = '-M -K 100000000' publish_files = false } + 'deepvariant' { + args = '--model_type=WGS' + } 'picard_markduplicates' { suffix = '.sorted.md' publish_dir = 'markduplicates' diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf new file mode 100644 index 00000000..aa4a06d7 --- /dev/null +++ b/subworkflows/local/deepvariant_caller.nf @@ -0,0 +1,23 @@ +// +// A variant caller workflow for deepvariant +// + +params.deepvariant_options = [:] + +include { DEEPVARIANT } from '../../modules/local/depvariant/main' addParams( options: params.deepvariant_options ) + +workflow DEEPVARIANT_CALLER { + take: + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // channel: [ path(fasta), path(fai) ] + + main: + DEEPVARIANT ( bam, fasta ) + + emit: + vcf = DEEPVARIANT.out.vcf + gvcf = DEEPVARIANT.out.gvf + + // Collect versions + deepvariant_version = DEEPVARIANT.out.version +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5791a0bb..c2cee6fe 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -82,6 +82,13 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( samtools_idx_md_options: modules['samtools_index_md'], ) + +// +// SUBWORKFLOW: Consists of mix/local modules +// + +include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'] ) + /* ======================================================================================== RUN MAIN WORKFLOW @@ -118,6 +125,11 @@ workflow RAREDISEASE { ch_software_versions = ch_software_versions.mix(MAPPING.out.markduplicates_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) + // STEP 2: VARIANT CALLING + // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. + DEEPVARIANT_CALLER ( MAPPING.out.marked_bam, ch_fasta ) + ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) + // // MODULE: Pipeline reporting // From d1415999f9cd29a78ab73064f9932dd754494ffc Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 14 Sep 2021 10:11:59 +0200 Subject: [PATCH 0044/1921] added faidx module and refactored genome.fasta emit --- modules.json | 3 + .../modules/samtools/faidx/functions.nf | 68 +++++++++++++++++++ .../nf-core/modules/samtools/faidx/main.nf | 34 ++++++++++ .../nf-core/modules/samtools/faidx/meta.yml | 32 +++++++++ subworkflows/local/prepare_genome.nf | 9 ++- workflows/raredisease.nf | 3 +- 6 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/modules/samtools/faidx/functions.nf create mode 100644 modules/nf-core/modules/samtools/faidx/main.nf create mode 100644 modules/nf-core/modules/samtools/faidx/meta.yml diff --git a/modules.json b/modules.json index c819eccc..7fb0497f 100644 --- a/modules.json +++ b/modules.json @@ -18,6 +18,9 @@ "picard/markduplicates": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, + "samtools/faidx": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "samtools/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/modules/nf-core/modules/samtools/faidx/functions.nf b/modules/nf-core/modules/samtools/faidx/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/samtools/faidx/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf new file mode 100644 index 00000000..a89ff2bb --- /dev/null +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -0,0 +1,34 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_FAIDX { + tag "$fasta" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" + } else { + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" + } + + input: + path fasta + + output: + path "*.fai" , emit: fai + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools faidx $fasta + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/modules/samtools/faidx/meta.yml new file mode 100644 index 00000000..f92234d0 --- /dev/null +++ b/modules/nf-core/modules/samtools/faidx/meta.yml @@ -0,0 +1,32 @@ +name: samtools_faidx +description: Index FASTA file +keywords: + - index + - fasta +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 +input: + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" +output: + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@ewels" + - "@phue" diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index abb0b764..fd8f97aa 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -3,16 +3,18 @@ // params.bwamem2_idx_options = [:] +params.samtools_faidx_options = [:] include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' addParams( options: params.samtools_faidx_options ) workflow PREPARE_GENOME { take: fasta // path: genome.fasta main: - ch_bwamem2_index = Channel.empty() - ch_bwamem2_version = Channel.empty() + ch_fasta = file(fasta) + // Fetch BWAMEM2 index or create from scratch if required if ( params.bwamem2 && file(params.bwamem2, checkIfExists:true) ) { ch_bwamem2_index = file(params.bwamem2) @@ -22,6 +24,9 @@ workflow PREPARE_GENOME { } emit: + fasta = ch_fasta // path: genome.fasta + fai = ch_fai // path: genome.fasta.fai + bwamem2_index = ch_bwamem2_index // path: bwamem2/index bwamem2_version = ch_bwamem2_version // path: *.version.txt } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a0e7490e..4304c1eb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -95,7 +95,6 @@ def multiqc_report = [] workflow RAREDISEASE { ch_software_versions = Channel.empty() - ch_fasta = file(params.fasta) // // SUBWORKFLOW: Read in samplesheet, validate and stage input files @@ -111,7 +110,7 @@ workflow RAREDISEASE { ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. - PREPARE_GENOME ( ch_fasta ) + PREPARE_GENOME ( params.fasta ) // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) From da9fb0d6a0771db08ba4e3c3cc78d22f95e7000b Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 14 Sep 2021 16:14:08 +0200 Subject: [PATCH 0045/1921] refactored save ref --- conf/genomes.config | 2 ++ conf/modules.config | 9 ++++++--- main.nf | 1 + subworkflows/local/prepare_genome.nf | 16 ++++++++++++++-- workflows/raredisease.nf | 9 ++++++--- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index d9f316b8..4f9835b3 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -12,10 +12,12 @@ params { genomes { 'GRCh37' { fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" + fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" + fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" } } diff --git a/conf/modules.config b/conf/modules.config index 21c086cd..dd0b665d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -36,15 +36,18 @@ params { suffix = '.sorted.md' publish_dir = 'markduplicates' } - 'samtools_index' { - publish_files = false + 'samtools_faidx' { + publish_dir = 'references' } - 'samtools_merge' { + 'samtools_index' { publish_files = false } 'samtools_index_md' { publish_dir = 'markduplicates' } + 'samtools_merge' { + publish_files = false + } 'samtools_sort' { suffix = '.sorted' publish_files = false diff --git a/main.nf b/main.nf index d378bf7d..54646f05 100644 --- a/main.nf +++ b/main.nf @@ -18,6 +18,7 @@ nextflow.enable.dsl = 2 */ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') /* diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index fd8f97aa..e9bd93d9 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -1,7 +1,8 @@ // -// Prepare indices for reference genome files +// Prepare reference genome files // + params.bwamem2_idx_options = [:] params.samtools_faidx_options = [:] @@ -15,17 +16,28 @@ workflow PREPARE_GENOME { main: ch_fasta = file(fasta) + ch_bwamem2_version = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required if ( params.bwamem2 && file(params.bwamem2, checkIfExists:true) ) { ch_bwamem2_index = file(params.bwamem2) } else { - ch_bwamem2_index = BWAMEM2_INDEX ( fasta ).index + ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index ch_bwamem2_version = BWAMEM2_INDEX.out.version } + ch_samtools_version = Channel.empty() + if ( params.fai ) { + ch_fai = file(params.fai) + } else { + ch_fai = SAMTOOLS_FAIDX ( ch_fasta ).fai + ch_samtools_version = SAMTOOLS_FAIDX.out.version + } + + emit: fasta = ch_fasta // path: genome.fasta fai = ch_fai // path: genome.fasta.fai + samtools_version = ch_samtools_version // path: *.version.txt bwamem2_index = ch_bwamem2_index // path: bwamem2/index bwamem2_version = ch_bwamem2_version // path: *.version.txt diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4304c1eb..a3ed7ded 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -13,7 +13,7 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2 + params.bwamem2, params.fai ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -39,7 +39,10 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi def modules = params.modules.clone() // Switch for saving references -def publish_idx_options = params.save_reference ? modules['bwa_mem2_index'] : [publish_files: false] +if (!params.save_reference) { + modules['bwa_mem2_index'].publish_files = false + modules['samtools_faidx'].publish_files = false +} // // MODULE: Local to the pipeline @@ -70,7 +73,7 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( bwamem2_idx_options: publish_idx_options ) +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], samtools_faidx_options: modules['samtools_faidx'] ) include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], From c5b91585a8e5015de0f361d1b009325f188be602 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 14 Sep 2021 16:31:01 +0200 Subject: [PATCH 0046/1921] renamed fai variable and updated param schema --- main.nf | 6 +++--- nextflow_schema.json | 7 +++++++ subworkflows/local/prepare_genome.nf | 4 ++-- workflows/raredisease.nf | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/main.nf b/main.nf index 54646f05..25ee266b 100644 --- a/main.nf +++ b/main.nf @@ -17,9 +17,9 @@ nextflow.enable.dsl = 2 ======================================================================================== */ -params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.fai = WorkflowMain.getGenomeAttribute(params, 'fai') -params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') /* ======================================================================================== diff --git a/nextflow_schema.json b/nextflow_schema.json index f791148c..9dd2d606 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -65,6 +65,13 @@ "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" }, + "fasta_fai": { + "type": "string", + "format": "file-path", + "help_text": "If none provided, will be generated automatically from the FASTA reference", + "description": "Path to FASTA reference index.", + "fa_icon": "fas fa-file" + }, "igenomes_base": { "type": "string", "format": "directory-path", diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index e9bd93d9..59fffed7 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -26,8 +26,8 @@ workflow PREPARE_GENOME { } ch_samtools_version = Channel.empty() - if ( params.fai ) { - ch_fai = file(params.fai) + if ( params.fasta_fai ) { + ch_fai = file(params.fasta_fai) } else { ch_fai = SAMTOOLS_FAIDX ( ch_fasta ).fai ch_samtools_version = SAMTOOLS_FAIDX.out.version diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a3ed7ded..e0083294 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -13,7 +13,7 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2, params.fai + params.bwamem2, params.fasta_fai ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } From ef657200d7d552055162e02ed029b25fe2a6573f Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 14 Sep 2021 17:16:40 +0200 Subject: [PATCH 0047/1921] improve readibility --- workflows/raredisease.nf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e0083294..b48ef19b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -73,7 +73,10 @@ include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( op // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], samtools_faidx_options: modules['samtools_faidx'] ) +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( + bwamem2_idx_options: modules['bwa_mem2_index'], + samtools_faidx_options: modules['samtools_faidx'] +) include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], @@ -84,7 +87,7 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( samtools_merge_options: modules['samtools_merge'], markduplicates_options: modules['picard_markduplicates'], samtools_idx_md_options: modules['samtools_index_md'], - ) +) /* ======================================================================================== From ef8e4e1482c464f555f13e41081746e041a5fed1 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Sep 2021 15:04:00 +0200 Subject: [PATCH 0048/1921] DONE --- subworkflows/local/deepvariant_caller.nf | 4 ++-- workflows/raredisease.nf | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index aa4a06d7..70319a81 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -4,7 +4,7 @@ params.deepvariant_options = [:] -include { DEEPVARIANT } from '../../modules/local/depvariant/main' addParams( options: params.deepvariant_options ) +include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) workflow DEEPVARIANT_CALLER { take: @@ -16,7 +16,7 @@ workflow DEEPVARIANT_CALLER { emit: vcf = DEEPVARIANT.out.vcf - gvcf = DEEPVARIANT.out.gvf + gvcf = DEEPVARIANT.out.gvcf // Collect versions deepvariant_version = DEEPVARIANT.out.version diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f0c8b5f3..06e99b3f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -133,7 +133,9 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. - DEEPVARIANT_CALLER ( MAPPING.out.marked_bam, ch_fasta ) + DEEPVARIANT_CALLER (MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), + PREPARE_GENOME.out.fasta.combine(PREPARE_GENOME.out.fai) + ) ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) // From ecc3a235bdddfd0278d3305378486521ee245880 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 17 Sep 2021 10:15:17 +0200 Subject: [PATCH 0049/1921] refactored reference files to be consumed separately --- modules/local/deepvariant/main.nf | 3 ++- subworkflows/local/deepvariant_caller.nf | 5 +++-- workflows/raredisease.nf | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf index e9139ee6..c685c18f 100644 --- a/modules/local/deepvariant/main.nf +++ b/modules/local/deepvariant/main.nf @@ -19,7 +19,8 @@ process DEEPVARIANT { input: tuple val(meta), path(bam), path(bai) - tuple path(fasta), path(fai) + path(fasta) + path(fai) output: tuple val(meta), path("*.vcf.gz"), emit: vcf diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 70319a81..96f9ca66 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -9,10 +9,11 @@ include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( workflow DEEPVARIANT_CALLER { take: bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // channel: [ path(fasta), path(fai) ] + fasta // path(fasta) + fai // path(fai) main: - DEEPVARIANT ( bam, fasta ) + DEEPVARIANT ( bam, fasta, fai ) emit: vcf = DEEPVARIANT.out.vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 06e99b3f..0214c1e1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -133,8 +133,10 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. - DEEPVARIANT_CALLER (MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), - PREPARE_GENOME.out.fasta.combine(PREPARE_GENOME.out.fai) + DEEPVARIANT_CALLER ( + MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai ) ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) From 30af5d4702fb60dcc8ff65f977644515aa99412e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 19 Sep 2021 23:22:16 +0200 Subject: [PATCH 0050/1921] add glnexus module --- conf/modules.config | 4 ++ modules/local/glnexus/functions.nf | 68 ++++++++++++++++++++++++++++++ modules/local/glnexus/main.nf | 40 ++++++++++++++++++ modules/local/glnexus/meta.yml | 33 +++++++++++++++ 4 files changed, 145 insertions(+) create mode 100644 modules/local/glnexus/functions.nf create mode 100644 modules/local/glnexus/main.nf create mode 100644 modules/local/glnexus/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 21c086cd..78556130 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -32,6 +32,10 @@ params { args = '-M -K 100000000' publish_files = false } + 'glnexus' { + args = '--config DeepVariant_unfiltered' + publish_dir = 'glnexus' + } 'picard_markduplicates' { suffix = '.sorted.md' publish_dir = 'markduplicates' diff --git a/modules/local/glnexus/functions.nf b/modules/local/glnexus/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/local/glnexus/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/glnexus/main.nf b/modules/local/glnexus/main.nf new file mode 100644 index 00000000..6c6313c6 --- /dev/null +++ b/modules/local/glnexus/main.nf @@ -0,0 +1,40 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process GLNEXUS_MERGE { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + +// conda (params.enable_conda ? "YOUR-TOOL-HERE" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "docker://clinicalgenomics/glnexus:v1.4.1" + } else { + container "clinicalgenomics/glnexus:v1.4.1" + } + + input: + tuple val(meta), path(gvcfs) + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + glnexus_cli \\ + --threads $task.cpus --mem-gbytes $task.memory \\ + $options.args \\ + $gvcfs \\ + > ${prefix}.bcf + + echo \$(glnexus_cli) | | head -n 1 | sed 's/^.*release //; s/ .*$//' > ${software}.version.txt + """ +} diff --git a/modules/local/glnexus/meta.yml b/modules/local/glnexus/meta.yml new file mode 100644 index 00000000..a38dcb77 --- /dev/null +++ b/modules/local/glnexus/meta.yml @@ -0,0 +1,33 @@ +name: glnexus +description: merge gVCF files and perform joint variant calling +keywords: + - merge + - gvcf +tools: + - glnexus: + description: | + GLnexus allows gVCF merging and joint variant calling for population sequencing + projects in a scalable fashion. + homepage: https://github.com/dnanexus-rnd/GLnexus + documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gvcfs: + type: file + description: Input genomic vcf files +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" +authors: + - "@ramprasadn" From 3490e30dc1415b767d611c774a4ab8f37f3f6f5e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 21 Sep 2021 11:27:56 +0200 Subject: [PATCH 0051/1921] refactor merge process and updated markdupe module --- conf/modules.config | 4 +- modules.json | 2 +- .../modules/picard/markduplicates/main.nf | 7 +- .../modules/picard/markduplicates/meta.yml | 83 ++++++++++--------- subworkflows/nf-core/mapping.nf | 21 +++-- 5 files changed, 62 insertions(+), 55 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 85d386b0..8d3421bf 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -36,6 +36,7 @@ params { args = '--model_type=WGS' } 'picard_markduplicates' { + args = '--CREATE_INDEX' suffix = '.sorted.md' publish_dir = 'markduplicates' } @@ -45,9 +46,6 @@ params { 'samtools_index' { publish_files = false } - 'samtools_index_md' { - publish_dir = 'markduplicates' - } 'samtools_merge' { publish_files = false } diff --git a/modules.json b/modules.json index d3b5ceb9..1636fe70 100644 --- a/modules.json +++ b/modules.json @@ -16,7 +16,7 @@ "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "picard/markduplicates": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "b2a6f5409efa6eb065c8186c606e68ff8004ba51" }, "samtools/faidx": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index d20014bf..ac829515 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -23,6 +23,7 @@ process PICARD_MARKDUPLICATES { output: tuple val(meta), path("*.bam") , emit: bam + tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.metrics.txt"), emit: metrics path "*.version.txt" , emit: version @@ -40,9 +41,9 @@ process PICARD_MARKDUPLICATES { -Xmx${avail_mem}g \\ MarkDuplicates \\ $options.args \\ - INPUT=$bam \\ - OUTPUT=${prefix}.bam \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt + -I $bam \\ + -O ${prefix}.bam \\ + -M ${prefix}.MarkDuplicates.metrics.txt echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d: > ${software}.version.txt """ diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index 6420ce9a..b651b3a0 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -1,46 +1,51 @@ name: picard_markduplicates description: Locate and tag duplicate reads in a BAM file keywords: - - markduplicates - - pcr - - duplicates - - bam - - sam - - cram + - markduplicates + - pcr + - duplicates + - bam + - sam + - cram tools: - - picard: - description: | - A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) - data and formats such as SAM/BAM/CRAM and VCF. - homepage: https://broadinstitute.github.io/picard/ - documentation: https://broadinstitute.github.io/picard/ + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file with duplicate reads marked/removed - pattern: "*.{bam}" - - metrics: - type: file - description: Duplicate metrics file generated by picard - pattern: "*.{metrics.txt}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + - bai: + type: file + description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag + pattern: "*.{bai}" + - metrics: + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" authors: - - "@drpatelh" + - "@drpatelh" + - "@projectoriented" diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 74901e67..98951847 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -15,7 +15,6 @@ include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/ma include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' addParams(options: params.samtools_idx_md_options ) include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' addParams(options: params.markduplicates_options ) @@ -40,23 +39,27 @@ workflow MAPPING { new_meta = meta.clone() new_meta.id = new_meta.id.split('_')[0] [new_meta, bam] - }.groupTuple().branch{ + }.groupTuple(by: 0).branch{ single: it[1].size() == 1 multiple: it[1].size() > 1 - }.set{ bams_to_merge } + }.set{ bams } - SAMTOOLS_MERGE ( bams_to_merge.multiple ) - merged_bam = bams_to_merge.single.mix(SAMTOOLS_MERGE.out.bam) + // If there are no samples to merge, skip the process + if ( bams.multiple.ifEmpty(false) ) { + prepared_bam = bams.single + } else { + SAMTOOLS_MERGE ( bams.multiple ) + prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) + } - // Marking duplicates + index - MARKDUPLICATES ( merged_bam ) - SAMTOOLS_INDEX_MD ( MARKDUPLICATES.out.bam ) + // Marking duplicates + MARKDUPLICATES ( prepared_bam ) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), [ marked_bam ] ] - marked_bai = SAMTOOLS_INDEX_MD.out.bai // channel: [ val(meta), [ marked_bai ] ] + marked_bai = MARKDUPLICATES.out.bai // channel: [ val(meta), [ marked_bai ] ] // Collect versions bwamem2_version = BWAMEM2_MEM.out.version // path: *.version.txt From 4dc6ec2a958da6b2e576026e45d538101f9cdb02 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 21 Sep 2021 16:21:06 +0200 Subject: [PATCH 0052/1921] removed the conditional --- subworkflows/nf-core/mapping.nf | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 98951847..ec9116e8 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -44,13 +44,9 @@ workflow MAPPING { multiple: it[1].size() > 1 }.set{ bams } - // If there are no samples to merge, skip the process - if ( bams.multiple.ifEmpty(false) ) { - prepared_bam = bams.single - } else { - SAMTOOLS_MERGE ( bams.multiple ) - prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) - } + // TODO: If there are no samples to merge, skip the process + SAMTOOLS_MERGE ( bams.multiple ) + prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) // Marking duplicates MARKDUPLICATES ( prepared_bam ) From 841cf4038c2fe5f8cf1f440dc57444207bc25928 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Sep 2021 19:32:10 +0200 Subject: [PATCH 0053/1921] install nf-core module --- modules.json | 3 ++ modules/local/glnexus/meta.yml | 33 ----------------- .../modules}/glnexus/functions.nf | 0 .../modules}/glnexus/main.nf | 31 ++++++++++------ modules/nf-core/modules/glnexus/meta.yml | 36 +++++++++++++++++++ 5 files changed, 59 insertions(+), 44 deletions(-) delete mode 100644 modules/local/glnexus/meta.yml rename modules/{local => nf-core/modules}/glnexus/functions.nf (100%) rename modules/{local => nf-core/modules}/glnexus/main.nf (50%) create mode 100644 modules/nf-core/modules/glnexus/meta.yml diff --git a/modules.json b/modules.json index d3b5ceb9..c1b966b4 100644 --- a/modules.json +++ b/modules.json @@ -12,6 +12,9 @@ "fastqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "glnexus": { + "git_sha": "25943a4c23c6ab585e740599df246b66078e966a" + }, "multiqc": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, diff --git a/modules/local/glnexus/meta.yml b/modules/local/glnexus/meta.yml deleted file mode 100644 index a38dcb77..00000000 --- a/modules/local/glnexus/meta.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: glnexus -description: merge gVCF files and perform joint variant calling -keywords: - - merge - - gvcf -tools: - - glnexus: - description: | - GLnexus allows gVCF merging and joint variant calling for population sequencing - projects in a scalable fashion. - homepage: https://github.com/dnanexus-rnd/GLnexus - documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gvcfs: - type: file - description: Input genomic vcf files -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" -authors: - - "@ramprasadn" diff --git a/modules/local/glnexus/functions.nf b/modules/nf-core/modules/glnexus/functions.nf similarity index 100% rename from modules/local/glnexus/functions.nf rename to modules/nf-core/modules/glnexus/functions.nf diff --git a/modules/local/glnexus/main.nf b/modules/nf-core/modules/glnexus/main.nf similarity index 50% rename from modules/local/glnexus/main.nf rename to modules/nf-core/modules/glnexus/main.nf index 6c6313c6..dadb9d60 100644 --- a/modules/local/glnexus/main.nf +++ b/modules/nf-core/modules/glnexus/main.nf @@ -4,37 +4,46 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] options = initOptions(params.options) -process GLNEXUS_MERGE { +process GLNEXUS { tag "$meta.id" - label 'process_high' + label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } -// conda (params.enable_conda ? "YOUR-TOOL-HERE" : null) + conda (params.enable_conda ? "bioconda::glnexus=1.4.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "docker://clinicalgenomics/glnexus:v1.4.1" + container "https://depot.galaxyproject.org/singularity/glnexus:1.4.1--h40d77a6_0" } else { - container "clinicalgenomics/glnexus:v1.4.1" + container "quay.io/biocontainers/glnexus:1.4.1--h40d77a6_0" } input: tuple val(meta), path(gvcfs) output: - tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*.bcf"), emit: bcf path "*.version.txt" , emit: version script: def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + // Make list of GVCFs to merge + def input = gvcfs.collect { it.toString() } + def avail_mem = 3 + if (!task.memory) { + log.info '[Glnexus] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } """ glnexus_cli \\ - --threads $task.cpus --mem-gbytes $task.memory \\ + --threads $task.cpus \\ + --mem-gbytes $avail_mem \\ $options.args \\ - $gvcfs \\ - > ${prefix}.bcf - - echo \$(glnexus_cli) | | head -n 1 | sed 's/^.*release //; s/ .*$//' > ${software}.version.txt + ${input.join(' ')} \\ + > ${prefix}.bcf + echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release //; s/ .*\$//' > ${software}.version.txt """ } diff --git a/modules/nf-core/modules/glnexus/meta.yml b/modules/nf-core/modules/glnexus/meta.yml new file mode 100644 index 00000000..f64a812e --- /dev/null +++ b/modules/nf-core/modules/glnexus/meta.yml @@ -0,0 +1,36 @@ +name: glnexus +description: merge gVCF files and perform joint variant calling +keywords: + - merge + - gvcf +tools: + - glnexus: + description: scalable gVCF merging and joint variant calling for population sequencing projects. + homepage: https://github.com/dnanexus-rnd/GLnexus + documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started + tool_dev_url: None + doi: https://doi.org/10.1101/343970 + licence: ['Apache License 2.0'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - gvcfs: + type: list + description: Input genomic vcf files + pattern: "*.{gvcf,gvcf.gz,g.vcf,g.vcf.gz}" + +output: + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bcf: + type: file + description: merged BCF file + pattern: "*.bcf" +authors: + - "@ramprasadn" From c91149e83a23cb6cd7a129a27d65c6dff0371f46 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 24 Sep 2021 14:26:02 +0200 Subject: [PATCH 0054/1921] applying suggestions --- subworkflows/nf-core/mapping.nf | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index ec9116e8..3719c797 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -21,7 +21,7 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/ workflow MAPPING { take: reads_input // channel: [ val(meta), reads_input ] - index // channel: /path/to/bwamem2/index/ + index // channel: /path/to/bwamem2/index/ main: // Map, sort, and index @@ -35,14 +35,17 @@ workflow MAPPING { SAMTOOLS_STATS ( bam_sorted_indexed ) // Merge multiple lane samples and index - SAMTOOLS_SORT.out.bam.map{ meta, bam -> - new_meta = meta.clone() - new_meta.id = new_meta.id.split('_')[0] - [new_meta, bam] - }.groupTuple(by: 0).branch{ + SAMTOOLS_SORT.out.bam + .map{ meta, bam -> + new_meta = meta.clone() // clone to avoid overriding the global meta + new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + [new_meta, bam]} // end the closure to return newly modified channel + .groupTuple(by: 0) // group them bam paths with the same [ samplename, [[bam path], [bam path], ..] ] + .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list single: it[1].size() == 1 multiple: it[1].size() > 1 - }.set{ bams } + } + .set{ bams } // create a new multi-channel named bams // TODO: If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple ) From 16cc5e90c350a9368beb714f98895a1494e56f47 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 24 Sep 2021 14:30:36 +0200 Subject: [PATCH 0055/1921] woops quick fix on commented code --- subworkflows/nf-core/mapping.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index 3719c797..e423babc 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -40,13 +40,15 @@ workflow MAPPING { new_meta = meta.clone() // clone to avoid overriding the global meta new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename [new_meta, bam]} // end the closure to return newly modified channel - .groupTuple(by: 0) // group them bam paths with the same [ samplename, [[bam path], [bam path], ..] ] + .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list single: it[1].size() == 1 multiple: it[1].size() > 1 } .set{ bams } // create a new multi-channel named bams + bams.multiple.view() + // TODO: If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) From 8b61ad2e958b5232a6764d387c2134faf7d67b2a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:42:40 +0200 Subject: [PATCH 0056/1921] add glnexus to the deepvariant workflow --- subworkflows/local/deepvariant_caller.nf | 24 ++++++++++++++++++++++-- workflows/raredisease.nf | 3 ++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 96f9ca66..008ce493 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -5,20 +5,40 @@ params.deepvariant_options = [:] include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) +include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.deepvariant_options ) workflow DEEPVARIANT_CALLER { take: bam // channel: [ val(meta), path(bam), path(bai) ] fasta // path(fasta) fai // path(fai) + sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] main: DEEPVARIANT ( bam, fasta, fai ) + def file_list = DEEPVARIANT.out.gvcf.collect{it[1]}.toList() + + //retrieve case id for glnexus and store it in a new channel called case_meta + sample + .first() + .map{ + it -> + new_sample_meta = it.clone() + new_sample_meta.id = new_sample_meta.case_id + [ [ 'id':new_sample_meta.id ] ] } + .set {case_meta} + + //Combine case meta with the list of gvcfs + ch_sample_new.mix(file_list) + .collect() + .set { ch_gvcfs } + GLNEXUS ( ch_gvcfs ) emit: - vcf = DEEPVARIANT.out.vcf - gvcf = DEEPVARIANT.out.gvcf + vcf = GLNEXUS.out.bcf // Collect versions deepvariant_version = DEEPVARIANT.out.version + glnexus_version = GLNEXUS.out.version + } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0214c1e1..c105a32a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -136,7 +136,8 @@ workflow RAREDISEASE { DEEPVARIANT_CALLER ( MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai + PREPARE_GENOME.out.fai, + INPUT_CHECK.out.sample ) ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) From c652b86fa8c6cf5413d40f38aec4be5e65aa59cc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:55:14 +0200 Subject: [PATCH 0057/1921] Fix lint --- README.md | 3 +-- subworkflows/local/deepvariant_caller.nf | 6 +++--- workflows/raredisease.nf | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e61bf69a..e8391e66 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ ## Introduction - **nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for call and score variants from WGS/WES of rare disease patients. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! @@ -32,7 +31,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 2. Map reads to reference ([`BWA mem`](http://bio-bwa.sourceforge.net/bwa.shtml), `BWA mem2`) with the option to ([`merge`](http://www.htslib.org/doc/samtools-merge.html)) 3. Mark duplicated reads ([`GATK4 MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) 4. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) - +5. Variant calling ([deepvariant](https://github.com/google/deepvariant) and [glnexus](https://github.com/dnanexus-rnd/GLnexus)) ## Quick Start 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 008ce493..65ffdc8c 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -16,12 +16,12 @@ workflow DEEPVARIANT_CALLER { main: DEEPVARIANT ( bam, fasta, fai ) - def file_list = DEEPVARIANT.out.gvcf.collect{it[1]}.toList() + def file_list = DEEPVARIANT.out.gvcf.collect{it[1]}.toList() //retrieve case id for glnexus and store it in a new channel called case_meta sample .first() - .map{ + .map{ it -> new_sample_meta = it.clone() new_sample_meta.id = new_sample_meta.case_id @@ -29,7 +29,7 @@ workflow DEEPVARIANT_CALLER { .set {case_meta} //Combine case meta with the list of gvcfs - ch_sample_new.mix(file_list) + case_meta.mix(file_list) .collect() .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c105a32a..0b4af70c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -136,7 +136,7 @@ workflow RAREDISEASE { DEEPVARIANT_CALLER ( MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, + PREPARE_GENOME.out.fai, INPUT_CHECK.out.sample ) ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) From 4b9d3b3972ab6f5640f322ddd1eb950c2031e599 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:58:18 +0200 Subject: [PATCH 0058/1921] Update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e8391e66..7a51387a 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 3. Mark duplicated reads ([`GATK4 MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) 4. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) 5. Variant calling ([deepvariant](https://github.com/google/deepvariant) and [glnexus](https://github.com/dnanexus-rnd/GLnexus)) + ## Quick Start 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) From 1619af61e14dc7a99b8516e78a0450bbe039d61f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:12:13 +0200 Subject: [PATCH 0059/1921] suggestions from review --- subworkflows/local/deepvariant_caller.nf | 2 +- subworkflows/nf-core/mapping.nf | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 65ffdc8c..3549baae 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -16,7 +16,7 @@ workflow DEEPVARIANT_CALLER { main: DEEPVARIANT ( bam, fasta, fai ) - def file_list = DEEPVARIANT.out.gvcf.collect{it[1]}.toList() + file_list = DEEPVARIANT.out.gvcf.collect{it[1]}.toList() //retrieve case id for glnexus and store it in a new channel called case_meta sample diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/mapping.nf index e423babc..c18afd8d 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/mapping.nf @@ -47,8 +47,6 @@ workflow MAPPING { } .set{ bams } // create a new multi-channel named bams - bams.multiple.view() - // TODO: If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) From 45271d970ffcef6e60ca75781ef5af020f841706 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 24 Sep 2021 16:26:34 +0200 Subject: [PATCH 0060/1921] initialized analysis_type param, Q: should it be main options or ? --- conf/modules.config | 2 +- nextflow.config | 3 +++ nextflow_schema.json | 33 ++++++++++++++++++++++++++------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 8d3421bf..9476be41 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -33,7 +33,7 @@ params { publish_files = false } 'deepvariant' { - args = '--model_type=WGS' + args = "--model_type=${params.analysis_type}" } 'picard_markduplicates' { args = '--CREATE_INDEX' diff --git a/nextflow.config b/nextflow.config index e9fc931d..9d57bcde 100644 --- a/nextflow.config +++ b/nextflow.config @@ -20,6 +20,9 @@ params { local_genomes = null save_reference = false + // Main options + analysis_type = 'WGS' + // MultiQC options multiqc_config = null multiqc_title = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 9dd2d606..5171db6b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -44,6 +44,23 @@ } } }, + "main_options": { + "title": "Main options", + "type": "object", + "fa_icon": "fas fa-user-cog", + "description": "Options used to steer the direction of the pipeline.", + "properties": { + "analysis_type": { + "type": "string", + "default": "WGS", + "description": "Specifies which analysis type for the pipeline- either 'WGS' or 'WES'. It'll mainly change the resources consumed.", + "fa_icon": "fas fa-book", + "enum": [ + "WES" + ] + } + } + }, "reference_genome_options": { "title": "Reference genome options", "type": "object", @@ -69,8 +86,8 @@ "type": "string", "format": "file-path", "help_text": "If none provided, will be generated automatically from the FASTA reference", - "description": "Path to FASTA reference index.", - "fa_icon": "fas fa-file" + "description": "Path to FASTA genome index file.", + "fa_icon": "far fa-file-code" }, "igenomes_base": { "type": "string", @@ -89,10 +106,11 @@ }, "bwamem2": { "type": "string", - "format": "file-path", - "fa_icon": "fas fa-copy", - "description": "Path to directory for pre-built bwamem2 index.", - "help_text": "> **NB** If none provided, will be generated automatically from the FASTA reference." + "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", + "hidden": true }, "save_reference": { "type": "boolean", @@ -103,8 +121,9 @@ }, "local_genomes": { "type": "string", + "format": "directory-path", "fa_icon": "fas fa-map-marker-alt", - "description": "Directory / URL base for genomes references.", + "description": "Local directory base for genomes references.", "help_text": "All files are supposed to be in the same folder defining a flat structure" } } From 814aff3f0f3914acb85347bab464cfde0b50414a Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 24 Sep 2021 17:21:30 +0200 Subject: [PATCH 0061/1921] fixed fails --- nextflow_schema.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 5171db6b..237c3711 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -56,6 +56,7 @@ "description": "Specifies which analysis type for the pipeline- either 'WGS' or 'WES'. It'll mainly change the resources consumed.", "fa_icon": "fas fa-book", "enum": [ + "WGS", "WES" ] } @@ -321,6 +322,9 @@ { "$ref": "#/definitions/input_output_options" }, + { + "$ref": "#/definitions/main_options" + }, { "$ref": "#/definitions/reference_genome_options" }, From 4088729951837c2a1b9b0adcfd66ac57ac91bed9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 27 Sep 2021 13:08:24 +0200 Subject: [PATCH 0062/1921] Code review suggestions & refactoring --- subworkflows/local/deepvariant_caller.nf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 3549baae..d0252070 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -16,7 +16,9 @@ workflow DEEPVARIANT_CALLER { main: DEEPVARIANT ( bam, fasta, fai ) - file_list = DEEPVARIANT.out.gvcf.collect{it[1]}.toList() + DEEPVARIANT.out.gvcf.collect{it[1]} + .toList() + .set { file_list } //retrieve case id for glnexus and store it in a new channel called case_meta sample @@ -28,9 +30,8 @@ workflow DEEPVARIANT_CALLER { [ [ 'id':new_sample_meta.id ] ] } .set {case_meta} - //Combine case meta with the list of gvcfs - case_meta.mix(file_list) - .collect() + //Combine case_meta with the list of gvcfs + case_meta.combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) From 928bb73b38c311aa720d8acd23363b63294fe357 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 27 Sep 2021 13:32:20 +0200 Subject: [PATCH 0063/1921] Make it pretty --- subworkflows/local/deepvariant_caller.nf | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index d0252070..a8877d13 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -9,18 +9,24 @@ include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams workflow DEEPVARIANT_CALLER { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta) - fai // path(fai) - sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] + bam // channel: [ val(meta), path(bam), path(bai) ] + sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] + fasta // path(fasta) + fai // path(fai) main: + + // + // Call variants with deepvariant and collect the output in a new channel + // DEEPVARIANT ( bam, fasta, fai ) DEEPVARIANT.out.gvcf.collect{it[1]} .toList() .set { file_list } - //retrieve case id for glnexus and store it in a new channel called case_meta + // + // Retrieve case id for glnexus and store it in a new channel called case_meta + // sample .first() .map{ @@ -30,7 +36,9 @@ workflow DEEPVARIANT_CALLER { [ [ 'id':new_sample_meta.id ] ] } .set {case_meta} - //Combine case_meta with the list of gvcfs + // + // Combine case_meta with the list of gvcfs and run GLnexus + // case_meta.combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) @@ -38,7 +46,9 @@ workflow DEEPVARIANT_CALLER { emit: vcf = GLNEXUS.out.bcf + // // Collect versions + // deepvariant_version = DEEPVARIANT.out.version glnexus_version = GLNEXUS.out.version From 7fa703f86ff706415c16509777670a6c5bc1220a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 27 Sep 2021 14:55:18 +0200 Subject: [PATCH 0064/1921] revert changes --- subworkflows/local/deepvariant_caller.nf | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index a8877d13..261648a0 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -9,24 +9,18 @@ include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams workflow DEEPVARIANT_CALLER { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] - fasta // path(fasta) - fai // path(fai) + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // path(fasta) + fai // path(fai) + sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] main: - - // - // Call variants with deepvariant and collect the output in a new channel - // DEEPVARIANT ( bam, fasta, fai ) DEEPVARIANT.out.gvcf.collect{it[1]} .toList() .set { file_list } - // - // Retrieve case id for glnexus and store it in a new channel called case_meta - // + //retrieve case id for glnexus and store it in a new channel called case_meta sample .first() .map{ @@ -36,9 +30,7 @@ workflow DEEPVARIANT_CALLER { [ [ 'id':new_sample_meta.id ] ] } .set {case_meta} - // - // Combine case_meta with the list of gvcfs and run GLnexus - // + //Combine case meta with the list of gvcfs case_meta.combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) @@ -46,9 +38,7 @@ workflow DEEPVARIANT_CALLER { emit: vcf = GLNEXUS.out.bcf - // // Collect versions - // deepvariant_version = DEEPVARIANT.out.version glnexus_version = GLNEXUS.out.version From 151aa26a8faa841d72652aabb06ae4c346e664cc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 27 Sep 2021 15:23:39 +0200 Subject: [PATCH 0065/1921] Update glnexus recipe --- subworkflows/local/deepvariant_caller.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 261648a0..3aca8bd8 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -5,7 +5,7 @@ params.deepvariant_options = [:] include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) -include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.deepvariant_options ) +include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) workflow DEEPVARIANT_CALLER { take: From 1c2f841b06b6e7ddae0c24eff11d751f4251f50a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 27 Sep 2021 15:30:11 +0200 Subject: [PATCH 0066/1921] Initiate glnexus parameters with default --- subworkflows/local/deepvariant_caller.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 3aca8bd8..2d76b92a 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -3,6 +3,7 @@ // params.deepvariant_options = [:] +params.glnexus_options = [:] include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) From d12ee58f5fc0a86ea9c45a42ebc429caaa612b40 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 28 Sep 2021 16:12:34 +0200 Subject: [PATCH 0067/1921] create a case_info channel containing case_id --- subworkflows/local/deepvariant_caller.nf | 14 +----- subworkflows/local/input_check.nf | 57 ++++++++++++++---------- workflows/raredisease.nf | 2 +- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 2d76b92a..eb607ae5 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -13,7 +13,7 @@ workflow DEEPVARIANT_CALLER { bam // channel: [ val(meta), path(bam), path(bai) ] fasta // path(fasta) fai // path(fai) - sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] + ch_case_info // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] main: DEEPVARIANT ( bam, fasta, fai ) @@ -21,18 +21,8 @@ workflow DEEPVARIANT_CALLER { .toList() .set { file_list } - //retrieve case id for glnexus and store it in a new channel called case_meta - sample - .first() - .map{ - it -> - new_sample_meta = it.clone() - new_sample_meta.id = new_sample_meta.case_id - [ [ 'id':new_sample_meta.id ] ] } - .set {case_meta} - //Combine case meta with the list of gvcfs - case_meta.combine(file_list) + ch_case_info.combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 027eec3c..b06170b7 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -1,5 +1,5 @@ // -// Check input samplesheet and get read channels +// Check input samplesheet and get read, sample, and case channels // params.options = [:] @@ -8,53 +8,64 @@ include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' addPa workflow INPUT_CHECK { take: - samplesheet // file: /path/to/samplesheet.csv + samplesheet // file: /path/to/samplesheet.csv main: - SAMPLESHEET_CHECK ( samplesheet ) - .splitCsv ( header:true, sep:',' ) - .set { sheet } + SAMPLESHEET_CHECK ( samplesheet ) + .splitCsv ( header:true, sep:',' ) + .set { sheet } - reads = sheet.map { create_fastq_channels(it) } - sample = sheet.map { create_sample_channels(it) } + ch_case_info = sheet.first() + .map { create_case_channel(it) } + reads = sheet.map { create_fastq_channel(it) } + samples = sheet.map { create_samples_channel(it) } emit: - reads // channel: [ val(meta), [ reads ] ] - sample // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] + ch_case_info // channel: [ case_id ] + reads // channel: [ val(meta), [ reads ] ] + samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def create_fastq_channels(LinkedHashMap row) { +def create_fastq_channel(LinkedHashMap row) { + // create meta map def meta = [:] meta.id = row.sample meta.single_end = row.single_end.toBoolean() - // TODO: add read group to the meta map - - def array = [] + // add path(s) of the fastq file(s) to the meta map + def fastq_file_meta = [] if (!file(row.fastq_1).exists()) { exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" } if (meta.single_end) { - array = [ meta, [ file(row.fastq_1) ] ] + fastq_file_meta = [ meta, [ file(row.fastq_1) ] ] } else { if (!file(row.fastq_2).exists()) { exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" } - array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + fastq_file_meta = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] } - return array + return fastq_file_meta } // Function to get a list of metadata (e.g. pedigree, case id) from the sample; [ meta ] -def create_sample_channels(LinkedHashMap row) { - def sample = [:] - sample.id = row.sample - sample.gender = row.gender +def create_samples_channel(LinkedHashMap row) { + def sample = [:] + sample.id = row.sample + sample.gender = row.gender sample.phenotype = row.phenotype - sample.maternal = row.maternal_id - sample.paternal = row.paternal_id - sample.case_id = row.case_id + sample.maternal = row.maternal_id + sample.paternal = row.paternal_id + sample.case_id = row.case_id return sample } + +// 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 + + return case_info +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0b4af70c..1ec3da87 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -137,7 +137,7 @@ workflow RAREDISEASE { MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, - INPUT_CHECK.out.sample + INPUT_CHECK.out.ch_case_info ) ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) From b136b2b1eb289886ae70298651385c6abff5e3ac Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 29 Sep 2021 16:53:19 +0200 Subject: [PATCH 0068/1921] update comment --- subworkflows/local/deepvariant_caller.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index eb607ae5..d308d40f 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -10,10 +10,10 @@ include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams workflow DEEPVARIANT_CALLER { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta) - fai // path(fai) - ch_case_info // channel: [ sample, sex, phenotype, paternal_id, maternal_id, case_id ] + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // path(fasta) + fai // path(fai) + ch_case_info // channel: [ case_id ] main: DEEPVARIANT ( bam, fasta, fai ) From 7e0940175915c29ed246a502d3d7a4a7bbca6f8e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 30 Sep 2021 13:12:05 +0200 Subject: [PATCH 0069/1921] first commit --- nextflow.config | 4 ++- nextflow_schema.json | 28 ++++++++++++++++--- .../nf-core/{mapping.nf => align_bwamem2.nf} | 3 +- workflows/raredisease.nf | 20 ++++++------- 4 files changed, 38 insertions(+), 17 deletions(-) rename subworkflows/nf-core/{mapping.nf => align_bwamem2.nf} (98%) diff --git a/nextflow.config b/nextflow.config index e9fc931d..6ffb379e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -9,7 +9,6 @@ // Global default params, used in configs params { - // TODO nf-core: Specify your pipeline's command line flags // Input options input = null @@ -20,6 +19,9 @@ params { local_genomes = null save_reference = false + // Alignment + aligner = 'bwamem2' + // MultiQC options multiqc_config = null multiqc_title = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 9dd2d606..b9bf8523 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -87,12 +87,12 @@ "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`." }, - "bwamem2": { + "bwamem2_index": { "type": "string", - "format": "file-path", - "fa_icon": "fas fa-copy", + "format": "path", + "fa_icon": "fas fa-bezier-curve", "description": "Path to directory for pre-built bwamem2 index.", - "help_text": "> **NB** If none provided, will be generated automatically from the FASTA reference." + "help_text": "If none provided, will be generated automatically from the FASTA reference." }, "save_reference": { "type": "boolean", @@ -109,6 +109,23 @@ } } }, + "alignment_options": { + "title": "Alignment options", + "type": "object", + "fa_icon": "fas fa-map-signs", + "description": "Options to adjust parameters and filtering criteria for read alignments.", + "properties": { + "aligner": { + "type": "string", + "default": "bwamem2", + "description": "Specifies the alignment algorithm to use - available options are 'bwamem2'.", + "fa_icon": "fas fa-map-signs", + "enum": [ + "bwamem2" + ] + } + } + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -305,6 +322,9 @@ { "$ref": "#/definitions/reference_genome_options" }, + { + "$ref": "#/definitions/alignment_options" + }, { "$ref": "#/definitions/institutional_config_options" }, diff --git a/subworkflows/nf-core/mapping.nf b/subworkflows/nf-core/align_bwamem2.nf similarity index 98% rename from subworkflows/nf-core/mapping.nf rename to subworkflows/nf-core/align_bwamem2.nf index c18afd8d..0e97bc95 100644 --- a/subworkflows/nf-core/mapping.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -8,7 +8,6 @@ params.samtools_sort_options = [:] params.samtools_stats_options = [:] params.samtools_merge_options = [:] params.markduplicates_options = [:] -params.samtools_idx_md_options = [:] include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) @@ -18,7 +17,7 @@ include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/ma include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' addParams(options: params.markduplicates_options ) -workflow MAPPING { +workflow ALIGN_BWAMEM2 { take: reads_input // channel: [ val(meta), reads_input ] index // channel: /path/to/bwamem2/index/ diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0b4af70c..18ebdd67 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -9,7 +9,6 @@ def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) // Validate input parameters WorkflowRaredisease.initialise(params, log) -// 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, @@ -78,15 +77,14 @@ include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams samtools_faidx_options: modules['samtools_faidx'] ) -include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( +include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], samtools_idx_options: modules['samtools_index'], samtools_sort_options: modules['samtools_sort'], samtools_stats_options: modules['samtools_stats'], samtools_merge_options: modules['samtools_merge'], - markduplicates_options: modules['picard_markduplicates'], - samtools_idx_md_options: modules['samtools_index_md'], + markduplicates_options: modules['picard_markduplicates'] ) @@ -125,16 +123,18 @@ workflow RAREDISEASE { // STEP 0: PREPARE GENOME REFERENCES AND INDICES. PREPARE_GENOME ( params.fasta ) - // STEP 1: MAPPING READS, FETCH STATS, AND MERGE. - MAPPING ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) - ch_software_versions = ch_software_versions.mix(MAPPING.out.bwamem2_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(MAPPING.out.picard_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(MAPPING.out.samtools_version.ifEmpty(null)) + // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. + if (params.aligner == 'bwamem2') { + ALIGN_BWAMEM2 ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) + ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.bwamem2_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.picard_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.samtools_version.ifEmpty(null)) + } // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. DEEPVARIANT_CALLER ( - MAPPING.out.marked_bam.join(MAPPING.out.marked_bai), + ALIGN_BWAMEM2.out.marked_bam.join(ALIGN_BWAMEM2.out.marked_bai), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.sample From 0ad3e8e2e0e222d0bcc66fc4cdb6c334c0730759 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 30 Sep 2021 13:18:48 +0200 Subject: [PATCH 0070/1921] update bwamem2 param names --- main.nf | 6 +++--- subworkflows/local/prepare_genome.nf | 2 +- workflows/raredisease.nf | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/main.nf b/main.nf index 25ee266b..638f8a87 100644 --- a/main.nf +++ b/main.nf @@ -17,9 +17,9 @@ nextflow.enable.dsl = 2 ======================================================================================== */ -params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') -params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') /* ======================================================================================== diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 59fffed7..67f18d6f 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -18,7 +18,7 @@ workflow PREPARE_GENOME { ch_bwamem2_version = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required - if ( params.bwamem2 && file(params.bwamem2, checkIfExists:true) ) { + if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { ch_bwamem2_index = file(params.bwamem2) } else { ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 18ebdd67..10e0aaba 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -12,7 +12,7 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2, params.fasta_fai + params.bwamem2_index, params.fasta_fai ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } From 423b879d7fe1023a1c780b84beb1be3e1826d07b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 30 Sep 2021 19:04:19 +0200 Subject: [PATCH 0071/1921] add bcftools norm to deepvar subworkflow --- conf/modules.config | 47 ++++++----- modules.json | 3 + .../modules/bcftools/norm/functions.nf | 78 +++++++++++++++++++ modules/nf-core/modules/bcftools/norm/main.nf | 45 +++++++++++ .../nf-core/modules/bcftools/norm/meta.yml | 45 +++++++++++ subworkflows/local/deepvariant_caller.nf | 8 +- workflows/raredisease.nf | 14 +++- 7 files changed, 217 insertions(+), 23 deletions(-) create mode 100644 modules/nf-core/modules/bcftools/norm/functions.nf create mode 100644 modules/nf-core/modules/bcftools/norm/main.nf create mode 100644 modules/nf-core/modules/bcftools/norm/meta.yml diff --git a/conf/modules.config b/conf/modules.config index b00de2c9..12360986 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,46 +22,53 @@ params { modules { - 'fastqc' { - args = '--quiet' + 'bcftools_norm_split_multiallelics' { + args = '--output-type z --multiallelics -both' + } + 'bcftools_norm_rm_duplicates' { + args = '--output-type z --rm-dup none' } 'bwa_mem2_index' { - publish_dir = 'references' + publish_dir = 'references' } 'bwa_mem2_mem' { - args = '-M -K 100000000' - publish_files = false + args = '-M -K 100000000' + publish_files = false } 'deepvariant' { - args = '--model_type=WGS' + args = '--model_type=WGS' + suffix = '_deepvar' + } + 'fastqc' { + args = '--quiet' } 'glnexus' { - args = '--config DeepVariant_unfiltered' - publish_dir = 'glnexus' + args = '--config DeepVariant_unfiltered' + publish_dir = 'glnexus' + } + 'multiqc' { + args = '' } 'picard_markduplicates' { - args = '--CREATE_INDEX' - suffix = '.sorted.md' - publish_dir = 'markduplicates' + args = '--CREATE_INDEX' + suffix = '.sorted.md' + publish_dir = 'markduplicates' } 'samtools_faidx' { - publish_dir = 'references' + publish_dir = 'references' } 'samtools_index' { - publish_files = false + publish_files = false } 'samtools_merge' { - publish_files = false + publish_files = false } 'samtools_sort' { - suffix = '.sorted' - publish_files = false + suffix = '.sorted' + publish_files = false } 'samtools_stats' { - args = '-s --remove-overlaps' - } - 'multiqc' { - args = '' + args = '-s --remove-overlaps' } } } diff --git a/modules.json b/modules.json index 45fd3a5f..6b7fb04d 100644 --- a/modules.json +++ b/modules.json @@ -3,6 +3,9 @@ "homePage": "https://github.com/nf-core/raredisease", "repos": { "nf-core/modules": { + "bcftools/norm": { + "git_sha": "906577873b66253b0d244871bfec2eeeaff73053" + }, "bwamem2/index": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/modules/nf-core/modules/bcftools/norm/functions.nf b/modules/nf-core/modules/bcftools/norm/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/bcftools/norm/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/modules/bcftools/norm/main.nf new file mode 100644 index 00000000..454fc1d2 --- /dev/null +++ b/modules/nf-core/modules/bcftools/norm/main.nf @@ -0,0 +1,45 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BCFTOOLS_NORM { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bcftools=1.13" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bcftools:1.13--h3a49de5_0" + } else { + container "quay.io/biocontainers/bcftools:1.13--h3a49de5_0" + } + + input: + tuple val(meta), path(vcf) + path(fasta) + + output: + tuple val(meta), path("*.gz") , emit: vcf + path "versions.yml" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bcftools norm \\ + --fasta-ref ${fasta} \\ + --output ${prefix}.vcf.gz \\ + $options.args \\ + --threads $task.cpus \\ + ${vcf} + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bcftools/norm/meta.yml b/modules/nf-core/modules/bcftools/norm/meta.yml new file mode 100644 index 00000000..f2534452 --- /dev/null +++ b/modules/nf-core/modules/bcftools/norm/meta.yml @@ -0,0 +1,45 @@ +name: bcftools_norm +description: Normalize VCF file +keywords: + - normalize + - norm + - variant calling + - VCF +tools: + - norm: + description: | + Normalize VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be normalized + e.g. 'file1.vcf' + - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF normalized output file + pattern: "*.{vcf.gz}" + - version: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@abhi18av" diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 2d76b92a..9afff7eb 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -2,9 +2,13 @@ // A variant caller workflow for deepvariant // +params.split_multiallelics_options = [:] +params.rm_duplicates_options = [:] params.deepvariant_options = [:] params.glnexus_options = [:] +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: params.split_multiallelics_options ) +include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: params.rm_duplicates_options ) include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) @@ -35,9 +39,11 @@ workflow DEEPVARIANT_CALLER { case_meta.combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) + SPLIT_MULTIALLELICS (GLNEXUS.out.bcf, fasta) + REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) emit: - vcf = GLNEXUS.out.bcf + vcf = REMOVE_DUPLICATES.out.vcf // Collect versions deepvariant_version = DEEPVARIANT.out.version diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0b4af70c..b82c2237 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -93,8 +93,18 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( // // SUBWORKFLOW: Consists of mix/local modules // - -include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'] ) +def split_multiallelics_deepvar_sub = modules['bcftools_norm_split_multiallelics'].clone() +split_multiallelics_deepvar_sub.publish_dir = "glnexus/" +split_multiallelics_deepvar_sub.suffix = "_split" + +def rm_duplicates_deepvar_sub = modules['bcftools_norm_rm_duplicates'].clone() +rm_duplicates_deepvar_sub.publish_dir = "glnexus/" +rm_duplicates_deepvar_sub.suffix = "_split_rmdup" + +include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'], + glnexus_options: modules['glnexus'], + rm_duplicates_options: rm_duplicates_deepvar_sub, + split_multiallelics_options: split_multiallelics_deepvar_sub ) /* ======================================================================================== From 863d203a2db3c1e8b6af318256e3a098ba91af0b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 30 Sep 2021 19:09:44 +0200 Subject: [PATCH 0072/1921] fix padding --- conf/modules.config | 2 +- workflows/raredisease.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 12360986..9ef3dc8a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -25,7 +25,7 @@ params { 'bcftools_norm_split_multiallelics' { args = '--output-type z --multiallelics -both' } - 'bcftools_norm_rm_duplicates' { + 'bcftools_norm_rm_duplicates' { args = '--output-type z --rm-dup none' } 'bwa_mem2_index' { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b82c2237..f142b9ba 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -102,9 +102,9 @@ rm_duplicates_deepvar_sub.publish_dir = "glnexus/" rm_duplicates_deepvar_sub.suffix = "_split_rmdup" include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'], - glnexus_options: modules['glnexus'], - rm_duplicates_options: rm_duplicates_deepvar_sub, - split_multiallelics_options: split_multiallelics_deepvar_sub ) + glnexus_options: modules['glnexus'], + rm_duplicates_options: rm_duplicates_deepvar_sub, + split_multiallelics_options: split_multiallelics_deepvar_sub ) /* ======================================================================================== From 2b1610fa80f575fbf730dbc901b1f62e4a06ffbc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 30 Sep 2021 19:47:19 +0200 Subject: [PATCH 0073/1921] update modules --- modules.json | 22 ++++---- .../modules/bwamem2/index/functions.nf | 54 +++++++++++-------- modules/nf-core/modules/bwamem2/index/main.nf | 15 ++++-- .../nf-core/modules/bwamem2/index/meta.yml | 2 +- .../nf-core/modules/bwamem2/mem/functions.nf | 54 +++++++++++-------- modules/nf-core/modules/bwamem2/mem/main.nf | 18 ++++--- modules/nf-core/modules/bwamem2/mem/meta.yml | 2 +- modules/nf-core/modules/fastqc/functions.nf | 54 +++++++++++-------- modules/nf-core/modules/fastqc/main.nf | 17 ++++-- modules/nf-core/modules/fastqc/meta.yml | 2 +- modules/nf-core/modules/glnexus/functions.nf | 54 +++++++++++-------- modules/nf-core/modules/glnexus/main.nf | 10 ++-- modules/nf-core/modules/glnexus/meta.yml | 2 +- modules/nf-core/modules/multiqc/functions.nf | 54 +++++++++++-------- modules/nf-core/modules/multiqc/main.nf | 10 ++-- modules/nf-core/modules/multiqc/meta.yml | 2 +- .../picard/markduplicates/functions.nf | 54 +++++++++++-------- .../modules/picard/markduplicates/main.nf | 9 ++-- .../modules/picard/markduplicates/meta.yml | 2 +- .../modules/samtools/faidx/functions.nf | 54 +++++++++++-------- .../nf-core/modules/samtools/faidx/main.nf | 11 ++-- .../nf-core/modules/samtools/faidx/meta.yml | 2 +- .../modules/samtools/index/functions.nf | 54 +++++++++++-------- .../nf-core/modules/samtools/index/main.nf | 9 ++-- .../nf-core/modules/samtools/index/meta.yml | 2 +- .../modules/samtools/merge/functions.nf | 54 +++++++++++-------- .../nf-core/modules/samtools/merge/main.nf | 9 ++-- .../nf-core/modules/samtools/merge/meta.yml | 2 +- .../modules/samtools/sort/functions.nf | 54 +++++++++++-------- modules/nf-core/modules/samtools/sort/main.nf | 9 ++-- .../nf-core/modules/samtools/sort/meta.yml | 2 +- .../modules/samtools/stats/functions.nf | 54 +++++++++++-------- .../nf-core/modules/samtools/stats/main.nf | 9 ++-- .../nf-core/modules/samtools/stats/meta.yml | 2 +- 34 files changed, 459 insertions(+), 305 deletions(-) diff --git a/modules.json b/modules.json index 45fd3a5f..1ea954b0 100644 --- a/modules.json +++ b/modules.json @@ -4,37 +4,37 @@ "repos": { "nf-core/modules": { "bwamem2/index": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" }, "bwamem2/mem": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "216dc8c984bfc65a5865f9c7b2e0c1bf56c9a973" }, "fastqc": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "ab67a1d41b63bf52fd7c147f7f8f6e8d167590b5" }, "glnexus": { - "git_sha": "25943a4c23c6ab585e740599df246b66078e966a" + "git_sha": "5c463ca6b46b0a452253f5ae5ce7b8253674cff0" }, "multiqc": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "ab67a1d41b63bf52fd7c147f7f8f6e8d167590b5" }, "picard/markduplicates": { - "git_sha": "b2a6f5409efa6eb065c8186c606e68ff8004ba51" + "git_sha": "e971f538a99bfa190f36f9303bede205e00b90a4" }, "samtools/faidx": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "9c31cf1566fa4f8660ac3973e02fe0caebe86235" }, "samtools/index": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" }, "samtools/merge": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" }, "samtools/sort": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" }, "samtools/stats": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" } } } diff --git a/modules/nf-core/modules/bwamem2/index/functions.nf b/modules/nf-core/modules/bwamem2/index/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/bwamem2/index/functions.nf +++ b/modules/nf-core/modules/bwamem2/index/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/modules/bwamem2/index/main.nf index b667f266..9274ebe8 100644 --- a/modules/nf-core/modules/bwamem2/index/main.nf +++ b/modules/nf-core/modules/bwamem2/index/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -23,13 +23,20 @@ process BWAMEM2_INDEX { output: path "bwamem2" , emit: index - path "*.version.txt", emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) """ mkdir bwamem2 - bwa-mem2 index $options.args $fasta -p bwamem2/${fasta} - echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt + bwa-mem2 \\ + index \\ + $options.args \\ + $fasta -p bwamem2/${fasta} + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/bwamem2/index/meta.yml b/modules/nf-core/modules/bwamem2/index/meta.yml index 9d717f73..ee84ccfc 100644 --- a/modules/nf-core/modules/bwamem2/index/meta.yml +++ b/modules/nf-core/modules/bwamem2/index/meta.yml @@ -24,6 +24,6 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@maxulysse" diff --git a/modules/nf-core/modules/bwamem2/mem/functions.nf b/modules/nf-core/modules/bwamem2/mem/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/bwamem2/mem/functions.nf +++ b/modules/nf-core/modules/bwamem2/mem/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index 5d0ff617..ea584a39 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -24,24 +24,28 @@ process BWAMEM2_MEM { output: tuple val(meta), path("*.bam"), emit: bam - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: - def split_cpus = Math.floor(task.cpus/2) def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` - bwa-mem2 mem \\ + bwa-mem2 \\ + mem \\ $options.args \\ $read_group \\ - -t ${split_cpus} \\ + -t $task.cpus \\ \$INDEX \\ $reads \\ - | samtools view $options.args2 -@ ${split_cpus} -bhS -o ${prefix}.bam - + | samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - - echo \$(bwa-mem2 version 2>&1) > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/bwamem2/mem/meta.yml b/modules/nf-core/modules/bwamem2/mem/meta.yml index 2fc7713d..434fc7ca 100644 --- a/modules/nf-core/modules/bwamem2/mem/meta.yml +++ b/modules/nf-core/modules/bwamem2/mem/meta.yml @@ -39,6 +39,6 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@maxulysse" diff --git a/modules/nf-core/modules/fastqc/functions.nf b/modules/nf-core/modules/fastqc/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/fastqc/functions.nf +++ b/modules/nf-core/modules/fastqc/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index 39c327b2..88bfbf5b 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -24,24 +24,31 @@ process FASTQC { output: tuple val(meta), path("*.html"), emit: html tuple val(meta), path("*.zip") , emit: zip - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: // Add soft-links to original FastQs for consistent naming in pipeline - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS """ } else { """ [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS """ } } diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml index 8eb9953d..48031356 100644 --- a/modules/nf-core/modules/fastqc/meta.yml +++ b/modules/nf-core/modules/fastqc/meta.yml @@ -43,7 +43,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/modules/glnexus/functions.nf b/modules/nf-core/modules/glnexus/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/glnexus/functions.nf +++ b/modules/nf-core/modules/glnexus/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/glnexus/main.nf b/modules/nf-core/modules/glnexus/main.nf index dadb9d60..5cff088b 100644 --- a/modules/nf-core/modules/glnexus/main.nf +++ b/modules/nf-core/modules/glnexus/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -23,7 +23,7 @@ process GLNEXUS { output: tuple val(meta), path("*.bcf"), emit: bcf - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) @@ -44,6 +44,10 @@ process GLNEXUS { $options.args \\ ${input.join(' ')} \\ > ${prefix}.bcf - echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release //; s/ .*\$//' > ${software}.version.txt + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$( echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release v//; s/ .*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/glnexus/meta.yml b/modules/nf-core/modules/glnexus/meta.yml index f64a812e..fd1a407d 100644 --- a/modules/nf-core/modules/glnexus/meta.yml +++ b/modules/nf-core/modules/glnexus/meta.yml @@ -27,7 +27,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" - bcf: type: file description: merged BCF file diff --git a/modules/nf-core/modules/multiqc/functions.nf b/modules/nf-core/modules/multiqc/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/multiqc/functions.nf +++ b/modules/nf-core/modules/multiqc/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index 8b6d6f0c..2e7ad932 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -24,12 +24,16 @@ process MULTIQC { path "*multiqc_report.html", emit: report path "*_data" , emit: data path "*_plots" , optional:true, emit: plots - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) """ multiqc -f $options.args . - multiqc --version | sed -e "s/multiqc, version //g" > ${software}.version.txt + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS """ } diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml index 532a8bb1..2d99ec0d 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -32,7 +32,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/modules/picard/markduplicates/functions.nf b/modules/nf-core/modules/picard/markduplicates/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/picard/markduplicates/functions.nf +++ b/modules/nf-core/modules/picard/markduplicates/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index ac829515..dc8d460b 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -25,7 +25,7 @@ process PICARD_MARKDUPLICATES { tuple val(meta), path("*.bam") , emit: bam tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.metrics.txt"), emit: metrics - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) @@ -45,6 +45,9 @@ process PICARD_MARKDUPLICATES { -O ${prefix}.bam \\ -M ${prefix}.MarkDuplicates.metrics.txt - echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d: > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS """ } diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index b651b3a0..db72b5c5 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -45,7 +45,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" - "@projectoriented" diff --git a/modules/nf-core/modules/samtools/faidx/functions.nf b/modules/nf-core/modules/samtools/faidx/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/samtools/faidx/functions.nf +++ b/modules/nf-core/modules/samtools/faidx/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf index a89ff2bb..cdbae99b 100644 --- a/modules/nf-core/modules/samtools/faidx/main.nf +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -22,13 +22,16 @@ process SAMTOOLS_FAIDX { path fasta output: - path "*.fai" , emit: fai - path "*.version.txt", emit: version + path "*.fai" , emit: fai + path "versions.yml", emit: version script: def software = getSoftwareName(task.process) """ samtools faidx $fasta - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/modules/samtools/faidx/meta.yml index f92234d0..77d21861 100644 --- a/modules/nf-core/modules/samtools/faidx/meta.yml +++ b/modules/nf-core/modules/samtools/faidx/meta.yml @@ -25,7 +25,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/modules/samtools/index/functions.nf b/modules/nf-core/modules/samtools/index/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/samtools/index/functions.nf +++ b/modules/nf-core/modules/samtools/index/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index e1966fb3..c2ba4de7 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -24,12 +24,15 @@ process SAMTOOLS_INDEX { output: tuple val(meta), path("*.bai"), optional:true, emit: bai tuple val(meta), path("*.csi"), optional:true, emit: csi - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) """ samtools index $options.args $bam - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml index 5d076e3b..6f7dc887 100644 --- a/modules/nf-core/modules/samtools/index/meta.yml +++ b/modules/nf-core/modules/samtools/index/meta.yml @@ -41,7 +41,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/modules/samtools/merge/functions.nf b/modules/nf-core/modules/samtools/merge/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/samtools/merge/functions.nf +++ b/modules/nf-core/modules/samtools/merge/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf index 0182b9fd..ec574105 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -23,13 +23,16 @@ process SAMTOOLS_MERGE { output: tuple val(meta), path("${prefix}.bam"), emit: bam - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ samtools merge ${prefix}.bam $bams - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/nf-core/modules/samtools/merge/meta.yml index 9092f22e..c5f15a14 100644 --- a/modules/nf-core/modules/samtools/merge/meta.yml +++ b/modules/nf-core/modules/samtools/merge/meta.yml @@ -37,7 +37,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" - "@yuukiiwa " diff --git a/modules/nf-core/modules/samtools/sort/functions.nf b/modules/nf-core/modules/samtools/sort/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/samtools/sort/functions.nf +++ b/modules/nf-core/modules/samtools/sort/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf index 0a6b7048..edd558bf 100644 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -23,13 +23,16 @@ process SAMTOOLS_SORT { output: tuple val(meta), path("*.bam"), emit: bam - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ samtools sort $options.args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml index 704e8c1f..d4f70a8e 100644 --- a/modules/nf-core/modules/samtools/sort/meta.yml +++ b/modules/nf-core/modules/samtools/sort/meta.yml @@ -37,7 +37,7 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/modules/samtools/stats/functions.nf b/modules/nf-core/modules/samtools/stats/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/samtools/stats/functions.nf +++ b/modules/nf-core/modules/samtools/stats/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index 8c72d725..823b5f31 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -23,12 +23,15 @@ process SAMTOOLS_STATS { output: tuple val(meta), path("*.stats"), emit: stats - path "*.version.txt" , emit: version + path "versions.yml" , emit: version script: def software = getSoftwareName(task.process) """ samtools stats $bam > ${bam}.stats - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/stats/meta.yml b/modules/nf-core/modules/samtools/stats/meta.yml index b549ff5c..1c7dcc8b 100644 --- a/modules/nf-core/modules/samtools/stats/meta.yml +++ b/modules/nf-core/modules/samtools/stats/meta.yml @@ -42,6 +42,6 @@ output: - version: type: file description: File containing software version - pattern: "*.{version.txt}" + pattern: "versions.yml" authors: - "@drpatelh" From 52ba1207ac02ed74f6909e3bef14a61110f659af Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 30 Sep 2021 19:09:44 +0200 Subject: [PATCH 0074/1921] fix padding --- conf/modules.config | 2 +- workflows/raredisease.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 12360986..9ef3dc8a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -25,7 +25,7 @@ params { 'bcftools_norm_split_multiallelics' { args = '--output-type z --multiallelics -both' } - 'bcftools_norm_rm_duplicates' { + 'bcftools_norm_rm_duplicates' { args = '--output-type z --rm-dup none' } 'bwa_mem2_index' { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b82c2237..f142b9ba 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -102,9 +102,9 @@ rm_duplicates_deepvar_sub.publish_dir = "glnexus/" rm_duplicates_deepvar_sub.suffix = "_split_rmdup" include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'], - glnexus_options: modules['glnexus'], - rm_duplicates_options: rm_duplicates_deepvar_sub, - split_multiallelics_options: split_multiallelics_deepvar_sub ) + glnexus_options: modules['glnexus'], + rm_duplicates_options: rm_duplicates_deepvar_sub, + split_multiallelics_options: split_multiallelics_deepvar_sub ) /* ======================================================================================== From ac1d7bc29a670c1e68a7a7908b9a8f32c8ad600c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Oct 2021 11:30:36 +0200 Subject: [PATCH 0075/1921] move clone to subworkflow --- conf/modules.config | 2 +- subworkflows/local/deepvariant_caller.nf | 12 ++++++++++-- workflows/raredisease.nf | 11 ++--------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9ef3dc8a..69c4bf0a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -44,7 +44,7 @@ params { } 'glnexus' { args = '--config DeepVariant_unfiltered' - publish_dir = 'glnexus' + publish_files = 'false' } 'multiqc' { args = '' diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 9afff7eb..ecb4285b 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -7,8 +7,16 @@ params.rm_duplicates_options = [:] params.deepvariant_options = [:] params.glnexus_options = [:] -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: params.split_multiallelics_options ) -include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: params.rm_duplicates_options ) +def split_multiallelics_glnexus = params.split_multiallelics_options.clone() +split_multiallelics_glnexus.publish_files = "false" + +def rm_duplicates_glnexus = params.rm_duplicates_options.clone() +rm_duplicates_glnexus.publish_dir = "glnexus/" +rm_duplicates_glnexus.suffix = "_split_rmdup" + + +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_glnexus ) +include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_glnexus ) include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f142b9ba..9f8a4daf 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -93,18 +93,11 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( // // SUBWORKFLOW: Consists of mix/local modules // -def split_multiallelics_deepvar_sub = modules['bcftools_norm_split_multiallelics'].clone() -split_multiallelics_deepvar_sub.publish_dir = "glnexus/" -split_multiallelics_deepvar_sub.suffix = "_split" - -def rm_duplicates_deepvar_sub = modules['bcftools_norm_rm_duplicates'].clone() -rm_duplicates_deepvar_sub.publish_dir = "glnexus/" -rm_duplicates_deepvar_sub.suffix = "_split_rmdup" include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'], glnexus_options: modules['glnexus'], - rm_duplicates_options: rm_duplicates_deepvar_sub, - split_multiallelics_options: split_multiallelics_deepvar_sub ) + rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], + split_multiallelics_options: modules['bcftools_norm_split_multiallelics'] ) /* ======================================================================================== From e6e5c59aaf2f8bf2904d51493fde40fedaf1cb71 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Oct 2021 14:32:58 +0200 Subject: [PATCH 0076/1921] revert changes --- subworkflows/local/deepvariant_caller.nf | 32 ++++++++++----------- subworkflows/local/input_check.nf | 36 ++++++++++++------------ 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index d308d40f..e543467a 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -10,27 +10,27 @@ include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams workflow DEEPVARIANT_CALLER { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta) - fai // path(fai) - ch_case_info // channel: [ case_id ] + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // path(fasta + fai // path(fai) + ch_case_info // channel: [ case_id ] main: - DEEPVARIANT ( bam, fasta, fai ) - DEEPVARIANT.out.gvcf.collect{it[1]} - .toList() - .set { file_list } + DEEPVARIANT ( bam, fasta, fai ) + DEEPVARIANT.out.gvcf.collect{it[1]} + .toList() + .set { file_list } - //Combine case meta with the list of gvcfs - ch_case_info.combine(file_list) - .set { ch_gvcfs } - GLNEXUS ( ch_gvcfs ) + //Combine case meta with the list of gvcfs + ch_case_info.combine(file_list) + .set { ch_gvcfs } + GLNEXUS ( ch_gvcfs ) emit: - vcf = GLNEXUS.out.bcf + vcf = GLNEXUS.out.bcf - // Collect versions - deepvariant_version = DEEPVARIANT.out.version - glnexus_version = GLNEXUS.out.version + // Collect versions + deepvariant_version = DEEPVARIANT.out.version + glnexus_version = GLNEXUS.out.version } diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index b06170b7..b6ae1d38 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -8,45 +8,45 @@ include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' addPa workflow INPUT_CHECK { take: - samplesheet // file: /path/to/samplesheet.csv + samplesheet // file: /path/to/samplesheet.csv main: - SAMPLESHEET_CHECK ( samplesheet ) - .splitCsv ( header:true, sep:',' ) - .set { sheet } + SAMPLESHEET_CHECK ( samplesheet ) + .splitCsv ( header:true, sep:',' ) + .set { sheet } - ch_case_info = sheet.first() - .map { create_case_channel(it) } - reads = sheet.map { create_fastq_channel(it) } - samples = sheet.map { create_samples_channel(it) } + ch_case_info = sheet.first() + .map { create_case_channel(it) } + reads = sheet.map { create_fastq_channel(it) } + samples = sheet.map { create_samples_channel(it) } emit: - ch_case_info // channel: [ case_id ] - reads // channel: [ val(meta), [ reads ] ] - samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] + ch_case_info // channel: [ case_id ] + reads // channel: [ val(meta), [ reads ] ] + samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def create_fastq_channel(LinkedHashMap row) { - // create meta map +def create_fastq_channels(LinkedHashMap row) { def meta = [:] meta.id = row.sample meta.single_end = row.single_end.toBoolean() - // add path(s) of the fastq file(s) to the meta map - def fastq_file_meta = [] + // TODO: add read group to the meta map + + def array = [] if (!file(row.fastq_1).exists()) { exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" } if (meta.single_end) { - fastq_file_meta = [ meta, [ file(row.fastq_1) ] ] + array = [ meta, [ file(row.fastq_1) ] ] } else { if (!file(row.fastq_2).exists()) { exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" } - fastq_file_meta = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] } - return fastq_file_meta + return array } // Function to get a list of metadata (e.g. pedigree, case id) from the sample; [ meta ] From 569974269633ec887b8491b2afbc7523febf8f60 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Oct 2021 14:51:09 +0200 Subject: [PATCH 0077/1921] fix typo --- subworkflows/local/input_check.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index b6ae1d38..2db44ce7 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -17,7 +17,7 @@ workflow INPUT_CHECK { ch_case_info = sheet.first() .map { create_case_channel(it) } - reads = sheet.map { create_fastq_channel(it) } + reads = sheet.map { create_fastq_channels(it) } samples = sheet.map { create_samples_channel(it) } emit: From faa0ef2711766f0bab71cbb89cc3a3a70b0ceda9 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 1 Oct 2021 15:42:15 +0200 Subject: [PATCH 0078/1921] applying suggestions --- subworkflows/local/prepare_genome.nf | 13 ++++++++----- workflows/raredisease.nf | 13 ++++++++++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 67f18d6f..167e4183 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -18,13 +18,16 @@ workflow PREPARE_GENOME { ch_bwamem2_version = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required - if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { - ch_bwamem2_index = file(params.bwamem2) - } else { - ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index - ch_bwamem2_version = BWAMEM2_INDEX.out.version + if ( params.aligner == 'bwamem2' ) { + if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { + ch_bwamem2_index = file(params.bwamem2) + } else { + ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index + ch_bwamem2_version = BWAMEM2_INDEX.out.version + } } + ch_samtools_version = Channel.empty() if ( params.fasta_fai ) { ch_fai = file(params.fasta_fai) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 10e0aaba..2550a847 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -125,7 +125,14 @@ workflow RAREDISEASE { // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { - ALIGN_BWAMEM2 ( INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) + ALIGN_BWAMEM2 ( + INPUT_CHECK.out.reads, + PREPARE_GENOME.out.bwamem2_index + ) + + ch_bwamem2_marked_bam = ALIGN_BWAMEM2.out.marked_bam + ch_bwamem2_marked_bai = ALIGN_BWAMEM2.out.marked_bai + ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.picard_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.samtools_version.ifEmpty(null)) @@ -134,11 +141,11 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. DEEPVARIANT_CALLER ( - ALIGN_BWAMEM2.out.marked_bam.join(ALIGN_BWAMEM2.out.marked_bai), + ch_bwamem2_marked_bam.join(ch_bwamem2_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.sample - ) + ) ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) // From 64a6e5d53dff7b8b26674b901ccf6ec358a560a7 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 1 Oct 2021 15:44:07 +0200 Subject: [PATCH 0079/1921] cast away empty line --- subworkflows/local/prepare_genome.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 167e4183..8401657c 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -27,7 +27,6 @@ workflow PREPARE_GENOME { } } - ch_samtools_version = Channel.empty() if ( params.fasta_fai ) { ch_fai = file(params.fasta_fai) From 7e13e35632cce0efd32d64b0bef383ffdb6ef953 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Oct 2021 15:49:03 +0200 Subject: [PATCH 0080/1921] install module --- modules.json | 3 + .../nf-core/modules/tabix/tabix/functions.nf | 78 +++++++++++++++++++ modules/nf-core/modules/tabix/tabix/main.nf | 37 +++++++++ modules/nf-core/modules/tabix/tabix/meta.yml | 40 ++++++++++ 4 files changed, 158 insertions(+) create mode 100644 modules/nf-core/modules/tabix/tabix/functions.nf create mode 100644 modules/nf-core/modules/tabix/tabix/main.nf create mode 100644 modules/nf-core/modules/tabix/tabix/meta.yml diff --git a/modules.json b/modules.json index c571184a..4d8e37b3 100644 --- a/modules.json +++ b/modules.json @@ -38,6 +38,9 @@ }, "samtools/stats": { "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" + }, + "tabix/tabix": { + "git_sha": "7b3315591a149609e27914965f858c9a7e071564" } } } diff --git a/modules/nf-core/modules/tabix/tabix/functions.nf b/modules/nf-core/modules/tabix/tabix/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/tabix/tabix/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/tabix/tabix/main.nf b/modules/nf-core/modules/tabix/tabix/main.nf new file mode 100644 index 00000000..1574c0b5 --- /dev/null +++ b/modules/nf-core/modules/tabix/tabix/main.nf @@ -0,0 +1,37 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process TABIX_TABIX { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0" + } else { + container "quay.io/biocontainers/tabix:1.11--hdfd78af_0" + } + + input: + tuple val(meta), path(tab) + + output: + tuple val(meta), path("*.tbi"), emit: tbi + path "versions.yml" , emit: versions + + script: + """ + tabix $options.args $tab + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/tabix/tabix/meta.yml b/modules/nf-core/modules/tabix/tabix/meta.yml new file mode 100644 index 00000000..1ca58bcf --- /dev/null +++ b/modules/nf-core/modules/tabix/tabix/meta.yml @@ -0,0 +1,40 @@ +name: tabix_tabix +description: create tabix index from a sorted bgzip tab-delimited genome file +keywords: + - index + - tabix + - vcf +tools: + - tabix: + description: Generic indexer for TAB-delimited genome position files. + homepage: https://www.htslib.org/doc/tabix.html + documentation: https://www.htslib.org/doc/tabix.1.html + doi: 10.1093/bioinformatics/btq671 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file compressed with bgzip + pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tbi: + type: file + description: tabix index file + pattern: "*.{tbi}" + - version: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" From 620c84d87bbf8a03b517bbf733b7a54a103bd308 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Oct 2021 16:12:08 +0200 Subject: [PATCH 0081/1921] fix tabix options --- conf/modules.config | 3 +++ subworkflows/local/deepvariant_caller.nf | 8 +++++++- workflows/raredisease.nf | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 69c4bf0a..ac5009c5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -70,5 +70,8 @@ params { 'samtools_stats' { args = '-s --remove-overlaps' } + 'tabix' { + args = '' + } } } diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index dc2f6046..7c84d395 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -6,6 +6,7 @@ params.split_multiallelics_options = [:] params.rm_duplicates_options = [:] params.deepvariant_options = [:] params.glnexus_options = [:] +params.tabix_options = [:] def split_multiallelics_glnexus = params.split_multiallelics_options.clone() split_multiallelics_glnexus.publish_files = "false" @@ -19,6 +20,7 @@ include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/mod include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_glnexus ) include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) +include { TABIX_TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' addParams( options: params.glnexus_options ) workflow DEEPVARIANT_CALLER { take: @@ -37,9 +39,13 @@ workflow DEEPVARIANT_CALLER { ch_case_info.combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) + SPLIT_MULTIALLELICS (GLNEXUS.out.bcf, fasta) + REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) + TABIX_TABIX (REMOVE_DUPLICATES.out.vcf) emit: - vcf = GLNEXUS.out.bcf + vcf = REMOVE_DUPLICATES.out.vcf + tbi = TABIX_TABIX.out.tbi // Collect versions deepvariant_version = DEEPVARIANT.out.version diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2fa2f73e..24e53d98 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -97,7 +97,8 @@ include { MAPPING } from '../subworkflows/nf-core/mapping' addParams( include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'], glnexus_options: modules['glnexus'], rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], - split_multiallelics_options: modules['bcftools_norm_split_multiallelics'] ) + split_multiallelics_options: modules['bcftools_norm_split_multiallelics'], + tabix_options: modules['tabix'] ) /* ======================================================================================== From ba62c43232c7978d3bf1bf041ac5a93c3b6e938e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 1 Oct 2021 16:17:23 +0200 Subject: [PATCH 0082/1921] applying the naming hack :sparkles: --- workflows/raredisease.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2550a847..f1dcd015 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -130,8 +130,8 @@ workflow RAREDISEASE { PREPARE_GENOME.out.bwamem2_index ) - ch_bwamem2_marked_bam = ALIGN_BWAMEM2.out.marked_bam - ch_bwamem2_marked_bai = ALIGN_BWAMEM2.out.marked_bai + ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam + ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.bwamem2_version.ifEmpty(null)) ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.picard_version.ifEmpty(null)) @@ -141,7 +141,7 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. DEEPVARIANT_CALLER ( - ch_bwamem2_marked_bam.join(ch_bwamem2_marked_bai, by: [0]), + ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.sample From 4a20a3a49a6adce49c131d27c8ebe6685a37170b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Oct 2021 16:18:34 +0200 Subject: [PATCH 0083/1921] refactor --- subworkflows/local/deepvariant_caller.nf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 7c84d395..1a2ce46c 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -15,12 +15,14 @@ def rm_duplicates_glnexus = params.rm_duplicates_options.clone() rm_duplicates_glnexus.publish_dir = "glnexus/" rm_duplicates_glnexus.suffix = "_split_rmdup" +def tabix_glnexus = params.tabix_options.clone() +tabix_glnexus.publish_dir = "glnexus/" include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_glnexus ) include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_glnexus ) include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) -include { TABIX_TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' addParams( options: params.glnexus_options ) +include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' addParams( options: tabix_glnexus) workflow DEEPVARIANT_CALLER { take: @@ -41,11 +43,11 @@ workflow DEEPVARIANT_CALLER { GLNEXUS ( ch_gvcfs ) SPLIT_MULTIALLELICS (GLNEXUS.out.bcf, fasta) REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) - TABIX_TABIX (REMOVE_DUPLICATES.out.vcf) + TABIX (REMOVE_DUPLICATES.out.vcf) emit: vcf = REMOVE_DUPLICATES.out.vcf - tbi = TABIX_TABIX.out.tbi + tbi = TABIX.out.tbi // Collect versions deepvariant_version = DEEPVARIANT.out.version From 97a2c98acd0d840f6794255982c4aa210d108c1b Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 4 Oct 2021 16:04:23 +0200 Subject: [PATCH 0084/1921] added wes specific resources --- conf/wes.config | 21 +++++++++++++++++++++ nextflow.config | 7 ++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 conf/wes.config diff --git a/conf/wes.config b/conf/wes.config new file mode 100644 index 00000000..a5c239d2 --- /dev/null +++ b/conf/wes.config @@ -0,0 +1,21 @@ +/* +======================================================================================== + nf-core/raredisease Nextflow whole-exome sequencing (WES) config file +======================================================================================== + This config file is invoked when `--analysis_type` = 'WES'. + The purpose is to reduce the amount of resources used compared to WGS data. +---------------------------------------------------------------------------------------- +*/ + +process { + withLabel:process_medium { + cpus = { check_max( 3 * task.attempt, 'cpus' ) } + memory = { check_max( 30.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } + withLabel:process_high { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 60.GB * task.attempt, 'memory' ) } + time = { check_max( 16.h * task.attempt, 'time' ) } + } +} diff --git a/nextflow.config b/nextflow.config index 9d57bcde..e3bba0bb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -73,13 +73,18 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load igenomes.config if required else load custom genomes.config +// Load igenomes.config if required, else load custom genomes.config if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } else { includeConfig 'conf/genomes.config' } +// Load wes.config if --analysis_type='WES' +if (params.analysis_type == 'WES') { + includeConfig 'conf/wes.config' +} + profiles { debug { process.beforeScript = 'echo $HOSTNAME' } conda { From 22613bc55b45d3d5ffb4fc9d8e1e7d224aff36e2 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 5 Oct 2021 10:48:47 +0200 Subject: [PATCH 0085/1921] forgot 2 refactor bwamem2 to bwamem2_index --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 8401657c..5e9099d0 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -20,7 +20,7 @@ workflow PREPARE_GENOME { // Fetch BWAMEM2 index or create from scratch if required if ( params.aligner == 'bwamem2' ) { if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { - ch_bwamem2_index = file(params.bwamem2) + ch_bwamem2_index = file(params.bwamem2_index) } else { ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index ch_bwamem2_version = BWAMEM2_INDEX.out.version From 5640983b3d14413cf0e078bf3b0a5308087012d8 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 5 Oct 2021 15:57:53 +0200 Subject: [PATCH 0086/1921] applying comment suggestions --- nextflow_schema.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index ac99771c..951400da 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -43,25 +43,7 @@ "fa_icon": "fas fa-file-signature" } } - }, - "main_options": { - "title": "Main options", - "type": "object", - "fa_icon": "fas fa-user-cog", - "description": "Options used to steer the direction of the pipeline.", - "properties": { - "analysis_type": { - "type": "string", - "default": "WGS", - "description": "Specifies which analysis type for the pipeline- either 'WGS' or 'WES'. It'll mainly change the resources consumed.", - "fa_icon": "fas fa-book", - "enum": [ - "WGS", - "WES" - ] - } - } - }, + }, "reference_genome_options": { "title": "Reference genome options", "type": "object", @@ -129,6 +111,24 @@ } } }, + "analysis_options": { + "title": "Analysis options", + "type": "object", + "fa_icon": "fas fa-user-cog", + "description": "Options used to steer the direction of the pipeline.", + "properties": { + "analysis_type": { + "type": "string", + "default": "WGS", + "description": "Specifies which analysis type for the pipeline- either 'WGS' or 'WES'. It'll mainly change the resources consumed.", + "fa_icon": "fas fa-book", + "enum": [ + "WGS", + "WES" + ] + } + } + }, "alignment_options": { "title": "Alignment options", "type": "object", @@ -340,10 +340,10 @@ "$ref": "#/definitions/input_output_options" }, { - "$ref": "#/definitions/main_options" + "$ref": "#/definitions/reference_genome_options" }, { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/definitions/analysis_options" }, { "$ref": "#/definitions/alignment_options" @@ -358,4 +358,4 @@ "$ref": "#/definitions/generic_options" } ] -} \ No newline at end of file +} From dc63b9aa32eb0a6f9d0bc42f810d3c7d7a6aa37e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 6 Oct 2021 13:26:00 +0200 Subject: [PATCH 0087/1921] removed trailing white space --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 951400da..2ca0ffc6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -43,7 +43,7 @@ "fa_icon": "fas fa-file-signature" } } - }, + }, "reference_genome_options": { "title": "Reference genome options", "type": "object", @@ -358,4 +358,4 @@ "$ref": "#/definitions/generic_options" } ] -} +} \ No newline at end of file From 16fb18fedd049b65315ca7a410ac3a9f7acc6c45 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Oct 2021 14:19:33 +0200 Subject: [PATCH 0088/1921] include vcf check --- bin/check_input_vcf.py | 47 +++++++++++++++++++++++++++++++ conf/genomes.config | 2 ++ conf/test.config | 4 ++- main.nf | 1 + modules/local/check_input_vcf.nf | 32 +++++++++++++++++++++ nextflow_schema.json | 6 ++++ subworkflows/local/prepare_vcf.nf | 34 ++++++++++++++++++++++ workflows/raredisease.nf | 8 +++++- 8 files changed, 132 insertions(+), 2 deletions(-) create mode 100755 bin/check_input_vcf.py create mode 100644 modules/local/check_input_vcf.nf create mode 100644 subworkflows/local/prepare_vcf.nf diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py new file mode 100755 index 00000000..85405a3e --- /dev/null +++ b/bin/check_input_vcf.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import sys +import gzip +import argparse + + +def parse_args(args=None): + Description = "Check that input vcf files have been normalized." + Epilog = "Example usage: python check_input_vcf.py --INPUT_VCFS ... --OUTPUT " + + parser = argparse.ArgumentParser(description=Description, epilog=Epilog) + parser.add_argument("--INPUT_VCFS", help="Input vcf files.", nargs= '*') + parser.add_argument("--OUTPUT", help="Output file containing a list of files that need to be normalized.") + return parser.parse_args(args) + + +def check_vcf(files_in, file_out): + """ + This function checks that input vcf files have been normalized with bcftools, and writes the filenames of + those that need to be normalized to a text file + + """ + + with open(file_out,'w') as out: + for file in files_in: + if file.endswith(".gz"): + with gzip.open(file,'rt') as vcf: + for line in vcf: + if line.startswith("##bcftools_norm"): + break + elif not line.startswith("#"): + out.write(file+"\n") + break + else: + print("Please compress %s using bgzip" %file ) + + + + +def main(args=None): + args = parse_args(args) + check_vcf(args.INPUT_VCFS, args.OUTPUT) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/conf/genomes.config b/conf/genomes.config index 4f9835b3..597e61fc 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -14,11 +14,13 @@ params { fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + clinvar = "${params.local_genomes}/grch37_clinvar_-20210415-.vcf.gz" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + clinvar = "${params.local_genomes}/grch38_clinvar_-20210415-.vcf.gz" } } } diff --git a/conf/test.config b/conf/test.config index 136e56ad..dbd212b2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,5 +26,7 @@ params { input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' // Genome references - fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + clinvar = "${params.local_genomes}/grch38_clinvar_-20210415-.vcf.gz" + } diff --git a/main.nf b/main.nf index 638f8a87..927c1f6c 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.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.clinvar = WorkflowMain.getGenomeAttribute(params, 'clinvar') /* ======================================================================================== diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf new file mode 100644 index 00000000..15cd1cdf --- /dev/null +++ b/modules/local/check_input_vcf.nf @@ -0,0 +1,32 @@ +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +process CHECK_INPUT_VCF { + tag "check_vcf" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path vcfs + + output: + path '*.txt' , emit: txt + + script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ + def input = vcfs.collect { it.toString() } + """ + check_input_vcf.py \\ + --INPUT_VCFS ${input.join(' ')} \\ + --OUTPUT unprocessed_vcfs.txt + """ +} diff --git a/nextflow_schema.json b/nextflow_schema.json index b9bf8523..c7e848fc 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -94,6 +94,12 @@ "description": "Path to directory for pre-built bwamem2 index.", "help_text": "If none provided, will be generated automatically from the FASTA reference." }, + "clinvar": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-bezier-curve", + "description": "Path to directory for clinvar vcf." + }, "save_reference": { "type": "boolean", "default": false, diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf new file mode 100644 index 00000000..fee900c8 --- /dev/null +++ b/subworkflows/local/prepare_vcf.nf @@ -0,0 +1,34 @@ +// +// Prepare reference vcf files +// + +params.split_multiallelics_options = [:] +params.rm_duplicates_options = [:] +params.vcf_options = [:] +params.tabix_options = [:] + +def split_multiallelics_vcf_check = params.split_multiallelics_options.clone() +split_multiallelics_vcf_check.publish_files = "false" + +def rm_duplicates_vcf_check = params.rm_duplicates_options.clone() +rm_duplicates_vcf_check.publish_dir = "vcf_check/" +rm_duplicates_vcf_check.suffix = "_split_rmdup" + +def tabix_vcf_check = params.tabix_options.clone() +tabix_vcf_check.publish_dir = "vcf_check/" + +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_vcf_check ) +include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_vcf_check ) +include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' addParams( options: params.vcf_options ) + +workflow CHECK_VCF { + take: + vcfs // array: [ vcf files ] + + main: + ch_out = CHECK_INPUT_VCF( vcfs ).txt + + + // emit: + // txt = ch_out // path: genome.fasta +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 61bb03e2..21f0083c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -12,8 +12,9 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2_index, params.fasta_fai + params.bwamem2_index, params.fasta_fai, params.clinvar ] + for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters @@ -52,6 +53,7 @@ include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) +include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' addParams( options: [:] ) /* ======================================================================================== @@ -117,6 +119,10 @@ workflow RAREDISEASE { INPUT_CHECK ( ch_input ) + ch_vcfs = Channel.fromPath(params.clinvar) + CHECK_VCF( + ch_vcfs + ) // STEP 0: QUALITY CHECK. FASTQC ( From 3132b37eb537d1552ddc601659b7e49498a52f7a Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 14:26:51 +0200 Subject: [PATCH 0089/1921] added includeconfig for inhouse config --- nextflow.config | 14 ++++++++++++++ nextflow_schema.json | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/nextflow.config b/nextflow.config index 3b0760c3..a7c5b33a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -54,6 +54,8 @@ params { config_profile_url = null config_profile_name = null + local_config_path = null + // Max resource options // Defaults only, expecting to be overwritten max_memory = '128.GB' @@ -75,6 +77,18 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } +// Load nf-core/raredisease custom config +try { + includeConfig "${params.custom_config_base}/pipeline/raredisease.config" +} catch (Exception e) { + 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 igenomes.config if required, else load custom genomes.config if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 2ca0ffc6..53f3c6e8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -197,6 +197,11 @@ "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 28e9dbb5e4daa9083970baa3a298cfc463132a65 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 15:30:20 +0200 Subject: [PATCH 0090/1921] dl'd picard/collectmultiplemetrics module --- modules.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules.json b/modules.json index 4d8e37b3..39b519a2 100644 --- a/modules.json +++ b/modules.json @@ -21,6 +21,9 @@ "multiqc": { "git_sha": "ab67a1d41b63bf52fd7c147f7f8f6e8d167590b5" }, + "picard/collectmultiplemetrics": { + "git_sha": "49da8642876ae4d91128168cd0db4f1c858d7792" + }, "picard/markduplicates": { "git_sha": "e971f538a99bfa190f36f9303bede205e00b90a4" }, From b0b356de64ce95731b33db0e6a89245202824406 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 15:36:40 +0200 Subject: [PATCH 0091/1921] woops! it didn't get pushed in the 1st commit --- .../collectmultiplemetrics/functions.nf | 78 +++++++++++++++++++ .../picard/collectmultiplemetrics/main.nf | 52 +++++++++++++ .../picard/collectmultiplemetrics/meta.yml | 49 ++++++++++++ 3 files changed, 179 insertions(+) create mode 100644 modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf create mode 100644 modules/nf-core/modules/picard/collectmultiplemetrics/main.nf create mode 100644 modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf new file mode 100644 index 00000000..dd8fdaca --- /dev/null +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf @@ -0,0 +1,52 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process PICARD_COLLECTMULTIPLEMETRICS { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" + } else { + container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" + } + + input: + tuple val(meta), path(bam) + path fasta + + output: + tuple val(meta), path("*_metrics"), emit: metrics + tuple val(meta), path("*.pdf") , emit: pdf + path "versions.yml" , emit: versions + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + CollectMultipleMetrics \\ + $options.args \\ + INPUT=$bam \\ + OUTPUT=${prefix}.CollectMultipleMetrics \\ + REFERENCE_SEQUENCE=$fasta + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(picard CollectMultipleMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml new file mode 100644 index 00000000..587983a1 --- /dev/null +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml @@ -0,0 +1,49 @@ +name: picard_collectmultiplemetrics +description: Collect multiple metrics from a BAM file +keywords: + - alignment + - metrics + - statistics + - insert + - quality + - bam +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - fasta: + type: file + description: Genome fasta file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - metrics: + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + - pdf: + type: file + description: PDF plots of metrics + pattern: "*.{pdf}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" From b52fd323d4baaf727d48151c0804d7b6075c1550 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 16:10:53 +0200 Subject: [PATCH 0092/1921] added subworkflow --- conf/modules.config | 4 ++++ subworkflows/nf-core/qc_bam.nf | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 subworkflows/nf-core/qc_bam.nf diff --git a/conf/modules.config b/conf/modules.config index 556000a2..3cdcfb70 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -49,6 +49,10 @@ params { 'multiqc' { args = '' } + 'picard_collectmultiplemetrics' { + args = '' + publish_dir = 'collectmultiplemetrics' + } 'picard_markduplicates' { args = '--CREATE_INDEX' suffix = '.sorted.md' diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf new file mode 100644 index 00000000..1c8a9dda --- /dev/null +++ b/subworkflows/nf-core/qc_bam.nf @@ -0,0 +1,20 @@ +// +// A quality check subworkflow for processed bams. +// + +params.picard_collectmultiplemetrics_options = [:] + +include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' addParams( options: params.picard_collectmultiplemetrics_options ) + +workflow QC_BAM { + + take: + bam // channel: [ val(meta), path(bam) ] + fasta // path: genome.fasta + + main: + PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) + + emit: + multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics +} From 4841c88e1ebe6a352ca840266e6fcd7c19013c20 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 16:37:10 +0200 Subject: [PATCH 0093/1921] added subwrkflw into main --- workflows/raredisease.nf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 61bb03e2..26974812 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -87,6 +87,10 @@ include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' addParam markduplicates_options: modules['picard_markduplicates'] ) +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' addParams ( + picard_collectmultiplemetrics_options: modules['picard_collectmultiplemetrics'] +) + // // SUBWORKFLOW: Consists of mix/local modules @@ -142,6 +146,12 @@ workflow RAREDISEASE { ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.samtools_version.ifEmpty(null)) } + // STEP 1.5: BAM QUALITY CHECK + QC_BAM ( + ch_marked_bam, + PREPARE_GENOME.out.fasta + ) + // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. DEEPVARIANT_CALLER ( From 19733854a37f05faf0e077c211f457565aef59cd Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 17:27:38 +0200 Subject: [PATCH 0094/1921] added subworkflow naming --- .github/CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b2f28393..57d34b80 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -98,6 +98,10 @@ Please use the following naming schemes, to make it easy to understand what is g * initial process channel: `ch_output_from_` * intermediate and terminal channels: `ch__for_` +For subworkflows: + +* verb_tool or verb_variant_tool: `align_bwamem2.nf` or `call_snv_deepvariant.nf` + ### Nextflow version bumping If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` From 68c7d7d2d0831f4165a8fe96ccd0139c1f60044a Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 17:31:15 +0200 Subject: [PATCH 0095/1921] quick fix --- .github/CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 57d34b80..54a4ae18 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -98,9 +98,9 @@ Please use the following naming schemes, to make it easy to understand what is g * initial process channel: `ch_output_from_` * intermediate and terminal channels: `ch__for_` -For subworkflows: - -* verb_tool or verb_variant_tool: `align_bwamem2.nf` or `call_snv_deepvariant.nf` +* subworkflows: `verb_maintool` or `verb_variant_maintool` + * `verb_maintool` : `align_bwamem2.nf` + * `verb_variant_maintool` : `call_snv_deepvariant.nf` ### Nextflow version bumping From 11572b08dca535bc7c4d43136c7f14d6e1f367ea Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 7 Oct 2021 17:36:29 +0200 Subject: [PATCH 0096/1921] linting magic :sparkles: --- .github/CONTRIBUTING.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 54a4ae18..b2f28393 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -98,10 +98,6 @@ Please use the following naming schemes, to make it easy to understand what is g * initial process channel: `ch_output_from_` * intermediate and terminal channels: `ch__for_` -* subworkflows: `verb_maintool` or `verb_variant_maintool` - * `verb_maintool` : `align_bwamem2.nf` - * `verb_variant_maintool` : `call_snv_deepvariant.nf` - ### Nextflow version bumping If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` From 29fd80015af4c17a3250d4414384ace7d60a8e14 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Oct 2021 10:22:22 +0200 Subject: [PATCH 0097/1921] check input clinvar --- bin/check_input_vcf.py | 5 +++-- subworkflows/local/deepvariant_caller.nf | 2 +- subworkflows/local/prepare_vcf.nf | 21 ++++++++++++++++----- workflows/raredisease.nf | 6 +++--- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py index 85405a3e..dd2f87f9 100755 --- a/bin/check_input_vcf.py +++ b/bin/check_input_vcf.py @@ -1,10 +1,10 @@ #!/usr/bin/env python +import os import sys import gzip import argparse - def parse_args(args=None): Description = "Check that input vcf files have been normalized." Epilog = "Example usage: python check_input_vcf.py --INPUT_VCFS ... --OUTPUT " @@ -30,7 +30,8 @@ def check_vcf(files_in, file_out): if line.startswith("##bcftools_norm"): break elif not line.startswith("#"): - out.write(file+"\n") + base = os.path.basename(file).split(".")[0] + out.write(base + "," + os.path.abspath(file) + "\n") break else: print("Please compress %s using bgzip" %file ) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 1a2ce46c..2aba7b53 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -27,7 +27,7 @@ include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix workflow DEEPVARIANT_CALLER { take: bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta + fasta // path(fasta) fai // path(fai) ch_case_info // channel: [ case_id ] diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index fee900c8..f854256f 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -12,7 +12,6 @@ split_multiallelics_vcf_check.publish_files = "false" def rm_duplicates_vcf_check = params.rm_duplicates_options.clone() rm_duplicates_vcf_check.publish_dir = "vcf_check/" -rm_duplicates_vcf_check.suffix = "_split_rmdup" def tabix_vcf_check = params.tabix_options.clone() tabix_vcf_check.publish_dir = "vcf_check/" @@ -20,15 +19,27 @@ tabix_vcf_check.publish_dir = "vcf_check/" include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_vcf_check ) include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_vcf_check ) include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' addParams( options: params.vcf_options ) +include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' addParams( options: tabix_vcf_check ) workflow CHECK_VCF { take: - vcfs // array: [ vcf files ] + vcfs // array: [ vcf files ] + fasta // path(fasta) main: - ch_out = CHECK_INPUT_VCF( vcfs ).txt + CHECK_INPUT_VCF( vcfs ) + .filter { it.size()>0 } + .splitCsv() + .map { [ [ 'id':it[0] ], it[1] ] } + .set{ ch_unprocessed_vcfs } + ch_unprocessed_vcfs.view() - // emit: - // txt = ch_out // path: genome.fasta + SPLIT_MULTIALLELICS (ch_unprocessed_vcfs, fasta) + REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) + TABIX (REMOVE_DUPLICATES.out.vcf) + + emit: + vcf = REMOVE_DUPLICATES.out.vcf // path: genome.fasta + idx = TABIX.out.tbi } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 21f0083c..cb393d68 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -119,10 +119,10 @@ workflow RAREDISEASE { INPUT_CHECK ( ch_input ) - ch_vcfs = Channel.fromPath(params.clinvar) + ch_clinvar_in = Channel.fromPath(params.clinvar) CHECK_VCF( - ch_vcfs - ) + ch_clinvar_in, params.fasta + ).set { ch_clinvar_out } // STEP 0: QUALITY CHECK. FASTQC ( From e45a57c05774e500e77fc200f5622b0b97ed0a45 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Oct 2021 10:38:13 +0200 Subject: [PATCH 0098/1921] remove view --- subworkflows/local/prepare_vcf.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index f854256f..68f52d2c 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -33,8 +33,6 @@ workflow CHECK_VCF { .map { [ [ 'id':it[0] ], it[1] ] } .set{ ch_unprocessed_vcfs } - ch_unprocessed_vcfs.view() - SPLIT_MULTIALLELICS (ch_unprocessed_vcfs, fasta) REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) TABIX (REMOVE_DUPLICATES.out.vcf) From 6fe3173a11e530ad201cec8e87e7a88e0010eb13 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Oct 2021 23:02:39 +0200 Subject: [PATCH 0099/1921] vcf check sans test --- bin/check_input_vcf.py | 1 + conf/test.config | 1 - subworkflows/local/prepare_vcf.nf | 11 ++++++----- workflows/raredisease.nf | 12 ++++++++---- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py index dd2f87f9..68f30c96 100755 --- a/bin/check_input_vcf.py +++ b/bin/check_input_vcf.py @@ -31,6 +31,7 @@ def check_vcf(files_in, file_out): break elif not line.startswith("#"): base = os.path.basename(file).split(".")[0] + out.write("id,filepath\n") out.write(base + "," + os.path.abspath(file) + "\n") break else: diff --git a/conf/test.config b/conf/test.config index dbd212b2..11ca6988 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,6 +27,5 @@ params { // Genome references fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' - clinvar = "${params.local_genomes}/grch38_clinvar_-20210415-.vcf.gz" } diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 68f52d2c..b67cb083 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -23,15 +23,16 @@ include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix workflow CHECK_VCF { take: - vcfs // array: [ vcf files ] + vcf // channel: [ vcf file ] fasta // path(fasta) main: - CHECK_INPUT_VCF( vcfs ) + CHECK_INPUT_VCF( vcf ) .filter { it.size()>0 } - .splitCsv() - .map { [ [ 'id':it[0] ], it[1] ] } - .set{ ch_unprocessed_vcfs } + .splitCsv( header:true ) + .map { it -> + [ [ id: it['id']], it['filepath'] ] } + .set { ch_unprocessed_vcfs } SPLIT_MULTIALLELICS (ch_unprocessed_vcfs, fasta) REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index bd674194..20c9de6c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -123,10 +123,6 @@ workflow RAREDISEASE { INPUT_CHECK ( ch_input ) - ch_clinvar_in = Channel.fromPath(params.clinvar) - CHECK_VCF( - ch_clinvar_in, params.fasta - ).set { ch_clinvar_out } // STEP 0: QUALITY CHECK. FASTQC ( @@ -137,6 +133,14 @@ workflow RAREDISEASE { // STEP 0: PREPARE GENOME REFERENCES AND INDICES. PREPARE_GENOME ( params.fasta ) + if (params.clinvar != '') + { + ch_clinvar_in = Channel.fromPath(params.clinvar) + CHECK_VCF( + ch_clinvar_in, PREPARE_GENOME.out.fasta, + ).set { ch_clinvar_out } + + } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { ALIGN_BWAMEM2 ( From a43d29c6864e7db61e5c1c89d358cb522da8fe2b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Oct 2021 09:54:21 +0200 Subject: [PATCH 0100/1921] edit python script to process one file at a time and not a list --- bin/check_input_vcf.py | 41 +++++++++++++++----------------- modules/local/check_input_vcf.nf | 2 +- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py index 68f30c96..d704b9b5 100755 --- a/bin/check_input_vcf.py +++ b/bin/check_input_vcf.py @@ -6,43 +6,40 @@ import argparse def parse_args(args=None): - Description = "Check that input vcf files have been normalized." - Epilog = "Example usage: python check_input_vcf.py --INPUT_VCFS ... --OUTPUT " + Description = "Check that input vcf file has been normalized." + Epilog = "Example usage: python check_input_vcf.py --INPUT_VCF ... --OUTPUT " parser = argparse.ArgumentParser(description=Description, epilog=Epilog) - parser.add_argument("--INPUT_VCFS", help="Input vcf files.", nargs= '*') + parser.add_argument("--INPUT_VCF", help="Input vcf file.") parser.add_argument("--OUTPUT", help="Output file containing a list of files that need to be normalized.") return parser.parse_args(args) -def check_vcf(files_in, file_out): +def check_vcf(file_in, file_out): """ - This function checks that input vcf files have been normalized with bcftools, and writes the filenames of - those that need to be normalized to a text file + This function checks that an input vcf file has been normalized with bcftools, and if not, it writes its basename and the filename + to a text file """ with open(file_out,'w') as out: - for file in files_in: - if file.endswith(".gz"): - with gzip.open(file,'rt') as vcf: - for line in vcf: - if line.startswith("##bcftools_norm"): - break - elif not line.startswith("#"): - base = os.path.basename(file).split(".")[0] - out.write("id,filepath\n") - out.write(base + "," + os.path.abspath(file) + "\n") - break - else: - print("Please compress %s using bgzip" %file ) - - + if file_in.endswith(".gz"): + with gzip.open(file_in,'rt') as vcf: + for line in vcf: + if line.startswith("##bcftools_norm"): + break + elif not line.startswith("#"): + base = os.path.basename(file_in).split(".")[0] + out.write("id,filepath\n") + out.write(base + "," + os.path.abspath(file_in) + "\n") + break + else: + print("Please compress %s using bgzip" %file_in ) def main(args=None): args = parse_args(args) - check_vcf(args.INPUT_VCFS, args.OUTPUT) + check_vcf(args.INPUT_VCF, args.OUTPUT) if __name__ == "__main__": diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 15cd1cdf..d2c0253a 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -26,7 +26,7 @@ process CHECK_INPUT_VCF { def input = vcfs.collect { it.toString() } """ check_input_vcf.py \\ - --INPUT_VCFS ${input.join(' ')} \\ + --INPUT_VCF ${input.join(' ')} \\ --OUTPUT unprocessed_vcfs.txt """ } From 7726a897aa9253fa456617b0530f7557f48153ee Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 15 Oct 2021 16:30:47 +0200 Subject: [PATCH 0101/1921] fixed extensions --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 3cdcfb70..af6a04b4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -55,7 +55,7 @@ params { } 'picard_markduplicates' { args = '--CREATE_INDEX' - suffix = '.sorted.md' + suffix = '_sorted' publish_dir = 'markduplicates' } 'samtools_faidx' { @@ -68,7 +68,7 @@ params { publish_files = false } 'samtools_sort' { - suffix = '.sorted' + suffix = '_sorted' publish_files = false } 'samtools_stats' { From bd404eff29b7137663668750462685debc461a3c Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 20 Oct 2021 10:07:00 +0200 Subject: [PATCH 0102/1921] removed maintool --- .github/CONTRIBUTING.md | 4 ++++ .nf-core_lint.yml | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 .nf-core_lint.yml diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b2f28393..d4d3ebb8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -98,6 +98,10 @@ Please use the following naming schemes, to make it easy to understand what is g * initial process channel: `ch_output_from_` * intermediate and terminal channels: `ch__for_` +* subworkflows: `verb_noun` or `verb_variant_noun` + * `verb_noun` : `align_bwamem2.nf` + * `verb_variant_noun` : `call_snv_deepvariant.nf` + ### Nextflow version bumping If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` diff --git a/.nf-core_lint.yml b/.nf-core_lint.yml new file mode 100644 index 00000000..31a8ef29 --- /dev/null +++ b/.nf-core_lint.yml @@ -0,0 +1,2 @@ +files_unchanged: + - .github/CONTRIBUTING.md From 5ca84c60bace0064da76f5f8b5efb1d82c4f5221 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 22 Oct 2021 15:52:49 +0200 Subject: [PATCH 0103/1921] updated nf-core lint config for dsl2 --- .nf-core.yml | 3 +++ .nf-core_lint.yml | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 .nf-core.yml delete mode 100644 .nf-core_lint.yml diff --git a/.nf-core.yml b/.nf-core.yml new file mode 100644 index 00000000..a9f17e4e --- /dev/null +++ b/.nf-core.yml @@ -0,0 +1,3 @@ +lint: + files_unchanged: + - .github/CONTRIBUTING.md diff --git a/.nf-core_lint.yml b/.nf-core_lint.yml deleted file mode 100644 index 31a8ef29..00000000 --- a/.nf-core_lint.yml +++ /dev/null @@ -1,2 +0,0 @@ -files_unchanged: - - .github/CONTRIBUTING.md From 7a8d64045b357a8241d3644308dd28800b7d1b9a Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 22 Oct 2021 15:56:03 +0200 Subject: [PATCH 0104/1921] added multiqc to bypass lint --- .nf-core.yml | 1 + assets/multiqc_config.yaml | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index a9f17e4e..9ae9fadb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,3 +1,4 @@ lint: files_unchanged: - .github/CONTRIBUTING.md + - assets/multiqc_config.yaml diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 03969e51..b86d5121 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -1,11 +1,11 @@ report_comment: > - This report has been generated by the nf-core/raredisease - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the nf-core/raredisease + analysis pipeline. For information about how to interpret these results, please see the + documentation. report_section_order: - software_versions: - order: -1000 - nf-core-raredisease-summary: - order: -1001 + software_versions: + order: -1000 + nf-core-raredisease-summary: + order: -1001 export_plots: true From e76328751ca5a0e60c0135941270c24ce16ca397 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 22 Oct 2021 16:39:35 +0200 Subject: [PATCH 0105/1921] installed, added module to pipeline --- .../modules/qualimap/bamqc/functions.nf | 78 +++++++++++++++++++ .../nf-core/modules/qualimap/bamqc/main.nf | 63 +++++++++++++++ .../nf-core/modules/qualimap/bamqc/meta.yml | 49 ++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 modules/nf-core/modules/qualimap/bamqc/functions.nf create mode 100644 modules/nf-core/modules/qualimap/bamqc/main.nf create mode 100644 modules/nf-core/modules/qualimap/bamqc/meta.yml diff --git a/modules/nf-core/modules/qualimap/bamqc/functions.nf b/modules/nf-core/modules/qualimap/bamqc/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/qualimap/bamqc/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/qualimap/bamqc/main.nf b/modules/nf-core/modules/qualimap/bamqc/main.nf new file mode 100644 index 00000000..d33f1e67 --- /dev/null +++ b/modules/nf-core/modules/qualimap/bamqc/main.nf @@ -0,0 +1,63 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process QUALIMAP_BAMQC { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::qualimap=2.2.2d" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/qualimap:2.2.2d--1" + } else { + container "quay.io/biocontainers/qualimap:2.2.2d--1" + } + + input: + tuple val(meta), path(bam) + path gff + val use_gff + + output: + tuple val(meta), path("${prefix}"), emit: results + path "versions.yml" , emit: versions + + script: + prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + def collect_pairs = meta.single_end ? '' : '--collect-overlap-pairs' + def memory = task.memory.toGiga() + "G" + def regions = use_gff ? "--gff $gff" : '' + + def strandedness = 'non-strand-specific' + if (meta.strandedness == 'forward') { + strandedness = 'strand-specific-forward' + } else if (meta.strandedness == 'reverse') { + strandedness = 'strand-specific-reverse' + } + """ + unset DISPLAY + mkdir tmp + export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp + qualimap \\ + --java-mem-size=$memory \\ + bamqc \\ + $options.args \\ + -bam $bam \\ + $regions \\ + -p $strandedness \\ + $collect_pairs \\ + -outdir $prefix \\ + -nt $task.cpus + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/qualimap/bamqc/meta.yml b/modules/nf-core/modules/qualimap/bamqc/meta.yml new file mode 100644 index 00000000..cc0471fc --- /dev/null +++ b/modules/nf-core/modules/qualimap/bamqc/meta.yml @@ -0,0 +1,49 @@ +name: qualimap_bamqc +description: Evaluate alignment data +keywords: + - quality control + - qc + - bam +tools: + - qualimap: + description: | + Qualimap 2 is a platform-independent application written in + Java and R that provides both a Graphical User Interface and + a command-line interface to facilitate the quality control of + alignment sequencing data and its derivatives like feature counts. + homepage: http://qualimap.bioinfo.cipf.es/ + documentation: http://qualimap.conesalab.org/doc_html/index.html + doi: 10.1093/bioinformatics/bts503 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - gff: + type: file + description: Feature file with regions of interest + pattern: "*.{gff,gtf,bed}" + - use_gff: + type: boolean + description: Specifies if feature file should be used or not +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results: + type: dir + description: Qualimap results dir + pattern: "*/*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@phue" From 50de9f31914b2bad10d99be415711a1b3a5a1228 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Fri, 22 Oct 2021 16:40:22 +0200 Subject: [PATCH 0106/1921] forgot to add the actual files --- conf/modules.config | 3 +++ modules.json | 3 +++ subworkflows/nf-core/qc_bam.nf | 10 ++++++++-- workflows/raredisease.nf | 9 +++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index af6a04b4..4ac9620c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -77,5 +77,8 @@ params { 'tabix' { args = '' } + 'qualimap_bamqc' { + args = '' + } } } diff --git a/modules.json b/modules.json index 39b519a2..dad321ca 100644 --- a/modules.json +++ b/modules.json @@ -27,6 +27,9 @@ "picard/markduplicates": { "git_sha": "e971f538a99bfa190f36f9303bede205e00b90a4" }, + "qualimap/bamqc": { + "git_sha": "49da8642876ae4d91128168cd0db4f1c858d7792" + }, "samtools/faidx": { "git_sha": "9c31cf1566fa4f8660ac3973e02fe0caebe86235" }, diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 1c8a9dda..168e53bc 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -3,18 +3,24 @@ // params.picard_collectmultiplemetrics_options = [:] +params.qualimap_bamqc_options = [:] include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' addParams( options: params.picard_collectmultiplemetrics_options ) +include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' addParams( options: params.qualimap_bamqc_options ) workflow QC_BAM { take: - bam // channel: [ val(meta), path(bam) ] - fasta // path: genome.fasta + bam // channel: [ val(meta), path(bam) ] + fasta // path: genome.fasta + gff // path: file.gff + use_gff // boolean main: PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) + QUALIMAP_BAMQC ( bam, gff, use_gff ) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics + qualimap_results = QUALIMAP_BAMQC.out.results } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 26974812..53673a33 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -88,7 +88,8 @@ include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' addParam ) include { QC_BAM } from '../subworkflows/nf-core/qc_bam' addParams ( - picard_collectmultiplemetrics_options: modules['picard_collectmultiplemetrics'] + picard_collectmultiplemetrics_options: modules['picard_collectmultiplemetrics'], + qualimap_bamqc_options: modules['qualimap_bamqc'] ) @@ -147,9 +148,13 @@ workflow RAREDISEASE { } // STEP 1.5: BAM QUALITY CHECK + gff = [] + use_gff = false QC_BAM ( ch_marked_bam, - PREPARE_GENOME.out.fasta + PREPARE_GENOME.out.fasta, + gff, + use_gff ) // STEP 2: VARIANT CALLING From 63b3da13a765cd41195af951facfb335a697fe56 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 30 Oct 2021 23:24:17 +0200 Subject: [PATCH 0107/1921] use mix to combine channels --- bin/check_input_vcf.py | 9 +++++--- conf/genomes.config | 4 ++-- main.nf | 2 +- subworkflows/local/prepare_vcf.nf | 34 +++++++++++++++++++++++-------- workflows/raredisease.nf | 12 +++++------ 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py index d704b9b5..94cd5265 100755 --- a/bin/check_input_vcf.py +++ b/bin/check_input_vcf.py @@ -27,11 +27,14 @@ def check_vcf(file_in, file_out): with gzip.open(file_in,'rt') as vcf: for line in vcf: if line.startswith("##bcftools_norm"): + base = os.path.basename(file_in).rsplit(".",2)[0] + out.write("id,filepath,processed\n") + out.write(base + "," + os.path.abspath(file_in) + ",yes\n") break elif not line.startswith("#"): - base = os.path.basename(file_in).split(".")[0] - out.write("id,filepath\n") - out.write(base + "," + os.path.abspath(file_in) + "\n") + base = os.path.basename(file_in).rsplit(".",2)[0] + out.write("id,filepath,processed\n") + out.write(base + "," + os.path.abspath(file_in) + ",no\n") break else: print("Please compress %s using bgzip" %file_in ) diff --git a/conf/genomes.config b/conf/genomes.config index 597e61fc..be6b0aea 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -14,13 +14,13 @@ params { fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - clinvar = "${params.local_genomes}/grch37_clinvar_-20210415-.vcf.gz" + gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - clinvar = "${params.local_genomes}/grch38_clinvar_-20210415-.vcf.gz" + gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" } } } diff --git a/main.nf b/main.nf index 927c1f6c..0328f7db 100644 --- a/main.nf +++ b/main.nf @@ -20,7 +20,7 @@ nextflow.enable.dsl = 2 params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') -params.clinvar = WorkflowMain.getGenomeAttribute(params, 'clinvar') +params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') /* ======================================================================================== diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index b67cb083..5bf425a5 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -9,9 +9,11 @@ params.tabix_options = [:] def split_multiallelics_vcf_check = params.split_multiallelics_options.clone() split_multiallelics_vcf_check.publish_files = "false" +split_multiallelics_vcf_check.suffix = "_split" def rm_duplicates_vcf_check = params.rm_duplicates_options.clone() rm_duplicates_vcf_check.publish_dir = "vcf_check/" +rm_duplicates_vcf_check.suffix = "_split_rmdup" def tabix_vcf_check = params.tabix_options.clone() tabix_vcf_check.publish_dir = "vcf_check/" @@ -23,22 +25,36 @@ include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix workflow CHECK_VCF { take: - vcf // channel: [ vcf file ] + vcf // channel: [ vcf file ] fasta // path(fasta) main: CHECK_INPUT_VCF( vcf ) - .filter { it.size()>0 } .splitCsv( header:true ) - .map { it -> - [ [ id: it['id']], it['filepath'] ] } - .set { ch_unprocessed_vcfs } + .map { row -> + def id = "${row.id}" + def filepath = "${row.filepath}" + def processed = "${row.processed}" + tuple(id,filepath,processed) + } + .branch { id, filepath, processed -> + processed: processed == 'yes' + return [['id':id],filepath] + unprocessed: processed == 'no' + return [['id':id],filepath] + } + .set { ch_vcfs_norm } - SPLIT_MULTIALLELICS (ch_unprocessed_vcfs, fasta) - REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) - TABIX (REMOVE_DUPLICATES.out.vcf) + SPLIT_MULTIALLELICS (ch_vcfs_norm.unprocessed, fasta) + + REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta).vcf + .set { ch_vcfs_rmdup } + + vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) + + TABIX (vcf_out) emit: - vcf = REMOVE_DUPLICATES.out.vcf // path: genome.fasta + vcf = vcf_out // path: normalized_vcf idx = TABIX.out.tbi } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 20c9de6c..4b95cd83 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -12,7 +12,7 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2_index, params.fasta_fai, params.clinvar + params.bwamem2_index, params.fasta_fai, params.gnomad ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -133,14 +133,14 @@ workflow RAREDISEASE { // STEP 0: PREPARE GENOME REFERENCES AND INDICES. PREPARE_GENOME ( params.fasta ) - if (params.clinvar != '') + if (params.gnomad != '') { - ch_clinvar_in = Channel.fromPath(params.clinvar) + ch_gnomad_in = Channel.fromPath(params.gnomad) CHECK_VCF( - ch_clinvar_in, PREPARE_GENOME.out.fasta, - ).set { ch_clinvar_out } - + ch_gnomad_in, PREPARE_GENOME.out.fasta, + ).set { ch_gnomad_out } } + // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { ALIGN_BWAMEM2 ( From 842cfb0cb53f1994371fdf13b3c49db48f778954 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 31 Oct 2021 07:57:01 +0100 Subject: [PATCH 0108/1921] update nextflow schema --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 3a5956a0..706ab848 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -95,11 +95,11 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "clinvar": { + "gnomad": { "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", - "description": "Path to directory for clinvar vcf." + "description": "Path to directory for gnomad vcf." }, "save_reference": { "type": "boolean", From 106a440e26565814feb1885203dad225ef4b4707 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 31 Oct 2021 17:57:24 +0100 Subject: [PATCH 0109/1921] Reusing modules --- .github/CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d4d3ebb8..cc823bdd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -102,6 +102,10 @@ Please use the following naming schemes, to make it easy to understand what is g * `verb_noun` : `align_bwamem2.nf` * `verb_variant_noun` : `call_snv_deepvariant.nf` +### Reusing modules in the workflow + +Default options for modules should be defined in the `base/modules.config`. If you have a module that you would like to reuse in a subworkflow with non-default options, we recommend modifying the defaults within the context of the subworkflow. For a working example, please have a look at how the default options for bcftools norm tool are modified in both `subworkflows/local/deepvariant_caller.nf` and `subworkflows/local/prepare_vcf.nf` + ### Nextflow version bumping If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` From 94321e7c8af79ecef2771a18824b72f43230c32d Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 8 Nov 2021 11:36:04 +0100 Subject: [PATCH 0110/1921] applying suggestions Co-authored-by: Anders Jemt --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cc823bdd..65fb5809 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -104,7 +104,7 @@ Please use the following naming schemes, to make it easy to understand what is g ### Reusing modules in the workflow -Default options for modules should be defined in the `base/modules.config`. If you have a module that you would like to reuse in a subworkflow with non-default options, we recommend modifying the defaults within the context of the subworkflow. For a working example, please have a look at how the default options for bcftools norm tool are modified in both `subworkflows/local/deepvariant_caller.nf` and `subworkflows/local/prepare_vcf.nf` +Default options for modules should be defined in the [conf/modules.config](../conf/modules.config). If you have a module that you would like to reuse in a subworkflow with non-default options, we recommend modifying the defaults within the context of the subworkflow. For a working example, please have a look at how the default options for bcftools norm tool are modified in both [subworkflows/local/deepvariant_caller.nf](../subworkflows/local/deepvariant_caller.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf) ### Nextflow version bumping From b630ef71d69f172d7ac51708050aa2195bfef715 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 8 Nov 2021 14:35:43 +0100 Subject: [PATCH 0111/1921] qualimap arguments hided away in subwrkflw --- subworkflows/nf-core/qc_bam.nf | 5 +++-- workflows/raredisease.nf | 19 ++++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 168e53bc..ebd4dc96 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -13,11 +13,12 @@ workflow QC_BAM { take: bam // channel: [ val(meta), path(bam) ] fasta // path: genome.fasta - gff // path: file.gff - use_gff // boolean main: PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) + + gff = [] + use_gff = false QUALIMAP_BAMQC ( bam, gff, use_gff ) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 53673a33..adaef056 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -97,12 +97,13 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' addParams ( // SUBWORKFLOW: Consists of mix/local modules // -include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( deepvariant_options: modules['deepvariant'], - glnexus_options: modules['glnexus'], - rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], - split_multiallelics_options: modules['bcftools_norm_split_multiallelics'], - tabix_options: modules['tabix'] ) - +include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' addParams( + deepvariant_options: modules['deepvariant'], + glnexus_options: modules['glnexus'], + rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], + split_multiallelics_options: modules['bcftools_norm_split_multiallelics'], + tabix_options: modules['tabix'] + ) /* ======================================================================================== RUN MAIN WORKFLOW @@ -148,13 +149,9 @@ workflow RAREDISEASE { } // STEP 1.5: BAM QUALITY CHECK - gff = [] - use_gff = false QC_BAM ( ch_marked_bam, - PREPARE_GENOME.out.fasta, - gff, - use_gff + PREPARE_GENOME.out.fasta ) // STEP 2: VARIANT CALLING From fa36d32e3f5e25684bcde54c95a9d881676d8ba5 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Mon, 8 Nov 2021 17:53:47 +0100 Subject: [PATCH 0112/1921] updated modules, fixed emit version for each subwrkflw --- modules.json | 31 ++--- modules/local/deepvariant/functions.nf | 54 +++++---- modules/local/deepvariant/main.nf | 15 +-- modules/nf-core/modules/bcftools/norm/main.nf | 3 +- .../nf-core/modules/bcftools/norm/meta.yml | 5 +- modules/nf-core/modules/bwamem2/index/main.nf | 3 +- .../nf-core/modules/bwamem2/index/meta.yml | 5 +- modules/nf-core/modules/bwamem2/mem/main.nf | 3 +- modules/nf-core/modules/bwamem2/mem/meta.yml | 5 +- .../custom/dumpsoftwareversions/functions.nf | 78 +++++++++++++ .../custom/dumpsoftwareversions/main.nf | 106 ++++++++++++++++++ .../custom/dumpsoftwareversions/meta.yml | 33 ++++++ modules/nf-core/modules/fastqc/main.nf | 8 +- modules/nf-core/modules/fastqc/meta.yml | 5 +- modules/nf-core/modules/glnexus/main.nf | 3 +- modules/nf-core/modules/glnexus/meta.yml | 6 +- modules/nf-core/modules/multiqc/main.nf | 5 +- modules/nf-core/modules/multiqc/meta.yml | 5 +- .../picard/collectmultiplemetrics/meta.yml | 1 + .../modules/picard/markduplicates/main.nf | 3 +- .../modules/picard/markduplicates/meta.yml | 5 +- .../nf-core/modules/samtools/faidx/main.nf | 3 +- .../nf-core/modules/samtools/faidx/meta.yml | 5 +- .../nf-core/modules/samtools/index/main.nf | 3 +- .../nf-core/modules/samtools/index/meta.yml | 5 +- .../nf-core/modules/samtools/merge/main.nf | 13 ++- .../nf-core/modules/samtools/merge/meta.yml | 22 +++- modules/nf-core/modules/samtools/sort/main.nf | 3 +- .../nf-core/modules/samtools/sort/meta.yml | 5 +- .../nf-core/modules/samtools/stats/main.nf | 9 +- .../nf-core/modules/samtools/stats/meta.yml | 26 +++-- modules/nf-core/modules/tabix/tabix/meta.yml | 5 +- subworkflows/local/deepvariant_caller.nf | 45 ++++---- subworkflows/local/prepare_genome.nf | 12 +- subworkflows/nf-core/align_bwamem2.nf | 17 +-- subworkflows/nf-core/qc_bam.nf | 7 +- workflows/raredisease.nf | 45 +++----- 37 files changed, 429 insertions(+), 178 deletions(-) create mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf create mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/main.nf create mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml diff --git a/modules.json b/modules.json index 39b519a2..0a788c41 100644 --- a/modules.json +++ b/modules.json @@ -4,46 +4,49 @@ "repos": { "nf-core/modules": { "bcftools/norm": { - "git_sha": "906577873b66253b0d244871bfec2eeeaff73053" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "bwamem2/index": { - "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "bwamem2/mem": { - "git_sha": "216dc8c984bfc65a5865f9c7b2e0c1bf56c9a973" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + }, + "custom/dumpsoftwareversions": { + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "fastqc": { - "git_sha": "ab67a1d41b63bf52fd7c147f7f8f6e8d167590b5" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "glnexus": { - "git_sha": "5c463ca6b46b0a452253f5ae5ce7b8253674cff0" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "multiqc": { - "git_sha": "ab67a1d41b63bf52fd7c147f7f8f6e8d167590b5" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "picard/collectmultiplemetrics": { - "git_sha": "49da8642876ae4d91128168cd0db4f1c858d7792" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "picard/markduplicates": { - "git_sha": "e971f538a99bfa190f36f9303bede205e00b90a4" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "samtools/faidx": { - "git_sha": "9c31cf1566fa4f8660ac3973e02fe0caebe86235" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "samtools/index": { - "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "samtools/merge": { - "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" + "git_sha": "ac1e6df076195cec553a2079c9cebd94026a0d47" }, "samtools/sort": { - "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, "samtools/stats": { - "git_sha": "43c27792583b3db3faedf189adea48939e300cf2" + "git_sha": "ac1e6df076195cec553a2079c9cebd94026a0d47" }, "tabix/tabix": { - "git_sha": "7b3315591a149609e27914965f858c9a7e071564" + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" } } } diff --git a/modules/local/deepvariant/functions.nf b/modules/local/deepvariant/functions.nf index da9da093..85628ee0 100644 --- a/modules/local/deepvariant/functions.nf +++ b/modules/local/deepvariant/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf index c685c18f..5aa1e368 100644 --- a/modules/local/deepvariant/main.nf +++ b/modules/local/deepvariant/main.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -23,14 +23,12 @@ process DEEPVARIANT { path(fai) output: - tuple val(meta), path("*.vcf.gz"), emit: vcf - tuple val(meta), path("*g.vcf.gz"), emit: gvcf - path "*.version.txt" , emit: version + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*g.vcf.gz"), emit: gvcf + path "versions.yml", emit: versions script: - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - """ /opt/deepvariant/bin/run_deepvariant \\ --ref=${fasta} \\ @@ -40,7 +38,10 @@ process DEEPVARIANT { ${options.args} \\ --num_shards=${task.cpus} - echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/modules/bcftools/norm/main.nf index 454fc1d2..7e506e49 100644 --- a/modules/nf-core/modules/bcftools/norm/main.nf +++ b/modules/nf-core/modules/bcftools/norm/main.nf @@ -24,10 +24,9 @@ process BCFTOOLS_NORM { output: tuple val(meta), path("*.gz") , emit: vcf - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ bcftools norm \\ diff --git a/modules/nf-core/modules/bcftools/norm/meta.yml b/modules/nf-core/modules/bcftools/norm/meta.yml index f2534452..27978a53 100644 --- a/modules/nf-core/modules/bcftools/norm/meta.yml +++ b/modules/nf-core/modules/bcftools/norm/meta.yml @@ -12,6 +12,7 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 + licence: ['MIT'] input: - meta: type: map @@ -37,9 +38,9 @@ output: type: file description: VCF normalized output file pattern: "*.{vcf.gz}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@abhi18av" diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/modules/bwamem2/index/main.nf index 9274ebe8..5732017f 100644 --- a/modules/nf-core/modules/bwamem2/index/main.nf +++ b/modules/nf-core/modules/bwamem2/index/main.nf @@ -23,10 +23,9 @@ process BWAMEM2_INDEX { output: path "bwamem2" , emit: index - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) """ mkdir bwamem2 bwa-mem2 \\ diff --git a/modules/nf-core/modules/bwamem2/index/meta.yml b/modules/nf-core/modules/bwamem2/index/meta.yml index ee84ccfc..e0f6014c 100644 --- a/modules/nf-core/modules/bwamem2/index/meta.yml +++ b/modules/nf-core/modules/bwamem2/index/meta.yml @@ -12,6 +12,7 @@ tools: a large reference genome, such as the human genome. homepage: https://github.com/bwa-mem2/bwa-mem2 documentation: https://github.com/bwa-mem2/bwa-mem2#usage + licence: ['MIT'] input: - fasta: type: file @@ -21,9 +22,9 @@ output: type: file description: BWA genome index files pattern: "*.{0132,amb,ann,bwt.2bit.64,pac}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@maxulysse" diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index ea584a39..f88d840f 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -24,10 +24,9 @@ process BWAMEM2_MEM { output: tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" """ diff --git a/modules/nf-core/modules/bwamem2/mem/meta.yml b/modules/nf-core/modules/bwamem2/mem/meta.yml index 434fc7ca..58a35e08 100644 --- a/modules/nf-core/modules/bwamem2/mem/meta.yml +++ b/modules/nf-core/modules/bwamem2/mem/meta.yml @@ -16,6 +16,7 @@ tools: homepage: http://bio-bwa.sourceforge.net/ documentation: http://www.htslib.org/doc/samtools.html arxiv: arXiv:1303.3997 + licence: ['MIT'] input: - meta: type: map @@ -36,9 +37,9 @@ output: type: file description: Output BAM file containing read alignments pattern: "*.{bam}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@maxulysse" diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf b/modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf new file mode 100644 index 00000000..faf2073f --- /dev/null +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf @@ -0,0 +1,106 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process CUSTOM_DUMPSOFTWAREVERSIONS { + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } + + // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container + conda (params.enable_conda ? "bioconda::multiqc=1.11" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0" + } else { + container "quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0" + } + + input: + path versions + + output: + path "software_versions.yml" , emit: yml + path "software_versions_mqc.yml", emit: mqc_yml + path "versions.yml" , emit: versions + + script: + """ + #!/usr/bin/env python + + import yaml + import platform + from textwrap import dedent + + def _make_versions_html(versions): + html = [ + dedent( + '''\\ + + + + + + + + + + ''' + ) + ] + for process, tmp_versions in sorted(versions.items()): + html.append("") + for i, (tool, version) in enumerate(sorted(tmp_versions.items())): + html.append( + dedent( + f'''\\ + + + + + + ''' + ) + ) + html.append("") + html.append("
Process Name Software Version
{process if (i == 0) else ''}{tool}{version}
") + return "\\n".join(html) + + module_versions = {} + module_versions["${getProcessName(task.process)}"] = { + 'python': platform.python_version(), + 'yaml': yaml.__version__ + } + + with open("$versions") as f: + workflow_versions = yaml.load(f, Loader=yaml.BaseLoader) | module_versions + + workflow_versions["Workflow"] = { + "Nextflow": "$workflow.nextflow.version", + "$workflow.manifest.name": "$workflow.manifest.version" + } + + versions_mqc = { + 'id': 'software_versions', + 'section_name': '${workflow.manifest.name} Software Versions', + 'section_href': 'https://github.com/${workflow.manifest.name}', + 'plot_type': 'html', + 'description': 'are collected at run time from the software output.', + 'data': _make_versions_html(workflow_versions) + } + + with open("software_versions.yml", 'w') as f: + yaml.dump(workflow_versions, f, default_flow_style=False) + with open("software_versions_mqc.yml", 'w') as f: + yaml.dump(versions_mqc, f, default_flow_style=False) + + with open('versions.yml', 'w') as f: + yaml.dump(module_versions, f, default_flow_style=False) + """ +} diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml new file mode 100644 index 00000000..c8310e35 --- /dev/null +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml @@ -0,0 +1,33 @@ +name: custom_dumpsoftwareversions +description: Custom module used to dump software versions within the nf-core pipeline template +keywords: + - custom + - version +tools: + - custom: + description: Custom module used to dump software versions within the nf-core pipeline template + homepage: https://github.com/nf-core/tools + documentation: https://github.com/nf-core/tools + licence: ['MIT'] +input: + - versions: + type: file + description: YML file containing software versions + pattern: "*.yml" + +output: + - yml: + type: file + description: Standard YML file containing software versions + pattern: "software_versions.yml" + - mqc_yml: + type: file + description: MultiQC custom content YML file containing software versions + pattern: "software_versions_mqc.yml" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@drpatelh" diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index 88bfbf5b..9f6cfc55 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -24,11 +24,11 @@ process FASTQC { output: tuple val(meta), path("*.html"), emit: html tuple val(meta), path("*.zip") , emit: zip - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: // Add soft-links to original FastQs for consistent naming in pipeline - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz @@ -36,7 +36,7 @@ process FASTQC { cat <<-END_VERSIONS > versions.yml ${getProcessName(task.process)}: - fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + ${getSoftwareName(task.process)}: \$( fastqc --version | sed -e "s/FastQC v//g" ) END_VERSIONS """ } else { @@ -47,7 +47,7 @@ process FASTQC { cat <<-END_VERSIONS > versions.yml ${getProcessName(task.process)}: - fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + ${getSoftwareName(task.process)}: \$( fastqc --version | sed -e "s/FastQC v//g" ) END_VERSIONS """ } diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml index 48031356..b09553a3 100644 --- a/modules/nf-core/modules/fastqc/meta.yml +++ b/modules/nf-core/modules/fastqc/meta.yml @@ -15,6 +15,7 @@ tools: overrepresented sequences. homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ + licence: ['GPL-2.0-only'] input: - meta: type: map @@ -40,9 +41,9 @@ output: type: file description: FastQC report archive pattern: "*_{fastqc.zip}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" diff --git a/modules/nf-core/modules/glnexus/main.nf b/modules/nf-core/modules/glnexus/main.nf index 5cff088b..1384334f 100644 --- a/modules/nf-core/modules/glnexus/main.nf +++ b/modules/nf-core/modules/glnexus/main.nf @@ -23,10 +23,9 @@ process GLNEXUS { output: tuple val(meta), path("*.bcf"), emit: bcf - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" // Make list of GVCFs to merge diff --git a/modules/nf-core/modules/glnexus/meta.yml b/modules/nf-core/modules/glnexus/meta.yml index fd1a407d..5ba17cae 100644 --- a/modules/nf-core/modules/glnexus/meta.yml +++ b/modules/nf-core/modules/glnexus/meta.yml @@ -10,7 +10,7 @@ tools: documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started tool_dev_url: None doi: https://doi.org/10.1101/343970 - licence: ['Apache License 2.0'] + licence: ['Apache-2.0'] input: - meta: @@ -24,9 +24,9 @@ input: pattern: "*.{gvcf,gvcf.gz,g.vcf,g.vcf.gz}" output: - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" - bcf: type: file diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index 2e7ad932..0861aa59 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -24,16 +24,15 @@ process MULTIQC { path "*multiqc_report.html", emit: report path "*_data" , emit: data path "*_plots" , optional:true, emit: plots - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) """ multiqc -f $options.args . cat <<-END_VERSIONS > versions.yml ${getProcessName(task.process)}: - multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + ${getSoftwareName(task.process)}: \$( multiqc --version | sed -e "s/multiqc, version //g" ) END_VERSIONS """ } diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml index 2d99ec0d..63c75a45 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -11,6 +11,7 @@ tools: It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ + licence: ['GPL-3.0-or-later'] input: - multiqc_files: type: file @@ -29,9 +30,9 @@ output: type: file description: Plots created by MultiQC pattern: "*_data" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@abhi18av" diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml index 587983a1..613afc62 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml @@ -14,6 +14,7 @@ tools: data and formats such as SAM/BAM/CRAM and VCF. homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ + licence: ['MIT'] input: - meta: type: map diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index dc8d460b..37b825d7 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -25,10 +25,9 @@ process PICARD_MARKDUPLICATES { tuple val(meta), path("*.bam") , emit: bam tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.metrics.txt"), emit: metrics - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" def avail_mem = 3 if (!task.memory) { diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index db72b5c5..c9a08b36 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -14,6 +14,7 @@ tools: data and formats such as SAM/BAM/CRAM and VCF. homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ + licence: ['MIT'] input: - meta: type: map @@ -42,9 +43,9 @@ output: type: file description: Duplicate metrics file generated by picard pattern: "*.{metrics.txt}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf index cdbae99b..80cedeab 100644 --- a/modules/nf-core/modules/samtools/faidx/main.nf +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -23,10 +23,9 @@ process SAMTOOLS_FAIDX { output: path "*.fai" , emit: fai - path "versions.yml", emit: version + path "versions.yml", emit: versions script: - def software = getSoftwareName(task.process) """ samtools faidx $fasta cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/modules/samtools/faidx/meta.yml index 77d21861..16c0b334 100644 --- a/modules/nf-core/modules/samtools/faidx/meta.yml +++ b/modules/nf-core/modules/samtools/faidx/meta.yml @@ -12,6 +12,7 @@ tools: homepage: http://www.htslib.org/ documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 + licence: ['MIT'] input: - fasta: type: file @@ -22,9 +23,9 @@ output: type: file description: FASTA index file pattern: "*.{fai}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index c2ba4de7..febbc11c 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -24,10 +24,9 @@ process SAMTOOLS_INDEX { output: tuple val(meta), path("*.bai"), optional:true, emit: bai tuple val(meta), path("*.csi"), optional:true, emit: csi - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) """ samtools index $options.args $bam cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml index 6f7dc887..988e8f53 100644 --- a/modules/nf-core/modules/samtools/index/meta.yml +++ b/modules/nf-core/modules/samtools/index/meta.yml @@ -14,6 +14,7 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 + licence: ['MIT'] input: - meta: type: map @@ -38,9 +39,9 @@ output: type: file description: CSI index file pattern: "*.{csi}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf index ec574105..fefb423b 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -19,17 +19,20 @@ process SAMTOOLS_MERGE { } input: - tuple val(meta), path(bams) + tuple val(meta), path(input_files) + path fasta output: - tuple val(meta), path("${prefix}.bam"), emit: bam - path "versions.yml" , emit: version + tuple val(meta), path("${prefix}.bam"), optional:true, emit: bam + tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def file_type = input_files[0].getExtension() + def reference = fasta ? "--reference ${fasta}" : "" """ - samtools merge ${prefix}.bam $bams + samtools merge ${reference} ${prefix}.${file_type} $input_files cat <<-END_VERSIONS > versions.yml ${getProcessName(task.process)}: ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/nf-core/modules/samtools/merge/meta.yml index c5f15a14..2576a3a3 100644 --- a/modules/nf-core/modules/samtools/merge/meta.yml +++ b/modules/nf-core/modules/samtools/merge/meta.yml @@ -1,5 +1,5 @@ name: samtools_merge -description: Merge BAM file +description: Merge BAM or CRAM file keywords: - merge - bam @@ -14,31 +14,41 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://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 ] - - bam: + - input_files: type: file - description: BAM file + description: BAM/CRAM file pattern: "*.{bam,cram,sam}" + - fasta: + type: optional file + description: Reference file the CRAM was created with + pattern: "*.{fasta,fa}" output: - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - merged_bam: + - bam: type: file description: BAM file pattern: "*.{bam}" - - version: + - cram: + type: file + description: CRAM file + pattern: "*.{cram}" + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" - "@yuukiiwa " - "@maxulysse" + - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf index edd558bf..b30f6f45 100644 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -23,10 +23,9 @@ process SAMTOOLS_SORT { output: tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ samtools sort $options.args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam diff --git a/modules/nf-core/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml index d4f70a8e..3402a068 100644 --- a/modules/nf-core/modules/samtools/sort/meta.yml +++ b/modules/nf-core/modules/samtools/sort/meta.yml @@ -14,6 +14,7 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 + licence: ['MIT'] input: - meta: type: map @@ -34,9 +35,9 @@ output: type: file description: Sorted BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index 823b5f31..aab43410 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -19,16 +19,17 @@ process SAMTOOLS_STATS { } input: - tuple val(meta), path(bam), path(bai) + tuple val(meta), path(input), path(input_index) + path fasta output: tuple val(meta), path("*.stats"), emit: stats - path "versions.yml" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) + def reference = fasta ? "--reference ${fasta}" : "" """ - samtools stats $bam > ${bam}.stats + samtools stats ${reference} ${input} > ${input}.stats cat <<-END_VERSIONS > versions.yml ${getProcessName(task.process)}: ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') diff --git a/modules/nf-core/modules/samtools/stats/meta.yml b/modules/nf-core/modules/samtools/stats/meta.yml index 1c7dcc8b..869e62e3 100644 --- a/modules/nf-core/modules/samtools/stats/meta.yml +++ b/modules/nf-core/modules/samtools/stats/meta.yml @@ -15,20 +15,25 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: Index for BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - fasta: + type: optional file + description: Reference file the CRAM was created with + pattern: "*.{fasta,fa}" output: - meta: type: map @@ -39,9 +44,10 @@ output: type: file description: File containing samtools stats output pattern: "*.{stats}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@drpatelh" + - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/tabix/tabix/meta.yml b/modules/nf-core/modules/tabix/tabix/meta.yml index 1ca58bcf..2e37c4ff 100644 --- a/modules/nf-core/modules/tabix/tabix/meta.yml +++ b/modules/nf-core/modules/tabix/tabix/meta.yml @@ -10,6 +10,7 @@ tools: homepage: https://www.htslib.org/doc/tabix.html documentation: https://www.htslib.org/doc/tabix.1.html doi: 10.1093/bioinformatics/btq671 + licence: ['MIT'] input: - meta: type: map @@ -30,9 +31,9 @@ output: type: file description: tabix index file pattern: "*.{tbi}" - - version: + - versions: type: file - description: File containing software version + description: File containing software versions pattern: "versions.yml" authors: - "@joseespinosa" diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 1a2ce46c..577bc5f1 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -26,31 +26,36 @@ include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix workflow DEEPVARIANT_CALLER { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta - fai // path(fai) - ch_case_info // channel: [ case_id ] + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // path(fasta + fai // path(fai) + ch_case_info // channel: [ case_id ] main: - DEEPVARIANT ( bam, fasta, fai ) - DEEPVARIANT.out.gvcf.collect{it[1]} - .toList() - .set { file_list } + ch_versions = Channel.empty() + + DEEPVARIANT ( bam, fasta, fai ) + DEEPVARIANT.out.gvcf.collect{it[1]} + .toList() + .set { file_list } + ch_versions = ch_versions.mix(DEEPVARIANT.out.versions) //Combine case meta with the list of gvcfs - ch_case_info.combine(file_list) - .set { ch_gvcfs } - GLNEXUS ( ch_gvcfs ) - SPLIT_MULTIALLELICS (GLNEXUS.out.bcf, fasta) - REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) - TABIX (REMOVE_DUPLICATES.out.vcf) + ch_case_info.combine(file_list) + .set { ch_gvcfs } + GLNEXUS ( ch_gvcfs ) + ch_versions = ch_versions.mix(GLNEXUS.out.versions) - emit: - vcf = REMOVE_DUPLICATES.out.vcf - tbi = TABIX.out.tbi + SPLIT_MULTIALLELICS (GLNEXUS.out.bcf, fasta) + REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES.out.versions) - // Collect versions - deepvariant_version = DEEPVARIANT.out.version - glnexus_version = GLNEXUS.out.version + TABIX (REMOVE_DUPLICATES.out.vcf) + ch_versions = ch_versions.mix(TABIX.out.versions) + + emit: + vcf = REMOVE_DUPLICATES.out.vcf + tabix = TABIX.out.tbi + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 5e9099d0..2a22006e 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -15,32 +15,30 @@ workflow PREPARE_GENOME { main: ch_fasta = file(fasta) + ch_versions = Channel.empty() - ch_bwamem2_version = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required if ( params.aligner == 'bwamem2' ) { if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { ch_bwamem2_index = file(params.bwamem2_index) } else { ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index - ch_bwamem2_version = BWAMEM2_INDEX.out.version + ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } } - ch_samtools_version = Channel.empty() if ( params.fasta_fai ) { ch_fai = file(params.fasta_fai) } else { ch_fai = SAMTOOLS_FAIDX ( ch_fasta ).fai - ch_samtools_version = SAMTOOLS_FAIDX.out.version + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } emit: fasta = ch_fasta // path: genome.fasta fai = ch_fai // path: genome.fasta.fai - samtools_version = ch_samtools_version // path: *.version.txt - bwamem2_index = ch_bwamem2_index // path: bwamem2/index - bwamem2_version = ch_bwamem2_version // path: *.version.txt + + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 0e97bc95..83e64e1d 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -20,18 +20,22 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/ workflow ALIGN_BWAMEM2 { take: reads_input // channel: [ val(meta), reads_input ] - index // channel: /path/to/bwamem2/index/ + index // channel: [ /path/to/bwamem2/index/ ] main: + ch_versions = Channel.empty() + // Map, sort, and index BWAMEM2_MEM ( reads_input, index ) + ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions) + SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) // Join the mapped bam + bai paths by their keys for stats // Get stats for each demultiplexed read pair. bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) - SAMTOOLS_STATS ( bam_sorted_indexed ) + SAMTOOLS_STATS ( bam_sorted_indexed, [] ) // Merge multiple lane samples and index SAMTOOLS_SORT.out.bam @@ -47,11 +51,13 @@ workflow ALIGN_BWAMEM2 { .set{ bams } // create a new multi-channel named bams // TODO: If there are no samples to merge, skip the process - SAMTOOLS_MERGE ( bams.multiple ) + SAMTOOLS_MERGE ( bams.multiple, [] ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) + ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions) // Marking duplicates MARKDUPLICATES ( prepared_bam ) + ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] @@ -59,8 +65,5 @@ workflow ALIGN_BWAMEM2 { marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), [ marked_bam ] ] marked_bai = MARKDUPLICATES.out.bai // channel: [ val(meta), [ marked_bai ] ] - // Collect versions - bwamem2_version = BWAMEM2_MEM.out.version // path: *.version.txt - picard_version = MARKDUPLICATES.out.version // path: *.version.txt - samtools_version = SAMTOOLS_SORT.out.version // path: *.version.txt + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 1c8a9dda..a21bc55e 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -13,8 +13,13 @@ workflow QC_BAM { fasta // path: genome.fasta main: + ch_versions = Channel.empty() + PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) + ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) emit: - multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics + multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] + + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 26974812..83ae168f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -43,11 +43,6 @@ if (!params.save_reference) { modules['samtools_faidx'].publish_files = false } -// -// MODULE: Local to the pipeline -// -include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['tsv':'']] ) - // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // @@ -66,7 +61,9 @@ multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \" // MODULE: Installed directly from nf-core/modules // include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) -include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) +include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' addParams( options: [publish_files : ['_versions.yml':'']] ) + // // SUBWORKFLOW: Consists entirely of nf-core/modules @@ -113,7 +110,7 @@ def multiqc_report = [] workflow RAREDISEASE { - ch_software_versions = Channel.empty() + ch_versions = Channel.empty() // // SUBWORKFLOW: Read in samplesheet, validate and stage input files @@ -126,10 +123,11 @@ workflow RAREDISEASE { FASTQC ( INPUT_CHECK.out.reads ) - ch_software_versions = ch_software_versions.mix(FASTQC.out.version.ifEmpty(null)) + ch_versions = ch_versions.mix(FASTQC.out.versions) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. PREPARE_GENOME ( params.fasta ) + ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { @@ -141,9 +139,7 @@ workflow RAREDISEASE { ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai - ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.bwamem2_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.picard_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(ALIGN_BWAMEM2.out.samtools_version.ifEmpty(null)) + ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } // STEP 1.5: BAM QUALITY CHECK @@ -155,26 +151,18 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. DEEPVARIANT_CALLER ( - ch_marked_bam.join(ch_marked_bai, by: [0]), - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, - INPUT_CHECK.out.ch_case_info - ) - ch_software_versions = ch_software_versions.mix(DEEPVARIANT_CALLER.out.deepvariant_version.ifEmpty(null)) + ch_marked_bam.join(ch_marked_bai, by: [0]), + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + INPUT_CHECK.out.ch_case_info + ) + ch_versions = ch_versions.mix(DEEPVARIANT_CALLER.out.versions) // // MODULE: Pipeline reporting // - ch_software_versions - .map { it -> if (it) [ it.baseName, it ] } - .groupTuple() - .map { it[1][0] } - .flatten() - .collect() - .set { ch_software_versions } - - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() + CUSTOM_DUMPSOFTWAREVERSIONS ( + ch_versions.unique().collectFile() ) // @@ -187,14 +175,13 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) + ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) MULTIQC ( ch_multiqc_files.collect() ) multiqc_report = MULTIQC.out.report.toList() - ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) } /* From dc1315179f357f3ce66819625a73d1165fee1387 Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:36:51 +0100 Subject: [PATCH 0113/1921] Add variant catalog files --- conf/genomes.config | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 4f9835b3..fc2fc66b 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,14 +11,16 @@ params { genomes { 'GRCh37' { - fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" - fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" - bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" + fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" + bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" } 'GRCh38' { - fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" - fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" + fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" + bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" } } } From 982912816eade8b8c14a0519e77807049de9095e Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:37:10 +0100 Subject: [PATCH 0114/1921] Add ExpansionHunter module parameters --- conf/modules.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 4ac9620c..8d6bf888 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -39,6 +39,9 @@ params { args = "--model_type=${params.analysis_type}" suffix = '_deepvar' } + 'expansionhunter' { + args = "" + } 'fastqc' { args = '--quiet' } From 7c735cea021ae36800ede85ed7d14f82e2b1aa6c Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:37:54 +0100 Subject: [PATCH 0115/1921] Add paths for test profile --- conf/test.config | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 136e56ad..e8c82ef0 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,5 +26,9 @@ params { input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' // Genome references - fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + //fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + fasta = "${params.local_genomes}/GRCh38.primary_assembly.genome.fa" + + // Variant catalog file + variant_catalog = 'assets/variant_catalog_grch38.json' } From 1e544040fe6c15988e752981e3dae1f2d0a147d4 Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:38:22 +0100 Subject: [PATCH 0116/1921] Install ExpansionHunter module --- .../modules/expansionhunter/functions.nf | 78 +++++++++++++++++++ .../nf-core/modules/expansionhunter/main.nf | 47 +++++++++++ .../nf-core/modules/expansionhunter/meta.yml | 50 ++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 modules/nf-core/modules/expansionhunter/functions.nf create mode 100644 modules/nf-core/modules/expansionhunter/main.nf create mode 100644 modules/nf-core/modules/expansionhunter/meta.yml diff --git a/modules/nf-core/modules/expansionhunter/functions.nf b/modules/nf-core/modules/expansionhunter/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/expansionhunter/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/expansionhunter/main.nf b/modules/nf-core/modules/expansionhunter/main.nf new file mode 100644 index 00000000..845de15d --- /dev/null +++ b/modules/nf-core/modules/expansionhunter/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process EXPANSIONHUNTER { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::expansionhunter=4.0.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/expansionhunter:4.0.2--he785bd8_0" + } else { + container "quay.io/biocontainers/expansionhunter:4.0.2--he785bd8_0" + } + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path variant_catalog + + output: + tuple val(meta), path("*.vcf"), emit: vcf + path "versions.yml" , emit: versions + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def gender = (meta.gender == 'male' || meta.gender == 1 || meta.gender == 'XY') ? "male" : "female" + """ + ExpansionHunter \\ + $options.args \\ + --reads $bam \\ + --output-prefix $prefix \\ + --reference $fasta \\ + --variant-catalog $variant_catalog \\ + --sex $gender + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/expansionhunter/meta.yml b/modules/nf-core/modules/expansionhunter/meta.yml new file mode 100644 index 00000000..17d72bb4 --- /dev/null +++ b/modules/nf-core/modules/expansionhunter/meta.yml @@ -0,0 +1,50 @@ +name: expansionhunter +description: write your description here +keywords: + - STR + - repeat_expansions +tools: + - expansionhunter: + description: A tool for estimating repeat sizes + homepage: https://github.com/Illumina/ExpansionHunter + documentation: https://github.com/Illumina/ExpansionHunter/blob/master/docs/01_Introduction.md + tool_dev_url: None + doi: "10.1093/bioinformatics/btz431" + 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 file + pattern: "*.{bam,cram}" + - fasta: + type: file + description: Reference genome + pattern: "*.{fa,fasta}" + - variant_catalog: + type: file + description: json file with repeat expansion sites to genotype + pattern: "*.{json}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', gender:'female' ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: VCF with repeat expansions + pattern: "*.{vcf}" + +authors: + - "@jemten" From 66fa9d2a8b74b6b70595caf40e4e0a4e14d43bbd Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:38:39 +0100 Subject: [PATCH 0117/1921] Add subworkflow for ExpansionHunter module --- subworkflows/local/call_repeat_expansions.nf | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 subworkflows/local/call_repeat_expansions.nf diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf new file mode 100644 index 00000000..c47a81ba --- /dev/null +++ b/subworkflows/local/call_repeat_expansions.nf @@ -0,0 +1,22 @@ +// +// Run ExpansionHunter +// + +params.expansionhunter_options = [:] + +include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' addParams( options: params.expansionhunter_options ) + +workflow CALL_REPEAT_EXPANSIONS { + take: + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // path: genome.fasta + variant_catalog // channel: /path/to/variant_catalog.json + + main: + + EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) + + emit: + vcf = EXPANSIONHUNTER.out.vcf // path: *.vcf + expansionhunter_version = EXPANSIONHUNTER.out.versions // path: versions.yml +} From 296756184691bf917eb76be41585f2421458a98d Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:39:33 +0100 Subject: [PATCH 0118/1921] Include and run subworkflow in the main workflow --- workflows/raredisease.nf | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 090b6549..fea7859c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -89,6 +89,14 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' addParams ( qualimap_bamqc_options: modules['qualimap_bamqc'] ) +// +// SUBWORKFLOW: Consists entirely of nf-core/modules +// + +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' addParams( + expansionhunter_options: modules['expansionhunter'] +) + // // SUBWORKFLOW: Consists of mix/local modules @@ -150,6 +158,14 @@ workflow RAREDISEASE { PREPARE_GENOME.out.fasta ) + // STEP 1.6: EXPANSIONHUNTER + CALL_REPEAT_EXPANSIONS ( + ch_marked_bam.join(ch_marked_bai, by: [0]), + PREPARE_GENOME.out.fasta, + params.genomes.GRCh38.variant_catalog + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.expansionhunter_version.ifEmpty(null)) + // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. DEEPVARIANT_CALLER ( From 8a3b6b4e474034a5f6dbbb7b02d5d1a25ef50732 Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 9 Nov 2021 15:40:02 +0100 Subject: [PATCH 0119/1921] Update modules.json with ExpansionHunter git_sha --- modules.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules.json b/modules.json index d5d2f2ad..a82b5a73 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,9 @@ "custom/dumpsoftwareversions": { "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, + "expansionhunter": { + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + }, "fastqc": { "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" }, From f6a4ddac7d36023f6130f5b68ef3e6fc2da4b9c7 Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Wed, 10 Nov 2021 09:46:56 +0100 Subject: [PATCH 0120/1921] Change output bai file name --- subworkflows/nf-core/align_bwamem2.nf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 83e64e1d..8649b008 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -4,6 +4,7 @@ params.bwamem2_mem_options = [:] params.samtools_idx_options = [:] +params.samtools_idx_md_options = [:] params.samtools_sort_options = [:] params.samtools_stats_options = [:] params.samtools_merge_options = [:] @@ -11,6 +12,7 @@ params.markduplicates_options = [:] include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_md_options ) include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) @@ -57,13 +59,14 @@ workflow ALIGN_BWAMEM2 { // Marking duplicates MARKDUPLICATES ( prepared_bam ) + SAMTOOLS_INDEX_MD ( MARKDUPLICATES.out.bam ) ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), [ marked_bam ] ] - marked_bai = MARKDUPLICATES.out.bai // channel: [ val(meta), [ marked_bai ] ] + marked_bai = SAMTOOLS_INDEX_MD.out.bai // channel: [ val(meta), [ marked_bai ] ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From d58cd553d9f1b8ee978c6f848f8604160f7d3d33 Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Wed, 10 Nov 2021 10:31:01 +0100 Subject: [PATCH 0121/1921] Change left padding and remove empty line --- subworkflows/local/call_repeat_expansions.nf | 8 ++++---- workflows/raredisease.nf | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index c47a81ba..7e92b202 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -8,15 +8,15 @@ include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/ workflow CALL_REPEAT_EXPANSIONS { take: - bam // channel: [ val(meta), path(bam), path(bai) ] + bam // channel: [ val(meta), path(bam), path(bai) ] fasta // path: genome.fasta - variant_catalog // channel: /path/to/variant_catalog.json + variant_catalog // channel: /path/to/variant_catalog.json main: - EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) + EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) emit: vcf = EXPANSIONHUNTER.out.vcf // path: *.vcf - expansionhunter_version = EXPANSIONHUNTER.out.versions // path: versions.yml + expansionhunter_version = EXPANSIONHUNTER.out.versions // path: versions.yml } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index fea7859c..3b5b33e4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -97,7 +97,6 @@ include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expan expansionhunter_options: modules['expansionhunter'] ) - // // SUBWORKFLOW: Consists of mix/local modules // From 09750377481bf229d0157d8ffb26b5ac10a3b1be Mon Sep 17 00:00:00 2001 From: rannick Date: Fri, 12 Nov 2021 13:53:56 +0100 Subject: [PATCH 0122/1921] Added read group to the meta map --- subworkflows/local/input_check.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 2db44ce7..266c367b 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -31,8 +31,9 @@ def create_fastq_channels(LinkedHashMap row) { def meta = [:] meta.id = row.sample meta.single_end = row.single_end.toBoolean() + //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id + meta.read_group = "\'@RG\\tID:"+row.sample + "_" + row.fastq_1.split('/')[0].split('_R1*.fastq')[0] + "_" + row.lane + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" - // TODO: add read group to the meta map def array = [] if (!file(row.fastq_1).exists()) { From f5e821abaa0cb7b296bfbf956d743d216e1b81fe Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 11:47:47 +0200 Subject: [PATCH 0123/1921] Update workflows/raredisease.nf Use utility function to decompose variant_catalog nested dictionary. Co-authored-by: Mei Wu --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3b5b33e4..c5593551 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -161,7 +161,7 @@ workflow RAREDISEASE { CALL_REPEAT_EXPANSIONS ( ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, - params.genomes.GRCh38.variant_catalog + params.variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.expansionhunter_version.ifEmpty(null)) From 13780d16170fb80fc80db4634aa0995cb3880c52 Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 11:49:34 +0200 Subject: [PATCH 0124/1921] Make comment more human readable Co-authored-by: Mei Wu --- subworkflows/local/call_repeat_expansions.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 7e92b202..2c9f05dc 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -9,7 +9,7 @@ include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/ workflow CALL_REPEAT_EXPANSIONS { take: bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path: genome.fasta + fasta // channel: /path/to/genome.fasta variant_catalog // channel: /path/to/variant_catalog.json main: From c60f91cde720c8c066fb54ace0b82c6a8758b3c3 Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 11:53:49 +0200 Subject: [PATCH 0125/1921] Create explicitely channel with ExpansionHunter version Co-authored-by: Mei Wu --- subworkflows/local/call_repeat_expansions.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 2c9f05dc..fd39e108 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -14,7 +14,10 @@ workflow CALL_REPEAT_EXPANSIONS { main: + ch_versions = Channel.empty() + EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) + ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) emit: vcf = EXPANSIONHUNTER.out.vcf // path: *.vcf From 6dff2c1c02ac157138ccd32ba07632b766520e2b Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 11:54:40 +0200 Subject: [PATCH 0126/1921] Refactor versions output and clarify comments Co-authored-by: Mei Wu --- subworkflows/local/call_repeat_expansions.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index fd39e108..fb3cc456 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -20,6 +20,6 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) emit: - vcf = EXPANSIONHUNTER.out.vcf // path: *.vcf - expansionhunter_version = EXPANSIONHUNTER.out.versions // path: versions.yml + vcf = EXPANSIONHUNTER.out.vcf // channel: [ val(meta), path(*.vcf) ] + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 68a33020f874e0bb687cd49a16e73f23ac6eb87f Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 12:52:05 +0200 Subject: [PATCH 0127/1921] Refactor subworkflow output channel name Co-authored-by: Mei Wu --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c5593551..808d4b2b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -163,7 +163,7 @@ workflow RAREDISEASE { PREPARE_GENOME.out.fasta, params.variant_catalog ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.expansionhunter_version.ifEmpty(null)) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. From 74ae7fba7e3e2adf05d171eb1a3ecb73954f9e0b Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 12:54:19 +0200 Subject: [PATCH 0128/1921] Use custom variant catalog file in testing Co-authored-by: Mei Wu --- conf/test.config | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index e8c82ef0..2e1e03ca 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,9 +26,8 @@ params { input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' // Genome references - //fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' - fasta = "${params.local_genomes}/GRCh38.primary_assembly.genome.fa" + fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' // Variant catalog file - variant_catalog = 'assets/variant_catalog_grch38.json' + variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' } From d0ccb1414618fbae13e58076aad372767564ce3d Mon Sep 17 00:00:00 2001 From: LJMesi <37740329+ljmesi@users.noreply.github.com> Date: Wed, 17 Nov 2021 11:55:12 +0100 Subject: [PATCH 0129/1921] Access variant catalog in a nested dictionary --- main.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/main.nf b/main.nf index 638f8a87..65ead423 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.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') /* ======================================================================================== From ce131ba33afd1a836076ff76709c1c2760f840e9 Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 17 Nov 2021 14:02:43 +0200 Subject: [PATCH 0130/1921] Remove tab-character Co-authored-by: Mei Wu --- subworkflows/local/call_repeat_expansions.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index fb3cc456..ba110f86 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -15,7 +15,6 @@ workflow CALL_REPEAT_EXPANSIONS { main: ch_versions = Channel.empty() - EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) From f4599b6d7fc45f6cd148b424ff76662f52a98fe2 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 17 Nov 2021 15:06:21 +0100 Subject: [PATCH 0131/1921] added subworkflow --- subworkflows/nf-core/call_structural_variants.nf | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 subworkflows/nf-core/call_structural_variants.nf diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf new file mode 100644 index 00000000..3da51460 --- /dev/null +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -0,0 +1,14 @@ +// +// A nested subworkflow to call structural variants. +// + +workflow CALL_STRUCTURAL_VARIANTS { + + take: + bam // channel: [ val(meta), path(bam) ] + fasta // channel: [ path(genome.fasta) ] + fai // channel: [ path(genome.fai) ] + + main: + ch_versions = Channel.empty() +} From 42a263cccbd39e95449ab655397a00d0165181e0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Nov 2021 14:40:08 +0100 Subject: [PATCH 0132/1921] Fix description to reflect taking in a single vcf --- bin/check_input_vcf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py index 94cd5265..c0e3b462 100755 --- a/bin/check_input_vcf.py +++ b/bin/check_input_vcf.py @@ -7,7 +7,7 @@ def parse_args(args=None): Description = "Check that input vcf file has been normalized." - Epilog = "Example usage: python check_input_vcf.py --INPUT_VCF ... --OUTPUT " + Epilog = "Example usage: python check_input_vcf.py --INPUT_VCF --OUTPUT " parser = argparse.ArgumentParser(description=Description, epilog=Epilog) parser.add_argument("--INPUT_VCF", help="Input vcf file.") From c6eb8febb0a6ca4f69687a43e6ed5da16e9a569a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 23 Nov 2021 10:37:23 +0100 Subject: [PATCH 0133/1921] Review suggestions --- conf/genomes.config | 2 +- conf/test.config | 2 +- modules/local/check_input_vcf.nf | 5 ++--- workflows/raredisease.nf | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index be6b0aea..923b7dec 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -14,7 +14,7 @@ params { fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" diff --git a/conf/test.config b/conf/test.config index 11ca6988..767eaca0 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,6 +26,6 @@ params { input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' // Genome references - fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' } diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index d2c0253a..fb48ef33 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -17,16 +17,15 @@ process CHECK_INPUT_VCF { } input: - path vcfs + path vcf output: path '*.txt' , emit: txt script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ - def input = vcfs.collect { it.toString() } """ check_input_vcf.py \\ - --INPUT_VCF ${input.join(' ')} \\ + --INPUT_VCF $vcf \\ --OUTPUT unprocessed_vcfs.txt """ } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0bd1f040..ceca3b97 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -133,7 +133,7 @@ workflow RAREDISEASE { PREPARE_GENOME ( params.fasta ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) - if (params.gnomad != '') + if (params.gnomad) { ch_gnomad_in = Channel.fromPath(params.gnomad) CHECK_VCF( From a18c42c2d0ac49f2a839d4e5a127b9ccc8f0a238 Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 23 Nov 2021 15:37:20 +0100 Subject: [PATCH 0134/1921] Add variant_catalog parameter --- nextflow_schema.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 53f3c6e8..946564e9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -95,9 +95,15 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, + "variant_catalog": { + "type": "string", + "format": "file-path", + "description": "Path to variant catalog file", + "help_text": "This parameter is mandatory for use with ExpansionHunter", + "fa_icon": "far fa-file-code" + }, "save_reference": { "type": "boolean", - "default": false, "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" From da520cd05f7c2ae1df0b99108d62c3a4b7e8a685 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 24 Nov 2021 11:24:12 +0100 Subject: [PATCH 0135/1921] added example line to swap out for real content --- subworkflows/nf-core/call_structural_variants.nf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 3da51460..96729b66 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -2,6 +2,14 @@ // A nested subworkflow to call structural variants. // +// CHANGE: swap this example line for the real subworkflow +params.bwamem2_idx_options = [:] + +// CHANGE: swap this example line for the real subworkflow +include { PREPARE_GENOME } from './prepare_genome' addParams( + options: params.bwamem2_idx_options +) + workflow CALL_STRUCTURAL_VARIANTS { take: @@ -11,4 +19,7 @@ workflow CALL_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() + + emit: + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From a6028920be580e6c54d3e8fa8f6cb36e8cf2ee1b Mon Sep 17 00:00:00 2001 From: rannick Date: Fri, 26 Nov 2021 18:22:58 +0100 Subject: [PATCH 0136/1921] Add read group compatible with samtools merge --- subworkflows/local/input_check.nf | 2 +- subworkflows/nf-core/align_bwamem2.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 266c367b..c43e648f 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -32,7 +32,7 @@ def create_fastq_channels(LinkedHashMap row) { meta.id = row.sample meta.single_end = row.single_end.toBoolean() //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id - meta.read_group = "\'@RG\\tID:"+row.sample + "_" + row.fastq_1.split('/')[0].split('_R1*.fastq')[0] + "_" + row.lane + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" + meta.read_group = "\'@RG\\tID:"+ row.sample.split('_')[0] + "_" + row.fastq_1.split('/')[-1].split('_R1_')[0] + "_" + row.lane + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" def array = [] diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 83e64e1d..59920151 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -40,8 +40,8 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index SAMTOOLS_SORT.out.bam .map{ meta, bam -> - new_meta = meta.clone() // clone to avoid overriding the global meta - new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta = meta = [:] // to avoid overriding the global meta + new_meta.id = meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename [new_meta, bam]} // end the closure to return newly modified channel .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list From cd2e4982fa2b1169282a07b5f681529a398bf82d Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 26 Nov 2021 18:42:25 +0100 Subject: [PATCH 0137/1921] Correct missassignment --- subworkflows/nf-core/align_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 59920151..f4c7f1f4 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -40,7 +40,7 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index SAMTOOLS_SORT.out.bam .map{ meta, bam -> - new_meta = meta = [:] // to avoid overriding the global meta + new_meta = [:] // to avoid overriding the global meta new_meta.id = meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename [new_meta, bam]} // end the closure to return newly modified channel .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] From 387c79938862c0d7d0d2000e9bd41a14ad136577 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 29 Nov 2021 10:17:37 +0100 Subject: [PATCH 0138/1921] Update align_bwamem2.nf --- subworkflows/nf-core/align_bwamem2.nf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index f4c7f1f4..d331a8ba 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -40,8 +40,9 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index SAMTOOLS_SORT.out.bam .map{ meta, bam -> - new_meta = [:] // to avoid overriding the global meta - new_meta.id = meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta = meta.clone() // clone to avoid overriding the global meta + new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta.read_group = [] // remove read group from cloned meta to get a single file per sample [new_meta, bam]} // end the closure to return newly modified channel .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list From 5d877082a0f52ada0e14c09ff2e6641e7523bafb Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 30 Nov 2021 15:17:39 +0100 Subject: [PATCH 0139/1921] Template update for nf-core/tools version 2.2.dev0 --- .gitattributes | 2 + .github/ISSUE_TEMPLATE/bug_report.md | 63 ------------- .github/ISSUE_TEMPLATE/bug_report.yml | 52 +++++++++++ .github/ISSUE_TEMPLATE/config.yml | 1 - .github/ISSUE_TEMPLATE/feature_request.md | 32 ------- .github/ISSUE_TEMPLATE/feature_request.yml | 11 +++ .github/workflows/awsfulltest.yml | 6 +- .github/workflows/awstest.yml | 6 +- .github/workflows/ci.yml | 12 +-- .github/workflows/linting_comment.yml | 1 + CITATIONS.md | 2 +- README.md | 11 ++- assets/multiqc_config.yaml | 2 +- bin/scrape_software_versions.py | 36 -------- conf/base.config | 3 + conf/modules.config | 55 +++++++----- docs/output.md | 2 +- docs/usage.md | 36 -------- lib/NfcoreSchema.groovy | 22 +++-- lib/NfcoreTemplate.groovy | 30 ++----- lib/WorkflowMain.groovy | 6 +- modules.json | 9 +- modules/local/functions.nf | 68 -------------- modules/local/get_software_versions.nf | 33 ------- modules/local/samplesheet_check.nf | 24 +++-- .../custom/dumpsoftwareversions/main.nf | 21 +++++ .../custom/dumpsoftwareversions/meta.yml | 34 +++++++ .../templates/dumpsoftwareversions.py | 89 +++++++++++++++++++ modules/nf-core/modules/fastqc/functions.nf | 68 -------------- modules/nf-core/modules/fastqc/main.nf | 39 ++++---- modules/nf-core/modules/fastqc/meta.yml | 7 +- modules/nf-core/modules/multiqc/functions.nf | 68 -------------- modules/nf-core/modules/multiqc/main.nf | 31 +++---- modules/nf-core/modules/multiqc/meta.yml | 7 +- nextflow.config | 27 +++--- nextflow_schema.json | 29 ------ subworkflows/local/input_check.nf | 8 +- workflows/raredisease.nf | 44 +++------ 38 files changed, 378 insertions(+), 619 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml delete mode 100755 bin/scrape_software_versions.py delete mode 100644 modules/local/functions.nf delete mode 100644 modules/local/get_software_versions.nf create mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/main.nf create mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml create mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py delete mode 100644 modules/nf-core/modules/fastqc/functions.nf delete mode 100644 modules/nf-core/modules/multiqc/functions.nf diff --git a/.gitattributes b/.gitattributes index 7fe55006..050bb120 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ *.config linguist-language=nextflow +modules/nf-core/** linguist-generated +subworkflows/nf-core/** linguist-generated diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index e4a6be5b..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -name: Bug report -about: Report something that is broken or incorrect -labels: bug ---- - - - -## Check Documentation - -I have checked the following places for your error: - -- [ ] [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) -- [ ] [nf-core/raredisease pipeline documentation](https://nf-co.re/raredisease/usage) - -## Description of the bug - - - -## Steps to reproduce - -Steps to reproduce the behaviour: - -1. Command line: -2. See error: - -## Expected behaviour - - - -## Log files - -Have you provided the following extra information/files: - -- [ ] The command used to run the pipeline -- [ ] The `.nextflow.log` file - -## System - -- Hardware: -- Executor: -- OS: -- Version - -## Nextflow Installation - -- Version: - -## Container engine - -- Engine: -- version: - -## Additional context - - diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..4c482b24 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,52 @@ + +name: Bug report +description: Report something that is broken or incorrect +labels: bug +body: + + - type: markdown + attributes: + value: | + Before you post this issue, please check the documentation: + + - [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) + - [nf-core/raredisease pipeline documentation](https://nf-co.re/raredisease/usage) + + - type: textarea + id: description + attributes: + label: Description of the bug + description: A clear and concise description of what the bug is. + validations: + required: true + + - type: textarea + id: command_used + attributes: + label: Command used and terminal output + description: Steps to reproduce the behaviour. Please paste the command you used to launch the pipeline and the output from your terminal. + render: console + placeholder: | + $ nextflow run ... + + Some output where something broke + + - type: textarea + id: files + attributes: + label: Relevant files + description: | + Please upload (drag and drop) and relevant files. Make into a `.zip` file if the extension is not allowed. + Your verbose log file `.nextflow.log` is often useful _(this is a hidden file in the directory where you launched the pipeline)_ as well as custom Nextflow configuration files. + + - type: textarea + id: system + attributes: + label: System information + description: | + * Nextflow version _(eg. 21.10.3)_ + * Hardware _(eg. HPC, Desktop, Cloud)_ + * Executor _(eg. slurm, local, awsbatch)_ + * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter or Charliecloud)_ + * OS _(eg. CentOS Linux, macOS, Linux Mint)_ + * Version of nf-core/raredisease _(eg. 1.1, 1.5, 1.8.2)_ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index cf826800..ff53045d 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,3 @@ -blank_issues_enabled: false contact_links: - name: Join nf-core url: https://nf-co.re/join diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index ec0309f3..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for the nf-core/raredisease pipeline -labels: enhancement ---- - - - -## Is your feature request related to a problem? Please describe - - - - - -## Describe the solution you'd like - - - -## Describe alternatives you've considered - - - -## Additional context - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..1ce939e3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,11 @@ +name: Feature request +description: Suggest an idea for the nf-core/raredisease pipeline +labels: enhancement +body: + - type: textarea + id: description + attributes: + label: Description of feature + description: Please describe your suggestion for a new feature. It might help to describe a problem or use case, plus any alternatives that you have considered. + validations: + required: true diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 2ca44198..cb5dba0e 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,14 +14,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Launch workflow via tower - uses: nf-core/tower-action@master + uses: nf-core/tower-action@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 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - bearer_token: ${{ secrets.TOWER_BEARER_TOKEN }} + access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} pipeline: ${{ github.repository }} revision: ${{ github.sha }} @@ -30,5 +30,5 @@ jobs: { "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-${{ github.sha }}" } - profiles: '[ "test_full", "aws_tower" ]' + profiles: test_full,aws_tower diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index c072e483..d3317389 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -11,11 +11,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Launch workflow via tower - uses: nf-core/tower-action@master + uses: nf-core/tower-action@v2 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - bearer_token: ${{ secrets.TOWER_BEARER_TOKEN }} + access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} pipeline: ${{ github.repository }} revision: ${{ github.sha }} @@ -24,5 +24,5 @@ jobs: { "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-${{ github.sha }}" } - profiles: '[ "test", "aws_tower" ]' + profiles: test,aws_tower diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f139f7c3..3ea1ca62 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,9 +8,6 @@ on: release: types: [published] -# Uncomment if we need an edge release of Nextflow again -# env: NXF_EDGE: 1 - jobs: test: name: Run workflow tests @@ -18,12 +15,13 @@ jobs: if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/raredisease') }} runs-on: ubuntu-latest env: - NXF_VER: ${{ matrix.nxf_ver }} NXF_ANSI_LOG: false strategy: matrix: - # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['21.04.0', ''] + # Nextflow versions: check pipeline minimum and latest edge version + nxf_ver: + - 'NXF_VER=21.10.3' + # - 'NXF_EDGE=1' steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -34,6 +32,8 @@ jobs: run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ + export ${{ matrix.nxf_ver }} + nextflow self-update - name: Run pipeline with test data # TODO nf-core: You can customise CI pipeline run tests as required diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 90f03c6f..44d72994 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -15,6 +15,7 @@ jobs: uses: dawidd6/action-download-artifact@v2 with: workflow: linting.yml + workflow_conclusion: completed - name: Get PR number id: pr_number diff --git a/CITATIONS.md b/CITATIONS.md index b4dad89b..2bc54565 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,7 +12,7 @@ * [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) -* [MultiQC](https://www.ncbi.nlm.nih.gov/pubmed/27312411/) +* [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 diff --git a/README.md b/README.md index 9d27eeec..2f0c8a3a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,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%A521.04.0-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.10.3-23aa62.svg?labelColor=000000)](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/) @@ -33,18 +33,21 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Quick Start -1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) +1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.10.3`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ 3. Download the pipeline and test it on a minimal dataset with a single command: ```console - nextflow run nf-core/raredisease -profile test, + nextflow run nf-core/raredisease -profile test,YOURPROFILE ``` + Note that some form of configuration will be needed so that Nextflow knows how to fetch the required software. This is usually done in the form of a config profile (`YOURPROFILE` in the example command above). You can chain multiple config profiles in a comma-separated string. + + > * The pipeline comes with config profiles called `docker`, `singularity`, `podman`, `shifter`, `charliecloud` and `conda` which instruct the pipeline to use the named tool for software management. For example, `-profile test,docker`. > * Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. - > * If you are using `singularity` then the pipeline will auto-detect this and attempt to download the Singularity images directly as opposed to performing a conversion from Docker images. If you are persistently observing issues downloading Singularity images directly due to timeout or network issues then please use the `--singularity_pull_docker_container` parameter to pull and convert the Docker image instead. Alternatively, it is highly recommended to use the [`nf-core download`](https://nf-co.re/tools/#downloading-pipelines-for-offline-use) command to pre-download all of the required containers before running the pipeline and to set the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) Nextflow options to be able to store and re-use the images from a central location for future pipeline runs. + > * If you are using `singularity` and are persistently observing issues downloading Singularity images directly due to timeout or network issues, then you can use the `--singularity_pull_docker_container` parameter to pull and convert the Docker image instead. Alternatively, you can use the [`nf-core download`](https://nf-co.re/tools/#downloading-pipelines-for-offline-use) command to download images first, before running the pipeline. Setting the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) Nextflow options enables you to store and re-use the images from a central location for future pipeline runs. > * If you are using `conda`, it is highly recommended to use the [`NXF_CONDA_CACHEDIR` or `conda.cacheDir`](https://www.nextflow.io/docs/latest/conda.html) settings to store the environments in a central location for future pipeline runs. 4. Start running your own analysis! diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 03969e51..03b23126 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -1,7 +1,7 @@ report_comment: > 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: software_versions: order: -1000 diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py deleted file mode 100755 index 4cbbae3a..00000000 --- a/bin/scrape_software_versions.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -from __future__ import print_function -import os - -results = {} -version_files = [x for x in os.listdir(".") if x.endswith(".version.txt")] -for version_file in version_files: - - software = version_file.replace(".version.txt", "") - if software == "pipeline": - software = "nf-core/raredisease" - - with open(version_file) as fin: - version = fin.read().strip() - results[software] = version - -# Dump to YAML -print( - """ -id: 'software_versions' -section_name: 'nf-core/raredisease Software Versions' -section_href: 'https://github.com/nf-core/raredisease' -plot_type: 'html' -description: 'are collected at run time from the software output.' -data: | -
-""" -) -for k, v in sorted(results.items()): - print("
{}
{}
".format(k, v)) -print("
") - -# Write out as tsv file: -with open("software_versions.tsv", "w") as f: - for k, v in sorted(results.items()): - f.write("{}\t{}\n".format(k, v)) diff --git a/conf/base.config b/conf/base.config index 03546f26..14979165 100644 --- a/conf/base.config +++ b/conf/base.config @@ -54,4 +54,7 @@ process { errorStrategy = 'retry' maxRetries = 2 } + withName:CUSTOM_DUMPSOFTWAREVERSIONS { + cache = false + } } diff --git a/conf/modules.config b/conf/modules.config index 0b1bfdec..47886995 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1,32 +1,41 @@ /* ======================================================================================== - Config file for defining DSL2 per module options + Config file for defining DSL2 per module options and publishing paths ======================================================================================== Available keys to override module options: - args = Additional arguments appended to command in module. - args2 = Second set of arguments appended to command in module (multi-tool modules). - args3 = Third set of arguments appended to command in module (multi-tool modules). - publish_dir = Directory to publish results. - publish_by_meta = Groovy list of keys available in meta map to append as directories to "publish_dir" path - If publish_by_meta = true - Value of ${meta['id']} is appended as a directory to "publish_dir" path - If publish_by_meta = ['id', 'custompath'] - If "id" is in meta map and "custompath" isn't then "${meta['id']}/custompath/" - is appended as a directory to "publish_dir" path - If publish_by_meta = false / null - No directories are appended to "publish_dir" path - publish_files = Groovy map where key = "file_ext" and value = "directory" to publish results for that file extension - The value of "directory" is appended to the standard "publish_dir" path as defined above. - If publish_files = null (unspecified) - All files are published. - If publish_files = false - No files are published. - suffix = File name suffix for output files. + 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.suffix = File name suffix for output files. ---------------------------------------------------------------------------------------- */ -params { - modules { - 'fastqc' { - args = "--quiet" - } - 'multiqc' { - args = "" - } +process { + + publishDir = [ + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + + withName: SAMPLESHEET_CHECK { + publishDir = [ + path: { "${params.outdir}/pipeline_info" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: FASTQC { + ext.args = '--quiet' } + + withName: CUSTOM_DUMPSOFTWAREVERSIONS { + publishDir = [ + path: { "${params.outdir}/pipeline_info" }, + mode: 'copy', + pattern: '*_versions.yml' + ] + } + } diff --git a/docs/output.md b/docs/output.md index 0a26e7be..8e94226e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -60,7 +60,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ * `pipeline_info/` * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.tsv`. + * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. diff --git a/docs/usage.md b/docs/usage.md index 8d3aaaa3..1f94372c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -181,42 +181,6 @@ process { > **NB:** We specify just the process name i.e. `STAR_ALIGN` in the config file and not the full task name string that is printed to screen in the error message or on the terminal whilst the pipeline is running i.e. `RNASEQ:ALIGN_STAR:STAR_ALIGN`. You may get a warning suggesting that the process selector isn't recognised but you can ignore that if the process name has been specified correctly. This is something that needs to be fixed upstream in core Nextflow. -### Tool-specific options - -For the ultimate flexibility, we have implemented and are using Nextflow DSL2 modules in a way where it is possible for both developers and users to change tool-specific command-line arguments (e.g. providing an additional command-line argument to the `STAR_ALIGN` process) as well as publishing options (e.g. saving files produced by the `STAR_ALIGN` process that aren't saved by default by the pipeline). In the majority of instances, as a user you won't have to change the default options set by the pipeline developer(s), however, there may be edge cases where creating a simple custom config file can improve the behaviour of the pipeline if for example it is failing due to a weird error that requires setting a tool-specific parameter to deal with smaller / larger genomes. - -The command-line arguments passed to STAR in the `STAR_ALIGN` module are a combination of: - -* Mandatory arguments or those that need to be evaluated within the scope of the module, as supplied in the [`script`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L49-L55) section of the module file. - -* An [`options.args`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L56) string of non-mandatory parameters that is set to be empty by default in the module but can be overwritten when including the module in the sub-workflow / workflow context via the `addParams` Nextflow option. - -The nf-core/rnaseq pipeline has a sub-workflow (see [terminology](https://github.com/nf-core/modules#terminology)) specifically to align reads with STAR and to sort, index and generate some basic stats on the resulting BAM files using SAMtools. At the top of this file we import the `STAR_ALIGN` module via the Nextflow [`include`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/subworkflows/nf-core/align_star.nf#L10) keyword and by default the options passed to the module via the `addParams` option are set as an empty Groovy map [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/subworkflows/nf-core/align_star.nf#L5); this in turn means `options.args` will be set to empty by default in the module file too. This is an intentional design choice and allows us to implement well-written sub-workflows composed of a chain of tools that by default run with the bare minimum parameter set for any given tool in order to make it much easier to share across pipelines and to provide the flexibility for users and developers to customise any non-mandatory arguments. - -When including the sub-workflow above in the main pipeline workflow we use the same `include` statement, however, we now have the ability to overwrite options for each of the tools in the sub-workflow including the [`align_options`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/workflows/rnaseq.nf#L225) variable that will be used specifically to overwrite the optional arguments passed to the `STAR_ALIGN` module. In this case, the options to be provided to `STAR_ALIGN` have been assigned sensible defaults by the developer(s) in the pipeline's [`modules.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/modules.config#L70-L74) and can be accessed and customised in the [workflow context](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/workflows/rnaseq.nf#L201-L204) too before eventually passing them to the sub-workflow as a Groovy map called `star_align_options`. These options will then be propagated from `workflow -> sub-workflow -> module`. - -As mentioned at the beginning of this section it may also be necessary for users to overwrite the options passed to modules to be able to customise specific aspects of the way in which a particular tool is executed by the pipeline. Given that all of the default module options are stored in the pipeline's `modules.config` as a [`params` variable](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/modules.config#L24-L25) it is also possible to overwrite any of these options via a custom config file. - -Say for example we want to append an additional, non-mandatory parameter (i.e. `--outFilterMismatchNmax 16`) to the arguments passed to the `STAR_ALIGN` module. Firstly, we need to copy across the default `args` specified in the [`modules.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/modules.config#L71) and create a custom config file that is a composite of the default `args` as well as the additional options you would like to provide. This is very important because Nextflow will overwrite the default value of `args` that you provide via the custom config. - -As you will see in the example below, we have: - -* appended `--outFilterMismatchNmax 16` to the default `args` used by the module. -* changed the default `publish_dir` value to where the files will eventually be published in the main results directory. -* appended `'bam':''` to the default value of `publish_files` so that the BAM files generated by the process will also be saved in the top-level results directory for the module. Note: `'out':'log'` means any file/directory ending in `out` will now be saved in a separate directory called `my_star_directory/log/`. - -```nextflow -params { - modules { - 'star_align' { - args = "--quantMode TranscriptomeSAM --twopassMode Basic --outSAMtype BAM Unsorted --readFilesCommand zcat --runRNGseed 0 --outFilterMultimapNmax 20 --alignSJDBoverhangMin 1 --outSAMattributes NH HI AS NM MD --quantTranscriptomeBan Singleend --outFilterMismatchNmax 16" - publish_dir = "my_star_directory" - publish_files = ['out':'log', 'tab':'log', 'bam':''] - } - } -} -``` - ### Updating containers The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 8d6920dd..5f681078 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -105,9 +105,13 @@ class NfcoreSchema { // 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'] + } } } @@ -155,7 +159,7 @@ class NfcoreSchema { println '' log.error 'ERROR: Validation of pipeline parameters failed!' JSONObject exceptionJSON = e.toJSON() - printExceptions(exceptionJSON, params_json, log) + printExceptions(exceptionJSON, params_json, log, enums) println '' has_error = true } @@ -260,13 +264,12 @@ class NfcoreSchema { // Get pipeline parameters defined in JSON Schema def Map params_summary = [:] - def blacklist = ['hostnames'] 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) && !blacklist.contains(param)) { + 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 @@ -330,7 +333,7 @@ class NfcoreSchema { // // Loop over nested exceptions and print the causingException // - private static void printExceptions(ex_json, params_json, log) { + 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/ @@ -346,7 +349,16 @@ class NfcoreSchema { else { def param = ex_json['pointerToViolation'] - ~/^#\// def param_val = params_json[param].toString() - log.error "* --${param}: ${ex_json['message']} (${param_val})" + 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) { diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 44551e0a..06499409 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -19,27 +19,16 @@ class NfcoreTemplate { } // - // Check params.hostnames + // Warn if a -profile or Nextflow config has not been provided to run the pipeline // - public static void hostName(workflow, params, log) { - Map colors = logColours(params.monochrome_logs) - if (params.hostnames) { - try { - def hostname = "hostname".execute().text.trim() - params.hostnames.each { prof, hnames -> - hnames.each { hname -> - if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.info "=${colors.yellow}====================================================${colors.reset}=\n" + - "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + - " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + - " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + - "=${colors.yellow}====================================================${colors.reset}=" - } - } - } - } catch (Exception e) { - log.warn "[$workflow.manifest.name] Could not determine 'hostname' - skipping check. Reason: ${e.message}." - } + public static void checkConfigProvided(workflow, log) { + if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { + log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + + "This will be dependent on your local compute enviroment but can be acheived via one or more of the following:\n" + + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + + "Please refer to the quick start section and usage docs for the pipeline.\n " } } @@ -168,7 +157,6 @@ class NfcoreTemplate { log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" } } else { - hostName(workflow, params, log) log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" } } diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 089c7f7d..730a0565 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -61,6 +61,9 @@ class WorkflowMain { // Print parameter summary log to screen log.info paramsSummaryLog(workflow, params, log) + // Check that a -profile or Nextflow config has been provided to run the pipeline + NfcoreTemplate.checkConfigProvided(workflow, log) + // Check that conda channels are set-up correctly if (params.enable_conda) { Utils.checkCondaChannels(log) @@ -69,9 +72,6 @@ class WorkflowMain { // Check AWS batch settings NfcoreTemplate.awsBatch(workflow, params) - // Check the hostnames against configured profiles - NfcoreTemplate.hostName(workflow, params, log) - // Check input has been provided if (!params.input) { log.error "Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'" diff --git a/modules.json b/modules.json index 0494c19e..3a3ca7b1 100644 --- a/modules.json +++ b/modules.json @@ -3,12 +3,15 @@ "homePage": "https://github.com/nf-core/raredisease", "repos": { "nf-core/modules": { + "custom/dumpsoftwareversions": { + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + }, "fastqc": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "multiqc": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" } } } -} +} \ No newline at end of file diff --git a/modules/local/functions.nf b/modules/local/functions.nf deleted file mode 100644 index da9da093..00000000 --- a/modules/local/functions.nf +++ /dev/null @@ -1,68 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf deleted file mode 100644 index 7961d64b..00000000 --- a/modules/local/get_software_versions.nf +++ /dev/null @@ -1,33 +0,0 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -process GET_SOFTWARE_VERSIONS { - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } - - cache false - - input: - path versions - - output: - path "software_versions.tsv" , emit: tsv - path 'software_versions_mqc.yaml', emit: yaml - - script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ - """ - echo $workflow.manifest.version > pipeline.version.txt - echo $workflow.nextflow.version > nextflow.version.txt - scrape_software_versions.py &> software_versions_mqc.yaml - """ -} diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 1e1f8350..d2c6d889 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -1,31 +1,27 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - process SAMPLESHEET_CHECK { tag "$samplesheet" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.8.3' : + 'quay.io/biocontainers/python:3.8.3' }" input: path samplesheet output: - path '*.csv' + path '*.csv' , emit: csv + path "versions.yml", emit: versions script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ """ check_samplesheet.py \\ $samplesheet \\ samplesheet.valid.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + python: \$(python --version | sed 's/Python //g') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf new file mode 100644 index 00000000..934bb467 --- /dev/null +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf @@ -0,0 +1,21 @@ +process CUSTOM_DUMPSOFTWAREVERSIONS { + label 'process_low' + + // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container + conda (params.enable_conda ? "bioconda::multiqc=1.11" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0' }" + + input: + path versions + + output: + path "software_versions.yml" , emit: yml + path "software_versions_mqc.yml", emit: mqc_yml + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + template 'dumpsoftwareversions.py' +} diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml new file mode 100644 index 00000000..5b5b8a60 --- /dev/null +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml @@ -0,0 +1,34 @@ +name: custom_dumpsoftwareversions +description: Custom module used to dump software versions within the nf-core pipeline template +keywords: + - custom + - version +tools: + - custom: + description: Custom module used to dump software versions within the nf-core pipeline template + homepage: https://github.com/nf-core/tools + documentation: https://github.com/nf-core/tools + licence: ['MIT'] +input: + - versions: + type: file + description: YML file containing software versions + pattern: "*.yml" + +output: + - yml: + type: file + description: Standard YML file containing software versions + pattern: "software_versions.yml" + - mqc_yml: + type: file + description: MultiQC custom content YML file containing software versions + pattern: "software_versions_mqc.yml" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@drpatelh" + - "@grst" diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py new file mode 100644 index 00000000..d1390392 --- /dev/null +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python + +import yaml +import platform +from textwrap import dedent + + +def _make_versions_html(versions): + html = [ + dedent( + """\\ + + + + + + + + + + """ + ) + ] + for process, tmp_versions in sorted(versions.items()): + html.append("") + for i, (tool, version) in enumerate(sorted(tmp_versions.items())): + html.append( + dedent( + f"""\\ + + + + + + """ + ) + ) + html.append("") + html.append("
Process Name Software Version
{process if (i == 0) else ''}{tool}{version}
") + return "\\n".join(html) + + +versions_this_module = {} +versions_this_module["${task.process}"] = { + "python": platform.python_version(), + "yaml": yaml.__version__, +} + +with open("$versions") as f: + versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module + +# aggregate versions by the module name (derived from fully-qualified process name) +versions_by_module = {} +for process, process_versions in versions_by_process.items(): + module = process.split(":")[-1] + try: + assert versions_by_module[module] == process_versions, ( + "We assume that software versions are the same between all modules. " + "If you see this error-message it means you discovered an edge-case " + "and should open an issue in nf-core/tools. " + ) + except KeyError: + versions_by_module[module] = process_versions + +versions_by_module["Workflow"] = { + "Nextflow": "$workflow.nextflow.version", + "$workflow.manifest.name": "$workflow.manifest.version", +} + +versions_mqc = { + "id": "software_versions", + "section_name": "${workflow.manifest.name} Software Versions", + "section_href": "https://github.com/${workflow.manifest.name}", + "plot_type": "html", + "description": "are collected at run time from the software output.", + "data": _make_versions_html(versions_by_module), +} + +with open("software_versions.yml", "w") as f: + yaml.dump(versions_by_module, f, default_flow_style=False) +with open("software_versions_mqc.yml", "w") as f: + yaml.dump(versions_mqc, f, default_flow_style=False) + +with open("versions.yml", "w") as f: + yaml.dump(versions_this_module, f, default_flow_style=False) diff --git a/modules/nf-core/modules/fastqc/functions.nf b/modules/nf-core/modules/fastqc/functions.nf deleted file mode 100644 index da9da093..00000000 --- a/modules/nf-core/modules/fastqc/functions.nf +++ /dev/null @@ -1,68 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index 39c327b2..673a00b8 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process FASTQC { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0" - } else { - container "quay.io/biocontainers/fastqc:0.11.9--0" - } + 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' }" input: tuple val(meta), path(reads) @@ -24,24 +13,32 @@ process FASTQC { output: tuple val(meta), path("*.html"), emit: html tuple val(meta), path("*.zip") , emit: zip - path "*.version.txt" , emit: version + path "versions.yml" , emit: versions script: + def args = task.ext.args ?: '' // Add soft-links to original FastQs for consistent naming in pipeline - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz - fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + fastqc $args --threads $task.cpus ${prefix}.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS """ } else { """ [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz - fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + fastqc $args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS """ } } diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml index 8eb9953d..b09553a3 100644 --- a/modules/nf-core/modules/fastqc/meta.yml +++ b/modules/nf-core/modules/fastqc/meta.yml @@ -15,6 +15,7 @@ tools: overrepresented sequences. homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ + licence: ['GPL-2.0-only'] input: - meta: type: map @@ -40,10 +41,10 @@ output: type: file description: FastQC report archive pattern: "*_{fastqc.zip}" - - version: + - versions: type: file - description: File containing software version - pattern: "*.{version.txt}" + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/modules/multiqc/functions.nf b/modules/nf-core/modules/multiqc/functions.nf deleted file mode 100644 index da9da093..00000000 --- a/modules/nf-core/modules/multiqc/functions.nf +++ /dev/null @@ -1,68 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index da780800..3dceb162 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -1,21 +1,10 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process MULTIQC { label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? "bioconda::multiqc=1.10.1" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.10.1--py_0" - } else { - container "quay.io/biocontainers/multiqc:1.10.1--py_0" - } + conda (params.enable_conda ? 'bioconda::multiqc=1.11' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0' }" input: path multiqc_files @@ -24,12 +13,16 @@ process MULTIQC { path "*multiqc_report.html", emit: report path "*_data" , emit: data path "*_plots" , optional:true, emit: plots - path "*.version.txt" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) + def args = task.ext.args ?: '' """ - multiqc -f $options.args . - multiqc --version | sed -e "s/multiqc, version //g" > ${software}.version.txt + multiqc -f $args . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS """ } diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml index 532a8bb1..63c75a45 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -11,6 +11,7 @@ tools: It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ + licence: ['GPL-3.0-or-later'] input: - multiqc_files: type: file @@ -29,10 +30,10 @@ output: type: file description: Plots created by MultiQC pattern: "*_data" - - version: + - versions: type: file - description: File containing software version - pattern: "*.{version.txt}" + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/nextflow.config b/nextflow.config index 329e093e..efc8e013 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,7 +26,6 @@ params { // Boilerplate options outdir = './results' tracedir = "${params.outdir}/pipeline_info" - publish_dir_mode = 'copy' email = null email_on_fail = null plaintext_email = false @@ -34,14 +33,12 @@ params { help = false validate_params = true show_hidden_params = false - schema_ignore_params = 'genomes,modules' + schema_ignore_params = 'genomes' enable_conda = false - singularity_pull_docker_container = false // Config options custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - hostnames = [:] config_profile_description = null config_profile_contact = null config_profile_url = null @@ -58,9 +55,6 @@ params { // Load base.config by default for all pipelines includeConfig 'conf/base.config' -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' - // Load nf-core custom profiles from different Institutions try { includeConfig "${params.custom_config_base}/nfcore_custom.config" @@ -68,13 +62,6 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} - profiles { debug { process.beforeScript = 'echo $HOSTNAME' } conda { @@ -126,6 +113,13 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } +// Load igenomes.config if required +if (!params.igenomes_ignore) { + includeConfig 'conf/igenomes.config' +} else { + params.genomes = [:] +} + // Export these variables to prevent local Python/R libraries from conflicting with those in the container env { PYTHONNOUSERSITE = 1 @@ -160,10 +154,13 @@ manifest { homePage = 'https://github.com/nf-core/raredisease' description = 'call and score variants from WGS/WES of rare disease patients' mainScript = 'main.nf' - nextflowVersion = '!>=21.04.0' + nextflowVersion = '!>=21.10.3' version = '1.0dev' } +// Load modules.config for DSL2 module specific options +includeConfig 'conf/modules.config' + // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { diff --git a/nextflow_schema.json b/nextflow_schema.json index 60fdb051..068a9809 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -104,12 +104,6 @@ "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", "fa_icon": "fas fa-users-cog" }, - "hostnames": { - "type": "string", - "description": "Institutional configs hostname.", - "hidden": true, - "fa_icon": "fas fa-users-cog" - }, "config_profile_name": { "type": "string", "description": "Institutional config name.", @@ -184,22 +178,6 @@ "fa_icon": "fas fa-question-circle", "hidden": true }, - "publish_dir_mode": { - "type": "string", - "default": "copy", - "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" - ], - "hidden": true - }, "email_on_fail": { "type": "string", "description": "Email address for completion summary, only when pipeline fails.", @@ -260,13 +238,6 @@ "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter.", "hidden": true, "fa_icon": "fas fa-bacon" - }, - "singularity_pull_docker_container": { - "type": "boolean", - "description": "Instead of directly downloading Singularity images for use with Singularity, force the workflow to pull and convert Docker containers instead.", - "hidden": true, - "fa_icon": "fas fa-toolbox", - "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." } } } diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index b664bc8c..cddcbb3c 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -2,9 +2,7 @@ // Check input samplesheet and get read channels // -params.options = [:] - -include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' addParams( options: params.options ) +include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' workflow INPUT_CHECK { take: @@ -12,12 +10,14 @@ workflow INPUT_CHECK { main: SAMPLESHEET_CHECK ( samplesheet ) + .csv .splitCsv ( header:true, sep:',' ) .map { create_fastq_channels(it) } .set { reads } emit: - reads // channel: [ val(meta), [ reads ] ] + reads // channel: [ val(meta), [ reads ] ] + versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3b6af916..f6369ff6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -32,18 +32,10 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi ======================================================================================== */ -// Don't overwrite global params.modules, create a copy instead and use that within the main script. -def modules = params.modules.clone() - -// -// MODULE: Local to the pipeline -// -include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['tsv':'']] ) - // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) +include { INPUT_CHECK } from '../subworkflows/local/input_check' /* ======================================================================================== @@ -51,14 +43,12 @@ include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( opti ======================================================================================== */ -def multiqc_options = modules['multiqc'] -multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \"$params.multiqc_title\""]) : '' - // // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) -include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) +include { FASTQC } from '../modules/nf-core/modules/fastqc/main' +include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' /* ======================================================================================== @@ -71,7 +61,7 @@ def multiqc_report = [] workflow RAREDISEASE { - ch_software_versions = Channel.empty() + ch_versions = Channel.empty() // // SUBWORKFLOW: Read in samplesheet, validate and stage input files @@ -79,6 +69,7 @@ workflow RAREDISEASE { INPUT_CHECK ( ch_input ) + ch_versions = ch_versions.mix(INPUT_CHECK.out.versions) // // MODULE: Run FastQC @@ -86,21 +77,10 @@ workflow RAREDISEASE { FASTQC ( INPUT_CHECK.out.reads ) - ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - // - // MODULE: Pipeline reporting - // - ch_software_versions - .map { it -> if (it) [ it.baseName, it ] } - .groupTuple() - .map { it[1][0] } - .flatten() - .collect() - .set { ch_software_versions } - - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() + CUSTOM_DUMPSOFTWAREVERSIONS ( + ch_versions.unique().collectFile(name: 'collated_versions.yml') ) // @@ -113,14 +93,14 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) + ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) MULTIQC ( ch_multiqc_files.collect() ) - multiqc_report = MULTIQC.out.report.toList() - ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) + multiqc_report = MULTIQC.out.report.toList() + ch_versions = ch_versions.mix(MULTIQC.out.versions) } /* From f44fec85382c57db5ff3bdbbbcf95ae2ddc48cd4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 3 Dec 2021 14:17:01 +0100 Subject: [PATCH 0140/1921] Refactor check_input_vcf.py --- bin/check_input_vcf.py | 6 ++---- modules/local/check_input_vcf.nf | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py index c0e3b462..9109605a 100755 --- a/bin/check_input_vcf.py +++ b/bin/check_input_vcf.py @@ -24,16 +24,14 @@ def check_vcf(file_in, file_out): with open(file_out,'w') as out: if file_in.endswith(".gz"): + base = os.path.basename(file_in).rsplit(".",2)[0] + out.write("id,filepath,processed\n") with gzip.open(file_in,'rt') as vcf: for line in vcf: if line.startswith("##bcftools_norm"): - base = os.path.basename(file_in).rsplit(".",2)[0] - out.write("id,filepath,processed\n") out.write(base + "," + os.path.abspath(file_in) + ",yes\n") break elif not line.startswith("#"): - base = os.path.basename(file_in).rsplit(".",2)[0] - out.write("id,filepath,processed\n") out.write(base + "," + os.path.abspath(file_in) + ",no\n") break else: diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index fb48ef33..b9bb2f0e 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -26,6 +26,6 @@ process CHECK_INPUT_VCF { """ check_input_vcf.py \\ --INPUT_VCF $vcf \\ - --OUTPUT unprocessed_vcfs.txt + --OUTPUT checked_vcfs.txt """ } From e7b6eede62bdfd7e1cf07c9f61ea7738a872c429 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 7 Dec 2021 12:01:02 +0100 Subject: [PATCH 0141/1921] soooomewhat updated subworkflws --- conf/modules.config | 31 +++------------ modules/nf-core/modules/multiqc/main.nf | 26 ------------- subworkflows/local/call_repeat_expansions.nf | 2 +- subworkflows/local/deepvariant_caller.nf | 24 ++++++------ subworkflows/local/input_check.nf | 5 +-- subworkflows/local/prepare_genome.nf | 8 ++-- subworkflows/local/prepare_vcf.nf | 40 ++++++++++---------- subworkflows/nf-core/align_bwamem2.nf | 28 +++++++------- subworkflows/nf-core/qc_bam.nf | 8 ++-- 9 files changed, 61 insertions(+), 111 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 690e5608..4f0d378e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -12,7 +12,6 @@ process { - // Generic process options for all workflows publishDir = [ path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: 'copy', @@ -26,11 +25,7 @@ process { pattern: '*_versions.yml' ] } - - // raredisease.nf includes - // Local Subworkflows - // INPUT_CHECK withName: SAMPLESHEET_CHECK { publishDir = [ @@ -39,28 +34,25 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // PREPARE_GENOME withName: BWAMEM2_INDEX { publishDir = [ path: { "${params.outdir}/references" }, mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.save_reference, pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" ] } - withName: SAMTOOLS_FAIDX { publishDir = [ path: { "${params.outdir}/references" }, mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.save_reference, pattern: "*fai" ] } - // CALL_SNV_DEEPVARIANT withName: DEEPVARIANT { ext.args = "--model_type=${params.analysis_type}" @@ -71,7 +63,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: SPLIT_MULTIALLELICS { ext.args = '--output-type z --multiallelics -both' publishDir = [ @@ -80,7 +71,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: REMOVE_DUPLICATES { ext.args = '--output-type z --rm-dup none' publishDir = [ @@ -89,7 +79,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: GLNEXUS { ext.args = '--config DeepVariant_unfiltered' publishDir = [ @@ -97,14 +86,12 @@ process { enabled: false ] } - withName: TABIX { publishDir = [ path: { "${params.outdir}/deepvariant" }, enabled: false ] } - // CALL_REPEAT_EXPANSIONS withName: EXPANSIONHUNTER { publishDir = [ @@ -113,9 +100,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // NF-CORE Subworkflows - // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { ext.args = '-M -K 100000000' @@ -126,14 +111,12 @@ process { enabled: false ] } - withName: SAMTOOLS_INDEX { publishDir = [ path: { "${params.outdir}/samtools" }, enabled: false ] } - withName: SAMTOOLS_INDEX_MD { publishDir = [ path: { "${params.outdir}/markduplicates" }, @@ -141,7 +124,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: SAMTOOLS_SORT { ext.suffix = '_sorted' publishDir = [ @@ -149,7 +131,6 @@ process { enabled: false ] } - withName: SAMTOOLS_STATS { ext.args = '-s --remove-overlaps' publishDir = [ @@ -158,14 +139,12 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SAMTOOLS_MERGE { publishDir = [ path: { "${params.outdir}/samtools" }, enabled: false ] } - withName: '*MARKDUPLICATES' { ext.args = '--CREATE_INDEX' ext.suffix = '_sorted' @@ -175,7 +154,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // QC_BAM withName: '*COLLECTMULTIPLEMETRICS' { publish_dir = [ @@ -184,7 +162,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'QUALIMAP_BAMQC' { publish_dir = [ path: { "${params.outdir}/bamqc_qualimap" }, @@ -192,9 +169,11 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // nf-core modules withName: FASTQC { ext.args = '--quiet' + publishDir = [ + path: { "${params.outdir}/reports/fastqc/${meta.id}" } + ] } } diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index c3682e42..3dceb162 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -1,27 +1,10 @@ -<<<<<<< HEAD -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -======= ->>>>>>> TEMPLATE process MULTIQC { label 'process_medium' conda (params.enable_conda ? 'bioconda::multiqc=1.11' : null) -<<<<<<< HEAD - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0" - } else { - container "quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0" - } -======= container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0' : 'quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0' }" ->>>>>>> TEMPLATE input: path multiqc_files @@ -33,14 +16,6 @@ process MULTIQC { path "versions.yml" , emit: versions script: -<<<<<<< HEAD - """ - multiqc -f $options.args . - - cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$( multiqc --version | sed -e "s/multiqc, version //g" ) -======= def args = task.ext.args ?: '' """ multiqc -f $args . @@ -48,7 +23,6 @@ process MULTIQC { cat <<-END_VERSIONS > versions.yml "${task.process}": multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) ->>>>>>> TEMPLATE END_VERSIONS """ } diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index ba110f86..ec5e573f 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -2,7 +2,7 @@ // Run ExpansionHunter // -params.expansionhunter_options = [:] +//params.expansionhunter_options = [:] include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' addParams( options: params.expansionhunter_options ) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/deepvariant_caller.nf index 9cc273e5..c7621d7e 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/deepvariant_caller.nf @@ -2,21 +2,21 @@ // A variant caller workflow for deepvariant // -params.split_multiallelics_options = [:] -params.rm_duplicates_options = [:] -params.deepvariant_options = [:] -params.glnexus_options = [:] -params.tabix_options = [:] +// params.split_multiallelics_options = [:] +// params.rm_duplicates_options = [:] +// params.deepvariant_options = [:] +// params.glnexus_options = [:] +// params.tabix_options = [:] -def split_multiallelics_glnexus = params.split_multiallelics_options.clone() -split_multiallelics_glnexus.publish_files = "false" +// def split_multiallelics_glnexus = params.split_multiallelics_options.clone() +// split_multiallelics_glnexus.publish_files = "false" -def rm_duplicates_glnexus = params.rm_duplicates_options.clone() -rm_duplicates_glnexus.publish_dir = "glnexus/" -rm_duplicates_glnexus.suffix = "_split_rmdup" +// def rm_duplicates_glnexus = params.rm_duplicates_options.clone() +// rm_duplicates_glnexus.publish_dir = "glnexus/" +// rm_duplicates_glnexus.suffix = "_split_rmdup" -def tabix_glnexus = params.tabix_options.clone() -tabix_glnexus.publish_dir = "glnexus/" +// def tabix_glnexus = params.tabix_options.clone() +// tabix_glnexus.publish_dir = "glnexus/" include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_glnexus ) include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_glnexus ) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 0fbbb948..146cc93b 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -20,14 +20,11 @@ workflow INPUT_CHECK { samples = sheet.map { create_samples_channel(it) } emit: -<<<<<<< HEAD ch_case_info // channel: [ case_id ] reads // channel: [ val(meta), [ reads ] ] samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] -======= - reads // channel: [ val(meta), [ reads ] ] + versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] ->>>>>>> TEMPLATE } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 2a22006e..28405f03 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -3,11 +3,11 @@ // -params.bwamem2_idx_options = [:] -params.samtools_faidx_options = [:] +// params.bwamem2_idx_options = [:] +// params.samtools_faidx_options = [:] -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' addParams( options: params.bwamem2_idx_options ) -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' addParams( options: params.samtools_faidx_options ) +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' //addParams( options: params.bwamem2_idx_options ) +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' //addParams( options: params.samtools_faidx_options ) workflow PREPARE_GENOME { take: diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 5bf425a5..b8b7f481 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -2,26 +2,26 @@ // Prepare reference vcf files // -params.split_multiallelics_options = [:] -params.rm_duplicates_options = [:] -params.vcf_options = [:] -params.tabix_options = [:] - -def split_multiallelics_vcf_check = params.split_multiallelics_options.clone() -split_multiallelics_vcf_check.publish_files = "false" -split_multiallelics_vcf_check.suffix = "_split" - -def rm_duplicates_vcf_check = params.rm_duplicates_options.clone() -rm_duplicates_vcf_check.publish_dir = "vcf_check/" -rm_duplicates_vcf_check.suffix = "_split_rmdup" - -def tabix_vcf_check = params.tabix_options.clone() -tabix_vcf_check.publish_dir = "vcf_check/" - -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_vcf_check ) -include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_vcf_check ) -include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' addParams( options: params.vcf_options ) -include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' addParams( options: tabix_vcf_check ) +// params.split_multiallelics_options = [:] +// params.rm_duplicates_options = [:] +// params.vcf_options = [:] +// params.tabix_options = [:] + +// def split_multiallelics_vcf_check = params.split_multiallelics_options.clone() +// split_multiallelics_vcf_check.publish_files = "false" +// split_multiallelics_vcf_check.suffix = "_split" + +// def rm_duplicates_vcf_check = params.rm_duplicates_options.clone() +// rm_duplicates_vcf_check.publish_dir = "vcf_check/" +// rm_duplicates_vcf_check.suffix = "_split_rmdup" + +// def tabix_vcf_check = params.tabix_options.clone() +// tabix_vcf_check.publish_dir = "vcf_check/" + +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: split_multiallelics_vcf_check ) +include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: rm_duplicates_vcf_check ) +include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' //addParams( options: params.vcf_options ) +include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' //addParams( options: tabix_vcf_check ) workflow CHECK_VCF { take: diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 8649b008..adbbe27b 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -2,21 +2,21 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -params.bwamem2_mem_options = [:] -params.samtools_idx_options = [:] -params.samtools_idx_md_options = [:] -params.samtools_sort_options = [:] -params.samtools_stats_options = [:] -params.samtools_merge_options = [:] -params.markduplicates_options = [:] +// params.bwamem2_mem_options = [:] +// params.samtools_idx_options = [:] +// params.samtools_idx_md_options = [:] +// params.samtools_sort_options = [:] +// params.samtools_stats_options = [:] +// params.samtools_merge_options = [:] +// params.markduplicates_options = [:] -include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' addParams( options: params.bwamem2_mem_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_options ) -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_idx_md_options ) -include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams(options: params.samtools_sort_options ) -include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams(options: params.samtools_stats_options ) -include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' addParams( options: params.samtools_merge_options ) -include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' addParams(options: params.markduplicates_options ) +include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' //addParams( options: params.bwamem2_mem_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' //addParams( options: params.samtools_idx_options ) +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' //addParams( options: params.samtools_idx_md_options ) +include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' //addParams(options: params.samtools_sort_options ) +include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' //addParams(options: params.samtools_stats_options ) +include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' //addParams( options: params.samtools_merge_options ) +include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' //addParams(options: params.markduplicates_options ) workflow ALIGN_BWAMEM2 { diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index f2437872..2e00c3bc 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -2,11 +2,11 @@ // A quality check subworkflow for processed bams. // -params.picard_collectmultiplemetrics_options = [:] -params.qualimap_bamqc_options = [:] +// params.picard_collectmultiplemetrics_options = [:] +// params.qualimap_bamqc_options = [:] -include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' addParams( options: params.picard_collectmultiplemetrics_options ) -include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' addParams( options: params.qualimap_bamqc_options ) +include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' //addParams( options: params.picard_collectmultiplemetrics_options ) +include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' //addParams( options: params.qualimap_bamqc_options ) workflow QC_BAM { From 86e7c29c8e217d1790549fdfe5cee24a9b1dadf3 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 7 Dec 2021 12:02:54 +0100 Subject: [PATCH 0142/1921] updated modules --- modules.json | 34 ++++---- .../modules/bcftools/norm/functions.nf | 78 ------------------- modules/nf-core/modules/bcftools/norm/main.nf | 26 ++----- .../modules/bwamem2/index/functions.nf | 78 ------------------- modules/nf-core/modules/bwamem2/index/main.nf | 24 ++---- .../nf-core/modules/bwamem2/mem/functions.nf | 78 ------------------- modules/nf-core/modules/bwamem2/mem/main.nf | 29 +++---- .../custom/dumpsoftwareversions/functions.nf | 78 ------------------- .../custom/dumpsoftwareversions/meta.yml | 2 +- .../modules/expansionhunter/functions.nf | 78 ------------------- .../nf-core/modules/expansionhunter/main.nf | 26 ++----- modules/nf-core/modules/fastqc/functions.nf | 78 ------------------- modules/nf-core/modules/fastqc/main.nf | 2 +- modules/nf-core/modules/glnexus/functions.nf | 78 ------------------- modules/nf-core/modules/glnexus/main.nf | 26 ++----- modules/nf-core/modules/multiqc/functions.nf | 78 ------------------- .../collectmultiplemetrics/functions.nf | 78 ------------------- .../picard/collectmultiplemetrics/main.nf | 26 ++----- .../picard/markduplicates/functions.nf | 78 ------------------- .../modules/picard/markduplicates/main.nf | 32 +++----- .../modules/qualimap/bamqc/functions.nf | 78 ------------------- .../nf-core/modules/qualimap/bamqc/main.nf | 26 ++----- .../nf-core/modules/qualimap/bamqc/meta.yml | 1 + .../modules/samtools/faidx/functions.nf | 78 ------------------- .../nf-core/modules/samtools/faidx/main.nf | 30 +++---- .../nf-core/modules/samtools/faidx/meta.yml | 10 +++ .../modules/samtools/index/functions.nf | 78 ------------------- .../nf-core/modules/samtools/index/main.nf | 36 ++++----- .../nf-core/modules/samtools/index/meta.yml | 5 ++ .../modules/samtools/merge/functions.nf | 78 ------------------- .../nf-core/modules/samtools/merge/main.nf | 29 +++---- .../modules/samtools/sort/functions.nf | 78 ------------------- modules/nf-core/modules/samtools/sort/main.nf | 28 +++---- .../modules/samtools/stats/functions.nf | 78 ------------------- .../nf-core/modules/samtools/stats/main.nf | 27 +++---- .../nf-core/modules/tabix/tabix/functions.nf | 78 ------------------- modules/nf-core/modules/tabix/tabix/main.nf | 24 ++---- 37 files changed, 162 insertions(+), 1607 deletions(-) delete mode 100644 modules/nf-core/modules/bcftools/norm/functions.nf delete mode 100644 modules/nf-core/modules/bwamem2/index/functions.nf delete mode 100644 modules/nf-core/modules/bwamem2/mem/functions.nf delete mode 100644 modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf delete mode 100644 modules/nf-core/modules/expansionhunter/functions.nf delete mode 100644 modules/nf-core/modules/fastqc/functions.nf delete mode 100644 modules/nf-core/modules/glnexus/functions.nf delete mode 100644 modules/nf-core/modules/multiqc/functions.nf delete mode 100644 modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf delete mode 100644 modules/nf-core/modules/picard/markduplicates/functions.nf delete mode 100644 modules/nf-core/modules/qualimap/bamqc/functions.nf delete mode 100644 modules/nf-core/modules/samtools/faidx/functions.nf delete mode 100644 modules/nf-core/modules/samtools/index/functions.nf delete mode 100644 modules/nf-core/modules/samtools/merge/functions.nf delete mode 100644 modules/nf-core/modules/samtools/sort/functions.nf delete mode 100644 modules/nf-core/modules/samtools/stats/functions.nf delete mode 100644 modules/nf-core/modules/tabix/tabix/functions.nf diff --git a/modules.json b/modules.json index a82b5a73..1cb4dd18 100644 --- a/modules.json +++ b/modules.json @@ -4,55 +4,55 @@ "repos": { "nf-core/modules": { "bcftools/norm": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "bwamem2/index": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "bwamem2/mem": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "custom/dumpsoftwareversions": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "expansionhunter": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "fastqc": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "glnexus": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "multiqc": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "picard/collectmultiplemetrics": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "picard/markduplicates": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "qualimap/bamqc": { - "git_sha": "49da8642876ae4d91128168cd0db4f1c858d7792" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "samtools/faidx": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "e0aa89141ffecb5f54d230f7ea46de242b74e084" }, "samtools/index": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "samtools/merge": { - "git_sha": "ac1e6df076195cec553a2079c9cebd94026a0d47" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "samtools/sort": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "samtools/stats": { - "git_sha": "ac1e6df076195cec553a2079c9cebd94026a0d47" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, "tabix/tabix": { - "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" } } } diff --git a/modules/nf-core/modules/bcftools/norm/functions.nf b/modules/nf-core/modules/bcftools/norm/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/bcftools/norm/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/modules/bcftools/norm/main.nf index 7e506e49..95da56db 100644 --- a/modules/nf-core/modules/bcftools/norm/main.nf +++ b/modules/nf-core/modules/bcftools/norm/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process BCFTOOLS_NORM { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bcftools=1.13" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bcftools:1.13--h3a49de5_0" - } else { - container "quay.io/biocontainers/bcftools:1.13--h3a49de5_0" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.13--h3a49de5_0' : + 'quay.io/biocontainers/bcftools:1.13--h3a49de5_0' }" input: tuple val(meta), path(vcf) @@ -27,18 +16,19 @@ process BCFTOOLS_NORM { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" """ bcftools norm \\ --fasta-ref ${fasta} \\ --output ${prefix}.vcf.gz \\ - $options.args \\ + $args \\ --threads $task.cpus \\ ${vcf} cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/bwamem2/index/functions.nf b/modules/nf-core/modules/bwamem2/index/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/bwamem2/index/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/modules/bwamem2/index/main.nf index 5732017f..e00538c9 100644 --- a/modules/nf-core/modules/bwamem2/index/main.nf +++ b/modules/nf-core/modules/bwamem2/index/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process BWAMEM2_INDEX { tag "$fasta" label 'process_high' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0" - } else { - container "quay.io/biocontainers/bwa-mem2:2.2.1--he513fc3_0" - } + 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' }" input: path fasta @@ -26,16 +15,17 @@ process BWAMEM2_INDEX { path "versions.yml" , emit: versions script: + def args = task.ext.args ?: '' """ mkdir bwamem2 bwa-mem2 \\ index \\ - $options.args \\ + $args \\ $fasta -p bwamem2/${fasta} cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') END_VERSIONS """ } diff --git a/modules/nf-core/modules/bwamem2/mem/functions.nf b/modules/nf-core/modules/bwamem2/mem/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/bwamem2/mem/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index f88d840f..81b4b8ab 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process BWAMEM2_MEM { tag "$meta.id" label 'process_high' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0" - } else { - container "quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0' : + 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0' }" input: tuple val(meta), path(reads) @@ -27,23 +16,25 @@ process BWAMEM2_MEM { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` bwa-mem2 \\ mem \\ - $options.args \\ + $args \\ $read_group \\ -t $task.cpus \\ \$INDEX \\ $reads \\ - | samtools view $options.args2 -@ $task.cpus -bhS -o ${prefix}.bam - + | samtools view $args2 -@ $task.cpus -bhS -o ${prefix}.bam - cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf b/modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml index 60b546a0..5b5b8a60 100644 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml @@ -8,7 +8,7 @@ tools: description: Custom module used to dump software versions within the nf-core pipeline template homepage: https://github.com/nf-core/tools documentation: https://github.com/nf-core/tools - licence: ["MIT"] + licence: ['MIT'] input: - versions: type: file diff --git a/modules/nf-core/modules/expansionhunter/functions.nf b/modules/nf-core/modules/expansionhunter/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/expansionhunter/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/expansionhunter/main.nf b/modules/nf-core/modules/expansionhunter/main.nf index 845de15d..4db78230 100644 --- a/modules/nf-core/modules/expansionhunter/main.nf +++ b/modules/nf-core/modules/expansionhunter/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process EXPANSIONHUNTER { tag "$meta.id" label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::expansionhunter=4.0.2" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/expansionhunter:4.0.2--he785bd8_0" - } else { - container "quay.io/biocontainers/expansionhunter:4.0.2--he785bd8_0" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/expansionhunter:4.0.2--he785bd8_0' : + 'quay.io/biocontainers/expansionhunter:4.0.2--he785bd8_0' }" input: tuple val(meta), path(bam), path(bai) @@ -28,11 +17,12 @@ process EXPANSIONHUNTER { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def gender = (meta.gender == 'male' || meta.gender == 1 || meta.gender == 'XY') ? "male" : "female" """ ExpansionHunter \\ - $options.args \\ + $args \\ --reads $bam \\ --output-prefix $prefix \\ --reference $fasta \\ @@ -40,8 +30,8 @@ process EXPANSIONHUNTER { --sex $gender cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + "${task.process}": + expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/fastqc/functions.nf b/modules/nf-core/modules/fastqc/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/fastqc/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index 673a00b8..d250eca0 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -18,7 +18,7 @@ process FASTQC { script: def args = task.ext.args ?: '' // Add soft-links to original FastQs for consistent naming in pipeline - def prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz diff --git a/modules/nf-core/modules/glnexus/functions.nf b/modules/nf-core/modules/glnexus/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/glnexus/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/glnexus/main.nf b/modules/nf-core/modules/glnexus/main.nf index 1384334f..b8afca22 100644 --- a/modules/nf-core/modules/glnexus/main.nf +++ b/modules/nf-core/modules/glnexus/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process GLNEXUS { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::glnexus=1.4.1" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/glnexus:1.4.1--h40d77a6_0" - } else { - container "quay.io/biocontainers/glnexus:1.4.1--h40d77a6_0" - } + 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' }" input: tuple val(meta), path(gvcfs) @@ -26,7 +15,8 @@ process GLNEXUS { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" // Make list of GVCFs to merge def input = gvcfs.collect { it.toString() } @@ -40,13 +30,13 @@ process GLNEXUS { glnexus_cli \\ --threads $task.cpus \\ --mem-gbytes $avail_mem \\ - $options.args \\ + $args \\ ${input.join(' ')} \\ > ${prefix}.bcf cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$( echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release v//; s/ .*\$//') + "${task.process}": + glnexus: \$( echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release v//; s/ .*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/multiqc/functions.nf b/modules/nf-core/modules/multiqc/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/multiqc/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf index dd8fdaca..6b292534 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process PICARD_COLLECTMULTIPLEMETRICS { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" - } else { - container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.25.7--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -28,7 +17,8 @@ process PICARD_COLLECTMULTIPLEMETRICS { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def avail_mem = 3 if (!task.memory) { log.info '[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -39,14 +29,14 @@ process PICARD_COLLECTMULTIPLEMETRICS { picard \\ -Xmx${avail_mem}g \\ CollectMultipleMetrics \\ - $options.args \\ + $args \\ INPUT=$bam \\ OUTPUT=${prefix}.CollectMultipleMetrics \\ REFERENCE_SEQUENCE=$fasta cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(picard CollectMultipleMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) + "${task.process}": + picard: \$(picard CollectMultipleMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) END_VERSIONS """ } diff --git a/modules/nf-core/modules/picard/markduplicates/functions.nf b/modules/nf-core/modules/picard/markduplicates/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/picard/markduplicates/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 37b825d7..d3bf6938 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" - } else { - container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.25.7--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -28,7 +17,8 @@ process PICARD_MARKDUPLICATES { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def avail_mem = 3 if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -39,14 +29,14 @@ process PICARD_MARKDUPLICATES { picard \\ -Xmx${avail_mem}g \\ MarkDuplicates \\ - $options.args \\ - -I $bam \\ - -O ${prefix}.bam \\ - -M ${prefix}.MarkDuplicates.metrics.txt + $args \\ + I=$bam \\ + O=${prefix}.bam \\ + M=${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + "${task.process}": + picard: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ } diff --git a/modules/nf-core/modules/qualimap/bamqc/functions.nf b/modules/nf-core/modules/qualimap/bamqc/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/qualimap/bamqc/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/qualimap/bamqc/main.nf b/modules/nf-core/modules/qualimap/bamqc/main.nf index d33f1e67..a47fde7e 100644 --- a/modules/nf-core/modules/qualimap/bamqc/main.nf +++ b/modules/nf-core/modules/qualimap/bamqc/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process QUALIMAP_BAMQC { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::qualimap=2.2.2d" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/qualimap:2.2.2d--1" - } else { - container "quay.io/biocontainers/qualimap:2.2.2d--1" - } + 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' }" input: tuple val(meta), path(bam) @@ -28,7 +17,8 @@ process QUALIMAP_BAMQC { path "versions.yml" , emit: versions script: - prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" def collect_pairs = meta.single_end ? '' : '--collect-overlap-pairs' def memory = task.memory.toGiga() + "G" @@ -47,7 +37,7 @@ process QUALIMAP_BAMQC { qualimap \\ --java-mem-size=$memory \\ bamqc \\ - $options.args \\ + $args \\ -bam $bam \\ $regions \\ -p $strandedness \\ @@ -56,8 +46,8 @@ process QUALIMAP_BAMQC { -nt $task.cpus cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') + "${task.process}": + qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/qualimap/bamqc/meta.yml b/modules/nf-core/modules/qualimap/bamqc/meta.yml index cc0471fc..6888d30e 100644 --- a/modules/nf-core/modules/qualimap/bamqc/meta.yml +++ b/modules/nf-core/modules/qualimap/bamqc/meta.yml @@ -14,6 +14,7 @@ tools: homepage: http://qualimap.bioinfo.cipf.es/ documentation: http://qualimap.conesalab.org/doc_html/index.html doi: 10.1093/bioinformatics/bts503 + licence: ['GPL-2.0-only'] input: - meta: type: map diff --git a/modules/nf-core/modules/samtools/faidx/functions.nf b/modules/nf-core/modules/samtools/faidx/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/samtools/faidx/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf index 80cedeab..d8308b03 100644 --- a/modules/nf-core/modules/samtools/faidx/main.nf +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -1,36 +1,26 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process SAMTOOLS_FAIDX { tag "$fasta" label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" - } else { - container "quay.io/biocontainers/samtools:1.13--h8c37831_0" - } + conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : + 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "*.fai" , emit: fai - path "versions.yml", emit: versions + tuple val(meta), path ("*.fai") , emit: fai + path "versions.yml" , emit: versions script: + def args = task.ext.args ?: '' """ samtools faidx $fasta cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/modules/samtools/faidx/meta.yml index 16c0b334..bae97a39 100644 --- a/modules/nf-core/modules/samtools/faidx/meta.yml +++ b/modules/nf-core/modules/samtools/faidx/meta.yml @@ -14,11 +14,21 @@ tools: doi: 10.1093/bioinformatics/btp352 licence: ['MIT'] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - fasta: type: file description: FASTA file pattern: "*.{fa,fasta}" output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - fai: type: file description: FASTA index file diff --git a/modules/nf-core/modules/samtools/index/functions.nf b/modules/nf-core/modules/samtools/index/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/samtools/index/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index febbc11c..b033e225 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -1,37 +1,29 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process SAMTOOLS_INDEX { tag "$meta.id" label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" - } else { - container "quay.io/biocontainers/samtools:1.13--h8c37831_0" - } + conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : + 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(input) output: - tuple val(meta), path("*.bai"), optional:true, emit: bai - tuple val(meta), path("*.csi"), optional:true, emit: csi - path "versions.yml" , emit: versions + tuple val(meta), path("*.bai") , optional:true, emit: bai + tuple val(meta), path("*.crai"), optional:true, emit: crai + tuple val(meta), path("*.csi") , optional:true, emit: csi + path "versions.yml" , emit: versions script: + def args = task.ext.args ?: '' """ - samtools index $options.args $bam + samtools index -@ ${task.cpus-1} $args $input + cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml index 988e8f53..0905b3cd 100644 --- a/modules/nf-core/modules/samtools/index/meta.yml +++ b/modules/nf-core/modules/samtools/index/meta.yml @@ -35,6 +35,10 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" + - crai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - csi: type: file description: CSI index file @@ -46,3 +50,4 @@ output: authors: - "@drpatelh" - "@ewels" + - "@maxulysse" diff --git a/modules/nf-core/modules/samtools/merge/functions.nf b/modules/nf-core/modules/samtools/merge/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/samtools/merge/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf index fefb423b..8eeb64a2 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process SAMTOOLS_MERGE { tag "$meta.id" label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" - } else { - container "quay.io/biocontainers/samtools:1.13--h8c37831_0" - } + conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : + 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" input: tuple val(meta), path(input_files) @@ -28,14 +17,16 @@ process SAMTOOLS_MERGE { path "versions.yml" , emit: versions script: - prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" def file_type = input_files[0].getExtension() def reference = fasta ? "--reference ${fasta}" : "" """ - samtools merge ${reference} ${prefix}.${file_type} $input_files + samtools merge --threads ${task.cpus-1} $args ${reference} ${prefix}.${file_type} $input_files + cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/sort/functions.nf b/modules/nf-core/modules/samtools/sort/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/samtools/sort/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf index b30f6f45..0c2cf25e 100644 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process SAMTOOLS_SORT { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" - } else { - container "quay.io/biocontainers/samtools:1.13--h8c37831_0" - } + conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : + 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" input: tuple val(meta), path(bam) @@ -26,12 +15,13 @@ process SAMTOOLS_SORT { path "versions.yml" , emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" """ - samtools sort $options.args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam + samtools sort $args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/samtools/stats/functions.nf b/modules/nf-core/modules/samtools/stats/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/samtools/stats/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index aab43410..83c87002 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process SAMTOOLS_STATS { tag "$meta.id" label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" - } else { - container "quay.io/biocontainers/samtools:1.13--h8c37831_0" - } + conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : + 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" input: tuple val(meta), path(input), path(input_index) @@ -27,12 +16,14 @@ process SAMTOOLS_STATS { path "versions.yml" , emit: versions script: + def args = task.ext.args ?: '' def reference = fasta ? "--reference ${fasta}" : "" """ - samtools stats ${reference} ${input} > ${input}.stats + samtools stats --threads ${task.cpus-1} ${reference} ${input} > ${input}.stats + cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/tabix/tabix/functions.nf b/modules/nf-core/modules/tabix/tabix/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/nf-core/modules/tabix/tabix/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/nf-core/modules/tabix/tabix/main.nf b/modules/nf-core/modules/tabix/tabix/main.nf index 1574c0b5..c721a554 100644 --- a/modules/nf-core/modules/tabix/tabix/main.nf +++ b/modules/nf-core/modules/tabix/tabix/main.nf @@ -1,22 +1,11 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process TABIX_TABIX { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0" - } else { - container "quay.io/biocontainers/tabix:1.11--hdfd78af_0" - } + 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' }" input: tuple val(meta), path(tab) @@ -26,12 +15,13 @@ process TABIX_TABIX { path "versions.yml" , emit: versions script: + def args = task.ext.args ?: '' """ - tabix $options.args $tab + tabix $args $tab cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: - ${getSoftwareName(task.process)}: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') END_VERSIONS """ } From 7f015fbece2bbac4c84ced245a2aa1b3483e27d8 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 7 Dec 2021 19:17:53 +0100 Subject: [PATCH 0143/1921] fixed errors from subwrkflws and commenting out vcf_check and deepvariant for now --- conf/modules.config | 30 ++++--- modules/local/check_input_vcf.nf | 4 +- modules/local/deepvariant/functions.nf | 78 ------------------- modules/local/deepvariant/main.nf | 33 +++----- subworkflows/local/call_repeat_expansions.nf | 10 +-- ...iant_caller.nf => call_snv_deepvariant.nf} | 12 +-- subworkflows/local/prepare_genome.nf | 10 +-- subworkflows/nf-core/align_bwamem2.nf | 22 ++---- subworkflows/nf-core/qc_bam.nf | 7 +- workflows/raredisease.nf | 32 ++++---- 10 files changed, 64 insertions(+), 174 deletions(-) delete mode 100644 modules/local/deepvariant/functions.nf rename subworkflows/local/{deepvariant_caller.nf => call_snv_deepvariant.nf} (84%) diff --git a/conf/modules.config b/conf/modules.config index 4f0d378e..287582ba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -6,7 +6,7 @@ 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.suffix = File name suffix for output files. + ext.prefix = File name prefix for output files. ---------------------------------------------------------------------------------------- */ @@ -55,8 +55,8 @@ process { } // CALL_SNV_DEEPVARIANT withName: DEEPVARIANT { - ext.args = "--model_type=${params.analysis_type}" - ext.suffix = '_deepvar' + ext.args = "--model_type=$params.analysis_type" + ext.prefix = { "${meta.id}_deepvar" } publishDir = [ path: { "${params.outdir}/deepvariant" }, mode: 'copy', @@ -106,8 +106,6 @@ process { ext.args = '-M -K 100000000' publishDir = [ path: { "${params.outdir}/bwamem2" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: false ] } @@ -124,8 +122,8 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: SAMTOOLS_SORT { - ext.suffix = '_sorted' + withName: '.*:ALIGN_BWAMEM2:SAMTOOLS_SORT' { + ext.prefix = { "${meta.id}_sorted" } publishDir = [ path: { "${params.outdir}/samtools" }, enabled: false @@ -134,20 +132,18 @@ process { withName: SAMTOOLS_STATS { ext.args = '-s --remove-overlaps' publishDir = [ - path: { "${params.outdir}/samtools/stats" }, + path: { "${params.outdir}/samtools" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: SAMTOOLS_MERGE { publishDir = [ - path: { "${params.outdir}/samtools" }, - enabled: false + path: { "${params.outdir}/samtools" } ] } - withName: '*MARKDUPLICATES' { - ext.args = '--CREATE_INDEX' - ext.suffix = '_sorted' + withName: '.*MARKDUPLICATES' { + ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ path: { "${params.outdir}/markduplicates" }, mode: 'copy', @@ -155,15 +151,15 @@ process { ] } // QC_BAM - withName: '*COLLECTMULTIPLEMETRICS' { - publish_dir = [ + withName: '.*COLLECTMULTIPLEMETRICS' { + publishDir = [ path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'QUALIMAP_BAMQC' { - publish_dir = [ + withName: QUALIMAP_BAMQC { + publishDir = [ path: { "${params.outdir}/bamqc_qualimap" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index b9bb2f0e..63d96d77 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -1,7 +1,7 @@ // Import generic module functions -include { saveFiles } from './functions' +// include { saveFiles } from './functions' -params.options = [:] +// params.options = [:] process CHECK_INPUT_VCF { tag "check_vcf" diff --git a/modules/local/deepvariant/functions.nf b/modules/local/deepvariant/functions.nf deleted file mode 100644 index 85628ee0..00000000 --- a/modules/local/deepvariant/functions.nf +++ /dev/null @@ -1,78 +0,0 @@ -// -// Utility functions used in nf-core DSL2 module files -// - -// -// Extract name of software tool from process name using $task.process -// -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -// -// Extract name of module from process name using $task.process -// -def getProcessName(task_process) { - return task_process.tokenize(':')[-1] -} - -// -// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules -// -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -// -// Tidy up and join elements of a list to return a path string -// -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -// -// Function to save/publish module results -// -def saveFiles(Map args) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - - // Do not publish versions.yml unless running from pytest workflow - if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { - return null - } - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } -} diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf index 5aa1e368..7b1c34a4 100644 --- a/modules/local/deepvariant/main.nf +++ b/modules/local/deepvariant/main.nf @@ -1,34 +1,24 @@ -include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' - -params.options = [:] -options = initOptions(params.options) - process DEEPVARIANT { tag "$meta.id" label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::deepvariant=1.2.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "docker://google/deepvariant:1.2.0" - } else { - container "google/deepvariant:1.2.0" - } + conda (params.enable_conda ? 'bioconda::deepvariant=1.2.0' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://google/deepvariant:1.2.0' : + 'google/deepvariant:1.2.0' }" input: tuple val(meta), path(bam), path(bai) - path(fasta) - path(fai) + path fasta + path fasta_fai output: - tuple val(meta), path("*.vcf.gz"), emit: vcf - tuple val(meta), path("*g.vcf.gz"), emit: gvcf - path "versions.yml", emit: versions + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*g.vcf.gz"), emit: gvcf + path "versions.yml", emit: versions script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ /opt/deepvariant/bin/run_deepvariant \\ --ref=${fasta} \\ @@ -37,9 +27,8 @@ process DEEPVARIANT { --output_gvcf=${prefix}.g.vcf.gz \\ ${options.args} \\ --num_shards=${task.cpus} - cat <<-END_VERSIONS > versions.yml - ${getProcessName(task.process)}: + "${task.process}": deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//') END_VERSIONS """ diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index ec5e573f..5530e447 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -2,19 +2,17 @@ // Run ExpansionHunter // -//params.expansionhunter_options = [:] - -include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' addParams( options: params.expansionhunter_options ) +include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' workflow CALL_REPEAT_EXPANSIONS { take: - bam // channel: [ val(meta), path(bam), path(bai) ] + bam // channel: [ val(meta), path(bam), path(bai) ] fasta // channel: /path/to/genome.fasta - variant_catalog // channel: /path/to/variant_catalog.json + variant_catalog // channel: /path/to/variant_catalog.json main: - ch_versions = Channel.empty() + EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) diff --git a/subworkflows/local/deepvariant_caller.nf b/subworkflows/local/call_snv_deepvariant.nf similarity index 84% rename from subworkflows/local/deepvariant_caller.nf rename to subworkflows/local/call_snv_deepvariant.nf index c7621d7e..86eaf6cf 100644 --- a/subworkflows/local/deepvariant_caller.nf +++ b/subworkflows/local/call_snv_deepvariant.nf @@ -18,13 +18,13 @@ // def tabix_glnexus = params.tabix_options.clone() // tabix_glnexus.publish_dir = "glnexus/" -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: split_multiallelics_glnexus ) -include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' addParams( options: rm_duplicates_glnexus ) -include { DEEPVARIANT } from '../../modules/local/deepvariant/main' addParams( options: params.deepvariant_options ) -include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' addParams( options: params.glnexus_options ) -include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' addParams( options: tabix_glnexus) +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: split_multiallelics_glnexus ) +include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: rm_duplicates_glnexus ) +include { DEEPVARIANT } from '../../modules/local/deepvariant/main' //addParams( options: params.deepvariant_options ) +include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' //addParams( options: params.glnexus_options ) +include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' //addParams( options: tabix_glnexus) -workflow DEEPVARIANT_CALLER { +workflow CALL_SNV_DEEPVARIANT { take: bam // channel: [ val(meta), path(bam), path(bai) ] fasta // path(fasta) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 28405f03..0b6f4138 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,12 +2,8 @@ // Prepare reference genome files // - -// params.bwamem2_idx_options = [:] -// params.samtools_faidx_options = [:] - -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' //addParams( options: params.bwamem2_idx_options ) -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' //addParams( options: params.samtools_faidx_options ) +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' workflow PREPARE_GENOME { take: @@ -30,7 +26,7 @@ workflow PREPARE_GENOME { if ( params.fasta_fai ) { ch_fai = file(params.fasta_fai) } else { - ch_fai = SAMTOOLS_FAIDX ( ch_fasta ).fai + ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ).fai // TODO: faidx now requires meta info for fasta due to pipelines with multi references e.g. de novo ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index adbbe27b..03c8c3bf 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -2,21 +2,13 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -// params.bwamem2_mem_options = [:] -// params.samtools_idx_options = [:] -// params.samtools_idx_md_options = [:] -// params.samtools_sort_options = [:] -// params.samtools_stats_options = [:] -// params.samtools_merge_options = [:] -// params.markduplicates_options = [:] - -include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' //addParams( options: params.bwamem2_mem_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' //addParams( options: params.samtools_idx_options ) -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' //addParams( options: params.samtools_idx_md_options ) -include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' //addParams(options: params.samtools_sort_options ) -include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' //addParams(options: params.samtools_stats_options ) -include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' //addParams( options: params.samtools_merge_options ) -include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' //addParams(options: params.markduplicates_options ) +include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' +include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' +include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' +include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' workflow ALIGN_BWAMEM2 { diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 2e00c3bc..c14bb364 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -2,11 +2,8 @@ // A quality check subworkflow for processed bams. // -// params.picard_collectmultiplemetrics_options = [:] -// params.qualimap_bamqc_options = [:] - -include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' //addParams( options: params.picard_collectmultiplemetrics_options ) -include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' //addParams( options: params.qualimap_bamqc_options ) +include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' +include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' workflow QC_BAM { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 73836137..f0cdd79e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -39,7 +39,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' //addParams( options: [:] ) +// include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' //addParams( options: [:] ) /* ======================================================================================== @@ -69,7 +69,7 @@ include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expan // SUBWORKFLOW: Consists of mix/local modules // -include { DEEPVARIANT_CALLER } from '../subworkflows/local/deepvariant_caller' //addParams( deepvariant_options: modules['deepvariant'], glnexus_options: modules['glnexus'], rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], split_multiallelics_options: modules['bcftools_norm_split_multiallelics'], tabix_options: modules['tabix'] ) +include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' //addParams( deepvariant_options: modules['deepvariant'], glnexus_options: modules['glnexus'], rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], split_multiallelics_options: modules['bcftools_norm_split_multiallelics'], tabix_options: modules['tabix'] ) /* ======================================================================================== @@ -102,13 +102,13 @@ workflow RAREDISEASE { PREPARE_GENOME ( params.fasta ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) - if (params.gnomad) - { - ch_gnomad_in = Channel.fromPath(params.gnomad) - CHECK_VCF( - ch_gnomad_in, PREPARE_GENOME.out.fasta, - ).set { ch_gnomad_out } - } + // if (params.gnomad) + // { + // ch_gnomad_in = Channel.fromPath(params.gnomad) + // CHECK_VCF( + // ch_gnomad_in, PREPARE_GENOME.out.fasta, + // ).set { ch_gnomad_out } + // } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { @@ -139,13 +139,13 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. - DEEPVARIANT_CALLER ( - ch_marked_bam.join(ch_marked_bai, by: [0]), - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, - INPUT_CHECK.out.ch_case_info - ) - ch_versions = ch_versions.mix(DEEPVARIANT_CALLER.out.versions) + // CALL_SNV_DEEPVARIANT ( + // ch_marked_bam.join(ch_marked_bai, by: [0]), + // PREPARE_GENOME.out.fasta, + // PREPARE_GENOME.out.fai, + // INPUT_CHECK.out.ch_case_info + // ) + // ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) // // MODULE: Pipeline reporting From e185c1dc754d5484f0048746ca7a3fe57f87bb3e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Tue, 7 Dec 2021 19:29:49 +0100 Subject: [PATCH 0144/1921] fix eclint error :sparkles: --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ea1ca62..aa3cc6db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: matrix: # Nextflow versions: check pipeline minimum and latest edge version nxf_ver: - - 'NXF_VER=21.10.3' + - "NXF_VER=21.10.3" # - 'NXF_EDGE=1' steps: - name: Check out pipeline code From 7d4d01c477f45b7801bd62370aaa572094ed28d7 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 8 Dec 2021 12:23:50 +0100 Subject: [PATCH 0145/1921] modified lint to pass actions --- .github/workflows/linting.yml | 14 ++++++-------- .nf-core.yml | 2 ++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 3b448773..8959a335 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: '10' + node-version: "10" - name: Install markdownlint run: npm install -g markdownlint-cli - name: Run Markdownlint @@ -53,7 +53,7 @@ jobs: - uses: actions/setup-node@v1 with: - node-version: '10' + node-version: "10" - name: Install editorconfig-checker run: npm install -g editorconfig-checker @@ -67,7 +67,7 @@ jobs: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: - node-version: '10' + node-version: "10" - name: Install yaml-lint run: npm install -g yaml-lint - name: Run yaml-lint @@ -101,7 +101,6 @@ jobs: nf-core: runs-on: ubuntu-latest steps: - - name: Check out pipeline code uses: actions/checkout@v2 @@ -114,13 +113,13 @@ jobs: - uses: actions/setup-python@v1 with: - python-version: '3.6' - architecture: 'x64' + python-version: "3.6" + architecture: "x64" - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + pip install --force-reinstall git+https://github.com/nf-core/tools.git@dev - name: Run nf-core lint env: @@ -142,4 +141,3 @@ jobs: lint_log.txt lint_results.md PR_number.txt - diff --git a/.nf-core.yml b/.nf-core.yml index 9ae9fadb..010ab9c0 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,3 +2,5 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - assets/multiqc_config.yaml + - .github/workflows/linting.yml + - lib/NfcoreTemplate.groovy From 32a21ba030cc4bec9e8ac9c2d27e3620860590d2 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 8 Dec 2021 13:55:25 +0100 Subject: [PATCH 0146/1921] okay this should temporarily fix the mismatched tool versions :crossed_fingers: --- .github/workflows/ci.yml | 17 ++++++++++++----- .nf-core.yml | 5 +++++ ... => nf-core-raredisease_logo_light.png.png} | Bin assets/sendmail_template.txt | 4 ++-- ... => nf-core-raredisease_logo_light.png.png} | Bin 5 files changed, 19 insertions(+), 7 deletions(-) rename assets/{nf-core-raredisease_logo.png => nf-core-raredisease_logo_light.png.png} (100%) rename docs/images/{nf-core-raredisease_logo.png => nf-core-raredisease_logo_light.png.png} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa3cc6db..a694ccfe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,10 +18,14 @@ jobs: NXF_ANSI_LOG: false strategy: matrix: - # Nextflow versions: check pipeline minimum and latest edge version - nxf_ver: - - "NXF_VER=21.10.3" - # - 'NXF_EDGE=1' + # Nextflow versions + include: + # Test pipeline minimum Nextflow version + - NXF_VER: "21.10.3" + NXF_EDGE: "" + # Test latest edge release of Nextflow + - NXF_VER: "" + NXF_EDGE: "1" steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -29,10 +33,13 @@ jobs: - name: Install Nextflow env: CAPSULE_LOG: none + NXF_VER: ${{ matrix.NXF_VER }} + # Uncomment only if the edge release is more recent than the latest stable release + # See https://github.com/nextflow-io/nextflow/issues/2467 + # NXF_EDGE: ${{ matrix.NXF_EDGE }} run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - export ${{ matrix.nxf_ver }} nextflow self-update - name: Run pipeline with test data diff --git a/.nf-core.yml b/.nf-core.yml index 010ab9c0..e6a2f5b9 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,3 +4,8 @@ lint: - assets/multiqc_config.yaml - .github/workflows/linting.yml - lib/NfcoreTemplate.groovy + - assets/sendmail_template.txt + files_exist: + - docs/images/nf-core-raredisease_logo_dark.png + - assets/nf-core-raredisease_logo.png + - docs/images/nf-core-raredisease_logo.png diff --git a/assets/nf-core-raredisease_logo.png b/assets/nf-core-raredisease_logo_light.png.png similarity index 100% rename from assets/nf-core-raredisease_logo.png rename to assets/nf-core-raredisease_logo_light.png.png diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index b727a8f5..9d3538dc 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -12,9 +12,9 @@ $email_html Content-Type: image/png;name="nf-core-raredisease_logo.png" Content-Transfer-Encoding: base64 Content-ID: -Content-Disposition: inline; filename="nf-core-raredisease_logo.png" +Content-Disposition: inline; filename="nf-core-raredisease_logo_light.png" -<% out << new File("$projectDir/assets/nf-core-raredisease_logo.png"). +<% out << new File("$projectDir/assets/nf-core-raredisease_logo_light.png"). bytes. encodeBase64(). toString(). diff --git a/docs/images/nf-core-raredisease_logo.png b/docs/images/nf-core-raredisease_logo_light.png.png similarity index 100% rename from docs/images/nf-core-raredisease_logo.png rename to docs/images/nf-core-raredisease_logo_light.png.png From a9bfcad4e3f931d7e8450615c31897e82319cdab Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 8 Dec 2021 13:57:54 +0100 Subject: [PATCH 0147/1921] lol had woopsie on image name --- ...t.png.png => nf-core-raredisease_logo_light.png} | Bin ...t.png.png => nf-core-raredisease_logo_light.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename assets/{nf-core-raredisease_logo_light.png.png => nf-core-raredisease_logo_light.png} (100%) rename docs/images/{nf-core-raredisease_logo_light.png.png => nf-core-raredisease_logo_light.png} (100%) diff --git a/assets/nf-core-raredisease_logo_light.png.png b/assets/nf-core-raredisease_logo_light.png similarity index 100% rename from assets/nf-core-raredisease_logo_light.png.png rename to assets/nf-core-raredisease_logo_light.png diff --git a/docs/images/nf-core-raredisease_logo_light.png.png b/docs/images/nf-core-raredisease_logo_light.png similarity index 100% rename from docs/images/nf-core-raredisease_logo_light.png.png rename to docs/images/nf-core-raredisease_logo_light.png From 8b0c2b5eb7af783ea49592ee4bf9832d559b5a24 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 8 Dec 2021 14:02:13 +0100 Subject: [PATCH 0148/1921] ignore png --- .nf-core.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.nf-core.yml b/.nf-core.yml index e6a2f5b9..c692867e 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -5,6 +5,8 @@ lint: - .github/workflows/linting.yml - lib/NfcoreTemplate.groovy - assets/sendmail_template.txt + - assets/nf-core-raredisease_logo_light.png + - docs/images/nf-core-raredisease_logo_light.png files_exist: - docs/images/nf-core-raredisease_logo_dark.png - assets/nf-core-raredisease_logo.png From 0cc19ed8f93d84e4714c9f7b06bea91f57e0b43f Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 9 Dec 2021 09:44:31 +0100 Subject: [PATCH 0149/1921] update image url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 66f3713f..0d9329f7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ![nf-core/raredisease](docs/images/nf-core-raredisease_logo.png) +# ![nf-core/raredisease](docs/images/nf-core-raredisease_logo_light.png) [![GitHub Actions CI Status](https://github.com/nf-core/raredisease/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/raredisease/actions?query=workflow%3A%22nf-core+CI%22) [![GitHub Actions Linting Status](https://github.com/nf-core/raredisease/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/raredisease/actions?query=workflow%3A%22nf-core+linting%22) From 412c387fe9647b46f88f4ae887774c476a5d9718 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Dec 2021 22:16:42 +0100 Subject: [PATCH 0150/1921] deepvariant --- conf/modules.config | 19 ++++++------ modules/local/deepvariant/main.nf | 11 ++++--- subworkflows/local/call_snv_deepvariant.nf | 36 ++++++---------------- workflows/raredisease.nf | 14 ++++----- 4 files changed, 33 insertions(+), 47 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 287582ba..2fd12572 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -63,18 +63,17 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: SPLIT_MULTIALLELICS { + withName: SPLIT_MULTIALLELICS_GL { ext.args = '--output-type z --multiallelics -both' publishDir = [ - path: { "${params.outdir}/deepvariant" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } - withName: REMOVE_DUPLICATES { + withName: REMOVE_DUPLICATES_GL { ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - path: { "${params.outdir}/deepvariant" }, + path: { "${params.outdir}/glnexus" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -82,14 +81,14 @@ process { withName: GLNEXUS { ext.args = '--config DeepVariant_unfiltered' publishDir = [ - path: { "${params.outdir}/deepvariant" }, enabled: false ] } - withName: TABIX { + withName: TABIX_GL { publishDir = [ - path: { "${params.outdir}/deepvariant" }, - enabled: false + path: { "${params.outdir}/glnexus" }, + mode: 'copy', + ] } // CALL_REPEAT_EXPANSIONS diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf index 7b1c34a4..04a2de79 100644 --- a/modules/local/deepvariant/main.nf +++ b/modules/local/deepvariant/main.nf @@ -10,7 +10,7 @@ process DEEPVARIANT { input: tuple val(meta), path(bam), path(bai) path fasta - path fasta_fai + tuple val(fai_meta), path(fasta_fai) output: tuple val(meta), path("*.vcf.gz"), emit: vcf @@ -18,15 +18,18 @@ process DEEPVARIANT { path "versions.yml", emit: versions script: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + """ /opt/deepvariant/bin/run_deepvariant \\ - --ref=${fasta} \\ - --reads=${bam} \\ + --ref=$fasta \\ + --reads=$bam \\ --output_vcf=${prefix}.vcf.gz \\ --output_gvcf=${prefix}.g.vcf.gz \\ - ${options.args} \\ + $args \\ --num_shards=${task.cpus} + cat <<-END_VERSIONS > versions.yml "${task.process}": deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//') diff --git a/subworkflows/local/call_snv_deepvariant.nf b/subworkflows/local/call_snv_deepvariant.nf index 86eaf6cf..687fa551 100644 --- a/subworkflows/local/call_snv_deepvariant.nf +++ b/subworkflows/local/call_snv_deepvariant.nf @@ -2,27 +2,11 @@ // A variant caller workflow for deepvariant // -// params.split_multiallelics_options = [:] -// params.rm_duplicates_options = [:] -// params.deepvariant_options = [:] -// params.glnexus_options = [:] -// params.tabix_options = [:] - -// def split_multiallelics_glnexus = params.split_multiallelics_options.clone() -// split_multiallelics_glnexus.publish_files = "false" - -// def rm_duplicates_glnexus = params.rm_duplicates_options.clone() -// rm_duplicates_glnexus.publish_dir = "glnexus/" -// rm_duplicates_glnexus.suffix = "_split_rmdup" - -// def tabix_glnexus = params.tabix_options.clone() -// tabix_glnexus.publish_dir = "glnexus/" - -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: split_multiallelics_glnexus ) -include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: rm_duplicates_glnexus ) +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: split_multiallelics_glnexus ) +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: rm_duplicates_glnexus ) include { DEEPVARIANT } from '../../modules/local/deepvariant/main' //addParams( options: params.deepvariant_options ) include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' //addParams( options: params.glnexus_options ) -include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' //addParams( options: tabix_glnexus) +include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' //addParams( options: tabix_glnexus) workflow CALL_SNV_DEEPVARIANT { take: @@ -46,16 +30,16 @@ workflow CALL_SNV_DEEPVARIANT { GLNEXUS ( ch_gvcfs ) ch_versions = ch_versions.mix(GLNEXUS.out.versions) - SPLIT_MULTIALLELICS (GLNEXUS.out.bcf, fasta) - REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta) - ch_versions = ch_versions.mix(REMOVE_DUPLICATES.out.versions) + SPLIT_MULTIALLELICS_GL (GLNEXUS.out.bcf, fasta) + REMOVE_DUPLICATES_GL (SPLIT_MULTIALLELICS_GL.out.vcf, fasta) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_GL.out.versions) - TABIX (REMOVE_DUPLICATES.out.vcf) - ch_versions = ch_versions.mix(TABIX.out.versions) + TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) + ch_versions = ch_versions.mix(TABIX_GL.out.versions) emit: - vcf = REMOVE_DUPLICATES.out.vcf - tabix = TABIX.out.tbi + vcf = REMOVE_DUPLICATES_GL.out.vcf + tabix = TABIX_GL.out.tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f0cdd79e..403489fa 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -139,13 +139,13 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. - // CALL_SNV_DEEPVARIANT ( - // ch_marked_bam.join(ch_marked_bai, by: [0]), - // PREPARE_GENOME.out.fasta, - // PREPARE_GENOME.out.fai, - // INPUT_CHECK.out.ch_case_info - // ) - // ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + CALL_SNV_DEEPVARIANT ( + ch_marked_bam.join(ch_marked_bai, by: [0]), + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + INPUT_CHECK.out.ch_case_info + ) + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) // // MODULE: Pipeline reporting From 7a62d83057a12c4ce90471fd8f4158510a728ff3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Dec 2021 00:36:02 +0100 Subject: [PATCH 0151/1921] Update check vcf subworkflow --- conf/modules.config | 29 +++++++++++++++++++ modules/local/check_input_vcf.nf | 8 ------ subworkflows/local/call_snv_deepvariant.nf | 10 +++---- subworkflows/local/prepare_vcf.nf | 33 ++++++---------------- workflows/raredisease.nf | 15 +++++----- 5 files changed, 50 insertions(+), 45 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 2fd12572..45a68577 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -53,6 +53,35 @@ process { pattern: "*fai" ] } + // PREPARE_VCF + withName: CHECK_INPUT_VCF { + publishDir = [ + enabled: false, + ] + } + withName: SPLIT_MULTIALLELICS_PV { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + publishDir = [ + enabled: false + ] + } + withName: REMOVE_DUPLICATES_PV { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/vcf_check" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: TABIX_PV { + publishDir = [ + path: { "${params.outdir}/vcf_check" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } // CALL_SNV_DEEPVARIANT withName: DEEPVARIANT { ext.args = "--model_type=$params.analysis_type" diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 63d96d77..9cb063f8 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -1,13 +1,5 @@ -// Import generic module functions -// include { saveFiles } from './functions' - -// params.options = [:] - process CHECK_INPUT_VCF { tag "check_vcf" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/subworkflows/local/call_snv_deepvariant.nf b/subworkflows/local/call_snv_deepvariant.nf index 687fa551..ee34f618 100644 --- a/subworkflows/local/call_snv_deepvariant.nf +++ b/subworkflows/local/call_snv_deepvariant.nf @@ -2,11 +2,11 @@ // A variant caller workflow for deepvariant // -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: split_multiallelics_glnexus ) -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: rm_duplicates_glnexus ) -include { DEEPVARIANT } from '../../modules/local/deepvariant/main' //addParams( options: params.deepvariant_options ) -include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' //addParams( options: params.glnexus_options ) -include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' //addParams( options: tabix_glnexus) +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/modules/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' +include { DEEPVARIANT } from '../../modules/local/deepvariant/main' +include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' +include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' workflow CALL_SNV_DEEPVARIANT { take: diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index b8b7f481..bf526327 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -2,26 +2,10 @@ // Prepare reference vcf files // -// params.split_multiallelics_options = [:] -// params.rm_duplicates_options = [:] -// params.vcf_options = [:] -// params.tabix_options = [:] - -// def split_multiallelics_vcf_check = params.split_multiallelics_options.clone() -// split_multiallelics_vcf_check.publish_files = "false" -// split_multiallelics_vcf_check.suffix = "_split" - -// def rm_duplicates_vcf_check = params.rm_duplicates_options.clone() -// rm_duplicates_vcf_check.publish_dir = "vcf_check/" -// rm_duplicates_vcf_check.suffix = "_split_rmdup" - -// def tabix_vcf_check = params.tabix_options.clone() -// tabix_vcf_check.publish_dir = "vcf_check/" - -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: split_multiallelics_vcf_check ) -include { BCFTOOLS_NORM as REMOVE_DUPLICATES } from '../../modules/nf-core/modules/bcftools/norm/main' //addParams( options: rm_duplicates_vcf_check ) -include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' //addParams( options: params.vcf_options ) -include { TABIX_TABIX as TABIX } from '../../modules/nf-core/modules/tabix/tabix/main' //addParams( options: tabix_vcf_check ) +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../modules/nf-core/modules/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../modules/nf-core/modules/bcftools/norm/main' +include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' +include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/modules/tabix/tabix/main' workflow CHECK_VCF { take: @@ -45,16 +29,17 @@ workflow CHECK_VCF { } .set { ch_vcfs_norm } - SPLIT_MULTIALLELICS (ch_vcfs_norm.unprocessed, fasta) + ch_vcfs_norm.unprocessed.view() + SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) - REMOVE_DUPLICATES (SPLIT_MULTIALLELICS.out.vcf, fasta).vcf + REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta).vcf .set { ch_vcfs_rmdup } vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) - TABIX (vcf_out) + TABIX_PV (vcf_out) emit: vcf = vcf_out // path: normalized_vcf - idx = TABIX.out.tbi + idx = TABIX_PV.out.tbi } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 403489fa..6377954b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -39,7 +39,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { INPUT_CHECK } from '../subworkflows/local/input_check' -// include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' //addParams( options: [:] ) +include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' //addParams( options: [:] ) /* ======================================================================================== @@ -102,13 +102,12 @@ workflow RAREDISEASE { PREPARE_GENOME ( params.fasta ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) - // if (params.gnomad) - // { - // ch_gnomad_in = Channel.fromPath(params.gnomad) - // CHECK_VCF( - // ch_gnomad_in, PREPARE_GENOME.out.fasta, - // ).set { ch_gnomad_out } - // } + if (params.gnomad) { + ch_gnomad_in = Channel.fromPath(params.gnomad) + CHECK_VCF( + ch_gnomad_in, PREPARE_GENOME.out.fasta, + ).set { ch_gnomad_out } + } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { From cf130050b080650c79384eace178742dbe98eca0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Dec 2021 01:24:31 +0100 Subject: [PATCH 0152/1921] fix lint errors --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6377954b..51b37e52 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -105,7 +105,7 @@ workflow RAREDISEASE { if (params.gnomad) { ch_gnomad_in = Channel.fromPath(params.gnomad) CHECK_VCF( - ch_gnomad_in, PREPARE_GENOME.out.fasta, + ch_gnomad_in, PREPARE_GENOME.out.fasta, ).set { ch_gnomad_out } } From 867d10fc6bda52c12ad149e9b6555a3709250757 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Dec 2021 02:08:13 +0100 Subject: [PATCH 0153/1921] fix file unchanged lint error --- .nf-core.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.nf-core.yml b/.nf-core.yml index c692867e..e37041b3 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,6 +4,7 @@ lint: - assets/multiqc_config.yaml - .github/workflows/linting.yml - lib/NfcoreTemplate.groovy + - lib/NfcoreSchema.groovy - assets/sendmail_template.txt - assets/nf-core-raredisease_logo_light.png - docs/images/nf-core-raredisease_logo_light.png From bdd6cf58a52e3db40a8283249a66ea2a6bcf45fd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Dec 2021 20:17:52 +0100 Subject: [PATCH 0154/1921] review suggestions --- subworkflows/local/prepare_vcf.nf | 1 - workflows/raredisease.nf | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index bf526327..f19b9095 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -29,7 +29,6 @@ workflow CHECK_VCF { } .set { ch_vcfs_norm } - ch_vcfs_norm.unprocessed.view() SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta).vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 51b37e52..db8741c8 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -39,7 +39,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' //addParams( options: [:] ) +include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' /* ======================================================================================== @@ -51,25 +51,25 @@ include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' //addParams( opti // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/modules/fastqc/main' //addParams( options: modules['fastqc'] ) -include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' //addParams( options: multiqc_options ) -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' //addParams( options: [publish_files : ['_versions.yml':'']] ) +include { FASTQC } from '../modules/nf-core/modules/fastqc/main' +include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' // // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' //addParams( bwamem2_idx_options: modules['bwa_mem2_index'], samtools_faidx_options: modules['samtools_faidx'] ) -include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' //addParams( bwamem2_idx_options: modules['bwa_mem2_index'], bwamem2_mem_options: modules['bwa_mem2_mem'], samtools_idx_options: modules['samtools_index'], samtools_sort_options: modules['samtools_sort'], samtools_stats_options: modules['samtools_stats'], samtools_merge_options: modules['samtools_merge'], markduplicates_options: modules['picard_markduplicates'] ) +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' +include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' //addParams ( picard_collectmultiplemetrics_options: modules['picard_collectmultiplemetrics'], qualimap_bamqc_options: modules['qualimap_bamqc'] ) -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' //addParams( expansionhunter_options: modules['expansionhunter'] ) +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' // // SUBWORKFLOW: Consists of mix/local modules // -include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' //addParams( deepvariant_options: modules['deepvariant'], glnexus_options: modules['glnexus'], rm_duplicates_options: modules['bcftools_norm_rm_duplicates'], split_multiallelics_options: modules['bcftools_norm_split_multiallelics'], tabix_options: modules['tabix'] ) +include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' /* ======================================================================================== From bd5314b874e9f33729b5829b933158bfb1f73552 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Dec 2021 10:18:22 +0100 Subject: [PATCH 0155/1921] refactor - simplify if block --- modules/local/check_input_vcf.nf | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 9cb063f8..471e052f 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -2,11 +2,9 @@ process CHECK_INPUT_VCF { tag "check_vcf" conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.8.3' : + 'quay.io/biocontainers/python:3.8.3' }" input: path vcf From ea29fffd933ebc270373df4701fa46948db50f67 Mon Sep 17 00:00:00 2001 From: rannick Date: Tue, 14 Dec 2021 18:31:50 +0100 Subject: [PATCH 0156/1921] remove hardcoding of _R1_;ID is now just the fastq_1 filename --- subworkflows/local/input_check.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 725c569a..e634c99e 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -33,7 +33,7 @@ def create_fastq_channels(LinkedHashMap row) { meta.id = row.sample meta.single_end = row.single_end.toBoolean() //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id - meta.read_group = "\'@RG\\tID:"+ row.sample.split('_')[0] + "_" + row.fastq_1.split('/')[-1].split('_R1_')[0] + "_" + row.lane + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" + meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" def array = [] From b038c862d4f30425bed4b6250c656ee349dc5016 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Dec 2021 11:00:30 +0100 Subject: [PATCH 0157/1921] Update resuing modules section --- .github/CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 65fb5809..9ef34fe8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -104,7 +104,9 @@ Please use the following naming schemes, to make it easy to understand what is g ### Reusing modules in the workflow -Default options for modules should be defined in the [conf/modules.config](../conf/modules.config). If you have a module that you would like to reuse in a subworkflow with non-default options, we recommend modifying the defaults within the context of the subworkflow. For a working example, please have a look at how the default options for bcftools norm tool are modified in both [subworkflows/local/deepvariant_caller.nf](../subworkflows/local/deepvariant_caller.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf) +Occasionally, you might find yourself wanting to reuse a module with options that are different from what has already been defined in [conf/modules.config](../conf/modules.config). In that case, we recommend importing the module using an unique alias within the subworkflow, and then defining the options for the alias in [conf/modules.config](../conf/modules.config). + +For a working example, please have a look at how we have reused `bcftools norm` in both [subworkflows/local/call_snv_deepvariant.nf](../subworkflows/local/call_snv_deepvariant.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf), and defined subworkflow-specific options in [conf/modules.config](../conf/modules.config). ### Nextflow version bumping From 8740b19f75b4c645573626f67c5e47a575eb1c26 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Dec 2021 11:10:36 +0100 Subject: [PATCH 0158/1921] small fix --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9ef34fe8..f29a1d9a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -106,7 +106,7 @@ Please use the following naming schemes, to make it easy to understand what is g Occasionally, you might find yourself wanting to reuse a module with options that are different from what has already been defined in [conf/modules.config](../conf/modules.config). In that case, we recommend importing the module using an unique alias within the subworkflow, and then defining the options for the alias in [conf/modules.config](../conf/modules.config). -For a working example, please have a look at how we have reused `bcftools norm` in both [subworkflows/local/call_snv_deepvariant.nf](../subworkflows/local/call_snv_deepvariant.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf), and defined subworkflow-specific options in [conf/modules.config](../conf/modules.config). +For a working example, please have a look at how we have reused `bcftools norm` in both [subworkflows/local/call_snv_deepvariant.nf](../subworkflows/local/call_snv_deepvariant.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf), and defined its subworkflow-specific options in [conf/modules.config](../conf/modules.config). ### Nextflow version bumping From 535c07704b184c6441186e543fabf142e5e1ef74 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Dec 2021 11:17:07 +0100 Subject: [PATCH 0159/1921] fix lint error --- .nf-core.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.nf-core.yml b/.nf-core.yml index e37041b3..73f02d8f 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,7 @@ lint: files_unchanged: - .github/CONTRIBUTING.md + - .github/ISSUE_TEMPLATE/bug_report.yml - assets/multiqc_config.yaml - .github/workflows/linting.yml - lib/NfcoreTemplate.groovy From 8d575f8f8fef216f21931b7dcb87d24a65e302dd Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Dec 2021 12:05:05 +0100 Subject: [PATCH 0160/1921] moved subworkflows right folder --- .../nf-core/call_repeat_expansions.nf | 22 ++++++++++ subworkflows/nf-core/prepare_genome.nf | 40 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 subworkflows/nf-core/call_repeat_expansions.nf create mode 100644 subworkflows/nf-core/prepare_genome.nf diff --git a/subworkflows/nf-core/call_repeat_expansions.nf b/subworkflows/nf-core/call_repeat_expansions.nf new file mode 100644 index 00000000..5530e447 --- /dev/null +++ b/subworkflows/nf-core/call_repeat_expansions.nf @@ -0,0 +1,22 @@ +// +// Run ExpansionHunter +// + +include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' + +workflow CALL_REPEAT_EXPANSIONS { + take: + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // channel: /path/to/genome.fasta + variant_catalog // channel: /path/to/variant_catalog.json + + main: + ch_versions = Channel.empty() + + EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) + ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) + + emit: + vcf = EXPANSIONHUNTER.out.vcf // channel: [ val(meta), path(*.vcf) ] + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/prepare_genome.nf b/subworkflows/nf-core/prepare_genome.nf new file mode 100644 index 00000000..0b6f4138 --- /dev/null +++ b/subworkflows/nf-core/prepare_genome.nf @@ -0,0 +1,40 @@ +// +// Prepare reference genome files +// + +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' + +workflow PREPARE_GENOME { + take: + fasta // path: genome.fasta + + main: + ch_fasta = file(fasta) + ch_versions = Channel.empty() + + // Fetch BWAMEM2 index or create from scratch if required + if ( params.aligner == 'bwamem2' ) { + if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { + ch_bwamem2_index = file(params.bwamem2_index) + } else { + ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index + ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) + } + } + + if ( params.fasta_fai ) { + ch_fai = file(params.fasta_fai) + } else { + ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ).fai // TODO: faidx now requires meta info for fasta due to pipelines with multi references e.g. de novo + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) + } + + + emit: + fasta = ch_fasta // path: genome.fasta + fai = ch_fai // path: genome.fasta.fai + bwamem2_index = ch_bwamem2_index // path: bwamem2/index + + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} From 98a56cc2e661fa46436eacf06c4691d4e3d5b6ed Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Dec 2021 12:05:52 +0100 Subject: [PATCH 0161/1921] deleted misplaced files --- subworkflows/local/call_repeat_expansions.nf | 22 ----------- subworkflows/local/prepare_genome.nf | 40 -------------------- 2 files changed, 62 deletions(-) delete mode 100644 subworkflows/local/call_repeat_expansions.nf delete mode 100644 subworkflows/local/prepare_genome.nf diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf deleted file mode 100644 index 5530e447..00000000 --- a/subworkflows/local/call_repeat_expansions.nf +++ /dev/null @@ -1,22 +0,0 @@ -// -// Run ExpansionHunter -// - -include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' - -workflow CALL_REPEAT_EXPANSIONS { - take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // channel: /path/to/genome.fasta - variant_catalog // channel: /path/to/variant_catalog.json - - main: - ch_versions = Channel.empty() - - EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) - ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) - - emit: - vcf = EXPANSIONHUNTER.out.vcf // channel: [ val(meta), path(*.vcf) ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf deleted file mode 100644 index 0b6f4138..00000000 --- a/subworkflows/local/prepare_genome.nf +++ /dev/null @@ -1,40 +0,0 @@ -// -// Prepare reference genome files -// - -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' - -workflow PREPARE_GENOME { - take: - fasta // path: genome.fasta - - main: - ch_fasta = file(fasta) - ch_versions = Channel.empty() - - // Fetch BWAMEM2 index or create from scratch if required - if ( params.aligner == 'bwamem2' ) { - if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { - ch_bwamem2_index = file(params.bwamem2_index) - } else { - ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index - ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) - } - } - - if ( params.fasta_fai ) { - ch_fai = file(params.fasta_fai) - } else { - ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ).fai // TODO: faidx now requires meta info for fasta due to pipelines with multi references e.g. de novo - ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) - } - - - emit: - fasta = ch_fasta // path: genome.fasta - fai = ch_fai // path: genome.fasta.fai - bwamem2_index = ch_bwamem2_index // path: bwamem2/index - - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} From 7bceb80e07551271f228f65e8ef8469da22284e8 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Dec 2021 12:08:08 +0100 Subject: [PATCH 0162/1921] :arrow_down: module --- modules.json | 3 ++ modules/nf-core/modules/tiddit/cov/main.nf | 36 ++++++++++++++ modules/nf-core/modules/tiddit/cov/meta.yml | 52 +++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 modules/nf-core/modules/tiddit/cov/main.nf create mode 100644 modules/nf-core/modules/tiddit/cov/meta.yml diff --git a/modules.json b/modules.json index 1cb4dd18..2ef01f77 100644 --- a/modules.json +++ b/modules.json @@ -53,6 +53,9 @@ }, "tabix/tabix": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + }, + "tiddit/cov": { + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" } } } diff --git a/modules/nf-core/modules/tiddit/cov/main.nf b/modules/nf-core/modules/tiddit/cov/main.nf new file mode 100644 index 00000000..c5a1ca0f --- /dev/null +++ b/modules/nf-core/modules/tiddit/cov/main.nf @@ -0,0 +1,36 @@ +process TIDDIT_COV { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::tiddit=2.12.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tiddit:2.12.1--py38h1773678_0' : + 'quay.io/biocontainers/tiddit:2.12.1--py38h1773678_0' }" + + input: + tuple val(meta), path(bam) + path fasta + + output: + tuple val(meta), path("*.tab"), optional: true, emit: cov + tuple val(meta), path("*.wig"), optional: true, emit: wig + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--ref $fasta" : "" + """ + tiddit \\ + --cov \\ + -o $prefix \\ + $args \\ + --bam $bam \\ + $reference + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/tiddit/cov/meta.yml b/modules/nf-core/modules/tiddit/cov/meta.yml new file mode 100644 index 00000000..d925b783 --- /dev/null +++ b/modules/nf-core/modules/tiddit/cov/meta.yml @@ -0,0 +1,52 @@ +name: tiddit_cov +description: Computes the coverage of different regions from the bam file. +keywords: + - coverage + - bam + - statistics + - chromosomal rearrangements +tools: + - tiddit: + description: TIDDIT - structural variant calling. + homepage: https://github.com/SciLifeLab/TIDDIT + documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md + doi: "10.12688/f1000research.11168.1" + licence: ["GPL v3"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - fasta: + type: file + description: | + Reference genome file. Only needed when passing in CRAM instead of BAM. + If not using CRAM, please pass an empty file instead. + pattern: "*.fasta" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cov: + type: file + description: The coverage of different regions. Optional. + pattern: "*.tab" + - wig: + type: file + description: The coverage of different regions in WIG format. Optional. + pattern: "*.wig" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@projectoriented" From 32cccbf54792744f9f0fa73d8e1edb075f567c43 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Dec 2021 12:29:55 +0100 Subject: [PATCH 0163/1921] integrated tiddit coverage --- conf/modules.config | 13 +++++++++---- subworkflows/nf-core/qc_bam.nf | 8 ++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 45a68577..a9f0a1f6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -182,15 +182,20 @@ process { withName: '.*COLLECTMULTIPLEMETRICS' { publishDir = [ path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + mode: 'copy' ] } withName: QUALIMAP_BAMQC { publishDir = [ path: { "${params.outdir}/bamqc_qualimap" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + mode: 'copy' + ] + } + withName: TIDDIT_COV { + ext.args = '-z 500 -w -u' + publishDir = [ + path: { "${params.outdir}/tiddit_coverage" }, + mode: 'copy' ] } // nf-core modules diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index c14bb364..edcb910a 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -4,6 +4,7 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' +include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' workflow QC_BAM { @@ -14,14 +15,21 @@ workflow QC_BAM { main: ch_versions = Channel.empty() + // COLLECT MULTIPLE METRICS PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) + // QUALIMAP BAMQC gff = [] use_gff = false QUALIMAP_BAMQC ( bam, gff, use_gff ) ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions) + // TIDDIT COVERAGE + TIDDIT_COV ( bam, [] ) // 2nd pos. arg is req. only for cram input + ch_versions = ch_versions.mix(TIDDIT_COV.out.versions) + + emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] From 7d761a7de8d03a4e31d4eda5aa71f5293d8622f8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Dec 2021 12:30:02 +0100 Subject: [PATCH 0164/1921] install manta module --- modules.json | 3 + .../nf-core/modules/manta/germline/main.nf | 57 ++++++++++++ .../nf-core/modules/manta/germline/meta.yml | 87 +++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 modules/nf-core/modules/manta/germline/main.nf create mode 100644 modules/nf-core/modules/manta/germline/meta.yml diff --git a/modules.json b/modules.json index 1cb4dd18..de598741 100644 --- a/modules.json +++ b/modules.json @@ -24,6 +24,9 @@ "glnexus": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "manta/germline": { + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + }, "multiqc": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, diff --git a/modules/nf-core/modules/manta/germline/main.nf b/modules/nf-core/modules/manta/germline/main.nf new file mode 100644 index 00000000..2a8c0acc --- /dev/null +++ b/modules/nf-core/modules/manta/germline/main.nf @@ -0,0 +1,57 @@ +process MANTA_GERMLINE { + tag "$meta.id" + label 'process_high' + + conda (params.enable_conda ? "bioconda::manta=1.6.0" : null) + 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' }" + + input: + tuple val(meta), path(input), path(input_index) + path fasta + path fai + path target_bed + path target_bed_tbi + + output: + tuple val(meta), path("*candidate_small_indels.vcf.gz") , emit: candidate_small_indels_vcf + tuple val(meta), path("*candidate_small_indels.vcf.gz.tbi"), emit: candidate_small_indels_vcf_tbi + tuple val(meta), path("*candidate_sv.vcf.gz") , emit: candidate_sv_vcf + tuple val(meta), path("*candidate_sv.vcf.gz.tbi") , emit: candidate_sv_vcf_tbi + tuple val(meta), path("*diploid_sv.vcf.gz") , emit: diploid_sv_vcf + tuple val(meta), path("*diploid_sv.vcf.gz.tbi") , emit: diploid_sv_vcf_tbi + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def options_manta = target_bed ? "--exome --callRegions $target_bed" : "" + """ + configManta.py \ + --bam $input \ + --reference $fasta \ + $options_manta \ + --runDir manta + + python manta/runWorkflow.py -m local -j $task.cpus + + mv manta/results/variants/candidateSmallIndels.vcf.gz \ + ${prefix}.candidate_small_indels.vcf.gz + mv manta/results/variants/candidateSmallIndels.vcf.gz.tbi \ + ${prefix}.candidate_small_indels.vcf.gz.tbi + mv manta/results/variants/candidateSV.vcf.gz \ + ${prefix}.candidate_sv.vcf.gz + mv manta/results/variants/candidateSV.vcf.gz.tbi \ + ${prefix}.candidate_sv.vcf.gz.tbi + mv manta/results/variants/diploidSV.vcf.gz \ + ${prefix}.diploid_sv.vcf.gz + mv manta/results/variants/diploidSV.vcf.gz.tbi \ + ${prefix}.diploid_sv.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + manta: \$( configManta.py --version ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/manta/germline/meta.yml b/modules/nf-core/modules/manta/germline/meta.yml new file mode 100644 index 00000000..3bdb8264 --- /dev/null +++ b/modules/nf-core/modules/manta/germline/meta.yml @@ -0,0 +1,87 @@ +name: manta_germline +description: Manta calls structural variants (SVs) and indels from mapped paired-end sequencing reads. It is optimized for analysis of germline variation in small sets of individuals and somatic variation in tumor/normal sample pairs. +keywords: + - somatic + - wgs + - wxs + - panel + - vcf + - structural variants + - small indels +tools: + - manta: + description: Structural variant and indel caller for mapped sequencing data + homepage: https://github.com/Illumina/manta + documentation: https://github.com/Illumina/manta/blob/v1.6.0/docs/userGuide/README.md + tool_dev_url: https://github.com/Illumina/manta + doi: "10.1093/bioinformatics/btv710" + licence: ['GPL v3'] + +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}" + - input_index: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_tbi: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - candidate_small_indels_vcf: + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" + - candidate_small_indels_vcf_tbi: + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" + - candidate_sv_vcf: + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" + - candidate_sv_vcf_tbi: + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" + - diploid_sv_vcf: + type: file + description: Gzipped VCF file containing variants + pattern: "*.{vcf.gz}" + - diploid_sv_vcf_tbi: + type: file + description: Index for gzipped VCF file containing variants + pattern: "*.{vcf.gz.tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@maxulysse" From 2aaf64926ab3dbbcfa1cb5e5746df6d48c0d2ef4 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Dec 2021 13:33:54 +0100 Subject: [PATCH 0165/1921] installed wigtobigwig --- modules.json | 3 ++ .../nf-core/modules/ucsc/wigtobigwig/main.nf | 34 +++++++++++++++++ .../nf-core/modules/ucsc/wigtobigwig/meta.yml | 37 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 modules/nf-core/modules/ucsc/wigtobigwig/main.nf create mode 100644 modules/nf-core/modules/ucsc/wigtobigwig/meta.yml diff --git a/modules.json b/modules.json index 2ef01f77..bac77406 100644 --- a/modules.json +++ b/modules.json @@ -56,6 +56,9 @@ }, "tiddit/cov": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + }, + "ucsc/wigtobigwig": { + "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" } } } diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf new file mode 100644 index 00000000..4c596c9a --- /dev/null +++ b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf @@ -0,0 +1,34 @@ +def VERSION = '377' // Version information not provided by tool on CLI + +process UCSC_WIGTOBIGWIG { + tag '$wig' + label 'process_medium' + + conda (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) + 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' }" + + input: + path wig + path sizes + + output: + path "*.bw" , emit: bw + path "versions.yml", emit: versions + + script: + def args = task.ext.args ?: '' + """ + wigToBigWig \\ + $args \\ + $wig \\ + $sizes \\ + ${wig.getSimpleName()}.bw + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ucsc: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml b/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml new file mode 100644 index 00000000..4723ff2b --- /dev/null +++ b/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml @@ -0,0 +1,37 @@ +name: ucsc_wigtobigwig +description: Convert ascii format wig file to binary big wig format +keywords: + - wig + - bigwig +tools: + - ucsc: + description: | + Convert ascii format wig file (in fixedStep, variableStep + or bedGraph format) to binary big wig format + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ['varies; see http://genome.ucsc.edu/license'] + +input: + - wig: + type: file + description: wig file + pattern: "*.{wig}" + - chromsizes: + type: file + description: chromosome sizes file + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - bw: + type: file + description: bigwig file + pattern: "*.{bw}" + +authors: + - "@jianhong" From 134a721143b3e80ebc94cd3913c768c28946cc6e Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Wed, 15 Dec 2021 15:38:20 +0100 Subject: [PATCH 0166/1921] let's see if this works :stuck_out_tongue_closed_eyes: --- .github/workflows/ci.yml | 4 ---- .github/workflows/linting.yml | 2 +- .nf-core.yml | 7 ------- 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a694ccfe..fa39ed37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,8 +14,6 @@ jobs: # Only run on push if this is the nf-core dev branch (merged PRs) if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/raredisease') }} runs-on: ubuntu-latest - env: - NXF_ANSI_LOG: false strategy: matrix: # Nextflow versions @@ -32,7 +30,6 @@ jobs: - name: Install Nextflow env: - CAPSULE_LOG: none NXF_VER: ${{ matrix.NXF_VER }} # Uncomment only if the edge release is more recent than the latest stable release # See https://github.com/nextflow-io/nextflow/issues/2467 @@ -40,7 +37,6 @@ jobs: run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - nextflow self-update - name: Run pipeline with test data # TODO nf-core: You can customise CI pipeline run tests as required diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 8959a335..bce21ecf 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -119,7 +119,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install --force-reinstall git+https://github.com/nf-core/tools.git@dev + pip install nf-core - name: Run nf-core lint env: diff --git a/.nf-core.yml b/.nf-core.yml index e37041b3..29578b29 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,13 +2,6 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - assets/multiqc_config.yaml - - .github/workflows/linting.yml - lib/NfcoreTemplate.groovy - lib/NfcoreSchema.groovy - assets/sendmail_template.txt - - assets/nf-core-raredisease_logo_light.png - - docs/images/nf-core-raredisease_logo_light.png - files_exist: - - docs/images/nf-core-raredisease_logo_dark.png - - assets/nf-core-raredisease_logo.png - - docs/images/nf-core-raredisease_logo.png From 573df3378e31e70cf3b0db294bc8a73c92d8f1e4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Dec 2021 16:24:17 +0100 Subject: [PATCH 0167/1921] manta subworkflow --- conf/modules.config | 8 ++++ .../modules => local}/manta/germline/main.nf | 11 ++---- .../modules => local}/manta/germline/meta.yml | 11 ------ subworkflows/local/call_sv_manta.nf | 39 +++++++++++++++++++ subworkflows/local/prepare_genome.nf | 4 +- workflows/raredisease.nf | 10 +++++ 6 files changed, 64 insertions(+), 19 deletions(-) rename modules/{nf-core/modules => local}/manta/germline/main.nf (89%) rename modules/{nf-core/modules => local}/manta/germline/meta.yml (88%) create mode 100644 subworkflows/local/call_sv_manta.nf diff --git a/conf/modules.config b/conf/modules.config index 45a68577..d0fda88d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -128,6 +128,14 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + // CALL_SV_MANTA + withName: MANTA { + publishDir = [ + path: { "${params.outdir}/manta" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { diff --git a/modules/nf-core/modules/manta/germline/main.nf b/modules/local/manta/germline/main.nf similarity index 89% rename from modules/nf-core/modules/manta/germline/main.nf rename to modules/local/manta/germline/main.nf index 2a8c0acc..e40a87df 100644 --- a/modules/nf-core/modules/manta/germline/main.nf +++ b/modules/local/manta/germline/main.nf @@ -8,11 +8,10 @@ process MANTA_GERMLINE { 'quay.io/biocontainers/manta:1.6.0--h9ee0642_1' }" input: - tuple val(meta), path(input), path(input_index) + tuple val(meta), path(bams) + path bam_index path fasta - path fai - path target_bed - path target_bed_tbi + path fasta_fai output: tuple val(meta), path("*candidate_small_indels.vcf.gz") , emit: candidate_small_indels_vcf @@ -26,12 +25,10 @@ process MANTA_GERMLINE { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def options_manta = target_bed ? "--exome --callRegions $target_bed" : "" """ configManta.py \ - --bam $input \ + --bam ${bams.join(' --bam ')} \ --reference $fasta \ - $options_manta \ --runDir manta python manta/runWorkflow.py -m local -j $task.cpus diff --git a/modules/nf-core/modules/manta/germline/meta.yml b/modules/local/manta/germline/meta.yml similarity index 88% rename from modules/nf-core/modules/manta/germline/meta.yml rename to modules/local/manta/germline/meta.yml index 3bdb8264..7f8d0f66 100644 --- a/modules/nf-core/modules/manta/germline/meta.yml +++ b/modules/local/manta/germline/meta.yml @@ -39,14 +39,6 @@ input: type: file description: Genome reference FASTA index file pattern: "*.{fa.fai,fasta.fai}" - - target_bed: - type: file - description: BED file containing target regions for variant calling - pattern: "*.{bed}" - - target_bed_tbi: - type: file - description: Index for BED file containing target regions for variant calling - pattern: "*.{bed.tbi}" output: - meta: @@ -82,6 +74,3 @@ output: type: file description: File containing software versions pattern: "versions.yml" - -authors: - - "@maxulysse" diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf new file mode 100644 index 00000000..9cba6660 --- /dev/null +++ b/subworkflows/local/call_sv_manta.nf @@ -0,0 +1,39 @@ +// +// A structural variant caller workflow for manta +// + +include { MANTA_GERMLINE as MANTA } from '../../modules/local/manta/germline/main' + +workflow CALL_SV_MANTA { + take: + bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] + fasta // path(fasta) + fai // path(fai) + ch_case_info // channel: [ case_id ] + + main: + ch_versions = Channel.empty() + + bam.collect{it[1]} + .toList() + .set { bam_file_list } + + bai.collect{it[1]} + .set { bai_file_list } + + ch_case_info.combine(bam_file_list) + .set { manta_input_bams } + + MANTA ( manta_input_bams, bai_file_list, fasta, fai ) + ch_versions = ch_versions.mix(MANTA.out.versions) + + emit: + candidate_small_indels_vcf = MANTA.out.candidate_small_indels_vcf + candidate_small_indels_vcf_tbi = MANTA.out.candidate_small_indels_vcf_tbi + candidate_sv_vcf = MANTA.out.candidate_sv_vcf + candidate_sv_vcf_tbi = MANTA.out.candidate_sv_vcf_tbi + diploid_sv_vcf = MANTA.out.diploid_sv_vcf + diploid_sv_vcf_tbi = MANTA.out.diploid_sv_vcf_tbi + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 0b6f4138..a4b88c54 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -26,7 +26,9 @@ workflow PREPARE_GENOME { if ( params.fasta_fai ) { ch_fai = file(params.fasta_fai) } else { - ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ).fai // TODO: faidx now requires meta info for fasta due to pipelines with multi references e.g. de novo + ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ) + .fai + .collect{it[1]} // TODO: faidx now requires meta info for fasta due to pipelines with multi references e.g. de novo ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index db8741c8..5b4ca877 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -70,6 +70,7 @@ include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expan // include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' +include { CALL_SV_MANTA } from '../subworkflows/local/call_sv_manta' /* ======================================================================================== @@ -146,6 +147,15 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + CALL_SV_MANTA ( + ch_marked_bam, + ch_marked_bai, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + INPUT_CHECK.out.ch_case_info + ) + ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) + // // MODULE: Pipeline reporting // From 13835bc1cecfb637613a0d6cd46aa55b63d6bacf Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 16 Dec 2021 09:34:05 +0100 Subject: [PATCH 0168/1921] should be fifinal --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- assets/nf-core-raredisease_logo_light.png | Bin 27416 -> 12342 bytes docs/images/nf-core-raredisease_logo_dark.png | Bin 0 -> 75872 bytes .../images/nf-core-raredisease_logo_light.png | Bin 65627 -> 75763 bytes 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/images/nf-core-raredisease_logo_dark.png diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 4c482b24..2ca71ec3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -36,7 +36,7 @@ body: attributes: label: Relevant files description: | - Please upload (drag and drop) and relevant files. Make into a `.zip` file if the extension is not allowed. + Please drag and drop the relevant files here. Create a `.zip` archive if the extension is not allowed. Your verbose log file `.nextflow.log` is often useful _(this is a hidden file in the directory where you launched the pipeline)_ as well as custom Nextflow configuration files. - type: textarea diff --git a/assets/nf-core-raredisease_logo_light.png b/assets/nf-core-raredisease_logo_light.png index 0605a7520f7e6ce5d66d3554b9ff94e463bd8492..0b66df05f45385dd4da8e4b17bf78e71a001f259 100644 GIT binary patch literal 12342 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 L(>>Y0+MoMhsb=rF literal 0 HcmV?d00001 diff --git a/docs/images/nf-core-raredisease_logo_light.png b/docs/images/nf-core-raredisease_logo_light.png index 9bbc68dcf9f99bb96ba2605f28d4ef1fae38d9a1..3e1c6ec69ad091015a8df756efd4bfee1d337628 100644 GIT binary patch literal 75763 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

n<> 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 Date: Thu, 16 Dec 2021 09:38:53 +0100 Subject: [PATCH 0169/1921] forgot to add the lint yml --- .github/workflows/linting.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index bce21ecf..3b448773 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install markdownlint run: npm install -g markdownlint-cli - name: Run Markdownlint @@ -53,7 +53,7 @@ jobs: - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install editorconfig-checker run: npm install -g editorconfig-checker @@ -67,7 +67,7 @@ jobs: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install yaml-lint run: npm install -g yaml-lint - name: Run yaml-lint @@ -101,6 +101,7 @@ jobs: nf-core: runs-on: ubuntu-latest steps: + - name: Check out pipeline code uses: actions/checkout@v2 @@ -113,8 +114,8 @@ jobs: - uses: actions/setup-python@v1 with: - python-version: "3.6" - architecture: "x64" + python-version: '3.6' + architecture: 'x64' - name: Install dependencies run: | @@ -141,3 +142,4 @@ jobs: lint_log.txt lint_results.md PR_number.txt + From 86374440dbb329a869ef3ec5d6546bbd32f42b37 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 16 Dec 2021 11:03:05 +0100 Subject: [PATCH 0170/1921] applying suggestions --- .nf-core.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 29578b29..9ae9fadb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,6 +2,3 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - assets/multiqc_config.yaml - - lib/NfcoreTemplate.groovy - - lib/NfcoreSchema.groovy - - assets/sendmail_template.txt From f64c3e419a9ba1a4d60424b2c21c3caea8f3d0e2 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 16 Dec 2021 11:08:23 +0100 Subject: [PATCH 0171/1921] copied failed files from template branch --- lib/NfcoreSchema.groovy | 4 ++-- lib/NfcoreTemplate.groovy | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 5f681078..40ab65f2 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -206,7 +206,7 @@ class NfcoreSchema { } def type = '[' + group_params.get(param).type + ']' def description = group_params.get(param).description - def defaultValue = group_params.get(param).default ? " [default: " + group_params.get(param).default.toString() + "]" : '' + 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 @@ -362,7 +362,7 @@ class NfcoreSchema { } } for (ex in causingExceptions) { - printExceptions(ex, params_json, log) + printExceptions(ex, params_json, log, enums) } } diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 06499409..2fc0a9b9 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -24,7 +24,7 @@ class NfcoreTemplate { public static void checkConfigProvided(workflow, log) { if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute enviroment but can be acheived via one or more of the following:\n" + + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + From 126e3fb510aa6e5a96ad9e3a6df81b8b020726e7 Mon Sep 17 00:00:00 2001 From: Mei Wu Date: Thu, 16 Dec 2021 12:12:28 +0100 Subject: [PATCH 0172/1921] removing trailing space --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 2e7ae4a5..24d1c0b1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -147,7 +147,7 @@ if (params.analysis_type == 'WES') { } // 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. +// 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. env { From 8a4d852b710316404031acf724005bd8307ca1a3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 13:30:29 +0100 Subject: [PATCH 0173/1921] check and create tbi index for bed files --- conf/genomes.config | 2 + conf/modules.config | 4 +- main.nf | 1 + modules.json | 3 ++ modules/nf-core/modules/tabix/bgzip/main.nf | 28 ++++++++++++ modules/nf-core/modules/tabix/bgzip/meta.yml | 41 +++++++++++++++++ .../nf-core/modules/tabix/bgziptabix/main.nf | 30 +++++++++++++ .../nf-core/modules/tabix/bgziptabix/meta.yml | 45 +++++++++++++++++++ nextflow_schema.json | 6 +++ subworkflows/local/prepare_bed.nf | 29 ++++++++++++ workflows/raredisease.nf | 7 +++ 11 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 modules/nf-core/modules/tabix/bgzip/main.nf create mode 100644 modules/nf-core/modules/tabix/bgzip/meta.yml create mode 100644 modules/nf-core/modules/tabix/bgziptabix/main.nf create mode 100644 modules/nf-core/modules/tabix/bgziptabix/meta.yml create mode 100644 subworkflows/local/prepare_bed.nf diff --git a/conf/genomes.config b/conf/genomes.config index f99de8be..fc8c4aa6 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -16,6 +16,7 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" + target_bed = "" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -23,6 +24,7 @@ params { bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" + target_bed = "${params.local_genomes}/twistexomerefseq_9.1_hg19_design.bed.gz" } } } diff --git a/conf/modules.config b/conf/modules.config index 45a68577..aad67837 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -53,7 +53,7 @@ process { pattern: "*fai" ] } - // PREPARE_VCF + // PREPARE_VCF && PREPARE_BED withName: CHECK_INPUT_VCF { publishDir = [ enabled: false, @@ -75,7 +75,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: TABIX_PV { + withName: 'TABIX_PV|TABIX_PB' { publishDir = [ path: { "${params.outdir}/vcf_check" }, mode: 'copy', diff --git a/main.nf b/main.nf index dcbc2046..d9ff2c5e 100644 --- a/main.nf +++ b/main.nf @@ -21,6 +21,7 @@ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') +params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') /* diff --git a/modules.json b/modules.json index 1cb4dd18..bb9c5cfc 100644 --- a/modules.json +++ b/modules.json @@ -51,6 +51,9 @@ "samtools/stats": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, + "tabix/bgzip": { + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + }, "tabix/tabix": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" } diff --git a/modules/nf-core/modules/tabix/bgzip/main.nf b/modules/nf-core/modules/tabix/bgzip/main.nf new file mode 100644 index 00000000..ed9362b2 --- /dev/null +++ b/modules/nf-core/modules/tabix/bgzip/main.nf @@ -0,0 +1,28 @@ +process TABIX_BGZIP { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) + 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' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.gz"), emit: gz + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + bgzip -c $args $input > ${prefix}.${input.getExtension()}.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/tabix/bgzip/meta.yml b/modules/nf-core/modules/tabix/bgzip/meta.yml new file mode 100644 index 00000000..f8318c7c --- /dev/null +++ b/modules/nf-core/modules/tabix/bgzip/meta.yml @@ -0,0 +1,41 @@ +name: tabix_bgzip +description: Compresses files +keywords: + - compress + - bgzip + - tabix +tools: + - bgzip: + description: | + Bgzip compresses files in a similar manner to, and compatible with, gzip. + homepage: https://www.htslib.org/doc/tabix.html + documentation: http://www.htslib.org/doc/bgzip.html + doi: 10.1093/bioinformatics/btp352 + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - file: + type: file + description: text file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - file: + type: file + description: Output compressed file + pattern: "*.{gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" diff --git a/modules/nf-core/modules/tabix/bgziptabix/main.nf b/modules/nf-core/modules/tabix/bgziptabix/main.nf new file mode 100644 index 00000000..20b47a9f --- /dev/null +++ b/modules/nf-core/modules/tabix/bgziptabix/main.nf @@ -0,0 +1,30 @@ +process TABIX_BGZIPTABIX { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) + 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' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.gz"), path("*.tbi"), emit: tbi + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + bgzip -c $args $input > ${prefix}.gz + tabix $args2 ${prefix}.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/tabix/bgziptabix/meta.yml b/modules/nf-core/modules/tabix/bgziptabix/meta.yml new file mode 100644 index 00000000..f2aed84d --- /dev/null +++ b/modules/nf-core/modules/tabix/bgziptabix/meta.yml @@ -0,0 +1,45 @@ +name: tabix_bgziptabix +description: bgzip a sorted tab-delimited genome file and then create tabix index +keywords: + - bgzip + - compress + - index + - tabix + - vcf +tools: + - tabix: + description: Generic indexer for TAB-delimited genome position files. + homepage: https://www.htslib.org/doc/tabix.html + documentation: https://www.htslib.org/doc/tabix.1.html + doi: 10.1093/bioinformatics/btq671 + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file + pattern: "*.{bed,gff,sam,vcf}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gz: + type: file + description: Output compressed file + pattern: "*.{gz}" + - tbi: + type: file + description: tabix index file + pattern: "*.{gz.tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" diff --git a/nextflow_schema.json b/nextflow_schema.json index 94f875cc..d3695fe2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -101,6 +101,12 @@ "fa_icon": "fas fa-bezier-curve", "description": "Path to directory for gnomad vcf." }, + "target_bed": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-bezier-curve", + "description": "Path to directory for target bed file." + }, "variant_catalog": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf new file mode 100644 index 00000000..51540db6 --- /dev/null +++ b/subworkflows/local/prepare_bed.nf @@ -0,0 +1,29 @@ +// +// Prepare reference bed files +// + +include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' +include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' + +workflow CHECK_BED { + take: + bed // file: bed file + + main: + tab_out = Channel.empty() + if (bed) { + bed_file = file(bed) + id = bed.split('/')[-1] + ch_bed = Channel.fromList([[['id':id], bed_file]]) + + if ( bed.endsWith(".gz") && file(bed, checkIfExists:true) ) { + tbi_out = TABIX_PT (ch_bed).tbi + tab_out = ch_bed.join(tbi_out) + } else if ( file(bed, checkIfExists:true) ) { + tab_out = TABIX_PBT (ch_bed).tbi + } + } + + emit: + idx = tab_out +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index db8741c8..47de6919 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -40,6 +40,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // include { INPUT_CHECK } from '../subworkflows/local/input_check' include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' +include { CHECK_BED } from '../subworkflows/local/prepare_bed' /* ======================================================================================== @@ -109,6 +110,12 @@ workflow RAREDISEASE { ).set { ch_gnomad_out } } + if (params.target_bed) { + CHECK_BED( + params.target_bed + ).set { ch_target_bed_out } + } + // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { ALIGN_BWAMEM2 ( From 4a912c48456cc670f9fb7160036654088b647523 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 13:41:51 +0100 Subject: [PATCH 0174/1921] update subworkflow --- modules.json | 4 +- modules/nf-core/modules/tabix/bgzip/main.nf | 28 ------------- modules/nf-core/modules/tabix/bgzip/meta.yml | 41 ------------------- .../nf-core/modules/tabix/bgziptabix/main.nf | 2 +- subworkflows/local/prepare_bed.nf | 2 +- 5 files changed, 4 insertions(+), 73 deletions(-) delete mode 100644 modules/nf-core/modules/tabix/bgzip/main.nf delete mode 100644 modules/nf-core/modules/tabix/bgzip/meta.yml diff --git a/modules.json b/modules.json index bb9c5cfc..e4e9b445 100644 --- a/modules.json +++ b/modules.json @@ -51,8 +51,8 @@ "samtools/stats": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, - "tabix/bgzip": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "tabix/bgziptabix": { + "git_sha": "e22966ce74340cb671576143e5fdbbd71670cffa" }, "tabix/tabix": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" diff --git a/modules/nf-core/modules/tabix/bgzip/main.nf b/modules/nf-core/modules/tabix/bgzip/main.nf deleted file mode 100644 index ed9362b2..00000000 --- a/modules/nf-core/modules/tabix/bgzip/main.nf +++ /dev/null @@ -1,28 +0,0 @@ -process TABIX_BGZIP { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) - 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' }" - - input: - tuple val(meta), path(input) - - output: - tuple val(meta), path("*.gz"), emit: gz - path "versions.yml" , emit: versions - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - bgzip -c $args $input > ${prefix}.${input.getExtension()}.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/modules/tabix/bgzip/meta.yml b/modules/nf-core/modules/tabix/bgzip/meta.yml deleted file mode 100644 index f8318c7c..00000000 --- a/modules/nf-core/modules/tabix/bgzip/meta.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: tabix_bgzip -description: Compresses files -keywords: - - compress - - bgzip - - tabix -tools: - - bgzip: - description: | - Bgzip compresses files in a similar manner to, and compatible with, gzip. - homepage: https://www.htslib.org/doc/tabix.html - documentation: http://www.htslib.org/doc/bgzip.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - file: - type: file - description: text file -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - file: - type: file - description: Output compressed file - pattern: "*.{gz}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@joseespinosa" - - "@drpatelh" - - "@maxulysse" diff --git a/modules/nf-core/modules/tabix/bgziptabix/main.nf b/modules/nf-core/modules/tabix/bgziptabix/main.nf index 20b47a9f..e419d153 100644 --- a/modules/nf-core/modules/tabix/bgziptabix/main.nf +++ b/modules/nf-core/modules/tabix/bgziptabix/main.nf @@ -11,7 +11,7 @@ process TABIX_BGZIPTABIX { tuple val(meta), path(input) output: - tuple val(meta), path("*.gz"), path("*.tbi"), emit: tbi + tuple val(meta), path("*.gz"), path("*.tbi"), emit: gz_tbi path "versions.yml" , emit: versions script: diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index 51540db6..e855373f 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -20,7 +20,7 @@ workflow CHECK_BED { tbi_out = TABIX_PT (ch_bed).tbi tab_out = ch_bed.join(tbi_out) } else if ( file(bed, checkIfExists:true) ) { - tab_out = TABIX_PBT (ch_bed).tbi + tab_out = TABIX_PBT (ch_bed).gz_tbi } } From f0632b2cff0c02619a29b7fa5247ac8f59887626 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 14:05:34 +0100 Subject: [PATCH 0175/1921] add link --- .github/CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f29a1d9a..6ce415b8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -108,6 +108,8 @@ Occasionally, you might find yourself wanting to reuse a module with options tha For a working example, please have a look at how we have reused `bcftools norm` in both [subworkflows/local/call_snv_deepvariant.nf](../subworkflows/local/call_snv_deepvariant.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf), and defined its subworkflow-specific options in [conf/modules.config](../conf/modules.config). +You can find more information about aliases in the nextflow documentation [here](https://www.nextflow.io/docs/edge/dsl2.html#module-aliases). + ### Nextflow version bumping If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` From 3e216df4ffba79af9fd326c619ffa8e8ae51c6e0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 15:38:14 +0100 Subject: [PATCH 0176/1921] add target bed to module --- modules/local/manta/germline/main.nf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/local/manta/germline/main.nf b/modules/local/manta/germline/main.nf index e40a87df..a4535f57 100644 --- a/modules/local/manta/germline/main.nf +++ b/modules/local/manta/germline/main.nf @@ -12,6 +12,8 @@ process MANTA_GERMLINE { path bam_index path fasta path fasta_fai + tuple val(meta), path(target_bed), path(target_bed_tbi) + output: tuple val(meta), path("*candidate_small_indels.vcf.gz") , emit: candidate_small_indels_vcf @@ -25,10 +27,12 @@ process MANTA_GERMLINE { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def options_manta = target_bed ? "--exome --callRegions $target_bed" : "" """ configManta.py \ --bam ${bams.join(' --bam ')} \ --reference $fasta \ + $options_manta \ --runDir manta python manta/runWorkflow.py -m local -j $task.cpus From 4ed92b6037838e6305fb84a2bd8a68dbe3054215 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 18:17:32 +0100 Subject: [PATCH 0177/1921] Update manta subworkflow to work with bed file --- modules/local/deepvariant/main.nf | 2 +- modules/local/manta/germline/main.nf | 2 +- subworkflows/local/call_sv_manta.nf | 15 +++++++++------ workflows/raredisease.nf | 6 ++++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf index 04a2de79..82979984 100644 --- a/modules/local/deepvariant/main.nf +++ b/modules/local/deepvariant/main.nf @@ -10,7 +10,7 @@ process DEEPVARIANT { input: tuple val(meta), path(bam), path(bai) path fasta - tuple val(fai_meta), path(fasta_fai) + path fasta_fai output: tuple val(meta), path("*.vcf.gz"), emit: vcf diff --git a/modules/local/manta/germline/main.nf b/modules/local/manta/germline/main.nf index a4535f57..db221453 100644 --- a/modules/local/manta/germline/main.nf +++ b/modules/local/manta/germline/main.nf @@ -12,7 +12,7 @@ process MANTA_GERMLINE { path bam_index path fasta path fasta_fai - tuple val(meta), path(target_bed), path(target_bed_tbi) + tuple val(bed_meta), path(target_bed), path(target_bed_tbi) output: diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf index 9cba6660..f65aada4 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/local/call_sv_manta.nf @@ -6,11 +6,12 @@ include { MANTA_GERMLINE as MANTA } from '../../modules/local/manta/germline/mai workflow CALL_SV_MANTA { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] - fasta // path(fasta) - fai // path(fai) - ch_case_info // channel: [ case_id ] + bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] + fasta // path(fasta) + fai // path(fai) + ch_case_info // channel: [ case_id ] + ch_bed // channel: [ val(meta), path(bed), path(bed_tbi) ] main: ch_versions = Channel.empty() @@ -25,7 +26,9 @@ workflow CALL_SV_MANTA { ch_case_info.combine(bam_file_list) .set { manta_input_bams } - MANTA ( manta_input_bams, bai_file_list, fasta, fai ) + ch_target_bed = ch_bed.ifEmpty([[],[],[]]) + + MANTA ( manta_input_bams, bai_file_list, fasta, fai, ch_target_bed ) ch_versions = ch_versions.mix(MANTA.out.versions) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4676fee5..33473832 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -111,10 +111,11 @@ workflow RAREDISEASE { ).set { ch_gnomad_out } } + ch_bed = Channel.empty() if (params.target_bed) { CHECK_BED( params.target_bed - ).set { ch_target_bed_out } + ).set { ch_target_bed } } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. @@ -159,7 +160,8 @@ workflow RAREDISEASE { ch_marked_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, - INPUT_CHECK.out.ch_case_info + INPUT_CHECK.out.ch_case_info, + ch_target_bed ) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) From da7b5be4769171d89feaa0ed01dcd0c5b8118ea5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 18:21:49 +0100 Subject: [PATCH 0178/1921] Fix variable name --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 33473832..ba75eb10 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -161,7 +161,7 @@ workflow RAREDISEASE { PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.ch_case_info, - ch_target_bed + ch_bed ) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) From 560327f830251633de7b827f43a45ccd07cfc549 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 18:48:39 +0100 Subject: [PATCH 0179/1921] update modules.json --- modules.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules.json b/modules.json index 2d244fd5..e4e9b445 100644 --- a/modules.json +++ b/modules.json @@ -24,9 +24,6 @@ "glnexus": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, - "manta/germline": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" - }, "multiqc": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, From 789224f27abf250c2d6d5b2d980abf7fbca587d3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Dec 2021 23:52:32 +0100 Subject: [PATCH 0180/1921] fix modules_config --- conf/modules.config | 2 +- subworkflows/local/prepare_genome.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 69fa8fcb..3afa801b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -68,7 +68,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'TABIX_PV|TABIX_PB' { + withName: 'TABIX_PV|TABIX_PT|TABIX_PBT' { publishDir = [ path: { "${params.outdir}/vcf_check" }, mode: 'copy', diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index a4b88c54..7310a41e 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -28,7 +28,7 @@ workflow PREPARE_GENOME { } else { ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ) .fai - .collect{it[1]} // TODO: faidx now requires meta info for fasta due to pipelines with multi references e.g. de novo + .collect{it[1]} ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } From 09aefc00ae9a4839595e808010ecb8ed71ddd2c7 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 20 Dec 2021 13:25:05 +0100 Subject: [PATCH 0181/1921] Use stubs when present to run tests --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97c32da7..ef641d7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,4 +47,4 @@ jobs: # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker + nextflow run ${GITHUB_WORKSPACE} -profile test,docker -stub From ca82c61edf01d3ba4524c89bab7a96ce0c0c88ac Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 20 Dec 2021 13:33:36 +0100 Subject: [PATCH 0182/1921] Modify pull request template to use -stub as test command --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 94c01b6c..6d0e73dd 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,7 +19,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). -- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker -stub`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. From a8330c4a76d455aaa9f60ce259e9438017873420 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Mon, 20 Dec 2021 14:45:59 +0100 Subject: [PATCH 0183/1921] PULL_REQUEST_TEMPLATE.md in file unchanged --- .nf-core.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.nf-core.yml b/.nf-core.yml index b49bcbf1..99e8d5c3 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,4 +2,5 @@ lint: files_unchanged: - .github/CONTRIBUTING.md - .github/ISSUE_TEMPLATE/bug_report.yml + - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml From 0ccdfedb503eac42c6c4a46b4a6a10c13e266b29 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Dec 2021 18:11:26 +0100 Subject: [PATCH 0184/1921] review suggestions --- modules/local/manta/germline/main.nf | 6 +++--- modules/local/manta/germline/meta.yml | 4 ++-- subworkflows/local/call_sv_manta.nf | 4 +--- workflows/raredisease.nf | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/modules/local/manta/germline/main.nf b/modules/local/manta/germline/main.nf index db221453..87512e08 100644 --- a/modules/local/manta/germline/main.nf +++ b/modules/local/manta/germline/main.nf @@ -8,8 +8,8 @@ process MANTA_GERMLINE { 'quay.io/biocontainers/manta:1.6.0--h9ee0642_1' }" input: - tuple val(meta), path(bams) - path bam_index + tuple val(meta), path(inputs) + path indices path fasta path fasta_fai tuple val(bed_meta), path(target_bed), path(target_bed_tbi) @@ -30,7 +30,7 @@ process MANTA_GERMLINE { def options_manta = target_bed ? "--exome --callRegions $target_bed" : "" """ configManta.py \ - --bam ${bams.join(' --bam ')} \ + --bam ${inputs.join(' --bam ')} \ --reference $fasta \ $options_manta \ --runDir manta diff --git a/modules/local/manta/germline/meta.yml b/modules/local/manta/germline/meta.yml index 7f8d0f66..60d46201 100644 --- a/modules/local/manta/germline/meta.yml +++ b/modules/local/manta/germline/meta.yml @@ -21,8 +21,8 @@ input: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + Groovy Map containing case information + e.g. [ id:'case_id' ] - input: type: file description: BAM/CRAM/SAM file diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf index f65aada4..29f595d1 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/local/call_sv_manta.nf @@ -14,8 +14,6 @@ workflow CALL_SV_MANTA { ch_bed // channel: [ val(meta), path(bed), path(bed_tbi) ] main: - ch_versions = Channel.empty() - bam.collect{it[1]} .toList() .set { bam_file_list } @@ -29,7 +27,7 @@ workflow CALL_SV_MANTA { ch_target_bed = ch_bed.ifEmpty([[],[],[]]) MANTA ( manta_input_bams, bai_file_list, fasta, fai, ch_target_bed ) - ch_versions = ch_versions.mix(MANTA.out.versions) + ch_versions = MANTA.out.versions emit: candidate_small_indels_vcf = MANTA.out.candidate_small_indels_vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ba75eb10..eaebd23a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -111,7 +111,7 @@ workflow RAREDISEASE { ).set { ch_gnomad_out } } - ch_bed = Channel.empty() + ch_target_bed = Channel.empty() if (params.target_bed) { CHECK_BED( params.target_bed @@ -161,7 +161,7 @@ workflow RAREDISEASE { PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.ch_case_info, - ch_bed + ch_target_bed ) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) From a47f069cf629a06ecf4adb5aa502f82ae0bcbaaf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:32:01 +0100 Subject: [PATCH 0185/1921] add analysis type if block --- conf/test.config | 3 +++ subworkflows/local/call_sv_manta.nf | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 13545420..2eb27673 100644 --- a/conf/test.config +++ b/conf/test.config @@ -30,4 +30,7 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' + + target_bed = "${params.local_genomes}/twistexomerefseq_9.1_hg19_chr20.design.bed" + } diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf index 29f595d1..86de5daf 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/local/call_sv_manta.nf @@ -24,9 +24,12 @@ workflow CALL_SV_MANTA { ch_case_info.combine(bam_file_list) .set { manta_input_bams } - ch_target_bed = ch_bed.ifEmpty([[],[],[]]) - - MANTA ( manta_input_bams, bai_file_list, fasta, fai, ch_target_bed ) + if (params.analysis_type == "WGS") { + MANTA ( manta_input_bams, bai_file_list, fasta, fai, [[],[],[]] ) + } else { + ch_target_bed = ch_bed.ifEmpty([[],[],[]]) + MANTA ( manta_input_bams, bai_file_list, fasta, fai, ch_target_bed ) + } ch_versions = MANTA.out.versions emit: From f1f9afe633f0501c6a0c7fa3a39c1ea0050b4a3e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:33:07 +0100 Subject: [PATCH 0186/1921] update test config --- conf/test.config | 2 -- 1 file changed, 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 2eb27673..12b3c1f9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,6 +31,4 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' - target_bed = "${params.local_genomes}/twistexomerefseq_9.1_hg19_chr20.design.bed" - } From 1acf71709e7fde474e9558e098f26157d84578d2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Dec 2021 16:12:26 +0100 Subject: [PATCH 0187/1921] update comment --- workflows/raredisease.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eaebd23a..e5581ac7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -155,6 +155,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + // TODO: Move this to a SV calling workflow CALL_SV_MANTA ( ch_marked_bam, ch_marked_bai, From 8d8fb4a5a6d23185ec64a42a5c82ee141fd5463f Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:35:21 +0100 Subject: [PATCH 0188/1921] first edits --- subworkflows/nf-core/call_structural_variants.nf | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 96729b66..c88109bb 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -3,19 +3,14 @@ // // CHANGE: swap this example line for the real subworkflow -params.bwamem2_idx_options = [:] - -// CHANGE: swap this example line for the real subworkflow -include { PREPARE_GENOME } from './prepare_genome' addParams( - options: params.bwamem2_idx_options -) +include { CALL_SV_MANTA } from '../local/call_sv_manta' workflow CALL_STRUCTURAL_VARIANTS { take: bam // channel: [ val(meta), path(bam) ] fasta // channel: [ path(genome.fasta) ] - fai // channel: [ path(genome.fai) ] + fai // channel: [ path(genome.fai) ] main: ch_versions = Channel.empty() From 63239e1f51814cbbfd8862ce9e5d7dc87c519599 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 11:52:55 +0100 Subject: [PATCH 0189/1921] awaiting chrom_sizes process --- subworkflows/nf-core/qc_bam.nf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index edcb910a..2fc72189 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -4,7 +4,9 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' + include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' workflow QC_BAM { @@ -27,6 +29,8 @@ workflow QC_BAM { // TIDDIT COVERAGE TIDDIT_COV ( bam, [] ) // 2nd pos. arg is req. only for cram input + UCSC_WIGTOBIGWIG ( TIDDIT_COV.out.wig ) + ch_wig = TIDDIT_COV.out.wig ch_versions = ch_versions.mix(TIDDIT_COV.out.versions) From d03d2262f7793bde713b05c52be6a89ad5b9cc5c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 13:51:24 +0100 Subject: [PATCH 0190/1921] we can emit chrom sizes --- conf/modules.config | 5 +++++ modules/local/get_chrom_sizes.nf | 24 ++++++++++++++++++++++++ subworkflows/local/prepare_genome.nf | 8 +++++++- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 modules/local/get_chrom_sizes.nf diff --git a/conf/modules.config b/conf/modules.config index 3afa801b..bb84d936 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -46,6 +46,11 @@ process { pattern: "*fai" ] } + withName: GET_CHROM_SIZES { + publishDir = [ + enabled: false, + ] + } // PREPARE_VCF && PREPARE_BED withName: CHECK_INPUT_VCF { publishDir = [ diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf new file mode 100644 index 00000000..b7f4c3fc --- /dev/null +++ b/modules/local/get_chrom_sizes.nf @@ -0,0 +1,24 @@ +process GET_CHROM_SIZES { + tag "$fai" + + conda (params.enable_conda ? "conda-forge::coreutils=8.31" : null) + 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' }" + + input: + path fai + + output: + path '*.sizes' , emit: sizes + path "versions.yml", emit: versions + + script: + """ + cut -f 1,2 $fai > ${fai}.sizes + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cut: \$(echo \$(cut --help 2>&1 | head -n 1 | cut -f1,2 -d' ')) + END_VERSIONS + """ +} \ No newline at end of file diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 7310a41e..8985678d 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -5,12 +5,14 @@ include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' +include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' + workflow PREPARE_GENOME { take: fasta // path: genome.fasta main: - ch_fasta = file(fasta) + ch_fasta = file(fasta) ch_versions = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required @@ -32,11 +34,15 @@ workflow PREPARE_GENOME { ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } + ch_chrom_sizes = GET_CHROM_SIZES ( ch_fai ).sizes + ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) + emit: fasta = ch_fasta // path: genome.fasta fai = ch_fai // path: genome.fasta.fai bwamem2_index = ch_bwamem2_index // path: bwamem2/index + chrom_sizes = ch_chrom_sizes // path: chrom.sizes versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From f8fddb8c2a3cf56adf85c1781a120a2f86f62a4c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 14:01:12 +0100 Subject: [PATCH 0191/1921] attmpt 1: fix lint fail --- modules/local/get_chrom_sizes.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index b7f4c3fc..44824b89 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -21,4 +21,4 @@ process GET_CHROM_SIZES { cut: \$(echo \$(cut --help 2>&1 | head -n 1 | cut -f1,2 -d' ')) END_VERSIONS """ -} \ No newline at end of file +} From adfb3d94d32604c79b35f28fe322d6d8a0a0f33b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 14:20:04 +0100 Subject: [PATCH 0192/1921] applying suggestions Co-authored-by: Anders Jemt --- modules/local/get_chrom_sizes.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 44824b89..b4aff702 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -16,6 +16,7 @@ process GET_CHROM_SIZES { script: """ cut -f 1,2 $fai > ${fai}.sizes + cat <<-END_VERSIONS > versions.yml "${task.process}": cut: \$(echo \$(cut --help 2>&1 | head -n 1 | cut -f1,2 -d' ')) From 9b17b2a675c1c2c9f57f2aa7bfbce06d96fbd622 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 14:21:47 +0100 Subject: [PATCH 0193/1921] attmpt2: fix lint fails --- modules/local/get_chrom_sizes.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index b4aff702..d87b3e39 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -16,7 +16,7 @@ process GET_CHROM_SIZES { script: """ cut -f 1,2 $fai > ${fai}.sizes - + cat <<-END_VERSIONS > versions.yml "${task.process}": cut: \$(echo \$(cut --help 2>&1 | head -n 1 | cut -f1,2 -d' ')) From e50431ab786856e0bb83c94730964b7a86a3cd1a Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Mon, 10 Jan 2022 15:41:09 +0100 Subject: [PATCH 0194/1921] Add default variant catalog --- subworkflows/local/call_repeat_expansions.nf | 2 +- subworkflows/local/prepare_genome.nf | 12 ++++++++++++ workflows/raredisease.nf | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 5530e447..936340f5 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -13,7 +13,7 @@ workflow CALL_REPEAT_EXPANSIONS { main: ch_versions = Channel.empty() - EXPANSIONHUNTER( bam, fasta, file(variant_catalog) ) + EXPANSIONHUNTER( bam, fasta, variant_catalog ) ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) emit: diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 7310a41e..2204c3f0 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -8,6 +8,7 @@ include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/ma workflow PREPARE_GENOME { take: fasta // path: genome.fasta + variant_catalog // path: variant_catalog.json main: ch_fasta = file(fasta) @@ -32,11 +33,22 @@ workflow PREPARE_GENOME { ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } + if ( params.variant_catalog && file(params.variant_catalog, checkIfExists:true) ) { + ch_variant_catalog = file(params.variant_catalog) + } else { + if ( params.genome == 'GRCh38' ) { + ch_variant_catalog = file("https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/reference/variant_catalog_grch38.json") + } else { + ch_variant_catalog = file("https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/reference/variant_catalog_grch37.json") + } + } + emit: fasta = ch_fasta // path: genome.fasta fai = ch_fai // path: genome.fasta.fai bwamem2_index = ch_bwamem2_index // path: bwamem2/index + variant_catalog = ch_variant_catalog // path: variant_catalog.json versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e5581ac7..816fc5c9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -101,7 +101,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. - PREPARE_GENOME ( params.fasta ) + PREPARE_GENOME ( params.fasta, params.variant_catalog ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) if (params.gnomad) { @@ -141,7 +141,7 @@ workflow RAREDISEASE { CALL_REPEAT_EXPANSIONS ( ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, - params.variant_catalog + PREPARE_GENOME.out.variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) From dac7f3ec1dde1bd3569a47f172179fbe2400db11 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 16:20:15 +0100 Subject: [PATCH 0195/1921] made ucsc/wig2bw into local for now --- conf/modules.config | 7 ++++ modules.json | 3 -- modules/local/ucsc/wigtobigwig/main.nf | 35 ++++++++++++++++++ .../ucsc/wigtobigwig/meta.yml | 0 .../modules/ucsc/wigtobigwig/main.nf | 0 nf-core/modules/ucsc/wigtobigwig/meta.yml | 37 +++++++++++++++++++ .../{nf-core => local}/prepare_genome.nf | 0 subworkflows/{nf-core => local}/qc_bam.nf | 12 +++--- workflows/raredisease.nf | 12 +++--- 9 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 modules/local/ucsc/wigtobigwig/main.nf rename modules/{nf-core/modules => local}/ucsc/wigtobigwig/meta.yml (100%) rename {modules/nf-core => nf-core}/modules/ucsc/wigtobigwig/main.nf (100%) create mode 100644 nf-core/modules/ucsc/wigtobigwig/meta.yml rename subworkflows/{nf-core => local}/prepare_genome.nf (100%) rename subworkflows/{nf-core => local}/qc_bam.nf (72%) diff --git a/conf/modules.config b/conf/modules.config index 56d20434..15b89cef 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -204,6 +204,13 @@ process { mode: 'copy' ] } + withName: .*QC_BAM:UCSC_WIGTOBIGWIG { + ext.args = '-clip' + publishDir = [ + path: { "${params.outdir}/tiddit_coverage" }, + mode: 'copy' + ] + } // nf-core modules withName: FASTQC { ext.args = '--quiet' diff --git a/modules.json b/modules.json index ae1ae6cc..c2a7e55c 100644 --- a/modules.json +++ b/modules.json @@ -59,9 +59,6 @@ }, "tiddit/cov": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" - }, - "ucsc/wigtobigwig": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" } } } diff --git a/modules/local/ucsc/wigtobigwig/main.nf b/modules/local/ucsc/wigtobigwig/main.nf new file mode 100644 index 00000000..f37d4a3d --- /dev/null +++ b/modules/local/ucsc/wigtobigwig/main.nf @@ -0,0 +1,35 @@ +def VERSION = '377' // Version information not provided by tool on CLI + +process UCSC_WIGTOBIGWIG { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) + 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' }" + + input: + tuple val(meta), path(wig) + path sizes + + output: + tuple val(meta), path("*.bw") , emit: bw + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + wigToBigWig \\ + $args \\ + $wig \\ + $sizes \\ + ${prefix}.bw + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ucsc: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml b/modules/local/ucsc/wigtobigwig/meta.yml similarity index 100% rename from modules/nf-core/modules/ucsc/wigtobigwig/meta.yml rename to modules/local/ucsc/wigtobigwig/meta.yml diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/nf-core/modules/ucsc/wigtobigwig/main.nf similarity index 100% rename from modules/nf-core/modules/ucsc/wigtobigwig/main.nf rename to nf-core/modules/ucsc/wigtobigwig/main.nf diff --git a/nf-core/modules/ucsc/wigtobigwig/meta.yml b/nf-core/modules/ucsc/wigtobigwig/meta.yml new file mode 100644 index 00000000..4723ff2b --- /dev/null +++ b/nf-core/modules/ucsc/wigtobigwig/meta.yml @@ -0,0 +1,37 @@ +name: ucsc_wigtobigwig +description: Convert ascii format wig file to binary big wig format +keywords: + - wig + - bigwig +tools: + - ucsc: + description: | + Convert ascii format wig file (in fixedStep, variableStep + or bedGraph format) to binary big wig format + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ['varies; see http://genome.ucsc.edu/license'] + +input: + - wig: + type: file + description: wig file + pattern: "*.{wig}" + - chromsizes: + type: file + description: chromosome sizes file + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - bw: + type: file + description: bigwig file + pattern: "*.{bw}" + +authors: + - "@jianhong" diff --git a/subworkflows/nf-core/prepare_genome.nf b/subworkflows/local/prepare_genome.nf similarity index 100% rename from subworkflows/nf-core/prepare_genome.nf rename to subworkflows/local/prepare_genome.nf diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/local/qc_bam.nf similarity index 72% rename from subworkflows/nf-core/qc_bam.nf rename to subworkflows/local/qc_bam.nf index 2fc72189..d71807a7 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -6,13 +6,14 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/pi include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' -include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/local/ucsc/wigtobigwig/main' workflow QC_BAM { take: - bam // channel: [ val(meta), path(bam) ] - fasta // path: genome.fasta + bam // channel: [ val(meta), path(bam) ] + fasta // path: genome.fasta + chrom_sizes // path: chrom.sizes main: ch_versions = Channel.empty() @@ -29,14 +30,15 @@ workflow QC_BAM { // TIDDIT COVERAGE TIDDIT_COV ( bam, [] ) // 2nd pos. arg is req. only for cram input - UCSC_WIGTOBIGWIG ( TIDDIT_COV.out.wig ) - ch_wig = TIDDIT_COV.out.wig + UCSC_WIGTOBIGWIG ( TIDDIT_COV.out.wig, chrom_sizes ) ch_versions = ch_versions.mix(TIDDIT_COV.out.versions) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] + tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] + bigwig = UCSC_WIGTOBIGWIG.out.bw // path: *.bigwig versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e5581ac7..ba438aa6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -60,16 +60,16 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' - -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { QC_BAM } from '../subworkflows/local/qc_bam' // // SUBWORKFLOW: Consists of mix/local modules // +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' + include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' include { CALL_SV_MANTA } from '../subworkflows/local/call_sv_manta' @@ -134,8 +134,10 @@ workflow RAREDISEASE { // STEP 1.5: BAM QUALITY CHECK QC_BAM ( ch_marked_bam, - PREPARE_GENOME.out.fasta + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.chrom_sizes ) + ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) // STEP 1.6: EXPANSIONHUNTER CALL_REPEAT_EXPANSIONS ( From 210717603705c24cebe574dd6b9bf198a3ea3b7f Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 16:25:10 +0100 Subject: [PATCH 0196/1921] attmpt 1: fix lint fail --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 15b89cef..5fca4864 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -204,7 +204,7 @@ process { mode: 'copy' ] } - withName: .*QC_BAM:UCSC_WIGTOBIGWIG { + withName: ".*QC_BAM:UCSC_WIGTOBIGWIG" { ext.args = '-clip' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, From 53a8db35dd9276f70651db75ea82ac693e35fb9c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 16:30:28 +0100 Subject: [PATCH 0197/1921] delete clingy files --- nf-core/modules/ucsc/wigtobigwig/main.nf | 34 --------------------- nf-core/modules/ucsc/wigtobigwig/meta.yml | 37 ----------------------- 2 files changed, 71 deletions(-) delete mode 100644 nf-core/modules/ucsc/wigtobigwig/main.nf delete mode 100644 nf-core/modules/ucsc/wigtobigwig/meta.yml diff --git a/nf-core/modules/ucsc/wigtobigwig/main.nf b/nf-core/modules/ucsc/wigtobigwig/main.nf deleted file mode 100644 index 4c596c9a..00000000 --- a/nf-core/modules/ucsc/wigtobigwig/main.nf +++ /dev/null @@ -1,34 +0,0 @@ -def VERSION = '377' // Version information not provided by tool on CLI - -process UCSC_WIGTOBIGWIG { - tag '$wig' - label 'process_medium' - - conda (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) - 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' }" - - input: - path wig - path sizes - - output: - path "*.bw" , emit: bw - path "versions.yml", emit: versions - - script: - def args = task.ext.args ?: '' - """ - wigToBigWig \\ - $args \\ - $wig \\ - $sizes \\ - ${wig.getSimpleName()}.bw - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ucsc: $VERSION - END_VERSIONS - """ -} diff --git a/nf-core/modules/ucsc/wigtobigwig/meta.yml b/nf-core/modules/ucsc/wigtobigwig/meta.yml deleted file mode 100644 index 4723ff2b..00000000 --- a/nf-core/modules/ucsc/wigtobigwig/meta.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: ucsc_wigtobigwig -description: Convert ascii format wig file to binary big wig format -keywords: - - wig - - bigwig -tools: - - ucsc: - description: | - Convert ascii format wig file (in fixedStep, variableStep - or bedGraph format) to binary big wig format - homepage: None - documentation: None - tool_dev_url: None - doi: "" - licence: ['varies; see http://genome.ucsc.edu/license'] - -input: - - wig: - type: file - description: wig file - pattern: "*.{wig}" - - chromsizes: - type: file - description: chromosome sizes file - -output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bw: - type: file - description: bigwig file - pattern: "*.{bw}" - -authors: - - "@jianhong" From 6c44ecd865bef3cc57dd0c158d36cc3f085becba Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 10 Jan 2022 17:19:18 +0100 Subject: [PATCH 0198/1921] small typo to comment --- subworkflows/local/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index d71807a7..c18603cd 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -38,7 +38,7 @@ workflow QC_BAM { multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] - bigwig = UCSC_WIGTOBIGWIG.out.bw // path: *.bigwig + bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 1ed78b6be5150467503945650cd3d85fa027473c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 12 Jan 2022 09:46:00 +0100 Subject: [PATCH 0199/1921] reversed module --- modules.json | 3 +++ modules/{local => nf-core/modules}/ucsc/wigtobigwig/main.nf | 4 ++-- .../{local => nf-core/modules}/ucsc/wigtobigwig/meta.yml | 6 ++++++ subworkflows/{local => nf-core}/qc_bam.nf | 2 +- workflows/raredisease.nf | 2 +- 5 files changed, 13 insertions(+), 4 deletions(-) rename modules/{local => nf-core/modules}/ucsc/wigtobigwig/main.nf (89%) rename modules/{local => nf-core/modules}/ucsc/wigtobigwig/meta.yml (83%) rename subworkflows/{local => nf-core}/qc_bam.nf (95%) diff --git a/modules.json b/modules.json index c2a7e55c..c03c6521 100644 --- a/modules.json +++ b/modules.json @@ -59,6 +59,9 @@ }, "tiddit/cov": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + }, + "ucsc/wigtobigwig": { + "git_sha": "30e64becaa1e6c807a09a49a6d3d457ff3cf7251" } } } diff --git a/modules/local/ucsc/wigtobigwig/main.nf b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf similarity index 89% rename from modules/local/ucsc/wigtobigwig/main.nf rename to modules/nf-core/modules/ucsc/wigtobigwig/main.nf index f37d4a3d..6a1847b6 100644 --- a/modules/local/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf @@ -14,8 +14,8 @@ process UCSC_WIGTOBIGWIG { path sizes output: - tuple val(meta), path("*.bw") , emit: bw - path "versions.yml" , emit: versions + tuple val(meta), path("*.bw"), emit: bw + path "versions.yml" , emit: versions script: def args = task.ext.args ?: '' diff --git a/modules/local/ucsc/wigtobigwig/meta.yml b/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml similarity index 83% rename from modules/local/ucsc/wigtobigwig/meta.yml rename to modules/nf-core/modules/ucsc/wigtobigwig/meta.yml index 4723ff2b..5ca94bb4 100644 --- a/modules/local/ucsc/wigtobigwig/meta.yml +++ b/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml @@ -15,6 +15,11 @@ tools: licence: ['varies; see http://genome.ucsc.edu/license'] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - wig: type: file description: wig file @@ -35,3 +40,4 @@ output: authors: - "@jianhong" + - "@projectoriented" diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf similarity index 95% rename from subworkflows/local/qc_bam.nf rename to subworkflows/nf-core/qc_bam.nf index c18603cd..791ffe8e 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -6,7 +6,7 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/pi include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' -include { UCSC_WIGTOBIGWIG } from '../../modules/local/ucsc/wigtobigwig/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' workflow QC_BAM { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ba438aa6..4be26c05 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -62,7 +62,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { QC_BAM } from '../subworkflows/local/qc_bam' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' // // SUBWORKFLOW: Consists of mix/local modules From 8cf6a587d47c082ebd28ebd37e8ca86c7afcd15a Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 12 Jan 2022 09:58:19 +0100 Subject: [PATCH 0200/1921] woops, fixed path --- subworkflows/nf-core/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 791ffe8e..3ed2ce78 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -6,7 +6,7 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/pi include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' -include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' workflow QC_BAM { From d5adf410caaef1367a25f6fc83491144ebb6f1aa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 17 Jan 2022 17:05:59 +0100 Subject: [PATCH 0201/1921] add collecthsmetrics --- conf/genomes.config | 4 +- conf/modules.config | 32 ++++++++- modules.json | 15 +++++ modules/nf-core/modules/cat/cat/main.nf | 45 +++++++++++++ modules/nf-core/modules/cat/cat/meta.yml | 34 ++++++++++ .../modules/gatk4/bedtointervallist/main.nf | 39 +++++++++++ .../modules/gatk4/bedtointervallist/meta.yml | 40 +++++++++++ .../gatk4/createsequencedictionary/main.nf | 37 +++++++++++ .../gatk4/createsequencedictionary/meta.yml | 32 +++++++++ .../modules/gatk4/intervallisttools/main.nf | 51 ++++++++++++++ .../modules/gatk4/intervallisttools/meta.yml | 47 +++++++++++++ .../modules/picard/collecthsmetrics/main.nf | 48 ++++++++++++++ .../modules/picard/collecthsmetrics/meta.yml | 66 +++++++++++++++++++ subworkflows/local/prepare_bed.nf | 11 +++- subworkflows/local/prepare_genome.nf | 9 +-- subworkflows/nf-core/qc_bam.nf | 17 ++++- workflows/raredisease.nf | 8 ++- 17 files changed, 522 insertions(+), 13 deletions(-) create mode 100644 modules/nf-core/modules/cat/cat/main.nf create mode 100644 modules/nf-core/modules/cat/cat/meta.yml create mode 100644 modules/nf-core/modules/gatk4/bedtointervallist/main.nf create mode 100644 modules/nf-core/modules/gatk4/bedtointervallist/meta.yml create mode 100644 modules/nf-core/modules/gatk4/createsequencedictionary/main.nf create mode 100644 modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml create mode 100644 modules/nf-core/modules/gatk4/intervallisttools/main.nf create mode 100644 modules/nf-core/modules/gatk4/intervallisttools/meta.yml create mode 100644 modules/nf-core/modules/picard/collecthsmetrics/main.nf create mode 100644 modules/nf-core/modules/picard/collecthsmetrics/meta.yml diff --git a/conf/genomes.config b/conf/genomes.config index fc8c4aa6..3a72deb5 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -16,7 +16,7 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - target_bed = "" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -24,7 +24,7 @@ params { bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - target_bed = "${params.local_genomes}/twistexomerefseq_9.1_hg19_design.bed.gz" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" } } } diff --git a/conf/modules.config b/conf/modules.config index 5fca4864..180e786c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -73,13 +73,43 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'TABIX_PV|TABIX_PT|TABIX_PBT' { + withName: TABIX_PV { publishDir = [ path: { "${params.outdir}/vcf_check" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + withName: 'TABIX_PT|TABIX_PBT' { + publishDir = [ + path: { "${params.outdir}/bed_check" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'GATK_BILT' { + publishDir = [ + path: { "${params.outdir}/bed_check" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'GATK_ILT' { + ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' + publishDir = [ + path: { "${params.outdir}/bed_check" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'CAT_CAT_BAIT' { + ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' + publishDir = [ + path: { "${params.outdir}/bed_check" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } // CALL_SNV_DEEPVARIANT withName: DEEPVARIANT { ext.args = "--model_type=$params.analysis_type" diff --git a/modules.json b/modules.json index c03c6521..a4b7aa00 100644 --- a/modules.json +++ b/modules.json @@ -12,6 +12,9 @@ "bwamem2/mem": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "cat/cat": { + "git_sha": "c4549c0ecd1b02473471b507fd88a9fd5289d91c" + }, "custom/dumpsoftwareversions": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, @@ -21,12 +24,24 @@ "fastqc": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "gatk4/bedtointervallist": { + "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + }, + "gatk4/createsequencedictionary": { + "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + }, + "gatk4/intervallisttools": { + "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + }, "glnexus": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "multiqc": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, + "picard/collecthsmetrics": { + "git_sha": "e751e5040af57e1b4e06ed4e0f3efe6de25c1683" + }, "picard/collectmultiplemetrics": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, diff --git a/modules/nf-core/modules/cat/cat/main.nf b/modules/nf-core/modules/cat/cat/main.nf new file mode 100644 index 00000000..2efe20a5 --- /dev/null +++ b/modules/nf-core/modules/cat/cat/main.nf @@ -0,0 +1,45 @@ +process CAT_CAT { + label 'process_low' + + conda (params.enable_conda ? "conda-forge::pigz=2.3.4" : null) + 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' }" + + input: + path files_in + val file_out + + output: + path "${file_out}*" , emit: file_out + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def file_list = files_in.collect { it.toString() } + + // | input | output | command1 | command2 | + // |-----------|------------|----------|----------| + // | gzipped | gzipped | cat | | + // | ungzipped | ungzipped | cat | | + // | gzipped | ungzipped | zcat | | + // | ungzipped | gzipped | cat | pigz | + + def in_zip = file_list[0].endsWith('.gz') + def out_zip = file_out.endsWith('.gz') + def command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' + def command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + """ + $command1 \\ + $args \\ + ${file_list.join(' ')} \\ + $command2 \\ + > $file_out + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cat/cat/meta.yml b/modules/nf-core/modules/cat/cat/meta.yml new file mode 100644 index 00000000..b3f370ee --- /dev/null +++ b/modules/nf-core/modules/cat/cat/meta.yml @@ -0,0 +1,34 @@ +name: cat_cat +description: A module for concatenation of gzipped or uncompressed files +keywords: + - concatenate + - gzip + - cat +tools: + - cat: + description: Just concatenation + homepage: None + documentation: https://man7.org/linux/man-pages/man1/cat.1.html + tool_dev_url: None + licence: ['GPL-3.0-or-later'] +input: + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" + - file_out: + type: value + description: Full name of output file with or without .gz extension + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - file_out: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + +authors: + - "@erikrikarddaniel" diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf new file mode 100644 index 00000000..37f46f48 --- /dev/null +++ b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf @@ -0,0 +1,39 @@ +process GATK4_BEDTOINTERVALLIST { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + tuple val(meta), path(bed) + path sequence_dict + + output: + tuple val(meta), path('*.interval_list'), emit: interval_list + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" BedToIntervalList \\ + -I $bed \\ + -SD $sequence_dict \\ + -O ${prefix}.interval_list \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml b/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml new file mode 100644 index 00000000..910f9552 --- /dev/null +++ b/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml @@ -0,0 +1,40 @@ +name: gatk4_bedtointervallist +description: Creates an interval list from a bed file and a reference dict +keywords: + - bed + - interval list +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'] + - bed: + type: file + description: Input bed file + pattern: "*.bed" + - dict: + type: file + description: Sequence dictionary + pattern: "*.dict" +output: + - interval_list: + type: file + description: gatk interval list file + pattern: "*.interval_list" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf new file mode 100644 index 00000000..2cbd8948 --- /dev/null +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf @@ -0,0 +1,37 @@ +process GATK4_CREATESEQUENCEDICTIONARY { + tag "$fasta" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + path fasta + + output: + path "*.dict" , emit: dict + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def avail_mem = 6 + if (!task.memory) { + log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" \\ + CreateSequenceDictionary \\ + --REFERENCE $fasta \\ + --URI $fasta \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml new file mode 100644 index 00000000..54f479b3 --- /dev/null +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml @@ -0,0 +1,32 @@ +name: gatk4_createsequencedictionary +description: Creates a sequence dictionary for a reference sequence +keywords: + - dictionary + - fasta +tools: + - gatk: + 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: + - fasta: + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" +output: + - dict: + type: file + description: gatk dictionary file + pattern: "*.{dict}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" diff --git a/modules/nf-core/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/modules/gatk4/intervallisttools/main.nf new file mode 100644 index 00000000..17412160 --- /dev/null +++ b/modules/nf-core/modules/gatk4/intervallisttools/main.nf @@ -0,0 +1,51 @@ +process GATK4_INTERVALLISTTOOLS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + tuple val(meta), path(interval_list) + + output: + tuple val(meta), path("*_split/*/*.interval_list"), emit: interval_list + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK IntervalListTools] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + + mkdir ${prefix}_split + + gatk --java-options "-Xmx${avail_mem}g" \\ + IntervalListTools \\ + -I ${interval_list} \\ + -O ${prefix}_split \\ + $args + + python3 < versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/intervallisttools/meta.yml b/modules/nf-core/modules/gatk4/intervallisttools/meta.yml new file mode 100644 index 00000000..9e2d994f --- /dev/null +++ b/modules/nf-core/modules/gatk4/intervallisttools/meta.yml @@ -0,0 +1,47 @@ +name: gatk4_intervallisttools + +description: Splits the interval list file into unique, equally-sized interval files and place it under a directory +keywords: + - sort + - bed + - interval list +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 ] + + - interval_list: + type: file + description: Interval list file + pattern: "*.interval_list" + +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: Interval list files + pattern: "*.interval_list" + +authors: + - "@praveenraj2018" diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/modules/picard/collecthsmetrics/main.nf new file mode 100644 index 00000000..ae3e4d96 --- /dev/null +++ b/modules/nf-core/modules/picard/collecthsmetrics/main.nf @@ -0,0 +1,48 @@ +process PICARD_COLLECTHSMETRICS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + path fasta + path fai + path bait_intervals + path target_intervals + + output: + tuple val(meta), path("*collecthsmetrics.txt"), emit: hs_metrics + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "-R $fasta" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard CollectHsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + CollectHsMetrics \\ + $args \\ + $reference \\ + -BAIT_INTERVALS $bait_intervals \\ + -TARGET_INTERVALS $target_intervals \\ + -INPUT $bam \\ + -OUTPUT ${prefix}_collecthsmetrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard CollectHsMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/picard/collecthsmetrics/meta.yml b/modules/nf-core/modules/picard/collecthsmetrics/meta.yml new file mode 100644 index 00000000..4b94909f --- /dev/null +++ b/modules/nf-core/modules/picard/collecthsmetrics/meta.yml @@ -0,0 +1,66 @@ +name: picard_collecthsmetrics +description: Collects hybrid-selection (HS) metrics for a SAM or BAM file. +keywords: + - alignment + - metrics + - statistics + - insert + - hybrid-selection + - quality + - bam +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + tool_dev_url: https://github.com/broadinstitute/picard/ + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: An aligned BAM/SAM file + pattern: "*.{bam,sam}" + - fasta: + type: file + description: | + A reference file to calculate dropout metrics measuring reduced representation of reads. + Optional input. + pattern: "*.fasta" + - fai: + 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: + type: file + description: An interval list file that contains the locations of the targets. + pattern: "targets.interval_list" + +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" + - hs_metrics: + type: file + description: The metrics file. + pattern: "*_collecthsmetrics.txt" + +authors: + - "@projectoriented" diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index e855373f..c999dbe2 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -2,12 +2,15 @@ // Prepare reference bed files // +include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/modules/gatk4/bedtointervallist/main' +include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/modules/gatk4/intervallisttools/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' workflow CHECK_BED { take: bed // file: bed file + sd // path: sequence_dictionary main: tab_out = Channel.empty() @@ -22,8 +25,14 @@ workflow CHECK_BED { } else if ( file(bed, checkIfExists:true) ) { tab_out = TABIX_PBT (ch_bed).gz_tbi } + if (sd) { + interval_list = GATK_BILT (ch_bed, sd).interval_list + GATK_ILT(interval_list) + } } emit: - idx = tab_out + bed = tab_out + target_intervals = interval_list.collect{it[1]} + bait_intervals = GATK_ILT.out.interval_list.collect{it[1]} } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 8985678d..ce506449 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -4,7 +4,7 @@ include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' - +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD} from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' workflow PREPARE_GENOME { @@ -34,8 +34,9 @@ workflow PREPARE_GENOME { ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } - ch_chrom_sizes = GET_CHROM_SIZES ( ch_fai ).sizes - ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) + ch_sequence_dict = GATK_SD ( ch_fasta ).dict + ch_chrom_sizes = GET_CHROM_SIZES ( ch_fai ).sizes + ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) emit: @@ -43,6 +44,6 @@ workflow PREPARE_GENOME { fai = ch_fai // path: genome.fasta.fai bwamem2_index = ch_bwamem2_index // path: bwamem2/index chrom_sizes = ch_chrom_sizes // path: chrom.sizes - + sequence_dict = ch_sequence_dict versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 3ed2ce78..a5d729b3 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -3,7 +3,9 @@ // include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' +include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/modules/picard/collecthsmetrics/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' @@ -11,9 +13,12 @@ include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwi workflow QC_BAM { take: - bam // channel: [ val(meta), path(bam) ] - fasta // path: genome.fasta - chrom_sizes // path: chrom.sizes + bam // channel: [ val(meta), path(bam) ] + fasta // path: genome.fasta + fai // path: genome.fasta.fai + bait_intervals // path: bait.intervals_list + target_intervals // path: target.intervals_list + chrom_sizes // path: chrom.sizes main: ch_versions = Channel.empty() @@ -22,6 +27,11 @@ workflow QC_BAM { PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) + // COLLECT HS METRICS + CAT_CAT_BAIT ( bait_intervals, "bait.intervals_list" ) + PICARD_COLLECTHSMETRICS ( bam, fasta, fai, CAT_CAT.out.file_out, target_intervals ) + ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) + // QUALIMAP BAMQC gff = [] use_gff = false @@ -36,6 +46,7 @@ workflow QC_BAM { emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] + hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4be26c05..edca817d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -114,7 +114,8 @@ workflow RAREDISEASE { ch_target_bed = Channel.empty() if (params.target_bed) { CHECK_BED( - params.target_bed + params.target_bed, + PREPARE_GENOME.out.sequence_dict ).set { ch_target_bed } } @@ -135,6 +136,9 @@ workflow RAREDISEASE { QC_BAM ( ch_marked_bam, PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + CHECK_BED.out.bait_intervals, + CHECK_BED.out.target_intervals, PREPARE_GENOME.out.chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) @@ -164,7 +168,7 @@ workflow RAREDISEASE { PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.ch_case_info, - ch_target_bed + ch_target_bed.bed ) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) From 0b58bca2184b518850ee6b89430d791892f6b1eb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 17 Jan 2022 17:17:59 +0100 Subject: [PATCH 0202/1921] fix cat error --- subworkflows/nf-core/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index a5d729b3..7eb70393 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -29,7 +29,7 @@ workflow QC_BAM { // COLLECT HS METRICS CAT_CAT_BAIT ( bait_intervals, "bait.intervals_list" ) - PICARD_COLLECTHSMETRICS ( bam, fasta, fai, CAT_CAT.out.file_out, target_intervals ) + PICARD_COLLECTHSMETRICS ( bam, fasta, fai, CAT_CAT_BAIT.out.file_out, target_intervals ) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) // QUALIMAP BAMQC From 8ed4593ea8fa7f4aa501388516828a7d34796631 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 17 Jan 2022 17:33:09 +0100 Subject: [PATCH 0203/1921] add deepvariant from nf-core --- modules.json | 3 + modules/nf-core/modules/deepvariant/main.nf | 44 ++++++++++++++ modules/nf-core/modules/deepvariant/meta.yml | 62 ++++++++++++++++++++ subworkflows/local/call_snv_deepvariant.nf | 2 +- 4 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/modules/deepvariant/main.nf create mode 100644 modules/nf-core/modules/deepvariant/meta.yml diff --git a/modules.json b/modules.json index c03c6521..29d225d7 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,9 @@ "custom/dumpsoftwareversions": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, + "deepvariant": { + "git_sha": "1287ba48fe6b2acb7449cfca387c91dc2ddf6538" + }, "expansionhunter": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, diff --git a/modules/nf-core/modules/deepvariant/main.nf b/modules/nf-core/modules/deepvariant/main.nf new file mode 100644 index 00000000..98345c83 --- /dev/null +++ b/modules/nf-core/modules/deepvariant/main.nf @@ -0,0 +1,44 @@ +process DEEPVARIANT { + tag "$meta.id" + label 'process_medium' + + + if (params.enable_conda) { + exit 1, "Conda environments cannot be used when using the DeepVariant tool. Please use docker or singularity containers." + } + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'google/deepvariant:1.3.0' : + 'google/deepvariant:1.3.0' }" + + input: + tuple val(meta), path(input), path(index), path(intervals) + path(fasta) + path(fai) + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*g.vcf.gz"), emit: gvcf + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def regions = intervals ? "--regions ${intervals}" : "" + + """ + /opt/deepvariant/bin/run_deepvariant \\ + --ref=${fasta} \\ + --reads=${input} \\ + --output_vcf=${prefix}.vcf.gz \\ + --output_gvcf=${prefix}.g.vcf.gz \\ + ${args} \\ + ${regions} \\ + --num_shards=${task.cpus} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/deepvariant/meta.yml b/modules/nf-core/modules/deepvariant/meta.yml new file mode 100644 index 00000000..d4423d69 --- /dev/null +++ b/modules/nf-core/modules/deepvariant/meta.yml @@ -0,0 +1,62 @@ +name: deepvariant +description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data +keywords: + - variant calling + - machine learning +tools: + - deepvariant: + description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "https://doi.org/10.1038/nbt.4235" + licence: ['BSD-3-clause'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.bam/cram" + - index: + type: file + description: Index of BAM/CRAM file + pattern: "*.bai/crai" + - interval: + type: file + description: Interval file for targeted regions + pattern: "*.bed" + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - gvcf: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@abhi18av" diff --git a/subworkflows/local/call_snv_deepvariant.nf b/subworkflows/local/call_snv_deepvariant.nf index ee34f618..f9765063 100644 --- a/subworkflows/local/call_snv_deepvariant.nf +++ b/subworkflows/local/call_snv_deepvariant.nf @@ -4,7 +4,7 @@ include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/modules/bcftools/norm/main' include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' -include { DEEPVARIANT } from '../../modules/local/deepvariant/main' +include { DEEPVARIANT } from '../../modules/nf-core/modules/deepvariant/main' include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' From 4696654ac4aba0ce2c7c34162becca138e768084 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:25:48 +0100 Subject: [PATCH 0204/1921] update deepvariant subworkflow --- modules/local/deepvariant/main.nf | 39 --------------- modules/local/deepvariant/meta.yml | 58 ---------------------- subworkflows/local/call_snv_deepvariant.nf | 6 ++- 3 files changed, 5 insertions(+), 98 deletions(-) delete mode 100644 modules/local/deepvariant/main.nf delete mode 100644 modules/local/deepvariant/meta.yml diff --git a/modules/local/deepvariant/main.nf b/modules/local/deepvariant/main.nf deleted file mode 100644 index 82979984..00000000 --- a/modules/local/deepvariant/main.nf +++ /dev/null @@ -1,39 +0,0 @@ -process DEEPVARIANT { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? 'bioconda::deepvariant=1.2.0' : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker://google/deepvariant:1.2.0' : - 'google/deepvariant:1.2.0' }" - - input: - tuple val(meta), path(bam), path(bai) - path fasta - path fasta_fai - - output: - tuple val(meta), path("*.vcf.gz"), emit: vcf - tuple val(meta), path("*g.vcf.gz"), emit: gvcf - path "versions.yml", emit: versions - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - - """ - /opt/deepvariant/bin/run_deepvariant \\ - --ref=$fasta \\ - --reads=$bam \\ - --output_vcf=${prefix}.vcf.gz \\ - --output_gvcf=${prefix}.g.vcf.gz \\ - $args \\ - --num_shards=${task.cpus} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//') - END_VERSIONS - """ - -} diff --git a/modules/local/deepvariant/meta.yml b/modules/local/deepvariant/meta.yml deleted file mode 100644 index 05269a3b..00000000 --- a/modules/local/deepvariant/meta.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: deepvariant -description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data -keywords: - - variant calling - - machine learning -tools: - - deepvariant: - description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "https://doi.org/10.1038/nbt.4235" - licence: ['BSD-3-clause'] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.bam" - - bai: - type: file - description: Index of BAM file - pattern: "*.bai" - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fai" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" - - gvcf: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" - -authors: - - "@abhi18av" diff --git a/subworkflows/local/call_snv_deepvariant.nf b/subworkflows/local/call_snv_deepvariant.nf index f9765063..e14958e8 100644 --- a/subworkflows/local/call_snv_deepvariant.nf +++ b/subworkflows/local/call_snv_deepvariant.nf @@ -17,8 +17,12 @@ workflow CALL_SNV_DEEPVARIANT { main: ch_versions = Channel.empty() + bam.map { meta, bam, bai -> + return [meta, bam, bai, []] + } + .set { ch_bam } - DEEPVARIANT ( bam, fasta, fai ) + DEEPVARIANT ( ch_bam, fasta, fai ) DEEPVARIANT.out.gvcf.collect{it[1]} .toList() .set { file_list } From bdb8759d3b746a93506c09ad36316964302a755f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jan 2022 14:39:36 +0100 Subject: [PATCH 0205/1921] add target bed file --- conf/test.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/test.config b/conf/test.config index 12b3c1f9..06857741 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,4 +31,5 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' + target_bed = 'https://www.twistbioscience.com/sites/default/files/resources/2020-09/Twist_ComprehensiveExome_targets_hg38.bed' } From 5436a30c1cca0618aa3959423a6eeca6a38ab772 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jan 2022 14:58:42 +0100 Subject: [PATCH 0206/1921] fix variable name --- subworkflows/nf-core/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 7eb70393..7dbc6991 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -46,7 +46,7 @@ workflow QC_BAM { emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] + hs_metrics = PICARD_COLLECTHSMETRICS.out.hs_metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] From 7f7f403b4180f99f85d2680891131c6e61de2266 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jan 2022 15:26:01 +0100 Subject: [PATCH 0207/1921] update test target bed --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 06857741..6a105c49 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,5 +31,5 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' - target_bed = 'https://www.twistbioscience.com/sites/default/files/resources/2020-09/Twist_ComprehensiveExome_targets_hg38.bed' + target_bed = 'https://github.com/nf-core/test-datasets/blob/raredisease/testdata/target_chr20.bed' } From a23f491f4ca7b1e6065127ea4b146c5955ba31c2 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 18 Jan 2022 15:32:48 +0100 Subject: [PATCH 0208/1921] refactored manta --- .../local/call_structural_variants.nf | 25 +++++++++++++++++++ .../nf-core/call_structural_variants.nf | 20 --------------- 2 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 subworkflows/local/call_structural_variants.nf delete mode 100644 subworkflows/nf-core/call_structural_variants.nf diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf new file mode 100644 index 00000000..baaa02ad --- /dev/null +++ b/subworkflows/local/call_structural_variants.nf @@ -0,0 +1,25 @@ +// +// A nested subworkflow to call structural variants. +// + +include { CALL_SV_MANTA } from './call_sv_manta' + +workflow CALL_STRUCTURAL_VARIANTS { + + take: + bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] + fasta // channel: [ path(genome.fasta) ] + fai // channel: [ path(genome.fai) ] + case_info // channel: [ val(case_info) ] + target_bed // channel: [ path(target.bed) ] + + main: + ch_versions = Channel.empty() + + CALL_SV_MANTA( bam, bai, fasta, fai, case_info, target_bed ) + ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) + + emit: + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf deleted file mode 100644 index c88109bb..00000000 --- a/subworkflows/nf-core/call_structural_variants.nf +++ /dev/null @@ -1,20 +0,0 @@ -// -// A nested subworkflow to call structural variants. -// - -// CHANGE: swap this example line for the real subworkflow -include { CALL_SV_MANTA } from '../local/call_sv_manta' - -workflow CALL_STRUCTURAL_VARIANTS { - - take: - bam // channel: [ val(meta), path(bam) ] - fasta // channel: [ path(genome.fasta) ] - fai // channel: [ path(genome.fai) ] - - main: - ch_versions = Channel.empty() - - emit: - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} From 3a95d56055c464a248ab23fd164e18e87f5b9c32 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 18 Jan 2022 15:33:33 +0100 Subject: [PATCH 0209/1921] --amend --- workflows/raredisease.nf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4be26c05..8effbb44 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -71,7 +71,7 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' -include { CALL_SV_MANTA } from '../subworkflows/local/call_sv_manta' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' /* ======================================================================================== @@ -157,8 +157,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) - // TODO: Move this to a SV calling workflow - CALL_SV_MANTA ( + CALL_STRUCTURAL_VARIANTS ( ch_marked_bam, ch_marked_bai, PREPARE_GENOME.out.fasta, @@ -166,7 +165,7 @@ workflow RAREDISEASE { INPUT_CHECK.out.ch_case_info, ch_target_bed ) - ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) + ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) // // MODULE: Pipeline reporting From bd72a11dd713429cfaa8d5c95188e16114d4ea9a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jan 2022 15:37:27 +0100 Subject: [PATCH 0210/1921] update links --- conf/modules.config | 1 - conf/test.config | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 180e786c..29cab033 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -103,7 +103,6 @@ process { ] } withName: 'CAT_CAT_BAIT' { - ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' publishDir = [ path: { "${params.outdir}/bed_check" }, mode: 'copy', diff --git a/conf/test.config b/conf/test.config index 6a105c49..fa041a02 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,5 +31,5 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' - target_bed = 'https://github.com/nf-core/test-datasets/blob/raredisease/testdata/target_chr20.bed' + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' } From af4cd0b1deff64add6c621e3577ba4f1a541afda Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 18 Jan 2022 16:05:00 +0100 Subject: [PATCH 0211/1921] update modules config --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 5fca4864..102d38be 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -126,8 +126,8 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // CALL_SV_MANTA - withName: MANTA { + // CALL_STRUCTURAL_VARIANTS + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA" { publishDir = [ path: { "${params.outdir}/manta" }, mode: 'copy', From bb69e8061ad9690d2592f47a56b36832d72eee6d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 19 Jan 2022 00:16:09 +0100 Subject: [PATCH 0212/1921] check vcf refactor --- bin/check_input_vcf.py | 47 ------------------------------- modules/local/check_input_vcf.nf | 25 ++++++++++++++-- subworkflows/local/prepare_vcf.nf | 5 ++-- workflows/raredisease.nf | 6 ++-- 4 files changed, 28 insertions(+), 55 deletions(-) delete mode 100755 bin/check_input_vcf.py diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py deleted file mode 100755 index 9109605a..00000000 --- a/bin/check_input_vcf.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -import gzip -import argparse - -def parse_args(args=None): - Description = "Check that input vcf file has been normalized." - Epilog = "Example usage: python check_input_vcf.py --INPUT_VCF --OUTPUT " - - parser = argparse.ArgumentParser(description=Description, epilog=Epilog) - parser.add_argument("--INPUT_VCF", help="Input vcf file.") - parser.add_argument("--OUTPUT", help="Output file containing a list of files that need to be normalized.") - return parser.parse_args(args) - - -def check_vcf(file_in, file_out): - """ - This function checks that an input vcf file has been normalized with bcftools, and if not, it writes its basename and the filename - to a text file - - """ - - with open(file_out,'w') as out: - if file_in.endswith(".gz"): - base = os.path.basename(file_in).rsplit(".",2)[0] - out.write("id,filepath,processed\n") - with gzip.open(file_in,'rt') as vcf: - for line in vcf: - if line.startswith("##bcftools_norm"): - out.write(base + "," + os.path.abspath(file_in) + ",yes\n") - break - elif not line.startswith("#"): - out.write(base + "," + os.path.abspath(file_in) + ",no\n") - break - else: - print("Please compress %s using bgzip" %file_in ) - - -def main(args=None): - args = parse_args(args) - check_vcf(args.INPUT_VCF, args.OUTPUT) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 471e052f..8afcb4b3 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -14,8 +14,27 @@ process CHECK_INPUT_VCF { script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ """ - check_input_vcf.py \\ - --INPUT_VCF $vcf \\ - --OUTPUT checked_vcfs.txt + export INPUT_FILE=${vcf} + export OUTPUT_FILE="checked_vcfs.txt" + + python3 < def id = "${row.id}" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4be26c05..61d8c027 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -104,11 +104,11 @@ workflow RAREDISEASE { PREPARE_GENOME ( params.fasta ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) + ch_gnomad = Channel.empty() if (params.gnomad) { - ch_gnomad_in = Channel.fromPath(params.gnomad) CHECK_VCF( - ch_gnomad_in, PREPARE_GENOME.out.fasta, - ).set { ch_gnomad_out } + params.gnomad, PREPARE_GENOME.out.fasta, + ).set { ch_gnomad } } ch_target_bed = Channel.empty() From 0fd04e429e0cd0c754ed8a55e8482011c2a5655f Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 19 Jan 2022 10:15:42 +0100 Subject: [PATCH 0213/1921] :arrow_down: sv module --- modules.json | 3 ++ modules/nf-core/modules/tiddit/sv/main.nf | 38 ++++++++++++++++ modules/nf-core/modules/tiddit/sv/meta.yml | 51 ++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 modules/nf-core/modules/tiddit/sv/main.nf create mode 100644 modules/nf-core/modules/tiddit/sv/meta.yml diff --git a/modules.json b/modules.json index c03c6521..c7b9aa38 100644 --- a/modules.json +++ b/modules.json @@ -60,6 +60,9 @@ "tiddit/cov": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "tiddit/sv": { + "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + }, "ucsc/wigtobigwig": { "git_sha": "30e64becaa1e6c807a09a49a6d3d457ff3cf7251" } diff --git a/modules/nf-core/modules/tiddit/sv/main.nf b/modules/nf-core/modules/tiddit/sv/main.nf new file mode 100644 index 00000000..08eecc01 --- /dev/null +++ b/modules/nf-core/modules/tiddit/sv/main.nf @@ -0,0 +1,38 @@ +process TIDDIT_SV { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::tiddit=2.12.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tiddit:2.12.1--py38h1773678_0' : + 'quay.io/biocontainers/tiddit:2.12.1--py38h1773678_0' }" + + input: + tuple val(meta), path(bam) + path fasta + path fai + + output: + tuple val(meta), path("*.vcf") , emit: vcf + tuple val(meta), path("*.ploidy.tab") , emit: ploidy + tuple val(meta), path("*.signals.tab"), emit: signals + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta == "dummy_file.txt" ? "--ref $fasta" : "" + """ + tiddit \\ + --sv \\ + $args \\ + --bam $bam \\ + $reference \\ + -o $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/tiddit/sv/meta.yml b/modules/nf-core/modules/tiddit/sv/meta.yml new file mode 100644 index 00000000..f788ffa6 --- /dev/null +++ b/modules/nf-core/modules/tiddit/sv/meta.yml @@ -0,0 +1,51 @@ +name: tiddit_sv +description: Identify chromosomal rearrangements. +keywords: + - structural + - variants + - vcf +tools: + - sv: + description: Search for structural variants. + homepage: https://github.com/SciLifeLab/TIDDIT + documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md + doi: 10.12688/f1000research.11168.1 + licence: ['GPL-3.0-or-later'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fasta,fa}" + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: vcf + pattern: "*.{vcf}" + - ploidy: + type: file + description: tab + pattern: "*.{ploidy.tab}" + - signals: + type: file + description: tab + pattern: "*.{signals.tab}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" From d5673c3139f9c56140b938afae2a92a453812e57 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 19 Jan 2022 11:17:40 +0100 Subject: [PATCH 0214/1921] integrated tiddit --- conf/modules.config | 9 +++++++-- subworkflows/local/call_structural_variants.nf | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 102d38be..4c0bedc8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -129,9 +129,14 @@ process { // CALL_STRUCTURAL_VARIANTS withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA" { publishDir = [ - path: { "${params.outdir}/manta" }, + path: { "${params.outdir}/sv_caller" }, + mode: 'copy', + ] + } + withName: ".*CALL_STRUCTURAL_VARIANTS:TIDDIT_SV" { + publishDir = [ + path: { "${params.outdir}/sv_caller" }, mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } // NF-CORE Subworkflows diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index baaa02ad..217ea9cf 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -4,6 +4,8 @@ include { CALL_SV_MANTA } from './call_sv_manta' +include { TIDDIT_SV } from '../../modules/nf-core/modules/tiddit/sv/main' + workflow CALL_STRUCTURAL_VARIANTS { take: @@ -17,9 +19,11 @@ workflow CALL_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() - CALL_SV_MANTA( bam, bai, fasta, fai, case_info, target_bed ) + CALL_SV_MANTA ( bam, bai, fasta, fai, case_info, target_bed ) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) + TIDDIT_SV ( bam, fasta, fai ) + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From c2392a51e9f521f03ac40991cb583d74cc0e172b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 19 Jan 2022 11:23:13 +0100 Subject: [PATCH 0215/1921] forgot to add arg --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index 4c0bedc8..28af55eb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -134,6 +134,7 @@ process { ] } withName: ".*CALL_STRUCTURAL_VARIANTS:TIDDIT_SV" { + ext.args = '-p 6' publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: 'copy', From 4b711429ce0f3e64055ded333e1bb7dfb4b644d5 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 19 Jan 2022 11:28:38 +0100 Subject: [PATCH 0216/1921] atmpt 1: fix lint --- 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 217ea9cf..5a1e6830 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -23,7 +23,7 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) TIDDIT_SV ( bam, fasta, fai ) - + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 13074bb6d90363c3ee17bab9a45605c494a2b91d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 19 Jan 2022 12:51:23 +0100 Subject: [PATCH 0217/1921] remove conditional for sd --- subworkflows/local/prepare_bed.nf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index c999dbe2..c706f50d 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -9,8 +9,8 @@ include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/ta workflow CHECK_BED { take: - bed // file: bed file - sd // path: sequence_dictionary + bed // file: bed file + seq_dictionary // path: sequence_dictionary main: tab_out = Channel.empty() @@ -25,10 +25,9 @@ workflow CHECK_BED { } else if ( file(bed, checkIfExists:true) ) { tab_out = TABIX_PBT (ch_bed).gz_tbi } - if (sd) { - interval_list = GATK_BILT (ch_bed, sd).interval_list - GATK_ILT(interval_list) - } + + interval_list = GATK_BILT (ch_bed, seq_dictionary).interval_list + GATK_ILT(interval_list) } emit: From cc0a1263a0aa8cf7b42eece9bbcf87398376ccdd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jan 2022 00:03:20 +0100 Subject: [PATCH 0218/1921] rename bait intervals filename --- conf/modules.config | 15 +++++++-------- subworkflows/nf-core/qc_bam.nf | 10 +++++++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a0305e46..7fee2cd0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -68,28 +68,29 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - path: { "${params.outdir}/vcf_check" }, + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } withName: TABIX_PV { publishDir = [ - path: { "${params.outdir}/vcf_check" }, + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } withName: 'TABIX_PT|TABIX_PBT' { publishDir = [ - path: { "${params.outdir}/bed_check" }, + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } withName: 'GATK_BILT' { + ext.prefix = { "${meta.id}_target" } publishDir = [ - path: { "${params.outdir}/bed_check" }, + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -97,14 +98,12 @@ process { withName: 'GATK_ILT' { ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' publishDir = [ - path: { "${params.outdir}/bed_check" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } withName: 'CAT_CAT_BAIT' { publishDir = [ - path: { "${params.outdir}/bed_check" }, + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 7dbc6991..576b509a 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -28,7 +28,15 @@ workflow QC_BAM { ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) // COLLECT HS METRICS - CAT_CAT_BAIT ( bait_intervals, "bait.intervals_list" ) + bait_intervals_out = bait_intervals + .collect { it[0] + .toString() + .split("_split")[0] + .split("/")[-1] + "_bait.intervals_list" + } + .flatten() + + CAT_CAT_BAIT ( bait_intervals, bait_intervals_out ) PICARD_COLLECTHSMETRICS ( bam, fasta, fai, CAT_CAT_BAIT.out.file_out, target_intervals ) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) From bd9c81dd319b6b84ba0058a41e30a5a835600ff0 Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Mon, 24 Jan 2022 13:27:28 +0100 Subject: [PATCH 0219/1921] Merge remote-tracking branch 'upstream/dev' into add_default_variant_catalog --- bin/check_input_vcf.py | 47 ------------- conf/genomes.config | 4 +- conf/modules.config | 34 +++++++++- conf/test.config | 1 + modules.json | 15 +++++ modules/local/check_input_vcf.nf | 25 ++++++- modules/nf-core/modules/cat/cat/main.nf | 45 +++++++++++++ modules/nf-core/modules/cat/cat/meta.yml | 34 ++++++++++ .../modules/gatk4/bedtointervallist/main.nf | 39 +++++++++++ .../modules/gatk4/bedtointervallist/meta.yml | 40 +++++++++++ .../gatk4/createsequencedictionary/main.nf | 37 +++++++++++ .../gatk4/createsequencedictionary/meta.yml | 32 +++++++++ .../modules/gatk4/intervallisttools/main.nf | 51 ++++++++++++++ .../modules/gatk4/intervallisttools/meta.yml | 47 +++++++++++++ .../modules/picard/collecthsmetrics/main.nf | 48 ++++++++++++++ .../modules/picard/collecthsmetrics/meta.yml | 66 +++++++++++++++++++ subworkflows/local/prepare_bed.nf | 12 +++- subworkflows/local/prepare_genome.nf | 5 +- subworkflows/local/prepare_vcf.nf | 5 +- subworkflows/nf-core/qc_bam.nf | 25 ++++++- workflows/raredisease.nf | 14 ++-- 21 files changed, 557 insertions(+), 69 deletions(-) delete mode 100755 bin/check_input_vcf.py create mode 100644 modules/nf-core/modules/cat/cat/main.nf create mode 100644 modules/nf-core/modules/cat/cat/meta.yml create mode 100644 modules/nf-core/modules/gatk4/bedtointervallist/main.nf create mode 100644 modules/nf-core/modules/gatk4/bedtointervallist/meta.yml create mode 100644 modules/nf-core/modules/gatk4/createsequencedictionary/main.nf create mode 100644 modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml create mode 100644 modules/nf-core/modules/gatk4/intervallisttools/main.nf create mode 100644 modules/nf-core/modules/gatk4/intervallisttools/meta.yml create mode 100644 modules/nf-core/modules/picard/collecthsmetrics/main.nf create mode 100644 modules/nf-core/modules/picard/collecthsmetrics/meta.yml diff --git a/bin/check_input_vcf.py b/bin/check_input_vcf.py deleted file mode 100755 index 9109605a..00000000 --- a/bin/check_input_vcf.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -import gzip -import argparse - -def parse_args(args=None): - Description = "Check that input vcf file has been normalized." - Epilog = "Example usage: python check_input_vcf.py --INPUT_VCF --OUTPUT " - - parser = argparse.ArgumentParser(description=Description, epilog=Epilog) - parser.add_argument("--INPUT_VCF", help="Input vcf file.") - parser.add_argument("--OUTPUT", help="Output file containing a list of files that need to be normalized.") - return parser.parse_args(args) - - -def check_vcf(file_in, file_out): - """ - This function checks that an input vcf file has been normalized with bcftools, and if not, it writes its basename and the filename - to a text file - - """ - - with open(file_out,'w') as out: - if file_in.endswith(".gz"): - base = os.path.basename(file_in).rsplit(".",2)[0] - out.write("id,filepath,processed\n") - with gzip.open(file_in,'rt') as vcf: - for line in vcf: - if line.startswith("##bcftools_norm"): - out.write(base + "," + os.path.abspath(file_in) + ",yes\n") - break - elif not line.startswith("#"): - out.write(base + "," + os.path.abspath(file_in) + ",no\n") - break - else: - print("Please compress %s using bgzip" %file_in ) - - -def main(args=None): - args = parse_args(args) - check_vcf(args.INPUT_VCF, args.OUTPUT) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/conf/genomes.config b/conf/genomes.config index fc8c4aa6..3a72deb5 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -16,7 +16,7 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - target_bed = "" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -24,7 +24,7 @@ params { bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - target_bed = "${params.local_genomes}/twistexomerefseq_9.1_hg19_design.bed.gz" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" } } } diff --git a/conf/modules.config b/conf/modules.config index 102d38be..7fee2cd0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -68,14 +68,42 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - path: { "${params.outdir}/vcf_check" }, + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'TABIX_PV|TABIX_PT|TABIX_PBT' { + withName: TABIX_PV { publishDir = [ - path: { "${params.outdir}/vcf_check" }, + path: { "${params.outdir}/processed_references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'TABIX_PT|TABIX_PBT' { + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'GATK_BILT' { + ext.prefix = { "${meta.id}_target" } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: 'GATK_ILT' { + ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' + publishDir = [ + enabled: false + ] + } + withName: 'CAT_CAT_BAIT' { + publishDir = [ + path: { "${params.outdir}/processed_references" }, mode: 'copy', saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/test.config b/conf/test.config index 12b3c1f9..fa041a02 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,4 +31,5 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' } diff --git a/modules.json b/modules.json index 29d225d7..bcc0692f 100644 --- a/modules.json +++ b/modules.json @@ -12,6 +12,9 @@ "bwamem2/mem": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "cat/cat": { + "git_sha": "c4549c0ecd1b02473471b507fd88a9fd5289d91c" + }, "custom/dumpsoftwareversions": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, @@ -24,12 +27,24 @@ "fastqc": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "gatk4/bedtointervallist": { + "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + }, + "gatk4/createsequencedictionary": { + "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + }, + "gatk4/intervallisttools": { + "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + }, "glnexus": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, "multiqc": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, + "picard/collecthsmetrics": { + "git_sha": "e751e5040af57e1b4e06ed4e0f3efe6de25c1683" + }, "picard/collectmultiplemetrics": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 471e052f..8afcb4b3 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -14,8 +14,27 @@ process CHECK_INPUT_VCF { script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ """ - check_input_vcf.py \\ - --INPUT_VCF $vcf \\ - --OUTPUT checked_vcfs.txt + export INPUT_FILE=${vcf} + export OUTPUT_FILE="checked_vcfs.txt" + + python3 < $file_out + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cat/cat/meta.yml b/modules/nf-core/modules/cat/cat/meta.yml new file mode 100644 index 00000000..b3f370ee --- /dev/null +++ b/modules/nf-core/modules/cat/cat/meta.yml @@ -0,0 +1,34 @@ +name: cat_cat +description: A module for concatenation of gzipped or uncompressed files +keywords: + - concatenate + - gzip + - cat +tools: + - cat: + description: Just concatenation + homepage: None + documentation: https://man7.org/linux/man-pages/man1/cat.1.html + tool_dev_url: None + licence: ['GPL-3.0-or-later'] +input: + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" + - file_out: + type: value + description: Full name of output file with or without .gz extension + +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - file_out: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + +authors: + - "@erikrikarddaniel" diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf new file mode 100644 index 00000000..37f46f48 --- /dev/null +++ b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf @@ -0,0 +1,39 @@ +process GATK4_BEDTOINTERVALLIST { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + tuple val(meta), path(bed) + path sequence_dict + + output: + tuple val(meta), path('*.interval_list'), emit: interval_list + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" BedToIntervalList \\ + -I $bed \\ + -SD $sequence_dict \\ + -O ${prefix}.interval_list \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml b/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml new file mode 100644 index 00000000..910f9552 --- /dev/null +++ b/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml @@ -0,0 +1,40 @@ +name: gatk4_bedtointervallist +description: Creates an interval list from a bed file and a reference dict +keywords: + - bed + - interval list +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'] + - bed: + type: file + description: Input bed file + pattern: "*.bed" + - dict: + type: file + description: Sequence dictionary + pattern: "*.dict" +output: + - interval_list: + type: file + description: gatk interval list file + pattern: "*.interval_list" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf new file mode 100644 index 00000000..2cbd8948 --- /dev/null +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf @@ -0,0 +1,37 @@ +process GATK4_CREATESEQUENCEDICTIONARY { + tag "$fasta" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + path fasta + + output: + path "*.dict" , emit: dict + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def avail_mem = 6 + if (!task.memory) { + log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" \\ + CreateSequenceDictionary \\ + --REFERENCE $fasta \\ + --URI $fasta \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml new file mode 100644 index 00000000..54f479b3 --- /dev/null +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml @@ -0,0 +1,32 @@ +name: gatk4_createsequencedictionary +description: Creates a sequence dictionary for a reference sequence +keywords: + - dictionary + - fasta +tools: + - gatk: + 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: + - fasta: + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" +output: + - dict: + type: file + description: gatk dictionary file + pattern: "*.{dict}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" diff --git a/modules/nf-core/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/modules/gatk4/intervallisttools/main.nf new file mode 100644 index 00000000..17412160 --- /dev/null +++ b/modules/nf-core/modules/gatk4/intervallisttools/main.nf @@ -0,0 +1,51 @@ +process GATK4_INTERVALLISTTOOLS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + tuple val(meta), path(interval_list) + + output: + tuple val(meta), path("*_split/*/*.interval_list"), emit: interval_list + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK IntervalListTools] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + + mkdir ${prefix}_split + + gatk --java-options "-Xmx${avail_mem}g" \\ + IntervalListTools \\ + -I ${interval_list} \\ + -O ${prefix}_split \\ + $args + + python3 < versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/intervallisttools/meta.yml b/modules/nf-core/modules/gatk4/intervallisttools/meta.yml new file mode 100644 index 00000000..9e2d994f --- /dev/null +++ b/modules/nf-core/modules/gatk4/intervallisttools/meta.yml @@ -0,0 +1,47 @@ +name: gatk4_intervallisttools + +description: Splits the interval list file into unique, equally-sized interval files and place it under a directory +keywords: + - sort + - bed + - interval list +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 ] + + - interval_list: + type: file + description: Interval list file + pattern: "*.interval_list" + +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: Interval list files + pattern: "*.interval_list" + +authors: + - "@praveenraj2018" diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/modules/picard/collecthsmetrics/main.nf new file mode 100644 index 00000000..ae3e4d96 --- /dev/null +++ b/modules/nf-core/modules/picard/collecthsmetrics/main.nf @@ -0,0 +1,48 @@ +process PICARD_COLLECTHSMETRICS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + path fasta + path fai + path bait_intervals + path target_intervals + + output: + tuple val(meta), path("*collecthsmetrics.txt"), emit: hs_metrics + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "-R $fasta" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard CollectHsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + CollectHsMetrics \\ + $args \\ + $reference \\ + -BAIT_INTERVALS $bait_intervals \\ + -TARGET_INTERVALS $target_intervals \\ + -INPUT $bam \\ + -OUTPUT ${prefix}_collecthsmetrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard CollectHsMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/picard/collecthsmetrics/meta.yml b/modules/nf-core/modules/picard/collecthsmetrics/meta.yml new file mode 100644 index 00000000..4b94909f --- /dev/null +++ b/modules/nf-core/modules/picard/collecthsmetrics/meta.yml @@ -0,0 +1,66 @@ +name: picard_collecthsmetrics +description: Collects hybrid-selection (HS) metrics for a SAM or BAM file. +keywords: + - alignment + - metrics + - statistics + - insert + - hybrid-selection + - quality + - bam +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + tool_dev_url: https://github.com/broadinstitute/picard/ + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: An aligned BAM/SAM file + pattern: "*.{bam,sam}" + - fasta: + type: file + description: | + A reference file to calculate dropout metrics measuring reduced representation of reads. + Optional input. + pattern: "*.fasta" + - fai: + 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: + type: file + description: An interval list file that contains the locations of the targets. + pattern: "targets.interval_list" + +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" + - hs_metrics: + type: file + description: The metrics file. + pattern: "*_collecthsmetrics.txt" + +authors: + - "@projectoriented" diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index e855373f..c706f50d 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -2,12 +2,15 @@ // Prepare reference bed files // +include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/modules/gatk4/bedtointervallist/main' +include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/modules/gatk4/intervallisttools/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' workflow CHECK_BED { take: - bed // file: bed file + bed // file: bed file + seq_dictionary // path: sequence_dictionary main: tab_out = Channel.empty() @@ -22,8 +25,13 @@ workflow CHECK_BED { } else if ( file(bed, checkIfExists:true) ) { tab_out = TABIX_PBT (ch_bed).gz_tbi } + + interval_list = GATK_BILT (ch_bed, seq_dictionary).interval_list + GATK_ILT(interval_list) } emit: - idx = tab_out + bed = tab_out + target_intervals = interval_list.collect{it[1]} + bait_intervals = GATK_ILT.out.interval_list.collect{it[1]} } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 37dffdc5..22fd0082 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -4,7 +4,7 @@ include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' - +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD} from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' workflow PREPARE_GENOME { @@ -47,6 +47,7 @@ workflow PREPARE_GENOME { ch_chrom_sizes = GET_CHROM_SIZES ( ch_fai ).sizes ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) + ch_sequence_dict = GATK_SD ( ch_fasta ).dict emit: @@ -55,6 +56,6 @@ workflow PREPARE_GENOME { bwamem2_index = ch_bwamem2_index // path: bwamem2/index variant_catalog = ch_variant_catalog // path: variant_catalog.json chrom_sizes = ch_chrom_sizes // path: chrom.sizes - + sequence_dict = ch_sequence_dict versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index f19b9095..0fc8471a 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -9,11 +9,12 @@ include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/modules/tabix/ta workflow CHECK_VCF { take: - vcf // channel: [ vcf file ] + vcf // file: vcf file fasta // path(fasta) main: - CHECK_INPUT_VCF( vcf ) + vcf_file = file(vcf) + CHECK_INPUT_VCF( vcf_file ) .splitCsv( header:true ) .map { row -> def id = "${row.id}" diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 3ed2ce78..576b509a 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -3,7 +3,9 @@ // include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' +include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/modules/picard/collecthsmetrics/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' @@ -11,9 +13,12 @@ include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwi workflow QC_BAM { take: - bam // channel: [ val(meta), path(bam) ] - fasta // path: genome.fasta - chrom_sizes // path: chrom.sizes + bam // channel: [ val(meta), path(bam) ] + fasta // path: genome.fasta + fai // path: genome.fasta.fai + bait_intervals // path: bait.intervals_list + target_intervals // path: target.intervals_list + chrom_sizes // path: chrom.sizes main: ch_versions = Channel.empty() @@ -22,6 +27,19 @@ workflow QC_BAM { PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) + // COLLECT HS METRICS + bait_intervals_out = bait_intervals + .collect { it[0] + .toString() + .split("_split")[0] + .split("/")[-1] + "_bait.intervals_list" + } + .flatten() + + CAT_CAT_BAIT ( bait_intervals, bait_intervals_out ) + PICARD_COLLECTHSMETRICS ( bam, fasta, fai, CAT_CAT_BAIT.out.file_out, target_intervals ) + ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) + // QUALIMAP BAMQC gff = [] use_gff = false @@ -36,6 +54,7 @@ workflow QC_BAM { emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] + hs_metrics = PICARD_COLLECTHSMETRICS.out.hs_metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5f90650e..fcb333d5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -104,17 +104,18 @@ workflow RAREDISEASE { PREPARE_GENOME ( params.fasta, params.variant_catalog ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) + ch_gnomad = Channel.empty() if (params.gnomad) { - ch_gnomad_in = Channel.fromPath(params.gnomad) CHECK_VCF( - ch_gnomad_in, PREPARE_GENOME.out.fasta, - ).set { ch_gnomad_out } + params.gnomad, PREPARE_GENOME.out.fasta, + ).set { ch_gnomad } } ch_target_bed = Channel.empty() if (params.target_bed) { CHECK_BED( - params.target_bed + params.target_bed, + PREPARE_GENOME.out.sequence_dict ).set { ch_target_bed } } @@ -135,6 +136,9 @@ workflow RAREDISEASE { QC_BAM ( ch_marked_bam, PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + CHECK_BED.out.bait_intervals, + CHECK_BED.out.target_intervals, PREPARE_GENOME.out.chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) @@ -163,7 +167,7 @@ workflow RAREDISEASE { PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.ch_case_info, - ch_target_bed + ch_target_bed.bed ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From 9e714937c0502b9745f9231bc569e2cab54a90b9 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 25 Jan 2022 13:16:56 +0100 Subject: [PATCH 0220/1921] :arrow_down: module --- modules.json | 3 ++ modules/nf-core/modules/vcfanno/main.nf | 34 ++++++++++++++ modules/nf-core/modules/vcfanno/meta.yml | 56 ++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 modules/nf-core/modules/vcfanno/main.nf create mode 100644 modules/nf-core/modules/vcfanno/meta.yml diff --git a/modules.json b/modules.json index 57a14a4a..df322e74 100644 --- a/modules.json +++ b/modules.json @@ -83,6 +83,9 @@ }, "ucsc/wigtobigwig": { "git_sha": "30e64becaa1e6c807a09a49a6d3d457ff3cf7251" + }, + "vcfanno": { + "git_sha": "435ca4100ac07d1932cd0cb38226b7c4b2109fc1" } } } diff --git a/modules/nf-core/modules/vcfanno/main.nf b/modules/nf-core/modules/vcfanno/main.nf new file mode 100644 index 00000000..421fc0fa --- /dev/null +++ b/modules/nf-core/modules/vcfanno/main.nf @@ -0,0 +1,34 @@ +process VCFANNO { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::vcfanno=0.3.3" : null) + 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' }" + + input: + tuple val(meta), path(vcf), path(tbi) + path vcfanno_config + + output: + tuple val(meta), path("*.vcf"), emit: vcf + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + vcfanno \\ + -p $task.cpus \\ + $args \\ + $vcfanno_config \\ + $vcf \\ + > ${prefix}_annotated.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + vcfanno: \$(echo \$(vcfanno 2>&1 | grep version | cut -f3 -d' ' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/vcfanno/meta.yml b/modules/nf-core/modules/vcfanno/meta.yml new file mode 100644 index 00000000..bbd2ab16 --- /dev/null +++ b/modules/nf-core/modules/vcfanno/meta.yml @@ -0,0 +1,56 @@ +name: vcfanno +description: quickly annotate your VCF with any number of INFO fields from any number of VCFs or BED files +keywords: + - vcf + - bed + - annotate + - variant +tools: + - vcfanno: + description: annotate a VCF with other VCFs/BEDs/tabixed files + homepage: None + documentation: https://github.com/brentp/vcfanno#vcfanno + tool_dev_url: https://github.com/brentp/vcfanno + doi: "10.1186/s13059-016-0973-5" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: query VCF file + pattern: "*.{vcf.gz}" + - vcf.tbi: + type: file + description: query VCF file index + pattern: "*.{vcf.gz.tbi}" + - vcfanno_config: + type: file + description: | + A simple configuration file is used to specify both the source files + and the set of attributes (in the case of VCF) + or columns (in the case of BED or other tab-delimited formats) + that should be added to the query file. + pattern: "*.{toml}" + +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: Annotated VCF file + pattern: "*.{vcf}" + +authors: + - "@projectoriented" From 724b4b0c586817c59f764b1dce351364746fb256 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 26 Jan 2022 09:48:10 +0100 Subject: [PATCH 0221/1921] :arrow_down: bcftools/view, boilerplate --- modules.json | 3 + modules/nf-core/modules/bcftools/view/main.nf | 41 ++++++++++++ .../nf-core/modules/bcftools/view/meta.yml | 63 +++++++++++++++++++ subworkflows/nf-core/annotation_vcfanno.nf | 14 +++++ 4 files changed, 121 insertions(+) create mode 100644 modules/nf-core/modules/bcftools/view/main.nf create mode 100644 modules/nf-core/modules/bcftools/view/meta.yml create mode 100644 subworkflows/nf-core/annotation_vcfanno.nf diff --git a/modules.json b/modules.json index df322e74..907800ab 100644 --- a/modules.json +++ b/modules.json @@ -6,6 +6,9 @@ "bcftools/norm": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "bcftools/view": { + "git_sha": "e751e5040af57e1b4e06ed4e0f3efe6de25c1683" + }, "bwamem2/index": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf new file mode 100644 index 00000000..7056ecdb --- /dev/null +++ b/modules/nf-core/modules/bcftools/view/main.nf @@ -0,0 +1,41 @@ +process BCFTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : + 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" + + input: + tuple val(meta), path(vcf), path(index) + path(regions) + path(targets) + path(samples) + + output: + tuple val(meta), path("*.gz") , emit: vcf + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def regions_file = regions ? "--regions-file ${regions}" : "" + def targets_file = targets ? "--targets-file ${targets}" : "" + def samples_file = samples ? "--samples-file ${samples}" : "" + """ + bcftools view \\ + --output ${prefix}.vcf.gz \\ + ${regions_file} \\ + ${targets_file} \\ + ${samples_file} \\ + $args \\ + --threads $task.cpus \\ + ${vcf} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bcftools/view/meta.yml b/modules/nf-core/modules/bcftools/view/meta.yml new file mode 100644 index 00000000..df5b0f8f --- /dev/null +++ b/modules/nf-core/modules/bcftools/view/meta.yml @@ -0,0 +1,63 @@ +name: bcftools_view +description: View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF +keywords: + - variant calling + - view + - bcftools + - VCF + +tools: + - view: + description: | + View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be inspected. + e.g. 'file.vcf' + - index: + type: file + description: | + The tab index for the VCF file to be inspected. + e.g. 'file.tbi' + - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. + e.g. 'file.vcf' + - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) + e.g. 'file.vcf' + - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF normalized output file + pattern: "*.{vcf.gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" diff --git a/subworkflows/nf-core/annotation_vcfanno.nf b/subworkflows/nf-core/annotation_vcfanno.nf new file mode 100644 index 00000000..c3b6d235 --- /dev/null +++ b/subworkflows/nf-core/annotation_vcfanno.nf @@ -0,0 +1,14 @@ +// +// Annotate with VCFanno +// + +include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' + +workflow ANNOTATION_VCFANNO { + take: + main: + ch_versions = Channel.empty() + emit: + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} \ No newline at end of file From db987c64c72f189f07a56b57aa7bdc9590bde728 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 26 Jan 2022 09:52:51 +0100 Subject: [PATCH 0222/1921] dv no longer local --- subworkflows/{local => nf-core}/call_snv_deepvariant.nf | 8 ++++---- workflows/raredisease.nf | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) rename subworkflows/{local => nf-core}/call_snv_deepvariant.nf (89%) diff --git a/subworkflows/local/call_snv_deepvariant.nf b/subworkflows/nf-core/call_snv_deepvariant.nf similarity index 89% rename from subworkflows/local/call_snv_deepvariant.nf rename to subworkflows/nf-core/call_snv_deepvariant.nf index e14958e8..efcbd495 100644 --- a/subworkflows/local/call_snv_deepvariant.nf +++ b/subworkflows/nf-core/call_snv_deepvariant.nf @@ -10,10 +10,10 @@ include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/ta workflow CALL_SNV_DEEPVARIANT { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta) - fai // path(fai) - ch_case_info // channel: [ case_id ] + bam // channel: [ val(meta), path(bam), path(bai) ] + fasta // path(fasta) + fai // path(fai) + ch_case_info // channel: [ case_id ] main: ch_versions = Channel.empty() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8e0b524e..a19abb1f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -62,6 +62,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' // @@ -70,7 +71,6 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' -include { CALL_SNV_DEEPVARIANT } from '../subworkflows/local/call_snv_deepvariant' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' /* From c317e02056ec107524271aa3f2a1a5fd4a82e165 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 7 Feb 2022 10:08:58 +0100 Subject: [PATCH 0223/1921] populate take directive --- subworkflows/nf-core/annotation_vcfanno.nf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/subworkflows/nf-core/annotation_vcfanno.nf b/subworkflows/nf-core/annotation_vcfanno.nf index c3b6d235..a288aa35 100644 --- a/subworkflows/nf-core/annotation_vcfanno.nf +++ b/subworkflows/nf-core/annotation_vcfanno.nf @@ -7,8 +7,12 @@ include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main workflow ANNOTATION_VCFANNO { take: + vcf // channel: [ val(meta), path(vcf), path(tbi) ] + toml_config // channel: path(.toml) + main: ch_versions = Channel.empty() + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } \ No newline at end of file From 07fb5f8c299f3b135a34586ed9383d0de3cb2954 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 8 Feb 2022 14:39:45 +0100 Subject: [PATCH 0224/1921] using vcfanno local --- modules.json | 3 --- .../{nf-core/modules => local}/vcfanno/main.nf | 10 ++++++++-- .../{nf-core/modules => local}/vcfanno/meta.yml | 16 ++++++++-------- subworkflows/nf-core/annotation_vcfanno.nf | 5 +++-- 4 files changed, 19 insertions(+), 15 deletions(-) rename modules/{nf-core/modules => local}/vcfanno/main.nf (85%) rename modules/{nf-core/modules => local}/vcfanno/meta.yml (76%) diff --git a/modules.json b/modules.json index 907800ab..bc3d8e7e 100644 --- a/modules.json +++ b/modules.json @@ -86,9 +86,6 @@ }, "ucsc/wigtobigwig": { "git_sha": "30e64becaa1e6c807a09a49a6d3d457ff3cf7251" - }, - "vcfanno": { - "git_sha": "435ca4100ac07d1932cd0cb38226b7c4b2109fc1" } } } diff --git a/modules/nf-core/modules/vcfanno/main.nf b/modules/local/vcfanno/main.nf similarity index 85% rename from modules/nf-core/modules/vcfanno/main.nf rename to modules/local/vcfanno/main.nf index 421fc0fa..6608d22e 100644 --- a/modules/nf-core/modules/vcfanno/main.nf +++ b/modules/local/vcfanno/main.nf @@ -9,20 +9,26 @@ process VCFANNO { input: tuple val(meta), path(vcf), path(tbi) - path vcfanno_config + path resource_dir output: tuple val(meta), path("*.vcf"), 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}" """ + ln -s $resource_dir/* \$(pwd) + toml=\$(echo *.toml) + vcfanno \\ -p $task.cpus \\ $args \\ - $vcfanno_config \\ + \$toml \\ $vcf \\ > ${prefix}_annotated.vcf diff --git a/modules/nf-core/modules/vcfanno/meta.yml b/modules/local/vcfanno/meta.yml similarity index 76% rename from modules/nf-core/modules/vcfanno/meta.yml rename to modules/local/vcfanno/meta.yml index bbd2ab16..b2caaefc 100644 --- a/modules/nf-core/modules/vcfanno/meta.yml +++ b/modules/local/vcfanno/meta.yml @@ -5,6 +5,8 @@ keywords: - bed - annotate - variant + - lua + - toml tools: - vcfanno: description: annotate a VCF with other VCFs/BEDs/tabixed files @@ -24,18 +26,16 @@ input: type: file description: query VCF file pattern: "*.{vcf.gz}" - - vcf.tbi: + - vcf_tabix: type: file - description: query VCF file index + description: tabix index of query VCF pattern: "*.{vcf.gz.tbi}" - - vcfanno_config: + - resource_dir: type: file description: | - A simple configuration file is used to specify both the source files - and the set of attributes (in the case of VCF) - or columns (in the case of BED or other tab-delimited formats) - that should be added to the query file. - pattern: "*.{toml}" + This directory must contain one TOML config and referenced files in that config, + and the corresponding indicies e.g. exac.vcf.gz + exac.vcf.gz.tbi, + with exception to the lua file. output: - meta: diff --git a/subworkflows/nf-core/annotation_vcfanno.nf b/subworkflows/nf-core/annotation_vcfanno.nf index a288aa35..0227d695 100644 --- a/subworkflows/nf-core/annotation_vcfanno.nf +++ b/subworkflows/nf-core/annotation_vcfanno.nf @@ -2,13 +2,14 @@ // Annotate with VCFanno // -include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' +include { VCFANNO } from '../../modules/local/vcfanno/main' + include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' workflow ANNOTATION_VCFANNO { take: vcf // channel: [ val(meta), path(vcf), path(tbi) ] - toml_config // channel: path(.toml) + resource_dir // channel: path(resource_dir) main: ch_versions = Channel.empty() From 980f85b195f8e93c2e4ce2e24f8da7b7e07f5222 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 8 Feb 2022 17:19:55 +0100 Subject: [PATCH 0225/1921] vcfanno works but waiting for bcftools annot and figure solution for resource_dir --- conf/modules.config | 6 ++++++ .../annotation_vcfanno.nf => local/annotate_vcfanno.nf} | 7 ++++--- workflows/raredisease.nf | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) rename subworkflows/{nf-core/annotation_vcfanno.nf => local/annotate_vcfanno.nf} (75%) diff --git a/conf/modules.config b/conf/modules.config index 7cbb08f1..338b9439 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -168,6 +168,12 @@ process { mode: 'copy', ] } + // ANNOTATE_VCFANNO + withName: "VCFANNO" { + publishDir = [ + path: { "${params.outdir}/variant_annotation" }, + ] + } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { diff --git a/subworkflows/nf-core/annotation_vcfanno.nf b/subworkflows/local/annotate_vcfanno.nf similarity index 75% rename from subworkflows/nf-core/annotation_vcfanno.nf rename to subworkflows/local/annotate_vcfanno.nf index 0227d695..3c7d40bb 100644 --- a/subworkflows/nf-core/annotation_vcfanno.nf +++ b/subworkflows/local/annotate_vcfanno.nf @@ -4,9 +4,7 @@ include { VCFANNO } from '../../modules/local/vcfanno/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' - -workflow ANNOTATION_VCFANNO { +workflow ANNOTATE_VCFANNO { take: vcf // channel: [ val(meta), path(vcf), path(tbi) ] resource_dir // channel: path(resource_dir) @@ -14,6 +12,9 @@ workflow ANNOTATION_VCFANNO { main: ch_versions = Channel.empty() + VCFANNO (vcf, resource_dir) + ch_versions = ch_versions.mix(VCFANNO.out.versions) + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } \ No newline at end of file diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 685413aa..2ba0cb9f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -72,6 +72,7 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' +include { ANNOTATE_VCFANNO } from '../subworkflows/local/annotate_vcfanno' /* ======================================================================================== @@ -171,6 +172,11 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) + // STEP 3: VARIANT ANNOTATION + ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) + ANNOTATE_VCFANNO ( ch_dv_vcf, file("/home/mei.wu/nextflow/nf-core/vcfanno_resource_dir") ) + ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) + // // MODULE: Pipeline reporting // From 28bcbbcfd48d6ef8fab7361493b39e0aec2c2350 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 8 Feb 2022 17:23:10 +0100 Subject: [PATCH 0226/1921] rm'd bcftools/view bc thought it was annotate --- modules.json | 3 - modules/nf-core/modules/bcftools/view/main.nf | 41 ------------ .../nf-core/modules/bcftools/view/meta.yml | 63 ------------------- 3 files changed, 107 deletions(-) delete mode 100644 modules/nf-core/modules/bcftools/view/main.nf delete mode 100644 modules/nf-core/modules/bcftools/view/meta.yml diff --git a/modules.json b/modules.json index bc3d8e7e..57a14a4a 100644 --- a/modules.json +++ b/modules.json @@ -6,9 +6,6 @@ "bcftools/norm": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, - "bcftools/view": { - "git_sha": "e751e5040af57e1b4e06ed4e0f3efe6de25c1683" - }, "bwamem2/index": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf deleted file mode 100644 index 7056ecdb..00000000 --- a/modules/nf-core/modules/bcftools/view/main.nf +++ /dev/null @@ -1,41 +0,0 @@ -process BCFTOOLS_VIEW { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : - 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" - - input: - tuple val(meta), path(vcf), path(index) - path(regions) - path(targets) - path(samples) - - output: - tuple val(meta), path("*.gz") , emit: vcf - path "versions.yml" , emit: versions - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def regions_file = regions ? "--regions-file ${regions}" : "" - def targets_file = targets ? "--targets-file ${targets}" : "" - def samples_file = samples ? "--samples-file ${samples}" : "" - """ - bcftools view \\ - --output ${prefix}.vcf.gz \\ - ${regions_file} \\ - ${targets_file} \\ - ${samples_file} \\ - $args \\ - --threads $task.cpus \\ - ${vcf} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/modules/bcftools/view/meta.yml b/modules/nf-core/modules/bcftools/view/meta.yml deleted file mode 100644 index df5b0f8f..00000000 --- a/modules/nf-core/modules/bcftools/view/meta.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: bcftools_view -description: View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF -keywords: - - variant calling - - view - - bcftools - - VCF - -tools: - - view: - description: | - View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF - homepage: http://samtools.github.io/bcftools/bcftools.html - documentation: http://www.htslib.org/doc/bcftools.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - The vcf file to be inspected. - e.g. 'file.vcf' - - index: - type: file - description: | - The tab index for the VCF file to be inspected. - e.g. 'file.tbi' - - regions: - type: file - description: | - Optionally, restrict the operation to regions listed in this file. - e.g. 'file.vcf' - - targets: - type: file - description: | - Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) - e.g. 'file.vcf' - - samples: - type: file - description: | - Optional, file of sample names to be included or excluded. - e.g. 'file.tsv' -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF normalized output file - pattern: "*.{vcf.gz}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@abhi18av" From 8b61340598680a13459cb6464d8d246844c5aa27 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Feb 2022 09:58:04 +0100 Subject: [PATCH 0227/1921] install svdb/merge --- modules.json | 3 ++ modules/nf-core/modules/svdb/merge/main.nf | 52 +++++++++++++++++++++ modules/nf-core/modules/svdb/merge/meta.yml | 39 ++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 modules/nf-core/modules/svdb/merge/main.nf create mode 100644 modules/nf-core/modules/svdb/merge/meta.yml diff --git a/modules.json b/modules.json index 57a14a4a..ddc5d098 100644 --- a/modules.json +++ b/modules.json @@ -69,6 +69,9 @@ "samtools/stats": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, + "svdb/merge": { + "git_sha": "f44e6c74b4c51c5e49bc91e3d9d225544b5c1685" + }, "tabix/bgziptabix": { "git_sha": "e22966ce74340cb671576143e5fdbbd71670cffa" }, diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf new file mode 100644 index 00000000..1f479ea4 --- /dev/null +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -0,0 +1,52 @@ +process SVDB_MERGE { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::svdb=2.5.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/svdb:2.5.0--py39hcbe4a3b_0': + 'quay.io/biocontainers/svdb:2.5.0--py39hcbe4a3b_0' }" + + input: + tuple val(meta), path(vcfs) + val (priority) + + output: + tuple val(meta), path("*_sv_merge.vcf"), 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 input = "" + for (int index = 0; index < vcfs.size(); index++) { + input += " ${vcfs[index]}:${priority[index]}" + } + """ + svdb \\ + --merge \\ + $args \\ + --priority ${priority.join(',')} \\ + --vcf $input \\ + > ${prefix}_sv_merge.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_sv_merge.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/svdb/merge/meta.yml b/modules/nf-core/modules/svdb/merge/meta.yml new file mode 100644 index 00000000..2092ddd9 --- /dev/null +++ b/modules/nf-core/modules/svdb/merge/meta.yml @@ -0,0 +1,39 @@ +name: svdb_merge +description: The merge module merges structural variants within one or more vcf files. +keywords: + - structural variants +tools: + - svdb: + description: structural variant database software + homepage: https://github.com/J35P312/SVDB + documentation: https://github.com/J35P312/SVDB/blob/master/README.md + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - priority: + type: list + description: prioritise the input vcf files according to this list, e.g ['tiddit','cnvnator'] + - vcfs: + type: list + description: Two or more VCF files. Order of files should correspond to the order of tags used for priority. + pattern: "*.{vcf,vcf.gz}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: merged VCF file + pattern: "*_sv_merge.vcf" +authors: + - "@ramprasadn" From 6ac747eee09cf625e9fa753a059dee6e23741d18 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Feb 2022 12:52:28 +0100 Subject: [PATCH 0228/1921] add svdb merge --- conf/modules.config | 16 ++++++++- modules/nf-core/modules/svdb/merge/main.nf | 12 +++++-- .../local/call_structural_variants.nf | 27 +++++++++++++-- subworkflows/local/call_sv_tiddit.nf | 33 +++++++++++++++++++ 4 files changed, 81 insertions(+), 7 deletions(-) create mode 100644 subworkflows/local/call_sv_tiddit.nf diff --git a/conf/modules.config b/conf/modules.config index 7cbb08f1..6479e140 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -161,13 +161,27 @@ process { mode: 'copy', ] } - withName: ".*CALL_STRUCTURAL_VARIANTS:TIDDIT_SV" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV" { ext.args = '-p 6' publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: 'copy', ] } + withName: SVDB_MERGE_TIDDIT { + ext.args = '--notag' + ext.prefix = 'tiddit' + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: 'copy', + ] + } + withName: SVDB_MERGE { + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: 'copy', + ] + } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 1f479ea4..7c812a1a 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -22,14 +22,20 @@ process SVDB_MERGE { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def input = "" - for (int index = 0; index < vcfs.size(); index++) { - input += " ${vcfs[index]}:${priority[index]}" + if(priority) { + prio = "--priority ${priority.join(',')}" + for (int index = 0; index < vcfs.size(); index++) { + input += " ${vcfs[index]}:${priority[index]}" + } + } else { + prio = "" + input = "${vcfs.join(" ")}" } """ svdb \\ --merge \\ $args \\ - --priority ${priority.join(',')} \\ + $prio \\ --vcf $input \\ > ${prefix}_sv_merge.vcf diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 5a1e6830..ae24e21f 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -4,7 +4,9 @@ include { CALL_SV_MANTA } from './call_sv_manta' -include { TIDDIT_SV } from '../../modules/nf-core/modules/tiddit/sv/main' +include { CALL_SV_TIDDIT } from './call_sv_tiddit' + +include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -19,10 +21,29 @@ workflow CALL_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() - CALL_SV_MANTA ( bam, bai, fasta, fai, case_info, target_bed ) + //manta + CALL_SV_MANTA ( bam, bai, fasta, fai, case_info, target_bed ).diploid_sv_vcf + .collect{it[1]} + .set{ manta_vcf } ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) - TIDDIT_SV ( bam, fasta, fai ) + //tiddit + CALL_SV_TIDDIT ( bam, fasta, fai, case_info ).vcf + .collect{it[1]} + .set { tiddit_vcf } + ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) + + //merge + tiddit_vcf + .combine(manta_vcf) + .toList() + .set { vcf_list } + + case_info.combine(vcf_list) + .set { merge_input_vcfs } + + SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta"] ) + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] diff --git a/subworkflows/local/call_sv_tiddit.nf b/subworkflows/local/call_sv_tiddit.nf new file mode 100644 index 00000000..6d234d3b --- /dev/null +++ b/subworkflows/local/call_sv_tiddit.nf @@ -0,0 +1,33 @@ +// +// A structural variant caller workflow for tiddit +// + +include { TIDDIT_SV } from '../../modules/nf-core/modules/tiddit/sv/main' + +include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../modules/nf-core/modules/svdb/merge/main' + +workflow CALL_SV_TIDDIT { + take: + bam // channel: [ val(meta), path(bam) ] + fasta // path(fasta) + fai // path(fai) + ch_case_info // channel: [ case_id ] + + main: + TIDDIT_SV ( bam, fasta, fai ) + ch_versions = TIDDIT_SV.out.versions + + TIDDIT_SV.out.vcf.collect{it[1]} + .toList() + .set { vcf_file_list } + + ch_case_info.combine(vcf_file_list) + .set { merge_input_vcfs } + + SVDB_MERGE_TIDDIT ( merge_input_vcfs, [] ) + ch_versions = ch_versions.mix(SVDB_MERGE_TIDDIT.out.versions) + + emit: + vcf = SVDB_MERGE_TIDDIT.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} From 07601ab10261c7c27e24dd9810e2bfdec291a524 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Feb 2022 15:59:18 +0100 Subject: [PATCH 0229/1921] install mosdepth --- modules.json | 3 + modules/nf-core/modules/mosdepth/main.nf | 68 ++++++++++++++++++++ modules/nf-core/modules/mosdepth/meta.yml | 78 +++++++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 modules/nf-core/modules/mosdepth/main.nf create mode 100644 modules/nf-core/modules/mosdepth/meta.yml diff --git a/modules.json b/modules.json index 57a14a4a..3ffcc9e7 100644 --- a/modules.json +++ b/modules.json @@ -39,6 +39,9 @@ "glnexus": { "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" }, + "mosdepth": { + "git_sha": "45acc79667b58b5888cdea7327e76c728e94d6df" + }, "multiqc": { "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" }, diff --git a/modules/nf-core/modules/mosdepth/main.nf b/modules/nf-core/modules/mosdepth/main.nf new file mode 100644 index 00000000..ff91e06f --- /dev/null +++ b/modules/nf-core/modules/mosdepth/main.nf @@ -0,0 +1,68 @@ +process MOSDEPTH { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? 'bioconda::mosdepth=0.3.3' : null) + 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'}" + + input: + tuple val(meta), path(bam), path(bai) + path bed + val window_size + + output: + tuple val(meta), path('*.global.dist.txt') , emit: global_txt + tuple val(meta), path('*.region.dist.txt') , emit: regions_txt , optional:true + tuple val(meta), path('*.summary.txt') , emit: summary_txt + tuple val(meta), path('*.per-base.d4') , emit: d4 , optional:true + tuple val(meta), path('*.per-base.bed.gz') , emit: per_base_bed, optional:true + tuple val(meta), path('*.per-base.bed.gz.csi'), emit: per_base_csi, optional:true + tuple val(meta), path('*.regions.bed.gz') , emit: regions_bed , optional:true + tuple val(meta), path('*.regions.bed.gz.csi') , emit: regions_csi , optional:true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + if (window_size) { + interval = "--by ${window_size}" + } else if ( bed ) { + interval = "--by ${bed}" + } else { + interval = "" + } + """ + mosdepth \\ + $interval \\ + $args \\ + $prefix \\ + $bam + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.global.dist.txt + touch ${prefix}.region.dist.txt + touch ${prefix}.summary.txt + touch ${prefix}.per-base.d4 + touch ${prefix}.per-base.bed.gz + touch ${prefix}.per-base.bed.gz.csi + touch ${prefix}.regions.bed.gz + touch ${prefix}.regions.bed.gz.csi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/mosdepth/meta.yml b/modules/nf-core/modules/mosdepth/meta.yml new file mode 100644 index 00000000..0ca7bce9 --- /dev/null +++ b/modules/nf-core/modules/mosdepth/meta.yml @@ -0,0 +1,78 @@ +name: mosdepth +description: Calculates genome-wide sequencing coverage. +keywords: + - mosdepth + - bam + - cram + - coverage +tools: + - mosdepth: + description: | + Fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing. + documentation: https://github.com/brentp/mosdepth + doi: 10.1093/bioinformatics/btx699 + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: Index for BAM/CRAM file + pattern: "*.{bai,crai}" + - bed: + type: file + description: BED file with intersected intervals + pattern: "*.{bed}" + - window_size: + type: integer + description: Window size + pattern: "[0-9]+" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - global_txt: + type: file + description: Text file with global cumulative coverage distribution + pattern: "*.{global.dist.txt}" + - regions_txt: + type: file + description: Text file with region cumulative coverage distribution + pattern: "*.{region.dist.txt}" + - summary_txt: + type: file + description: Text file with summary mean depths per chromosome and regions + pattern: "*.{summary.txt}" + - per_base_bed: + type: file + description: BED file with per-base coverage + pattern: "*.{per-base.bed.gz}" + - per_base_csi: + type: file + description: Index file for BED file with per-base coverage + pattern: "*.{per-base.bed.gz.csi}" + - regions_bed: + type: file + description: BED file with per-region coverage + pattern: "*.{regions.bed.gz}" + - regions_csi: + type: file + description: Index file for BED file with per-region coverage + pattern: "*.{regions.bed.gz.csi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@ramprasadn" From 58c01d73a6be0236ae3378786416a7cfb71dd7b1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Feb 2022 03:23:09 +0100 Subject: [PATCH 0230/1921] Apply suggestions from code review Co-authored-by: Anders Jemt --- conf/modules.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 6479e140..f1f36641 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -169,7 +169,7 @@ process { ] } withName: SVDB_MERGE_TIDDIT { - ext.args = '--notag' + ext.args = '--notag --pass_only' ext.prefix = 'tiddit' publishDir = [ path: { "${params.outdir}/sv_caller" }, @@ -178,6 +178,7 @@ process { } withName: SVDB_MERGE { publishDir = [ + ext.args = '--pass_only' path: { "${params.outdir}/sv_caller" }, mode: 'copy', ] From 019a7e8e96ab234afd0d0c0b2963a4c84497c9e5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Feb 2022 03:40:36 +0100 Subject: [PATCH 0231/1921] update modules --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index f1f36641..91a63180 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -177,8 +177,8 @@ process { ] } withName: SVDB_MERGE { + ext.args = '--pass_only' publishDir = [ - ext.args = '--pass_only' path: { "${params.outdir}/sv_caller" }, mode: 'copy', ] From 523112ccf948884d4e24f5a924330bf589de71c3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Feb 2022 03:43:02 +0100 Subject: [PATCH 0232/1921] add mosdepth to bamqc --- conf/modules.config | 7 +++++++ subworkflows/nf-core/qc_bam.nf | 8 ++++++++ workflows/raredisease.nf | 1 + 3 files changed, 16 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 7cbb08f1..e6dc9dd9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -245,6 +245,13 @@ process { mode: 'copy' ] } + withName: MOSDEPTH { + ext.args = '--d4' + publishDir = [ + path: { "${params.outdir}/mosdepth" }, + mode: 'copy' + ] + } // nf-core modules withName: FASTQC { ext.args = '--quiet' diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 576b509a..59cf1c32 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -8,12 +8,14 @@ include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/ma include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' +include { MOSDEPTH } from '../../modules/nf-core/modules/mosdepth/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' workflow QC_BAM { take: bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] fasta // path: genome.fasta fai // path: genome.fasta.fai bait_intervals // path: bait.intervals_list @@ -51,6 +53,11 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG ( TIDDIT_COV.out.wig, chrom_sizes ) ch_versions = ch_versions.mix(TIDDIT_COV.out.versions) + // MOSDEPTH + bam.join(bai, by: [0]) + .set { mosdepth_input_bams } + MOSDEPTH (mosdepth_input_bams,[],[]) + ch_versions = ch_versions.mix(MOSDEPTH.out.versions) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] @@ -58,6 +65,7 @@ workflow QC_BAM { qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] + d4 = MOSDEPTH.out.d4 // channel: [ val(meta), path(*.d4) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 685413aa..1092f02a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -135,6 +135,7 @@ workflow RAREDISEASE { // STEP 1.5: BAM QUALITY CHECK QC_BAM ( ch_marked_bam, + ch_marked_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, CHECK_BED.out.bait_intervals, From 36e4e80dbfef19539dc2855c07d4610a77878f33 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Thu, 10 Feb 2022 10:30:05 +0100 Subject: [PATCH 0233/1921] Added link to the flowchart and short description --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 2ba5ca11..1d718fdd 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,10 @@ On release, automated continuous integration tests run the pipeline on a full-si 4. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) 5. Variant calling ([deepvariant](https://github.com/google/deepvariant) and [glnexus](https://github.com/dnanexus-rnd/GLnexus)) +The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). + + + ## Quick Start 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.10.3`) From dbe9ce6ccf631638037f0e84f5f42a359916ce39 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Feb 2022 02:09:40 +0100 Subject: [PATCH 0234/1921] regular assignment --- subworkflows/nf-core/qc_bam.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 59cf1c32..8788c87e 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -54,8 +54,7 @@ workflow QC_BAM { ch_versions = ch_versions.mix(TIDDIT_COV.out.versions) // MOSDEPTH - bam.join(bai, by: [0]) - .set { mosdepth_input_bams } + mosdepth_input_bams = bam.join(bai, by: [0]) MOSDEPTH (mosdepth_input_bams,[],[]) ch_versions = ch_versions.mix(MOSDEPTH.out.versions) From bcf7a7a29c717ce4ac513042f434a09ccc250d5b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:10:57 +0100 Subject: [PATCH 0235/1921] added bcftools annotate --- modules/local/bcftools_annotate/main.nf | 42 ++++++++++++++++++++++ modules/local/bcftools_annotate/meta.yml | 45 ++++++++++++++++++++++++ subworkflows/local/annotate_vcfanno.nf | 3 ++ 3 files changed, 90 insertions(+) create mode 100644 modules/local/bcftools_annotate/main.nf create mode 100644 modules/local/bcftools_annotate/meta.yml diff --git a/modules/local/bcftools_annotate/main.nf b/modules/local/bcftools_annotate/main.nf new file mode 100644 index 00000000..0020fedb --- /dev/null +++ b/modules/local/bcftools_annotate/main.nf @@ -0,0 +1,42 @@ +process BCFTOOLS_ANNOTATE { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::bcftools=1.14" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0': + 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.vcf.gz"), optional:true , emit: vcf + tuple val(meta), path("*.bcf") , optional:true , emit: bcf + 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 matcher = input =~ /vcf/ + def output_suffix = matcher ? "vcf.gz" : "bcf" + def output_type_compressed = matcher ? "z" : "b" + """ + bcftools \\ + annotate \\ + $args \\ + --output ${prefix}.${output_suffix} \\ + --output-type $output_type_compressed \\ + --threads $task.cpus \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/bcftools_annotate/meta.yml b/modules/local/bcftools_annotate/meta.yml new file mode 100644 index 00000000..8b76986b --- /dev/null +++ b/modules/local/bcftools_annotate/meta.yml @@ -0,0 +1,45 @@ +name: bcftools_annotate +description: write your description here +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: files + description: Query VCF or BCF file, can be either uncompressed or compressed +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.gz" + - bcf: + type: file + description: Compressed annotated BCF file + pattern: "*.bcf" +authors: + - "@projectoriented" diff --git a/subworkflows/local/annotate_vcfanno.nf b/subworkflows/local/annotate_vcfanno.nf index 3c7d40bb..302bee48 100644 --- a/subworkflows/local/annotate_vcfanno.nf +++ b/subworkflows/local/annotate_vcfanno.nf @@ -3,6 +3,7 @@ // include { VCFANNO } from '../../modules/local/vcfanno/main' +include { BCFTOOLS_ANNOTATE } from '../../modules/local/bcftools_annotate/main' workflow ANNOTATE_VCFANNO { take: @@ -13,8 +14,10 @@ workflow ANNOTATE_VCFANNO { ch_versions = Channel.empty() VCFANNO (vcf, resource_dir) + BCFTOOLS_ANNOTATE ( VCFANNO.out.vcf ) ch_versions = ch_versions.mix(VCFANNO.out.versions) emit: + annotated_vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } \ No newline at end of file From b4cd65b706946b41d35fa67bbc31693db6627995 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 14 Feb 2022 16:13:46 +0100 Subject: [PATCH 0236/1921] forgt to add emit ver for bcf --- subworkflows/local/annotate_vcfanno.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_vcfanno.nf b/subworkflows/local/annotate_vcfanno.nf index 302bee48..a0117818 100644 --- a/subworkflows/local/annotate_vcfanno.nf +++ b/subworkflows/local/annotate_vcfanno.nf @@ -14,9 +14,11 @@ workflow ANNOTATE_VCFANNO { ch_versions = Channel.empty() VCFANNO (vcf, resource_dir) - BCFTOOLS_ANNOTATE ( VCFANNO.out.vcf ) ch_versions = ch_versions.mix(VCFANNO.out.versions) + BCFTOOLS_ANNOTATE ( VCFANNO.out.vcf ) + ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) + emit: annotated_vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] From 166ecec7c7f308d95ef9c78ff02453d87c64173e Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 15 Feb 2022 11:33:23 +0100 Subject: [PATCH 0237/1921] test runs --- conf/genomes.config | 26 +++++++++++++------------ conf/modules.config | 9 +++++++++ conf/test.config | 3 +++ main.nf | 13 +++++++------ modules.json | 3 +++ modules/local/bcftools_annotate/main.nf | 2 +- nextflow_schema.json | 6 ++++++ subworkflows/local/prepare_genome.nf | 19 +++++++++++++++--- workflows/raredisease.nf | 6 ++++-- 9 files changed, 63 insertions(+), 24 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 3a72deb5..5b4caf39 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,20 +11,22 @@ params { genomes { 'GRCh37' { - fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" - fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" - bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" + fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" + fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" + bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" + variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" } 'GRCh38' { - fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" - fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" + fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" + fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" + bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" + variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" } } } diff --git a/conf/modules.config b/conf/modules.config index 7b67ce95..bfe941ee 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -51,6 +51,11 @@ process { enabled: false, ] } + withName: UNTAR_VCFANNO { + publishDir = [ + enabled: false, + ] + } // PREPARE_VCF && PREPARE_BED withName: CHECK_INPUT_VCF { publishDir = [ @@ -187,12 +192,16 @@ process { withName: "VCFANNO" { publishDir = [ path: { "${params.outdir}/variant_annotation" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: "BCFTOOLS_ANNOTATE" { ext.args = "" publishDir = [ path: { "${params.outdir}/variant_annotation" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } // NF-CORE Subworkflows diff --git a/conf/test.config b/conf/test.config index fa041a02..caf992b2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,5 +31,8 @@ params { // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' + // Variant annotation + vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/vcfanno_grch38_test.tar.gz' + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' } diff --git a/main.nf b/main.nf index d9ff2c5e..1e9c303a 100644 --- a/main.nf +++ b/main.nf @@ -17,12 +17,13 @@ nextflow.enable.dsl = 2 ======================================================================================== */ -params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') -params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') -params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') -params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') -params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') +params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') +params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') +params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') +params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') /* ======================================================================================== diff --git a/modules.json b/modules.json index ddc5d098..09d78aa0 100644 --- a/modules.json +++ b/modules.json @@ -86,6 +86,9 @@ }, "ucsc/wigtobigwig": { "git_sha": "30e64becaa1e6c807a09a49a6d3d457ff3cf7251" + }, + "untar": { + "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" } } } diff --git a/modules/local/bcftools_annotate/main.nf b/modules/local/bcftools_annotate/main.nf index 0020fedb..d3c3aa01 100644 --- a/modules/local/bcftools_annotate/main.nf +++ b/modules/local/bcftools_annotate/main.nf @@ -29,7 +29,7 @@ process BCFTOOLS_ANNOTATE { bcftools \\ annotate \\ $args \\ - --output ${prefix}.${output_suffix} \\ + --output ${prefix}_annotated.${output_suffix} \\ --output-type $output_type_compressed \\ --threads $task.cpus \\ $input diff --git a/nextflow_schema.json b/nextflow_schema.json index d3695fe2..2ab5681a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -114,6 +114,12 @@ "help_text": "This parameter is mandatory for use with ExpansionHunter", "fa_icon": "far fa-file-code" }, + "vcfanno_resources": { + "type": "string", + "description": "Directory path or tar.gz archive that holds resources defined within the vcfanno toml file, including itself.", + "help_text": "If no directory path is passed, default configurations will be used according to genome build within the context of the pipeline.", + "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.", diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 6692d33b..2477325d 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,8 +2,11 @@ // Prepare reference genome files // +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/modules/untar/main' + include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' + include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD} from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' @@ -35,6 +38,14 @@ workflow PREPARE_GENOME { ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) } + // Uncompress vcfanno resources if nothing else given + if ( params.vcfanno_resources.endsWith('.tar.gz') ) { + ch_vcfanno_resources = UNTAR_VCFANNO ( params.vcfanno_resources ).untar + ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) + } else { + ch_vcfanno_resources = file(params.vcfanno_resources) + } + if ( params.variant_catalog && file(params.variant_catalog, checkIfExists:true) ) { ch_variant_catalog = file(params.variant_catalog) } else { @@ -51,11 +62,13 @@ workflow PREPARE_GENOME { emit: - fasta = ch_fasta // path: genome.fasta - fai = ch_fai // path: genome.fasta.fai bwamem2_index = ch_bwamem2_index // path: bwamem2/index - variant_catalog = ch_variant_catalog // path: variant_catalog.json chrom_sizes = ch_chrom_sizes // path: chrom.sizes + fasta = ch_fasta // path: genome.fasta + fai = ch_fai // path: genome.fasta.fai sequence_dict = ch_sequence_dict + variant_catalog = ch_variant_catalog // path: variant_catalog.json + vcfanno_resources = ch_vcfanno_resources // channel: [ untar'd files, ] + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2ba0cb9f..21513d56 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -12,7 +12,8 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, - params.bwamem2_index, params.fasta_fai, params.gnomad + params.bwamem2_index, params.fasta_fai, params.gnomad, + params.vcfanno_resources ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -174,7 +175,8 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) - ANNOTATE_VCFANNO ( ch_dv_vcf, file("/home/mei.wu/nextflow/nf-core/vcfanno_resource_dir") ) + + ANNOTATE_VCFANNO ( ch_dv_vcf, PREPARE_GENOME.out.vcfanno_resources ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) // From cb685dd8b1fea168a074155bb6d71e2f9731ba0b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 15 Feb 2022 11:34:06 +0100 Subject: [PATCH 0238/1921] :down_arrow: untar module --- modules/nf-core/modules/untar/main.nf | 36 ++++++++++++++++++++++++++ modules/nf-core/modules/untar/meta.yml | 28 ++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 modules/nf-core/modules/untar/main.nf create mode 100644 modules/nf-core/modules/untar/meta.yml diff --git a/modules/nf-core/modules/untar/main.nf b/modules/nf-core/modules/untar/main.nf new file mode 100644 index 00000000..01205e60 --- /dev/null +++ b/modules/nf-core/modules/untar/main.nf @@ -0,0 +1,36 @@ +process UNTAR { + tag "$archive" + label 'process_low' + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' : + 'biocontainers/biocontainers:v1.2.0_cv1' }" + + input: + path archive + + output: + path "$untar" , emit: untar + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + untar = archive.toString() - '.tar.gz' + """ + tar \\ + -xzvf \\ + $args \\ + $archive \\ + $args2 \\ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/untar/meta.yml b/modules/nf-core/modules/untar/meta.yml new file mode 100644 index 00000000..51f94995 --- /dev/null +++ b/modules/nf-core/modules/untar/meta.yml @@ -0,0 +1,28 @@ +name: untar +description: Extract files. +keywords: + - untar + - uncompress +tools: + - untar: + description: | + Extract tar.gz files. + documentation: https://www.gnu.org/software/tar/manual/ + licence: ['GPL-3.0-or-later'] +input: + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" +output: + - untar: + type: file + description: + pattern: "*.*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" From 71d796b27f65d4edbc144a11311e7916beea1a73 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Feb 2022 12:12:57 +0100 Subject: [PATCH 0239/1921] swapped local for modules/vcfanno --- modules.json | 3 ++ modules/local/bcftools_annotate/main.nf | 42 ----------------- modules/local/bcftools_annotate/meta.yml | 45 ------------------- .../modules}/vcfanno/main.nf | 14 +++--- .../modules}/vcfanno/meta.yml | 14 +++--- 5 files changed, 20 insertions(+), 98 deletions(-) delete mode 100644 modules/local/bcftools_annotate/main.nf delete mode 100644 modules/local/bcftools_annotate/meta.yml rename modules/{local => nf-core/modules}/vcfanno/main.nf (75%) rename modules/{local => nf-core/modules}/vcfanno/meta.yml (79%) diff --git a/modules.json b/modules.json index 09d78aa0..8d2d05f4 100644 --- a/modules.json +++ b/modules.json @@ -89,6 +89,9 @@ }, "untar": { "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" + }, + "vcfanno": { + "git_sha": "2597c31d6bba4a354fc58b535c76bd14aed1c585" } } } diff --git a/modules/local/bcftools_annotate/main.nf b/modules/local/bcftools_annotate/main.nf deleted file mode 100644 index d3c3aa01..00000000 --- a/modules/local/bcftools_annotate/main.nf +++ /dev/null @@ -1,42 +0,0 @@ -process BCFTOOLS_ANNOTATE { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::bcftools=1.14" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0': - 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" - - input: - tuple val(meta), path(input) - - output: - tuple val(meta), path("*.vcf.gz"), optional:true , emit: vcf - tuple val(meta), path("*.bcf") , optional:true , emit: bcf - 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 matcher = input =~ /vcf/ - def output_suffix = matcher ? "vcf.gz" : "bcf" - def output_type_compressed = matcher ? "z" : "b" - """ - bcftools \\ - annotate \\ - $args \\ - --output ${prefix}_annotated.${output_suffix} \\ - --output-type $output_type_compressed \\ - --threads $task.cpus \\ - $input - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/bcftools_annotate/meta.yml b/modules/local/bcftools_annotate/meta.yml deleted file mode 100644 index 8b76986b..00000000 --- a/modules/local/bcftools_annotate/meta.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: bcftools_annotate -description: write your description here -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: files - description: Query VCF or BCF file, can be either uncompressed or compressed -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.gz" - - bcf: - type: file - description: Compressed annotated BCF file - pattern: "*.bcf" -authors: - - "@projectoriented" diff --git a/modules/local/vcfanno/main.nf b/modules/nf-core/modules/vcfanno/main.nf similarity index 75% rename from modules/local/vcfanno/main.nf rename to modules/nf-core/modules/vcfanno/main.nf index 6608d22e..51b1ec5b 100644 --- a/modules/local/vcfanno/main.nf +++ b/modules/nf-core/modules/vcfanno/main.nf @@ -9,11 +9,13 @@ process VCFANNO { input: tuple val(meta), path(vcf), path(tbi) + tuple val(meta), path(vcf_uncompressed) + path toml path resource_dir output: - tuple val(meta), path("*.vcf"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*_annotated.vcf"), emit: vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -21,15 +23,15 @@ process VCFANNO { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def input_vcf = vcf_uncompressed ?: vcf """ - ln -s $resource_dir/* \$(pwd) - toml=\$(echo *.toml) + ln -sf $resource_dir/* \$(pwd) vcfanno \\ -p $task.cpus \\ $args \\ - \$toml \\ - $vcf \\ + $toml \\ + $input_vcf \\ > ${prefix}_annotated.vcf cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/vcfanno/meta.yml b/modules/nf-core/modules/vcfanno/meta.yml similarity index 79% rename from modules/local/vcfanno/meta.yml rename to modules/nf-core/modules/vcfanno/meta.yml index b2caaefc..1c6893ea 100644 --- a/modules/local/vcfanno/meta.yml +++ b/modules/nf-core/modules/vcfanno/meta.yml @@ -25,15 +25,19 @@ input: - vcf: type: file description: query VCF file - pattern: "*.{vcf.gz}" + pattern: "*.{vcf, vcf.gz}" - vcf_tabix: type: file - description: tabix index of query VCF - pattern: "*.{vcf.gz.tbi}" + description: tabix index of query VCF - only needed if vcf is compressed + pattern: "*.vcf.gz.tbi" + - toml: + type: file + description: configuration file + pattern: "*.toml" - resource_dir: type: file description: | - This directory must contain one TOML config and referenced files in that config, + This directory contains referenced files in the TOML config, and the corresponding indicies e.g. exac.vcf.gz + exac.vcf.gz.tbi, with exception to the lua file. @@ -50,7 +54,7 @@ output: - vcf: type: file description: Annotated VCF file - pattern: "*.{vcf}" + pattern: "*.vcf" authors: - "@projectoriented" From d2f3fd69100973300c96c70b752e0ff58ba9006b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Feb 2022 15:39:19 +0100 Subject: [PATCH 0240/1921] added vcfanno --- conf/genomes.config | 2 ++ conf/modules.config | 24 +++++++------------ conf/test.config | 3 ++- main.nf | 1 + nextflow_schema.json | 8 ++++++- .../{local => nf-core}/annotate_vcfanno.nf | 14 +++++------ workflows/raredisease.nf | 4 ++-- 7 files changed, 28 insertions(+), 28 deletions(-) rename subworkflows/{local => nf-core}/annotate_vcfanno.nf (55%) diff --git a/conf/genomes.config b/conf/genomes.config index 5b4caf39..e8ddd83d 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -18,6 +18,7 @@ params { target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" + vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -27,6 +28,7 @@ params { target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" + vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" } } } diff --git a/conf/modules.config b/conf/modules.config index bfe941ee..45e50041 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -188,22 +188,6 @@ process { mode: 'copy', ] } - // ANNOTATE_VCFANNO - withName: "VCFANNO" { - publishDir = [ - path: { "${params.outdir}/variant_annotation" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - withName: "BCFTOOLS_ANNOTATE" { - ext.args = "" - publishDir = [ - path: { "${params.outdir}/variant_annotation" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { @@ -254,6 +238,14 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + // ANNOTATE_VCFANNO + withName: "VCFANNO" { + publishDir = [ + path: { "${params.outdir}/variant_annotation" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } // QC_BAM withName: '.*COLLECTMULTIPLEMETRICS' { publishDir = [ diff --git a/conf/test.config b/conf/test.config index caf992b2..dac7e011 100644 --- a/conf/test.config +++ b/conf/test.config @@ -32,7 +32,8 @@ params { variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' // Variant annotation - vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/vcfanno_grch38_test.tar.gz' + vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/vcfanno_grch38_small_test.tar.gz' + vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/grch38_vcfanno_config_-v0.2-_chr20.toml' target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' } diff --git a/main.nf b/main.nf index 1e9c303a..2b244799 100644 --- a/main.nf +++ b/main.nf @@ -24,6 +24,7 @@ params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') +params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') /* ======================================================================================== diff --git a/nextflow_schema.json b/nextflow_schema.json index 2ab5681a..20bbbf55 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -116,10 +116,16 @@ }, "vcfanno_resources": { "type": "string", - "description": "Directory path or tar.gz archive that holds resources defined within the vcfanno toml file, including itself.", + "description": "Directory path or tar.gz archive that holds resources defined within the vcfanno toml file.", "help_text": "If no directory path is passed, default configurations will be used according to genome build within the context of the pipeline.", "fa_icon": "fas fa-folder-open" }, + "vcfanno_toml": { + "type": "string", + "description": "Path to the vcfanno toml file.", + "help_text": "If toml is passed, default configurations will be used according to genome build within the context of the pipeline.", + "fa_icon": "fas fa-file-csv" + }, "save_reference": { "type": "boolean", "description": "If generated by the pipeline save the required indices/references in the results directory.", diff --git a/subworkflows/local/annotate_vcfanno.nf b/subworkflows/nf-core/annotate_vcfanno.nf similarity index 55% rename from subworkflows/local/annotate_vcfanno.nf rename to subworkflows/nf-core/annotate_vcfanno.nf index a0117818..380767b5 100644 --- a/subworkflows/local/annotate_vcfanno.nf +++ b/subworkflows/nf-core/annotate_vcfanno.nf @@ -2,24 +2,22 @@ // Annotate with VCFanno // -include { VCFANNO } from '../../modules/local/vcfanno/main' -include { BCFTOOLS_ANNOTATE } from '../../modules/local/bcftools_annotate/main' +include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' workflow ANNOTATE_VCFANNO { take: + toml // channel: path(toml) vcf // channel: [ val(meta), path(vcf), path(tbi) ] resource_dir // channel: path(resource_dir) main: ch_versions = Channel.empty() - VCFANNO (vcf, resource_dir) + ch_placeholder = vcf.map { meta, vcf, idx -> vcf = []; [meta, vcf] } + VCFANNO (vcf, ch_placeholder, toml, resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) - BCFTOOLS_ANNOTATE ( VCFANNO.out.vcf ) - ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) - emit: - annotated_vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] + annotated_vcf = VCFANNO.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} \ No newline at end of file +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 21513d56..8407169c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -66,6 +66,7 @@ include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_exp include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' // // SUBWORKFLOW: Consists of mix/local modules // @@ -73,7 +74,6 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' -include { ANNOTATE_VCFANNO } from '../subworkflows/local/annotate_vcfanno' /* ======================================================================================== @@ -176,7 +176,7 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) - ANNOTATE_VCFANNO ( ch_dv_vcf, PREPARE_GENOME.out.vcfanno_resources ) + ANNOTATE_VCFANNO ( params.vcfanno_toml, ch_dv_vcf, PREPARE_GENOME.out.vcfanno_resources ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) // From de655d294fbd5510e80e0c0640f100a3588681f6 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Feb 2022 15:42:41 +0100 Subject: [PATCH 0241/1921] lint quest: fix_1 --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8407169c..ff747251 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -175,7 +175,7 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) - + ANNOTATE_VCFANNO ( params.vcfanno_toml, ch_dv_vcf, PREPARE_GENOME.out.vcfanno_resources ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) From 4db58a6d30a3e080cb2c3110242018f8caf8c142 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Feb 2022 17:49:15 +0100 Subject: [PATCH 0242/1921] updated nfcore modules --- modules.json | 58 ++++++------ modules/nf-core/modules/bcftools/norm/main.nf | 9 +- .../nf-core/modules/bcftools/norm/meta.yml | 70 +++++++------- modules/nf-core/modules/bwamem2/index/main.nf | 3 + .../nf-core/modules/bwamem2/index/meta.yml | 46 ++++----- modules/nf-core/modules/bwamem2/mem/main.nf | 7 +- modules/nf-core/modules/bwamem2/mem/meta.yml | 80 ++++++++-------- modules/nf-core/modules/cat/cat/main.nf | 3 + modules/nf-core/modules/cat/cat/meta.yml | 2 +- .../custom/dumpsoftwareversions/main.nf | 3 + .../custom/dumpsoftwareversions/meta.yml | 2 +- modules/nf-core/modules/deepvariant/main.nf | 3 + modules/nf-core/modules/deepvariant/meta.yml | 2 +- .../nf-core/modules/expansionhunter/main.nf | 3 + .../nf-core/modules/expansionhunter/meta.yml | 2 +- modules/nf-core/modules/fastqc/main.nf | 3 + modules/nf-core/modules/fastqc/meta.yml | 90 +++++++++--------- .../modules/gatk4/bedtointervallist/main.nf | 9 +- .../modules/gatk4/bedtointervallist/meta.yml | 2 +- .../gatk4/createsequencedictionary/main.nf | 9 +- .../gatk4/createsequencedictionary/meta.yml | 48 +++++----- .../modules/gatk4/intervallisttools/main.nf | 9 +- .../modules/gatk4/intervallisttools/meta.yml | 2 +- modules/nf-core/modules/glnexus/main.nf | 3 + modules/nf-core/modules/glnexus/meta.yml | 2 +- modules/nf-core/modules/mosdepth/meta.yml | 8 +- modules/nf-core/modules/multiqc/main.nf | 9 +- modules/nf-core/modules/multiqc/meta.yml | 66 ++++++------- .../modules/picard/collecthsmetrics/main.nf | 3 + .../picard/collectmultiplemetrics/main.nf | 9 +- .../picard/collectmultiplemetrics/meta.yml | 86 ++++++++--------- .../modules/picard/markduplicates/main.nf | 9 +- .../modules/picard/markduplicates/meta.yml | 2 +- .../nf-core/modules/qualimap/bamqc/main.nf | 10 +- .../nf-core/modules/qualimap/bamqc/meta.yml | 83 ++++++++-------- .../modules/qualimap/bamqccram/main.nf | 60 ++++++++++++ .../modules/qualimap/bamqccram/meta.yml | 51 ++++++++++ .../nf-core/modules/samtools/faidx/main.nf | 12 ++- .../nf-core/modules/samtools/faidx/meta.yml | 72 +++++++------- .../nf-core/modules/samtools/index/main.nf | 11 ++- .../nf-core/modules/samtools/index/meta.yml | 92 +++++++++--------- .../nf-core/modules/samtools/merge/main.nf | 17 +++- .../nf-core/modules/samtools/merge/meta.yml | 94 +++++++++---------- modules/nf-core/modules/samtools/sort/main.nf | 4 + .../nf-core/modules/samtools/sort/meta.yml | 74 +++++++-------- .../nf-core/modules/samtools/stats/main.nf | 10 +- .../nf-core/modules/samtools/stats/meta.yml | 90 +++++++++--------- modules/nf-core/modules/svdb/merge/main.nf | 12 +-- modules/nf-core/modules/svdb/merge/meta.yml | 2 +- .../nf-core/modules/tabix/bgziptabix/main.nf | 5 +- .../nf-core/modules/tabix/bgziptabix/meta.yml | 76 +++++++-------- modules/nf-core/modules/tabix/tabix/main.nf | 3 + modules/nf-core/modules/tabix/tabix/meta.yml | 68 +++++++------- modules/nf-core/modules/tiddit/cov/main.nf | 3 + modules/nf-core/modules/tiddit/sv/main.nf | 3 + modules/nf-core/modules/tiddit/sv/meta.yml | 88 ++++++++--------- .../nf-core/modules/ucsc/wigtobigwig/main.nf | 3 + .../nf-core/modules/ucsc/wigtobigwig/meta.yml | 2 +- 58 files changed, 907 insertions(+), 700 deletions(-) create mode 100644 modules/nf-core/modules/qualimap/bamqccram/main.nf create mode 100644 modules/nf-core/modules/qualimap/bamqccram/meta.yml diff --git a/modules.json b/modules.json index 5daaec1b..94316fc1 100644 --- a/modules.json +++ b/modules.json @@ -4,91 +4,91 @@ "repos": { "nf-core/modules": { "bcftools/norm": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "bwamem2/index": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "bwamem2/mem": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "cat/cat": { - "git_sha": "c4549c0ecd1b02473471b507fd88a9fd5289d91c" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "custom/dumpsoftwareversions": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "deepvariant": { - "git_sha": "1287ba48fe6b2acb7449cfca387c91dc2ddf6538" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "expansionhunter": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "fastqc": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "gatk4/bedtointervallist": { - "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "gatk4/createsequencedictionary": { - "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "gatk4/intervallisttools": { - "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "glnexus": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "mosdepth": { - "git_sha": "45acc79667b58b5888cdea7327e76c728e94d6df" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "multiqc": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "picard/collecthsmetrics": { - "git_sha": "e751e5040af57e1b4e06ed4e0f3efe6de25c1683" + "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" }, "picard/collectmultiplemetrics": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "picard/markduplicates": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "qualimap/bamqc": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e31f1ff3b1375b30db08637d8937e25cc046f3cc" }, "samtools/faidx": { - "git_sha": "e0aa89141ffecb5f54d230f7ea46de242b74e084" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "samtools/index": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "samtools/merge": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "samtools/sort": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "samtools/stats": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "svdb/merge": { - "git_sha": "f44e6c74b4c51c5e49bc91e3d9d225544b5c1685" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "tabix/bgziptabix": { - "git_sha": "e22966ce74340cb671576143e5fdbbd71670cffa" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "tabix/tabix": { - "git_sha": "20d8250d9f39ddb05dfb437603aaf99b5c0b2b41" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "tiddit/cov": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" }, "tiddit/sv": { - "git_sha": "9d0cad583b9a71a6509b754fdf589cbfbed08961" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "ucsc/wigtobigwig": { - "git_sha": "30e64becaa1e6c807a09a49a6d3d457ff3cf7251" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" } } } diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/modules/bcftools/norm/main.nf index 95da56db..cd681f21 100644 --- a/modules/nf-core/modules/bcftools/norm/main.nf +++ b/modules/nf-core/modules/bcftools/norm/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_NORM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::bcftools=1.13" : null) + conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.13--h3a49de5_0' : - 'quay.io/biocontainers/bcftools:1.13--h3a49de5_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : + 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" input: tuple val(meta), path(vcf) @@ -15,6 +15,9 @@ process BCFTOOLS_NORM { tuple val(meta), path("*.gz") , emit: vcf path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/modules/nf-core/modules/bcftools/norm/meta.yml b/modules/nf-core/modules/bcftools/norm/meta.yml index 27978a53..ce4aee85 100644 --- a/modules/nf-core/modules/bcftools/norm/meta.yml +++ b/modules/nf-core/modules/bcftools/norm/meta.yml @@ -6,41 +6,41 @@ keywords: - variant calling - VCF tools: - - norm: - description: | - Normalize VCF files. - homepage: http://samtools.github.io/bcftools/bcftools.html - documentation: http://www.htslib.org/doc/bcftools.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] + - norm: + description: | + Normalize VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - The vcf file to be normalized - e.g. 'file1.vcf' - - fasta: - type: file - description: FASTA reference file - pattern: "*.{fasta,fa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be normalized + e.g. 'file1.vcf' + - fasta: + type: file + description: FASTA reference file + pattern: "*.{fasta,fa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF normalized output file - pattern: "*.{vcf.gz}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF normalized output file + pattern: "*.{vcf.gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@abhi18av" + - "@abhi18av" diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/modules/bwamem2/index/main.nf index e00538c9..0e9cc2f8 100644 --- a/modules/nf-core/modules/bwamem2/index/main.nf +++ b/modules/nf-core/modules/bwamem2/index/main.nf @@ -14,6 +14,9 @@ process BWAMEM2_INDEX { path "bwamem2" , emit: index path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' """ diff --git a/modules/nf-core/modules/bwamem2/index/meta.yml b/modules/nf-core/modules/bwamem2/index/meta.yml index e0f6014c..1b52448d 100644 --- a/modules/nf-core/modules/bwamem2/index/meta.yml +++ b/modules/nf-core/modules/bwamem2/index/meta.yml @@ -1,30 +1,30 @@ name: bwamem2_index description: Create BWA-mem2 index for reference genome keywords: - - index - - fasta - - genome - - reference + - index + - fasta + - genome + - reference tools: - - bwa: - description: | - BWA-mem2 is a software package for mapping DNA sequences against - a large reference genome, such as the human genome. - homepage: https://github.com/bwa-mem2/bwa-mem2 - documentation: https://github.com/bwa-mem2/bwa-mem2#usage - licence: ['MIT'] + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: https://github.com/bwa-mem2/bwa-mem2#usage + licence: ["MIT"] input: - - fasta: - type: file - description: Input genome fasta file + - fasta: + type: file + description: Input genome fasta file output: - - index: - type: file - description: BWA genome index files - pattern: "*.{0132,amb,ann,bwt.2bit.64,pac}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - index: + type: file + description: BWA genome index files + pattern: "*.{0132,amb,ann,bwt.2bit.64,pac}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@maxulysse" + - "@maxulysse" diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index 81b4b8ab..56f595ec 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -10,16 +10,21 @@ process BWAMEM2_MEM { input: tuple val(meta), path(reads) path index + val sort_bam output: tuple val(meta), path("*.bam"), emit: bam path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def read_group = meta.read_group ? "-R ${meta.read_group}" : "" + def samtools_command = sort_bam ? 'sort' : 'view' """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` @@ -30,7 +35,7 @@ process BWAMEM2_MEM { -t $task.cpus \\ \$INDEX \\ $reads \\ - | samtools view $args2 -@ $task.cpus -bhS -o ${prefix}.bam - + | samtools $samtools_command $args2 -@ $task.cpus -o ${prefix}.bam - cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/bwamem2/mem/meta.yml b/modules/nf-core/modules/bwamem2/mem/meta.yml index 58a35e08..25c97f91 100644 --- a/modules/nf-core/modules/bwamem2/mem/meta.yml +++ b/modules/nf-core/modules/bwamem2/mem/meta.yml @@ -1,45 +1,49 @@ name: bwamem2_mem description: Performs fastq alignment to a fasta reference using BWA keywords: - - mem - - bwa - - alignment - - map - - fastq - - bam - - sam + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam tools: - - bwa: - description: | - BWA is a software package for mapping DNA sequences against - a large reference genome, such as the human genome. - homepage: http://bio-bwa.sourceforge.net/ - documentation: http://www.htslib.org/doc/samtools.html - arxiv: arXiv:1303.3997 - licence: ['MIT'] + - bwa: + description: | + BWA-mem2 is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: https://github.com/bwa-mem2/bwa-mem2 + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: ["MIT"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" output: - - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@maxulysse" + - "@maxulysse" diff --git a/modules/nf-core/modules/cat/cat/main.nf b/modules/nf-core/modules/cat/cat/main.nf index 2efe20a5..4ee44599 100644 --- a/modules/nf-core/modules/cat/cat/main.nf +++ b/modules/nf-core/modules/cat/cat/main.nf @@ -14,6 +14,9 @@ process CAT_CAT { path "${file_out}*" , emit: file_out path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' diff --git a/modules/nf-core/modules/cat/cat/meta.yml b/modules/nf-core/modules/cat/cat/meta.yml index b3f370ee..e0a6361d 100644 --- a/modules/nf-core/modules/cat/cat/meta.yml +++ b/modules/nf-core/modules/cat/cat/meta.yml @@ -10,7 +10,7 @@ tools: homepage: None documentation: https://man7.org/linux/man-pages/man1/cat.1.html tool_dev_url: None - licence: ['GPL-3.0-or-later'] + licence: ["GPL-3.0-or-later"] input: - files_in: type: file diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf index 934bb467..327d5100 100644 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf @@ -15,6 +15,9 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { path "software_versions_mqc.yml", emit: mqc_yml path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' template 'dumpsoftwareversions.py' diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml index 5b5b8a60..60b546a0 100644 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml @@ -8,7 +8,7 @@ tools: description: Custom module used to dump software versions within the nf-core pipeline template homepage: https://github.com/nf-core/tools documentation: https://github.com/nf-core/tools - licence: ['MIT'] + licence: ["MIT"] input: - versions: type: file diff --git a/modules/nf-core/modules/deepvariant/main.nf b/modules/nf-core/modules/deepvariant/main.nf index 98345c83..c5e81997 100644 --- a/modules/nf-core/modules/deepvariant/main.nf +++ b/modules/nf-core/modules/deepvariant/main.nf @@ -21,6 +21,9 @@ process DEEPVARIANT { tuple val(meta), path("*g.vcf.gz"), emit: gvcf 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}" diff --git a/modules/nf-core/modules/deepvariant/meta.yml b/modules/nf-core/modules/deepvariant/meta.yml index d4423d69..b2d480a3 100644 --- a/modules/nf-core/modules/deepvariant/meta.yml +++ b/modules/nf-core/modules/deepvariant/meta.yml @@ -10,7 +10,7 @@ tools: documentation: https://github.com/google/deepvariant tool_dev_url: https://github.com/google/deepvariant doi: "https://doi.org/10.1038/nbt.4235" - licence: ['BSD-3-clause'] + licence: ["BSD-3-clause"] input: - meta: diff --git a/modules/nf-core/modules/expansionhunter/main.nf b/modules/nf-core/modules/expansionhunter/main.nf index 4db78230..4e62b2a6 100644 --- a/modules/nf-core/modules/expansionhunter/main.nf +++ b/modules/nf-core/modules/expansionhunter/main.nf @@ -16,6 +16,9 @@ process EXPANSIONHUNTER { tuple val(meta), path("*.vcf"), 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}" diff --git a/modules/nf-core/modules/expansionhunter/meta.yml b/modules/nf-core/modules/expansionhunter/meta.yml index 17d72bb4..3483c0db 100644 --- a/modules/nf-core/modules/expansionhunter/meta.yml +++ b/modules/nf-core/modules/expansionhunter/meta.yml @@ -10,7 +10,7 @@ tools: documentation: https://github.com/Illumina/ExpansionHunter/blob/master/docs/01_Introduction.md tool_dev_url: None doi: "10.1093/bioinformatics/btz431" - licence: ['Apache-2.0'] + licence: ["Apache-2.0"] input: - meta: diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index d250eca0..ed6b8c50 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -15,6 +15,9 @@ process FASTQC { tuple val(meta), path("*.zip") , emit: zip path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' // Add soft-links to original FastQs for consistent naming in pipeline diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml index b09553a3..4da5bb5a 100644 --- a/modules/nf-core/modules/fastqc/meta.yml +++ b/modules/nf-core/modules/fastqc/meta.yml @@ -1,52 +1,52 @@ name: fastqc description: Run FastQC on sequenced reads keywords: - - quality control - - qc - - adapters - - fastq + - quality control + - qc + - adapters + - fastq tools: - - fastqc: - description: | - FastQC gives general quality metrics about your reads. - It provides information about the quality score distribution - across your reads, the per base sequence content (%A/C/G/T). - You get information about adapter contamination and other - overrepresented sequences. - homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ - documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ - licence: ['GPL-2.0-only'] + - fastqc: + description: | + FastQC gives general quality metrics about your reads. + It provides information about the quality score distribution + across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other + overrepresented sequences. + homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ + documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ + licence: ["GPL-2.0-only"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" + - "@drpatelh" + - "@grst" + - "@ewels" + - "@FelixKrueger" diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf index 37f46f48..74256dd1 100644 --- a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf @@ -2,10 +2,10 @@ process GATK4_BEDTOINTERVALLIST { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" input: tuple val(meta), path(bed) @@ -15,6 +15,9 @@ process GATK4_BEDTOINTERVALLIST { 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}" diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml b/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml index 910f9552..986f1592 100644 --- a/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml @@ -12,7 +12,7 @@ tools: 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'] + licence: ["Apache-2.0"] input: - meta: type: map diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf index 2cbd8948..87d52a59 100644 --- a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf @@ -2,10 +2,10 @@ process GATK4_CREATESEQUENCEDICTIONARY { tag "$fasta" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" input: path fasta @@ -14,6 +14,9 @@ process GATK4_CREATESEQUENCEDICTIONARY { path "*.dict" , emit: dict path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def avail_mem = 6 diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml index 54f479b3..bd247888 100644 --- a/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml @@ -1,32 +1,32 @@ name: gatk4_createsequencedictionary description: Creates a sequence dictionary for a reference sequence keywords: - - dictionary - - fasta + - dictionary + - fasta tools: - - gatk: - 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'] + - gatk: + 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: - - fasta: - type: file - description: Input fasta file - pattern: "*.{fasta,fa}" + - fasta: + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" output: - - dict: - type: file - description: gatk dictionary file - pattern: "*.{dict}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - dict: + type: file + description: gatk dictionary file + pattern: "*.{dict}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@maxulysse" + - "@maxulysse" diff --git a/modules/nf-core/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/modules/gatk4/intervallisttools/main.nf index 17412160..352a3240 100644 --- a/modules/nf-core/modules/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/modules/gatk4/intervallisttools/main.nf @@ -2,10 +2,10 @@ process GATK4_INTERVALLISTTOOLS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" input: tuple val(meta), path(interval_list) @@ -14,6 +14,9 @@ process GATK4_INTERVALLISTTOOLS { tuple val(meta), path("*_split/*/*.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}" diff --git a/modules/nf-core/modules/gatk4/intervallisttools/meta.yml b/modules/nf-core/modules/gatk4/intervallisttools/meta.yml index 9e2d994f..804645f3 100644 --- a/modules/nf-core/modules/gatk4/intervallisttools/meta.yml +++ b/modules/nf-core/modules/gatk4/intervallisttools/meta.yml @@ -14,7 +14,7 @@ tools: 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'] + licence: ["Apache-2.0"] input: - meta: diff --git a/modules/nf-core/modules/glnexus/main.nf b/modules/nf-core/modules/glnexus/main.nf index b8afca22..84da95a0 100644 --- a/modules/nf-core/modules/glnexus/main.nf +++ b/modules/nf-core/modules/glnexus/main.nf @@ -14,6 +14,9 @@ process GLNEXUS { tuple val(meta), path("*.bcf"), emit: bcf 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}" diff --git a/modules/nf-core/modules/glnexus/meta.yml b/modules/nf-core/modules/glnexus/meta.yml index 5ba17cae..0fc19452 100644 --- a/modules/nf-core/modules/glnexus/meta.yml +++ b/modules/nf-core/modules/glnexus/meta.yml @@ -10,7 +10,7 @@ tools: documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started tool_dev_url: None doi: https://doi.org/10.1101/343970 - licence: ['Apache-2.0'] + licence: ["Apache-2.0"] input: - meta: diff --git a/modules/nf-core/modules/mosdepth/meta.yml b/modules/nf-core/modules/mosdepth/meta.yml index 0ca7bce9..636e966b 100644 --- a/modules/nf-core/modules/mosdepth/meta.yml +++ b/modules/nf-core/modules/mosdepth/meta.yml @@ -11,7 +11,7 @@ tools: Fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing. documentation: https://github.com/brentp/mosdepth doi: 10.1093/bioinformatics/btx699 - licence: ['MIT'] + licence: ["MIT"] input: - meta: type: map @@ -73,6 +73,6 @@ output: description: File containing software versions pattern: "versions.yml" authors: - - "@joseespinosa" - - "@drpatelh" - - "@ramprasadn" + - "@joseespinosa" + - "@drpatelh" + - "@ramprasadn" diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index 3dceb162..1264aac1 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_medium' - conda (params.enable_conda ? 'bioconda::multiqc=1.11' : null) + conda (params.enable_conda ? 'bioconda::multiqc=1.12' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.12--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.12--pyhdfd78af_0' }" input: path multiqc_files @@ -15,6 +15,9 @@ process MULTIQC { path "*_plots" , optional:true, emit: plots path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' """ diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml index 63c75a45..6fa891ef 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -1,40 +1,40 @@ name: MultiQC description: Aggregate results from bioinformatics analyses across many samples into a single report keywords: - - QC - - bioinformatics tools - - Beautiful stand-alone HTML report + - QC + - bioinformatics tools + - Beautiful stand-alone HTML report tools: - - multiqc: - description: | - MultiQC searches a given directory for analysis logs and compiles a HTML report. - It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. - homepage: https://multiqc.info/ - documentation: https://multiqc.info/docs/ - licence: ['GPL-3.0-or-later'] + - multiqc: + description: | + MultiQC searches a given directory for analysis logs and compiles a HTML report. + It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. + homepage: https://multiqc.info/ + documentation: https://multiqc.info/docs/ + licence: ["GPL-3.0-or-later"] input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC output: - - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - type: dir - description: MultiQC data dir - pattern: "multiqc_data" - - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - report: + type: file + description: MultiQC report file + pattern: "multiqc_report.html" + - data: + type: dir + description: MultiQC data dir + pattern: "multiqc_data" + - plots: + type: file + description: Plots created by MultiQC + pattern: "*_data" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@abhi18av" - - "@bunop" - - "@drpatelh" + - "@abhi18av" + - "@bunop" + - "@drpatelh" diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/modules/picard/collecthsmetrics/main.nf index ae3e4d96..07e8504f 100644 --- a/modules/nf-core/modules/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/modules/picard/collecthsmetrics/main.nf @@ -18,6 +18,9 @@ process PICARD_COLLECTHSMETRICS { tuple val(meta), path("*collecthsmetrics.txt"), emit: hs_metrics 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}" diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf index 6b292534..e023ea3c 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTMULTIPLEMETRICS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) + conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.25.7--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -16,6 +16,9 @@ process PICARD_COLLECTMULTIPLEMETRICS { tuple val(meta), path("*.pdf") , emit: pdf 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}" diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml index 613afc62..68b5c65e 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml @@ -1,50 +1,50 @@ name: picard_collectmultiplemetrics description: Collect multiple metrics from a BAM file keywords: - - alignment - - metrics - - statistics - - insert - - quality - - bam + - alignment + - metrics + - statistics + - insert + - quality + - bam tools: - - picard: - description: | - A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) - data and formats such as SAM/BAM/CRAM and VCF. - homepage: https://broadinstitute.github.io/picard/ - documentation: https://broadinstitute.github.io/picard/ - licence: ['MIT'] + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + licence: ["MIT"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" - - fasta: - type: file - description: Genome fasta file + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - fasta: + type: file + description: Genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" - - pdf: - type: file - description: PDF plots of metrics - pattern: "*.{pdf}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - metrics: + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + - pdf: + type: file + description: PDF plots of metrics + pattern: "*.{pdf}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" + - "@drpatelh" diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index d3bf6938..5196b6ed 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) + conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.25.7--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -16,6 +16,9 @@ process PICARD_MARKDUPLICATES { tuple val(meta), path("*.metrics.txt"), emit: metrics 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}" diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index c9a08b36..842817bc 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -14,7 +14,7 @@ tools: data and formats such as SAM/BAM/CRAM and VCF. homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ - licence: ['MIT'] + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/modules/qualimap/bamqc/main.nf b/modules/nf-core/modules/qualimap/bamqc/main.nf index a47fde7e..92f38f8c 100644 --- a/modules/nf-core/modules/qualimap/bamqc/main.nf +++ b/modules/nf-core/modules/qualimap/bamqc/main.nf @@ -10,19 +10,21 @@ process QUALIMAP_BAMQC { input: tuple val(meta), path(bam) path gff - val use_gff output: tuple val(meta), path("${prefix}"), emit: results path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: - def args = task.ext.args ?: '' - prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" def collect_pairs = meta.single_end ? '' : '--collect-overlap-pairs' def memory = task.memory.toGiga() + "G" - def regions = use_gff ? "--gff $gff" : '' + def regions = gff ? "--gff $gff" : '' def strandedness = 'non-strand-specific' if (meta.strandedness == 'forward') { diff --git a/modules/nf-core/modules/qualimap/bamqc/meta.yml b/modules/nf-core/modules/qualimap/bamqc/meta.yml index 6888d30e..303532eb 100644 --- a/modules/nf-core/modules/qualimap/bamqc/meta.yml +++ b/modules/nf-core/modules/qualimap/bamqc/meta.yml @@ -1,50 +1,47 @@ name: qualimap_bamqc description: Evaluate alignment data keywords: - - quality control - - qc - - bam + - quality control + - qc + - bam tools: - - qualimap: - description: | - Qualimap 2 is a platform-independent application written in - Java and R that provides both a Graphical User Interface and - a command-line interface to facilitate the quality control of - alignment sequencing data and its derivatives like feature counts. - homepage: http://qualimap.bioinfo.cipf.es/ - documentation: http://qualimap.conesalab.org/doc_html/index.html - doi: 10.1093/bioinformatics/bts503 - licence: ['GPL-2.0-only'] + - qualimap: + description: | + Qualimap 2 is a platform-independent application written in + Java and R that provides both a Graphical User Interface and + a command-line interface to facilitate the quality control of + alignment sequencing data and its derivatives like feature counts. + homepage: http://qualimap.bioinfo.cipf.es/ + documentation: http://qualimap.conesalab.org/doc_html/index.html + doi: 10.1093/bioinformatics/bts503 + licence: ["GPL-2.0-only"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" - - gff: - type: file - description: Feature file with regions of interest - pattern: "*.{gff,gtf,bed}" - - use_gff: - type: boolean - description: Specifies if feature file should be used or not + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - gff: + type: file + description: Feature file with regions of interest + pattern: "*.{gff,gtf,bed}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - results: - type: dir - description: Qualimap results dir - pattern: "*/*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results: + type: dir + description: Qualimap results dir + pattern: "*/*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@phue" + - "@phue" diff --git a/modules/nf-core/modules/qualimap/bamqccram/main.nf b/modules/nf-core/modules/qualimap/bamqccram/main.nf new file mode 100644 index 00000000..b9a5538d --- /dev/null +++ b/modules/nf-core/modules/qualimap/bamqccram/main.nf @@ -0,0 +1,60 @@ +process QUALIMAP_BAMQCCRAM { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::qualimap=2.2.2d bioconda::samtools=1.12" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-d3934ca6bb4e61334891ffa2e9a4c87a530e3188:4bf11d12f2c3eccf1eb585097c0b6fd31c18c418-0' : + 'quay.io/biocontainers/mulled-v2-d3934ca6bb4e61334891ffa2e9a4c87a530e3188:4bf11d12f2c3eccf1eb585097c0b6fd31c18c418-0' }" + + input: + tuple val(meta), path(cram), path(crai) + path gff + path fasta + path fasta_fai + + output: + tuple val(meta), path("${prefix}"), emit: results + 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 collect_pairs = meta.single_end ? '' : '--collect-overlap-pairs' + def memory = task.memory.toGiga() + "G" + def regions = gff ? "--gff $gff" : '' + + def strandedness = 'non-strand-specific' + if (meta.strandedness == 'forward') { + strandedness = 'strand-specific-forward' + } else if (meta.strandedness == 'reverse') { + strandedness = 'strand-specific-reverse' + } + """ + unset DISPLAY + mkdir tmp + export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp + + samtools view -hb -T ${fasta} ${cram} | + qualimap \\ + --java-mem-size=$memory \\ + bamqc \\ + $args \\ + -bam /dev/stdin \\ + $regions \\ + -p $strandedness \\ + $collect_pairs \\ + -outdir $prefix \\ + -nt $task.cpus + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/qualimap/bamqccram/meta.yml b/modules/nf-core/modules/qualimap/bamqccram/meta.yml new file mode 100644 index 00000000..d72f203d --- /dev/null +++ b/modules/nf-core/modules/qualimap/bamqccram/meta.yml @@ -0,0 +1,51 @@ +name: qualimap_bamqccram +description: Evaluate alignment data +keywords: + - quality control + - qc + - bam +tools: + - qualimap: + description: | + Qualimap 2 is a platform-independent application written in + Java and R that provides both a Graphical User Interface and + a command-line interface to facilitate the quality control of + alignment sequencing data and its derivatives like feature counts. + homepage: http://qualimap.bioinfo.cipf.es/ + documentation: http://qualimap.conesalab.org/doc_html/index.html + doi: 10.1093/bioinformatics/bts503 + licence: ["GPL-2.0-only"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bacramm: + type: file + description: BAM file + pattern: "*.{bam}" + - gff: + type: file + description: Feature file with regions of interest + pattern: "*.{gff,gtf,bed}" + - fasta: + type: file + description: Reference file of cram file + pattern: "*.{fasta,fa,fna}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - results: + type: dir + description: Qualimap results dir + pattern: "*/*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf index d8308b03..b83a4952 100644 --- a/modules/nf-core/modules/samtools/faidx/main.nf +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -11,13 +11,19 @@ process SAMTOOLS_FAIDX { tuple val(meta), path(fasta) output: - tuple val(meta), path ("*.fai") , emit: fai - path "versions.yml" , emit: versions + tuple val(meta), path ("*.fai"), emit: fai + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' """ - samtools faidx $fasta + samtools \\ + faidx \\ + $fasta + cat <<-END_VERSIONS > versions.yml "${task.process}": samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/modules/samtools/faidx/meta.yml index bae97a39..e9767764 100644 --- a/modules/nf-core/modules/samtools/faidx/meta.yml +++ b/modules/nf-core/modules/samtools/faidx/meta.yml @@ -1,43 +1,43 @@ name: samtools_faidx description: Index FASTA file keywords: - - index - - fasta + - index + - fasta 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'] + - 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 ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" - - "@ewels" - - "@phue" + - "@drpatelh" + - "@ewels" + - "@phue" diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index b033e225..dfe0234f 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -12,14 +12,21 @@ process SAMTOOLS_INDEX { output: tuple val(meta), path("*.bai") , optional:true, emit: bai - tuple val(meta), path("*.crai"), optional:true, emit: crai tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai"), optional:true, emit: crai path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' """ - samtools index -@ ${task.cpus-1} $args $input + samtools \\ + index \\ + -@ ${task.cpus-1} \\ + $args \\ + $input cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml index 0905b3cd..e5cadbc2 100644 --- a/modules/nf-core/modules/samtools/index/meta.yml +++ b/modules/nf-core/modules/samtools/index/meta.yml @@ -1,53 +1,53 @@ name: samtools_index description: Index SAM/BAM/CRAM file keywords: - - index - - bam - - sam - - cram + - index + - bam + - sam + - cram tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: hhttp://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] + - 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: hhttp://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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - csi: - type: file - description: CSI index file - pattern: "*.{csi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - crai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - csi: + type: file + description: CSI index file + pattern: "*.{csi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" - - "@ewels" - - "@maxulysse" + - "@drpatelh" + - "@ewels" + - "@maxulysse" diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf index 8eeb64a2..be6fe32e 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -12,17 +12,26 @@ process SAMTOOLS_MERGE { path fasta output: - tuple val(meta), path("${prefix}.bam"), optional:true, emit: bam + tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: - def args = task.ext.args ?: '' - prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" def file_type = input_files[0].getExtension() def reference = fasta ? "--reference ${fasta}" : "" """ - samtools merge --threads ${task.cpus-1} $args ${reference} ${prefix}.${file_type} $input_files + samtools \\ + merge \\ + --threads ${task.cpus-1} \\ + $args \\ + ${reference} \\ + ${prefix}.${file_type} \\ + $input_files cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/nf-core/modules/samtools/merge/meta.yml index 2576a3a3..fb78e55c 100644 --- a/modules/nf-core/modules/samtools/merge/meta.yml +++ b/modules/nf-core/modules/samtools/merge/meta.yml @@ -1,54 +1,54 @@ name: samtools_merge description: Merge BAM or CRAM file keywords: - - merge - - bam - - sam - - cram + - merge + - bam + - sam + - cram tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: hhttp://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] + - 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: hhttp://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_files: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram,sam}" - - fasta: - type: optional file - description: Reference file the CRAM was created with - pattern: "*.{fasta,fa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - fasta: + type: optional file + description: Reference file the CRAM was created with + pattern: "*.{fasta,fa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" - - cram: - type: file - description: CRAM file - pattern: "*.{cram}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - cram: + type: file + description: CRAM file + pattern: "*.{cram}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" - - "@yuukiiwa " - - "@maxulysse" - - "@FriederikeHanssen" + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf index 0c2cf25e..0f2237cc 100644 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -14,9 +14,13 @@ process SAMTOOLS_SORT { tuple val(meta), path("*.bam"), emit: bam path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + 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 cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml index 3402a068..a820c55a 100644 --- a/modules/nf-core/modules/samtools/sort/meta.yml +++ b/modules/nf-core/modules/samtools/sort/meta.yml @@ -1,44 +1,44 @@ name: samtools_sort description: Sort SAM/BAM/CRAM file keywords: - - sort - - bam - - sam - - cram + - sort + - 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: hhttp://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] + - 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: hhttp://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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" - - "@ewels" + - "@drpatelh" + - "@ewels" diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index 83c87002..f6fe3bfe 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -15,11 +15,19 @@ process SAMTOOLS_STATS { tuple val(meta), path("*.stats"), emit: stats path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def reference = fasta ? "--reference ${fasta}" : "" """ - samtools stats --threads ${task.cpus-1} ${reference} ${input} > ${input}.stats + samtools \\ + stats \\ + --threads ${task.cpus-1} \\ + ${reference} \\ + ${input} \\ + > ${input}.stats cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/samtools/stats/meta.yml b/modules/nf-core/modules/samtools/stats/meta.yml index 869e62e3..cac50b1c 100644 --- a/modules/nf-core/modules/samtools/stats/meta.yml +++ b/modules/nf-core/modules/samtools/stats/meta.yml @@ -1,53 +1,53 @@ name: samtools_stats description: Produces comprehensive statistics from SAM/BAM/CRAM file keywords: - - statistics - - counts - - bam - - sam - - cram + - statistics + - counts + - bam + - sam + - cram tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: hhttp://www.htslib.org/doc/samtools.html - doi: 10.1093/bioinformatics/btp352 - licence: ['MIT'] + - 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: hhttp://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: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - fasta: + type: optional file + description: Reference file the CRAM was created with + pattern: "*.{fasta,fa}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - stats: type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: + description: File containing samtools stats output + pattern: "*.{stats}" + - versions: type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - fasta: - type: optional file - description: Reference file the CRAM was created with - pattern: "*.{fasta,fa}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - stats: - type: file - description: File containing samtools stats output - pattern: "*.{stats}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + description: File containing software versions + pattern: "versions.yml" authors: - - "@drpatelh" - - "@FriederikeHanssen" + - "@drpatelh" + - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 7c812a1a..1f479ea4 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -22,20 +22,14 @@ process SVDB_MERGE { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def input = "" - if(priority) { - prio = "--priority ${priority.join(',')}" - for (int index = 0; index < vcfs.size(); index++) { - input += " ${vcfs[index]}:${priority[index]}" - } - } else { - prio = "" - input = "${vcfs.join(" ")}" + for (int index = 0; index < vcfs.size(); index++) { + input += " ${vcfs[index]}:${priority[index]}" } """ svdb \\ --merge \\ $args \\ - $prio \\ + --priority ${priority.join(',')} \\ --vcf $input \\ > ${prefix}_sv_merge.vcf diff --git a/modules/nf-core/modules/svdb/merge/meta.yml b/modules/nf-core/modules/svdb/merge/meta.yml index 2092ddd9..e166bad0 100644 --- a/modules/nf-core/modules/svdb/merge/meta.yml +++ b/modules/nf-core/modules/svdb/merge/meta.yml @@ -7,7 +7,7 @@ tools: description: structural variant database software homepage: https://github.com/J35P312/SVDB documentation: https://github.com/J35P312/SVDB/blob/master/README.md - licence: ['MIT'] + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/modules/tabix/bgziptabix/main.nf b/modules/nf-core/modules/tabix/bgziptabix/main.nf index e419d153..12657599 100644 --- a/modules/nf-core/modules/tabix/bgziptabix/main.nf +++ b/modules/nf-core/modules/tabix/bgziptabix/main.nf @@ -14,12 +14,15 @@ process TABIX_BGZIPTABIX { tuple val(meta), path("*.gz"), path("*.tbi"), emit: gz_tbi 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}" """ - bgzip -c $args $input > ${prefix}.gz + bgzip --threads ${task.cpus} -c $args $input > ${prefix}.gz tabix $args2 ${prefix}.gz cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/tabix/bgziptabix/meta.yml b/modules/nf-core/modules/tabix/bgziptabix/meta.yml index f2aed84d..49c03289 100644 --- a/modules/nf-core/modules/tabix/bgziptabix/meta.yml +++ b/modules/nf-core/modules/tabix/bgziptabix/meta.yml @@ -1,45 +1,45 @@ name: tabix_bgziptabix description: bgzip a sorted tab-delimited genome file and then create tabix index keywords: - - bgzip - - compress - - index - - tabix - - vcf + - bgzip + - compress + - index + - tabix + - vcf tools: - - tabix: - description: Generic indexer for TAB-delimited genome position files. - homepage: https://www.htslib.org/doc/tabix.html - documentation: https://www.htslib.org/doc/tabix.1.html - doi: 10.1093/bioinformatics/btq671 - licence: ['MIT'] + - tabix: + description: Generic indexer for TAB-delimited genome position files. + homepage: https://www.htslib.org/doc/tabix.html + documentation: https://www.htslib.org/doc/tabix.1.html + doi: 10.1093/bioinformatics/btq671 + licence: ["MIT"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file - pattern: "*.{bed,gff,sam,vcf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file + pattern: "*.{bed,gff,sam,vcf}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gz: - type: file - description: Output compressed file - pattern: "*.{gz}" - - tbi: - type: file - description: tabix index file - pattern: "*.{gz.tbi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - gz: + type: file + description: Output compressed file + pattern: "*.{gz}" + - tbi: + type: file + description: tabix index file + pattern: "*.{gz.tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@maxulysse" + - "@maxulysse" diff --git a/modules/nf-core/modules/tabix/tabix/main.nf b/modules/nf-core/modules/tabix/tabix/main.nf index c721a554..5f516261 100644 --- a/modules/nf-core/modules/tabix/tabix/main.nf +++ b/modules/nf-core/modules/tabix/tabix/main.nf @@ -14,6 +14,9 @@ process TABIX_TABIX { tuple val(meta), path("*.tbi"), emit: tbi path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' """ diff --git a/modules/nf-core/modules/tabix/tabix/meta.yml b/modules/nf-core/modules/tabix/tabix/meta.yml index 2e37c4ff..89478abe 100644 --- a/modules/nf-core/modules/tabix/tabix/meta.yml +++ b/modules/nf-core/modules/tabix/tabix/meta.yml @@ -1,41 +1,41 @@ name: tabix_tabix description: create tabix index from a sorted bgzip tab-delimited genome file keywords: - - index - - tabix - - vcf + - index + - tabix + - vcf tools: - - tabix: - description: Generic indexer for TAB-delimited genome position files. - homepage: https://www.htslib.org/doc/tabix.html - documentation: https://www.htslib.org/doc/tabix.1.html - doi: 10.1093/bioinformatics/btq671 - licence: ['MIT'] + - tabix: + description: Generic indexer for TAB-delimited genome position files. + homepage: https://www.htslib.org/doc/tabix.html + documentation: https://www.htslib.org/doc/tabix.1.html + doi: 10.1093/bioinformatics/btq671 + licence: ["MIT"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file compressed with bgzip - pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file compressed with bgzip + pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tbi: - type: file - description: tabix index file - pattern: "*.{tbi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tbi: + type: file + description: tabix index file + pattern: "*.{tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@joseespinosa" - - "@drpatelh" - - "@maxulysse" + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" diff --git a/modules/nf-core/modules/tiddit/cov/main.nf b/modules/nf-core/modules/tiddit/cov/main.nf index c5a1ca0f..a5f8c649 100644 --- a/modules/nf-core/modules/tiddit/cov/main.nf +++ b/modules/nf-core/modules/tiddit/cov/main.nf @@ -16,6 +16,9 @@ process TIDDIT_COV { tuple val(meta), path("*.wig"), optional: true, emit: wig 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}" diff --git a/modules/nf-core/modules/tiddit/sv/main.nf b/modules/nf-core/modules/tiddit/sv/main.nf index 08eecc01..454dfc54 100644 --- a/modules/nf-core/modules/tiddit/sv/main.nf +++ b/modules/nf-core/modules/tiddit/sv/main.nf @@ -18,6 +18,9 @@ process TIDDIT_SV { tuple val(meta), path("*.signals.tab"), emit: signals 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}" diff --git a/modules/nf-core/modules/tiddit/sv/meta.yml b/modules/nf-core/modules/tiddit/sv/meta.yml index f788ffa6..fc307081 100644 --- a/modules/nf-core/modules/tiddit/sv/meta.yml +++ b/modules/nf-core/modules/tiddit/sv/meta.yml @@ -1,51 +1,51 @@ name: tiddit_sv description: Identify chromosomal rearrangements. keywords: - - structural - - variants - - vcf + - structural + - variants + - vcf tools: - - sv: - description: Search for structural variants. - homepage: https://github.com/SciLifeLab/TIDDIT - documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md - doi: 10.12688/f1000research.11168.1 - licence: ['GPL-3.0-or-later'] + - sv: + description: Search for structural variants. + homepage: https://github.com/SciLifeLab/TIDDIT + documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md + doi: 10.12688/f1000research.11168.1 + licence: ["GPL-3.0-or-later"] input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input FASTA file - pattern: "*.{fasta,fa}" - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fasta,fa}" + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: vcf - pattern: "*.{vcf}" - - ploidy: - type: file - description: tab - pattern: "*.{ploidy.tab}" - - signals: - type: file - description: tab - pattern: "*.{signals.tab}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: vcf + pattern: "*.{vcf}" + - ploidy: + type: file + description: tab + pattern: "*.{ploidy.tab}" + - signals: + type: file + description: tab + pattern: "*.{signals.tab}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@maxulysse" + - "@maxulysse" diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf index 6a1847b6..d07e7ec1 100644 --- a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf @@ -17,6 +17,9 @@ process UCSC_WIGTOBIGWIG { tuple val(meta), path("*.bw"), emit: bw 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}" diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml b/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml index 5ca94bb4..8eed29bb 100644 --- a/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml +++ b/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml @@ -12,7 +12,7 @@ tools: documentation: None tool_dev_url: None doi: "" - licence: ['varies; see http://genome.ucsc.edu/license'] + licence: ["varies; see http://genome.ucsc.edu/license"] input: - meta: From a4b1578aef699ecae39ca4b6f32a8892e0ca4cdc Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Feb 2022 18:02:10 +0100 Subject: [PATCH 0243/1921] update local modules: attmpt 1 --- modules/local/check_input_vcf.nf | 6 +++--- modules/local/get_chrom_sizes.nf | 3 +++ modules/local/manta/germline/main.nf | 3 +++ modules/local/samplesheet_check.nf | 14 ++++++++------ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 8afcb4b3..ac1eb6c6 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -1,10 +1,10 @@ process CHECK_INPUT_VCF { tag "check_vcf" - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'quay.io/biocontainers/python:3.8.3' }" + 'https://depot.galaxyproject.org/singularity/python:3.9--1' : + 'quay.io/biocontainers/python:3.9--1' }" input: path vcf diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index d87b3e39..66919879 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -13,6 +13,9 @@ process GET_CHROM_SIZES { path '*.sizes' , emit: sizes path "versions.yml", emit: versions + when: + task.ext.when == null || task.ext.when + script: """ cut -f 1,2 $fai > ${fai}.sizes diff --git a/modules/local/manta/germline/main.nf b/modules/local/manta/germline/main.nf index 87512e08..981bccbf 100644 --- a/modules/local/manta/germline/main.nf +++ b/modules/local/manta/germline/main.nf @@ -24,6 +24,9 @@ process MANTA_GERMLINE { tuple val(meta), path("*diploid_sv.vcf.gz.tbi") , emit: diploid_sv_vcf_tbi path "versions.yml" , emit: versions + when: + task.ext.when == null || task.ext.when + script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index d2c6d889..dcbb9a90 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -1,10 +1,10 @@ process SAMPLESHEET_CHECK { tag "$samplesheet" - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'quay.io/biocontainers/python:3.8.3' }" + 'https://depot.galaxyproject.org/singularity/python:3.9--1' : + 'quay.io/biocontainers/python:3.9--1' }" input: path samplesheet @@ -13,15 +13,17 @@ process SAMPLESHEET_CHECK { path '*.csv' , emit: csv path "versions.yml", emit: versions - script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ + when: + task.ext.when == null || task.ext.when + + script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ """ check_samplesheet.py \\ $samplesheet \\ samplesheet.valid.csv - cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version | sed 's/Python //g') END_VERSIONS """ -} +} \ No newline at end of file From effe4e897aff20e8d22926f7e45603b3bb9d53f0 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Feb 2022 09:32:23 +0100 Subject: [PATCH 0244/1921] fixed qualimap --- subworkflows/nf-core/qc_bam.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 8788c87e..720c14d5 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -44,8 +44,7 @@ workflow QC_BAM { // QUALIMAP BAMQC gff = [] - use_gff = false - QUALIMAP_BAMQC ( bam, gff, use_gff ) + QUALIMAP_BAMQC ( bam, gff ) ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions) // TIDDIT COVERAGE From 33fb8136a7b64f6cc144380122acaa4d4d0e90e1 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Feb 2022 10:17:30 +0100 Subject: [PATCH 0245/1921] fixed svdb_merge --- modules/nf-core/modules/svdb/merge/main.nf | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 1f479ea4..4baa1d88 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -22,17 +22,22 @@ process SVDB_MERGE { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def input = "" - for (int index = 0; index < vcfs.size(); index++) { - input += " ${vcfs[index]}:${priority[index]}" + if(priority) { + prio = "--priority ${priority.join(',')}" + for (int index = 0; index < vcfs.size(); index++) { + input += " ${vcfs[index]}:${priority[index]}" + } + } else { + prio = "" + input = "${vcfs.join(" ")}" } """ svdb \\ --merge \\ $args \\ - --priority ${priority.join(',')} \\ + $prio \\ --vcf $input \\ > ${prefix}_sv_merge.vcf - cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) @@ -43,10 +48,9 @@ process SVDB_MERGE { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_sv_merge.vcf - cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) END_VERSIONS """ -} +} \ No newline at end of file From 7c1a38b1728963fe19ef666caaab70b0a885fd86 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Feb 2022 10:46:09 +0100 Subject: [PATCH 0246/1921] nf-core/modules updated --- modules.json | 2 +- .../modules/qualimap/bamqccram/main.nf | 60 ------------------- .../modules/qualimap/bamqccram/meta.yml | 51 ---------------- modules/nf-core/modules/untar/meta.yml | 42 ++++++------- 4 files changed, 22 insertions(+), 133 deletions(-) delete mode 100644 modules/nf-core/modules/qualimap/bamqccram/main.nf delete mode 100644 modules/nf-core/modules/qualimap/bamqccram/meta.yml diff --git a/modules.json b/modules.json index e45ee698..93b454fb 100644 --- a/modules.json +++ b/modules.json @@ -91,7 +91,7 @@ "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "untar": { - "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "vcfanno": { "git_sha": "2597c31d6bba4a354fc58b535c76bd14aed1c585" diff --git a/modules/nf-core/modules/qualimap/bamqccram/main.nf b/modules/nf-core/modules/qualimap/bamqccram/main.nf deleted file mode 100644 index b9a5538d..00000000 --- a/modules/nf-core/modules/qualimap/bamqccram/main.nf +++ /dev/null @@ -1,60 +0,0 @@ -process QUALIMAP_BAMQCCRAM { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::qualimap=2.2.2d bioconda::samtools=1.12" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-d3934ca6bb4e61334891ffa2e9a4c87a530e3188:4bf11d12f2c3eccf1eb585097c0b6fd31c18c418-0' : - 'quay.io/biocontainers/mulled-v2-d3934ca6bb4e61334891ffa2e9a4c87a530e3188:4bf11d12f2c3eccf1eb585097c0b6fd31c18c418-0' }" - - input: - tuple val(meta), path(cram), path(crai) - path gff - path fasta - path fasta_fai - - output: - tuple val(meta), path("${prefix}"), emit: results - 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 collect_pairs = meta.single_end ? '' : '--collect-overlap-pairs' - def memory = task.memory.toGiga() + "G" - def regions = gff ? "--gff $gff" : '' - - def strandedness = 'non-strand-specific' - if (meta.strandedness == 'forward') { - strandedness = 'strand-specific-forward' - } else if (meta.strandedness == 'reverse') { - strandedness = 'strand-specific-reverse' - } - """ - unset DISPLAY - mkdir tmp - export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp - - samtools view -hb -T ${fasta} ${cram} | - qualimap \\ - --java-mem-size=$memory \\ - bamqc \\ - $args \\ - -bam /dev/stdin \\ - $regions \\ - -p $strandedness \\ - $collect_pairs \\ - -outdir $prefix \\ - -nt $task.cpus - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/modules/qualimap/bamqccram/meta.yml b/modules/nf-core/modules/qualimap/bamqccram/meta.yml deleted file mode 100644 index d72f203d..00000000 --- a/modules/nf-core/modules/qualimap/bamqccram/meta.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: qualimap_bamqccram -description: Evaluate alignment data -keywords: - - quality control - - qc - - bam -tools: - - qualimap: - description: | - Qualimap 2 is a platform-independent application written in - Java and R that provides both a Graphical User Interface and - a command-line interface to facilitate the quality control of - alignment sequencing data and its derivatives like feature counts. - homepage: http://qualimap.bioinfo.cipf.es/ - documentation: http://qualimap.conesalab.org/doc_html/index.html - doi: 10.1093/bioinformatics/bts503 - licence: ["GPL-2.0-only"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bacramm: - type: file - description: BAM file - pattern: "*.{bam}" - - gff: - type: file - description: Feature file with regions of interest - pattern: "*.{gff,gtf,bed}" - - fasta: - type: file - description: Reference file of cram file - pattern: "*.{fasta,fa,fna}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - results: - type: dir - description: Qualimap results dir - pattern: "*/*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/untar/meta.yml b/modules/nf-core/modules/untar/meta.yml index 51f94995..e877a97c 100644 --- a/modules/nf-core/modules/untar/meta.yml +++ b/modules/nf-core/modules/untar/meta.yml @@ -1,28 +1,28 @@ name: untar description: Extract files. keywords: - - untar - - uncompress + - untar + - uncompress tools: - - untar: - description: | - Extract tar.gz files. - documentation: https://www.gnu.org/software/tar/manual/ - licence: ['GPL-3.0-or-later'] + - untar: + description: | + Extract tar.gz files. + documentation: https://www.gnu.org/software/tar/manual/ + licence: ["GPL-3.0-or-later"] input: - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" output: - - untar: - type: file - description: - pattern: "*.*" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - untar: + type: file + description: + pattern: "*.*" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - - "@joseespinosa" - - "@drpatelh" + - "@joseespinosa" + - "@drpatelh" From 8baf3264846a1822167ca95beeba24d7054dbae4 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Feb 2022 11:18:43 +0100 Subject: [PATCH 0247/1921] added when directive Signed-off-by: Mei Wu <25568561+projectoriented@users.noreply.github.com> --- modules/local/check_input_vcf.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index ac1eb6c6..725197b3 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -12,6 +12,9 @@ process CHECK_INPUT_VCF { output: path '*.txt' , emit: txt + when: + task.ext.when == null || task.ext.when + script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ """ export INPUT_FILE=${vcf} From 6e6982917d3c9b11d1b880022684aac89ec47886 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Feb 2022 11:32:52 +0100 Subject: [PATCH 0248/1921] now the modules dont individually publish a versions file --- conf/modules.config | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7cef3e8d..b722747a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -148,7 +148,7 @@ process { publishDir = [ path: { "${params.outdir}/glnexus" }, mode: 'copy', - + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } // CALL_REPEAT_EXPANSIONS @@ -156,7 +156,7 @@ process { publishDir = [ path: { "${params.outdir}/expansionhunter" }, mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } // CALL_STRUCTURAL_VARIANTS @@ -164,6 +164,7 @@ process { publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV" { @@ -179,6 +180,7 @@ process { publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: SVDB_MERGE { @@ -227,7 +229,8 @@ process { } withName: SAMTOOLS_MERGE { publishDir = [ - path: { "${params.outdir}/samtools" } + path: { "${params.outdir}/samtools" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: '.*MARKDUPLICATES' { @@ -250,7 +253,8 @@ process { withName: '.*COLLECTMULTIPLEMETRICS' { publishDir = [ path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, - mode: 'copy' + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: QUALIMAP_BAMQC { @@ -263,28 +267,32 @@ process { ext.args = '-z 500 -w -u' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, - mode: 'copy' + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: ".*QC_BAM:UCSC_WIGTOBIGWIG" { ext.args = '-clip' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, - mode: 'copy' + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: MOSDEPTH { ext.args = '--d4' publishDir = [ path: { "${params.outdir}/mosdepth" }, - mode: 'copy' + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } // nf-core modules withName: FASTQC { ext.args = '--quiet' publishDir = [ - path: { "${params.outdir}/reports/fastqc/${meta.id}" } + path: { "${params.outdir}/reports/fastqc/${meta.id}" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } From 9624da409e9c845bd59b5d7c06a1a57073803383 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Feb 2022 09:43:53 +0100 Subject: [PATCH 0249/1921] install module --- modules.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules.json b/modules.json index 93b454fb..9238eacd 100644 --- a/modules.json +++ b/modules.json @@ -75,6 +75,9 @@ "svdb/merge": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, + "svdb/query": { + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + }, "tabix/bgziptabix": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, From 2eafab7c7559ddab741c6ba111502bbb952b1c0c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Feb 2022 12:53:00 +0100 Subject: [PATCH 0250/1921] add module files --- modules/nf-core/modules/svdb/query/main.nf | 37 ++++++++++++++++++ modules/nf-core/modules/svdb/query/meta.yml | 43 +++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 modules/nf-core/modules/svdb/query/main.nf create mode 100644 modules/nf-core/modules/svdb/query/meta.yml diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf new file mode 100644 index 00000000..292fe4ce --- /dev/null +++ b/modules/nf-core/modules/svdb/query/main.nf @@ -0,0 +1,37 @@ +process SVDB_QUERY { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::svdb=2.5.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/svdb:2.5.0--py39hcbe4a3b_0': + 'quay.io/biocontainers/svdb:2.5.0--py39hcbe4a3b_0' }" + + input: + tuple val(meta), path(vcf) + path (vcf_db) + + output: + tuple val(meta), path("*_ann_svdbq.vcf"), 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}" + """ + svdb \\ + --query \\ + $args \\ + --db $vcf_db \\ + --query_vcf $vcf \\ + >${prefix}_ann_svdbq.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/svdb/query/meta.yml b/modules/nf-core/modules/svdb/query/meta.yml new file mode 100644 index 00000000..e2a9e456 --- /dev/null +++ b/modules/nf-core/modules/svdb/query/meta.yml @@ -0,0 +1,43 @@ +name: svdb_query +description: Query a structural variant database, using a vcf file as query +keywords: + - structural variants +tools: + - svdb: + description: structural variant database software + homepage: https://github.com/J35P312/SVDB + documentation: https://github.com/J35P312/SVDB/blob/master/README.md + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: query vcf file + pattern: "*.{vcf,vcf.gz}" + - vcf_db: + type: file + description: database vcf file + pattern: "*.{vcf,vcf.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: Annotated output VCF file + pattern: "*_ann_svdbq.vcf" + +authors: + - "@ramprasadn" From 4d147178c7a4e9d7bbf87f6c46ef38c162c2fc9c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Thu, 24 Feb 2022 09:36:13 +0100 Subject: [PATCH 0251/1921] applying suggestions for: modules/local/samplesheet_check.nf Co-authored-by: Anders Jemt --- modules/local/samplesheet_check.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index dcbb9a90..5984df97 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -16,7 +16,7 @@ process SAMPLESHEET_CHECK { when: task.ext.when == null || task.ext.when - script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ + script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ """ check_samplesheet.py \\ $samplesheet \\ From c66a34360bea403a90afddeda93beec9dabe1bd3 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 24 Feb 2022 17:51:00 +0100 Subject: [PATCH 0252/1921] linting --- .github/workflows/linting.yml | 16 +++++----------- lib/NfcoreSchema.groovy | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 3b448773..b7c3159c 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -12,9 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: '10' + - uses: actions/setup-node@v2 - name: Install markdownlint run: npm install -g markdownlint-cli - name: Run Markdownlint @@ -51,9 +49,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: '10' + - uses: actions/setup-node@v2 - name: Install editorconfig-checker run: npm install -g editorconfig-checker @@ -65,13 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 - with: - node-version: '10' + - uses: actions/setup-node@v2 - name: Install yaml-lint run: npm install -g yaml-lint - name: Run yaml-lint - run: yamllint $(find ${GITHUB_WORKSPACE} -type f -name "*.yml" -o -name "*.yaml") + run: yamllint $(find ${GITHUB_WORKSPACE} -type f -name "*.yml" -o -name "*.yaml") -c ${GITHUB_WORKSPACE}/.yamllint.yml # If the above check failed, post a comment on the PR explaining the failure - name: Post PR comment @@ -87,7 +81,7 @@ jobs: * Install `yaml-lint` * [Install `npm`](https://www.npmjs.com/get-npm) then [install `yaml-lint`](https://www.npmjs.com/package/yaml-lint) (`npm install -g yaml-lint`) * Fix the markdown errors - * Run the test locally: `yamllint $(find . -type f -name "*.yml" -o -name "*.yaml")` + * Run the test locally: `yamllint $(find . -type f -name "*.yml" -o -name "*.yaml") -c ./.yamllint.yml` * Fix any reported errors in your YAML files Once you push these changes the test should pass, and you can hide this comment :+1: diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 40ab65f2..b3d092f8 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -27,7 +27,7 @@ class NfcoreSchema { /* 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') @@ -135,7 +135,7 @@ class NfcoreSchema { } } - //=====================================================================// + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// // 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)) From eb77fc046acd4189643d46b92754a601a3448874 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 24 Feb 2022 18:01:08 +0100 Subject: [PATCH 0253/1921] use the sort command in the bwa mem module --- conf/modules.config | 7 --- modules.json | 3 -- modules/nf-core/modules/samtools/sort/main.nf | 31 ------------- .../nf-core/modules/samtools/sort/meta.yml | 44 ------------------- subworkflows/nf-core/align_bwamem2.nf | 10 ++--- 5 files changed, 4 insertions(+), 91 deletions(-) delete mode 100644 modules/nf-core/modules/samtools/sort/main.nf delete mode 100644 modules/nf-core/modules/samtools/sort/meta.yml diff --git a/conf/modules.config b/conf/modules.config index b722747a..c1f06027 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -212,13 +212,6 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: '.*:ALIGN_BWAMEM2:SAMTOOLS_SORT' { - ext.prefix = { "${meta.id}_sorted" } - publishDir = [ - path: { "${params.outdir}/samtools" }, - enabled: false - ] - } withName: SAMTOOLS_STATS { ext.args = '-s --remove-overlaps' publishDir = [ diff --git a/modules.json b/modules.json index 93b454fb..e48f0f5b 100644 --- a/modules.json +++ b/modules.json @@ -66,9 +66,6 @@ "samtools/merge": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, - "samtools/sort": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" - }, "samtools/stats": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf deleted file mode 100644 index 0f2237cc..00000000 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ /dev/null @@ -1,31 +0,0 @@ -process SAMTOOLS_SORT { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::samtools=1.14" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : - 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" - - input: - tuple val(meta), path(bam) - - output: - tuple val(meta), path("*.bam"), emit: bam - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - 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 - 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/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml deleted file mode 100644 index a820c55a..00000000 --- a/modules/nf-core/modules/samtools/sort/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: samtools_sort -description: Sort SAM/BAM/CRAM file -keywords: - - sort - - 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: hhttp://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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@drpatelh" - - "@ewels" diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index b4c98bea..98cfec62 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -5,7 +5,6 @@ include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' @@ -20,19 +19,18 @@ workflow ALIGN_BWAMEM2 { ch_versions = Channel.empty() // Map, sort, and index - BWAMEM2_MEM ( reads_input, index, false ) + BWAMEM2_MEM ( reads_input, index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions) - SAMTOOLS_SORT ( BWAMEM2_MEM.out.bam ) - SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) + SAMTOOLS_INDEX ( BWAMEM2_MEM.out.bam ) // Join the mapped bam + bai paths by their keys for stats // Get stats for each demultiplexed read pair. - bam_sorted_indexed = SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai) + bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed, [] ) // Merge multiple lane samples and index - SAMTOOLS_SORT.out.bam + BWAMEM2_MEM.out.bam .map{ meta, bam -> new_meta = meta.clone() // clone to avoid overriding the global meta new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename From 626233274c5f72eb2ba0568a32a39be2514d26dc Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 24 Feb 2022 18:11:09 +0100 Subject: [PATCH 0254/1921] linting newline --- modules/local/samplesheet_check.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 5984df97..e8d19a6f 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -26,4 +26,4 @@ process SAMPLESHEET_CHECK { python: \$(python --version | sed 's/Python //g') END_VERSIONS """ -} \ No newline at end of file +} From aa1b14ec39fec1d5b133aaf6882e197d5a1ad31d Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 11:11:47 +0100 Subject: [PATCH 0255/1921] linting --- docs/usage.md | 2 +- modules/local/samplesheet_check.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 1f94372c..eeffb471 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -169,7 +169,7 @@ Work dir: Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` ``` -To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so based on the search results the file we want is `modules/nf-core/software/star/align/main.nf`. If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. Providing you haven't set any other standard nf-core parameters to __cap__ the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `STAR_ALIGN` process failure by creating a custom config file that sets at least 72GB of memory, in this case increased to 100GB. The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. +To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so based on the search results the file we want is `modules/nf-core/software/star/align/main.nf`. If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. Providing you haven't set any other standard nf-core parameters to **cap** the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `STAR_ALIGN` process failure by creating a custom config file that sets at least 72GB of memory, in this case increased to 100GB. The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. ```nextflow process { diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 5984df97..e8d19a6f 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -26,4 +26,4 @@ process SAMPLESHEET_CHECK { python: \$(python --version | sed 's/Python //g') END_VERSIONS """ -} \ No newline at end of file +} From e59acafeb524c05a73e82f7e7bc4fda794abcf32 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 11:31:18 +0100 Subject: [PATCH 0256/1921] modyyfing lint files in accordance with https://github.com/nf-core/rnaseq/pull/767 --- .nf-core.yml | 2 ++ .yamllint | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 .yamllint diff --git a/.nf-core.yml b/.nf-core.yml index 99e8d5c3..f34e81a4 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,3 +4,5 @@ lint: - .github/ISSUE_TEMPLATE/bug_report.yml - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml + - lib/NfcoreTemplate.groovy + - .github/workflows/linting.yml diff --git a/.yamllint b/.yamllint new file mode 100644 index 00000000..6889fa34 --- /dev/null +++ b/.yamllint @@ -0,0 +1,5 @@ +extends: default + +rules: + document-start: disable + line-length: disable From ad26bf84d2a46c7ecfb91de4ed4782c3ad11db78 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 11:35:10 +0100 Subject: [PATCH 0257/1921] fixing missing file ending --- .yamllint => .yamllint.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .yamllint => .yamllint.yml (100%) diff --git a/.yamllint b/.yamllint.yml similarity index 100% rename from .yamllint rename to .yamllint.yml From 74409c6833ee9ac1e37927bf9a04b532116edc91 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 11:38:58 +0100 Subject: [PATCH 0258/1921] adding lib/NfcoreSchema.groovy to exclude list --- .nf-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index f34e81a4..056a5ad9 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,5 +4,5 @@ lint: - .github/ISSUE_TEMPLATE/bug_report.yml - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml - - lib/NfcoreTemplate.groovy + - lib/NfcoreSchema.groovy - .github/workflows/linting.yml From c93d3abf9d7eb8f23bf30a99b8ed41c9ea3a0be0 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 11:40:28 +0100 Subject: [PATCH 0259/1921] updating svdb merge module --- modules.json | 2 +- modules/nf-core/modules/svdb/merge/main.nf | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules.json b/modules.json index 93b454fb..e1efb023 100644 --- a/modules.json +++ b/modules.json @@ -73,7 +73,7 @@ "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "svdb/merge": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "ee915a43e405324e62ee5d4c14a6a6ec6c610058" }, "tabix/bgziptabix": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 4baa1d88..505e2c0b 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -21,15 +21,13 @@ process SVDB_MERGE { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def input = "" + def input = "${vcfs.join(" ")}" + def prio = "" if(priority) { prio = "--priority ${priority.join(',')}" for (int index = 0; index < vcfs.size(); index++) { input += " ${vcfs[index]}:${priority[index]}" } - } else { - prio = "" - input = "${vcfs.join(" ")}" } """ svdb \\ @@ -38,6 +36,7 @@ process SVDB_MERGE { $prio \\ --vcf $input \\ > ${prefix}_sv_merge.vcf + cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) @@ -48,9 +47,10 @@ process SVDB_MERGE { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_sv_merge.vcf + cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) END_VERSIONS """ -} \ No newline at end of file +} From cc5b4e48f095adc39c7f24eb32cf50d7e61e7ad4 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 11:57:45 +0100 Subject: [PATCH 0260/1921] more yaml linting --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .github/workflows/awsfulltest.yml | 4 ++-- .github/workflows/awstest.yml | 2 +- .github/workflows/branch.yml | 1 - .github/workflows/linting.yml | 1 - .github/workflows/linting_comment.yml | 1 - .nf-core.yml | 2 ++ 7 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2ca71ec3..e455d5a5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,4 +1,3 @@ - name: Bug report description: Report something that is broken or incorrect labels: bug diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index ae1fbaaf..3bbed9a5 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -18,7 +18,7 @@ jobs: # 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 - + with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} @@ -31,4 +31,4 @@ jobs: "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-${{ github.sha }}" } profiles: test_full,aws_tower - pre_run_script: 'export NXF_VER=21.10.3' \ No newline at end of file + pre_run_script: 'export NXF_VER=21.10.3' diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index ced685df..4e36f111 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Launch workflow via tower uses: nf-core/tower-action@v2 - + with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 13cdbacd..b4b2e2a3 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -43,4 +43,3 @@ jobs: Thanks again for your contribution! repo-token: ${{ secrets.GITHUB_TOKEN }} allow-repeats: false - diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index b7c3159c..0c9c5554 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -136,4 +136,3 @@ jobs: lint_log.txt lint_results.md PR_number.txt - diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 44d72994..7e41ac67 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -1,4 +1,3 @@ - name: nf-core linting comment # This workflow is triggered after the linting action is complete # It posts an automated comment to the PR, even if the PR is coming from a fork diff --git a/.nf-core.yml b/.nf-core.yml index 056a5ad9..d59399c3 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -6,3 +6,5 @@ lint: - assets/multiqc_config.yaml - lib/NfcoreSchema.groovy - .github/workflows/linting.yml + - .github/workflows/linting_comment.yml + - .github/workflows/branch.yml From 7ce8c2854daca4fd297529e60dfa4a8e88d05533 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 25 Feb 2022 12:01:01 +0100 Subject: [PATCH 0261/1921] removed blank line from yml --- .github/workflows/linting_comment.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 7e41ac67..04758f61 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -26,4 +26,3 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} path: linting-logs/lint_results.md - From cd02eeb6071b1481a94a8a384deaef8cb9706242 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 28 Feb 2022 10:41:17 +0100 Subject: [PATCH 0262/1921] Adds basic framework of Gens preprocessing --- conf/test.config | 2 +- modules.json | 3 + modules/local/gatk4/collectreadcounts/main.nf | 41 ++++++++++ .../local/gatk4/collectreadcounts/meta.yml | 45 +++++++++++ modules/local/gatk4/denoisereadcounts/main.nf | 41 ++++++++++ .../local/gatk4/denoisereadcounts/meta.yml | 44 +++++++++++ modules/local/gens/main.nf | 40 ++++++++++ modules/local/gens/meta.yml | 45 +++++++++++ .../modules/gatk4/haplotypecaller/main.nf | 54 +++++++++++++ .../modules/gatk4/haplotypecaller/meta.yml | 75 +++++++++++++++++++ subworkflows/local/gens.nf | 33 ++++++++ workflows/raredisease.nf | 13 ++++ 12 files changed, 435 insertions(+), 1 deletion(-) create mode 100644 modules/local/gatk4/collectreadcounts/main.nf create mode 100644 modules/local/gatk4/collectreadcounts/meta.yml create mode 100644 modules/local/gatk4/denoisereadcounts/main.nf create mode 100644 modules/local/gatk4/denoisereadcounts/meta.yml create mode 100644 modules/local/gens/main.nf create mode 100644 modules/local/gens/meta.yml create mode 100644 modules/nf-core/modules/gatk4/haplotypecaller/main.nf create mode 100644 modules/nf-core/modules/gatk4/haplotypecaller/meta.yml create mode 100644 subworkflows/local/gens.nf diff --git a/conf/test.config b/conf/test.config index fa041a02..aea83120 100644 --- a/conf/test.config +++ b/conf/test.config @@ -18,7 +18,7 @@ params { // Limit resources so that this can run on GitHub Actions max_cpus = 2 - max_memory = '6.GB' + //max_memory = '6.GB' max_time = '6.h' // Input data diff --git a/modules.json b/modules.json index bcc0692f..4658398b 100644 --- a/modules.json +++ b/modules.json @@ -33,6 +33,9 @@ "gatk4/createsequencedictionary": { "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" }, + "gatk4/haplotypecaller": { + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + }, "gatk4/intervallisttools": { "git_sha": "598d7abdb2a8df1aa3471c48d9186a9e3465983f" }, diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf new file mode 100644 index 00000000..ca827fc7 --- /dev/null +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -0,0 +1,41 @@ +process GATK4_COLLECTREADCOUNTS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + path fasta + path interval_list + + output: + tuple val(meta), path('*.hdf5'), emit: read_counts + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 12 + if (!task.memory) { + log.info '[GATK CollectReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ + -I $bam \\ + -R $fasta \\ + -L $interval_list \\ + -O ${prefix}.hdf5 \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/gatk4/collectreadcounts/meta.yml b/modules/local/gatk4/collectreadcounts/meta.yml new file mode 100644 index 00000000..b74afb5c --- /dev/null +++ b/modules/local/gatk4/collectreadcounts/meta.yml @@ -0,0 +1,45 @@ +name: gatk4_collectreadcounts +description: +keywords: + - bam + - interval list + - hdf5 +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'] + - bam: + type: file + description: Input bam file + pattern: "*.bam" + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - interval_list: + type: file + description: Binning intervals file + pattern: "*.interval_list" +output: + - read_counts: + type: file + description: gatk read count file + pattern: "*.hdf5" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@raysloks" diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf new file mode 100644 index 00000000..c603f502 --- /dev/null +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -0,0 +1,41 @@ +process GATK4_DENOISEREADCOUNTS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" + + input: + tuple val(meta), path(read_counts) + path panel_of_normals + + output: + tuple val(meta), path('*.standardizedCR.tsv'), emit: standardized_read_counts + tuple val(meta), path('*.denoisedCR.tsv') , emit: denoised_read_counts + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 12 + if (!task.memory) { + log.info '[GATK DenoiseReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" DenoiseReadCounts \\ + -I $read_counts \\ + --count-panel-of-normals $panel_of_normals \\ + --standardized-copy-ratios ${prefix}.standardizedCR.tsv" \\ + --denoised-copy-ratios ${prefix}.denoisedCR.tsv" \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/gatk4/denoisereadcounts/meta.yml b/modules/local/gatk4/denoisereadcounts/meta.yml new file mode 100644 index 00000000..5edf4cde --- /dev/null +++ b/modules/local/gatk4/denoisereadcounts/meta.yml @@ -0,0 +1,44 @@ +name: gatk4_denoisereadcounts +description: +keywords: + - hdf5 + - interval list +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'] + - read_counts: + type: file + description: Input read counts file + pattern: "*.hdf5" + - read_counts_panel: + type: file + description: Panel of normals + pattern: "*.hdf5" + - interval_list: + type: file + description: Binning intervals file + pattern: "*.interval_list" +output: + - read_counts: + type: file + description: gatk read count file + pattern: "*.hdf5" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@raysloks" diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf new file mode 100644 index 00000000..97e3d7b4 --- /dev/null +++ b/modules/local/gens/main.nf @@ -0,0 +1,40 @@ +process GENS { + tag "$meta.id" + label 'process_medium' + + //conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'raysloks/gens_preproc:1.0.0' : + 'raysloks/gens_preproc:1.0.0' }" + + input: + tuple val(meta), path(read_counts) + path vcf + path gnomad_positions + + output: + tuple val(meta), path('*.bed.gz'), emit: cov + path '*.bed.gz' , emit: baf + path "versions.yml" , emit: versions + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 6 + if (!task.memory) { + log.info '[Gens] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ + $vcf \\ + $read_counts \\ + $prefix \\ + $gnomad_positions + + 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/gens/meta.yml b/modules/local/gens/meta.yml new file mode 100644 index 00000000..9907d667 --- /dev/null +++ b/modules/local/gens/meta.yml @@ -0,0 +1,45 @@ +name: gens +description: +keywords: + - bed + - vcf +tools: + - gens: + description: | + Gens is a web-based interactive tool to visualize genomic copy number profiles from WGS data (although it could theoretically be used for any type of data). + It plots the normalized read depth and alternative allele frequency. + homepage: https://github.com/Clinical-Genomics-Lund/gens + documentation: https://github.com/Clinical-Genomics-Lund/gens +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - read_counts: + type: file + description: Input standardized read counts file + pattern: "*.tsv" + - vcf: + type: file + description: Input vcf file + pattern: "*.vcf" + - gnomad_positions: + type: file + description: SNV filter file + pattern: "*.txt" +output: + - cov: + type: file + description: Gens preprocessed coverage file + pattern: "*.bed.gz" + - baf: + type: file + description: Gens preprocessed base allele frequency file + pattern: "*.bed.gz" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@raysloks" diff --git a/modules/nf-core/modules/gatk4/haplotypecaller/main.nf b/modules/nf-core/modules/gatk4/haplotypecaller/main.nf new file mode 100644 index 00000000..33871fcf --- /dev/null +++ b/modules/nf-core/modules/gatk4/haplotypecaller/main.nf @@ -0,0 +1,54 @@ +process GATK4_HAPLOTYPECALLER { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + + input: + tuple val(meta), path(input), path(input_index), path(intervals) + path fasta + path fai + path dict + path dbsnp + path dbsnp_tbi + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def interval_option = intervals ? "-L ${intervals}" : "" + def dbsnp_option = dbsnp ? "-D ${dbsnp}" : "" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK HaplotypeCaller] 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" \\ + HaplotypeCaller \\ + -R $fasta \\ + -I $input \\ + ${dbsnp_option} \\ + ${interval_option} \\ + -O ${prefix}.vcf.gz \\ + $args \\ + --tmp-dir . + + 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/modules/gatk4/haplotypecaller/meta.yml b/modules/nf-core/modules/gatk4/haplotypecaller/meta.yml new file mode 100644 index 00000000..81851a96 --- /dev/null +++ b/modules/nf-core/modules/gatk4/haplotypecaller/meta.yml @@ -0,0 +1,75 @@ +name: gatk4_haplotypecaller +description: Call germline SNPs and indels via local re-assembly of haplotypes +keywords: + - gatk4 + - haplotypecaller + - haplotype +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 ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + - dbsnp: + type: file + description: VCF file containing known sites (optional) + - dbsnp_tbi: + type: file + description: VCF index of dbsnp (optional) + +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 VCF file + pattern: "*.vcf.gz" + - tbi: + type: file + description: Index of VCF file + pattern: "*.vcf.gz.tbi" + +authors: + - "@suzannejin" + - "@FriederikeHanssen" diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf new file mode 100644 index 00000000..e602de9b --- /dev/null +++ b/subworkflows/local/gens.nf @@ -0,0 +1,33 @@ +// +// A preprocessing workflow for Gens +// + +include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/local/gatk4/collectreadcounts/main' +include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/local/gatk4/denoisereadcounts/main' +include { GATK4_HAPLOTYPECALLER as HAPLOTYPECALLER } from '../../modules/nf-core/modules/gatk4/haplotypecaller/main' + +workflow PREPARE_GENS { + take: + bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] + fasta // path(fasta) + fai // path(fai) + pon // path(pon) + gnomad_pos // path(gnomad_pos) + case_info // channel: [ val(case_info) ] + seq_dict // path: seq_dict + + main: + HAPLOTYPECALLER ( bam.join(bai, by: [0]), fasta, fai, seq_dict ) + + COLLECTREADCOUNTS ( bam, fasta ) + + DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, fasta, pon ) + + GENS ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) + + emit: + gens_cov_bed_gz = GENS.out.cov + gens_baf_bed_gz = GENS.out.baf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8e0b524e..9e86682f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -41,6 +41,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi include { INPUT_CHECK } from '../subworkflows/local/input_check' include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' include { CHECK_BED } from '../subworkflows/local/prepare_bed' +include { GENS } from '../subworkflows/local/gens' /* ======================================================================================== @@ -151,6 +152,18 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + // STEP 1.7: GENS + GENS ( + ch_marked_bam, + ch_marked_bai, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + params.gens_pon, + params.gens_gnomad_pos, + INPUT_CHECK.out.ch_case_info, + PREPARE_GENOME.out.sequence_dict + ) + // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV_DEEPVARIANT ( From 708b67fc4c6da80de179114ecd05d37caf88873d Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 28 Feb 2022 11:17:55 +0100 Subject: [PATCH 0263/1921] Changes Gens subworkflow name --- subworkflows/local/gens.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index e602de9b..dba56552 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -6,7 +6,7 @@ include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/loc include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/local/gatk4/denoisereadcounts/main' include { GATK4_HAPLOTYPECALLER as HAPLOTYPECALLER } from '../../modules/nf-core/modules/gatk4/haplotypecaller/main' -workflow PREPARE_GENS { +workflow GENS { take: bam // channel: [ val(meta), path(bam) ] bai // channel: [ val(meta), path(bai) ] From f9510e19e92052bd00c59c3d0905e9c4727f74dc Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 28 Feb 2022 13:33:36 +0100 Subject: [PATCH 0264/1921] trying a different selector for the entire subwrkflw --- conf/modules.config | 3 +++ workflows/raredisease.nf | 16 +++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index c1f06027..ad8dff1c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -192,6 +192,9 @@ process { } // NF-CORE Subworkflows // ALIGN_BWAMEM2 + withName: ".*ALIGN_BWAMEM2:.*"{ + ext.when = params.aligner.contains('bwamem2') + } withName: BWAMEM2_MEM { ext.args = '-M -K 100000000' publishDir = [ diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 25f8a640..63684c0d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -122,17 +122,15 @@ workflow RAREDISEASE { } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. - if (params.aligner == 'bwamem2') { - ALIGN_BWAMEM2 ( - INPUT_CHECK.out.reads, - PREPARE_GENOME.out.bwamem2_index - ) + ALIGN_BWAMEM2 ( + INPUT_CHECK.out.reads, + PREPARE_GENOME.out.bwamem2_index + ) - ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam - ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai + ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam + ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai - ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) - } + ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) // STEP 1.5: BAM QUALITY CHECK QC_BAM ( From ef37071ef8ee48dfe6b30a9dec86ea9345679fe9 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 28 Feb 2022 16:02:24 +0100 Subject: [PATCH 0265/1921] Adds missing dummy input channels --- subworkflows/local/gens.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index dba56552..406b82f8 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -18,7 +18,7 @@ workflow GENS { seq_dict // path: seq_dict main: - HAPLOTYPECALLER ( bam.join(bai, by: [0]), fasta, fai, seq_dict ) + HAPLOTYPECALLER ( bam.join(bai, by: [0]), fasta, fai, seq_dict, [], [] ) COLLECTREADCOUNTS ( bam, fasta ) From 3d76846bfa55a1140bf7a6362443ee221c1483df Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 28 Feb 2022 17:21:01 +0100 Subject: [PATCH 0266/1921] aggregate mem2 subwrkflw in config --- conf/modules.config | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ad8dff1c..215da9b5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -194,47 +194,33 @@ process { // ALIGN_BWAMEM2 withName: ".*ALIGN_BWAMEM2:.*"{ ext.when = params.aligner.contains('bwamem2') - } - withName: BWAMEM2_MEM { - ext.args = '-M -K 100000000' publishDir = [ path: { "${params.outdir}/bwamem2" }, - enabled: false - ] - } - withName: SAMTOOLS_INDEX { - publishDir = [ - path: { "${params.outdir}/samtools" }, - enabled: false - ] - } - withName: SAMTOOLS_INDEX_MD { - publishDir = [ - path: { "${params.outdir}/markduplicates" }, mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SAMTOOLS_STATS { - ext.args = '-s --remove-overlaps' + withName: BWAMEM2_MEM { + ext.args = '-M -K 100000000' publishDir = [ - path: { "${params.outdir}/samtools" }, - mode: 'copy', + path: { "${params.outdir}/bwamem2" }, + enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SAMTOOLS_MERGE { + withName: SAMTOOLS_STATS { + ext.args = '-s --remove-overlaps' publishDir = [ - path: { "${params.outdir}/samtools" }, + path: { "${params.outdir}/bwamem2" }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: '.*MARKDUPLICATES' { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ - path: { "${params.outdir}/markduplicates" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + path: { "${params.outdir}/bwamem2" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } // ANNOTATE_VCFANNO From 794dcb47aae728bd9a5340e45e8686237693b3fb Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 10:29:56 +0100 Subject: [PATCH 0267/1921] Adds missing interval list parameter --- subworkflows/local/gens.nf | 19 ++++++++++--------- workflows/raredisease.nf | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 406b82f8..55af53a4 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -8,19 +8,20 @@ include { GATK4_HAPLOTYPECALLER as HAPLOTYPECALLER } from '../../modules/nf-core workflow GENS { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] - fasta // path(fasta) - fai // path(fai) - pon // path(pon) - gnomad_pos // path(gnomad_pos) - case_info // channel: [ val(case_info) ] - seq_dict // path: seq_dict + bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] + fasta // path(fasta) + fai // path(fai) + interval_list // path(interval_list) + pon // path(pon) + gnomad_pos // path(gnomad_pos) + case_info // channel: [ val(case_info) ] + seq_dict // path: seq_dict main: HAPLOTYPECALLER ( bam.join(bai, by: [0]), fasta, fai, seq_dict, [], [] ) - COLLECTREADCOUNTS ( bam, fasta ) + COLLECTREADCOUNTS ( bam, fasta, interval_list ) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, fasta, pon ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9e86682f..a2adac37 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -158,6 +158,7 @@ workflow RAREDISEASE { ch_marked_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, + params.gens_interval_list, params.gens_pon, params.gens_gnomad_pos, INPUT_CHECK.out.ch_case_info, From cd4dd0cc10050a96be5bd41f6c985f8217b24200 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 10:38:05 +0100 Subject: [PATCH 0268/1921] Adds temporary lines to test config --- conf/test.config | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conf/test.config b/conf/test.config index aea83120..fe1f6e91 100644 --- a/conf/test.config +++ b/conf/test.config @@ -32,4 +32,9 @@ params { variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' + + // Gens + gens_interval_list = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_female_pon_100bp.hdf5' + gens_pon = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_targets_preprocessed_100bp.interval_list' + gens_gnomad_pos = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gnomad.genomes.r2.1.1.sites.5percent.pos.txt' } From f28ba087e90c5bcd16aa6e0a36868292cf10989a Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 10:40:22 +0100 Subject: [PATCH 0269/1921] Removes unused parameter --- subworkflows/local/gens.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 55af53a4..c5c9ebcb 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -23,7 +23,7 @@ workflow GENS { COLLECTREADCOUNTS ( bam, fasta, interval_list ) - DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, fasta, pon ) + DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) GENS ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) From c79ff1638f74c27fe8434d59f5be8df7063b35b3 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 10:48:50 +0100 Subject: [PATCH 0270/1921] Fixes Gens module --- modules/local/gens/main.nf | 8 ++++---- subworkflows/local/gens.nf | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 97e3d7b4..95ca498e 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -13,8 +13,8 @@ process GENS { path gnomad_positions output: - tuple val(meta), path('*.bed.gz'), emit: cov - path '*.bed.gz' , emit: baf + tuple val(meta), path('*.cov.bed.gz'), emit: cov + tuple val(meta), path('*.baf.bed.gz'), emit: baf path "versions.yml" , emit: versions script: @@ -26,7 +26,7 @@ process GENS { avail_mem = task.memory.giga } """ - gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ + generate_gens_data.pl \\ $vcf \\ $read_counts \\ $prefix \\ @@ -34,7 +34,7 @@ process GENS { cat <<-END_VERSIONS > versions.yml "${task.process}": - gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + generate_gens_data.pl: \$(echo \$(generate_gens_data.pl --version 2>&1)) END_VERSIONS """ } diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index c5c9ebcb..80a2a0d0 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -5,6 +5,7 @@ include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/local/gatk4/collectreadcounts/main' include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/local/gatk4/denoisereadcounts/main' include { GATK4_HAPLOTYPECALLER as HAPLOTYPECALLER } from '../../modules/nf-core/modules/gatk4/haplotypecaller/main' +include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' workflow GENS { take: @@ -25,7 +26,7 @@ workflow GENS { DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) - GENS ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) + GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) emit: gens_cov_bed_gz = GENS.out.cov From 232a85808d873f96b7ec1201b07c0cd83c5c651a Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 10:50:44 +0100 Subject: [PATCH 0271/1921] Fixes a small problem in Gens subworkflow --- subworkflows/local/gens.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 80a2a0d0..e052184b 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -29,7 +29,7 @@ workflow GENS { GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) emit: - gens_cov_bed_gz = GENS.out.cov - gens_baf_bed_gz = GENS.out.baf + gens_cov_bed_gz = GENS_GENERATE.out.cov + gens_baf_bed_gz = GENS_GENERATE.out.baf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 3acf816e8274780aecca8f16db2b5df9a8b953dc Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 10:54:59 +0100 Subject: [PATCH 0272/1921] Fixes version channel handling --- modules/local/gens/main.nf | 2 +- subworkflows/local/gens.nf | 6 ++++++ workflows/raredisease.nf | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 95ca498e..d2caf303 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -15,7 +15,7 @@ process GENS { output: tuple val(meta), path('*.cov.bed.gz'), emit: cov tuple val(meta), path('*.baf.bed.gz'), emit: baf - path "versions.yml" , emit: versions + path "versions.yml" , emit: versions script: def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index e052184b..521d1151 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -20,13 +20,19 @@ workflow GENS { seq_dict // path: seq_dict main: + ch_versions = Channel.empty() + HAPLOTYPECALLER ( bam.join(bai, by: [0]), fasta, fai, seq_dict, [], [] ) + ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) COLLECTREADCOUNTS ( bam, fasta, interval_list ) + ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) + ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions) GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) + ch_versions = ch_versions.mix(GENS_GENERATE.out.versions) emit: gens_cov_bed_gz = GENS_GENERATE.out.cov diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a2adac37..911a4a3e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -164,6 +164,7 @@ workflow RAREDISEASE { INPUT_CHECK.out.ch_case_info, PREPARE_GENOME.out.sequence_dict ) + ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. From 4f5af295a93ef68bdb283fe9a6208384cc883962 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 11:51:51 +0100 Subject: [PATCH 0273/1921] Attempts to fix handling of bam input channel --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- subworkflows/local/gens.nf | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index ca827fc7..81874948 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -8,7 +8,7 @@ process GATK4_COLLECTREADCOUNTS { 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path fasta path interval_list diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 521d1151..5dc2b7b8 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -20,12 +20,16 @@ workflow GENS { seq_dict // path: seq_dict main: + bam.map { meta, bam, bai -> + return [meta, bam, bai, []] + } + .set { ch_bam } ch_versions = Channel.empty() - HAPLOTYPECALLER ( bam.join(bai, by: [0]), fasta, fai, seq_dict, [], [] ) + HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( bam, fasta, interval_list ) + COLLECTREADCOUNTS ( ch_bam, fasta, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) From f7dde9520bac6fd92cb3ff3a2739e07dff30ebdf Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 12:12:33 +0100 Subject: [PATCH 0274/1921] Again attempts to fix bam handling --- subworkflows/local/gens.nf | 11 +++-------- workflows/raredisease.nf | 3 +-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 5dc2b7b8..50250509 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -9,8 +9,7 @@ include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' workflow GENS { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] + bam // channel: [ val(meta), path(bam), path(bai) ] fasta // path(fasta) fai // path(fai) interval_list // path(interval_list) @@ -20,16 +19,12 @@ workflow GENS { seq_dict // path: seq_dict main: - bam.map { meta, bam, bai -> - return [meta, bam, bai, []] - } - .set { ch_bam } ch_versions = Channel.empty() - HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) + HAPLOTYPECALLER ( bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( ch_bam, fasta, interval_list ) + COLLECTREADCOUNTS ( bam, fasta, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 911a4a3e..8ebdb4e6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -154,8 +154,7 @@ workflow RAREDISEASE { // STEP 1.7: GENS GENS ( - ch_marked_bam, - ch_marked_bai, + ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, params.gens_interval_list, From a2155e3e47cd2c0b7d6230f4830aadc87e1b0e0b Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 12:23:20 +0100 Subject: [PATCH 0275/1921] Attempts fix again --- subworkflows/local/gens.nf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 50250509..f1731a49 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -20,8 +20,12 @@ workflow GENS { main: ch_versions = Channel.empty() + bam.map { meta, bam, bai -> + return [meta, bam, bai, []] + } + .set { ch_bam } - HAPLOTYPECALLER ( bam, fasta, fai, seq_dict, [], [] ) + HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) COLLECTREADCOUNTS ( bam, fasta, interval_list ) From 53a32dc727f958d7bcac3353aff6540ece2bb052 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 14:16:56 +0100 Subject: [PATCH 0276/1921] Adds bai to collectreadcounts --- modules/local/gatk4/collectreadcounts/main.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index 81874948..d133a1fc 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -28,6 +28,7 @@ process GATK4_COLLECTREADCOUNTS { """ gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ -I $bam \\ + --read-index $bai \\ -R $fasta \\ -L $interval_list \\ -O ${prefix}.hdf5 \\ From c5c87fa0ef6f954fe3183f0392475d73f20e0240 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 18:20:41 +0100 Subject: [PATCH 0277/1921] Adds fai as parameter to collectreadcounts --- modules/local/gatk4/collectreadcounts/main.nf | 1 + subworkflows/local/gens.nf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index d133a1fc..c40191fd 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -10,6 +10,7 @@ process GATK4_COLLECTREADCOUNTS { input: tuple val(meta), path(bam), path(bai) path fasta + path fai path interval_list output: diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index f1731a49..7596e5a1 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -28,7 +28,7 @@ workflow GENS { HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( bam, fasta, interval_list ) + COLLECTREADCOUNTS ( bam, fasta, fai, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) From ee7e987355651845c758eb554e72296d8ad2cc40 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 18:45:44 +0100 Subject: [PATCH 0278/1921] Adds sequence dict to collectreadcounts --- modules/local/gatk4/collectreadcounts/main.nf | 1 + subworkflows/local/gens.nf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index c40191fd..d947b0a0 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -11,6 +11,7 @@ process GATK4_COLLECTREADCOUNTS { tuple val(meta), path(bam), path(bai) path fasta path fai + path sequence_dict path interval_list output: diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 7596e5a1..cd1ddeb5 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -28,7 +28,7 @@ workflow GENS { HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( bam, fasta, fai, interval_list ) + COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) From 0821424705b1eb8f7f520867314f3b8a1163acef Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 1 Mar 2022 19:04:06 +0100 Subject: [PATCH 0279/1921] Fixes temporary test config --- conf/test.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index fe1f6e91..d93e3ab8 100644 --- a/conf/test.config +++ b/conf/test.config @@ -34,7 +34,7 @@ params { target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' // Gens - gens_interval_list = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_female_pon_100bp.hdf5' - gens_pon = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_targets_preprocessed_100bp.interval_list' + gens_pon = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_female_pon_100bp.hdf5' + gens_interval_list = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_targets_preprocessed_100bp.interval_list' gens_gnomad_pos = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gnomad.genomes.r2.1.1.sites.5percent.pos.txt' } From 26bd87b97bfe10a953ac7346f0e07f2c5ee26ed8 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Wed, 2 Mar 2022 09:26:55 +0100 Subject: [PATCH 0280/1921] Sets interval merging rule for collectreadcounts --- conf/modules.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 7fee2cd0..4e9c8afe 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -239,6 +239,9 @@ process { mode: 'copy' ] } + withName: COLLECTREADCOUNTS { + ext.args = '--interval-merging-rule OVERLAPPING_ONLY' + } // nf-core modules withName: FASTQC { ext.args = '--quiet' From 9362d8c7ef63845958a9617a2ccc7dfd3237a58c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 3 Mar 2022 14:32:48 +0100 Subject: [PATCH 0281/1921] svdb query in parallel --- conf/genomes.config | 2 + conf/modules.config | 12 +++++ conf/test.config | 3 ++ main.nf | 1 + modules/nf-core/modules/svdb/query/main.nf | 17 ++++++- nextflow_schema.json | 6 +++ .../local/annotate_structural_variants.nf | 46 +++++++++++++++++++ .../local/call_structural_variants.nf | 3 +- 8 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 subworkflows/local/annotate_structural_variants.nf diff --git a/conf/genomes.config b/conf/genomes.config index e8ddd83d..c05f375e 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,6 +15,7 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" @@ -25,6 +26,7 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" diff --git a/conf/modules.config b/conf/modules.config index c1f06027..b2494a58 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -190,6 +190,18 @@ process { mode: 'copy', ] } + // ANNOTATE_SV + withName: "SVDB_QUERY*" { + publishDir = [ + enabled: false, + ] + } + withName: PICARD_SORTVCF { + publishDir = [ + path: { "${params.outdir}/sv_annotate" }, + mode: 'copy', + ] + } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { diff --git a/conf/test.config b/conf/test.config index dac7e011..b46c825b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -28,6 +28,9 @@ params { // Genome references fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + // Structural variant annotation databases + svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" + // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' diff --git a/main.nf b/main.nf index 2b244799..f89213a1 100644 --- a/main.nf +++ b/main.nf @@ -22,6 +22,7 @@ params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') +params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf index 292fe4ce..12c67587 100644 --- a/modules/nf-core/modules/svdb/query/main.nf +++ b/modules/nf-core/modules/svdb/query/main.nf @@ -8,8 +8,7 @@ process SVDB_QUERY { 'quay.io/biocontainers/svdb:2.5.0--py39hcbe4a3b_0' }" input: - tuple val(meta), path(vcf) - path (vcf_db) + tuple val(meta), path(vcf), path(vcf_db), val(in_occ), val(in_frq), val(out_occ), val(out_frq) output: tuple val(meta), path("*_ann_svdbq.vcf"), emit: vcf @@ -21,10 +20,24 @@ process SVDB_QUERY { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def input = "" + if(in_occ) { + input += "--in_occ ${in_occ} " + } + if(in_frq) { + input += "--in_frq ${in_frq} " + } + if(out_occ) { + input += "--out_occ ${out_occ} " + } + if(out_frq) { + input += "--out_frq ${out_frq} " + } """ svdb \\ --query \\ $args \\ + $input \\ --db $vcf_db \\ --query_vcf $vcf \\ >${prefix}_ann_svdbq.vcf diff --git a/nextflow_schema.json b/nextflow_schema.json index 20bbbf55..da9241ee 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -107,6 +107,12 @@ "fa_icon": "fas fa-bezier-curve", "description": "Path to directory for target bed file." }, + "svdb_query_dbs": { + "type": "string", + "format": "file-path", + "description": "Path to comma-separated file containing information about the databases used for structural variant annotation.", + "fa_icon": "far fa-file-code" + }, "variant_catalog": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf new file mode 100644 index 00000000..feaf9037 --- /dev/null +++ b/subworkflows/local/annotate_structural_variants.nf @@ -0,0 +1,46 @@ +// +// A subworkflow to annotate structural variants. +// + +include { SVDB_QUERY as SVDB_QUERY_FILTER } from '../../modules/nf-core/modules/svdb/query/main' +include { SVDB_QUERY as SVDB_QUERY_NOFILTER } from '../../modules/nf-core/modules/svdb/query/main' + + +// include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' + +workflow ANNOTATE_STRUCTURAL_VARIANTS { + + take: + vcf // channel: [ val(meta), path(vcf) ] + sv_dbs // file: dbs.csv + + main: + ch_versions = Channel.empty() + + Channel.fromPath(sv_dbs) + .splitCsv ( header:true ) + .branch { row -> + freq_filter: row.use_in_freq_filter == "1" + return [row.filename, + row.in_freq_info_key, + row.in_allele_count_info_key, + row.out_freq_info_key, + row.out_allele_count_info_key] + no_freq_filter: row.use_in_freq_filter == "0" + return [row.filename, + row.in_freq_info_key, + row.in_allele_count_info_key, + row.out_freq_info_key, + row.out_allele_count_info_key] + } + .set { ch_svdb_dbs } + + ch_input_filter = vcf.combine(ch_svdb_dbs.freq_filter).view() + ch_input_nofilter = vcf.combine(ch_svdb_dbs.no_freq_filter).view() + + SVDB_QUERY_FILTER(ch_input_filter) + SVDB_QUERY_NOFILTER(ch_input_nofilter) + + emit: + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index ae24e21f..f4ae56bd 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -46,5 +46,6 @@ workflow CALL_STRUCTURAL_VARIANTS { emit: - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = SVDB_MERGE.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From c7f1963bc4c61417a310df13017554aa9263914e Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 09:21:15 +0100 Subject: [PATCH 0282/1921] Removes temporary test config changes --- conf/test.config | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/conf/test.config b/conf/test.config index d93e3ab8..fa041a02 100644 --- a/conf/test.config +++ b/conf/test.config @@ -18,7 +18,7 @@ params { // Limit resources so that this can run on GitHub Actions max_cpus = 2 - //max_memory = '6.GB' + max_memory = '6.GB' max_time = '6.h' // Input data @@ -32,9 +32,4 @@ params { variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' - - // Gens - gens_pon = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_female_pon_100bp.hdf5' - gens_interval_list = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gens_targets_preprocessed_100bp.interval_list' - gens_gnomad_pos = '/home/proj/stage/rare-disease/references/references_10.0/grch37_gnomad.genomes.r2.1.1.sites.5percent.pos.txt' } From a0586621bd47f516d8cef1ac203846e51bbf7d5b Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 09:21:39 +0100 Subject: [PATCH 0283/1921] Updates module configuration --- conf/modules.config | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 4e9c8afe..39259d7f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -239,9 +239,15 @@ process { mode: 'copy' ] } - withName: COLLECTREADCOUNTS { + withName: ".*GENS:COLLECTREADCOUNTS" { ext.args = '--interval-merging-rule OVERLAPPING_ONLY' } + withName: GENS { + publishDir = [ + path: { "${params.outdir}/gens" } + mode: 'copy' + ] + } // nf-core modules withName: FASTQC { ext.args = '--quiet' From 0f122345beb59aca402afd6e8550908e636a616f Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 09:22:16 +0100 Subject: [PATCH 0284/1921] Fixes a channel issue --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- .../local/gatk4/collectreadcounts/meta.yml | 19 +++++++++++++++++-- subworkflows/local/gens.nf | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index d947b0a0..72307dde 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -8,7 +8,7 @@ process GATK4_COLLECTREADCOUNTS { 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" input: - tuple val(meta), path(bam), path(bai) + tuple val(meta), path(bam), path(bai), path(intervals) path fasta path fai path sequence_dict diff --git a/modules/local/gatk4/collectreadcounts/meta.yml b/modules/local/gatk4/collectreadcounts/meta.yml index b74afb5c..03501e41 100644 --- a/modules/local/gatk4/collectreadcounts/meta.yml +++ b/modules/local/gatk4/collectreadcounts/meta.yml @@ -22,12 +22,27 @@ input: e.g. [ id:'test'] - bam: type: file - description: Input bam file - pattern: "*.bam" + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - bai: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - intervals: + type: file + description: Bed file with the genomic regions included in the library (optional) - fasta: type: file description: The reference fasta file pattern: "*.fasta" + - fai: + type: file + description: Index of reference fasta file + pattern: "fasta.fai" + - sequence_dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" - interval_list: type: file description: Binning intervals file diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index cd1ddeb5..3b2c38d9 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -28,7 +28,7 @@ workflow GENS { HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) + COLLECTREADCOUNTS ( ch_bam, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) From b6eb1b8c17a2b9957cbedf07fa6c9a7e0dc1c0d5 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 09:30:07 +0100 Subject: [PATCH 0285/1921] Adds missing comma --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 39259d7f..7cda4cac 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -244,7 +244,7 @@ process { } withName: GENS { publishDir = [ - path: { "${params.outdir}/gens" } + path: { "${params.outdir}/gens" }, mode: 'copy' ] } From 68e3e36012fb405a39e101d4847ef2e1a2e1a1ed Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 10:09:23 +0100 Subject: [PATCH 0286/1921] Fixes a channel issue --- subworkflows/local/gens.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 3b2c38d9..859d4eec 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -23,12 +23,12 @@ workflow GENS { bam.map { meta, bam, bai -> return [meta, bam, bai, []] } - .set { ch_bam } + .into { ch_bam_hc, ch_bam_cr } - HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) + HAPLOTYPECALLER ( ch_bam_hc, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( ch_bam, fasta, fai, seq_dict, interval_list ) + COLLECTREADCOUNTS ( ch_bam_cr, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) From 3b7df52b3a9e403e7a06fbec3b6a305e6893b519 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 10:10:31 +0100 Subject: [PATCH 0287/1921] Changes a comma into a semi-colon --- subworkflows/local/gens.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 859d4eec..a092c093 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -23,7 +23,7 @@ workflow GENS { bam.map { meta, bam, bai -> return [meta, bam, bai, []] } - .into { ch_bam_hc, ch_bam_cr } + .into { ch_bam_hc; ch_bam_cr } HAPLOTYPECALLER ( ch_bam_hc, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) From 3b90a7376ef2d80b523de4204aa53e1ed55589ce Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 10:15:31 +0100 Subject: [PATCH 0288/1921] Reverts some changes --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- modules/local/gatk4/collectreadcounts/meta.yml | 3 --- subworkflows/local/gens.nf | 10 +++++----- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index 72307dde..d947b0a0 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -8,7 +8,7 @@ process GATK4_COLLECTREADCOUNTS { 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" input: - tuple val(meta), path(bam), path(bai), path(intervals) + tuple val(meta), path(bam), path(bai) path fasta path fai path sequence_dict diff --git a/modules/local/gatk4/collectreadcounts/meta.yml b/modules/local/gatk4/collectreadcounts/meta.yml index 03501e41..6aa4a3dd 100644 --- a/modules/local/gatk4/collectreadcounts/meta.yml +++ b/modules/local/gatk4/collectreadcounts/meta.yml @@ -28,9 +28,6 @@ input: type: file description: BAI/CRAI file from alignment pattern: "*.{bai,crai}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - fasta: type: file description: The reference fasta file diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index a092c093..5b09ae32 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -23,14 +23,14 @@ workflow GENS { bam.map { meta, bam, bai -> return [meta, bam, bai, []] } - .into { ch_bam_hc; ch_bam_cr } + .set { ch_bam } - HAPLOTYPECALLER ( ch_bam_hc, fasta, fai, seq_dict, [], [] ) - ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - - COLLECTREADCOUNTS ( ch_bam_cr, fasta, fai, seq_dict, interval_list ) + COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) + HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) + ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) + DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions) From 7e11c86007cfdde94b0b44a0cdd5cb0eae6ffee6 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 10:28:07 +0100 Subject: [PATCH 0289/1921] Tests a fix --- subworkflows/local/gens.nf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 5b09ae32..7af1bdde 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -20,14 +20,15 @@ workflow GENS { main: ch_versions = Channel.empty() + + COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) + ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) + bam.map { meta, bam, bai -> return [meta, bam, bai, []] } .set { ch_bam } - COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) - ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) - HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) From 31a64e05e2d97033def15ec014f1c3a6b1d038aa Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 10:49:46 +0100 Subject: [PATCH 0290/1921] Tests view --- subworkflows/local/gens.nf | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 7af1bdde..c94d18e0 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -20,18 +20,19 @@ workflow GENS { main: ch_versions = Channel.empty() - - COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) - ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) - bam.map { meta, bam, bai -> - return [meta, bam, bai, []] - } - .set { ch_bam } + return [meta, bam, bai, []] + }.set { ch_bam } + + bam.view() + ch_bam.view() HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) + COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) + ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) + DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions) From 9b8d4f345ab97f94abf397def79b54b675d03200 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 10:57:57 +0100 Subject: [PATCH 0291/1921] Test again --- conf/modules.config | 3 +++ subworkflows/local/gens.nf | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 7cda4cac..f7ffb2d6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -239,15 +239,18 @@ process { mode: 'copy' ] } + withName: ".*GENS:COLLECTREADCOUNTS" { ext.args = '--interval-merging-rule OVERLAPPING_ONLY' } + withName: GENS { publishDir = [ path: { "${params.outdir}/gens" }, mode: 'copy' ] } + // nf-core modules withName: FASTQC { ext.args = '--quiet' diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index c94d18e0..e8196e9c 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -21,7 +21,8 @@ workflow GENS { main: ch_versions = Channel.empty() bam.map { meta, bam, bai -> - return [meta, bam, bai, []] + new_meta = meta.clone() + [new_meta, bam, bai, []] }.set { ch_bam } bam.view() From 5027a597549306e91230f7a5f4dee3844df9762b Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 11:01:26 +0100 Subject: [PATCH 0292/1921] Test again again --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- subworkflows/local/gens.nf | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index d947b0a0..8e4a945e 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -1,5 +1,5 @@ process GATK4_COLLECTREADCOUNTS { - tag "$meta.id" + tag "wutface" label 'process_medium' conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index e8196e9c..029c7f15 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -21,8 +21,7 @@ workflow GENS { main: ch_versions = Channel.empty() bam.map { meta, bam, bai -> - new_meta = meta.clone() - [new_meta, bam, bai, []] + [meta, bam, bai, []] }.set { ch_bam } bam.view() From dbadaf33e35771ac75503e7793ed5f9955ccc2e1 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 11:09:58 +0100 Subject: [PATCH 0293/1921] Adds file() to params --- workflows/raredisease.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8ebdb4e6..a5cf5445 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -157,9 +157,9 @@ workflow RAREDISEASE { ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, - params.gens_interval_list, - params.gens_pon, - params.gens_gnomad_pos, + file(params.gens_interval_list), + file(params.gens_pon), + file(params.gens_gnomad_pos), INPUT_CHECK.out.ch_case_info, PREPARE_GENOME.out.sequence_dict ) From 4422fc195349950c9d081dd9b6a1776d6df03601 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 4 Mar 2022 13:35:40 +0100 Subject: [PATCH 0294/1921] Removes errant quote sign --- modules/local/gatk4/denoisereadcounts/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index c603f502..2cc0a94a 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -29,8 +29,8 @@ process GATK4_DENOISEREADCOUNTS { gatk --java-options "-Xmx${avail_mem}g" DenoiseReadCounts \\ -I $read_counts \\ --count-panel-of-normals $panel_of_normals \\ - --standardized-copy-ratios ${prefix}.standardizedCR.tsv" \\ - --denoised-copy-ratios ${prefix}.denoisedCR.tsv" \\ + --standardized-copy-ratios ${prefix}.standardizedCR.tsv \\ + --denoised-copy-ratios ${prefix}.denoisedCR.tsv \\ $args cat <<-END_VERSIONS > versions.yml From db39c5f629520fbbe872ce714e3c3be9d1990a1d Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 7 Mar 2022 11:04:13 +0100 Subject: [PATCH 0295/1921] aggregate mem2 subwkflw in config --- conf/modules.config | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ad8dff1c..215da9b5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -194,47 +194,33 @@ process { // ALIGN_BWAMEM2 withName: ".*ALIGN_BWAMEM2:.*"{ ext.when = params.aligner.contains('bwamem2') - } - withName: BWAMEM2_MEM { - ext.args = '-M -K 100000000' publishDir = [ path: { "${params.outdir}/bwamem2" }, - enabled: false - ] - } - withName: SAMTOOLS_INDEX { - publishDir = [ - path: { "${params.outdir}/samtools" }, - enabled: false - ] - } - withName: SAMTOOLS_INDEX_MD { - publishDir = [ - path: { "${params.outdir}/markduplicates" }, mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SAMTOOLS_STATS { - ext.args = '-s --remove-overlaps' + withName: BWAMEM2_MEM { + ext.args = '-M -K 100000000' publishDir = [ - path: { "${params.outdir}/samtools" }, - mode: 'copy', + path: { "${params.outdir}/bwamem2" }, + enabled: false, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SAMTOOLS_MERGE { + withName: SAMTOOLS_STATS { + ext.args = '-s --remove-overlaps' publishDir = [ - path: { "${params.outdir}/samtools" }, + path: { "${params.outdir}/bwamem2" }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } withName: '.*MARKDUPLICATES' { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ - path: { "${params.outdir}/markduplicates" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + path: { "${params.outdir}/bwamem2" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } // ANNOTATE_VCFANNO From 6d4e2d023724403f5cdf554ef3155f93a4a6ca42 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 7 Mar 2022 12:29:59 +0100 Subject: [PATCH 0296/1921] condense mem2 into ternary in prepare_genome --- subworkflows/local/prepare_genome.nf | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 2477325d..9cbc843e 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -12,22 +12,17 @@ include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' workflow PREPARE_GENOME { take: - fasta // path: genome.fasta - variant_catalog // path: variant_catalog.json + fasta // channel: [mandatory] genome.fasta + variant_catalog // channel: [optional] variant_catalog.json main: ch_fasta = file(fasta) ch_versions = Channel.empty() // Fetch BWAMEM2 index or create from scratch if required - if ( params.aligner == 'bwamem2' ) { - if ( params.bwamem2_index && file(params.bwamem2_index, checkIfExists:true) ) { - ch_bwamem2_index = file(params.bwamem2_index) - } else { - ch_bwamem2_index = BWAMEM2_INDEX ( ch_fasta ).index - ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) - } - } + BWAMEM2_INDEX ( ch_fasta ) + ch_bwamem2_index = params.bwamem2_index && params.aligner == "bwamem2" ? file(params.bwamem2_index) : BWAMEM2_INDEX.out.index + ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) if ( params.fasta_fai ) { ch_fai = file(params.fasta_fai) From b2e22df11fd36f8a3c6c5fe2d8de8eb306ba3fa8 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 7 Mar 2022 12:47:41 +0100 Subject: [PATCH 0297/1921] when clause for mem2 idx --- conf/modules.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 215da9b5..92821145 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -7,6 +7,7 @@ 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 ---------------------------------------------------------------------------------------- */ @@ -29,6 +30,7 @@ process { } // PREPARE_GENOME withName: BWAMEM2_INDEX { + ext.when = { !params.bwamem2_index && params.aligner == "bwamem2" } publishDir = [ path: { "${params.outdir}/references" }, mode: 'copy', From 4cfaa865749d9ed0e5ae77a571de96db67e42b76 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Mar 2022 20:56:23 +0100 Subject: [PATCH 0298/1921] update manta --- modules.json | 3 ++ .../modules}/manta/germline/main.nf | 29 +++++++++++++++---- .../modules}/manta/germline/meta.yml | 26 ++++++++++++----- subworkflows/local/call_sv_manta.nf | 2 +- 4 files changed, 46 insertions(+), 14 deletions(-) rename modules/{local => nf-core/modules}/manta/germline/main.nf (73%) rename modules/{local => nf-core/modules}/manta/germline/meta.yml (77%) diff --git a/modules.json b/modules.json index dca78aa6..45728d03 100644 --- a/modules.json +++ b/modules.json @@ -39,6 +39,9 @@ "glnexus": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, + "manta/germline": { + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + }, "mosdepth": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, diff --git a/modules/local/manta/germline/main.nf b/modules/nf-core/modules/manta/germline/main.nf similarity index 73% rename from modules/local/manta/germline/main.nf rename to modules/nf-core/modules/manta/germline/main.nf index 981bccbf..5ddba51b 100644 --- a/modules/local/manta/germline/main.nf +++ b/modules/nf-core/modules/manta/germline/main.nf @@ -8,11 +8,10 @@ process MANTA_GERMLINE { 'quay.io/biocontainers/manta:1.6.0--h9ee0642_1' }" input: - tuple val(meta), path(inputs) - path indices + tuple val(meta), path(input), path(index) path fasta path fasta_fai - tuple val(bed_meta), path(target_bed), path(target_bed_tbi) + tuple path(target_bed), path(target_bed_tbi) output: @@ -30,13 +29,15 @@ process MANTA_GERMLINE { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def options_manta = target_bed ? "--exome --callRegions $target_bed" : "" + def input_files = input.collect{"--bam ${it}"}.join(' ') + def options_manta = target_bed ? "--callRegions $target_bed" : "" """ configManta.py \ - --bam ${inputs.join(' --bam ')} \ + ${input_files} \ --reference $fasta \ + --runDir manta \ $options_manta \ - --runDir manta + $args python manta/runWorkflow.py -m local -j $task.cpus @@ -58,4 +59,20 @@ process MANTA_GERMLINE { manta: \$( configManta.py --version ) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.candidate_small_indels.vcf.gz + touch ${prefix}.candidate_small_indels.vcf.gz.tbi + touch ${prefix}.candidate_sv.vcf.gz + touch ${prefix}.candidate_sv.vcf.gz.tbi + touch ${prefix}.diploid_sv.vcf.gz + touch ${prefix}.diploid_sv.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + manta: \$( configManta.py --version ) + END_VERSIONS + """ } diff --git a/modules/local/manta/germline/meta.yml b/modules/nf-core/modules/manta/germline/meta.yml similarity index 77% rename from modules/local/manta/germline/meta.yml rename to modules/nf-core/modules/manta/germline/meta.yml index 60d46201..d6297ead 100644 --- a/modules/local/manta/germline/meta.yml +++ b/modules/nf-core/modules/manta/germline/meta.yml @@ -15,30 +15,38 @@ tools: documentation: https://github.com/Illumina/manta/blob/v1.6.0/docs/userGuide/README.md tool_dev_url: https://github.com/Illumina/manta doi: "10.1093/bioinformatics/btv710" - licence: ['GPL v3'] + licence: ["GPL v3"] input: - meta: type: map description: | - Groovy Map containing case information - e.g. [ id:'case_id' ] + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - input: type: file - description: BAM/CRAM/SAM file + description: BAM/CRAM/SAM file. For joint calling use a list of files. pattern: "*.{bam,cram,sam}" - - input_index: + - index: type: file - description: BAM/CRAM/SAM index file + description: BAM/CRAM/SAM index file. For joint calling use a list of files. pattern: "*.{bai,crai,sai}" - fasta: type: file description: Genome reference FASTA file pattern: "*.{fa,fasta}" - - fai: + - fasta_fai: type: file description: Genome reference FASTA index file pattern: "*.{fa.fai,fasta.fai}" + - target_bed: + type: file + description: BED file containing target regions for variant calling + pattern: "*.{bed}" + - target_bed_tbi: + type: file + description: Index for BED file containing target regions for variant calling + pattern: "*.{bed.tbi}" output: - meta: @@ -74,3 +82,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" + +authors: + - "@maxulysse" + - "@ramprasadn" diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf index 86de5daf..40692eb2 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/local/call_sv_manta.nf @@ -2,7 +2,7 @@ // A structural variant caller workflow for manta // -include { MANTA_GERMLINE as MANTA } from '../../modules/local/manta/germline/main' +include { MANTA_GERMLINE as MANTA } from '../../modules/nf-core/modules/manta/germline/main' workflow CALL_SV_MANTA { take: From abf9add1db567258a95f4472c5158db97a197644 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Mar 2022 21:20:34 +0100 Subject: [PATCH 0299/1921] update channel structure in calls --- subworkflows/local/call_sv_manta.nf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf index 40692eb2..5138b604 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/local/call_sv_manta.nf @@ -19,16 +19,18 @@ workflow CALL_SV_MANTA { .set { bam_file_list } bai.collect{it[1]} + .toList() .set { bai_file_list } ch_case_info.combine(bam_file_list) + .combine(bai_file_list) .set { manta_input_bams } if (params.analysis_type == "WGS") { - MANTA ( manta_input_bams, bai_file_list, fasta, fai, [[],[],[]] ) + MANTA ( manta_input_bams, fasta, fai, [[],[]] ) } else { - ch_target_bed = ch_bed.ifEmpty([[],[],[]]) - MANTA ( manta_input_bams, bai_file_list, fasta, fai, ch_target_bed ) + ch_target_bed = ch_bed.ifEmpty([[],[]]) + MANTA ( manta_input_bams, fasta, fai, ch_target_bed ) } ch_versions = MANTA.out.versions From f7aa85d0c1816bc63b0815ec466228a140f11434 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Mar 2022 21:40:45 +0100 Subject: [PATCH 0300/1921] update subworkflow --- subworkflows/local/call_sv_manta.nf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/local/call_sv_manta.nf index 5138b604..76460fa4 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/local/call_sv_manta.nf @@ -26,11 +26,15 @@ workflow CALL_SV_MANTA { .combine(bai_file_list) .set { manta_input_bams } + bed_input = ch_bed.map{ id, bed, index -> + return [bed, index] + } + if (params.analysis_type == "WGS") { MANTA ( manta_input_bams, fasta, fai, [[],[]] ) } else { ch_target_bed = ch_bed.ifEmpty([[],[]]) - MANTA ( manta_input_bams, fasta, fai, ch_target_bed ) + MANTA ( manta_input_bams, fasta, fai, bed_input ) } ch_versions = MANTA.out.versions From 56390696eefa356475d498b184d9e09d52b0efc8 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 8 Mar 2022 09:26:54 +0100 Subject: [PATCH 0301/1921] Tests fix to picard disk space issue --- modules/nf-core/modules/picard/markduplicates/main.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index d3bf6938..b0a36691 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -26,6 +26,8 @@ process PICARD_MARKDUPLICATES { avail_mem = task.memory.giga } """ + mkdir tmp + export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp picard \\ -Xmx${avail_mem}g \\ MarkDuplicates \\ From 791adc9accf2f964884457a76467805fa676e3c8 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 8 Mar 2022 10:34:08 +0100 Subject: [PATCH 0302/1921] Attempts bandaid solution for memory problem --- modules/nf-core/modules/picard/markduplicates/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index b0a36691..0bf7f04a 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -23,7 +23,7 @@ process PICARD_MARKDUPLICATES { if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = task.memory.giga - 1 } """ mkdir tmp From 95d99c6da4190fefc55718330ae2050b586460ab Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 8 Mar 2022 13:53:43 +0100 Subject: [PATCH 0303/1921] Merge branch 'TEMPLATE' into update/template_merge --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 92821145..4ba2d0ca 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -195,7 +195,7 @@ process { // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: ".*ALIGN_BWAMEM2:.*"{ - ext.when = params.aligner.contains('bwamem2') + ext.when = params.aligner.equals("bwamem2") publishDir = [ path: { "${params.outdir}/bwamem2" }, mode: 'copy', From 9a968c96a378d81d4103495fb2ae82c36d55501e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 8 Mar 2022 13:53:52 +0100 Subject: [PATCH 0304/1921] add subworkflow --- workflows/raredisease.nf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 25f8a640..7df2e4e6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -13,7 +13,7 @@ WorkflowRaredisease.initialise(params, log) def checkPathParamList = [ params.input, params.multiqc_config, params.fasta, params.bwamem2_index, params.fasta_fai, params.gnomad, - params.vcfanno_resources + params.vcfanno_resources, params.svdb_query_dbs ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -75,6 +75,8 @@ include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' + /* ======================================================================================== RUN MAIN WORKFLOW @@ -174,6 +176,12 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) + ANNOTATE_STRUCTURAL_VARIANTS ( + CALL_STRUCTURAL_VARIANTS.out.vcf, + file(params.svdb_query_dbs) + ) + ch_versions = ch_versions.mix(ANNOTATE_STRUCTURAL_VARIANTS.out.versions) + // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) From bf58ce3351be2497f39a94cfa120c45fd56a733f Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 8 Mar 2022 15:27:32 +0100 Subject: [PATCH 0305/1921] Attempts to fix memory issues --- modules/local/gatk4/collectreadcounts/main.nf | 5 +++-- modules/local/gatk4/denoisereadcounts/main.nf | 7 ++++--- modules/nf-core/modules/picard/markduplicates/main.nf | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index 8e4a945e..b7639a01 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -25,7 +25,7 @@ process GATK4_COLLECTREADCOUNTS { if (!task.memory) { log.info '[GATK CollectReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = task.memory.giga * 14 / 15 } """ gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ @@ -34,7 +34,8 @@ process GATK4_COLLECTREADCOUNTS { -R $fasta \\ -L $interval_list \\ -O ${prefix}.hdf5 \\ - $args + $args \\ + --tmp-dir . cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index 2cc0a94a..f68b7813 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -1,6 +1,6 @@ process GATK4_DENOISEREADCOUNTS { tag "$meta.id" - label 'process_medium' + label 'process_high' conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -23,7 +23,7 @@ process GATK4_DENOISEREADCOUNTS { if (!task.memory) { log.info '[GATK DenoiseReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = task.memory.giga * 14 / 15 } """ gatk --java-options "-Xmx${avail_mem}g" DenoiseReadCounts \\ @@ -31,7 +31,8 @@ process GATK4_DENOISEREADCOUNTS { --count-panel-of-normals $panel_of_normals \\ --standardized-copy-ratios ${prefix}.standardizedCR.tsv \\ --denoised-copy-ratios ${prefix}.denoisedCR.tsv \\ - $args + $args \\ + --tmp-dir . cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 0bf7f04a..df7211cf 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -23,7 +23,7 @@ process PICARD_MARKDUPLICATES { if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga - 1 + avail_mem = task.memory.giga * 14 / 15 } """ mkdir tmp From fc9dd5088eddb09c09812c5e9f4967df038ec8d3 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Wed, 9 Mar 2022 09:29:24 +0100 Subject: [PATCH 0306/1921] Floors java memory allocation --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- modules/local/gatk4/denoisereadcounts/main.nf | 2 +- modules/nf-core/modules/picard/markduplicates/main.nf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index b7639a01..82fbb728 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -25,7 +25,7 @@ process GATK4_COLLECTREADCOUNTS { if (!task.memory) { log.info '[GATK CollectReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga * 14 / 15 + avail_mem = task.memory.giga * 14 / 15 as long } """ gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index f68b7813..5bf2c73e 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -23,7 +23,7 @@ process GATK4_DENOISEREADCOUNTS { if (!task.memory) { log.info '[GATK DenoiseReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga * 14 / 15 + avail_mem = task.memory.giga * 14 / 15 as long } """ gatk --java-options "-Xmx${avail_mem}g" DenoiseReadCounts \\ diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index df7211cf..b0107e47 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -23,7 +23,7 @@ process PICARD_MARKDUPLICATES { if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga * 14 / 15 + avail_mem = task.memory.giga * 14 / 15 as long } """ mkdir tmp From 7ac967e7466d71792d9064638b56213ba376b704 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 9 Mar 2022 16:09:33 +0100 Subject: [PATCH 0307/1921] removed slash for vcfanno_resources param --- conf/genomes.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index e8ddd83d..f5cbd9b6 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -17,18 +17,18 @@ params { gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37" + vcfanno_toml = "${params.local_genomes}/vcfanno_resources_grch37/vcfanno_toml-grch37.toml" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-.vcf.gz" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38" + vcfanno_toml = "${params.local_genomes}/vcfanno_resources_grch38/vcfanno_toml-grch38.toml" } } } From 49c70040b8c268b9443ef6f3ca226c8944c9514a Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Thu, 10 Mar 2022 11:03:42 +0100 Subject: [PATCH 0308/1921] Add stranger module files --- modules.json | 3 ++ modules/nf-core/modules/stranger/main.nf | 33 +++++++++++++++++ modules/nf-core/modules/stranger/meta.yml | 44 +++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 modules/nf-core/modules/stranger/main.nf create mode 100644 modules/nf-core/modules/stranger/meta.yml diff --git a/modules.json b/modules.json index 45728d03..250e65fc 100644 --- a/modules.json +++ b/modules.json @@ -72,6 +72,9 @@ "samtools/stats": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, + "stranger": { + "git_sha": "fe4eb459fbc76fbcbf63e204b6f5b79f88dca452" + }, "svdb/merge": { "git_sha": "ee915a43e405324e62ee5d4c14a6a6ec6c610058" }, diff --git a/modules/nf-core/modules/stranger/main.nf b/modules/nf-core/modules/stranger/main.nf new file mode 100644 index 00000000..2e647627 --- /dev/null +++ b/modules/nf-core/modules/stranger/main.nf @@ -0,0 +1,33 @@ +process STRANGER { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::stranger=0.8.1" : null) + 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' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + stranger \\ + $args \\ + $vcf | gzip --no-name > ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + stranger: \$( stranger --version ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/stranger/meta.yml b/modules/nf-core/modules/stranger/meta.yml new file mode 100644 index 00000000..a9a280ad --- /dev/null +++ b/modules/nf-core/modules/stranger/meta.yml @@ -0,0 +1,44 @@ +name: stranger +description: Annotates output files from ExpansionHunter with the pathologic implications of the repeat sizes. +keywords: + - STR + - repeat_expansions + - annotate + - vcf +tools: + - stranger: + description: Annotate VCF files with str variants + homepage: https://github.com/moonso/stranger + documentation: https://github.com/moonso/stranger + tool_dev_url: https://github.com/moonso/stranger + doi: "10.5281/zenodo.4548873" + licence: ['MIT'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF with repeat expansions + pattern: "*.{vcf.gz,vcf}" + +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: annotated VCF with keys STR_STATUS, NormalMax and PathologicMin + pattern: "*.{vcf.gz}" + +authors: + - "@ljmesi" From fa2e37b128fba119a02e5873c66598ef6c45a6ad Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 13 Mar 2022 12:33:38 +0100 Subject: [PATCH 0309/1921] rewrite svdb query block --- modules/local/svdb/query/main.nf | 72 +++++++++++++++++++ .../modules => local}/svdb/query/meta.yml | 0 modules/nf-core/modules/svdb/query/main.nf | 50 ------------- .../local/annotate_structural_variants.nf | 34 ++++----- 4 files changed, 86 insertions(+), 70 deletions(-) create mode 100644 modules/local/svdb/query/main.nf rename modules/{nf-core/modules => local}/svdb/query/meta.yml (100%) delete mode 100644 modules/nf-core/modules/svdb/query/main.nf diff --git a/modules/local/svdb/query/main.nf b/modules/local/svdb/query/main.nf new file mode 100644 index 00000000..07e40ad6 --- /dev/null +++ b/modules/local/svdb/query/main.nf @@ -0,0 +1,72 @@ +process SVDB_QUERY { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::svdb=2.5.2" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/svdb:2.5.2--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.5.2--py39h5371cbf_0' }" + + input: + tuple val(meta), path(vcf) + val(in_occs) + val(in_frqs) + val(out_occs) + val(out_frqs) + path (vcf_dbs) + + output: + tuple val(meta), path("*_query.vcf"), 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 in_occ = "" + def in_frq = "" + def out_occ = "" + def out_frq = "" + if (in_occs) { + in_occ = "--in_occ ${in_occs.join(',')}" + } + if (in_frqs) { + in_frq = "--in_frq ${in_frqs.join(',')}" + } + if (out_occs) { + out_occ = "--out_occ ${out_occs.join(',')}" + } + if (out_frqs) { + out_frq = "--out_frq ${out_frqs.join(',')}" + } + + """ + svdb \\ + --query \\ + $in_occ \\ + $in_frq \\ + $out_occ \\ + $out_frq \\ + $args \\ + --db ${vcf_dbs.join(',')} \\ + --query_vcf $vcf \\ + --prefix ${prefix} + cat <<-END_VERSIONS > versions.yml + "${task.process}": + svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_query.vcf + cat <<-END_VERSIONS > versions.yml + "${task.process}": + svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + END_VERSIONS + """ + +} diff --git a/modules/nf-core/modules/svdb/query/meta.yml b/modules/local/svdb/query/meta.yml similarity index 100% rename from modules/nf-core/modules/svdb/query/meta.yml rename to modules/local/svdb/query/meta.yml diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf deleted file mode 100644 index 12c67587..00000000 --- a/modules/nf-core/modules/svdb/query/main.nf +++ /dev/null @@ -1,50 +0,0 @@ -process SVDB_QUERY { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::svdb=2.5.0" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.5.0--py39hcbe4a3b_0': - 'quay.io/biocontainers/svdb:2.5.0--py39hcbe4a3b_0' }" - - input: - tuple val(meta), path(vcf), path(vcf_db), val(in_occ), val(in_frq), val(out_occ), val(out_frq) - - output: - tuple val(meta), path("*_ann_svdbq.vcf"), 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 input = "" - if(in_occ) { - input += "--in_occ ${in_occ} " - } - if(in_frq) { - input += "--in_frq ${in_frq} " - } - if(out_occ) { - input += "--out_occ ${out_occ} " - } - if(out_frq) { - input += "--out_frq ${out_frq} " - } - """ - svdb \\ - --query \\ - $args \\ - $input \\ - --db $vcf_db \\ - --query_vcf $vcf \\ - >${prefix}_ann_svdbq.vcf - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) - END_VERSIONS - """ -} diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index feaf9037..debe31bc 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,8 +2,7 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY as SVDB_QUERY_FILTER } from '../../modules/nf-core/modules/svdb/query/main' -include { SVDB_QUERY as SVDB_QUERY_NOFILTER } from '../../modules/nf-core/modules/svdb/query/main' +include { SVDB_QUERY } from '../../modules/local/svdb/query/main' // include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' @@ -19,27 +18,22 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { Channel.fromPath(sv_dbs) .splitCsv ( header:true ) - .branch { row -> - freq_filter: row.use_in_freq_filter == "1" - return [row.filename, - row.in_freq_info_key, - row.in_allele_count_info_key, - row.out_freq_info_key, - row.out_allele_count_info_key] - no_freq_filter: row.use_in_freq_filter == "0" - return [row.filename, - row.in_freq_info_key, - row.in_allele_count_info_key, - row.out_freq_info_key, - row.out_allele_count_info_key] + .multiMap { row -> + vcf_dbs: row.filename + in_frqs: row.in_freq_info_key + in_occs: row.in_allele_count_info_key + out_frqs: row.out_freq_info_key + out_occs: row.out_allele_count_info_key } .set { ch_svdb_dbs } - ch_input_filter = vcf.combine(ch_svdb_dbs.freq_filter).view() - ch_input_nofilter = vcf.combine(ch_svdb_dbs.no_freq_filter).view() - - SVDB_QUERY_FILTER(ch_input_filter) - SVDB_QUERY_NOFILTER(ch_input_nofilter) + SVDB_QUERY(vcf, + ch_svdb_dbs.in_frqs.toList(), + ch_svdb_dbs.in_occs.toList(), + ch_svdb_dbs.out_frqs.toList(), + ch_svdb_dbs.out_occs.toList(), + ch_svdb_dbs.vcf_dbs.toList() + ) emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] From f2d37637d773f33630d4ed00c69b6391b1ba870d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 13 Mar 2022 14:17:39 +0100 Subject: [PATCH 0310/1921] include picard sortvcf and bcftools view --- conf/modules.config | 6 ++ modules.json | 9 ++- modules/nf-core/modules/bcftools/view/main.nf | 44 +++++++++++++ .../nf-core/modules/bcftools/view/meta.yml | 63 +++++++++++++++++++ .../nf-core/modules/picard/sortvcf/main.nf | 49 +++++++++++++++ .../nf-core/modules/picard/sortvcf/meta.yml | 40 ++++++++++++ .../local/annotate_structural_variants.nf | 9 ++- workflows/raredisease.nf | 4 +- 8 files changed, 219 insertions(+), 5 deletions(-) create mode 100644 modules/nf-core/modules/bcftools/view/main.nf create mode 100644 modules/nf-core/modules/bcftools/view/meta.yml create mode 100644 modules/nf-core/modules/picard/sortvcf/main.nf create mode 100644 modules/nf-core/modules/picard/sortvcf/meta.yml diff --git a/conf/modules.config b/conf/modules.config index b2494a58..85665386 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -197,6 +197,12 @@ process { ] } withName: PICARD_SORTVCF { + publishDir = [ + enabled: false, + ] + } + withName: BCFTOOLS_VIEW { + exts.args = '--output-type v --apply-filters PASS --exclude "INFO/clinical_genomics_mipAF > 0.40 | INFO/swegenAF > 0.40 | INFO/clingen_ngiAF > 0.40 | INFO/gnomad_svAF > 0.40 "' publishDir = [ path: { "${params.outdir}/sv_annotate" }, mode: 'copy', diff --git a/modules.json b/modules.json index 925a5622..de283387 100644 --- a/modules.json +++ b/modules.json @@ -6,6 +6,9 @@ "bcftools/norm": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, + "bcftools/view": { + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + }, "bwamem2/index": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, @@ -57,6 +60,9 @@ "picard/markduplicates": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, + "picard/sortvcf": { + "git_sha": "d8028dc1c3ef64c2ee3494ce65d4f4a76c42bde9" + }, "qualimap/bamqc": { "git_sha": "e31f1ff3b1375b30db08637d8937e25cc046f3cc" }, @@ -75,9 +81,6 @@ "svdb/merge": { "git_sha": "ee915a43e405324e62ee5d4c14a6a6ec6c610058" }, - "svdb/query": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" - }, "tabix/bgziptabix": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf new file mode 100644 index 00000000..2a240f4a --- /dev/null +++ b/modules/nf-core/modules/bcftools/view/main.nf @@ -0,0 +1,44 @@ +process BCFTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : + 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" + + input: + tuple val(meta), path(vcf), path(index) + path(regions) + path(targets) + path(samples) + + output: + tuple val(meta), path("*.gz") , emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def regions_file = regions ? "--regions-file ${regions}" : "" + def targets_file = targets ? "--targets-file ${targets}" : "" + def samples_file = samples ? "--samples-file ${samples}" : "" + """ + bcftools view \\ + --output ${prefix}.vcf.gz \\ + ${regions_file} \\ + ${targets_file} \\ + ${samples_file} \\ + $args \\ + --threads $task.cpus \\ + ${vcf} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bcftools/view/meta.yml b/modules/nf-core/modules/bcftools/view/meta.yml new file mode 100644 index 00000000..326fd1fa --- /dev/null +++ b/modules/nf-core/modules/bcftools/view/meta.yml @@ -0,0 +1,63 @@ +name: bcftools_view +description: View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF +keywords: + - variant calling + - view + - bcftools + - VCF + +tools: + - view: + description: | + View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be inspected. + e.g. 'file.vcf' + - index: + type: file + description: | + The tab index for the VCF file to be inspected. + e.g. 'file.tbi' + - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. + e.g. 'file.vcf' + - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) + e.g. 'file.vcf' + - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF normalized output file + pattern: "*.{vcf.gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" diff --git a/modules/nf-core/modules/picard/sortvcf/main.nf b/modules/nf-core/modules/picard/sortvcf/main.nf new file mode 100644 index 00000000..0f10c1ab --- /dev/null +++ b/modules/nf-core/modules/picard/sortvcf/main.nf @@ -0,0 +1,49 @@ +process PICARD_SORTVCF { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + + input: + tuple val(meta), path(vcf) + path reference + path sequence_dict + + output: + tuple val(meta), path("*_sorted.vcf.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def seq_dict = sequence_dict ? "-SEQUENCE_DICTIONARY $sequence_dict" : "" + def reference = reference ? "-REFERENCE_SEQUENCE $reference" : "" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard SortVcf] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + + """ + picard \\ + SortVcf \\ + -Xmx${avail_mem}g \\ + --INPUT $vcf \\ + $args \\ + $seq_dict \\ + $reference \\ + --OUTPUT ${prefix}_sorted.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard SortVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/picard/sortvcf/meta.yml b/modules/nf-core/modules/picard/sortvcf/meta.yml new file mode 100644 index 00000000..a2b46d5a --- /dev/null +++ b/modules/nf-core/modules/picard/sortvcf/meta.yml @@ -0,0 +1,40 @@ +name: picard_sortvcf +description: Sorts vcf files +keywords: + - sort + - vcf +tools: + - picard: + description: Java tools for working with NGS data in the BAM/CRAM/SAM and VCF format + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/command-line-overview.html#SortVcf + licence: ['MIT'] + +input: + - 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" + - vcf: + type: file + description: Sorted VCF file + pattern: "*.{vcf}" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index debe31bc..9e4da7b5 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -5,13 +5,15 @@ include { SVDB_QUERY } from '../../modules/local/svdb/query/main' -// include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { take: vcf // channel: [ val(meta), path(vcf) ] sv_dbs // file: dbs.csv + fasta // file: genome.fasta + seq_dict // file: genome.dict main: ch_versions = Channel.empty() @@ -35,6 +37,11 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_svdb_dbs.vcf_dbs.toList() ) + PICARD_SORTVCF(SVDB_QUERY.out.vcf, + fasta, + seq_dict + ) + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7df2e4e6..9ae02ec3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -178,7 +178,9 @@ workflow RAREDISEASE { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, - file(params.svdb_query_dbs) + params.svdb_query_dbs, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.sequence_dict ) ch_versions = ch_versions.mix(ANNOTATE_STRUCTURAL_VARIANTS.out.versions) From 80fb668d9d4acb5388259307928d5f144c91dbbc Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 15 Mar 2022 09:43:54 +0100 Subject: [PATCH 0311/1921] Tries to use deepvariant with gens --- subworkflows/local/gens.nf | 7 ++----- workflows/raredisease.nf | 27 ++++++++++++++------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 029c7f15..5f7b0616 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -4,12 +4,12 @@ include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/local/gatk4/collectreadcounts/main' include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/local/gatk4/denoisereadcounts/main' -include { GATK4_HAPLOTYPECALLER as HAPLOTYPECALLER } from '../../modules/nf-core/modules/gatk4/haplotypecaller/main' include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' workflow GENS { take: bam // channel: [ val(meta), path(bam), path(bai) ] + vcf // channel: [ val(meta), path(vcf) ] fasta // path(fasta) fai // path(fai) interval_list // path(interval_list) @@ -27,16 +27,13 @@ workflow GENS { bam.view() ch_bam.view() - HAPLOTYPECALLER ( ch_bam, fasta, fai, seq_dict, [], [] ) - ch_versions = ch_versions.mix(HAPLOTYPECALLER.out.versions) - COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions) - GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, HAPLOTYPECALLER.out.vcf, gnomad_pos ) + GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, vcf, gnomad_pos ) ch_versions = ch_versions.mix(GENS_GENERATE.out.versions) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a5cf5445..c19b9acf 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -152,19 +152,6 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) - // STEP 1.7: GENS - GENS ( - ch_marked_bam.join(ch_marked_bai, by: [0]), - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, - file(params.gens_interval_list), - file(params.gens_pon), - file(params.gens_gnomad_pos), - INPUT_CHECK.out.ch_case_info, - PREPARE_GENOME.out.sequence_dict - ) - ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) - // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV_DEEPVARIANT ( @@ -185,6 +172,20 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) + // STEP 2.1: GENS + GENS ( + ch_marked_bam.join(ch_marked_bai, by: [0]), + CALL_SNV_DEEPVARIANT.out.vcf, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + file(params.gens_interval_list), + file(params.gens_pon), + file(params.gens_gnomad_pos), + INPUT_CHECK.out.ch_case_info, + PREPARE_GENOME.out.sequence_dict + ) + ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) + // // MODULE: Pipeline reporting // From d0909643709f890d4336d05cd2bd73f1484b59ce Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 15 Mar 2022 10:01:42 +0100 Subject: [PATCH 0312/1921] Attempts fix --- modules/local/gens/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index d2caf303..664cee13 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -9,12 +9,12 @@ process GENS { input: tuple val(meta), path(read_counts) - path vcf + tuple val(meta_vcf), path(vcf) path gnomad_positions output: tuple val(meta), path('*.cov.bed.gz'), emit: cov - tuple val(meta), path('*.baf.bed.gz'), emit: baf + tuple val(meta_vcf), path('*.baf.bed.gz'), emit: baf path "versions.yml" , emit: versions script: From 28c0c73bd0a5347b6f5f19582b8b7d04285eac41 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 15 Mar 2022 10:27:01 +0100 Subject: [PATCH 0313/1921] Fixes order of arguments to generate_gens_data.pl --- modules/local/gens/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 664cee13..f1d22838 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -27,8 +27,8 @@ process GENS { } """ generate_gens_data.pl \\ - $vcf \\ $read_counts \\ + $vcf \\ $prefix \\ $gnomad_positions From 2fdb58199f77b48111995fb357159c5d29540d96 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 11:43:22 +0100 Subject: [PATCH 0314/1921] using -revision dev --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1d718fdd..645cc744 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ The different steps and corresponding tools are represented in the flowchart bel 3. Download the pipeline and test it on a minimal dataset with a single command: ```console - nextflow run nf-core/raredisease -profile test,YOURPROFILE + nextflow run nf-core/raredisease -revision dev -profile test,YOURPROFILE ``` Note that some form of configuration will be needed so that Nextflow knows how to fetch the required software. This is usually done in the form of a config profile (`YOURPROFILE` in the example command above). You can chain multiple config profiles in a comma-separated string. @@ -58,10 +58,11 @@ The different steps and corresponding tools are represented in the flowchart bel 4. Start running your own analysis! - - ```console - nextflow run nf-core/raredisease -profile --input samplesheet.csv --genome GRCh37 + nextflow run nf-core/raredisease \ + --input samplesheet.csv --genome GRCh38 \ + -revision dev \ + -profile ``` ## Documentation From 8cacbd1591c768640efa88b2a195b7f7f399d73b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Mar 2022 12:07:10 +0100 Subject: [PATCH 0315/1921] make the subworkflow optional --- conf/genomes.config | 2 +- conf/test.config | 2 +- workflows/raredisease.nf | 18 +++++++++++------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index c05f375e..6c60010b 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -26,7 +26,7 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" + svdb_query_dbs = "" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" diff --git a/conf/test.config b/conf/test.config index b46c825b..617aefca 100644 --- a/conf/test.config +++ b/conf/test.config @@ -29,7 +29,7 @@ params { fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' // Structural variant annotation databases - svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" + svdb_query_dbs = "" // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9ae02ec3..b262e885 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -176,13 +176,17 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) - ANNOTATE_STRUCTURAL_VARIANTS ( - CALL_STRUCTURAL_VARIANTS.out.vcf, - params.svdb_query_dbs, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.sequence_dict - ) - ch_versions = ch_versions.mix(ANNOTATE_STRUCTURAL_VARIANTS.out.versions) + ch_sv_annotate = Channel.empty() + if (params.svdb_query_dbs) { + ANNOTATE_STRUCTURAL_VARIANTS ( + CALL_STRUCTURAL_VARIANTS.out.vcf, + params.svdb_query_dbs, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.sequence_dict + ).set {ch_sv_annotate} + + ch_versions = ch_versions.mix(ch_sv_annotate.versions) + } // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) From 6c77dd78e1391c6028ba71411c5995667c90fe8f Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:09:58 +0100 Subject: [PATCH 0316/1921] analysis_type --- README.md | 3 +++ conf/wes.config | 2 +- nextflow_schema.json | 9 +++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 645cc744..1c4907ec 100644 --- a/README.md +++ b/README.md @@ -61,10 +61,13 @@ The different steps and corresponding tools are represented in the flowchart bel ```console nextflow run nf-core/raredisease \ --input samplesheet.csv --genome GRCh38 \ + --analysis_type \ # WGS is default -revision dev \ -profile ``` +Note that the `-revision` is used because pipeline is still under development and the latest working branch is dev. + ## Documentation The nf-core/raredisease pipeline comes with documentation about the pipeline [usage](https://nf-co.re/raredisease/usage), [parameters](https://nf-co.re/raredisease/parameters) and [output](https://nf-co.re/raredisease/output). diff --git a/conf/wes.config b/conf/wes.config index a5c239d2..b056190d 100644 --- a/conf/wes.config +++ b/conf/wes.config @@ -2,7 +2,7 @@ ======================================================================================== nf-core/raredisease Nextflow whole-exome sequencing (WES) config file ======================================================================================== - This config file is invoked when `--analysis_type` = 'WES'. + This config file is invoked when `--analysis_type` = 'wes'. The purpose is to reduce the amount of resources used compared to WGS data. ---------------------------------------------------------------------------------------- */ diff --git a/nextflow_schema.json b/nextflow_schema.json index 20bbbf55..8e044ca6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -149,12 +149,13 @@ "properties": { "analysis_type": { "type": "string", - "default": "WGS", - "description": "Specifies which analysis type for the pipeline- either 'WGS' or 'WES'. It'll mainly change the resources consumed.", + "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" + "wgs", + "wes", + "mito" ] } } From f1b72a554511f7df36f9bf6b83945c5cf028c3d3 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:12:37 +0100 Subject: [PATCH 0317/1921] spellcheck args --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c4907ec..31cd6b3d 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ The different steps and corresponding tools are represented in the flowchart bel ```console nextflow run nf-core/raredisease \ --input samplesheet.csv --genome GRCh38 \ - --analysis_type \ # WGS is default + --analysis_type \ # WGS is default -revision dev \ -profile ``` From 76877a30d4703e87ac90e23caaf979404dd5a62d Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:13:45 +0100 Subject: [PATCH 0318/1921] spellcheck v1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31cd6b3d..0726b455 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ The different steps and corresponding tools are represented in the flowchart bel ```console nextflow run nf-core/raredisease \ --input samplesheet.csv --genome GRCh38 \ - --analysis_type \ # WGS is default + --analysis_type \ # wgs is default -revision dev \ -profile ``` From 861c49350cd2710129766221828f970619393b7f Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:21:03 +0100 Subject: [PATCH 0319/1921] fix workflow fail --- nextflow.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nextflow.config b/nextflow.config index 24d1c0b1..f26760d4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -20,7 +20,7 @@ params { save_reference = false // Main options - analysis_type = 'WGS' + analysis_type = 'wgs' // Alignment aligner = 'bwamem2' @@ -141,8 +141,8 @@ if (params.local_config_path) { includeConfig "${params.local_config_path}" } -// Load wes.config if --analysis_type='WES' -if (params.analysis_type == 'WES') { +// Load wes.config if --analysis_type='wes' +if (params.analysis_type == 'wes') { includeConfig 'conf/wes.config' } From 5c16db035dbd0ad2681595414c7a5428f05ab3b8 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:45:01 +0100 Subject: [PATCH 0320/1921] removed todo in credits --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 0726b455..dfb6b4df 100644 --- a/README.md +++ b/README.md @@ -76,9 +76,7 @@ The nf-core/raredisease pipeline comes with documentation about the pipeline [us nf-core/raredisease was originally written by Clinical Genomics Stockholm. -We thank the following people for their extensive assistance in the development of this pipeline: - - +Big thanks to the contributors for their extensive assistance in the development of this pipeline. ## Contributions and Support From 87b5de321e0ff58fe54aaa12df7990422eac1960 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:53:59 +0100 Subject: [PATCH 0321/1921] fix letter case issue --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index c1f06027..25a2017a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -115,7 +115,7 @@ process { } // CALL_SNV_DEEPVARIANT withName: DEEPVARIANT { - ext.args = "--model_type=$params.analysis_type" + ext.args = { "--model_type=${params.analysis_type}.toUpperCase()" } ext.prefix = { "${meta.id}_deepvar" } publishDir = [ path: { "${params.outdir}/deepvariant" }, From 7eb5d40fbd9957ff003e99620722a99de2499003 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:55:32 +0100 Subject: [PATCH 0322/1921] rm comment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0726b455..b8c841bc 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ The different steps and corresponding tools are represented in the flowchart bel ```console nextflow run nf-core/raredisease \ --input samplesheet.csv --genome GRCh38 \ - --analysis_type \ # wgs is default + --analysis_type \ -revision dev \ -profile ``` From 03f5bb939b99ad33ff0077cf6de663fcce67751d Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 15:15:52 +0100 Subject: [PATCH 0323/1921] final fix on character case --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 25a2017a..bd982791 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -115,7 +115,7 @@ process { } // CALL_SNV_DEEPVARIANT withName: DEEPVARIANT { - ext.args = { "--model_type=${params.analysis_type}.toUpperCase()" } + ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } ext.prefix = { "${meta.id}_deepvar" } publishDir = [ path: { "${params.outdir}/deepvariant" }, From fddc52bddb99f52feddc87bbf263018076be0934 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 15:21:32 +0100 Subject: [PATCH 0324/1921] woops merged the wrong branches --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2535fc8b..b8c841bc 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,9 @@ The nf-core/raredisease pipeline comes with documentation about the pipeline [us nf-core/raredisease was originally written by Clinical Genomics Stockholm. -Big thanks to the contributors for their extensive assistance in the development of this pipeline. +We thank the following people for their extensive assistance in the development of this pipeline: + + ## Contributions and Support From ebf0ec97d49637d83fce357bf345c838ddec743b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 16 Mar 2022 15:23:40 +0100 Subject: [PATCH 0325/1921] final fix --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index b8c841bc..2535fc8b 100644 --- a/README.md +++ b/README.md @@ -76,9 +76,7 @@ The nf-core/raredisease pipeline comes with documentation about the pipeline [us nf-core/raredisease was originally written by Clinical Genomics Stockholm. -We thank the following people for their extensive assistance in the development of this pipeline: - - +Big thanks to the contributors for their extensive assistance in the development of this pipeline. ## Contributions and Support From eaac692054e2aabb31042d6c9805b23e593fc695 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Mar 2022 15:25:24 +0100 Subject: [PATCH 0326/1921] update samplesheet check --- 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 5473b624..bad81c36 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -180,7 +180,7 @@ def check_samplesheet(file_in, file_out): https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv """ - required_columns = {"sample", "fastq_1", "fastq_2"} + required_columns = {"sample", "lane", "fastq_1", "fastq_2", "gender", "phenotype", "paternal_id", "maternal_id", "case_id"} # See https://docs.python.org/3.9/library/csv.html#id3 to read up on `newline=""`. with file_in.open(newline="") as in_handle: reader = csv.DictReader(in_handle, dialect=sniff_format(in_handle)) From 1a9a359fab5ac8614371bd51d7fb8f7498b45406 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Mar 2022 16:09:49 +0100 Subject: [PATCH 0327/1921] update files_unchanged --- .nf-core.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.nf-core.yml b/.nf-core.yml index 3805dc81..a6868bcb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1 +1,10 @@ +lint: + files_unchanged: + - .github/CONTRIBUTING.md + - .github/ISSUE_TEMPLATE/bug_report.yml + - .github/PULL_REQUEST_TEMPLATE.md + - assets/multiqc_config.yaml + - .github/workflows/linting.yml + - .github/workflows/linting_comment.yml + - .github/workflows/branch.yml repository_type: pipeline From 2fd41e531f39b64f919ac4aa00fcb47452691030 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Mar 2022 17:05:04 +0100 Subject: [PATCH 0328/1921] fix typo --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 451297e5..ea0052df 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,7 +19,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). -- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker` --outdir -stub`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir -stub`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. From 237dcd30939ffced84e3698268853dc8cc11f8d6 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 17 Mar 2022 11:11:22 +0100 Subject: [PATCH 0329/1921] updates the usage.md file with info on samplesheet --- docs/usage.md | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 97588b8b..58903feb 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,7 +10,7 @@ ## Samplesheet input -You will need to create a samplesheet with information about the samples you would like to analyse 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 as shown in the examples below. +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 9 columns, and a header row as shown in the examples below. ```console --input '[path to samplesheet file]' @@ -18,37 +18,31 @@ You will need to create a samplesheet with information about the samples you wou ### Multiple runs of the same sample -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: +The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across 2 lanes: -```console -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz -``` - -### Full samplesheet - -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. - -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. + ```console -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +sample,lane,fastq_1,fastq_2,gender,phenotype,paternal_id,maternal_id,case_id +AEG588A1,2,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,1,2,AEG588A3,AEG588A2,fam_1 +AEG588A1,3,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,1,2,AEG588A3,AEG588A2,fam_1 +AEG588A2,4,AEG588A2_S1_L004_R1_001.fastq.gz,AEG588A2_S1_L004_R2_001.fastq.gz,2,1,,,fam_1 +AEG588A3,4,AEG588A3_S1_L004_R1_001.fastq.gz,AEG588A3_S1_L004_R2_001.fastq.gz,1,1,,,fam_1 ``` +The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information (sex/gender and phenotype) should be provided using the ped file format way of annotating. + | Column | Description | |----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `lane` | Used to generate seperate channels during the alignment step | | `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `gender` | Sex (1=male; 2=female; other=unknown) | +| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected) | +| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for other samples than the proband. | +| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for other samples than the proband. | +| `case_id` | Case ID, for the analysis used when generating a family VCF | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. From e59b28ca6bb41081f20846b06751160416cce8e8 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Thu, 17 Mar 2022 14:28:23 +0100 Subject: [PATCH 0330/1921] edited local_genomes param --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index bc033c53..f0c820a9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -137,8 +137,8 @@ "type": "string", "format": "directory-path", "fa_icon": "fas fa-map-marker-alt", - "description": "Local directory base for genomes references.", - "help_text": "All files are supposed to be in the same folder defining a flat structure" + "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." } } }, From 22ee70dcc1edaba578ae0bebd45e92a10de5bbd4 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 17 Mar 2022 16:06:24 +0100 Subject: [PATCH 0331/1921] addressing comments from review --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 58903feb..8e441f73 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -30,7 +30,7 @@ AEG588A2,4,AEG588A2_S1_L004_R1_001.fastq.gz,AEG588A2_S1_L004_R2_001.fastq.gz,2,1 AEG588A3,4,AEG588A3_S1_L004_R1_001.fastq.gz,AEG588A3_S1_L004_R2_001.fastq.gz,1,1,,,fam_1 ``` -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information (sex/gender and phenotype) should be provided using the ped file format way of annotating. +The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). | Column | Description | |----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| From 7d5c0c5ba99edf0be8490d66ea09851a8fab6d3b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Thu, 17 Mar 2022 16:14:17 +0100 Subject: [PATCH 0332/1921] steps --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e6173665..4ba4d920 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,15 @@ On release, automated continuous integration tests run the pipeline on a full-si -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Map reads to reference ([`BWA mem`](http://bio-bwa.sourceforge.net/bwa.shtml), `BWA mem2`) with the option to ([`merge`](http://www.htslib.org/doc/samtools-merge.html)) -3. Mark duplicated reads ([`GATK4 MarkDuplicates`](https://gatk.broadinstitute.org/hc/en-us/articles/360037052812-MarkDuplicates-Picard-)) -4. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) -5. Variant calling ([deepvariant](https://github.com/google/deepvariant) and [glnexus](https://github.com/dnanexus-rnd/GLnexus)) +1. Metrics: FastQC, MultiQC + +2. Data preprocessing: FastQC, bwamem2 (can merge), MarkDuplicates, + +3. Variant discovery: + +4. Annotation + aggregation: VCFanno, + +5. Variant ranking: The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From f17a220a4deca592453a260e9935eb6131083a05 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 10:20:15 +0100 Subject: [PATCH 0333/1921] rm after spaces --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 4ba4d920..deb16aec 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,9 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Metrics: FastQC, MultiQC - 2. Data preprocessing: FastQC, bwamem2 (can merge), MarkDuplicates, - 3. Variant discovery: - 4. Annotation + aggregation: VCFanno, - 5. Variant ranking: The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 59fb75757a0d50d04018b797101d73a731518037 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 10:24:27 +0100 Subject: [PATCH 0334/1921] added hyperlinks --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index deb16aec..fcccb4d7 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ On release, automated continuous integration tests run the pipeline on a full-si -1. Metrics: FastQC, MultiQC -2. Data preprocessing: FastQC, bwamem2 (can merge), MarkDuplicates, +1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) +2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), 3. Variant discovery: -4. Annotation + aggregation: VCFanno, +4. Annotation + aggregation: [`VCFanno`](https://github.com/brentp/vcfanno), 5. Variant ranking: The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 0e5f99041113e8bfe7ed8c5ab40d221be21122d0 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 10:32:56 +0100 Subject: [PATCH 0335/1921] sub-lists for snvs --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fcccb4d7..ff779449 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,11 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), -3. Variant discovery: -4. Annotation + aggregation: [`VCFanno`](https://github.com/brentp/vcfanno), +3. Variant calling + aggregation: + 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) + 2. SVs: [`TIDDIT`](https://github.com/SciLifeLab/TIDDIT), +4. Annotation: + 1. SNVs: [`VCFanno`](https://github.com/brentp/vcfanno), 5. Variant ranking: The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 16cdf22540d32ee08074ed89e78b28612b6e1af6 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 11:06:46 +0100 Subject: [PATCH 0336/1921] separated pipeline summary --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ff779449..00be42f0 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,14 @@ On release, automated continuous integration tests run the pipeline on a full-si 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), 3. Variant calling + aggregation: 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) - 2. SVs: [`TIDDIT`](https://github.com/SciLifeLab/TIDDIT), -4. Annotation: - 1. SNVs: [`VCFanno`](https://github.com/brentp/vcfanno), + 2. SVs: [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), +4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) + 1. SNVs: + 2. SVs: + 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote) + +>Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) + 5. Variant ranking: The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 627ac1c5164a2269865108e599d15d374590c221 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 11:07:05 +0100 Subject: [PATCH 0337/1921] rm todo line --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 00be42f0..e5401552 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,6 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary - - 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), 3. Variant calling + aggregation: From ae965b4802d56e5b0d223fd1029b65973d5517c7 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 11:08:14 +0100 Subject: [PATCH 0338/1921] fix format --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5401552..c7db1fde 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 2. SVs: 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote) ->Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) +> Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) 5. Variant ranking: From 8c547ed1b1373273dba0a21e2ab6eedd67db7c03 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 11:11:30 +0100 Subject: [PATCH 0339/1921] added more sv tools --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c7db1fde..89a256f1 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), -3. Variant calling + aggregation: +3. Variant calling + multiple calls are aggregated: 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) - 2. SVs: [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), + 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) 1. SNVs: 2. SVs: From ce9aff0b65d3ed4e10050fbd9ae330252288f69b Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 11:13:15 +0100 Subject: [PATCH 0340/1921] fix lint --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 89a256f1..6d334540 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,9 @@ On release, automated continuous integration tests run the pipeline on a full-si 2. SVs: 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote) -> Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) +5. Variant ranking: something will be here -5. Variant ranking: +> Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 897fe0f0b722a4285bb9609ee313650509d5b747 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 15:22:40 +0100 Subject: [PATCH 0341/1921] applying suggestions --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6d334540..a9698e43 100644 --- a/README.md +++ b/README.md @@ -26,15 +26,16 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) -2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), +2. Data preprocessing: [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), + 1. [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), 3. Variant calling + multiple calls are aggregated: 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), + 3. Mitochondria: [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) 1. SNVs: 2. SVs: - 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote) - + 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote), [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), 5. Variant ranking: something will be here > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) From ec6c3b11a6bb9b698a487d2d460e5a26b5b69cd5 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 15:25:26 +0100 Subject: [PATCH 0342/1921] applying suggestions v2 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a9698e43..50fdf148 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,9 @@ On release, automated continuous integration tests run the pipeline on a full-si 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), 3. Mitochondria: [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) - 1. SNVs: + 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) 2. SVs: - 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote), [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), + 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote), [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna) 5. Variant ranking: something will be here > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) From c3425958262274b540f8ab989395f0af0b9dc61c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 15:26:52 +0100 Subject: [PATCH 0343/1921] reformat --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 50fdf148..afaeec6e 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,7 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) -2. Data preprocessing: [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), - 1. [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), +2. Data preprocessing: [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), 3. Variant calling + multiple calls are aggregated: 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), From 37ac4cd90036c830c3591511004ad3c37f1934b1 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Fri, 18 Mar 2022 16:42:20 +0100 Subject: [PATCH 0344/1921] using publish_dir_mode param --- conf/modules.config | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f27c5149..50f53e4d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -31,7 +31,7 @@ process { withName: BWAMEM2_INDEX { publishDir = [ path: { "${params.outdir}/references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.save_reference, pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" @@ -40,7 +40,7 @@ process { withName: SAMTOOLS_FAIDX { publishDir = [ path: { "${params.outdir}/references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.save_reference, pattern: "*fai" @@ -74,21 +74,21 @@ process { ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ path: { "${params.outdir}/processed_references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } withName: TABIX_PV { publishDir = [ path: { "${params.outdir}/processed_references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } withName: 'TABIX_PT|TABIX_PBT' { publishDir = [ path: { "${params.outdir}/processed_references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -96,7 +96,7 @@ process { ext.prefix = { "${meta.id}_target" } publishDir = [ path: { "${params.outdir}/processed_references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -109,7 +109,7 @@ process { withName: 'CAT_CAT_BAIT' { publishDir = [ path: { "${params.outdir}/processed_references" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -119,7 +119,7 @@ process { ext.prefix = { "${meta.id}_deepvar" } publishDir = [ path: { "${params.outdir}/deepvariant" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -134,7 +134,7 @@ process { ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ path: { "${params.outdir}/glnexus" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -147,7 +147,7 @@ process { withName: TABIX_GL { publishDir = [ path: { "${params.outdir}/glnexus" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -155,7 +155,7 @@ process { withName: EXPANSIONHUNTER { publishDir = [ path: { "${params.outdir}/expansionhunter" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -163,7 +163,7 @@ process { withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA" { publishDir = [ path: { "${params.outdir}/sv_caller" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -171,7 +171,7 @@ process { ext.args = '-p 6' publishDir = [ path: { "${params.outdir}/sv_caller" }, - mode: 'copy', + mode: params.publish_dir_mode, ] } withName: SVDB_MERGE_TIDDIT { @@ -179,7 +179,7 @@ process { ext.prefix = 'tiddit' publishDir = [ path: { "${params.outdir}/sv_caller" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -187,7 +187,7 @@ process { ext.args = '--pass_only' publishDir = [ path: { "${params.outdir}/sv_caller" }, - mode: 'copy', + mode: params.publish_dir_mode, ] } // NF-CORE Subworkflows @@ -208,7 +208,7 @@ process { withName: SAMTOOLS_INDEX_MD { publishDir = [ path: { "${params.outdir}/markduplicates" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -216,7 +216,7 @@ process { ext.args = '-s --remove-overlaps' publishDir = [ path: { "${params.outdir}/samtools" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -230,7 +230,7 @@ process { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ path: { "${params.outdir}/markduplicates" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -238,7 +238,7 @@ process { withName: "VCFANNO" { publishDir = [ path: { "${params.outdir}/variant_annotation" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -246,7 +246,7 @@ process { withName: '.*COLLECTMULTIPLEMETRICS' { publishDir = [ path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -260,7 +260,7 @@ process { ext.args = '-z 500 -w -u' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -268,7 +268,7 @@ process { ext.args = '-clip' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -276,7 +276,7 @@ process { ext.args = '--d4' publishDir = [ path: { "${params.outdir}/mosdepth" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } From da8c2f5eccc2aa2c715909f6de17ae88f1da7772 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 20 Mar 2022 01:56:07 +0100 Subject: [PATCH 0345/1921] align --- subworkflows/local/input_check.nf | 27 ++++---- subworkflows/local/prepare_bed.nf | 8 +-- subworkflows/local/prepare_genome.nf | 13 ++-- subworkflows/local/prepare_vcf.nf | 61 ++++++++--------- subworkflows/nf-core/align_bwamem2.nf | 10 +-- subworkflows/nf-core/call_snv_deepvariant.nf | 20 +++--- .../call_structural_variants.nf | 12 ++-- .../{local => nf-core}/call_sv_manta.nf | 14 ++-- .../{local => nf-core}/call_sv_tiddit.nf | 13 ++-- workflows/raredisease.nf | 65 +++++++++++-------- 10 files changed, 128 insertions(+), 115 deletions(-) rename subworkflows/{local => nf-core}/call_structural_variants.nf (84%) rename subworkflows/{local => nf-core}/call_sv_manta.nf (83%) rename subworkflows/{local => nf-core}/call_sv_tiddit.nf (70%) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index c2cfb53f..28e63db9 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -6,25 +6,24 @@ include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' workflow INPUT_CHECK { take: - samplesheet // file: /path/to/samplesheet.csv + samplesheet // file: /path/to/samplesheet.csv main: - SAMPLESHEET_CHECK ( samplesheet ) - .csv - .splitCsv ( header:true, sep:',' ) - .set { sheet } + SAMPLESHEET_CHECK ( samplesheet ) + .csv + .splitCsv ( header:true, sep:',' ) + .set { sheet } - ch_case_info = sheet.first() - .map { create_case_channel(it) } - reads = sheet.map { create_fastq_channel(it) } - samples = sheet.map { create_samples_channel(it) } + ch_case_info = sheet.first() + .map { create_case_channel(it) } + reads = sheet.map { create_fastq_channel(it) } + samples = sheet.map { create_samples_channel(it) } emit: - ch_case_info // channel: [ case_id ] - reads // channel: [ val(meta), [ reads ] ] - samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] - - versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] + ch_case_info // channel: [ case_id ] + reads // channel: [ val(meta), [ reads ] ] + samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] + versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index c706f50d..4eacc031 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -3,9 +3,9 @@ // include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/modules/gatk4/bedtointervallist/main' -include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/modules/gatk4/intervallisttools/main' -include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' -include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' +include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/modules/gatk4/intervallisttools/main' +include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' +include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' workflow CHECK_BED { take: @@ -31,7 +31,7 @@ workflow CHECK_BED { } emit: - bed = tab_out + bed = tab_out target_intervals = interval_list.collect{it[1]} bait_intervals = GATK_ILT.out.interval_list.collect{it[1]} } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 2477325d..9fc44a1c 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,13 +2,11 @@ // Prepare reference genome files // -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/modules/untar/main' - -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' - -include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD} from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' -include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/modules/untar/main' +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' +include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' workflow PREPARE_GENOME { take: @@ -69,6 +67,5 @@ workflow PREPARE_GENOME { sequence_dict = ch_sequence_dict variant_catalog = ch_variant_catalog // path: variant_catalog.json vcfanno_resources = ch_vcfanno_resources // channel: [ untar'd files, ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 0fc8471a..895cefcc 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -3,41 +3,42 @@ // include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../modules/nf-core/modules/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../modules/nf-core/modules/bcftools/norm/main' -include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' -include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/modules/tabix/tabix/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../modules/nf-core/modules/bcftools/norm/main' +include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/modules/tabix/tabix/main' +include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' workflow CHECK_VCF { take: - vcf // file: vcf file - fasta // path(fasta) + vcf // file: vcf file + fasta // path(fasta) main: - vcf_file = file(vcf) - CHECK_INPUT_VCF( vcf_file ) - .splitCsv( header:true ) - .map { row -> - def id = "${row.id}" - def filepath = "${row.filepath}" - def processed = "${row.processed}" - tuple(id,filepath,processed) - } - .branch { id, filepath, processed -> - processed: processed == 'yes' - return [['id':id],filepath] - unprocessed: processed == 'no' - return [['id':id],filepath] - } - .set { ch_vcfs_norm } - - SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) - - REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta).vcf - .set { ch_vcfs_rmdup } - - vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) - - TABIX_PV (vcf_out) + vcf_file = file(vcf) + CHECK_INPUT_VCF( vcf_file ) + .splitCsv( header:true ) + .map { row -> + def id = "${row.id}" + def filepath = "${row.filepath}" + def processed = "${row.processed}" + tuple(id,filepath,processed) + } + .branch { id, filepath, processed -> + processed: processed == 'yes' + return [['id':id],filepath] + unprocessed: processed == 'no' + return [['id':id],filepath] + } + .set { ch_vcfs_norm } + + SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) + + REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta) + .vcf + .set { ch_vcfs_rmdup } + + vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) + + TABIX_PV (vcf_out) emit: vcf = vcf_out // path: normalized_vcf diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 98cfec62..e99c3575 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -2,11 +2,11 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' -include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' +include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' +include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' diff --git a/subworkflows/nf-core/call_snv_deepvariant.nf b/subworkflows/nf-core/call_snv_deepvariant.nf index efcbd495..e6ec6c4b 100644 --- a/subworkflows/nf-core/call_snv_deepvariant.nf +++ b/subworkflows/nf-core/call_snv_deepvariant.nf @@ -3,17 +3,17 @@ // include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/modules/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' -include { DEEPVARIANT } from '../../modules/nf-core/modules/deepvariant/main' -include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' -include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' +include { DEEPVARIANT } from '../../modules/nf-core/modules/deepvariant/main' +include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' +include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' workflow CALL_SNV_DEEPVARIANT { take: bam // channel: [ val(meta), path(bam), path(bai) ] fasta // path(fasta) fai // path(fai) - ch_case_info // channel: [ case_id ] + case_info // channel: [ case_id ] main: ch_versions = Channel.empty() @@ -23,14 +23,17 @@ workflow CALL_SNV_DEEPVARIANT { .set { ch_bam } DEEPVARIANT ( ch_bam, fasta, fai ) - DEEPVARIANT.out.gvcf.collect{it[1]} + DEEPVARIANT.out + .gvcf + .collect{it[1]} .toList() .set { file_list } ch_versions = ch_versions.mix(DEEPVARIANT.out.versions) - //Combine case meta with the list of gvcfs - ch_case_info.combine(file_list) + case_info + .combine(file_list) .set { ch_gvcfs } + GLNEXUS ( ch_gvcfs ) ch_versions = ch_versions.mix(GLNEXUS.out.versions) @@ -44,6 +47,5 @@ workflow CALL_SNV_DEEPVARIANT { emit: vcf = REMOVE_DUPLICATES_GL.out.vcf tabix = TABIX_GL.out.tbi - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf similarity index 84% rename from subworkflows/local/call_structural_variants.nf rename to subworkflows/nf-core/call_structural_variants.nf index ae24e21f..d781d04f 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -2,11 +2,9 @@ // A nested subworkflow to call structural variants. // -include { CALL_SV_MANTA } from './call_sv_manta' - +include { CALL_SV_MANTA } from './call_sv_manta' include { CALL_SV_TIDDIT } from './call_sv_tiddit' - -include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' +include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -22,13 +20,15 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = Channel.empty() //manta - CALL_SV_MANTA ( bam, bai, fasta, fai, case_info, target_bed ).diploid_sv_vcf + CALL_SV_MANTA ( bam, bai, fasta, fai, case_info, target_bed ) + .diploid_sv_vcf .collect{it[1]} .set{ manta_vcf } ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) //tiddit - CALL_SV_TIDDIT ( bam, fasta, fai, case_info ).vcf + CALL_SV_TIDDIT ( bam, fasta, fai, case_info ) + .vcf .collect{it[1]} .set { tiddit_vcf } ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) diff --git a/subworkflows/local/call_sv_manta.nf b/subworkflows/nf-core/call_sv_manta.nf similarity index 83% rename from subworkflows/local/call_sv_manta.nf rename to subworkflows/nf-core/call_sv_manta.nf index 76460fa4..24e0a7eb 100644 --- a/subworkflows/local/call_sv_manta.nf +++ b/subworkflows/nf-core/call_sv_manta.nf @@ -10,8 +10,8 @@ workflow CALL_SV_MANTA { bai // channel: [ val(meta), path(bai) ] fasta // path(fasta) fai // path(fai) - ch_case_info // channel: [ case_id ] - ch_bed // channel: [ val(meta), path(bed), path(bed_tbi) ] + case_info // channel: [ case_id ] + bed // channel: [ val(meta), path(bed), path(bed_tbi) ] main: bam.collect{it[1]} @@ -22,13 +22,15 @@ workflow CALL_SV_MANTA { .toList() .set { bai_file_list } - ch_case_info.combine(bam_file_list) + case_info.combine(bam_file_list) .combine(bai_file_list) .set { manta_input_bams } - bed_input = ch_bed.map{ id, bed, index -> - return [bed, index] - } + bed + .map { + id, bed_file, index -> + return [bed_file, index]} + .set { bed_input } if (params.analysis_type == "WGS") { MANTA ( manta_input_bams, fasta, fai, [[],[]] ) diff --git a/subworkflows/local/call_sv_tiddit.nf b/subworkflows/nf-core/call_sv_tiddit.nf similarity index 70% rename from subworkflows/local/call_sv_tiddit.nf rename to subworkflows/nf-core/call_sv_tiddit.nf index 6d234d3b..de89e2d8 100644 --- a/subworkflows/local/call_sv_tiddit.nf +++ b/subworkflows/nf-core/call_sv_tiddit.nf @@ -11,23 +11,26 @@ workflow CALL_SV_TIDDIT { bam // channel: [ val(meta), path(bam) ] fasta // path(fasta) fai // path(fai) - ch_case_info // channel: [ case_id ] + case_info // channel: [ case_id ] main: TIDDIT_SV ( bam, fasta, fai ) ch_versions = TIDDIT_SV.out.versions - TIDDIT_SV.out.vcf.collect{it[1]} + TIDDIT_SV.out + .vcf + .collect{it[1]} .toList() .set { vcf_file_list } - ch_case_info.combine(vcf_file_list) + case_info + .combine(vcf_file_list) .set { merge_input_vcfs } SVDB_MERGE_TIDDIT ( merge_input_vcfs, [] ) ch_versions = ch_versions.mix(SVDB_MERGE_TIDDIT.out.versions) emit: - vcf = SVDB_MERGE_TIDDIT.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = SVDB_MERGE_TIDDIT.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 25b208dd..5c555fd0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -11,8 +11,12 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ - params.input, params.multiqc_config, params.fasta, - params.bwamem2_index, params.fasta_fai, params.gnomad, + params.bwamem2_index, + params.fasta, + params.fasta_fai, + params.gnomad, + params.input, + params.multiqc_config, params.vcfanno_resources ] @@ -39,9 +43,11 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' -include { CHECK_BED } from '../subworkflows/local/prepare_bed' +include { INPUT_CHECK } from '../subworkflows/local/input_check' +include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' +include { CHECK_BED } from '../subworkflows/local/prepare_bed' +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -61,19 +67,13 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' - -include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' -// -// SUBWORKFLOW: Consists of mix/local modules -// - -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' +include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -103,14 +103,19 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. - PREPARE_GENOME ( params.fasta, params.variant_catalog ) + PREPARE_GENOME ( + params.fasta, + params.variant_catalog + ) ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) ch_gnomad = Channel.empty() if (params.gnomad) { CHECK_VCF( - params.gnomad, PREPARE_GENOME.out.fasta, - ).set { ch_gnomad } + params.gnomad, + PREPARE_GENOME.out.fasta + ) + .set { ch_gnomad } } ch_target_bed = Channel.empty() @@ -118,7 +123,8 @@ workflow RAREDISEASE { CHECK_BED( params.target_bed, PREPARE_GENOME.out.sequence_dict - ).set { ch_target_bed } + ) + .set { ch_target_bed } } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. @@ -130,8 +136,7 @@ workflow RAREDISEASE { ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai - - ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) + ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } // STEP 1.5: BAM QUALITY CHECK @@ -148,10 +153,10 @@ workflow RAREDISEASE { // STEP 1.6: EXPANSIONHUNTER CALL_REPEAT_EXPANSIONS ( - ch_marked_bam.join(ch_marked_bai, by: [0]), - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.variant_catalog - ) + ch_marked_bam.join(ch_marked_bai, by: [0]), + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.variant_catalog + ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING @@ -177,7 +182,11 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) - ANNOTATE_VCFANNO ( params.vcfanno_toml, ch_dv_vcf, PREPARE_GENOME.out.vcfanno_resources ) + ANNOTATE_VCFANNO ( + params.vcfanno_toml, + ch_dv_vcf, + PREPARE_GENOME.out.vcfanno_resources + ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) // From 80566a279c34a31ffe7fb58c42d200aff6867052 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 20 Mar 2022 15:16:27 +0100 Subject: [PATCH 0346/1921] fix typo --- subworkflows/nf-core/call_sv_manta.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/call_sv_manta.nf b/subworkflows/nf-core/call_sv_manta.nf index 24e0a7eb..fed96edc 100644 --- a/subworkflows/nf-core/call_sv_manta.nf +++ b/subworkflows/nf-core/call_sv_manta.nf @@ -35,7 +35,7 @@ workflow CALL_SV_MANTA { if (params.analysis_type == "WGS") { MANTA ( manta_input_bams, fasta, fai, [[],[]] ) } else { - ch_target_bed = ch_bed.ifEmpty([[],[]]) + ch_target_bed = bed.ifEmpty([[],[]]) MANTA ( manta_input_bams, fasta, fai, bed_input ) } ch_versions = MANTA.out.versions From 560506fb888aaab5dfcbb5ff41310c03775af302 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 20 Mar 2022 15:29:43 +0100 Subject: [PATCH 0347/1921] rename ch_case_info to case_info --- subworkflows/local/input_check.nf | 4 ++-- workflows/raredisease.nf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 28e63db9..4110e2da 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -14,13 +14,13 @@ workflow INPUT_CHECK { .splitCsv ( header:true, sep:',' ) .set { sheet } - ch_case_info = sheet.first() + case_info = sheet.first() .map { create_case_channel(it) } reads = sheet.map { create_fastq_channel(it) } samples = sheet.map { create_samples_channel(it) } emit: - ch_case_info // channel: [ case_id ] + case_info // channel: [ case_id ] reads // channel: [ val(meta), [ reads ] ] samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5c555fd0..dd4e445f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -165,7 +165,7 @@ workflow RAREDISEASE { ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, - INPUT_CHECK.out.ch_case_info + INPUT_CHECK.out.case_info ) ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) @@ -174,7 +174,7 @@ workflow RAREDISEASE { ch_marked_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, - INPUT_CHECK.out.ch_case_info, + INPUT_CHECK.out.case_info, ch_target_bed.bed ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From 4bf883ddae77f512fbda79fe286b64f23ad60253 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Mar 2022 08:54:04 +0100 Subject: [PATCH 0348/1921] update config --- conf/genomes.config | 2 +- conf/test.config | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 6c60010b..ea529e63 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,7 +15,7 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" + svdb_query_dbs = "" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" diff --git a/conf/test.config b/conf/test.config index 05de6892..6355730a 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,9 +26,6 @@ params { // Genome references fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' - // Structural variant annotation databases - svdb_query_dbs = "" - // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' From eb8487bdfc87c2609aeb3537bdf185356b225bdd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Mar 2022 10:54:47 +0100 Subject: [PATCH 0349/1921] switch local module to nf-core --- modules.json | 3 +++ .../{local => nf-core/modules}/svdb/query/main.nf | 2 ++ .../{local => nf-core/modules}/svdb/query/meta.yml | 14 +++++++++++++- subworkflows/local/annotate_structural_variants.nf | 4 +--- 4 files changed, 19 insertions(+), 4 deletions(-) rename modules/{local => nf-core/modules}/svdb/query/main.nf (99%) rename modules/{local => nf-core/modules}/svdb/query/meta.yml (74%) diff --git a/modules.json b/modules.json index de283387..d37cbe7b 100644 --- a/modules.json +++ b/modules.json @@ -81,6 +81,9 @@ "svdb/merge": { "git_sha": "ee915a43e405324e62ee5d4c14a6a6ec6c610058" }, + "svdb/query": { + "git_sha": "5297d27fbf50b7aa5a37cce9b85c7aac3ff7c4ff" + }, "tabix/bgziptabix": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, diff --git a/modules/local/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf similarity index 99% rename from modules/local/svdb/query/main.nf rename to modules/nf-core/modules/svdb/query/main.nf index 07e40ad6..37ce432c 100644 --- a/modules/local/svdb/query/main.nf +++ b/modules/nf-core/modules/svdb/query/main.nf @@ -53,6 +53,7 @@ process SVDB_QUERY { --db ${vcf_dbs.join(',')} \\ --query_vcf $vcf \\ --prefix ${prefix} + cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) @@ -63,6 +64,7 @@ process SVDB_QUERY { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_query.vcf + cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) diff --git a/modules/local/svdb/query/meta.yml b/modules/nf-core/modules/svdb/query/meta.yml similarity index 74% rename from modules/local/svdb/query/meta.yml rename to modules/nf-core/modules/svdb/query/meta.yml index e2a9e456..57e67e15 100644 --- a/modules/local/svdb/query/meta.yml +++ b/modules/nf-core/modules/svdb/query/meta.yml @@ -15,6 +15,12 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - in_occs: + type: list + description: A list of allele count tags + - in_frqs: + type: list + description: A list of allele frequency tags - vcf: type: file description: query vcf file @@ -34,10 +40,16 @@ output: type: file description: File containing software versions pattern: "versions.yml" + - out_occs: + type: list + description: A list of allele count tags + - out_frqs: + type: list + description: A list of allele frequency tags - vcf: type: file description: Annotated output VCF file - pattern: "*_ann_svdbq.vcf" + pattern: "*_query.vcf" authors: - "@ramprasadn" diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 9e4da7b5..66a12509 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,9 +2,7 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY } from '../../modules/local/svdb/query/main' - - +include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { From 665b3d61d2f68ef983f8cbaa6e5586eedebf5fac Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Mar 2022 11:34:33 +0100 Subject: [PATCH 0350/1921] input opt to required opt --- nextflow.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index 57526235..969fa086 100644 --- a/nextflow.config +++ b/nextflow.config @@ -9,8 +9,9 @@ // Global default params, used in configs params { - // Input options + // Required options input = null + outdir = null // References genome = null @@ -31,7 +32,6 @@ params { max_multiqc_email_size = '25.MB' // Boilerplate options - outdir = null tracedir = "${params.outdir}/pipeline_info" publish_dir_mode = 'copy' email = null From d481b10b95cb909b89211ff367b3224cb3c5733a Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Mon, 21 Mar 2022 11:35:12 +0100 Subject: [PATCH 0351/1921] Include stranger into the workflow --- conf/modules.config | 9 +++++++++ subworkflows/nf-core/call_repeat_expansions.nf | 8 ++++++-- workflows/raredisease.nf | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 50f53e4d..7d662d7a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -159,6 +159,15 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + // ANNOTATE CALLED REPEAT EXPANSIONS + withName: STRANGER { + ext.args = "--repeats-file ${params.variant_catalog}" + publishDir = [ + path: { "${params.outdir}/stranger" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } // CALL_STRUCTURAL_VARIANTS withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA" { publishDir = [ diff --git a/subworkflows/nf-core/call_repeat_expansions.nf b/subworkflows/nf-core/call_repeat_expansions.nf index 936340f5..1a1f45f2 100644 --- a/subworkflows/nf-core/call_repeat_expansions.nf +++ b/subworkflows/nf-core/call_repeat_expansions.nf @@ -1,8 +1,9 @@ // -// Run ExpansionHunter +// Run ExpansionHunter and Stranger // include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' +include { STRANGER } from '../../modules/nf-core/modules/stranger/main' workflow CALL_REPEAT_EXPANSIONS { take: @@ -16,7 +17,10 @@ workflow CALL_REPEAT_EXPANSIONS { EXPANSIONHUNTER( bam, fasta, variant_catalog ) ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) + STRANGER ( EXPANSIONHUNTER.out.vcf ) + ch_versions = ch_versions.mix(STRANGER.out.versions) + emit: - vcf = EXPANSIONHUNTER.out.vcf // channel: [ val(meta), path(*.vcf) ] + vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 25b208dd..df613124 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -146,7 +146,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) - // STEP 1.6: EXPANSIONHUNTER + // STEP 1.6: EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_marked_bam.join(ch_marked_bai, by: [0]), PREPARE_GENOME.out.fasta, From 83a8497fbd2bb3dc4c9b5df42263d3b5521b3452 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 21 Mar 2022 15:34:07 +0100 Subject: [PATCH 0352/1921] align subwkflw --- subworkflows/nf-core/align.nf | 33 +++++++++++++++++++++++++++++++++ workflows/raredisease.nf | 16 +++++++++------- 2 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 subworkflows/nf-core/align.nf diff --git a/subworkflows/nf-core/align.nf b/subworkflows/nf-core/align.nf new file mode 100644 index 00000000..366a7868 --- /dev/null +++ b/subworkflows/nf-core/align.nf @@ -0,0 +1,33 @@ +// +// Map to reference +// + +include { ALIGN_BWAMEM2 } from './align_bwamem2' + +workflow ALIGN { + take: + aligner // string: params.aligner + reads_input // channel: [ val(meta), reads_input ] + index // channel: [ /path/to/bwamem2/index/ ] + + main: + ch_versions = Channel.empty() + + //bwamem2 + ALIGN_BWAMEM2 ( reads_input, index ) + + if( aligner == "bwamem2" ) { + ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam + ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai + } else { + exit 1, 'Please provide a valid aligner!' + } + + ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) + + emit: + marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] + marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] + + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3c31908c..92056ac9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -61,7 +61,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' +include { ALIGN } from '../subworkflows/nf-core/align' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' @@ -122,15 +122,17 @@ workflow RAREDISEASE { } // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. - ALIGN_BWAMEM2 ( + ALIGN ( + params.aligner, INPUT_CHECK.out.reads, PREPARE_GENOME.out.bwamem2_index ) - ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam - ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai + ch_marked_bam = ALIGN.out.marked_bam + ch_marked_bai = ALIGN.out.marked_bai + ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) - ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) + ch_versions = ch_versions.mix(ALIGN.out.versions) // STEP 1.5: BAM QUALITY CHECK QC_BAM ( @@ -146,7 +148,7 @@ workflow RAREDISEASE { // STEP 1.6: EXPANSIONHUNTER CALL_REPEAT_EXPANSIONS ( - ch_marked_bam.join(ch_marked_bai, by: [0]), + ch_bam_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.variant_catalog ) @@ -155,7 +157,7 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV_DEEPVARIANT ( - ch_marked_bam.join(ch_marked_bai, by: [0]), + ch_bam_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, INPUT_CHECK.out.ch_case_info From 9f1ec3eaea65b611a0221d22165b9b0081506958 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Mar 2022 20:57:15 +0100 Subject: [PATCH 0353/1921] fix config --- conf/genomes.config | 2 +- workflows/raredisease.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index ea529e63..6c60010b 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,7 +15,7 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - svdb_query_dbs = "" + svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f405d046..196ae0b3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -142,8 +142,8 @@ workflow RAREDISEASE { ch_marked_bai, PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.fai, - CHECK_BED.out.bait_intervals, - CHECK_BED.out.target_intervals, + ch_target_bed.bait_intervals, + ch_target_bed.target_intervals, PREPARE_GENOME.out.chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) From bcf353892bfceef09c1e5ab33a2fdc9bd2b02a4f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Mar 2022 22:35:56 +0100 Subject: [PATCH 0354/1921] create references in a separate subworkflow --- subworkflows/local/check_input.nf | 74 ++++++++++++++++++++++++ subworkflows/local/prepare_genome.nf | 2 +- subworkflows/local/prepare_references.nf | 70 ++++++++++++++++++++++ subworkflows/nf-core/qc_bam.nf | 13 ++--- workflows/raredisease.nf | 72 ++++++++--------------- 5 files changed, 175 insertions(+), 56 deletions(-) create mode 100644 subworkflows/local/check_input.nf create mode 100644 subworkflows/local/prepare_references.nf diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf new file mode 100644 index 00000000..334ab1df --- /dev/null +++ b/subworkflows/local/check_input.nf @@ -0,0 +1,74 @@ +// +// Check input samplesheet and get read, sample, and case channels +// + +include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' + +workflow CHECK_INPUT { + take: + samplesheet // file: /path/to/samplesheet.csv + + main: + SAMPLESHEET_CHECK ( samplesheet ) + .csv + .splitCsv ( header:true, sep:',' ) + .set { sheet } + + case_info = sheet.first() + .map { create_case_channel(it) } + reads = sheet.map { create_fastq_channel(it) } + samples = sheet.map { create_samples_channel(it) } + + emit: + case_info // channel: [ case_id ] + reads // channel: [ val(meta), [ reads ] ] + samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] + versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] +} + +// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] +def create_fastq_channel(LinkedHashMap row) { + // create meta map + def meta = [:] + meta.id = row.sample + meta.single_end = row.single_end.toBoolean() + //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id + meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" + + + // add path(s) of the fastq file(s) to the meta map + def fastq_meta = [] + if (!file(row.fastq_1).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" + } + if (meta.single_end) { + fastq_meta = [ meta, [ file(row.fastq_1) ] ] + } else { + if (!file(row.fastq_2).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" + } + fastq_meta = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + } + return fastq_meta +} + +// Function to get a list of metadata (e.g. pedigree, case id) from the sample; [ meta ] +def create_samples_channel(LinkedHashMap row) { + def sample = [:] + sample.id = row.sample + sample.gender = row.gender + sample.phenotype = row.phenotype + sample.maternal = row.maternal_id + sample.paternal = row.paternal_id + sample.case_id = row.case_id + + return sample +} + +// 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 + + return case_info +} diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 9fc44a1c..b64617f4 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -10,7 +10,7 @@ include { GET_CHROM_SIZES } from '../../modules/local/ workflow PREPARE_GENOME { take: - fasta // path: genome.fasta + fasta // path: genome.fasta variant_catalog // path: variant_catalog.json main: diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf new file mode 100644 index 00000000..e56690f9 --- /dev/null +++ b/subworkflows/local/prepare_references.nf @@ -0,0 +1,70 @@ +// +// Prepare reference files +// + +include { CHECK_BED } from './prepare_bed' +include { CHECK_VCF } from './prepare_vcf' +include { PREPARE_GENOME } from './prepare_genome' + + +workflow PREPARE_REFERENCES { + take: + + main: + // + // Prepare genome + // + ch_versions = Channel.empty() + PREPARE_GENOME ( + params.fasta, + params.variant_catalog + ) + .set { ch_genome } + ch_versions = ch_versions.mix(ch_genome.versions) + + // + // Gnomad vcf + // + ch_gnomad_vcf = Channel.empty() + ch_gnomad_idx = Channel.empty() + if (params.gnomad) { + CHECK_VCF( + params.gnomad, + ch_genome.fasta + ) + ch_gnomad_vcf = CHECK_VCF.out.vcf + ch_gnomad_idx = CHECK_VCF.out.idx + } + + // + // Target bed + // + ch_target_bed = Channel.empty() + ch_target_intervals = Channel.empty() + ch_bait_intervals = Channel.empty() + if (params.target_bed) { + CHECK_BED( + params.target_bed, + ch_genome.sequence_dict + ) + ch_target_bed = CHECK_BED.out.bed + ch_target_intervals = CHECK_BED.out.target_intervals + ch_bait_intervals = CHECK_BED.out.bait_intervals + } + + emit: + bwamem2_index = ch_genome.bwamem2_index + chrom_sizes = ch_genome.chrom_sizes + genome_fasta = ch_genome.fasta + genome_fai = ch_genome.fai + sequence_dict = ch_genome.sequence_dict + variant_catalog = ch_genome.variant_catalog + vcfanno_resources = ch_genome.vcfanno_resources + gnomad_vcf = ch_gnomad_vcf + gnomad_idx = ch_gnomad_idx + target_bed = ch_target_bed + target_intervals = ch_target_intervals + bait_intervals = ch_bait_intervals + versions = ch_versions +} + diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 720c14d5..b36d928e 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -3,13 +3,12 @@ // include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' -include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/modules/picard/collecthsmetrics/main' -include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' -include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' - -include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' -include { MOSDEPTH } from '../../modules/nf-core/modules/mosdepth/main' -include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' +include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/modules/picard/collecthsmetrics/main' +include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' +include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' +include { MOSDEPTH } from '../../modules/nf-core/modules/mosdepth/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' workflow QC_BAM { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dd4e445f..48e09cda 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -43,11 +43,8 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { CHECK_VCF } from '../subworkflows/local/prepare_vcf' -include { CHECK_BED } from '../subworkflows/local/prepare_bed' -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' - +include { CHECK_INPUT } from '../subworkflows/local/check_input' +include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -91,47 +88,26 @@ workflow RAREDISEASE { // // SUBWORKFLOW: Read in samplesheet, validate and stage input files // - INPUT_CHECK ( + CHECK_INPUT ( ch_input ) - ch_versions = ch_versions.mix(INPUT_CHECK.out.versions) + ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) // STEP 0: QUALITY CHECK. FASTQC ( - INPUT_CHECK.out.reads + CHECK_INPUT.out.reads ) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. - PREPARE_GENOME ( - params.fasta, - params.variant_catalog - ) - ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) - - ch_gnomad = Channel.empty() - if (params.gnomad) { - CHECK_VCF( - params.gnomad, - PREPARE_GENOME.out.fasta - ) - .set { ch_gnomad } - } - - ch_target_bed = Channel.empty() - if (params.target_bed) { - CHECK_BED( - params.target_bed, - PREPARE_GENOME.out.sequence_dict - ) - .set { ch_target_bed } - } + PREPARE_REFERENCES ().set { ch_references } + ch_versions = ch_versions.mix(ch_references.versions) // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. if (params.aligner == 'bwamem2') { ALIGN_BWAMEM2 ( - INPUT_CHECK.out.reads, - PREPARE_GENOME.out.bwamem2_index + CHECK_INPUT.out.reads, + ch_references.bwamem2_index ) ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam @@ -143,19 +119,19 @@ workflow RAREDISEASE { QC_BAM ( ch_marked_bam, ch_marked_bai, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, - CHECK_BED.out.bait_intervals, - CHECK_BED.out.target_intervals, - PREPARE_GENOME.out.chrom_sizes + ch_references.genome_fasta, + ch_references.genome_fai, + ch_references.bait_intervals, + ch_references.target_intervals, + ch_references.chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) // STEP 1.6: EXPANSIONHUNTER CALL_REPEAT_EXPANSIONS ( ch_marked_bam.join(ch_marked_bai, by: [0]), - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.variant_catalog + ch_references.genome_fasta, + ch_references.variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) @@ -163,19 +139,19 @@ workflow RAREDISEASE { // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV_DEEPVARIANT ( ch_marked_bam.join(ch_marked_bai, by: [0]), - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, - INPUT_CHECK.out.case_info + ch_references.genome_fasta, + ch_references.genome_fai, + CHECK_INPUT.out.case_info ) ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) CALL_STRUCTURAL_VARIANTS ( ch_marked_bam, ch_marked_bai, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, - INPUT_CHECK.out.case_info, - ch_target_bed.bed + ch_references.genome_fasta, + ch_references.genome_fai, + CHECK_INPUT.out.case_info, + ch_references.target_bed ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) @@ -185,7 +161,7 @@ workflow RAREDISEASE { ANNOTATE_VCFANNO ( params.vcfanno_toml, ch_dv_vcf, - PREPARE_GENOME.out.vcfanno_resources + ch_references.vcfanno_resources ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) From 766bafdafa1f95dfbafedb1238d02b172ba1a5f2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Mar 2022 22:36:46 +0100 Subject: [PATCH 0355/1921] rename input_check subworkflow --- subworkflows/local/input_check.nf | 74 ------------------------------- 1 file changed, 74 deletions(-) delete mode 100644 subworkflows/local/input_check.nf diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf deleted file mode 100644 index 4110e2da..00000000 --- a/subworkflows/local/input_check.nf +++ /dev/null @@ -1,74 +0,0 @@ -// -// Check input samplesheet and get read, sample, and case channels -// - -include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' - -workflow INPUT_CHECK { - take: - samplesheet // file: /path/to/samplesheet.csv - - main: - SAMPLESHEET_CHECK ( samplesheet ) - .csv - .splitCsv ( header:true, sep:',' ) - .set { sheet } - - case_info = sheet.first() - .map { create_case_channel(it) } - reads = sheet.map { create_fastq_channel(it) } - samples = sheet.map { create_samples_channel(it) } - - emit: - case_info // channel: [ case_id ] - reads // channel: [ val(meta), [ reads ] ] - samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] - versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] -} - -// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def create_fastq_channel(LinkedHashMap row) { - // create meta map - def meta = [:] - meta.id = row.sample - meta.single_end = row.single_end.toBoolean() - //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id - meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" - - - // add path(s) of the fastq file(s) to the meta map - def fastq_meta = [] - if (!file(row.fastq_1).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" - } - if (meta.single_end) { - fastq_meta = [ meta, [ file(row.fastq_1) ] ] - } else { - if (!file(row.fastq_2).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" - } - fastq_meta = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] - } - return fastq_meta -} - -// Function to get a list of metadata (e.g. pedigree, case id) from the sample; [ meta ] -def create_samples_channel(LinkedHashMap row) { - def sample = [:] - sample.id = row.sample - sample.gender = row.gender - sample.phenotype = row.phenotype - sample.maternal = row.maternal_id - sample.paternal = row.paternal_id - sample.case_id = row.case_id - - return sample -} - -// 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 - - return case_info -} From f2aaf61afadb842580703a75f1a5991d9f39cbf6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Mar 2022 23:02:59 +0100 Subject: [PATCH 0356/1921] add versions --- subworkflows/local/prepare_bed.nf | 18 +++++++++++++++--- subworkflows/local/prepare_references.nf | 4 ++++ subworkflows/local/prepare_vcf.nf | 10 ++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index 4eacc031..eaad3b71 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -14,24 +14,36 @@ workflow CHECK_BED { main: tab_out = Channel.empty() + ch_versions = Channel.empty() + + if (bed) { bed_file = file(bed) id = bed.split('/')[-1] ch_bed = Channel.fromList([[['id':id], bed_file]]) if ( bed.endsWith(".gz") && file(bed, checkIfExists:true) ) { - tbi_out = TABIX_PT (ch_bed).tbi - tab_out = ch_bed.join(tbi_out) + tbi_out = TABIX_PT (ch_bed).tbi + tab_out = ch_bed.join(tbi_out) + ch_versions = ch_versions.mix(TABIX_PT.out.versions) + } else if ( file(bed, checkIfExists:true) ) { - tab_out = TABIX_PBT (ch_bed).gz_tbi + tab_out = TABIX_PBT (ch_bed).gz_tbi + ch_versions = ch_versions.mix(TABIX_PBT.out.versions) + } interval_list = GATK_BILT (ch_bed, seq_dictionary).interval_list + ch_versions = ch_versions.mix(GATK_BILT.out.versions) + GATK_ILT(interval_list) + ch_versions = ch_versions.mix(GATK_ILT.out.versions) + } emit: bed = tab_out target_intervals = interval_list.collect{it[1]} bait_intervals = GATK_ILT.out.interval_list.collect{it[1]} + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index e56690f9..e2474d58 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -34,6 +34,8 @@ workflow PREPARE_REFERENCES { ) ch_gnomad_vcf = CHECK_VCF.out.vcf ch_gnomad_idx = CHECK_VCF.out.idx + ch_versions = ch_versions.mix(CHECK_VCF.out.versions) + } // @@ -50,6 +52,8 @@ workflow PREPARE_REFERENCES { ch_target_bed = CHECK_BED.out.bed ch_target_intervals = CHECK_BED.out.target_intervals ch_bait_intervals = CHECK_BED.out.bait_intervals + ch_versions = ch_versions.mix(CHECK_BED.out.versions) + } emit: diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 895cefcc..7ce2c58e 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -14,6 +14,8 @@ workflow CHECK_VCF { main: vcf_file = file(vcf) + ch_versions = Channel.empty() + CHECK_INPUT_VCF( vcf_file ) .splitCsv( header:true ) .map { row -> @@ -31,16 +33,20 @@ workflow CHECK_VCF { .set { ch_vcfs_norm } SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_PV.out.versions) + REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta) .vcf .set { ch_vcfs_rmdup } + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_PV.out.versions) vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) TABIX_PV (vcf_out) emit: - vcf = vcf_out // path: normalized_vcf - idx = TABIX_PV.out.tbi + vcf = vcf_out // path: normalized_vcf + idx = TABIX_PV.out.tbi + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From b7de4d534e61f63a37827e3530b5d1a825fa3caa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 22 Mar 2022 10:09:01 +0100 Subject: [PATCH 0357/1921] Remove blank line in if blocks --- subworkflows/local/prepare_bed.nf | 3 --- subworkflows/local/prepare_references.nf | 2 -- 2 files changed, 5 deletions(-) diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index eaad3b71..404d80ed 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -26,11 +26,9 @@ workflow CHECK_BED { tbi_out = TABIX_PT (ch_bed).tbi tab_out = ch_bed.join(tbi_out) ch_versions = ch_versions.mix(TABIX_PT.out.versions) - } else if ( file(bed, checkIfExists:true) ) { tab_out = TABIX_PBT (ch_bed).gz_tbi ch_versions = ch_versions.mix(TABIX_PBT.out.versions) - } interval_list = GATK_BILT (ch_bed, seq_dictionary).interval_list @@ -38,7 +36,6 @@ workflow CHECK_BED { GATK_ILT(interval_list) ch_versions = ch_versions.mix(GATK_ILT.out.versions) - } emit: diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index e2474d58..e60ab649 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -35,7 +35,6 @@ workflow PREPARE_REFERENCES { ch_gnomad_vcf = CHECK_VCF.out.vcf ch_gnomad_idx = CHECK_VCF.out.idx ch_versions = ch_versions.mix(CHECK_VCF.out.versions) - } // @@ -53,7 +52,6 @@ workflow PREPARE_REFERENCES { ch_target_intervals = CHECK_BED.out.target_intervals ch_bait_intervals = CHECK_BED.out.bait_intervals ch_versions = ch_versions.mix(CHECK_BED.out.versions) - } emit: From fc98f63efe1622daaaf3cc58535912ce7136b5b2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 22 Mar 2022 10:12:02 +0100 Subject: [PATCH 0358/1921] fix blank line --- subworkflows/local/prepare_bed.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index 404d80ed..72336c36 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -16,7 +16,6 @@ workflow CHECK_BED { tab_out = Channel.empty() ch_versions = Channel.empty() - if (bed) { bed_file = file(bed) id = bed.split('/')[-1] From 84701e07b88444fbffa570ed7a3bbd44dc131e51 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Mar 2022 11:46:10 +0100 Subject: [PATCH 0359/1921] applying suggestions --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 8e441f73..10b0136f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -60,7 +60,7 @@ Note that the pipeline will create the following files in your working directory ```console work # Directory containing the nextflow working files -results # Finished results (configurable, see below) + # Finished results in specified location (defined with --outdir) .nextflow_log # Log file from Nextflow # Other nextflow hidden files, eg. history of pipeline runs and old logs. ``` From 5226c131f8ec58dc17229f5f77b448753d593daa Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Mar 2022 12:38:03 +0100 Subject: [PATCH 0360/1921] refactored mem2 indx --- conf/modules.config | 2 +- subworkflows/local/prepare_genome.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 902630bf..d910a113 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -30,7 +30,7 @@ process { } // PREPARE_GENOME withName: BWAMEM2_INDEX { - ext.when = { !params.bwamem2_index && params.aligner == "bwamem2" } + ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 9cbc843e..56a682c5 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -21,7 +21,7 @@ workflow PREPARE_GENOME { // Fetch BWAMEM2 index or create from scratch if required BWAMEM2_INDEX ( ch_fasta ) - ch_bwamem2_index = params.bwamem2_index && params.aligner == "bwamem2" ? file(params.bwamem2_index) : BWAMEM2_INDEX.out.index + ch_bwamem2_index = !params.bwamem2_index ? params.aligner == "bwamem2" ? BWAMEM2_INDEX.out.index : Channel.fromPath(params.bwamem2_index).collect() : Channel.empty() ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) if ( params.fasta_fai ) { From 70fd731d22b36100c39cea171e76bf77277fbc8a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 22 Mar 2022 15:10:52 +0100 Subject: [PATCH 0361/1921] remove blank line --- subworkflows/local/prepare_vcf.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 7ce2c58e..8917aaa6 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -35,7 +35,6 @@ workflow CHECK_VCF { SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_PV.out.versions) - REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta) .vcf .set { ch_vcfs_rmdup } From ed7e066bf844aa1f10ea79621b85db2f4542d97e Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Mar 2022 15:28:41 +0100 Subject: [PATCH 0362/1921] placed expansionhunter --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index afaeec6e..8ef49684 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,10 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) -2. Data preprocessing: [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates), [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), +2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) 3. Variant calling + multiple calls are aggregated: 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) - 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), + 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`ExpansionHunter`](https://github.com/Illumina/ExpansionHunter), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), 3. Mitochondria: [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) From 8003b34e7f1be5365fd3d94da46ca97b19446c9c Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Mar 2022 15:33:31 +0100 Subject: [PATCH 0363/1921] placed dnascope --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ef49684..a88ee251 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) -3. Variant calling + multiple calls are aggregated: +3. Variant calling + multiple calls are aggregated: [`DNAscope`](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`ExpansionHunter`](https://github.com/Illumina/ExpansionHunter), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), 3. Mitochondria: [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) From 1b7d9d086a6ce74c8047382e9ec82c8ff7875fda Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Mar 2022 15:35:55 +0100 Subject: [PATCH 0364/1921] placed haplogrep --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a88ee251..67f0e34c 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) 2. SVs: - 3. Mitochondria: [`HmtNote`](https://github.com/robertopreste/HmtNote), [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna) + 3. Mitochondria: [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna), [`Haplogrep`](https://github.com/seppinho/haplogrep-cmd/tree/v2.1.21), [`HmtNote`](https://github.com/robertopreste/HmtNote) 5. Variant ranking: something will be here > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) From 39afd0a4f53d4ecd75d7a7fee04619ebd634ff14 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 22 Mar 2022 16:03:22 +0100 Subject: [PATCH 0365/1921] applying suggestions --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 67f0e34c..97b238c9 100644 --- a/README.md +++ b/README.md @@ -27,14 +27,14 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) -3. Variant calling + multiple calls are aggregated: [`DNAscope`](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) - 1. SNVs: [`DeepVariant`](https://github.com/google/deepvariant) +3. Variant calling + multiple calls are aggregated: + 1. SNVs + short indels: [`DeepVariant`](https://github.com/google/deepvariant), [`DNAscope`](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`ExpansionHunter`](https://github.com/Illumina/ExpansionHunter), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), - 3. Mitochondria: [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) + 3. Mitochondria: [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) 2. SVs: - 3. Mitochondria: [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna), [`Haplogrep`](https://github.com/seppinho/haplogrep-cmd/tree/v2.1.21), [`HmtNote`](https://github.com/robertopreste/HmtNote) + 3. Mitochondria: [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna), [`Haplogrep`](https://github.com/seppinho/haplogrep-cmd/tree/v2.1.21), [`HmtNote`](https://github.com/robertopreste/HmtNote) 5. Variant ranking: something will be here > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) From e648df00c0b9042094c3c7504d0c3b09d68dad35 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Wed, 23 Mar 2022 11:02:57 +0100 Subject: [PATCH 0366/1921] woops need 2 update process name --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 92e14cce..f04d5481 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -106,7 +106,7 @@ workflow RAREDISEASE { // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( params.aligner, - INPUT_CHECK.out.reads, + CHECK_INPUT.out.reads, PREPARE_GENOME.out.bwamem2_index ) ch_marked_bam = ALIGN.out.marked_bam From 76124cbc40db0f2bbb604d5782c02097bbe11065 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 24 Mar 2022 14:25:14 +0100 Subject: [PATCH 0367/1921] running prettier --- .github/CONTRIBUTING.md | 6 +++--- README.md | 32 ++++++++++++++++---------------- assets/multiqc_config.yaml | 6 +++--- docs/usage.md | 22 +++++++++++----------- nextflow_schema.json | 12 +++--------- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a22c4cc6..517b8020 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -95,12 +95,12 @@ Please use the following naming schemes, to make it easy to understand what is g - intermediate and terminal channels: `ch__for_` * subworkflows: `verb_noun` or `verb_variant_noun` - * `verb_noun` : `align_bwamem2.nf` - * `verb_variant_noun` : `call_snv_deepvariant.nf` + - `verb_noun` : `align_bwamem2.nf` + - `verb_variant_noun` : `call_snv_deepvariant.nf` ### Reusing modules in the workflow -Occasionally, you might find yourself wanting to reuse a module with options that are different from what has already been defined in [conf/modules.config](../conf/modules.config). In that case, we recommend importing the module using an unique alias within the subworkflow, and then defining the options for the alias in [conf/modules.config](../conf/modules.config). +Occasionally, you might find yourself wanting to reuse a module with options that are different from what has already been defined in [conf/modules.config](../conf/modules.config). In that case, we recommend importing the module using an unique alias within the subworkflow, and then defining the options for the alias in [conf/modules.config](../conf/modules.config). For a working example, please have a look at how we have reused `bcftools norm` in both [subworkflows/local/call_snv_deepvariant.nf](../subworkflows/local/call_snv_deepvariant.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf), and defined its subworkflow-specific options in [conf/modules.config](../conf/modules.config). diff --git a/README.md b/README.md index 5667153c..f2008807 100644 --- a/README.md +++ b/README.md @@ -29,13 +29,13 @@ On release, automated continuous integration tests run the pipeline on a full-si 1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) 2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) 3. Variant calling + multiple calls are aggregated: - 1. SNVs + short indels: [`DeepVariant`](https://github.com/google/deepvariant), [`DNAscope`](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) - 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`ExpansionHunter`](https://github.com/Illumina/ExpansionHunter), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), - 3. Mitochondria: [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) + 1. SNVs + short indels: [`DeepVariant`](https://github.com/google/deepvariant), [`DNAscope`](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) + 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`ExpansionHunter`](https://github.com/Illumina/ExpansionHunter), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), + 3. Mitochondria: [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) 4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) - 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) - 2. SVs: - 3. Mitochondria: [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna), [`Haplogrep`](https://github.com/seppinho/haplogrep-cmd/tree/v2.1.21), [`HmtNote`](https://github.com/robertopreste/HmtNote) + 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) + 2. SVs: + 3. Mitochondria: [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna), [`Haplogrep`](https://github.com/seppinho/haplogrep-cmd/tree/v2.1.21), [`HmtNote`](https://github.com/robertopreste/HmtNote) 5. Variant ranking: something will be here > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) @@ -52,9 +52,9 @@ The different steps and corresponding tools are represented in the flowchart bel 3. Download the pipeline and test it on a minimal dataset with a single command: - ```console - nextflow run nf-core/raredisease -revision dev -profile test,YOURPROFILE --outdir - ``` + ```console + nextflow run nf-core/raredisease -revision dev -profile test,YOURPROFILE --outdir + ``` Note that some form of configuration will be needed so that Nextflow knows how to fetch the required software. This is usually done in the form of a config profile (`YOURPROFILE` in the example command above). You can chain multiple config profiles in a comma-separated string. @@ -65,13 +65,13 @@ The different steps and corresponding tools are represented in the flowchart bel 4. Start running your own analysis! - ```console - nextflow run nf-core/raredisease \ - --input samplesheet.csv --outdir --genome GRCh38 \ - --analysis_type \ - -revision dev \ - -profile - ``` + ```console + nextflow run nf-core/raredisease \ + --input samplesheet.csv --outdir --genome GRCh38 \ + --analysis_type \ + -revision dev \ + -profile + ``` Note that the `-revision` is used because pipeline is still under development and the latest working branch is dev. diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index bbce041b..15ff17a9 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/raredisease - analysis pipeline. For information about how to interpret these results, please see the - documentation. + This report has been generated by the nf-core/raredisease + analysis pipeline. For information about how to interpret these results, please see the + documentation. report_section_order: software_versions: order: -1000 diff --git a/docs/usage.md b/docs/usage.md index a05b7f6a..0ca15438 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -32,17 +32,17 @@ AEG588A3,4,AEG588A3_S1_L004_R1_001.fastq.gz,AEG588A3_S1_L004_R2_001.fastq.gz,1,1 The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). -| Column | Description | -|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `lane` | Used to generate seperate channels during the alignment step | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `gender` | Sex (1=male; 2=female; other=unknown) | -| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected) | -| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for other samples than the proband. | -| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for other samples than the proband. | -| `case_id` | Case ID, for the analysis used when generating a family VCF | +| Column | Description | +| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `lane` | Used to generate seperate channels during the alignment step | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `gender` | Sex (1=male; 2=female; other=unknown) | +| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected) | +| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for other samples than the proband. | +| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for other samples than the proband. | +| `case_id` | Case ID, for the analysis used when generating a family VCF | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. diff --git a/nextflow_schema.json b/nextflow_schema.json index 53aafb6d..24d18b4a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -150,11 +150,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"] } } }, @@ -169,9 +165,7 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2'.", "fa_icon": "fas fa-map-signs", - "enum": [ - "bwamem2" - ] + "enum": ["bwamem2"] } } }, @@ -372,4 +366,4 @@ "$ref": "#/definitions/generic_options" } ] -} \ No newline at end of file +} From 1da0c3e813ca4e701fa4d7da1c9b9dbdf84e8627 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 27 Mar 2022 14:35:45 +0200 Subject: [PATCH 0368/1921] some fixes --- conf/genomes.config | 2 +- subworkflows/local/annotate_structural_variants.nf | 4 ++-- workflows/raredisease.nf | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 6c60010b..c05f375e 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -26,7 +26,7 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - svdb_query_dbs = "" + svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 66a12509..7d54eee1 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -28,10 +28,10 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { .set { ch_svdb_dbs } SVDB_QUERY(vcf, - ch_svdb_dbs.in_frqs.toList(), ch_svdb_dbs.in_occs.toList(), - ch_svdb_dbs.out_frqs.toList(), + ch_svdb_dbs.in_frqs.toList(), ch_svdb_dbs.out_occs.toList(), + ch_svdb_dbs.out_frqs.toList(), ch_svdb_dbs.vcf_dbs.toList() ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index fd018d4e..4b5ced70 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -163,8 +163,8 @@ workflow RAREDISEASE { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.sequence_dict + ch_references.genome_fasta, + ch_references.sequence_dict ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) From 843c21c48aaddd284b578bc0b342991cafc6237e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 27 Mar 2022 14:39:46 +0200 Subject: [PATCH 0369/1921] update svdb merge --- modules.json | 2 +- modules/nf-core/modules/svdb/merge/main.nf | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index d37cbe7b..7b8277f6 100644 --- a/modules.json +++ b/modules.json @@ -79,7 +79,7 @@ "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "svdb/merge": { - "git_sha": "ee915a43e405324e62ee5d4c14a6a6ec6c610058" + "git_sha": "cc671a5f3c7a063ca3f84666ecbfbe3547d71a12" }, "svdb/query": { "git_sha": "5297d27fbf50b7aa5a37cce9b85c7aac3ff7c4ff" diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 505e2c0b..9e729bf3 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -2,10 +2,10 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.5.0" : null) + conda (params.enable_conda ? "bioconda::svdb=2.5.2" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.5.0--py39hcbe4a3b_0': - 'quay.io/biocontainers/svdb:2.5.0--py39hcbe4a3b_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.5.2--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.5.2--py39h5371cbf_0' }" input: tuple val(meta), path(vcfs) @@ -25,6 +25,7 @@ process SVDB_MERGE { def prio = "" if(priority) { prio = "--priority ${priority.join(',')}" + input = "" for (int index = 0; index < vcfs.size(); index++) { input += " ${vcfs[index]}:${priority[index]}" } From 1432f0b06dbe2c175999be2e47832b9bc64a3e69 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 28 Mar 2022 10:55:47 +0200 Subject: [PATCH 0370/1921] Removes JVM memory compensation in modules --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- modules/local/gatk4/denoisereadcounts/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index 82fbb728..cca747fc 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -25,7 +25,7 @@ process GATK4_COLLECTREADCOUNTS { if (!task.memory) { log.info '[GATK CollectReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga * 14 / 15 as long + avail_mem = task.memory.giga } """ gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index 5bf2c73e..a22aefdb 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -23,7 +23,7 @@ process GATK4_DENOISEREADCOUNTS { if (!task.memory) { log.info '[GATK DenoiseReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga * 14 / 15 as long + avail_mem = task.memory.giga } """ gatk --java-options "-Xmx${avail_mem}g" DenoiseReadCounts \\ From d096a55d55dd9e2c1dbbd9cf9bd07ec40f42f446 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 28 Mar 2022 13:51:16 +0200 Subject: [PATCH 0371/1921] Updates gens container version --- modules/local/gens/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index f1d22838..9ea940b4 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -4,8 +4,8 @@ process GENS { //conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'raysloks/gens_preproc:1.0.0' : - 'raysloks/gens_preproc:1.0.0' }" + 'raysloks/gens_preproc:1.0.1' : + 'raysloks/gens_preproc:1.0.1' }" input: tuple val(meta), path(read_counts) From 1aeab1c9959fdb8a8511109d5726fbd6570417a4 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 30 Mar 2022 17:49:05 +0200 Subject: [PATCH 0372/1921] added cnvpytor subworkflow --- conf/modules.config | 16 ++++++ modules.json | 14 ++++- .../nf-core/modules/cnvpytor/callcnvs/main.nf | 33 ++++++++++++ .../modules/cnvpytor/callcnvs/meta.yml | 39 ++++++++++++++ .../modules/cnvpytor/histogram/main.nf | 32 +++++++++++ .../modules/cnvpytor/histogram/meta.yml | 42 +++++++++++++++ .../modules/cnvpytor/importreaddepth/main.nf | 38 +++++++++++++ .../modules/cnvpytor/importreaddepth/meta.yml | 54 +++++++++++++++++++ .../modules/cnvpytor/partition/main.nf | 32 +++++++++++ .../modules/cnvpytor/partition/meta.yml | 42 +++++++++++++++ subworkflows/nf-core/call_cnv_cnvpytor.nf | 41 ++++++++++++++ .../nf-core/call_structural_variants.nf | 10 ++++ 12 files changed, 392 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/modules/cnvpytor/callcnvs/main.nf create mode 100644 modules/nf-core/modules/cnvpytor/callcnvs/meta.yml create mode 100644 modules/nf-core/modules/cnvpytor/histogram/main.nf create mode 100644 modules/nf-core/modules/cnvpytor/histogram/meta.yml create mode 100644 modules/nf-core/modules/cnvpytor/importreaddepth/main.nf create mode 100644 modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml create mode 100644 modules/nf-core/modules/cnvpytor/partition/main.nf create mode 100644 modules/nf-core/modules/cnvpytor/partition/meta.yml create mode 100644 subworkflows/nf-core/call_cnv_cnvpytor.nf diff --git a/conf/modules.config b/conf/modules.config index 50f53e4d..2194309f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -190,6 +190,22 @@ process { mode: params.publish_dir_mode, ] } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:GENERATE_PYTOR" { + ext.args = {params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } + } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:HISTOGRAMS" { + ext.args = '10000 100000' + } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:PARTITIONS" { + ext.args = '10000 100000' + } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:CALL_CNVS" { + ext.args = '10000' + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + ] + } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { diff --git a/modules.json b/modules.json index ef781076..de04eb8d 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,18 @@ "cat/cat": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, + "cnvpytor/callcnvs": { + "git_sha": "f0800157544a82ae222931764483331a81812012" + }, + "cnvpytor/histogram": { + "git_sha": "f0800157544a82ae222931764483331a81812012" + }, + "cnvpytor/importreaddepth": { + "git_sha": "f0800157544a82ae222931764483331a81812012" + }, + "cnvpytor/partition": { + "git_sha": "f0800157544a82ae222931764483331a81812012" + }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, @@ -98,4 +110,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf new file mode 100644 index 00000000..1d47ce16 --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf @@ -0,0 +1,33 @@ +process CNVPYTOR_CALLCNVS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + + input: + tuple val(meta), path(pytor) + + output: + tuple val(meta), path("*.tsv"), emit: cnvs + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '1000' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + cnvpytor \\ + -root $pytor \\ + -call $args > ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml b/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml new file mode 100644 index 00000000..edfc462a --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml @@ -0,0 +1,39 @@ +name: cnvpytor_callcnvs +description: command line tool for calling CNVs in whole genome sequencing data + - CNV calling +tools: + - cnvpytor: + description: calling CNVs using read depth + homepage: https://github.com/abyzovlab/CNVpytor + documentation: https://github.com/abyzovlab/CNVpytor + tool_dev_url: https://github.com/abyzovlab/CNVpytor + doi: "10.1101/2021.01.27.428472v1" + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - pytor: + type: file + description: cnvpytor root file + pattern: "*.{pytor}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - cnvs: + type: file + description: file containing identified copy numer variations + pattern: "*.{tsv}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@sima-r" diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/modules/cnvpytor/histogram/main.nf new file mode 100644 index 00000000..29dc1bff --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/histogram/main.nf @@ -0,0 +1,32 @@ +process CNVPYTOR_HISTOGRAM { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + + input: + tuple val(meta), path(pytor) + + output: + tuple val(meta), path("${pytor.baseName}.pytor") , emit: pytor + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '1000' + """ + cnvpytor \\ + -root $pytor \\ + -his $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cnvpytor/histogram/meta.yml b/modules/nf-core/modules/cnvpytor/histogram/meta.yml new file mode 100644 index 00000000..fcad2221 --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/histogram/meta.yml @@ -0,0 +1,42 @@ +name: cnvpytor_histogram +description: calculates read depth histograms +keywords: + - cnv calling + - histogram +tools: + - cnvpytor: + description: calling CNVs using read depth + homepage: https://github.com/abyzovlab/CNVpytor + documentation: https://github.com/abyzovlab/CNVpytor + tool_dev_url: https://github.com/abyzovlab/CNVpytor + doi: "10.1101/2021.01.27.428472v1" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - pytor: + type: file + description: pytor file containing read depth data + pattern: "*.{pytor}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - pytor: + type: file + description: pytor file containing read depth histograms binned based on given bin size(s) + pattern: "*.{pytor}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@sima-r" diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf new file mode 100644 index 00000000..9fc7db08 --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf @@ -0,0 +1,38 @@ +process CNVPYTOR_IMPORTREADDEPTH { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + + input: + tuple val(meta), path(input_file), path(index) + path fasta + path fai + + output: + tuple val(meta), path("*.pytor") , emit: pytor + 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 ? "-T ${fasta}" : '' + """ + cnvpytor \\ + -root ${prefix}.pytor \\ + -rd $input_file \\ + $args \\ + $reference + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml b/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml new file mode 100644 index 00000000..1cf3c0d0 --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml @@ -0,0 +1,54 @@ +name: cnvpytor_importreaddepth +description: command line tool for CNV/CNA analysis. This step imports the read depth data into a root pytor file. +keywords: + - read depth + - cnv calling +tools: + - cnvpytor -rd: + description: calling CNVs using read depth + homepage: https://github.com/abyzovlab/CNVpytor + documentation: https://github.com/abyzovlab/CNVpytor + tool_dev_url: https://github.com/abyzovlab/CNVpytor + doi: "10.1101/2021.01.27.428472v1" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - input_file: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram}" + - index: + type: file + description: bam file index + pattern: "*.{bai,crai}" + - fasta: + type: file + description: specifies reference genome file (only for cram file without reference genome) + pattern: "*.{fasta,fasta.gz,fa,fa.gz}" + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fai" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - pytor: + type: file + description: read depth root file in which read depth data binned to 100 base pair bins will be stored. + pattern: "*.{pytor}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@sima-r" diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/modules/cnvpytor/partition/main.nf new file mode 100644 index 00000000..e3f73955 --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/partition/main.nf @@ -0,0 +1,32 @@ +process CNVPYTOR_PARTITION { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + + input: + tuple val(meta), path(pytor) + + output: + tuple val(meta), path("${pytor.baseName}.pytor"), emit: pytor + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '1000' + """ + cnvpytor \\ + -root $pytor \\ + -partition $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cnvpytor/partition/meta.yml b/modules/nf-core/modules/cnvpytor/partition/meta.yml new file mode 100644 index 00000000..a72cea4c --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/partition/meta.yml @@ -0,0 +1,42 @@ +name: cnvpytor_partition +description: partitioning read depth histograms +keywords: + - cnv calling + - partition histograms +tools: + - cnvpytor: + description: calling CNVs using read depth + homepage: https://github.com/abyzovlab/CNVpytor + documentation: https://github.com/abyzovlab/CNVpytor + tool_dev_url: https://github.com/abyzovlab/CNVpytor + doi: "10.1101/2021.01.27.428472v1" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - pytor: + type: file + description: pytor file containing read depth data + pattern: "*.{pytor}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - partitions: + type: file + description: pytor file containing partitions of read depth histograms using mean-shift method + pattern: "*.{pytor}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@sima-r" diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/nf-core/call_cnv_cnvpytor.nf new file mode 100644 index 00000000..886d7b42 --- /dev/null +++ b/subworkflows/nf-core/call_cnv_cnvpytor.nf @@ -0,0 +1,41 @@ +// +// CNVpytor workflow - Calling CNVs +// + +include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../modules/nf-core/modules/cnvpytor/importreaddepth/main' +include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/modules/cnvpytor/histogram/main' +include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/modules/cnvpytor/partition/main' +include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/modules/cnvpytor/callcnvs/main' + +workflow CALL_CNV_CNVPYTOR { + take: + bam // channel: [ val(meta), path(bam)] + bai // channel: [ val(meta), path(bai) ] + case_info // channel: [ case_id ] + + + main: + bam.collect{it[1]} + .toList() + .set { bam_file_list } + + bai.collect{it[1]} + .toList() + .set { bai_file_list } + + case_info.combine(bam_file_list) + .combine(bai_file_list) + .set { cnvpytor_input_bams } + + GENERATE_PYTOR(cnvpytor_input_bams,[],[]) + HISTOGRAMS(GENERATE_PYTOR.out.pytor) + PARTITIONS(HISTOGRAMS.out.pytor) + CALL_CNVS(PARTITIONS.out.pytor) + ch_versions = ch_versions.mix(CALL_CNVS.out.versions) + //TO DO : tsv2vcf + + emit: + candidate_cnvs_tsv = CALL_CNVS.out.cnvs // channel: [ val(meta), path(*.tsv) ] + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} + diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index d781d04f..a7a0e731 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -5,6 +5,7 @@ include { CALL_SV_MANTA } from './call_sv_manta' include { CALL_SV_TIDDIT } from './call_sv_tiddit' include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' +include { CALL_CNV_CNVPYTOR } from './call_cnv_cnvpytor' workflow CALL_STRUCTURAL_VARIANTS { @@ -44,6 +45,15 @@ workflow CALL_STRUCTURAL_VARIANTS { SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta"] ) + //cnvpytor + CALL_CNV_CNVPYTOR ( bam, bai, case_info ) + .candidate_cnvs_tsv + .collect{it[1]} + .set {cnvpytor_tsv } + ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) + + + emit: versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] From 892c629950516697fc44588e7feff78e31cf933a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:56:29 +0200 Subject: [PATCH 0373/1921] add params and fix channels --- nextflow.config | 3 +++ nextflow_schema.json | 14 ++++++++++++ subworkflows/nf-core/call_cnv_cnvpytor.nf | 26 +++++++---------------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/nextflow.config b/nextflow.config index 969fa086..93aa5fbc 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,6 +26,9 @@ params { // Alignment aligner = 'bwamem2' + // CNVpytor + cnvpytor_chr = null + // MultiQC options multiqc_config = null multiqc_title = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 24d18b4a..80ded6b6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -169,6 +169,20 @@ } } }, + "sv_caller_options": { + "title": "Structural variant calling options", + "type": "object", + "fa_icon": "fas fa-map-signs", + "description": "Options to adjust parameters and filtering criteria for structural variant callers.", + "properties": { + "aligner": { + "type": "string", + "default": null, + "description": "Specifies the alignment algorithm to use - available options are 'bwamem2'.", + "fa_icon": "fas fa-map-signs" + } + } + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/nf-core/call_cnv_cnvpytor.nf index 886d7b42..2ae9e69a 100644 --- a/subworkflows/nf-core/call_cnv_cnvpytor.nf +++ b/subworkflows/nf-core/call_cnv_cnvpytor.nf @@ -3,31 +3,21 @@ // include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../modules/nf-core/modules/cnvpytor/importreaddepth/main' -include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/modules/cnvpytor/histogram/main' -include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/modules/cnvpytor/partition/main' -include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/modules/cnvpytor/callcnvs/main' +include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/modules/cnvpytor/histogram/main' +include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/modules/cnvpytor/partition/main' +include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/modules/cnvpytor/callcnvs/main' workflow CALL_CNV_CNVPYTOR { take: - bam // channel: [ val(meta), path(bam)] - bai // channel: [ val(meta), path(bai) ] - case_info // channel: [ case_id ] + bam // channel: [ val(meta), path(bam)] + bai // channel: [ val(meta), path(bai) ] + case_info // channel: [ case_id ] main: - bam.collect{it[1]} - .toList() - .set { bam_file_list } + ch_versions = Channel.empty() - bai.collect{it[1]} - .toList() - .set { bai_file_list } - - case_info.combine(bam_file_list) - .combine(bai_file_list) - .set { cnvpytor_input_bams } - - GENERATE_PYTOR(cnvpytor_input_bams,[],[]) + GENERATE_PYTOR(bam.join(bai, by: [0]),[],[]) HISTOGRAMS(GENERATE_PYTOR.out.pytor) PARTITIONS(HISTOGRAMS.out.pytor) CALL_CNVS(PARTITIONS.out.pytor) From bdaf63d68483aff41218a15d48ab4de06256f986 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:58:31 +0200 Subject: [PATCH 0374/1921] update cnvpytor --- modules.json | 8 ++++---- modules/nf-core/modules/cnvpytor/callcnvs/main.nf | 2 +- modules/nf-core/modules/cnvpytor/histogram/main.nf | 2 +- modules/nf-core/modules/cnvpytor/importreaddepth/main.nf | 2 +- modules/nf-core/modules/cnvpytor/partition/main.nf | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index de04eb8d..70521c04 100644 --- a/modules.json +++ b/modules.json @@ -16,16 +16,16 @@ "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "cnvpytor/callcnvs": { - "git_sha": "f0800157544a82ae222931764483331a81812012" + "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" }, "cnvpytor/histogram": { - "git_sha": "f0800157544a82ae222931764483331a81812012" + "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" }, "cnvpytor/importreaddepth": { - "git_sha": "f0800157544a82ae222931764483331a81812012" + "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" }, "cnvpytor/partition": { - "git_sha": "f0800157544a82ae222931764483331a81812012" + "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf index 1d47ce16..e296656b 100644 --- a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf +++ b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf @@ -4,7 +4,7 @@ process CNVPYTOR_CALLCNVS { conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" input: diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/modules/cnvpytor/histogram/main.nf index 29dc1bff..e421f1b2 100644 --- a/modules/nf-core/modules/cnvpytor/histogram/main.nf +++ b/modules/nf-core/modules/cnvpytor/histogram/main.nf @@ -4,7 +4,7 @@ process CNVPYTOR_HISTOGRAM { conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" input: diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf index 9fc7db08..1b037629 100644 --- a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf @@ -4,7 +4,7 @@ process CNVPYTOR_IMPORTREADDEPTH { conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" input: diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/modules/cnvpytor/partition/main.nf index e3f73955..74ab4026 100644 --- a/modules/nf-core/modules/cnvpytor/partition/main.nf +++ b/modules/nf-core/modules/cnvpytor/partition/main.nf @@ -4,7 +4,7 @@ process CNVPYTOR_PARTITION { conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:A1.0--py39h6a678da_2': + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" input: From 81f247ff0d279578b9d972d1499f6d0a8cce03ca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 11:33:26 +0200 Subject: [PATCH 0375/1921] fix indentation --- subworkflows/nf-core/call_structural_variants.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index a7a0e731..6d909ebb 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -2,9 +2,9 @@ // A nested subworkflow to call structural variants. // -include { CALL_SV_MANTA } from './call_sv_manta' -include { CALL_SV_TIDDIT } from './call_sv_tiddit' -include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' +include { CALL_SV_MANTA } from './call_sv_manta' +include { CALL_SV_TIDDIT } from './call_sv_tiddit' +include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' include { CALL_CNV_CNVPYTOR } from './call_cnv_cnvpytor' workflow CALL_STRUCTURAL_VARIANTS { From b1fefaec29c55eafc6f886bb8e7c3e0cf0803b68 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 13:50:32 +0200 Subject: [PATCH 0376/1921] update modules --- modules.json | 60 ++++++++-------- modules/nf-core/modules/bcftools/norm/main.nf | 11 +++ modules/nf-core/modules/bwamem2/index/main.nf | 15 ++++ modules/nf-core/modules/bwamem2/mem/main.nf | 17 ++++- modules/nf-core/modules/cat/cat/main.nf | 32 ++++++--- modules/nf-core/modules/cat/cat/meta.yml | 9 ++- modules/nf-core/modules/deepvariant/main.nf | 18 ++++- .../nf-core/modules/expansionhunter/main.nf | 11 +++ modules/nf-core/modules/fastqc/main.nf | 12 ++++ .../modules/gatk4/bedtointervallist/main.nf | 11 +++ .../gatk4/createsequencedictionary/main.nf | 10 +++ .../modules/gatk4/intervallisttools/main.nf | 18 +++++ modules/nf-core/modules/glnexus/main.nf | 11 +++ .../nf-core/modules/manta/germline/meta.yml | 16 ++--- modules/nf-core/modules/multiqc/main.nf | 12 ++++ .../modules/picard/collecthsmetrics/main.nf | 11 +++ .../picard/collectmultiplemetrics/main.nf | 20 ++++++ .../modules/picard/markduplicates/main.nf | 13 ++++ .../nf-core/modules/qualimap/bamqc/main.nf | 68 +++++++++++++++++++ .../nf-core/modules/samtools/faidx/main.nf | 16 ++++- .../nf-core/modules/samtools/index/main.nf | 18 ++++- .../nf-core/modules/samtools/merge/main.nf | 18 ++++- .../nf-core/modules/samtools/stats/main.nf | 17 ++++- modules/nf-core/modules/svdb/merge/main.nf | 7 +- .../nf-core/modules/tabix/bgziptabix/main.nf | 12 ++++ modules/nf-core/modules/tabix/tabix/main.nf | 11 +++ modules/nf-core/modules/tiddit/cov/main.nf | 12 ++++ modules/nf-core/modules/tiddit/sv/main.nf | 13 ++++ .../nf-core/modules/ucsc/wigtobigwig/main.nf | 11 +++ modules/nf-core/modules/untar/main.nf | 23 +++++-- modules/nf-core/modules/untar/meta.yml | 10 +++ modules/nf-core/modules/vcfanno/main.nf | 11 +++ 32 files changed, 477 insertions(+), 77 deletions(-) diff --git a/modules.json b/modules.json index ef781076..3aef3733 100644 --- a/modules.json +++ b/modules.json @@ -4,98 +4,98 @@ "repos": { "nf-core/modules": { "bcftools/norm": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bwamem2/index": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bwamem2/mem": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "cat/cat": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "deepvariant": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "expansionhunter": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "fastqc": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "gatk4/bedtointervallist": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "gatk4/createsequencedictionary": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "gatk4/intervallisttools": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "glnexus": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "manta/germline": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "mosdepth": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "multiqc": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/collecthsmetrics": { - "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/collectmultiplemetrics": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/markduplicates": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "qualimap/bamqc": { - "git_sha": "e31f1ff3b1375b30db08637d8937e25cc046f3cc" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "samtools/faidx": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "samtools/index": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "samtools/merge": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "samtools/stats": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "svdb/merge": { - "git_sha": "ee915a43e405324e62ee5d4c14a6a6ec6c610058" + "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" }, "tabix/bgziptabix": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "tabix/tabix": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "tiddit/cov": { - "git_sha": "e20e57f90b6787ac9a010a980cf6ea98bd990046" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "tiddit/sv": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "ucsc/wigtobigwig": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "untar": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "vcfanno": { - "git_sha": "2597c31d6bba4a354fc58b535c76bd14aed1c585" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/modules/bcftools/norm/main.nf index cd681f21..b81a4310 100644 --- a/modules/nf-core/modules/bcftools/norm/main.nf +++ b/modules/nf-core/modules/bcftools/norm/main.nf @@ -34,4 +34,15 @@ process BCFTOOLS_NORM { bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/modules/bwamem2/index/main.nf index 0e9cc2f8..900f27d4 100644 --- a/modules/nf-core/modules/bwamem2/index/main.nf +++ b/modules/nf-core/modules/bwamem2/index/main.nf @@ -31,4 +31,19 @@ process BWAMEM2_INDEX { bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') END_VERSIONS """ + + stub: + """ + mkdir bwamem2 + touch bwamem2/${fasta}.0123 + touch bwamem2/${fasta}.ann + touch bwamem2/${fasta}.pac + touch bwamem2/${fasta}.amb + touch bwamem2/${fasta}.bwt.2bit.64 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index 56f595ec..e3a3d164 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -2,10 +2,10 @@ process BWAMEM2_MEM { tag "$meta.id" label 'process_high' - conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.12" : null) + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.15" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0' : - 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:cf603b12db30ec91daa04ba45a8ee0f35bbcd1e2-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:8ee25ae85d7a2bacac3e3139db209aff3d605a18-0' : + 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:8ee25ae85d7a2bacac3e3139db209aff3d605a18-0' }" input: tuple val(meta), path(reads) @@ -43,4 +43,15 @@ process BWAMEM2_MEM { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/cat/cat/main.nf b/modules/nf-core/modules/cat/cat/main.nf index 4ee44599..40e53f3e 100644 --- a/modules/nf-core/modules/cat/cat/main.nf +++ b/modules/nf-core/modules/cat/cat/main.nf @@ -1,4 +1,5 @@ process CAT_CAT { + tag "$meta.id" label 'process_low' conda (params.enable_conda ? "conda-forge::pigz=2.3.4" : null) @@ -7,12 +8,11 @@ process CAT_CAT { 'quay.io/biocontainers/pigz:2.3.4' }" input: - path files_in - val file_out + tuple val(meta), path(files_in) output: - path "${file_out}*" , emit: file_out - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}"), emit: file_out + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -29,16 +29,30 @@ process CAT_CAT { // | gzipped | ungzipped | zcat | | // | ungzipped | gzipped | cat | pigz | - def in_zip = file_list[0].endsWith('.gz') - def out_zip = file_out.endsWith('.gz') - def command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' - def command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + // Use input file ending as default + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + out_zip = prefix.endsWith('.gz') + in_zip = file_list[0].endsWith('.gz') + command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' + command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' """ $command1 \\ $args \\ ${file_list.join(' ')} \\ $command2 \\ - > $file_out + > ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' ) + END_VERSIONS + """ + + stub: + def file_list = files_in.collect { it.toString() } + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + """ + touch $prefix cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/cat/cat/meta.yml b/modules/nf-core/modules/cat/cat/meta.yml index e0a6361d..5eeff5a6 100644 --- a/modules/nf-core/modules/cat/cat/meta.yml +++ b/modules/nf-core/modules/cat/cat/meta.yml @@ -12,13 +12,15 @@ tools: tool_dev_url: None licence: ["GPL-3.0-or-later"] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - files_in: type: file description: List of compressed / uncompressed files pattern: "*" - - file_out: - type: value - description: Full name of output file with or without .gz extension output: - versions: @@ -32,3 +34,4 @@ output: authors: - "@erikrikarddaniel" + - "@FriederikeHanssen" diff --git a/modules/nf-core/modules/deepvariant/main.nf b/modules/nf-core/modules/deepvariant/main.nf index c5e81997..e2a0bee7 100644 --- a/modules/nf-core/modules/deepvariant/main.nf +++ b/modules/nf-core/modules/deepvariant/main.nf @@ -17,8 +17,8 @@ process DEEPVARIANT { path(fai) output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*g.vcf.gz"), emit: gvcf + tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf + tuple val(meta), path("${prefix}.g.vcf.gz"), emit: gvcf path "versions.yml" , emit: versions when: @@ -26,7 +26,7 @@ process DEEPVARIANT { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def regions = intervals ? "--regions ${intervals}" : "" """ @@ -44,4 +44,16 @@ process DEEPVARIANT { deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) END_VERSIONS """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.g.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/expansionhunter/main.nf b/modules/nf-core/modules/expansionhunter/main.nf index 4e62b2a6..f60b75b4 100644 --- a/modules/nf-core/modules/expansionhunter/main.nf +++ b/modules/nf-core/modules/expansionhunter/main.nf @@ -37,4 +37,15 @@ process EXPANSIONHUNTER { expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index ed6b8c50..05730368 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -44,4 +44,16 @@ process FASTQC { END_VERSIONS """ } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.html + touch ${prefix}.zip + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf index 74256dd1..c3b624a8 100644 --- a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf @@ -39,4 +39,15 @@ process GATK4_BEDTOINTERVALLIST { 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/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf index 87d52a59..dea77a1d 100644 --- a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf @@ -37,4 +37,14 @@ process GATK4_CREATESEQUENCEDICTIONARY { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + """ + touch test.dict + + 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/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/modules/gatk4/intervallisttools/main.nf index 352a3240..82c3222c 100644 --- a/modules/nf-core/modules/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/modules/gatk4/intervallisttools/main.nf @@ -51,4 +51,22 @@ process GATK4_INTERVALLISTTOOLS { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir -p ${prefix}_split/temp_0001_of_6 + mkdir -p ${prefix}_split/temp_0002_of_6 + mkdir -p ${prefix}_split/temp_0003_of_6 + mkdir -p ${prefix}_split/temp_0004_of_6 + touch ${prefix}_split/temp_0001_of_6/1scattered.interval_list + touch ${prefix}_split/temp_0002_of_6/2scattered.interval_list + touch ${prefix}_split/temp_0003_of_6/3scattered.interval_list + touch ${prefix}_split/temp_0004_of_6/4scattered.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/modules/glnexus/main.nf b/modules/nf-core/modules/glnexus/main.nf index 84da95a0..a26ab4ce 100644 --- a/modules/nf-core/modules/glnexus/main.nf +++ b/modules/nf-core/modules/glnexus/main.nf @@ -42,4 +42,15 @@ process GLNEXUS { glnexus: \$( echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + glnexus: \$( echo \$(glnexus_cli 2>&1) | head -n 1 | sed 's/^.*release v//; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/manta/germline/meta.yml b/modules/nf-core/modules/manta/germline/meta.yml index d6297ead..b719f075 100644 --- a/modules/nf-core/modules/manta/germline/meta.yml +++ b/modules/nf-core/modules/manta/germline/meta.yml @@ -31,14 +31,6 @@ input: type: file description: BAM/CRAM/SAM index file. For joint calling use a list of files. pattern: "*.{bai,crai,sai}" - - fasta: - type: file - description: Genome reference FASTA file - pattern: "*.{fa,fasta}" - - fasta_fai: - type: file - description: Genome reference FASTA index file - pattern: "*.{fa.fai,fasta.fai}" - target_bed: type: file description: BED file containing target regions for variant calling @@ -47,6 +39,14 @@ input: type: file description: Index for BED file containing target regions for variant calling pattern: "*.{bed.tbi}" + - fasta: + type: file + description: Genome reference FASTA file + pattern: "*.{fa,fasta}" + - fasta_fai: + type: file + description: Genome reference FASTA index file + pattern: "*.{fa.fai,fasta.fai}" output: - meta: diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index 1264aac1..ae019dbf 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -28,4 +28,16 @@ process MULTIQC { multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) END_VERSIONS """ + + stub: + """ + touch multiqc_data + touch multiqc_plots + touch multiqc_report.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" ) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/modules/picard/collecthsmetrics/main.nf index 07e8504f..3acf8bb8 100644 --- a/modules/nf-core/modules/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/modules/picard/collecthsmetrics/main.nf @@ -48,4 +48,15 @@ process PICARD_COLLECTHSMETRICS { picard: \$(echo \$(picard CollectHsMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_collecthsmetrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard CollectHsMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf index e023ea3c..340463a8 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf @@ -42,4 +42,24 @@ process PICARD_COLLECTMULTIPLEMETRICS { picard: \$(picard CollectMultipleMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.CollectMultipleMetrics.alignment_summary_metrics + touch ${prefix}.CollectMultipleMetrics.insert_size_metrics + touch ${prefix}.CollectMultipleMetrics.quality_distribution.pdf + touch ${prefix}.CollectMultipleMetrics.base_distribution_by_cycle_metrics + touch ${prefix}.CollectMultipleMetrics.quality_by_cycle_metrics + touch ${prefix}.CollectMultipleMetrics.read_length_histogram.pdf + touch ${prefix}.CollectMultipleMetrics.base_distribution_by_cycle.pdf + touch ${prefix}.CollectMultipleMetrics.quality_by_cycle.pdf + touch ${prefix}.CollectMultipleMetrics.insert_size_histogram.pdf + touch ${prefix}.CollectMultipleMetrics.quality_distribution_metrics + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard CollectMultipleMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 5196b6ed..e754a587 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -42,4 +42,17 @@ process PICARD_MARKDUPLICATES { picard: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + touch ${prefix}.bam.bai + touch ${prefix}.MarkDuplicates.metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/qualimap/bamqc/main.nf b/modules/nf-core/modules/qualimap/bamqc/main.nf index 92f38f8c..3bfcb4c1 100644 --- a/modules/nf-core/modules/qualimap/bamqc/main.nf +++ b/modules/nf-core/modules/qualimap/bamqc/main.nf @@ -52,4 +52,72 @@ process QUALIMAP_BAMQC { qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') END_VERSIONS """ + + stub: + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + """ + mkdir -p $prefix/css + mkdir $prefix/images_qualimapReport + mkdir $prefix/raw_data_qualimapReport + cd $prefix/css + touch agogo.css + touch basic.css + touch bgtop.png + touch comment-close.png + touch doctools.js + touch down-pressed.png + touch jquery.js + touch plus.png + touch qualimap_logo_small.png + touch searchtools.js + touch up.png + touch websupport.js + touch ajax-loader.gif + touch bgfooter.png + touch comment-bright.png + touch comment.png + touch down.png + touch file.png + touch minus.png + touch pygments.css + touch report.css + touch underscore.js + touch up-pressed.png + cd ../images_qualimapReport/ + touch genome_coverage_0to50_histogram.png + touch genome_coverage_quotes.png + touch genome_insert_size_across_reference.png + touch genome_mapping_quality_histogram.png + touch genome_uniq_read_starts_histogram.png + touch genome_coverage_across_reference.png + touch genome_gc_content_per_window.png + touch genome_insert_size_histogram.png + touch genome_reads_clipping_profile.png + touch genome_coverage_histogram.png + touch genome_homopolymer_indels.png + touch genome_mapping_quality_across_reference.png + touch genome_reads_content_per_read_position.png + cd ../raw_data_qualimapReport + touch coverage_across_reference.txt + touch genome_fraction_coverage.txt + touch insert_size_histogram.txt + touch mapped_reads_nucleotide_content.txt + touch coverage_histogram.txt + touch homopolymer_indels.txt + touch mapped_reads_clipping_profile.txt + touch mapping_quality_across_reference.txt + touch duplication_rate_histogram.txt + touch insert_size_across_reference.txt + touch mapped_reads_gc-content_distribution.txt + touch mapping_quality_histogram.txt + cd ../ + touch genome_results.txt + touch qualimapReport.html + cd ../ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + qualimap: \$(echo \$(qualimap 2>&1) | sed 's/^.*QualiMap v.//; s/Built.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf index b83a4952..053279ff 100644 --- a/modules/nf-core/modules/samtools/faidx/main.nf +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_FAIDX { tag "$fasta" label 'process_low' - conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + conda (params.enable_conda ? "bioconda::samtools=1.15" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : - 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.15--h1170115_1' : + 'quay.io/biocontainers/samtools:1.15--h1170115_1' }" input: tuple val(meta), path(fasta) @@ -29,4 +29,14 @@ process SAMTOOLS_FAIDX { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + """ + touch ${fasta}.fai + 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/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index dfe0234f..fff6e1b8 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_INDEX { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + conda (params.enable_conda ? "bioconda::samtools=1.15" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : - 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.15--h1170115_1' : + 'quay.io/biocontainers/samtools:1.15--h1170115_1' }" input: tuple val(meta), path(input) @@ -33,4 +33,16 @@ process SAMTOOLS_INDEX { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + """ + touch ${input}.bai + touch ${input}.crai + touch ${input}.csi + + 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/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf index be6fe32e..9f962a4b 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_MERGE { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + conda (params.enable_conda ? "bioconda::samtools=1.15" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : - 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.15--h1170115_1' : + 'quay.io/biocontainers/samtools:1.15--h1170115_1' }" input: tuple val(meta), path(input_files) @@ -38,4 +38,16 @@ process SAMTOOLS_MERGE { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + def file_type = input_files[0].getExtension() + """ + touch ${prefix}.${file_type} + + 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/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index f6fe3bfe..85cb64f3 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_STATS { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::samtools=1.14" : null) + conda (params.enable_conda ? "bioconda::samtools=1.15" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.14--hb421002_0' : - 'quay.io/biocontainers/samtools:1.14--hb421002_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.15--h1170115_1' : + 'quay.io/biocontainers/samtools:1.15--h1170115_1' }" input: tuple val(meta), path(input), path(input_index) @@ -34,4 +34,15 @@ process SAMTOOLS_STATS { samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${input}.stats + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 505e2c0b..4a39940c 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -2,10 +2,10 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.5.0" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.5.0--py39hcbe4a3b_0': - 'quay.io/biocontainers/svdb:2.5.0--py39hcbe4a3b_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.6.0--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.6.0--py39h5371cbf_0' }" input: tuple val(meta), path(vcfs) @@ -25,6 +25,7 @@ process SVDB_MERGE { def prio = "" if(priority) { prio = "--priority ${priority.join(',')}" + input = "" for (int index = 0; index < vcfs.size(); index++) { input += " ${vcfs[index]}:${priority[index]}" } diff --git a/modules/nf-core/modules/tabix/bgziptabix/main.nf b/modules/nf-core/modules/tabix/bgziptabix/main.nf index 12657599..77fd91a5 100644 --- a/modules/nf-core/modules/tabix/bgziptabix/main.nf +++ b/modules/nf-core/modules/tabix/bgziptabix/main.nf @@ -30,4 +30,16 @@ process TABIX_BGZIPTABIX { tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.gz + touch ${prefix}.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/tabix/tabix/main.nf b/modules/nf-core/modules/tabix/tabix/main.nf index 5f516261..c9dab068 100644 --- a/modules/nf-core/modules/tabix/tabix/main.nf +++ b/modules/nf-core/modules/tabix/tabix/main.nf @@ -27,4 +27,15 @@ process TABIX_TABIX { tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${tab}.tbi + cat <<-END_VERSIONS > versions.yml + + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/tiddit/cov/main.nf b/modules/nf-core/modules/tiddit/cov/main.nf index a5f8c649..578c4043 100644 --- a/modules/nf-core/modules/tiddit/cov/main.nf +++ b/modules/nf-core/modules/tiddit/cov/main.nf @@ -36,4 +36,16 @@ process TIDDIT_COV { tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.wig + touch ${prefix}.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/tiddit/sv/main.nf b/modules/nf-core/modules/tiddit/sv/main.nf index 454dfc54..1bf7146a 100644 --- a/modules/nf-core/modules/tiddit/sv/main.nf +++ b/modules/nf-core/modules/tiddit/sv/main.nf @@ -38,4 +38,17 @@ process TIDDIT_SV { tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf + touch ${prefix}.ploidy.tab + touch ${prefix}.signals.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf index d07e7ec1..2af7190b 100644 --- a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf @@ -35,4 +35,15 @@ process UCSC_WIGTOBIGWIG { ucsc: $VERSION END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bw + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ucsc: $VERSION + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/untar/main.nf b/modules/nf-core/modules/untar/main.nf index 01205e60..5aa6aa7f 100644 --- a/modules/nf-core/modules/untar/main.nf +++ b/modules/nf-core/modules/untar/main.nf @@ -2,25 +2,25 @@ process UNTAR { tag "$archive" label 'process_low' - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + conda (params.enable_conda ? "conda-forge::tar=1.32" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img' : 'biocontainers/biocontainers:v1.2.0_cv1' }" input: - path archive + tuple val(meta), path(archive) output: - path "$untar" , emit: untar - path "versions.yml", emit: versions + tuple val(meta), path("$untar"), emit: untar + 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 args2 = task.ext.args2 ?: '' - untar = archive.toString() - '.tar.gz' + untar = archive.toString() - '.tar.gz' """ tar \\ -xzvf \\ @@ -33,4 +33,15 @@ process UNTAR { untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') END_VERSIONS """ + + stub: + untar = archive.toString() - '.tar.gz' + """ + touch $untar + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/untar/meta.yml b/modules/nf-core/modules/untar/meta.yml index e877a97c..d426919b 100644 --- a/modules/nf-core/modules/untar/meta.yml +++ b/modules/nf-core/modules/untar/meta.yml @@ -10,11 +10,21 @@ tools: documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - archive: type: file description: File to be untar pattern: "*.{tar}.{gz}" output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - untar: type: file description: diff --git a/modules/nf-core/modules/vcfanno/main.nf b/modules/nf-core/modules/vcfanno/main.nf index 51b1ec5b..bc0514c9 100644 --- a/modules/nf-core/modules/vcfanno/main.nf +++ b/modules/nf-core/modules/vcfanno/main.nf @@ -39,4 +39,15 @@ process VCFANNO { vcfanno: \$(echo \$(vcfanno 2>&1 | grep version | cut -f3 -d' ' )) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_annotated.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + vcfanno: \$(echo \$(vcfanno 2>&1 | grep version | cut -f3 -d' ' )) + END_VERSIONS + """ } From eb3bce37c1e683ac57af93f4c3b4e11c68c05a04 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 14:00:15 +0200 Subject: [PATCH 0377/1921] fix subworkflows to work with stubs --- conf/modules.config | 1 + subworkflows/local/prepare_genome.nf | 6 +++++- subworkflows/nf-core/qc_bam.nf | 20 +++++++++++++++++--- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 50f53e4d..738f4197 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -107,6 +107,7 @@ process { ] } withName: 'CAT_CAT_BAIT' { + ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/processed_references" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index b64617f4..a602ab1c 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -38,7 +38,11 @@ workflow PREPARE_GENOME { // Uncompress vcfanno resources if nothing else given if ( params.vcfanno_resources.endsWith('.tar.gz') ) { - ch_vcfanno_resources = UNTAR_VCFANNO ( params.vcfanno_resources ).untar + ch_vcfanno_resources = UNTAR_VCFANNO ( [[],params.vcfanno_resources] ).untar + .map { + id, resources -> + return [resources] + } ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) } else { ch_vcfanno_resources = file(params.vcfanno_resources) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index b36d928e..5886f123 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -29,16 +29,30 @@ workflow QC_BAM { ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) // COLLECT HS METRICS - bait_intervals_out = bait_intervals + bait_intervals .collect { it[0] .toString() .split("_split")[0] .split("/")[-1] + "_bait.intervals_list" } .flatten() + .concat(bait_intervals) + .toList() + .map { + id, bait -> + return [['id':id], bait] + } + .set { bait_intervals_cat_in } + + CAT_CAT_BAIT ( bait_intervals_cat_in ) + .file_out + .map { + id, file -> + return [file] + } + .set { bait_intervals_cat_out } - CAT_CAT_BAIT ( bait_intervals, bait_intervals_out ) - PICARD_COLLECTHSMETRICS ( bam, fasta, fai, CAT_CAT_BAIT.out.file_out, target_intervals ) + PICARD_COLLECTHSMETRICS ( bam, fasta, fai, bait_intervals_cat_out, target_intervals ) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) // QUALIMAP BAMQC From 8021d2fad42573b54c80f3e9b961493ba4b7efbb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 14:06:23 +0200 Subject: [PATCH 0378/1921] fix prettier --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 3aef3733..04137834 100644 --- a/modules.json +++ b/modules.json @@ -98,4 +98,4 @@ } } } -} \ No newline at end of file +} From ca46108b8f19773de1c0a3a1e11608b15560afc6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 14:26:00 +0200 Subject: [PATCH 0379/1921] prettier --- modules.json | 2 +- nextflow_schema.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index 70521c04..0ae270e1 100644 --- a/modules.json +++ b/modules.json @@ -110,4 +110,4 @@ } } } -} \ No newline at end of file +} diff --git a/nextflow_schema.json b/nextflow_schema.json index 80ded6b6..3faa66df 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -175,10 +175,10 @@ "fa_icon": "fas fa-map-signs", "description": "Options to adjust parameters and filtering criteria for structural variant callers.", "properties": { - "aligner": { + "cnvpytor_chr": { "type": "string", "default": null, - "description": "Specifies the alignment algorithm to use - available options are 'bwamem2'.", + "description": "Specifies the chromosome for cnvpytor run", "fa_icon": "fas fa-map-signs" } } From 69f6ca5b995edd2a58fafa82a0ca61bdec5c1715 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 31 Mar 2022 14:31:02 +0200 Subject: [PATCH 0380/1921] fix lint error --- nextflow_schema.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 3faa66df..918bc933 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -370,6 +370,9 @@ { "$ref": "#/definitions/alignment_options" }, + { + "$ref": "#/definitions/sv_caller_options" + }, { "$ref": "#/definitions/institutional_config_options" }, From f917d892b86397be921f0a4a13f6ea79d78c43a0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 14:12:33 +0200 Subject: [PATCH 0381/1921] update modules config --- conf/modules.config | 7 ------- 1 file changed, 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a58c05d0..5a5e766f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -202,13 +202,6 @@ process { enabled: false, ] } - withName: BCFTOOLS_VIEW { - exts.args = '--output-type v --apply-filters PASS --exclude "INFO/clinical_genomics_mipAF > 0.40 | INFO/swegenAF > 0.40 | INFO/clingen_ngiAF > 0.40 | INFO/gnomad_svAF > 0.40 "' - publishDir = [ - path: { "${params.outdir}/sv_annotate" }, - mode: 'copy', - ] - } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { From 91ec66e604da04faf581ed1b2e6ef679fe9191f9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 15:06:01 +0200 Subject: [PATCH 0382/1921] update module --- modules.json | 9 ++++++--- modules/nf-core/modules/bcftools/view/main.nf | 11 +++++++++++ modules/nf-core/modules/picard/sortvcf/main.nf | 13 +++++++++++++ modules/nf-core/modules/picard/sortvcf/meta.yml | 2 +- modules/nf-core/modules/svdb/query/main.nf | 7 +++---- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index 881503e5..e48d2958 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bcftools/view": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bwamem2/index": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" @@ -61,7 +61,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/sortvcf": { - "git_sha": "d8028dc1c3ef64c2ee3494ce65d4f4a76c42bde9" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "qualimap/bamqc": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" @@ -81,6 +81,9 @@ "svdb/merge": { "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" }, + "svdb/query": { + "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" + }, "tabix/bgziptabix": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, @@ -104,4 +107,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf index 2a240f4a..ca1121a5 100644 --- a/modules/nf-core/modules/bcftools/view/main.nf +++ b/modules/nf-core/modules/bcftools/view/main.nf @@ -41,4 +41,15 @@ process BCFTOOLS_VIEW { bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/picard/sortvcf/main.nf b/modules/nf-core/modules/picard/sortvcf/main.nf index 0f10c1ab..4047545e 100644 --- a/modules/nf-core/modules/picard/sortvcf/main.nf +++ b/modules/nf-core/modules/picard/sortvcf/main.nf @@ -46,4 +46,17 @@ process PICARD_SORTVCF { picard: \$(picard SortVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_sorted.vcf.gz + touch ${prefix}.bam.bai + touch ${prefix}.MarkDuplicates.metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard SortVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/picard/sortvcf/meta.yml b/modules/nf-core/modules/picard/sortvcf/meta.yml index a2b46d5a..f75d3401 100644 --- a/modules/nf-core/modules/picard/sortvcf/meta.yml +++ b/modules/nf-core/modules/picard/sortvcf/meta.yml @@ -8,7 +8,7 @@ tools: description: Java tools for working with NGS data in the BAM/CRAM/SAM and VCF format homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/command-line-overview.html#SortVcf - licence: ['MIT'] + licence: ["MIT"] input: - meta: diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf index 37ce432c..c669b5a5 100644 --- a/modules/nf-core/modules/svdb/query/main.nf +++ b/modules/nf-core/modules/svdb/query/main.nf @@ -2,10 +2,10 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.5.2" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.5.2--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.5.2--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.6.0--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.6.0--py39h5371cbf_0' }" input: tuple val(meta), path(vcf) @@ -70,5 +70,4 @@ process SVDB_QUERY { svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) END_VERSIONS """ - } From 806fc71f7128c1c35d6c8a67312219793a4483f1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 15:09:12 +0200 Subject: [PATCH 0383/1921] prettier lint --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index e48d2958..3608aa86 100644 --- a/modules.json +++ b/modules.json @@ -107,4 +107,4 @@ } } } -} \ No newline at end of file +} From 2dec1e348a59b01f96f304c3f29d96c922b6bcdf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 15:31:12 +0200 Subject: [PATCH 0384/1921] remove bcftools view --- modules.json | 5 +- modules/nf-core/modules/bcftools/view/main.nf | 55 ---------------- .../nf-core/modules/bcftools/view/meta.yml | 63 ------------------- 3 files changed, 1 insertion(+), 122 deletions(-) delete mode 100644 modules/nf-core/modules/bcftools/view/main.nf delete mode 100644 modules/nf-core/modules/bcftools/view/meta.yml diff --git a/modules.json b/modules.json index 3608aa86..b84285b7 100644 --- a/modules.json +++ b/modules.json @@ -6,9 +6,6 @@ "bcftools/norm": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, - "bcftools/view": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" - }, "bwamem2/index": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, @@ -107,4 +104,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf deleted file mode 100644 index ca1121a5..00000000 --- a/modules/nf-core/modules/bcftools/view/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process BCFTOOLS_VIEW { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : - 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" - - input: - tuple val(meta), path(vcf), path(index) - path(regions) - path(targets) - path(samples) - - output: - tuple val(meta), path("*.gz") , emit: vcf - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def regions_file = regions ? "--regions-file ${regions}" : "" - def targets_file = targets ? "--targets-file ${targets}" : "" - def samples_file = samples ? "--samples-file ${samples}" : "" - """ - bcftools view \\ - --output ${prefix}.vcf.gz \\ - ${regions_file} \\ - ${targets_file} \\ - ${samples_file} \\ - $args \\ - --threads $task.cpus \\ - ${vcf} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.vcf.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/modules/bcftools/view/meta.yml b/modules/nf-core/modules/bcftools/view/meta.yml deleted file mode 100644 index 326fd1fa..00000000 --- a/modules/nf-core/modules/bcftools/view/meta.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: bcftools_view -description: View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF -keywords: - - variant calling - - view - - bcftools - - VCF - -tools: - - view: - description: | - View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF - homepage: http://samtools.github.io/bcftools/bcftools.html - documentation: http://www.htslib.org/doc/bcftools.html - doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - The vcf file to be inspected. - e.g. 'file.vcf' - - index: - type: file - description: | - The tab index for the VCF file to be inspected. - e.g. 'file.tbi' - - regions: - type: file - description: | - Optionally, restrict the operation to regions listed in this file. - e.g. 'file.vcf' - - targets: - type: file - description: | - Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) - e.g. 'file.vcf' - - samples: - type: file - description: | - Optional, file of sample names to be included or excluded. - e.g. 'file.tsv' -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF normalized output file - pattern: "*.{vcf.gz}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@abhi18av" From 2cd70c51aefff0ba5ac551a28f33a2bb1adff4a0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 15:32:50 +0200 Subject: [PATCH 0385/1921] prettier lint --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index b84285b7..50b91cae 100644 --- a/modules.json +++ b/modules.json @@ -104,4 +104,4 @@ } } } -} \ No newline at end of file +} From e6d4488225e96f9dce54c4c83c63ff2401301237 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 17:43:49 +0200 Subject: [PATCH 0386/1921] update modules --- modules.json | 10 +++++----- modules/nf-core/modules/cnvpytor/callcnvs/main.nf | 11 +++++++++++ modules/nf-core/modules/cnvpytor/histogram/main.nf | 10 ++++++++++ .../nf-core/modules/cnvpytor/importreaddepth/main.nf | 11 +++++++++++ modules/nf-core/modules/cnvpytor/partition/main.nf | 12 +++++++++++- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/modules.json b/modules.json index 5d96d70d..80eb7362 100644 --- a/modules.json +++ b/modules.json @@ -16,16 +16,16 @@ "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" }, "cnvpytor/callcnvs": { - "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" + "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" }, "cnvpytor/histogram": { - "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" + "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" }, "cnvpytor/importreaddepth": { - "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" + "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" }, "cnvpytor/partition": { - "git_sha": "233f2e728b175d8d3c398ce6dd052c6a14a3aeb7" + "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" @@ -110,4 +110,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf index e296656b..17675cde 100644 --- a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf +++ b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf @@ -30,4 +30,15 @@ process CNVPYTOR_CALLCNVS { cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/modules/cnvpytor/histogram/main.nf index e421f1b2..d1c6856c 100644 --- a/modules/nf-core/modules/cnvpytor/histogram/main.nf +++ b/modules/nf-core/modules/cnvpytor/histogram/main.nf @@ -29,4 +29,14 @@ process CNVPYTOR_HISTOGRAM { cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) END_VERSIONS """ + + stub: + """ + touch test.pytor + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf index 1b037629..162da719 100644 --- a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf @@ -35,4 +35,15 @@ process CNVPYTOR_IMPORTREADDEPTH { cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.pytor + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/modules/cnvpytor/partition/main.nf index 74ab4026..975458bf 100644 --- a/modules/nf-core/modules/cnvpytor/partition/main.nf +++ b/modules/nf-core/modules/cnvpytor/partition/main.nf @@ -18,7 +18,7 @@ process CNVPYTOR_PARTITION { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '1000' + def args = task.ext.args ?: '' """ cnvpytor \\ -root $pytor \\ @@ -29,4 +29,14 @@ process CNVPYTOR_PARTITION { cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) END_VERSIONS """ + + stub: + """ + touch test.pytor + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + END_VERSIONS + """ } From 3b99cc577084611ddcb343c49838bbd7e7125098 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 17:44:19 +0200 Subject: [PATCH 0387/1921] lint --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 80eb7362..709a4592 100644 --- a/modules.json +++ b/modules.json @@ -110,4 +110,4 @@ } } } -} \ No newline at end of file +} From 7bf88cfe4f966a88f611feb6258ca79959294836 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Apr 2022 18:08:55 +0200 Subject: [PATCH 0388/1921] review suggestions --- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ .../annotate_structural_variants.nf | 0 workflows/raredisease.nf | 18 ++++++++---------- 4 files changed, 15 insertions(+), 10 deletions(-) rename subworkflows/{local => nf-core}/annotate_structural_variants.nf (100%) diff --git a/nextflow.config b/nextflow.config index 969fa086..972655d7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,6 +22,7 @@ params { // Main options analysis_type = 'wgs' + annotate_sv_switch = false // Alignment aligner = 'bwamem2' diff --git a/nextflow_schema.json b/nextflow_schema.json index 14f5032e..9b9502a6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -157,6 +157,12 @@ "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"] + }, + "annotate_sv_switch": { + "type": "boolean", + "default": false, + "description": "Specifies whether or not to run annotate structural variant subworkflow.", + "fa_icon": "fas fa-book" } } }, diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/nf-core/annotate_structural_variants.nf similarity index 100% rename from subworkflows/local/annotate_structural_variants.nf rename to subworkflows/nf-core/annotate_structural_variants.nf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3acc52b8..abfb77e6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -65,15 +65,13 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' - - -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/annotate_structural_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -159,7 +157,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) ch_sv_annotate = Channel.empty() - if (params.svdb_query_dbs) { + if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, From 0d79eb882a1d659a5586197a1556557cfa836e38 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 2 Apr 2022 18:07:31 +0200 Subject: [PATCH 0389/1921] install vep --- modules.json | 5 +- modules/nf-core/modules/ensemblvep/Dockerfile | 30 +++++++++ modules/nf-core/modules/ensemblvep/build.sh | 27 ++++++++ .../modules/ensemblvep/environment.yml | 10 +++ modules/nf-core/modules/ensemblvep/main.nf | 52 +++++++++++++++ modules/nf-core/modules/ensemblvep/meta.yml | 65 +++++++++++++++++++ 6 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/modules/ensemblvep/Dockerfile create mode 100644 modules/nf-core/modules/ensemblvep/build.sh create mode 100644 modules/nf-core/modules/ensemblvep/environment.yml create mode 100644 modules/nf-core/modules/ensemblvep/main.nf create mode 100644 modules/nf-core/modules/ensemblvep/meta.yml diff --git a/modules.json b/modules.json index 04137834..1f4be9b9 100644 --- a/modules.json +++ b/modules.json @@ -21,6 +21,9 @@ "deepvariant": { "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, + "ensemblvep": { + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + }, "expansionhunter": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, @@ -98,4 +101,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/ensemblvep/Dockerfile b/modules/nf-core/modules/ensemblvep/Dockerfile new file mode 100644 index 00000000..ac1b4691 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/Dockerfile @@ -0,0 +1,30 @@ +FROM nfcore/base:1.14 +LABEL \ + author="Maxime Garcia" \ + description="VEP image for nf-core pipelines" \ + maintainer="maxime.garcia@scilifelab.se" + +# Install the conda environment +COPY environment.yml / +RUN conda env create -f /environment.yml && conda clean -a + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-vep-104.3/bin:$PATH + +# Setup default ARG variables +ARG GENOME=GRCh38 +ARG SPECIES=homo_sapiens +ARG VEP_VERSION=99 + +# Download Genome +RUN vep_install \ + -a c \ + -c .vep \ + -s ${SPECIES} \ + -y ${GENOME} \ + --CACHE_VERSION ${VEP_VERSION} \ + --CONVERT \ + --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-vep-104.3 > nf-core-vep-104.3.yml diff --git a/modules/nf-core/modules/ensemblvep/build.sh b/modules/nf-core/modules/ensemblvep/build.sh new file mode 100644 index 00000000..5fcb91df --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/build.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Build and push all containers + +build_push() { + GENOME=$1 + SPECIES=$2 + VEP_VERSION=$3 + VEP_TAG=$4 + + docker build \ + -t nfcore/vep:${VEP_TAG}.${GENOME} \ + software/vep/. \ + --build-arg GENOME=${GENOME} \ + --build-arg SPECIES=${SPECIES} \ + --build-arg VEP_VERSION=${VEP_VERSION} + + docker push nfcore/vep:${VEP_TAG}.${GENOME} +} + +build_push "GRCh37" "homo_sapiens" "104" "104.3" +build_push "GRCh38" "homo_sapiens" "104" "104.3" +build_push "GRCm38" "mus_musculus" "102" "104.3" +build_push "GRCm39" "mus_musculus" "104" "104.3" +build_push "CanFam3.1" "canis_lupus_familiaris" "104" "104.3" +build_push "WBcel235" "caenorhabditis_elegans" "104" "104.3" diff --git a/modules/nf-core/modules/ensemblvep/environment.yml b/modules/nf-core/modules/ensemblvep/environment.yml new file mode 100644 index 00000000..c0731c26 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/environment.yml @@ -0,0 +1,10 @@ +# You can use this file to create a conda environment for this module: +# conda env create -f environment.yml +name: nf-core-vep-104.3 +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - bioconda::ensembl-vep=104.3 diff --git a/modules/nf-core/modules/ensemblvep/main.nf b/modules/nf-core/modules/ensemblvep/main.nf new file mode 100644 index 00000000..c2bd055f --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/main.nf @@ -0,0 +1,52 @@ +process ENSEMBLVEP { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::ensembl-vep=104.3" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ensembl-vep:104.3--pl5262h4a94de4_0' : + 'quay.io/biocontainers/ensembl-vep:104.3--pl5262h4a94de4_0' }" + + input: + tuple val(meta), path(vcf) + val genome + val species + val cache_version + path cache + + output: + tuple val(meta), path("*.ann.vcf"), emit: vcf + path "*.summary.html" , emit: report + 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 dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" + """ + mkdir $prefix + + vep \\ + -i $vcf \\ + -o ${prefix}.ann.vcf \\ + $args \\ + --assembly $genome \\ + --species $species \\ + --cache \\ + --cache_version $cache_version \\ + --dir_cache $dir_cache \\ + --fork $task.cpus \\ + --vcf \\ + --stats_file ${prefix}.summary.html + + rm -rf $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/ensemblvep/meta.yml b/modules/nf-core/modules/ensemblvep/meta.yml new file mode 100644 index 00000000..cd9c8905 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/meta.yml @@ -0,0 +1,65 @@ +name: ENSEMBLVEP +description: Ensembl Variant Effect Predictor (VEP) +keywords: + - annotation +tools: + - ensemblvep: + description: | + VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs + or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. + homepage: https://www.ensembl.org/info/docs/tools/vep/index.html + documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html + licence: ["Apache-2.0"] +params: + - use_cache: + type: boolean + description: | + Enable the usage of containers with cache + Does not work with conda + - vep_tag: + type: value + description: | + Specify the tag for the container + https://hub.docker.com/r/nfcore/vep/tags +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - genome: + type: value + description: | + which genome to annotate with + - species: + type: value + description: | + which species to annotate with + - cache_version: + type: value + description: | + which version of the cache to annotate with + - cache: + type: file + description: | + path to VEP cache (optional) +output: + - vcf: + type: file + description: | + annotated vcf + pattern: "*.ann.vcf" + - report: + type: file + description: VEP report file + pattern: "*.html" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" From 802814e4ec24de4c015180ef97eb8fe7d392bdba Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 2 Apr 2022 20:05:34 +0200 Subject: [PATCH 0390/1921] add subworkflow --- conf/genomes.config | 2 ++ nextflow_schema.json | 6 ++++++ subworkflows/nf-core/annotate_vep.nf | 29 ++++++++++++++++++++++++++++ workflows/raredisease.nf | 3 ++- 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 subworkflows/nf-core/annotate_vep.nf diff --git a/conf/genomes.config b/conf/genomes.config index e8ddd83d..3929b88e 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -19,6 +19,7 @@ params { variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" + vep_cache = "${params.local_genomes}/vep_cache_grch37" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -29,6 +30,7 @@ params { variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" + vep_cache = "${params.local_genomes}/vep_cache_grch37" } } } diff --git a/nextflow_schema.json b/nextflow_schema.json index 24d18b4a..d27dfdc8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -124,6 +124,12 @@ "help_text": "If toml is passed, default configurations will be used according to genome build within the context of the pipeline.", "fa_icon": "fas fa-file-csv" }, + "vep_cache": { + "type": "string", + "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" + }, "save_reference": { "type": "boolean", "description": "If generated by the pipeline save the required indices/references in the results directory.", diff --git a/subworkflows/nf-core/annotate_vep.nf b/subworkflows/nf-core/annotate_vep.nf new file mode 100644 index 00000000..ef85a428 --- /dev/null +++ b/subworkflows/nf-core/annotate_vep.nf @@ -0,0 +1,29 @@ +// +// Annotate with VEP +// + +include { ENSEMBLVEP } from '../../modules/nf-core/modules/ensemblvep/main' + +workflow ANNOTATE_VEP { + take: + vcf // channel: [ val(meta), vcf ] + vep_genome + vep_species + vep_cache_version + vep_cache + + main: + ch_reports = Channel.empty() + ch_vcf_ann = Channel.empty() + ch_versions = Channel.empty() + + ENSEMBLVEP(vcf, vep_genome, vep_species, vep_cache_version, vep_cache) + + ch_reports = ch_reports.mix(ENSEMBLVEP.out.reports) + ch_vcf_ann = ch_vcf_ann.mix(ENSEMBLVEP.out.vcf_tbi) + ch_versions = ch_versions.mix(ENSEMBLVEP.out.versions.first()) + + emit: + vcf_ann = ch_vcf_ann // channel: [ val(meta), vcf.gz, vcf.gz.tbi ] + reports = ch_reports // path: *.html + versions = ch_versions // path: versions.yml} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index bf911f92..6ed2df6f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -17,7 +17,8 @@ def checkPathParamList = [ params.gnomad, params.input, params.multiqc_config, - params.vcfanno_resources + params.vcfanno_resources, + params.vep_cache ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } From c770a526f68503c72cdff8235c5c8b002672f939 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 3 Apr 2022 14:47:55 +0200 Subject: [PATCH 0391/1921] add blank line --- subworkflows/nf-core/annotate_vep.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/nf-core/annotate_vep.nf b/subworkflows/nf-core/annotate_vep.nf index ef85a428..b535b350 100644 --- a/subworkflows/nf-core/annotate_vep.nf +++ b/subworkflows/nf-core/annotate_vep.nf @@ -27,3 +27,4 @@ workflow ANNOTATE_VEP { vcf_ann = ch_vcf_ann // channel: [ val(meta), vcf.gz, vcf.gz.tbi ] reports = ch_reports // path: *.html versions = ch_versions // path: versions.yml} +} From 0cccc221596f1e770a14f9738c2d0c0957af8f81 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 3 Apr 2022 14:50:04 +0200 Subject: [PATCH 0392/1921] prettier lint --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 1f4be9b9..d15299a2 100644 --- a/modules.json +++ b/modules.json @@ -101,4 +101,4 @@ } } } -} \ No newline at end of file +} From f800423a32957867b40362cf44bfbaed7f3fa5d6 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Mon, 4 Apr 2022 10:39:02 +0200 Subject: [PATCH 0393/1921] refactor: isolate subwrkflw --- subworkflows/local/prepare_genome.nf | 23 ++++++++------ subworkflows/local/prepare_references.nf | 28 ++++++++++------- subworkflows/nf-core/align.nf | 2 ++ workflows/raredisease.nf | 40 ++++++++++++++---------- 4 files changed, 54 insertions(+), 39 deletions(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 71b966a7..58382408 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -10,8 +10,11 @@ include { GET_CHROM_SIZES } from '../../modules/local/ workflow PREPARE_GENOME { take: - fasta // channel: [mandatory] genome.fasta - variant_catalog // channel: [optional] variant_catalog.json + bwamem2_index // [mandatory] bwamem2_index + fasta // [mandatory] genome.fasta + fai // [mandatory] genome.fai + variant_catalog // [optional] variant_catalog.json + vcfanno_resources // [mandatory] vcfanno resource file main: ch_fasta = file(fasta) @@ -19,11 +22,11 @@ workflow PREPARE_GENOME { // Fetch BWAMEM2 index or create from scratch if required BWAMEM2_INDEX ( ch_fasta ) - ch_bwamem2_index = !params.bwamem2_index ? params.aligner == "bwamem2" ? BWAMEM2_INDEX.out.index : Channel.fromPath(params.bwamem2_index).collect() : Channel.empty() + ch_bwamem2_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : Channel.fromPath(bwamem2_index).collect() ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) - if ( params.fasta_fai ) { - ch_fai = file(params.fasta_fai) + if ( fai ) { + ch_fai = file(fai) } else { ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ) .fai @@ -32,15 +35,15 @@ workflow PREPARE_GENOME { } // Uncompress vcfanno resources if nothing else given - if ( params.vcfanno_resources.endsWith('.tar.gz') ) { - ch_vcfanno_resources = UNTAR_VCFANNO ( params.vcfanno_resources ).untar + if ( vcfanno_resources.endsWith('.tar.gz') ) { + ch_vcfanno_resources = UNTAR_VCFANNO ( vcfanno_resources ).untar ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) } else { - ch_vcfanno_resources = file(params.vcfanno_resources) + ch_vcfanno_resources = file(vcfanno_resources) } - if ( params.variant_catalog && file(params.variant_catalog, checkIfExists:true) ) { - ch_variant_catalog = file(params.variant_catalog) + if ( variant_catalog && file(variant_catalog, checkIfExists:true) ) { + ch_variant_catalog = file(variant_catalog) } else { if ( params.genome == 'GRCh38' ) { ch_variant_catalog = file("https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/reference/variant_catalog_grch38.json") diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index e60ab649..b484077e 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -9,27 +9,33 @@ include { PREPARE_GENOME } from './prepare_genome' workflow PREPARE_REFERENCES { take: + bwamem2_index // [mandatory] bwamem2_index + gnomad + fasta // [mandatory] genome.fasta + fai // [mandatory] genome.fai + target_bed + variant_catalog // [optional] variant_catalog.json + vcfanno_resources // [mandatory] vcfanno resource file main: - // // Prepare genome - // ch_versions = Channel.empty() PREPARE_GENOME ( - params.fasta, - params.variant_catalog + bwamem2_index, + fasta, + fai, + variant_catalog, + vcfanno_resources ) .set { ch_genome } ch_versions = ch_versions.mix(ch_genome.versions) - // // Gnomad vcf - // ch_gnomad_vcf = Channel.empty() ch_gnomad_idx = Channel.empty() - if (params.gnomad) { + if (gnomad) { CHECK_VCF( - params.gnomad, + gnomad, ch_genome.fasta ) ch_gnomad_vcf = CHECK_VCF.out.vcf @@ -37,15 +43,13 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(CHECK_VCF.out.versions) } - // // Target bed - // ch_target_bed = Channel.empty() ch_target_intervals = Channel.empty() ch_bait_intervals = Channel.empty() - if (params.target_bed) { + if (target_bed) { CHECK_BED( - params.target_bed, + target_bed, ch_genome.sequence_dict ) ch_target_bed = CHECK_BED.out.bed diff --git a/subworkflows/nf-core/align.nf b/subworkflows/nf-core/align.nf index 366a7868..b97502fe 100644 --- a/subworkflows/nf-core/align.nf +++ b/subworkflows/nf-core/align.nf @@ -23,11 +23,13 @@ workflow ALIGN { exit 1, 'Please provide a valid aligner!' } + ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) emit: marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] + bam_bai = ch_bam_bai // channel: [ val(meta), [ marked_bam, marked_bai ] ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f04d5481..d6363a19 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -64,7 +64,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { ALIGN } from '../subworkflows/nf-core/align' +include { ALIGN } from '../subworkflows/nf-core/align' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' @@ -100,25 +100,31 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // STEP 0: PREPARE GENOME REFERENCES AND INDICES. - PREPARE_REFERENCES ().set { ch_references } + PREPARE_REFERENCES ( + params.bwamem2_index, + params.gnomad, + params.fasta, + params.fasta_fai, + params.target_bed, + params.variant_catalog, + params.vcfanno_resources + ) + .set { ch_references } ch_versions = ch_versions.mix(ch_references.versions) // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( params.aligner, CHECK_INPUT.out.reads, - PREPARE_GENOME.out.bwamem2_index + ch_references.bwamem2_index ) - ch_marked_bam = ALIGN.out.marked_bam - ch_marked_bai = ALIGN.out.marked_bai - ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) - + .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) // STEP 1.5: BAM QUALITY CHECK QC_BAM ( - ch_marked_bam, - ch_marked_bai, + ch_mapped.marked_bam, + ch_mapped.marked_bai, ch_references.genome_fasta, ch_references.genome_fai, ch_references.bait_intervals, @@ -129,25 +135,25 @@ workflow RAREDISEASE { // STEP 1.6: EXPANSIONHUNTER CALL_REPEAT_EXPANSIONS ( - ch_bam_bai, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.variant_catalog + ch_mapped.bam_bai, + ch_references.genome_fasta, + ch_references.variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV_DEEPVARIANT ( - ch_bam_bai, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, + ch_mapped.bam_bai, + ch_references.genome_fasta, + ch_references.genome_fai, CHECK_INPUT.out.case_info ) ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) CALL_STRUCTURAL_VARIANTS ( - ch_marked_bam, - ch_marked_bai, + ch_mapped.marked_bam, + ch_mapped.marked_bai, ch_references.genome_fasta, ch_references.genome_fai, CHECK_INPUT.out.case_info, From c3167135f9db8c6dc361c3c12a08fe7f9e395f0a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Apr 2022 13:21:27 +0200 Subject: [PATCH 0394/1921] update module --- modules.json | 4 ++-- modules/nf-core/modules/cnvpytor/histogram/main.nf | 2 +- modules/nf-core/modules/cnvpytor/partition/main.nf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index 709a4592..515e4524 100644 --- a/modules.json +++ b/modules.json @@ -19,13 +19,13 @@ "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" }, "cnvpytor/histogram": { - "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" + "git_sha": "cb54d1ebd77de5b482cae89ed9e51fa6ef97d3ee" }, "cnvpytor/importreaddepth": { "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" }, "cnvpytor/partition": { - "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" + "git_sha": "cb54d1ebd77de5b482cae89ed9e51fa6ef97d3ee" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/modules/cnvpytor/histogram/main.nf index d1c6856c..9e59c6b8 100644 --- a/modules/nf-core/modules/cnvpytor/histogram/main.nf +++ b/modules/nf-core/modules/cnvpytor/histogram/main.nf @@ -32,7 +32,7 @@ process CNVPYTOR_HISTOGRAM { stub: """ - touch test.pytor + touch ${pytor.baseName}.pytor cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/modules/cnvpytor/partition/main.nf index 975458bf..0311bdfc 100644 --- a/modules/nf-core/modules/cnvpytor/partition/main.nf +++ b/modules/nf-core/modules/cnvpytor/partition/main.nf @@ -32,7 +32,7 @@ process CNVPYTOR_PARTITION { stub: """ - touch test.pytor + touch ${pytor.baseName}.pytor cat <<-END_VERSIONS > versions.yml "${task.process}": From 66f4e3c709d5a51a1b4ec26c5ded282fc6d7c19d Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 5 Apr 2022 10:09:09 +0200 Subject: [PATCH 0395/1921] Updates gens subworkflow usage to new ref channel --- workflows/raredisease.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index cbc4a2a7..b7fb4147 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -160,13 +160,13 @@ workflow RAREDISEASE { GENS ( ch_marked_bam.join(ch_marked_bai, by: [0]), CALL_SNV_DEEPVARIANT.out.vcf, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, + ch_references.genome_fasta, + ch_references.genome_fai, file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), INPUT_CHECK.out.ch_case_info, - PREPARE_GENOME.out.sequence_dict + ch_references.sequence_dict ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) From 2ced77e7167dba3ff561d221766cf1e2741b6fb3 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 5 Apr 2022 10:10:19 +0200 Subject: [PATCH 0396/1921] Changes INPUT_CHECK to CHECK_INPUT --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b7fb4147..662c9e05 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -165,7 +165,7 @@ workflow RAREDISEASE { file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), - INPUT_CHECK.out.ch_case_info, + CHECK_INPUT.out.ch_case_info, ch_references.sequence_dict ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) From c5fb46d71e8e734356220acc17a698f21c1bf2a3 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 5 Apr 2022 10:11:12 +0200 Subject: [PATCH 0397/1921] Changes ch_case_info to case_info --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 662c9e05..e18ffd39 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -165,7 +165,7 @@ workflow RAREDISEASE { file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), - CHECK_INPUT.out.ch_case_info, + CHECK_INPUT.out.case_info, ch_references.sequence_dict ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) From 17e4420215250ae3cd6de3d8285afad257b55282 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Apr 2022 11:27:27 +0200 Subject: [PATCH 0398/1921] modify description --- nextflow_schema.json | 2 +- .../nf-core/call_structural_variants.nf | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 79d1c4a8..ed09b9ad 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -190,7 +190,7 @@ "cnvpytor_chr": { "type": "string", "default": null, - "description": "Specifies the chromosome for cnvpytor run", + "description": "Chromosome names must be specified the same way as they are described in the sam/bam/cram header, e.g., chrX or X. One can specify multiple chromosomes separated by space.", "fa_icon": "fas fa-map-signs" } } diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index e1ac98b0..8d30d96f 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -34,8 +34,16 @@ workflow CALL_STRUCTURAL_VARIANTS { .set { tiddit_vcf } ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) + //cnvpytor + CALL_CNV_CNVPYTOR ( bam, bai, case_info ) + .candidate_cnvs_tsv + .collect{it[1]} + .set {cnvpytor_tsv } + ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) + //merge tiddit_vcf + .combine(manta_vcf) .combine(manta_vcf) .toList() .set { vcf_list } @@ -45,15 +53,6 @@ workflow CALL_STRUCTURAL_VARIANTS { SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta"] ) - //cnvpytor - CALL_CNV_CNVPYTOR ( bam, bai, case_info ) - .candidate_cnvs_tsv - .collect{it[1]} - .set {cnvpytor_tsv } - ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) - - - emit: vcf = SVDB_MERGE.out.vcf From 3e55444844068a3ea6e0188946ee84e59293a180 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:54:36 +0200 Subject: [PATCH 0399/1921] update params --- conf/genomes.config | 4 ++-- nextflow.config | 4 ++++ nextflow_schema.json | 25 +++++++++++++++++++++++++ subworkflows/nf-core/annotate_vep.nf | 8 ++------ workflows/raredisease.nf | 8 ++++++++ 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 3929b88e..64fdc89d 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -19,7 +19,7 @@ params { variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" - vep_cache = "${params.local_genomes}/vep_cache_grch37" + vep_cache = "${params.local_genomes}/vep_cache" } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -30,7 +30,7 @@ params { variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" - vep_cache = "${params.local_genomes}/vep_cache_grch37" + vep_cache = "${params.local_genomes}/vep_cache" } } } diff --git a/nextflow.config b/nextflow.config index 969fa086..a8797da7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,6 +26,10 @@ params { // Alignment aligner = 'bwamem2' + // Annotation + vep_genome = 'GRCh37' + vep_cache_version = '104' + // MultiQC options multiqc_config = null multiqc_title = null diff --git a/nextflow_schema.json b/nextflow_schema.json index d27dfdc8..043c0bfb 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -175,6 +175,28 @@ } } }, + "annotation_options": { + "title": "Annotation options", + "type": "object", + "fa_icon": "fas fa-user-cog", + "description": "Options used to facilitate the annotation of the variants.", + "properties": { + "vep_genome": { + "type": "string", + "default": "GRCh37", + "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": ["GRCh37", "GRCh38"] + }, + "vep_cache_version": { + "type": "string", + "default": "104", + "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": ["104", "105"] + } + } + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -362,6 +384,9 @@ { "$ref": "#/definitions/alignment_options" }, + { + "$ref": "#/definitions/annotation_options" + }, { "$ref": "#/definitions/institutional_config_options" }, diff --git a/subworkflows/nf-core/annotate_vep.nf b/subworkflows/nf-core/annotate_vep.nf index b535b350..87ad9c80 100644 --- a/subworkflows/nf-core/annotate_vep.nf +++ b/subworkflows/nf-core/annotate_vep.nf @@ -6,18 +6,14 @@ include { ENSEMBLVEP } from '../../modules/nf-core/modules/ensemblvep/main' workflow ANNOTATE_VEP { take: - vcf // channel: [ val(meta), vcf ] - vep_genome - vep_species - vep_cache_version - vep_cache + sv_vcf // channel: [ val(meta), vcf ] main: ch_reports = Channel.empty() ch_vcf_ann = Channel.empty() ch_versions = Channel.empty() - ENSEMBLVEP(vcf, vep_genome, vep_species, vep_cache_version, vep_cache) + ENSEMBLVEP(sv_vcf, params.vep_genome, "homo_sapiens", params.vep_cache_version, params.vep_cache) ch_reports = ch_reports.mix(ENSEMBLVEP.out.reports) ch_vcf_ann = ch_vcf_ann.mix(ENSEMBLVEP.out.vcf_tbi) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6ed2df6f..6706c3e2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -71,6 +71,7 @@ include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_d include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { ANNOTATE_VEP } from '../subworkflows/nf-core/annotate_variants' /* @@ -166,6 +167,13 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) + ANNOTATE_VEP ( + params.vcfanno_toml, + ch_dv_vcf, + ch_references.vcfanno_resources + ) + ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) + // // MODULE: Pipeline reporting // From 1998d96dfb99e570bf30dcbc8469b9b4964eb27f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Apr 2022 16:57:40 +0200 Subject: [PATCH 0400/1921] add vep to annotation subworkflow --- .../nf-core/annotate_structural_variants.nf | 4 +++ subworkflows/nf-core/annotate_vep.nf | 26 ------------------- workflows/raredisease.nf | 1 - 3 files changed, 4 insertions(+), 27 deletions(-) delete mode 100644 subworkflows/nf-core/annotate_vep.nf diff --git a/subworkflows/nf-core/annotate_structural_variants.nf b/subworkflows/nf-core/annotate_structural_variants.nf index 7d54eee1..d051bdcf 100644 --- a/subworkflows/nf-core/annotate_structural_variants.nf +++ b/subworkflows/nf-core/annotate_structural_variants.nf @@ -4,6 +4,7 @@ include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' +include { ENSEMBLVEP } from '../../modules/nf-core/modules/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -40,6 +41,9 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { seq_dict ) + ENSEMBLVEP(PICARD_SORTVCF.out.vcf, params.vep_genome, "homo_sapiens", params.vep_cache_version, params.vep_cache) + emit: + vcf_ann = ENSEMBLVEP.out.vcf_tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/annotate_vep.nf b/subworkflows/nf-core/annotate_vep.nf deleted file mode 100644 index 87ad9c80..00000000 --- a/subworkflows/nf-core/annotate_vep.nf +++ /dev/null @@ -1,26 +0,0 @@ -// -// Annotate with VEP -// - -include { ENSEMBLVEP } from '../../modules/nf-core/modules/ensemblvep/main' - -workflow ANNOTATE_VEP { - take: - sv_vcf // channel: [ val(meta), vcf ] - - main: - ch_reports = Channel.empty() - ch_vcf_ann = Channel.empty() - ch_versions = Channel.empty() - - ENSEMBLVEP(sv_vcf, params.vep_genome, "homo_sapiens", params.vep_cache_version, params.vep_cache) - - ch_reports = ch_reports.mix(ENSEMBLVEP.out.reports) - ch_vcf_ann = ch_vcf_ann.mix(ENSEMBLVEP.out.vcf_tbi) - ch_versions = ch_versions.mix(ENSEMBLVEP.out.versions.first()) - - emit: - vcf_ann = ch_vcf_ann // channel: [ val(meta), vcf.gz, vcf.gz.tbi ] - reports = ch_reports // path: *.html - versions = ch_versions // path: versions.yml} -} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3edd9d7a..fd460558 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -73,7 +73,6 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/annotate_structural_variants' -include { ANNOTATE_VEP } from '../subworkflows/nf-core/annotate_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From c30c916f218ad2aeaa929b1335798006cd58013c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Apr 2022 17:38:36 +0200 Subject: [PATCH 0401/1921] add vepcache to main.nf --- main.nf | 2 ++ workflows/raredisease.nf | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/main.nf b/main.nf index 5f11003a..2de5ffcb 100644 --- a/main.nf +++ b/main.nf @@ -26,6 +26,8 @@ params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_quer params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') +params.vep_cache = WorkflowMain.getGenomeAttribute(params, 'vep_cache') + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index fd460558..8f4dee2b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -179,13 +179,6 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) - ANNOTATE_VEP ( - params.vcfanno_toml, - ch_dv_vcf, - ch_references.vcfanno_resources - ) - ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) - // // MODULE: Pipeline reporting // From 651a997c37928b1c17ed96730ea92ae4d759b7ff Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Wed, 6 Apr 2022 17:02:30 +0200 Subject: [PATCH 0402/1921] Update README.md Adds note about to the master branch about the current status of the pipeline --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 27db6607..7e46b1e2 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,12 @@ ## Introduction +> NOTE +> +> This pipeline is under development and no stable release has been made yet. +> +> You can follow the work in the [dev](https://github.com/nf-core/raredisease/tree/dev) branch. + **nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for call and score variants from WGS/WES of rare disease patients. From 53553c0e3e605b24936cc8c971a1bb0d301a75bc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Apr 2022 23:32:39 +0200 Subject: [PATCH 0403/1921] vep run --- conf/modules.config | 17 +++++++++++++++++ .../nf-core/annotate_structural_variants.nf | 15 +++++++++------ workflows/raredisease.nf | 3 +++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 5a5e766f..fea6438f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -202,6 +202,23 @@ process { enabled: false, ] } + withName: ENSEMBLVEP { + ext.args = [ + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422 --vcf', + '--appris --biotype --canonical --ccds', + '--domains --exclude_predicted --force_overwrite', + '--humdiv --no_progress --no_stats --numbers', + '--polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/sv_annotate" }, + mode: params.publish_dir_mode, + ] + } // NF-CORE Subworkflows // ALIGN_BWAMEM2 withName: BWAMEM2_MEM { diff --git a/subworkflows/nf-core/annotate_structural_variants.nf b/subworkflows/nf-core/annotate_structural_variants.nf index d051bdcf..2b650252 100644 --- a/subworkflows/nf-core/annotate_structural_variants.nf +++ b/subworkflows/nf-core/annotate_structural_variants.nf @@ -9,10 +9,13 @@ include { ENSEMBLVEP } from '../../modules/nf-core/modules/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { take: - vcf // channel: [ val(meta), path(vcf) ] - sv_dbs // file: dbs.csv - fasta // file: genome.fasta - seq_dict // file: genome.dict + vcf // channel: [ val(meta), path(vcf) ] + sv_dbs // file: dbs.csv + vep_genome + vep_cache_version + vep_cache + fasta // file: genome.fasta + seq_dict // file: genome.dict main: ch_versions = Channel.empty() @@ -41,9 +44,9 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { seq_dict ) - ENSEMBLVEP(PICARD_SORTVCF.out.vcf, params.vep_genome, "homo_sapiens", params.vep_cache_version, params.vep_cache) + ENSEMBLVEP(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) emit: - vcf_ann = ENSEMBLVEP.out.vcf_tbi + vcf_ann = ENSEMBLVEP.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8f4dee2b..3856408d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -162,6 +162,9 @@ workflow RAREDISEASE { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, + params.vep_genome, + params.vep_cache_version, + params.vep_cache, ch_references.genome_fasta, ch_references.sequence_dict ).set {ch_sv_annotate} From 8e9e38530f54d893e8c9f42fd8af4b1cf0c3f1e6 Mon Sep 17 00:00:00 2001 From: sysbiocoder Date: Fri, 8 Apr 2022 09:52:43 +0200 Subject: [PATCH 0404/1921] modified: modules.json new file: modules/nf-core/modules/samtools/view/main.nf new file: modules/nf-core/modules/samtools/view/meta.yml --- modules.json | 5 +- modules/nf-core/modules/samtools/view/main.nf | 44 +++++++++++++++ .../nf-core/modules/samtools/view/meta.yml | 53 +++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/modules/samtools/view/main.nf create mode 100644 modules/nf-core/modules/samtools/view/meta.yml diff --git a/modules.json b/modules.json index 50b91cae..087a28a8 100644 --- a/modules.json +++ b/modules.json @@ -75,6 +75,9 @@ "samtools/stats": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "samtools/view": { + "git_sha": "1ad73f1b2abdea9398680d6d20014838135c9a35" + }, "svdb/merge": { "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" }, @@ -104,4 +107,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf new file mode 100644 index 00000000..75aad063 --- /dev/null +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -0,0 +1,44 @@ +process SAMTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::samtools=1.15" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.15--h1170115_1' : + 'quay.io/biocontainers/samtools:1.15--h1170115_1' }" + + input: + tuple val(meta), path(input) + path fasta + + output: + tuple val(meta), path("*.bam") , emit: bam , optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--reference ${fasta} -C" : "" + def file_type = 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} \\ + $args \\ + $input \\ + $args2 \\ + > ${prefix}.${file_type} + + 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/modules/samtools/view/meta.yml b/modules/nf-core/modules/samtools/view/meta.yml new file mode 100644 index 00000000..5604bfa7 --- /dev/null +++ b/modules/nf-core/modules/samtools/view/meta.yml @@ -0,0 +1,53 @@ +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: hhttp://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}" + - fasta: + type: optional file + description: Reference file the CRAM was created with + pattern: "*.{fasta,fa}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: filtered/converted BAM/SAM file + pattern: "*.{bam,sam}" + - cram: + type: file + description: filtered/converted CRAM file + pattern: "*.cram" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@joseespinosa" + - "@FriederikeHanssen" From 25fa996e1ae2ed50b96c5812c4337de35ca8d155 Mon Sep 17 00:00:00 2001 From: sysbiocoder Date: Fri, 8 Apr 2022 10:04:04 +0200 Subject: [PATCH 0405/1921] Ran Prettier --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 087a28a8..d46c250e 100644 --- a/modules.json +++ b/modules.json @@ -107,4 +107,4 @@ } } } -} \ No newline at end of file +} From 75c3bc45ccb65f9bd6514b012a9ec1be1432b9c5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 10:15:25 +0200 Subject: [PATCH 0406/1921] make it local and switch vep to version 105 --- modules.json | 3 --- modules/{nf-core/modules => local}/ensemblvep/Dockerfile | 0 modules/{nf-core/modules => local}/ensemblvep/build.sh | 0 modules/{nf-core/modules => local}/ensemblvep/environment.yml | 0 modules/{nf-core/modules => local}/ensemblvep/main.nf | 4 ++-- modules/{nf-core/modules => local}/ensemblvep/meta.yml | 0 subworkflows/nf-core/annotate_structural_variants.nf | 2 +- subworkflows/nf-core/annotate_vcfanno.nf | 3 ++- 8 files changed, 5 insertions(+), 7 deletions(-) rename modules/{nf-core/modules => local}/ensemblvep/Dockerfile (100%) rename modules/{nf-core/modules => local}/ensemblvep/build.sh (100%) rename modules/{nf-core/modules => local}/ensemblvep/environment.yml (100%) rename modules/{nf-core/modules => local}/ensemblvep/main.nf (93%) rename modules/{nf-core/modules => local}/ensemblvep/meta.yml (100%) diff --git a/modules.json b/modules.json index 206224dc..50b91cae 100644 --- a/modules.json +++ b/modules.json @@ -21,9 +21,6 @@ "deepvariant": { "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, - "ensemblvep": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" - }, "expansionhunter": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, diff --git a/modules/nf-core/modules/ensemblvep/Dockerfile b/modules/local/ensemblvep/Dockerfile similarity index 100% rename from modules/nf-core/modules/ensemblvep/Dockerfile rename to modules/local/ensemblvep/Dockerfile diff --git a/modules/nf-core/modules/ensemblvep/build.sh b/modules/local/ensemblvep/build.sh similarity index 100% rename from modules/nf-core/modules/ensemblvep/build.sh rename to modules/local/ensemblvep/build.sh diff --git a/modules/nf-core/modules/ensemblvep/environment.yml b/modules/local/ensemblvep/environment.yml similarity index 100% rename from modules/nf-core/modules/ensemblvep/environment.yml rename to modules/local/ensemblvep/environment.yml diff --git a/modules/nf-core/modules/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf similarity index 93% rename from modules/nf-core/modules/ensemblvep/main.nf rename to modules/local/ensemblvep/main.nf index c2bd055f..9927c482 100644 --- a/modules/nf-core/modules/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -4,8 +4,8 @@ process ENSEMBLVEP { conda (params.enable_conda ? "bioconda::ensembl-vep=104.3" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:104.3--pl5262h4a94de4_0' : - 'quay.io/biocontainers/ensembl-vep:104.3--pl5262h4a94de4_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:105.0--pl5321h4a94de4_1' : + 'quay.io/biocontainers/ensembl-vep:105.0--pl5321h4a94de4_1' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/modules/ensemblvep/meta.yml b/modules/local/ensemblvep/meta.yml similarity index 100% rename from modules/nf-core/modules/ensemblvep/meta.yml rename to modules/local/ensemblvep/meta.yml diff --git a/subworkflows/nf-core/annotate_structural_variants.nf b/subworkflows/nf-core/annotate_structural_variants.nf index 2b650252..b69ec843 100644 --- a/subworkflows/nf-core/annotate_structural_variants.nf +++ b/subworkflows/nf-core/annotate_structural_variants.nf @@ -4,7 +4,7 @@ include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' -include { ENSEMBLVEP } from '../../modules/nf-core/modules/ensemblvep/main' +include { ENSEMBLVEP } from '../../modules/local/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { diff --git a/subworkflows/nf-core/annotate_vcfanno.nf b/subworkflows/nf-core/annotate_vcfanno.nf index 380767b5..ce665ba5 100644 --- a/subworkflows/nf-core/annotate_vcfanno.nf +++ b/subworkflows/nf-core/annotate_vcfanno.nf @@ -12,9 +12,10 @@ workflow ANNOTATE_VCFANNO { main: ch_versions = Channel.empty() + ch_toml = file(toml) ch_placeholder = vcf.map { meta, vcf, idx -> vcf = []; [meta, vcf] } - VCFANNO (vcf, ch_placeholder, toml, resource_dir) + VCFANNO (vcf, ch_placeholder, ch_toml, resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) emit: From e1484fbe8a4696c42dea7731830b96733ffb07e7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 10:20:30 +0200 Subject: [PATCH 0407/1921] update version in config --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index dba11155..24464442 100644 --- a/nextflow.config +++ b/nextflow.config @@ -29,7 +29,7 @@ params { // Annotation vep_genome = 'GRCh37' - vep_cache_version = '104' + vep_cache_version = '105' // MultiQC options multiqc_config = null From 9292b934f5607230ee768bf1f23935b56b529304 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 13:53:07 +0200 Subject: [PATCH 0408/1921] remove dockerfile --- modules/local/ensemblvep/Dockerfile | 30 ------------------------ modules/local/ensemblvep/build.sh | 27 --------------------- modules/local/ensemblvep/environment.yml | 10 -------- 3 files changed, 67 deletions(-) delete mode 100644 modules/local/ensemblvep/Dockerfile delete mode 100644 modules/local/ensemblvep/build.sh delete mode 100644 modules/local/ensemblvep/environment.yml diff --git a/modules/local/ensemblvep/Dockerfile b/modules/local/ensemblvep/Dockerfile deleted file mode 100644 index ac1b4691..00000000 --- a/modules/local/ensemblvep/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -FROM nfcore/base:1.14 -LABEL \ - author="Maxime Garcia" \ - description="VEP image for nf-core pipelines" \ - maintainer="maxime.garcia@scilifelab.se" - -# Install the conda environment -COPY environment.yml / -RUN conda env create -f /environment.yml && conda clean -a - -# Add conda installation dir to PATH (instead of doing 'conda activate') -ENV PATH /opt/conda/envs/nf-core-vep-104.3/bin:$PATH - -# Setup default ARG variables -ARG GENOME=GRCh38 -ARG SPECIES=homo_sapiens -ARG VEP_VERSION=99 - -# Download Genome -RUN vep_install \ - -a c \ - -c .vep \ - -s ${SPECIES} \ - -y ${GENOME} \ - --CACHE_VERSION ${VEP_VERSION} \ - --CONVERT \ - --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE - -# Dump the details of the installed packages to a file for posterity -RUN conda env export --name nf-core-vep-104.3 > nf-core-vep-104.3.yml diff --git a/modules/local/ensemblvep/build.sh b/modules/local/ensemblvep/build.sh deleted file mode 100644 index 5fcb91df..00000000 --- a/modules/local/ensemblvep/build.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Build and push all containers - -build_push() { - GENOME=$1 - SPECIES=$2 - VEP_VERSION=$3 - VEP_TAG=$4 - - docker build \ - -t nfcore/vep:${VEP_TAG}.${GENOME} \ - software/vep/. \ - --build-arg GENOME=${GENOME} \ - --build-arg SPECIES=${SPECIES} \ - --build-arg VEP_VERSION=${VEP_VERSION} - - docker push nfcore/vep:${VEP_TAG}.${GENOME} -} - -build_push "GRCh37" "homo_sapiens" "104" "104.3" -build_push "GRCh38" "homo_sapiens" "104" "104.3" -build_push "GRCm38" "mus_musculus" "102" "104.3" -build_push "GRCm39" "mus_musculus" "104" "104.3" -build_push "CanFam3.1" "canis_lupus_familiaris" "104" "104.3" -build_push "WBcel235" "caenorhabditis_elegans" "104" "104.3" diff --git a/modules/local/ensemblvep/environment.yml b/modules/local/ensemblvep/environment.yml deleted file mode 100644 index c0731c26..00000000 --- a/modules/local/ensemblvep/environment.yml +++ /dev/null @@ -1,10 +0,0 @@ -# You can use this file to create a conda environment for this module: -# conda env create -f environment.yml -name: nf-core-vep-104.3 -channels: - - conda-forge - - bioconda - - defaults - -dependencies: - - bioconda::ensembl-vep=104.3 From f695698c50a8fc3a689650961654e2a3e7cee459 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 16:45:03 +0200 Subject: [PATCH 0409/1921] review suggestions --- main.nf | 1 - modules/local/ensemblvep/main.nf | 9 +++++---- nextflow.config | 1 - nextflow_schema.json | 7 ------- .../{nf-core => local}/annotate_structural_variants.nf | 6 +++--- workflows/raredisease.nf | 8 ++++---- 6 files changed, 12 insertions(+), 20 deletions(-) rename subworkflows/{nf-core => local}/annotate_structural_variants.nf (83%) diff --git a/main.nf b/main.nf index 2de5ffcb..8446ff6c 100644 --- a/main.nf +++ b/main.nf @@ -28,7 +28,6 @@ params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_r params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') params.vep_cache = WorkflowMain.getGenomeAttribute(params, 'vep_cache') - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VALIDATE & PRINT PARAMETER SUMMARY diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 9927c482..54b97e3c 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -2,7 +2,7 @@ process ENSEMBLVEP { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::ensembl-vep=104.3" : null) + conda (params.enable_conda ? "bioconda::ensembl-vep=105.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ensembl-vep:105.0--pl5321h4a94de4_1' : 'quay.io/biocontainers/ensembl-vep:105.0--pl5321h4a94de4_1' }" @@ -15,9 +15,9 @@ process ENSEMBLVEP { path cache output: - tuple val(meta), path("*.ann.vcf"), emit: vcf - path "*.summary.html" , emit: report - path "versions.yml" , emit: versions + tuple val(meta), path("*.ann.vcf.gz"), emit: vcf + path "*.summary.html" , emit: report + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -40,6 +40,7 @@ process ENSEMBLVEP { --dir_cache $dir_cache \\ --fork $task.cpus \\ --vcf \\ + --compress_output bgzip \\ --stats_file ${prefix}.summary.html rm -rf $prefix diff --git a/nextflow.config b/nextflow.config index 24464442..b51aa773 100644 --- a/nextflow.config +++ b/nextflow.config @@ -28,7 +28,6 @@ params { aligner = 'bwamem2' // Annotation - vep_genome = 'GRCh37' vep_cache_version = '105' // MultiQC options diff --git a/nextflow_schema.json b/nextflow_schema.json index 8ac7e28a..9e4c1acb 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -193,13 +193,6 @@ "fa_icon": "fas fa-user-cog", "description": "Options used to facilitate the annotation of the variants.", "properties": { - "vep_genome": { - "type": "string", - "default": "GRCh37", - "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": ["GRCh37", "GRCh38"] - }, "vep_cache_version": { "type": "string", "default": "104", diff --git a/subworkflows/nf-core/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf similarity index 83% rename from subworkflows/nf-core/annotate_structural_variants.nf rename to subworkflows/local/annotate_structural_variants.nf index b69ec843..2ddb2341 100644 --- a/subworkflows/nf-core/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,9 +2,9 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' -include { ENSEMBLVEP } from '../../modules/local/ensemblvep/main' +include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3856408d..223ec44c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -45,8 +45,9 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { CHECK_INPUT } from '../subworkflows/local/check_input' -include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' +include { CHECK_INPUT } from '../subworkflows/local/check_input' +include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -72,7 +73,6 @@ include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/annotate_structural_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -162,7 +162,7 @@ workflow RAREDISEASE { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, - params.vep_genome, + params.genome, params.vep_cache_version, params.vep_cache, ch_references.genome_fasta, From 9008f2635d1041d31eebbb6d8742e389694abf89 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 16:47:43 +0200 Subject: [PATCH 0410/1921] update modules config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index fea6438f..9f306995 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -202,7 +202,7 @@ process { enabled: false, ] } - withName: ENSEMBLVEP { + withName: ENSEMBLVEP_SV { ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', '--distance 5000', From 492ffc0f4b74688d8e1e2069cc9bf193545af76d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 16:48:42 +0200 Subject: [PATCH 0411/1921] update process name in subworkflow --- subworkflows/local/annotate_structural_variants.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 2ddb2341..7bc4ecbb 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -44,9 +44,9 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { seq_dict ) - ENSEMBLVEP(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) + ENSEMBLVEP_SV(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) emit: - vcf_ann = ENSEMBLVEP.out.vcf + vcf_ann = ENSEMBLVEP_SV.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 08d11c1c1a3b3602fc642fae69a51ef1779f2647 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 20:38:25 +0200 Subject: [PATCH 0412/1921] add channel versions --- subworkflows/local/annotate_structural_variants.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 7bc4ecbb..94a50d80 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -38,13 +38,16 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_svdb_dbs.out_frqs.toList(), ch_svdb_dbs.vcf_dbs.toList() ) + ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) PICARD_SORTVCF(SVDB_QUERY.out.vcf, fasta, seq_dict ) + ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) ENSEMBLVEP_SV(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) + ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: vcf_ann = ENSEMBLVEP_SV.out.vcf From ddceb70ccc7b2dfad49bf060cdd01f96aa888dff Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 8 Apr 2022 21:16:13 +0200 Subject: [PATCH 0413/1921] add prettierignore to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5124c9ac..078e243b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ results/ testing/ testing* *.pyc +.prettierignore From 650f801bfc84281ee50a8b4d71cd4b5057dfebc4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 10 Apr 2022 09:47:51 +0200 Subject: [PATCH 0414/1921] update file extension --- modules/local/ensemblvep/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 54b97e3c..49beafa8 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -31,7 +31,7 @@ process ENSEMBLVEP { vep \\ -i $vcf \\ - -o ${prefix}.ann.vcf \\ + -o ${prefix}.ann.vcf.gz \\ $args \\ --assembly $genome \\ --species $species \\ From 0cf4f98ccee28da148995bd97392f02b5dc14754 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 10 Apr 2022 11:09:58 +0200 Subject: [PATCH 0415/1921] report as optional --- modules/local/ensemblvep/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 49beafa8..c2264d16 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -16,7 +16,7 @@ process ENSEMBLVEP { output: tuple val(meta), path("*.ann.vcf.gz"), emit: vcf - path "*.summary.html" , emit: report + path "*.summary.html" , emit: report, optional: true path "versions.yml" , emit: versions when: From e898599e664581d3a9439a70f372271fb4066661 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 11 Apr 2022 13:50:46 +0200 Subject: [PATCH 0416/1921] review suggestions --- .prettierignore | 8 +++++++ conf/modules.config | 2 +- nextflow.config | 2 +- .../local/annotate_structural_variants.nf | 12 +++++----- workflows/raredisease.nf | 24 +++++++++---------- 5 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..5124c9ac --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +.nextflow* +work/ +data/ +results/ +.DS_Store +testing/ +testing* +*.pyc diff --git a/conf/modules.config b/conf/modules.config index 9f306995..10639817 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -207,7 +207,7 @@ process { '--plugin LoFtool,vep_cache/LoFtool_scores.txt', '--distance 5000', '--buffer_size 20000', - '--format vcf --max_sv_size 248956422 --vcf', + '--format vcf --max_sv_size 248956422', '--appris --biotype --canonical --ccds', '--domains --exclude_predicted --force_overwrite', '--humdiv --no_progress --no_stats --numbers', diff --git a/nextflow.config b/nextflow.config index b51aa773..ecafbecb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,7 +22,7 @@ params { // Main options analysis_type = 'wgs' - annotate_sv_switch = false + annotate_sv_switch = true // Alignment aligner = 'bwamem2' diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 94a50d80..6a8ef0ce 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -40,13 +40,13 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ) ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) - PICARD_SORTVCF(SVDB_QUERY.out.vcf, - fasta, - seq_dict - ) - ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) + // PICARD_SORTVCF(SVDB_QUERY.out.vcf, + // fasta, + // seq_dict + // ) + // ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - ENSEMBLVEP_SV(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) + ENSEMBLVEP_SV(SVDB_QUERY.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 223ec44c..1c87e027 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -130,12 +130,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) // STEP 1.6: EXPANSIONHUNTER - CALL_REPEAT_EXPANSIONS ( - ch_marked_bam.join(ch_marked_bai, by: [0]), - ch_references.genome_fasta, - ch_references.variant_catalog - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + // CALL_REPEAT_EXPANSIONS ( + // ch_marked_bam.join(ch_marked_bai, by: [0]), + // ch_references.genome_fasta, + // ch_references.variant_catalog + // ) + // ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. @@ -175,12 +175,12 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) - ANNOTATE_VCFANNO ( - params.vcfanno_toml, - ch_dv_vcf, - ch_references.vcfanno_resources - ) - ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) + // ANNOTATE_VCFANNO ( + // params.vcfanno_toml, + // ch_dv_vcf, + // ch_references.vcfanno_resources + // ) + // ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) // // MODULE: Pipeline reporting From 6c7573243f96c2449a2bc4d3b37ffc5546d9ed90 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 11 Apr 2022 13:58:51 +0200 Subject: [PATCH 0417/1921] fix error --- nextflow.config | 2 +- .../local/annotate_structural_variants.nf | 12 +++++----- workflows/raredisease.nf | 24 +++++++++---------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/nextflow.config b/nextflow.config index ecafbecb..b51aa773 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,7 +22,7 @@ params { // Main options analysis_type = 'wgs' - annotate_sv_switch = true + annotate_sv_switch = false // Alignment aligner = 'bwamem2' diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 6a8ef0ce..94a50d80 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -40,13 +40,13 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ) ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) - // PICARD_SORTVCF(SVDB_QUERY.out.vcf, - // fasta, - // seq_dict - // ) - // ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) + PICARD_SORTVCF(SVDB_QUERY.out.vcf, + fasta, + seq_dict + ) + ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - ENSEMBLVEP_SV(SVDB_QUERY.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) + ENSEMBLVEP_SV(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1c87e027..223ec44c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -130,12 +130,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) // STEP 1.6: EXPANSIONHUNTER - // CALL_REPEAT_EXPANSIONS ( - // ch_marked_bam.join(ch_marked_bai, by: [0]), - // ch_references.genome_fasta, - // ch_references.variant_catalog - // ) - // ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + CALL_REPEAT_EXPANSIONS ( + ch_marked_bam.join(ch_marked_bai, by: [0]), + ch_references.genome_fasta, + ch_references.variant_catalog + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. @@ -175,12 +175,12 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) - // ANNOTATE_VCFANNO ( - // params.vcfanno_toml, - // ch_dv_vcf, - // ch_references.vcfanno_resources - // ) - // ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) + ANNOTATE_VCFANNO ( + params.vcfanno_toml, + ch_dv_vcf, + ch_references.vcfanno_resources + ) + ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) // // MODULE: Pipeline reporting From 749c93935b28c7abef8737b5535a00921e6e0743 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 11 Apr 2022 21:32:01 +0200 Subject: [PATCH 0418/1921] install module --- modules.json | 3 + modules/nf-core/modules/bcftools/view/main.nf | 55 ++++++++++++++++ .../nf-core/modules/bcftools/view/meta.yml | 63 +++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 modules/nf-core/modules/bcftools/view/main.nf create mode 100644 modules/nf-core/modules/bcftools/view/meta.yml diff --git a/modules.json b/modules.json index d46c250e..4b588d37 100644 --- a/modules.json +++ b/modules.json @@ -6,6 +6,9 @@ "bcftools/norm": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "bcftools/view": { + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + }, "bwamem2/index": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf new file mode 100644 index 00000000..ca1121a5 --- /dev/null +++ b/modules/nf-core/modules/bcftools/view/main.nf @@ -0,0 +1,55 @@ +process BCFTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : + 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" + + input: + tuple val(meta), path(vcf), path(index) + path(regions) + path(targets) + path(samples) + + output: + tuple val(meta), path("*.gz") , emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def regions_file = regions ? "--regions-file ${regions}" : "" + def targets_file = targets ? "--targets-file ${targets}" : "" + def samples_file = samples ? "--samples-file ${samples}" : "" + """ + bcftools view \\ + --output ${prefix}.vcf.gz \\ + ${regions_file} \\ + ${targets_file} \\ + ${samples_file} \\ + $args \\ + --threads $task.cpus \\ + ${vcf} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bcftools/view/meta.yml b/modules/nf-core/modules/bcftools/view/meta.yml new file mode 100644 index 00000000..326fd1fa --- /dev/null +++ b/modules/nf-core/modules/bcftools/view/meta.yml @@ -0,0 +1,63 @@ +name: bcftools_view +description: View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF +keywords: + - variant calling + - view + - bcftools + - VCF + +tools: + - view: + description: | + View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be inspected. + e.g. 'file.vcf' + - index: + type: file + description: | + The tab index for the VCF file to be inspected. + e.g. 'file.tbi' + - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. + e.g. 'file.vcf' + - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) + e.g. 'file.vcf' + - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF normalized output file + pattern: "*.{vcf.gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" From 79b37a92958a954b02abd58a1021ad22b694c9d4 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:32:15 +0200 Subject: [PATCH 0419/1921] fix lint --- workflows/raredisease.nf | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 779a7153..6ea2cf37 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -67,22 +67,13 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -<<<<<<< HEAD -include { ALIGN } from '../subworkflows/nf-core/align' -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/annotate_structural_variants' -======= -include { ALIGN_BWAMEM2 } from '../subworkflows/nf-core/align_bwamem2' +include { ALIGN } from '../subworkflows/nf-core/align' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' ->>>>>>> dev +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/annotate_structural_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 79465611a8c3f6957a8d8dae269b499a7cb6edf2 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:35:51 +0200 Subject: [PATCH 0420/1921] fix lint: part 2 --- workflows/raredisease.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6ea2cf37..0c7dfab0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -73,7 +73,6 @@ include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/annotate_structural_variants' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 9623cf75da30520c8cd50a7056e2eacda923e745 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 12 Apr 2022 10:58:23 +0200 Subject: [PATCH 0421/1921] hidden away some params --- nextflow_schema.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 9e4c1acb..1ff70ab6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -68,7 +68,8 @@ "format": "file-path", "help_text": "If none provided, will be generated automatically from the FASTA reference", "description": "Path to FASTA genome index file.", - "fa_icon": "far fa-file-code" + "fa_icon": "far fa-file-code", + "hidden": true }, "igenomes_base": { "type": "string", @@ -115,8 +116,9 @@ "type": "string", "format": "file-path", "description": "Path to variant catalog file", - "help_text": "This parameter is mandatory for use with ExpansionHunter", - "fa_icon": "far fa-file-code" + "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 }, "vcfanno_resources": { "type": "string", @@ -127,7 +129,7 @@ "vcfanno_toml": { "type": "string", "description": "Path to the vcfanno toml file.", - "help_text": "If toml is passed, default configurations will be used according to genome build within the context of the pipeline.", + "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" }, "vep_cache": { From 9404db99367279f42cd2a215f136cc40c089f287 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 12 Apr 2022 14:00:24 +0200 Subject: [PATCH 0422/1921] update nextflow_schema --- nextflow_schema.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 1ff70ab6..1b6909b0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -98,19 +98,22 @@ "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", - "description": "Path to directory for gnomad vcf." + "description": "Path to directory for gnomad vcf.", + "help_text": "Path to the gnomad vcf file. If you don't provide one, gnomad annotations will not be used." }, "target_bed": { "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", - "description": "Path to directory for target bed file." + "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" }, "svdb_query_dbs": { "type": "string", "format": "file-path", - "description": "Path to comma-separated file containing information about the databases used for structural variant annotation.", - "fa_icon": "far fa-file-code" + "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." }, "variant_catalog": { "type": "string", From c3bf3000e4f21c6b663e3ba45845ba9c12182ef8 Mon Sep 17 00:00:00 2001 From: Mei Wu <25568561+projectoriented@users.noreply.github.com> Date: Tue, 12 Apr 2022 14:22:59 +0200 Subject: [PATCH 0423/1921] hide away non essential params --- nextflow_schema.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 1b6909b0..ef277783 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -106,7 +106,8 @@ "format": "path", "fa_icon": "fas fa-bezier-curve", "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" + "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", @@ -127,13 +128,15 @@ "type": "string", "description": "Directory path or tar.gz archive that holds resources defined within the vcfanno toml file.", "help_text": "If no directory path is passed, default configurations will be used according to genome build within the context of the pipeline.", - "fa_icon": "fas fa-folder-open" + "fa_icon": "fas fa-folder-open", + "hidden": true }, "vcfanno_toml": { "type": "string", "description": "Path to the vcfanno toml file.", "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" + "fa_icon": "fas fa-file-csv", + "hidden": true }, "vep_cache": { "type": "string", From 81c3bf0dbeacd31d5edbf54648386a82d80ad18f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Apr 2022 00:58:21 +0200 Subject: [PATCH 0424/1921] stub works --- conf/modules.config | 10 ++++++++++ .../local/annotate_structural_variants.nf | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 10639817..6f033751 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -202,6 +202,16 @@ process { enabled: false, ] } + withname: BCFTOOLS_VIEW { + if (params.genome == 'GRCh37') { + ext.args = '--output-type v --apply-filters PASS --exclude "INFO/clinical_genomics_mipAF > 0.40 | INFO/swegenAF > 0.40 | INFO/clingen_ngiAF > 0.40 | INFO/gnomad_svAF > 0.40 "' + } else if (params.genome == 'GRCh38') { + ext.args = '--output-type v --apply-filters PASS --exclude "INFO/swegenAF > 0.40"' + } + publishDir = [ + enabled: false, + ] + } withName: ENSEMBLVEP_SV { ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 94a50d80..673d93c1 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -4,6 +4,7 @@ include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -44,9 +45,23 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { fasta, seq_dict ) + + PICARD_SORTVCF.out.vcf + .map { + meta, vcf -> + return [meta,vcf,[]] + } + .set { ch_sortvcf } ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - ENSEMBLVEP_SV(PICARD_SORTVCF.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, file(vep_cache)) + BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) + + ENSEMBLVEP_SV(BCFTOOLS_VIEW.out.vcf, + vep_genome, + "homo_sapiens", + vep_cache_version, + file(vep_cache) + ) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: From b5848c2a72ea096b60b7995831c5646c8b939755 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Apr 2022 02:29:01 +0200 Subject: [PATCH 0425/1921] stub works --- bin/sentieon_init.sh | 13 +++++ conf/genomes.config | 2 + conf/modules.config | 17 ++++++ main.nf | 1 + modules/local/sentieon/bwamem.nf | 67 ++++++++++++++++++++++++ modules/local/sentieon/bwamemindex.nf | 54 +++++++++++++++++++ nextflow.config | 1 + nextflow_schema.json | 19 ++++++- subworkflows/local/align_sentieon.nf | 24 +++++++++ subworkflows/local/prepare_genome.nf | 12 +++-- subworkflows/local/prepare_references.nf | 4 +- subworkflows/nf-core/align.nf | 22 +++++--- workflows/raredisease.nf | 6 ++- 13 files changed, 228 insertions(+), 14 deletions(-) create mode 100644 bin/sentieon_init.sh create mode 100644 modules/local/sentieon/bwamem.nf create mode 100644 modules/local/sentieon/bwamemindex.nf create mode 100644 subworkflows/local/align_sentieon.nf diff --git a/bin/sentieon_init.sh b/bin/sentieon_init.sh new file mode 100644 index 00000000..10503166 --- /dev/null +++ b/bin/sentieon_init.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# +# Sentieon initialization script +# This script takes as input the name of a environment +# variable holding the Sentieon license encoded as Base64 text +set -eu +LICENSE_ENCODED="\${!1}" +if [ "${#LICENSE_ENCODED}" -lt "1500" ]; then # Sentieon License server + export SENTIEON_LICENSE=$(echo -e "$LICENSE_ENCODED" | base64 -d) +else # Localhost license file + export SENTIEON_LICENSE=$(mktemp) + echo -e "$LICENSE_ENCODED" | base64 -d > $SENTIEON_LICENSE +fi diff --git a/conf/genomes.config b/conf/genomes.config index b870ac14..036ccbaa 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,6 +15,7 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + sentieon = "" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -27,6 +28,7 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + sentieon = "" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/conf/modules.config b/conf/modules.config index ef471b6a..77edbce1 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -39,6 +39,15 @@ process { pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" ] } + withName: SENTIEON_BWAINDEX { + ext.when = {!params.sentieonbwa_index && params.aligner == "sentieon"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference + ] + } withName: SAMTOOLS_FAIDX { publishDir = [ path: { "${params.outdir}/references" }, @@ -256,6 +265,14 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + withName: 'SENTIEON_BWAMEM' { + ext.args = '-K 10000000' + ext.prefix = { "${meta.id}.sorted.bam" } + publishDir = [ + path: { "${params.outdir}/bam" }, + enabled: false + ] + } // ANNOTATE_VCFANNO withName: "VCFANNO" { publishDir = [ diff --git a/main.nf b/main.nf index 8446ff6c..e2813f25 100644 --- a/main.nf +++ b/main.nf @@ -22,6 +22,7 @@ params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') +params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'sentieon') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf new file mode 100644 index 00000000..d661187d --- /dev/null +++ b/modules/local/sentieon/bwamem.nf @@ -0,0 +1,67 @@ +process SENTIEON_BWAMEM { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + input: + tuple val(meta), path(reads) + path fasta + path fai + path index + + output: + tuple val(meta), path('*.bam'), emit: bam + tuple val(meta), path('*.bai'), emit: bai + 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 sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' + """ + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + + INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` + + $sentieon_exe bwa mem \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + $args \\ + | sentieon \\ + util \\ + sort \\ + -r $fasta \\ + -o $prefix \\ + -t $task.cpus \\ + $args2 \\ + --sam2bam \\ + -i - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' + """ + touch ${prefix}.bam + touch ${prefix}.bai + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf new file mode 100644 index 00000000..ff52324c --- /dev/null +++ b/modules/local/sentieon/bwamemindex.nf @@ -0,0 +1,54 @@ +process SENTIEON_BWAINDEX { + tag "$fasta" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + input: + path fasta + + output: + path "bwa_index" , emit: index + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' + """ + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + + mkdir bwa_index + + $sentieon_exe bwa index \\ + $args \\ + -p bwa_index/${fasta.baseName} \\ + $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ + + stub: + def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' + """ + mkdir bwa_index + + touch bwa_index/${fasta}.ann + touch bwa_index/${fasta}.pac + touch bwa_index/${fasta}.amb + touch bwa_index/${fasta}.bwt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index b51aa773..ff0a6fba 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,6 +12,7 @@ params { // Required options input = null outdir = null + sentieon_install_dir = null // References genome = null diff --git a/nextflow_schema.json b/nextflow_schema.json index ef277783..3b5e3f2f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -35,6 +35,12 @@ "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})$" }, + "sentieon_install_dir": { + "type": "string", + "fa_icon": "fas fa-folder-open", + "description": "Directory where Sentieon binary is installed if not on $PATH", + "default": null + }, "multiqc_title": { "type": "string", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", @@ -109,6 +115,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 }, + "sentieonbwa_index": { + "type": "string", + "format": "directory-path", + "default": null, + "description": "Directory for pre-built sentieon index.", + "help_text": "If none provided, will be generated automatically from the FASTA reference.", + "fa_icon": "fas fa-folder-open", + "hidden": true + }, "svdb_query_dbs": { "type": "string", "format": "file-path", @@ -189,9 +204,9 @@ "aligner": { "type": "string", "default": "bwamem2", - "description": "Specifies the alignment algorithm to use - available options are 'bwamem2'.", + "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-map-signs", - "enum": ["bwamem2"] + "enum": ["bwamem2", "sentieon"] } } }, diff --git a/subworkflows/local/align_sentieon.nf b/subworkflows/local/align_sentieon.nf new file mode 100644 index 00000000..bf2d955b --- /dev/null +++ b/subworkflows/local/align_sentieon.nf @@ -0,0 +1,24 @@ +// +// A subworkflow to annotate structural variants. +// + +include { SENTIEON_BWAMEM } from '../../modules/local/sentieon/bwamem' + +workflow ALIGN_SENTIEON { + take: + reads_input // channel: [ val(meta), reads_input ] + fasta // path: genome.fasta + fai // path: genome.fai + index // channel: [ /path/to/bwamem2/index/ ] + + main: + ch_versions = Channel.empty() + + SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) + ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions) + + emit: + bam = SENTIEON_BWAMEM.out.bam + bai = SENTIEON_BWAMEM.out.bai + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index c3a92be5..203ee210 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -7,10 +7,12 @@ include { BWAMEM2_INDEX } from '../../modules/nf-cor include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' +include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' workflow PREPARE_GENOME { take: bwamem2_index // [mandatory] bwamem2_index + sentieon_index // [mandatory] sentieon_index fasta // [mandatory] genome.fasta fai // [mandatory] genome.fai variant_catalog // [optional] variant_catalog.json @@ -20,11 +22,15 @@ workflow PREPARE_GENOME { ch_fasta = file(fasta) ch_versions = Channel.empty() - // Fetch BWAMEM2 index or create from scratch if required + // Fetch aligner index or create from scratch if required BWAMEM2_INDEX ( ch_fasta ) - ch_bwamem2_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : Channel.fromPath(bwamem2_index).collect() + ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : Channel.fromPath(bwamem2_index).collect() ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) + SENTIEON_BWAINDEX ( ch_fasta ) + ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : Channel.fromPath(sentieon_index).collect() + ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + if ( fai ) { ch_fai = file(fai) } else { @@ -62,7 +68,7 @@ workflow PREPARE_GENOME { emit: - bwamem2_index = ch_bwamem2_index // path: bwamem2/index + aligner_index = ch_aligner_index // path: bwamem2/index chrom_sizes = ch_chrom_sizes // path: chrom.sizes fasta = ch_fasta // path: genome.fasta fai = ch_fai // path: genome.fasta.fai diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index b484077e..6b1048c0 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -13,6 +13,7 @@ workflow PREPARE_REFERENCES { gnomad fasta // [mandatory] genome.fasta fai // [mandatory] genome.fai + sentieonbwa_index target_bed variant_catalog // [optional] variant_catalog.json vcfanno_resources // [mandatory] vcfanno resource file @@ -22,6 +23,7 @@ workflow PREPARE_REFERENCES { ch_versions = Channel.empty() PREPARE_GENOME ( bwamem2_index, + sentieonbwa_index, fasta, fai, variant_catalog, @@ -59,7 +61,7 @@ workflow PREPARE_REFERENCES { } emit: - bwamem2_index = ch_genome.bwamem2_index + aligner_index = ch_genome.aligner_index chrom_sizes = ch_genome.chrom_sizes genome_fasta = ch_genome.fasta genome_fai = ch_genome.fai diff --git a/subworkflows/nf-core/align.nf b/subworkflows/nf-core/align.nf index b97502fe..d87213c3 100644 --- a/subworkflows/nf-core/align.nf +++ b/subworkflows/nf-core/align.nf @@ -2,29 +2,37 @@ // Map to reference // -include { ALIGN_BWAMEM2 } from './align_bwamem2' +include { ALIGN_BWAMEM2 } from './align_bwamem2' +include { ALIGN_SENTIEON } from '../local/align_sentieon' workflow ALIGN { take: - aligner // string: params.aligner + aligner // string: params.aligner reads_input // channel: [ val(meta), reads_input ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] index // channel: [ /path/to/bwamem2/index/ ] main: - ch_versions = Channel.empty() - - //bwamem2 - ALIGN_BWAMEM2 ( reads_input, index ) + ch_versions = Channel.empty() + ch_marked_bai = Channel.empty() + ch_marked_bam = Channel.empty() if( aligner == "bwamem2" ) { + ALIGN_BWAMEM2 ( reads_input, index ) ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai + ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) + } else if( aligner == "sentieon" ) { + ALIGN_SENTIEON ( reads_input, fasta, fai, index ) + ch_marked_bam = ALIGN_SENTIEON.out.bam + ch_marked_bai = ALIGN_SENTIEON.out.bai + ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) } else { exit 1, 'Please provide a valid aligner!' } ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) - ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) emit: marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0c7dfab0..94ec32e6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -17,6 +17,7 @@ def checkPathParamList = [ params.gnomad, params.input, params.multiqc_config, + params.sentieonbwa_index, params.svdb_query_dbs, params.vcfanno_resources, params.vep_cache @@ -107,6 +108,7 @@ workflow RAREDISEASE { params.gnomad, params.fasta, params.fasta_fai, + params.sentieonbwa_index, params.target_bed, params.variant_catalog, params.vcfanno_resources @@ -118,7 +120,9 @@ workflow RAREDISEASE { ALIGN ( params.aligner, CHECK_INPUT.out.reads, - ch_references.bwamem2_index + ch_references.genome_fasta, + ch_references.genome_fai, + ch_references.aligner_index ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) From 80fbb742ada176724e8295b3069d88afc8b2411c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Apr 2022 14:16:35 +0200 Subject: [PATCH 0426/1921] fix sentieon_init --- bin/sentieon_init.sh | 2 +- conf/modules.config | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/sentieon_init.sh b/bin/sentieon_init.sh index 10503166..ea8f393a 100644 --- a/bin/sentieon_init.sh +++ b/bin/sentieon_init.sh @@ -4,7 +4,7 @@ # This script takes as input the name of a environment # variable holding the Sentieon license encoded as Base64 text set -eu -LICENSE_ENCODED="\${!1}" +LICENSE_ENCODED="${!1}" if [ "${#LICENSE_ENCODED}" -lt "1500" ]; then # Sentieon License server export SENTIEON_LICENSE=$(echo -e "$LICENSE_ENCODED" | base64 -d) else # Localhost license file diff --git a/conf/modules.config b/conf/modules.config index 77edbce1..372c321c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -266,10 +266,10 @@ process { ] } withName: 'SENTIEON_BWAMEM' { - ext.args = '-K 10000000' + ext.args = '-M -K 10000000 -R ${meta.readgroups} ' ext.prefix = { "${meta.id}.sorted.bam" } publishDir = [ - path: { "${params.outdir}/bam" }, + path: { "${params.outdir}/sentieon" }, enabled: false ] } From 75c58025e5f0a99a568c6197b06da60587121c1d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Apr 2022 14:39:16 +0200 Subject: [PATCH 0427/1921] fix stubs --- modules/local/sentieon/bwamemindex.nf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index ff52324c..db46ca54 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -40,11 +40,6 @@ process SENTIEON_BWAINDEX { """ mkdir bwa_index - touch bwa_index/${fasta}.ann - touch bwa_index/${fasta}.pac - touch bwa_index/${fasta}.amb - touch bwa_index/${fasta}.bwt - cat <<-END_VERSIONS > versions.yml "${task.process}": sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") From b92bccebddd23458309f603644cc44aded2b7768 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Apr 2022 17:01:01 +0200 Subject: [PATCH 0428/1921] fix CI error --- conf/modules.config | 14 ++++++++++++-- subworkflows/local/prepare_genome.nf | 19 ++++++++++++------- subworkflows/local/prepare_references.nf | 2 ++ workflows/raredisease.nf | 1 + 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 372c321c..56febcc3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -241,6 +241,14 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + withName: ".*ALIGN_SENTIEON:.*"{ + ext.when = params.aligner.equals("sentieon") + publishDir = [ + path: { "${params.outdir}/sentieon" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } withName: BWAMEM2_MEM { ext.args = '-M -K 100000000' publishDir = [ @@ -266,11 +274,13 @@ process { ] } withName: 'SENTIEON_BWAMEM' { - ext.args = '-M -K 10000000 -R ${meta.readgroups} ' - ext.prefix = { "${meta.id}.sorted.bam" } + ext.args = { "-M -K 10000000 -R ${meta.readgroups} " } + ext.prefix = { "${meta.id}.sorted" } publishDir = [ path: { "${params.outdir}/sentieon" }, enabled: false + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } // ANNOTATE_VCFANNO diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 203ee210..0d29a58a 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -11,6 +11,7 @@ include { SENTIEON_BWAINDEX } from '../../modules/local/ workflow PREPARE_GENOME { take: + aligner // [mandatory] params.aligner bwamem2_index // [mandatory] bwamem2_index sentieon_index // [mandatory] sentieon_index fasta // [mandatory] genome.fasta @@ -23,13 +24,17 @@ workflow PREPARE_GENOME { ch_versions = Channel.empty() // Fetch aligner index or create from scratch if required - BWAMEM2_INDEX ( ch_fasta ) - ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : Channel.fromPath(bwamem2_index).collect() - ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) - - SENTIEON_BWAINDEX ( ch_fasta ) - ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : Channel.fromPath(sentieon_index).collect() - ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + if (aligner == "bwamem2") { + BWAMEM2_INDEX ( ch_fasta ) + ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : Channel.fromPath(bwamem2_index).collect() + ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) + } else if (aligner == "sentieon") { + SENTIEON_BWAINDEX ( ch_fasta ) + ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : Channel.fromPath(sentieon_index).collect() + ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + } else { + exit 1, 'Please provide a valid aligner!' + } if ( fai ) { ch_fai = file(fai) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 6b1048c0..0ddb220c 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -9,6 +9,7 @@ include { PREPARE_GENOME } from './prepare_genome' workflow PREPARE_REFERENCES { take: + aligner // [mandatory] params.aligner bwamem2_index // [mandatory] bwamem2_index gnomad fasta // [mandatory] genome.fasta @@ -22,6 +23,7 @@ workflow PREPARE_REFERENCES { // Prepare genome ch_versions = Channel.empty() PREPARE_GENOME ( + aligner, bwamem2_index, sentieonbwa_index, fasta, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 94ec32e6..5fd35af7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -104,6 +104,7 @@ workflow RAREDISEASE { // STEP 0: PREPARE GENOME REFERENCES AND INDICES. PREPARE_REFERENCES ( + params.aligner, params.bwamem2_index, params.gnomad, params.fasta, From 91dbaf15f26ef44eb20e44223c1e2e98c57f0af0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Apr 2022 17:10:14 +0200 Subject: [PATCH 0429/1921] fix lint error --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 56febcc3..e25ab65c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -278,7 +278,7 @@ process { ext.prefix = { "${meta.id}.sorted" } publishDir = [ path: { "${params.outdir}/sentieon" }, - enabled: false + enabled: false, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] From f6c39d9da10050e57c208d2c9c65f2012d4fd4df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 15 Apr 2022 14:55:50 +0200 Subject: [PATCH 0430/1921] fix typo --- conf/modules.config | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 69e96eb9..f3d1aebd 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -204,12 +204,7 @@ process { enabled: false, ] } - withname: BCFTOOLS_VIEW { - if (params.genome == 'GRCh37') { - ext.args = '--output-type v --apply-filters PASS --exclude "INFO/clinical_genomics_mipAF > 0.40 | INFO/swegenAF > 0.40 | INFO/clingen_ngiAF > 0.40 | INFO/gnomad_svAF > 0.40 "' - } else if (params.genome == 'GRCh38') { - ext.args = '--output-type v --apply-filters PASS --exclude "INFO/swegenAF > 0.40"' - } + withName: BCFTOOLS_VIEW { publishDir = [ enabled: false, ] From 7e673750be6b91d451d293a03c6daa01760ecb7a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 01:08:44 +0200 Subject: [PATCH 0431/1921] align subworkflow --- conf/modules.config | 46 +++++++++++- main.nf | 3 + modules/local/sentieon/bwamem.nf | 4 +- modules/local/sentieon/driver.nf | 102 +++++++++++++++++++++++++++ nextflow_schema.json | 21 ++++++ subworkflows/local/align_sentieon.nf | 58 ++++++++++++--- subworkflows/nf-core/align.nf | 15 ++-- workflows/raredisease.nf | 8 ++- 8 files changed, 237 insertions(+), 20 deletions(-) create mode 100644 modules/local/sentieon/driver.nf diff --git a/conf/modules.config b/conf/modules.config index e25ab65c..703410e4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -274,15 +274,55 @@ process { ] } withName: 'SENTIEON_BWAMEM' { - ext.args = { "-M -K 10000000 -R ${meta.readgroups} " } + ext.args = { "-M -K 10000000 -R ${meta.read_group} " } ext.prefix = { "${meta.id}.sorted" } publishDir = [ - path: { "${params.outdir}/sentieon" }, - enabled: false, + path: { "${params.outdir}/sentieon_align" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: 'SENTIEON_DATAMETRICS' { + ext.args = { [ + "--algo GCBias --summary ${meta.id}.gc_summary.txt ${meta.id}.gc_metrics.txt", + "--algo MeanQualityByCycle ${meta.id}.mq_metrics.txt", + "--algo QualDistribution ${meta.id}.qd_metrics.txt", + "--algo InsertSizeMetricAlgo ${meta.id}.is_metrics.txt", + "--algo AlignmentStat ${meta.id}.aln_metrics.txt", + "--algo LocusCollector --fun score_info ${meta.id}.score.txt.gz" + ].join(' ') + } + publishDir = [ + path: { "${params.outdir}/sentieon_bam_metrics" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + withName: 'SENTIEON_LOCUSCOLLECTOR' { + ext.args = { "--algo LocusCollector --fun score_info ${meta.id}.score.txt.gz" } + publishDir = [ + path: { "${params.outdir}/sentieon_dedup" }, + mode: params.publish_dir_mode, + ] + } + withName: 'SENTIEON_DEDUP' { + ext.args = { [ + "--algo Dedup --score_info ${meta.id}.score.txt.gz", + "--metrics ${meta.id}.dedup_metrics.txt ${meta.id}.dedup.bam" + ].join(' ') + } + publishDir = [ + path: { "${params.outdir}/sentieon_dedup" }, + mode: params.publish_dir_mode, + ] + } + withName: 'SENTIEON_BQSR' { + ext.args = { "--algo QualCal ${meta.id}.recal_data.table" } + publishDir = [ + path: { "${params.outdir}/sentieon_recal" }, + mode: params.publish_dir_mode, + ] + } // ANNOTATE_VCFANNO withName: "VCFANNO" { publishDir = [ diff --git a/main.nf b/main.nf index e2813f25..e0b12a13 100644 --- a/main.nf +++ b/main.nf @@ -21,6 +21,9 @@ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') +params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp') +params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_indels') +params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'sentieon') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index d661187d..e4864985 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -34,11 +34,11 @@ process SENTIEON_BWAMEM { \$INDEX \\ $reads \\ $args \\ - | sentieon \\ + | $sentieon_exe \\ util \\ sort \\ -r $fasta \\ - -o $prefix \\ + -o ${prefix}.bam \\ -t $task.cpus \\ $args2 \\ --sam2bam \\ diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf new file mode 100644 index 00000000..46a103e7 --- /dev/null +++ b/modules/local/sentieon/driver.nf @@ -0,0 +1,102 @@ +process SENTIEON_DRIVER { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + input: + tuple val(meta), path(bam), path(bai), path(score), path(score_idx), path(recal_pre), path(recal_post) + path fasta + path fai + path known_dbsnp + path known_mills + path known_indels + + output: + tuple val(meta), path('*.bam') , emit: bam , optional: true + tuple val(meta), path('*.bai') , emit: bai , optional: true + tuple val(meta), path('*.cram') , emit: cram , optional: true + tuple val(meta), path('*.crai') , emit: crai , optional: true + tuple val(meta), path('*.vcf.gz') , emit: vcf , optional: true + tuple val(meta), path('*.vcf.gz.tbi') , emit: vcf_tbi , optional: true + tuple val(meta), path('*recal_data.table') , emit: recal_pre , optional: true + tuple val(meta), path('*recal_data.table.post') , emit: recal_post , optional: true + tuple val(meta), path('*recal.csv') , emit: recal_csv , optional: true + tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics , optional: true + tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics , optional: true + tuple val(meta), path('*gc_summary.txt') , emit: gc_summary , optional: true + tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics , optional: true + tuple val(meta), path('*aln_metrics.txt') , emit: aln_metrics , optional: true + tuple val(meta), path('*is_metrics.txt') , emit: is_metrics , optional: true + tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup, optional: true + tuple val(meta), path('*score.txt.gz') , emit: score , optional: true + tuple val(meta), path('*score.txt.gz.idx') , emit: score_idx , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def ref = fasta ? "-r $fasta" : '' + def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' + def mills = known_mills ? "-k $known_mills" : '' + def indels = known_indels ? "-k $known_indels" : '' + if (args.contains('--algo Haplotyper')) { + if (known_dbsnp) { + dbsnp = '' + def args_list = args.split('--algo Haplotyper') + args_list = [ args_list[0] ] + ["--algo Haplotyper -d $known_dbsnp"] + [ args_list[-1] ] + args = args_list.join(' ') + } + } + def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' + """ + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + + $sentieon_exe \\ + driver \\ + $ref \\ + -t $task.cpus \\ + $input \\ + $dbsnp \\ + $mills \\ + $indels \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' + """ + touch ${prefix}.bam' + touch ${prefix}.bai' + touch ${prefix}.cram' + touch ${prefix}.crai' + touch ${prefix}.vcf.gz' + touch ${prefix}.vcf.gz.tbi' + touch ${prefix}.recal_data.table' + touch ${prefix}.recal_data.table.post' + touch ${prefix}.recal.csv' + touch ${prefix}.dedup_metrics.txt' + touch ${prefix}.score.txt' + touch ${prefix}.score.txt.idx' + touch ${prefix}.mq_metrics.txt + touch ${prefix}.qd_metrics.txt + touch ${prefix}.gc_summary.txt + touch ${prefix}.gc_metrics.txt + touch ${prefix}.aln_metrics.txt + touch ${prefix}.is_metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/nextflow_schema.json b/nextflow_schema.json index 3b5e3f2f..4b52c1d5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -107,6 +107,27 @@ "description": "Path to directory for gnomad vcf.", "help_text": "Path to the gnomad vcf file. If you don't provide one, gnomad annotations will not be used." }, + "known_dbsnp": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Path to known dbSNP file.", + "hidden": true + }, + "known_indels": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Path to known indels file.", + "hidden": true + }, + "known_mills": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Path to known Mills file.", + "hidden": true + }, "target_bed": { "type": "string", "format": "path", diff --git a/subworkflows/local/align_sentieon.nf b/subworkflows/local/align_sentieon.nf index bf2d955b..d9022d20 100644 --- a/subworkflows/local/align_sentieon.nf +++ b/subworkflows/local/align_sentieon.nf @@ -2,14 +2,21 @@ // A subworkflow to annotate structural variants. // -include { SENTIEON_BWAMEM } from '../../modules/local/sentieon/bwamem' +include { SENTIEON_BWAMEM } from '../../modules/local/sentieon/bwamem' +include { SENTIEON_DRIVER as SENTIEON_DATAMETRICS } from '../../modules/local/sentieon/driver' +include { SENTIEON_DRIVER as SENTIEON_LOCUSCOLLECTOR } from '../../modules/local/sentieon/driver' +include { SENTIEON_DRIVER as SENTIEON_DEDUP } from '../../modules/local/sentieon/driver' +include { SENTIEON_DRIVER as SENTIEON_BQSR } from '../../modules/local/sentieon/driver' workflow ALIGN_SENTIEON { take: - reads_input // channel: [ val(meta), reads_input ] - fasta // path: genome.fasta - fai // path: genome.fai - index // channel: [ /path/to/bwamem2/index/ ] + reads_input // channel: [ val(meta), reads_input ] + fasta // path: genome.fasta + fai // path: genome.fai + index // channel: [ /path/to/bwamem2/index/ ] + known_dbsnp // path: params.known_dbsnp + known_indels // path: params.known_indels + known_mills // path: params.known_mills main: ch_versions = Channel.empty() @@ -17,8 +24,43 @@ workflow ALIGN_SENTIEON { SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions) + SENTIEON_BWAMEM.out + .bam + .join(SENTIEON_BWAMEM.out.bai) + .map { it -> it + [ [], [], [], [] ] } + .set { ch_bam_bai } + + SENTIEON_DATAMETRICS (ch_bam_bai, fasta, fai, [], [], [] ) + ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions) + + SENTIEON_LOCUSCOLLECTOR (ch_bam_bai, fasta, fai, [], [], [] ) + + ch_bam_bai + .map { meta, bam, bai, score, score_idx, recal_pre, recal_post -> [ meta, bam, bai ] } + .join(SENTIEON_LOCUSCOLLECTOR.out.score) + .join(SENTIEON_LOCUSCOLLECTOR.out.score_idx) + .map { it -> it + [ [], [] ] } + .set { ch_bam_bai_score } + + SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai, [], [], [] ) + + SENTIEON_DEDUP.out.bam + .join(SENTIEON_DEDUP.out.bai) + .map { it -> it + [ [], [], [], [] ] } + .set { ch_dedup_bam_bai } + + SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp, known_mills, known_indels ) + emit: - bam = SENTIEON_BWAMEM.out.bam - bai = SENTIEON_BWAMEM.out.bai - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + bam = SENTIEON_DEDUP.out.bam + bai = SENTIEON_DEDUP.out.bai + marked_bam_bai = ch_dedup_bam_bai + recal_pre = SENTIEON_BQSR.out.recal_pre + mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) + qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) + gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) + gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) + aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) + is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/align.nf b/subworkflows/nf-core/align.nf index d87213c3..4bb90863 100644 --- a/subworkflows/nf-core/align.nf +++ b/subworkflows/nf-core/align.nf @@ -7,11 +7,14 @@ include { ALIGN_SENTIEON } from '../local/align_sentieon' workflow ALIGN { take: - aligner // string: params.aligner - reads_input // channel: [ val(meta), reads_input ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - index // channel: [ /path/to/bwamem2/index/ ] + aligner // string: params.aligner + reads_input // channel: [ val(meta), reads_input ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] + index // channel: [ /path/to/bwamem2/index/ ] + known_dbsnp // channel: [ /path/to/known_dbsnp/ ] + known_indels // channel: [ /path/to/known_indels/ ] + known_mills // channel: [ /path/to/known_mills/ ] main: ch_versions = Channel.empty() @@ -24,7 +27,7 @@ workflow ALIGN { ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if( aligner == "sentieon" ) { - ALIGN_SENTIEON ( reads_input, fasta, fai, index ) + ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp, known_indels, known_mills ) ch_marked_bam = ALIGN_SENTIEON.out.bam ch_marked_bai = ALIGN_SENTIEON.out.bai ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5fd35af7..4e44ec32 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -27,6 +27,9 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } +if (params.known_dbsnp) { ch_known_dbsnp = file(params.known_dbsnp) } else { ch_known_dbsnp = [] } +if (params.known_mills) { ch_known_mills = file(params.known_mills) } else { ch_known_mills = [] } +if (params.known_indels) { ch_known_indels = file(params.known_indels) } else { ch_known_indels = [] } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -123,7 +126,10 @@ workflow RAREDISEASE { CHECK_INPUT.out.reads, ch_references.genome_fasta, ch_references.genome_fai, - ch_references.aligner_index + ch_references.aligner_index, + ch_known_dbsnp, + ch_known_indels, + ch_known_mills ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) From 31fbc2a119ac66196f24b1ff50130c9886390999 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 01:13:27 +0200 Subject: [PATCH 0432/1921] move align subworkflow to local --- subworkflows/{nf-core => local}/align.nf | 4 ++-- workflows/raredisease.nf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename subworkflows/{nf-core => local}/align.nf (94%) diff --git a/subworkflows/nf-core/align.nf b/subworkflows/local/align.nf similarity index 94% rename from subworkflows/nf-core/align.nf rename to subworkflows/local/align.nf index 4bb90863..883bf36a 100644 --- a/subworkflows/nf-core/align.nf +++ b/subworkflows/local/align.nf @@ -2,8 +2,8 @@ // Map to reference // -include { ALIGN_BWAMEM2 } from './align_bwamem2' -include { ALIGN_SENTIEON } from '../local/align_sentieon' +include { ALIGN_BWAMEM2 } from '../nf-core/align_bwamem2' +include { ALIGN_SENTIEON } from './align_sentieon' workflow ALIGN { take: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4e44ec32..d011f9df 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -52,6 +52,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi include { CHECK_INPUT } from '../subworkflows/local/check_input' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { ALIGN } from '../subworkflows/local/align' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -71,7 +72,6 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { ALIGN } from '../subworkflows/nf-core/align' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' From 03e5320647904aa0108d746933d81cbc24fe9de9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 01:39:11 +0200 Subject: [PATCH 0433/1921] add variant caller switch --- nextflow.config | 3 +++ nextflow_schema.json | 18 ++++++++++++++++++ subworkflows/local/align.nf | 4 ++-- subworkflows/local/align_sentieon.nf | 23 ++++++++++++----------- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/nextflow.config b/nextflow.config index ff0a6fba..f173a2a2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -28,6 +28,9 @@ params { // Alignment aligner = 'bwamem2' + // Variant calling + variant_caller = 'deepvariant' + // Annotation vep_cache_version = '105' diff --git a/nextflow_schema.json b/nextflow_schema.json index 4b52c1d5..a7ff5fce 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -231,6 +231,21 @@ } } }, + "variant_calling_options": { + "title": "Variant calling options", + "type": "object", + "fa_icon": "fas fa-map-signs", + "description": "Options to adjust parameters and filtering criteria for variant calling.", + "properties": { + "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"] + } + } + }, "annotation_options": { "title": "Annotation options", "type": "object", @@ -433,6 +448,9 @@ { "$ref": "#/definitions/alignment_options" }, + { + "$ref": "#/definitions/variant_calling_options" + }, { "$ref": "#/definitions/annotation_options" }, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 883bf36a..88abc7df 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -28,8 +28,8 @@ workflow ALIGN { ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if( aligner == "sentieon" ) { ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp, known_indels, known_mills ) - ch_marked_bam = ALIGN_SENTIEON.out.bam - ch_marked_bai = ALIGN_SENTIEON.out.bai + ch_marked_bam = ALIGN_SENTIEON.out.marked_bam + ch_marked_bai = ALIGN_SENTIEON.out.marked_bai ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) } else { exit 1, 'Please provide a valid aligner!' diff --git a/subworkflows/local/align_sentieon.nf b/subworkflows/local/align_sentieon.nf index d9022d20..b253de7f 100644 --- a/subworkflows/local/align_sentieon.nf +++ b/subworkflows/local/align_sentieon.nf @@ -19,7 +19,8 @@ workflow ALIGN_SENTIEON { known_mills // path: params.known_mills main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_recal_pre = Channel.empty() SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions) @@ -44,18 +45,18 @@ workflow ALIGN_SENTIEON { SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai, [], [], [] ) - SENTIEON_DEDUP.out.bam - .join(SENTIEON_DEDUP.out.bai) - .map { it -> it + [ [], [], [], [] ] } - .set { ch_dedup_bam_bai } - - SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp, known_mills, known_indels ) + if (params.variant_caller == "sentieon") { + SENTIEON_DEDUP.out.bam + .join(SENTIEON_DEDUP.out.bai) + .map { it -> it + [ [], [], [], [] ] } + .set { ch_dedup_bam_bai } + ch_recal_pre = SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp, known_mills, known_indels ).out.recal_pre + } emit: - bam = SENTIEON_DEDUP.out.bam - bai = SENTIEON_DEDUP.out.bai - marked_bam_bai = ch_dedup_bam_bai - recal_pre = SENTIEON_BQSR.out.recal_pre + marked_bam = SENTIEON_DEDUP.out.bam + marked_bai = SENTIEON_DEDUP.out.bai + recal_pre = ch_recal_pre mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) From 13a4714ba68c9f553015aefeec53680c0a9536da Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 03:46:56 +0200 Subject: [PATCH 0434/1921] reorganize configs --- conf/modules.config | 347 ++++++++++++++++++------------ subworkflows/local/prepare_bed.nf | 32 ++- subworkflows/nf-core/qc_bam.nf | 26 +-- 3 files changed, 246 insertions(+), 159 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ef471b6a..f5eae063 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -11,6 +11,10 @@ ---------------------------------------------------------------------------------------- */ +// +// General configuration options +// + process { publishDir = [ @@ -19,17 +23,44 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] - // Local Subworkflows - // INPUT_CHECK - withName: SAMPLESHEET_CHECK { + withName: '.*CHECK_INPUT:SAMPLESHEET_CHECK' { publishDir = [ path: { "${params.outdir}/pipeline_info" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // PREPARE_GENOME - withName: BWAMEM2_INDEX { + + withName: 'CUSTOM_DUMPSOFTWAREVERSIONS' { + publishDir = [ + path: { "${params.outdir}/pipeline_info" }, + mode: params.publish_dir_mode, + pattern: '*_versions.yml' + ] + } +} + +// +// Read QC options +// + +process { + withName: 'FASTQC' { + ext.args = '--quiet' + publishDir = [ + path: { "${params.outdir}/reports/fastqc/${meta.id}" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + +// +// Genome preparation options +// + +process { + + withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:BWAMEM2_INDEX' { ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, @@ -39,7 +70,8 @@ process { pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" ] } - withName: SAMTOOLS_FAIDX { + + withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -48,30 +80,34 @@ process { pattern: "*fai" ] } - withName: GET_CHROM_SIZES { + + withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:GET_CHROM_SIZES' { publishDir = [ enabled: false, ] } - withName: UNTAR_VCFANNO { + + withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:UNTAR_VCFANNO' { publishDir = [ enabled: false, ] } - // PREPARE_VCF && PREPARE_BED - withName: CHECK_INPUT_VCF { + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:CHECK_INPUT_VCF' { publishDir = [ enabled: false, ] } - withName: SPLIT_MULTIALLELICS_PV { + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:SPLIT_MULTIALLELICS_PV' { ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } publishDir = [ enabled: false ] } - withName: REMOVE_DUPLICATES_PV { + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:REMOVE_DUPLICATES_PV' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ @@ -80,21 +116,24 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: TABIX_PV { + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:TABIX_PV' { publishDir = [ path: { "${params.outdir}/processed_references" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'TABIX_PT|TABIX_PBT' { + + withName: '.*PREPARE_REFERENCES:CHECK_BED:TABIX_.*' { publishDir = [ path: { "${params.outdir}/processed_references" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'GATK_BILT' { + + withName: '.*PREPARE_REFERENCES:CHECK_BED:GATK_BILT' { ext.prefix = { "${meta.id}_target" } publishDir = [ path: { "${params.outdir}/processed_references" }, @@ -102,13 +141,15 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: 'GATK_ILT' { + + withName: '.*PREPARE_REFERENCES:CHECK_BED:GATK_ILT' { ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' publishDir = [ enabled: false ] } - withName: 'CAT_CAT_BAIT' { + + withName: '.*PREPARE_REFERENCES:CHECK_BED:CAT_CAT_BAIT' { ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/processed_references" }, @@ -116,207 +157,247 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - // CALL_SNV_DEEPVARIANT - withName: DEEPVARIANT { - ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } - ext.prefix = { "${meta.id}_deepvar" } - publishDir = [ - path: { "${params.outdir}/deepvariant" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: SPLIT_MULTIALLELICS_GL { - ext.args = '--output-type z --multiallelics -both' +} + +// +// Alignment options +// + +process { + withName: '.*ALIGN_BWAMEM2:.*' { + ext.when = params.aligner.equals("bwamem2") publishDir = [ - enabled: false + path: { "${params.outdir}/bwamem2" }, + mode: 'copy', + pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: REMOVE_DUPLICATES_GL { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } + + withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { + ext.args = '-M -K 100000000' publishDir = [ - path: { "${params.outdir}/glnexus" }, + path: { "${params.outdir}/bwamem2" }, + enabled: false, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: GLNEXUS { - ext.args = '--config DeepVariant_unfiltered' + + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { + ext.args = '-s --remove-overlaps' publishDir = [ - enabled: false + path: { "${params.outdir}/bwamem2" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: TABIX_GL { + + withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { + ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ - path: { "${params.outdir}/glnexus" }, + path: { "${params.outdir}/bwamem2" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - // CALL_REPEAT_EXPANSIONS - withName: EXPANSIONHUNTER { +} + +// +// Bam QC options +// + +process { + withName: '.*QC_BAM:PICARD_COLLECTMULTIPLEMETRICS' { publishDir = [ - path: { "${params.outdir}/expansionhunter" }, + path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - // CALL_STRUCTURAL_VARIANTS - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA" { + + withName: '.*QC_BAM:QUALIMAP_BAMQC' { publishDir = [ - path: { "${params.outdir}/sv_caller" }, + path: { "${params.outdir}/bamqc_qualimap" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV" { - ext.args = '-p 6' + + withName: '.*QC_BAM:TIDDIT_COV' { + ext.args = '-z 500 -w -u' publishDir = [ - path: { "${params.outdir}/sv_caller" }, + path: { "${params.outdir}/tiddit_coverage" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SVDB_MERGE_TIDDIT { - ext.args = '--notag --pass_only' - ext.prefix = 'tiddit' + + withName: '.*QC_BAM:UCSC_WIGTOBIGWIG' { + ext.args = '-clip' publishDir = [ - path: { "${params.outdir}/sv_caller" }, + path: { "${params.outdir}/tiddit_coverage" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: SVDB_MERGE { - ext.args = '--pass_only' + + withName: '.*QC_BAM:MOSDEPTH' { + ext.args = '--d4' publishDir = [ - path: { "${params.outdir}/sv_caller" }, + path: { "${params.outdir}/mosdepth" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - // ANNOTATE_SV - withName: "SVDB_QUERY*" { +} + +// +// Repeat expansion calling options +// + +process { + withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { publishDir = [ - enabled: false, + path: { "${params.outdir}/expansionhunter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: PICARD_SORTVCF { +} + +// +// SNV calling options +// + +process { + withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { + ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } + ext.prefix = { "${meta.id}_deepvar" } publishDir = [ - enabled: false, + path: { "${params.outdir}/deepvariant" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: ENSEMBLVEP_SV { - ext.args = [ - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--distance 5000', - '--buffer_size 20000', - '--format vcf --max_sv_size 248956422', - '--appris --biotype --canonical --ccds', - '--domains --exclude_predicted --force_overwrite', - '--humdiv --no_progress --no_stats --numbers', - '--polyphen p --protein --offline --regulatory --sift p --symbol --tsl', - '--uniprot' - ].join(' ') + + withName: '.*CALL_SNV_DEEPVARIANT:GLNEXUS' { + ext.args = '--config DeepVariant_unfiltered' publishDir = [ - path: { "${params.outdir}/sv_annotate" }, - mode: params.publish_dir_mode, + enabled: false ] } - // NF-CORE Subworkflows - // ALIGN_BWAMEM2 - withName: ".*ALIGN_BWAMEM2:.*"{ - ext.when = params.aligner.equals("bwamem2") + + withName: '.*CALL_SNV_DEEPVARIANT:SPLIT_MULTIALLELICS_GL' { + ext.args = '--output-type z --multiallelics -both' publishDir = [ - path: { "${params.outdir}/bwamem2" }, - mode: 'copy', - pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false ] } - withName: BWAMEM2_MEM { - ext.args = '-M -K 100000000' + + withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - path: { "${params.outdir}/bwamem2" }, - enabled: false, + path: { "${params.outdir}/glnexus" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: SAMTOOLS_STATS { - ext.args = '-s --remove-overlaps' + + withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { publishDir = [ - path: { "${params.outdir}/bwamem2" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + path: { "${params.outdir}/glnexus" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: '.*MARKDUPLICATES' { - ext.prefix = { "${meta.id}_sorted_md" } +} + +// +// Structural variant calling options +// + +process { + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA' { publishDir = [ - path: { "${params.outdir}/bwamem2" }, + path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - // ANNOTATE_VCFANNO - withName: "VCFANNO" { + + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV' { + ext.args = '-p 6' publishDir = [ - path: { "${params.outdir}/variant_annotation" }, + path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - // QC_BAM - withName: '.*COLLECTMULTIPLEMETRICS' { + + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:SVDB_MERGE_TIDDIT' { + ext.args = '--notag --pass_only' + ext.prefix = 'tiddit' publishDir = [ - path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, + path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: QUALIMAP_BAMQC { - publishDir = [ - path: { "${params.outdir}/bamqc_qualimap" }, - mode: 'copy' - ] - } - withName: TIDDIT_COV { - ext.args = '-z 500 -w -u' + + withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { + ext.args = '--pass_only' publishDir = [ - path: { "${params.outdir}/tiddit_coverage" }, + path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: ".*QC_BAM:UCSC_WIGTOBIGWIG" { - ext.args = '-clip' +} + +// +// Structural variant annotation options +// + +process { + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { publishDir = [ - path: { "${params.outdir}/tiddit_coverage" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false, ] } - withName: MOSDEPTH { - ext.args = '--d4' + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { publishDir = [ - path: { "${params.outdir}/mosdepth" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false, ] } - // nf-core modules - withName: FASTQC { - ext.args = '--quiet' + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { + ext.args = [ + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422', + '--appris --biotype --canonical --ccds', + '--domains --exclude_predicted --force_overwrite', + '--humdiv --no_progress --no_stats --numbers', + '--polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot' + ].join(' ') publishDir = [ - path: { "${params.outdir}/reports/fastqc/${meta.id}" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + path: { "${params.outdir}/sv_annotate" }, + mode: params.publish_dir_mode, ] } +} - withName: CUSTOM_DUMPSOFTWAREVERSIONS { +// +// SNV annotation options +// + +process { + withName: '.*ANNOTATE_VCFANNO:VCFANNO' { publishDir = [ - path: { "${params.outdir}/pipeline_info" }, + path: { "${params.outdir}/variant_annotation" }, mode: params.publish_dir_mode, - pattern: '*_versions.yml' + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - } diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index 72336c36..72d37c83 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -4,6 +4,7 @@ include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/modules/gatk4/bedtointervallist/main' include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/modules/gatk4/intervallisttools/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' @@ -35,11 +36,40 @@ workflow CHECK_BED { GATK_ILT(interval_list) ch_versions = ch_versions.mix(GATK_ILT.out.versions) + + GATK_ILT.out + .interval_list + .collect{ it[1] } + .set { ch_bait_intervals_split } + + ch_bait_intervals_split + .map { it -> it[0] + .toString() + .split("_split")[0] + .split("/")[-1] + "_bait.intervals_list" + } + .flatten() + .concat(ch_bait_intervals_split) + .toList() + .map { + id, bait -> + return [['id':id], bait] + } + .set { ch_bait_intervals_cat_in } + + CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) + .file_out + .map { + id, file -> + return [file] + } + .set { ch_bait_intervals_cat_out } + } emit: bed = tab_out target_intervals = interval_list.collect{it[1]} - bait_intervals = GATK_ILT.out.interval_list.collect{it[1]} + bait_intervals = ch_bait_intervals_cat_out versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 5886f123..30c62990 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -5,7 +5,6 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/modules/picard/collecthsmetrics/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' -include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' include { MOSDEPTH } from '../../modules/nf-core/modules/mosdepth/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' @@ -29,30 +28,7 @@ workflow QC_BAM { ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) // COLLECT HS METRICS - bait_intervals - .collect { it[0] - .toString() - .split("_split")[0] - .split("/")[-1] + "_bait.intervals_list" - } - .flatten() - .concat(bait_intervals) - .toList() - .map { - id, bait -> - return [['id':id], bait] - } - .set { bait_intervals_cat_in } - - CAT_CAT_BAIT ( bait_intervals_cat_in ) - .file_out - .map { - id, file -> - return [file] - } - .set { bait_intervals_cat_out } - - PICARD_COLLECTHSMETRICS ( bam, fasta, fai, bait_intervals_cat_out, target_intervals ) + PICARD_COLLECTHSMETRICS ( bam, fasta, fai, bait_intervals, target_intervals ) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) // QUALIMAP BAMQC From b7186783e8b2523b00cd9dffa2ee2357f122d2c1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 14:41:37 +0200 Subject: [PATCH 0435/1921] fix score_index extension in driver --- modules/local/sentieon/driver.nf | 2 +- subworkflows/local/align.nf | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf index 46a103e7..c8479933 100644 --- a/modules/local/sentieon/driver.nf +++ b/modules/local/sentieon/driver.nf @@ -31,7 +31,7 @@ process SENTIEON_DRIVER { tuple val(meta), path('*is_metrics.txt') , emit: is_metrics , optional: true tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup, optional: true tuple val(meta), path('*score.txt.gz') , emit: score , optional: true - tuple val(meta), path('*score.txt.gz.idx') , emit: score_idx , optional: true + tuple val(meta), path('*score.txt.gz.tbi') , emit: score_idx , optional: true path "versions.yml" , emit: versions when: diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 88abc7df..e920354b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -18,8 +18,6 @@ workflow ALIGN { main: ch_versions = Channel.empty() - ch_marked_bai = Channel.empty() - ch_marked_bam = Channel.empty() if( aligner == "bwamem2" ) { ALIGN_BWAMEM2 ( reads_input, index ) From 71a728cab40055a31c452152193020ef40d74d35 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 14:49:20 +0200 Subject: [PATCH 0436/1921] remove a couple of blank lines --- conf/modules.config | 2 -- 1 file changed, 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f5eae063..62327a28 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -16,7 +16,6 @@ // process { - publishDir = [ path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: params.publish_dir_mode, @@ -59,7 +58,6 @@ process { // process { - withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:BWAMEM2_INDEX' { ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ From e5e77b5c706a7b6ad37f5b1a723001240d6e0d23 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 17 Apr 2022 22:35:30 +0200 Subject: [PATCH 0437/1921] add prefix to stub --- modules/local/sentieon/driver.nf | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf index c8479933..a68a8a56 100644 --- a/modules/local/sentieon/driver.nf +++ b/modules/local/sentieon/driver.nf @@ -73,20 +73,21 @@ process SENTIEON_DRIVER { """ stub: + def prefix = task.ext.prefix ?: "${meta.id}" def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ - touch ${prefix}.bam' - touch ${prefix}.bai' - touch ${prefix}.cram' - touch ${prefix}.crai' - touch ${prefix}.vcf.gz' - touch ${prefix}.vcf.gz.tbi' - touch ${prefix}.recal_data.table' - touch ${prefix}.recal_data.table.post' - touch ${prefix}.recal.csv' - touch ${prefix}.dedup_metrics.txt' - touch ${prefix}.score.txt' - touch ${prefix}.score.txt.idx' + touch ${prefix}.bam + touch ${prefix}.bai + touch ${prefix}.cram + touch ${prefix}.crai + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + touch ${prefix}.recal_data.table + touch ${prefix}.recal_data.table.post + touch ${prefix}.recal.csv + touch ${prefix}.dedup_metrics.txt + touch ${prefix}.score.txt.gz + touch ${prefix}.score.txt.gz.tbi touch ${prefix}.mq_metrics.txt touch ${prefix}.qd_metrics.txt touch ${prefix}.gc_summary.txt From 4c6f182432ce20d6861545428fbedf1ae04b7be5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 18 Apr 2022 12:13:30 +0200 Subject: [PATCH 0438/1921] add source script to stubs --- modules/local/sentieon/bwamem.nf | 2 ++ modules/local/sentieon/bwamemindex.nf | 2 ++ modules/local/sentieon/driver.nf | 2 ++ 3 files changed, 6 insertions(+) diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index e4864985..17e8f51f 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -55,6 +55,8 @@ process SENTIEON_BWAMEM { def prefix = task.ext.prefix ?: "${meta.id}" def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + touch ${prefix}.bam touch ${prefix}.bai diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index db46ca54..d4e01e05 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -38,6 +38,8 @@ process SENTIEON_BWAINDEX { stub: def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + mkdir bwa_index cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf index a68a8a56..403db233 100644 --- a/modules/local/sentieon/driver.nf +++ b/modules/local/sentieon/driver.nf @@ -76,6 +76,8 @@ process SENTIEON_DRIVER { def prefix = task.ext.prefix ?: "${meta.id}" def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + touch ${prefix}.bam touch ${prefix}.bai touch ${prefix}.cram From bd185aa53353ba0906e311e41124adb9b00dd0c0 Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 19 Apr 2022 11:43:14 +0200 Subject: [PATCH 0439/1921] Update stranger --- modules.json | 4 ++-- modules/nf-core/modules/stranger/main.nf | 5 ++++- modules/nf-core/modules/stranger/meta.yml | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index c84064c7..21925b18 100644 --- a/modules.json +++ b/modules.json @@ -79,7 +79,7 @@ "git_sha": "1ad73f1b2abdea9398680d6d20014838135c9a35" }, "stranger": { - "git_sha": "fe4eb459fbc76fbcbf63e204b6f5b79f88dca452" + "git_sha": "a6cb75174bfbd131f3da14d8cd3e34c1a2e6e268" }, "svdb/merge": { "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" @@ -110,4 +110,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/stranger/main.nf b/modules/nf-core/modules/stranger/main.nf index 2e647627..55678bd3 100644 --- a/modules/nf-core/modules/stranger/main.nf +++ b/modules/nf-core/modules/stranger/main.nf @@ -9,6 +9,7 @@ process STRANGER { input: tuple val(meta), path(vcf) + path variant_catalog output: tuple val(meta), path("*.gz"), emit: vcf @@ -20,10 +21,12 @@ process STRANGER { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def options_variant_catalog = variant_catalog ? "--repeats-file $variant_catalog" : "" """ stranger \\ $args \\ - $vcf | gzip --no-name > ${prefix}.vcf.gz + $vcf \\ + $options_variant_catalog | gzip --no-name > ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/stranger/meta.yml b/modules/nf-core/modules/stranger/meta.yml index a9a280ad..0707d806 100644 --- a/modules/nf-core/modules/stranger/meta.yml +++ b/modules/nf-core/modules/stranger/meta.yml @@ -12,7 +12,7 @@ tools: documentation: https://github.com/moonso/stranger tool_dev_url: https://github.com/moonso/stranger doi: "10.5281/zenodo.4548873" - licence: ['MIT'] + licence: ["MIT"] input: - meta: @@ -24,6 +24,10 @@ input: type: file description: VCF with repeat expansions pattern: "*.{vcf.gz,vcf}" + - variant_catalog: + type: file + description: json file with repeat expansion sites to genotype + pattern: "*.{json}" output: - meta: From fb1452af21de6c3869e22a094e46937e3640edd5 Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 19 Apr 2022 15:24:12 +0200 Subject: [PATCH 0440/1921] Use same variantcatalog as used by Expansionhunter --- subworkflows/nf-core/call_repeat_expansions.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/call_repeat_expansions.nf b/subworkflows/nf-core/call_repeat_expansions.nf index 1a1f45f2..0be45a76 100644 --- a/subworkflows/nf-core/call_repeat_expansions.nf +++ b/subworkflows/nf-core/call_repeat_expansions.nf @@ -17,7 +17,7 @@ workflow CALL_REPEAT_EXPANSIONS { EXPANSIONHUNTER( bam, fasta, variant_catalog ) ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) - STRANGER ( EXPANSIONHUNTER.out.vcf ) + STRANGER ( EXPANSIONHUNTER.out.vcf, variant_catalog ) ch_versions = ch_versions.mix(STRANGER.out.versions) emit: From 42abfd79ccc1dc18821552767cc5ad444cc9f34d Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 19 Apr 2022 15:41:14 +0200 Subject: [PATCH 0441/1921] Remove unused ext.args --- conf/modules.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 856bf06b..993648d4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -261,7 +261,6 @@ process { ] } withName: STRANGER { - ext.args = "--repeats-file ${params.variant_catalog}" publishDir = [ path: { "${params.outdir}/stranger" }, mode: 'copy', From df5e3356de62babffe2f6ca208a5c3c48ef45a14 Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 19 Apr 2022 15:42:15 +0200 Subject: [PATCH 0442/1921] Use the same way for defining publish dir mode --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 993648d4..d973fca3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -263,7 +263,7 @@ process { withName: STRANGER { publishDir = [ path: { "${params.outdir}/stranger" }, - mode: 'copy', + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } From bb4db7488780670db73d83a5dc8f64042ec5e160 Mon Sep 17 00:00:00 2001 From: ljmesi <37740329+ljmesi@users.noreply.github.com> Date: Tue, 19 Apr 2022 16:25:38 +0200 Subject: [PATCH 0443/1921] Add empty line to the end --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 21925b18..a18a664f 100644 --- a/modules.json +++ b/modules.json @@ -110,4 +110,4 @@ } } } -} \ No newline at end of file +} From 89b080b207f532b5347361428fa2f618d6076142 Mon Sep 17 00:00:00 2001 From: Lauri Mesilaakso Date: Wed, 20 Apr 2022 07:51:46 +0200 Subject: [PATCH 0444/1921] Update subworkflows/nf-core/call_repeat_expansions.nf Co-authored-by: Anders Jemt --- subworkflows/nf-core/call_repeat_expansions.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/call_repeat_expansions.nf b/subworkflows/nf-core/call_repeat_expansions.nf index 0be45a76..b43a56d4 100644 --- a/subworkflows/nf-core/call_repeat_expansions.nf +++ b/subworkflows/nf-core/call_repeat_expansions.nf @@ -21,6 +21,6 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(STRANGER.out.versions) emit: - vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] + vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 6bacade77486cd964390ac0ee3c5d808e73b1438 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 20 Apr 2022 10:25:22 +0200 Subject: [PATCH 0445/1921] update modules --- conf/modules.config | 2 +- modules.json | 24 +++++++++---------- modules/nf-core/modules/bwamem2/mem/main.nf | 8 +++---- .../modules/gatk4/bedtointervallist/main.nf | 10 ++++---- .../gatk4/createsequencedictionary/main.nf | 9 +++---- .../modules/gatk4/intervallisttools/main.nf | 13 +++++----- .../nf-core/modules/manta/germline/main.nf | 5 ++-- .../nf-core/modules/samtools/faidx/main.nf | 6 ++--- .../nf-core/modules/samtools/index/main.nf | 6 ++--- .../nf-core/modules/samtools/merge/main.nf | 6 ++--- .../nf-core/modules/samtools/stats/main.nf | 6 ++--- modules/nf-core/modules/samtools/view/main.nf | 6 ++--- modules/nf-core/modules/untar/main.nf | 6 ++--- 13 files changed, 54 insertions(+), 53 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d973fca3..b5b75fb0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -173,7 +173,7 @@ process { } withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { - ext.args = '-M -K 100000000' + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } publishDir = [ path: { "${params.outdir}/bwamem2" }, enabled: false, diff --git a/modules.json b/modules.json index a18a664f..aa223e95 100644 --- a/modules.json +++ b/modules.json @@ -10,7 +10,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bwamem2/mem": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "4f5274c3de0c9521f5033893ff61057a74c45ba9" }, "cat/cat": { "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" @@ -28,19 +28,19 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "gatk4/bedtointervallist": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "gatk4/createsequencedictionary": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "gatk4/intervallisttools": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "glnexus": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "manta/germline": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243" }, "mosdepth": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" @@ -64,19 +64,19 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "samtools/faidx": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/index": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/merge": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/stats": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/view": { - "git_sha": "1ad73f1b2abdea9398680d6d20014838135c9a35" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "stranger": { "git_sha": "a6cb75174bfbd131f3da14d8cd3e34c1a2e6e268" @@ -103,11 +103,11 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "untar": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "9ae34a01d1747019fd37753ff4cafb05aec35a2b" }, "vcfanno": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index e3a3d164..978c4019 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -2,10 +2,10 @@ process BWAMEM2_MEM { tag "$meta.id" label 'process_high' - conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.15" : null) + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:8ee25ae85d7a2bacac3e3139db209aff3d605a18-0' : - 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:8ee25ae85d7a2bacac3e3139db209aff3d605a18-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:38aed4501da19db366dc7c8d52d31d94e760cfaf-0' : + 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:38aed4501da19db366dc7c8d52d31d94e760cfaf-0' }" input: tuple val(meta), path(reads) @@ -23,7 +23,6 @@ process BWAMEM2_MEM { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def read_group = meta.read_group ? "-R ${meta.read_group}" : "" def samtools_command = sort_bam ? 'sort' : 'view' """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` @@ -31,7 +30,6 @@ process BWAMEM2_MEM { bwa-mem2 \\ mem \\ $args \\ - $read_group \\ -t $task.cpus \\ \$INDEX \\ $reads \\ diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf index c3b624a8..118f535b 100644 --- a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf @@ -9,7 +9,7 @@ process GATK4_BEDTOINTERVALLIST { input: tuple val(meta), path(bed) - path sequence_dict + path dict output: tuple val(meta), path('*.interval_list'), emit: interval_list @@ -21,6 +21,7 @@ process GATK4_BEDTOINTERVALLIST { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 if (!task.memory) { log.info '[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -29,9 +30,10 @@ process GATK4_BEDTOINTERVALLIST { } """ gatk --java-options "-Xmx${avail_mem}g" BedToIntervalList \\ - -I $bed \\ - -SD $sequence_dict \\ - -O ${prefix}.interval_list \\ + --INPUT $bed \\ + --OUTPUT ${prefix}.interval_list \\ + --SEQUENCE_DICTIONARY $dict \\ + --TMP_DIR . \\ $args cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf index dea77a1d..dbf37048 100644 --- a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf @@ -11,14 +11,15 @@ process GATK4_CREATESEQUENCEDICTIONARY { path fasta output: - path "*.dict" , emit: dict - path "versions.yml" , emit: versions + path "*.dict" , emit: dict + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' + def avail_mem = 6 if (!task.memory) { log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' @@ -26,10 +27,10 @@ process GATK4_CREATESEQUENCEDICTIONARY { avail_mem = task.memory.giga } """ - gatk --java-options "-Xmx${avail_mem}g" \\ - CreateSequenceDictionary \\ + gatk --java-options "-Xmx${avail_mem}g" CreateSequenceDictionary \\ --REFERENCE $fasta \\ --URI $fasta \\ + --TMP_DIR . \\ $args cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/modules/gatk4/intervallisttools/main.nf index 82c3222c..1b9b37f4 100644 --- a/modules/nf-core/modules/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/modules/gatk4/intervallisttools/main.nf @@ -8,11 +8,11 @@ process GATK4_INTERVALLISTTOOLS { 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" input: - tuple val(meta), path(interval_list) + tuple val(meta), path(intervals) output: tuple val(meta), path("*_split/*/*.interval_list"), emit: interval_list - path "versions.yml" , emit: versions + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -20,6 +20,7 @@ process GATK4_INTERVALLISTTOOLS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 if (!task.memory) { log.info '[GATK IntervalListTools] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -30,10 +31,10 @@ process GATK4_INTERVALLISTTOOLS { mkdir ${prefix}_split - gatk --java-options "-Xmx${avail_mem}g" \\ - IntervalListTools \\ - -I ${interval_list} \\ - -O ${prefix}_split \\ + gatk --java-options "-Xmx${avail_mem}g" IntervalListTools \\ + --INPUT $intervals \\ + --OUTPUT ${prefix}_split \\ + --TMP_DIR . \\ $args python3 < Date: Wed, 20 Apr 2022 16:04:47 +0200 Subject: [PATCH 0446/1921] move sentieon to path --- modules/local/sentieon/bwamem.nf | 12 +++++------- modules/local/sentieon/bwamemindex.nf | 12 +++++------- modules/local/sentieon/driver.nf | 8 +++----- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index 17e8f51f..82f6289c 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -23,13 +23,12 @@ process SENTIEON_BWAMEM { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ source sentieon_init.sh SENTIEON_LICENSE_BASE64 INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` - $sentieon_exe bwa mem \\ + sentieon bwa mem \\ -t $task.cpus \\ \$INDEX \\ $reads \\ @@ -46,14 +45,13 @@ process SENTIEON_BWAMEM { cat <<-END_VERSIONS > versions.yml "${task.process}": - sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ source sentieon_init.sh SENTIEON_LICENSE_BASE64 @@ -62,8 +60,8 @@ process SENTIEON_BWAMEM { cat <<-END_VERSIONS > versions.yml "${task.process}": - sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') END_VERSIONS """ } diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index d4e01e05..84ce4277 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -17,26 +17,24 @@ process SENTIEON_BWAINDEX { script: def args = task.ext.args ?: '' - def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ source sentieon_init.sh SENTIEON_LICENSE_BASE64 mkdir bwa_index - $sentieon_exe bwa index \\ + sentieon bwa index \\ $args \\ -p bwa_index/${fasta.baseName} \\ $fasta cat <<-END_VERSIONS > versions.yml "${task.process}": - sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') END_VERSIONS """ stub: - def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ source sentieon_init.sh SENTIEON_LICENSE_BASE64 @@ -44,8 +42,8 @@ process SENTIEON_BWAINDEX { cat <<-END_VERSIONS > versions.yml "${task.process}": - sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - bwa: \$(echo \$($sentieon_exe bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') END_VERSIONS """ } diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf index 403db233..845d6d42 100644 --- a/modules/local/sentieon/driver.nf +++ b/modules/local/sentieon/driver.nf @@ -52,11 +52,10 @@ process SENTIEON_DRIVER { args = args_list.join(' ') } } - def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ source sentieon_init.sh SENTIEON_LICENSE_BASE64 - $sentieon_exe \\ + sentieon \\ driver \\ $ref \\ -t $task.cpus \\ @@ -68,13 +67,12 @@ process SENTIEON_DRIVER { cat <<-END_VERSIONS > versions.yml "${task.process}": - sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_exe = params.sentieon_install_dir ? "${params.sentieon_install_dir}/sentieon" : 'sentieon' """ source sentieon_init.sh SENTIEON_LICENSE_BASE64 @@ -99,7 +97,7 @@ process SENTIEON_DRIVER { cat <<-END_VERSIONS > versions.yml "${task.process}": - sentieon: \$(echo \$($sentieon_exe driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") END_VERSIONS """ } From 3a78e0bc70ec573808ab753ca702a31bb7723ca5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 20 Apr 2022 22:03:21 +0200 Subject: [PATCH 0447/1921] move secret to config --- bin/sentieon_init.sh | 13 ------------- modules/local/sentieon/bwamem.nf | 6 ------ modules/local/sentieon/bwamemindex.nf | 6 ------ modules/local/sentieon/driver.nf | 6 ------ 4 files changed, 31 deletions(-) diff --git a/bin/sentieon_init.sh b/bin/sentieon_init.sh index ea8f393a..e69de29b 100644 --- a/bin/sentieon_init.sh +++ b/bin/sentieon_init.sh @@ -1,13 +0,0 @@ -#!/bin/bash -# -# Sentieon initialization script -# This script takes as input the name of a environment -# variable holding the Sentieon license encoded as Base64 text -set -eu -LICENSE_ENCODED="${!1}" -if [ "${#LICENSE_ENCODED}" -lt "1500" ]; then # Sentieon License server - export SENTIEON_LICENSE=$(echo -e "$LICENSE_ENCODED" | base64 -d) -else # Localhost license file - export SENTIEON_LICENSE=$(mktemp) - echo -e "$LICENSE_ENCODED" | base64 -d > $SENTIEON_LICENSE -fi diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index 82f6289c..433e2706 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -3,8 +3,6 @@ process SENTIEON_BWAMEM { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - input: tuple val(meta), path(reads) path fasta @@ -24,8 +22,6 @@ process SENTIEON_BWAMEM { def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` sentieon bwa mem \\ @@ -53,8 +49,6 @@ process SENTIEON_BWAMEM { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - touch ${prefix}.bam touch ${prefix}.bai diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 84ce4277..e20cd7e4 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -3,8 +3,6 @@ process SENTIEON_BWAINDEX { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - input: path fasta @@ -18,8 +16,6 @@ process SENTIEON_BWAINDEX { script: def args = task.ext.args ?: '' """ - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - mkdir bwa_index sentieon bwa index \\ @@ -36,8 +32,6 @@ process SENTIEON_BWAINDEX { stub: """ - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - mkdir bwa_index cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf index 845d6d42..eff7dac5 100644 --- a/modules/local/sentieon/driver.nf +++ b/modules/local/sentieon/driver.nf @@ -3,8 +3,6 @@ process SENTIEON_DRIVER { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - input: tuple val(meta), path(bam), path(bai), path(score), path(score_idx), path(recal_pre), path(recal_post) path fasta @@ -53,8 +51,6 @@ process SENTIEON_DRIVER { } } """ - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - sentieon \\ driver \\ $ref \\ @@ -74,8 +70,6 @@ process SENTIEON_DRIVER { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - touch ${prefix}.bam touch ${prefix}.bai touch ${prefix}.cram From 2d642364de316807abefa0b7542a7adc8c4bb2dc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 21 Apr 2022 13:59:09 +0200 Subject: [PATCH 0448/1921] fix manta --- subworkflows/nf-core/call_sv_manta.nf | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/subworkflows/nf-core/call_sv_manta.nf b/subworkflows/nf-core/call_sv_manta.nf index fed96edc..4d49447d 100644 --- a/subworkflows/nf-core/call_sv_manta.nf +++ b/subworkflows/nf-core/call_sv_manta.nf @@ -22,21 +22,23 @@ workflow CALL_SV_MANTA { .toList() .set { bai_file_list } - case_info.combine(bam_file_list) - .combine(bai_file_list) - .set { manta_input_bams } - - bed - .map { + bed.map { id, bed_file, index -> return [bed_file, index]} .set { bed_input } if (params.analysis_type == "WGS") { - MANTA ( manta_input_bams, fasta, fai, [[],[]] ) + case_info.combine(bam_file_list) + .combine(bai_file_list) + .map { it -> it + [ [], [] ] } + .set { manta_input } + MANTA ( manta_input, fasta, fai ) } else { - ch_target_bed = bed.ifEmpty([[],[]]) - MANTA ( manta_input_bams, fasta, fai, bed_input ) + case_info.combine(bam_file_list) + .combine(bai_file_list) + .combine(bed_input) + .set { manta_input } + MANTA ( manta_input, fasta, fai ) } ch_versions = MANTA.out.versions From 08e288d301407eff7844cd0ad59ff550ea258659 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Thu, 21 Apr 2022 16:15:37 +0200 Subject: [PATCH 0449/1921] feat created local subworkflow prepare_MT_alignment --- conf/modules.config | 18 ++++++++++++ subworkflows/local/prepare_MT_alignment.nf | 32 ++++++++++++++++++++++ workflows/raredisease.nf | 9 ++++++ 3 files changed, 59 insertions(+) create mode 100644 subworkflows/local/prepare_MT_alignment.nf diff --git a/conf/modules.config b/conf/modules.config index d973fca3..89973614 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -407,3 +407,21 @@ process { ] } } + +// +// PREPARE_MT_ALLIGNMENT +// + +process { + withName: '.*PREPARE_MT_ALLIGNMENT:SAMTOOLS_VIEW_MT' { + ext.args2 = 'chrM' + } + + withName: '.*PREPARE_MT_ALLIGNMENT:GATK4_REVERTSAM_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } + + withName: '.*PREPARE_MT_ALLIGNMENT:GATK4_SAMTOFASTQ_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } +} diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf new file mode 100644 index 00000000..1e8ff923 --- /dev/null +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -0,0 +1,32 @@ +// +// Prepare bam files for MT allignment +// + +include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../modules/nf-core/modules/samtools/view/main' +include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/modules/gatk4/revertsam/main' +include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/modules/gatk4/samtofastq/main' + +workflow PREPARE_MT_ALIGNMENT { + take: + bam_cram // id: and file: bam index: bam.bai + + main: + + ch_versions = Channel.empty() + + // Outputs bam containing only MT + SAMTOOLS_VIEW_MT ( bam_cram, [] ) + ch_versions = ch_versions.mix(SAMTOOLS_VIEW_MT.out.versions.first()) + + // Removes alignment information + GATK4_REVERTSAM_MT ( SAMTOOLS_VIEW_MT.out.bam ) + ch_versions = ch_versions.mix(GATK4_REVERTSAM_MT.out.versions.first()) + + // Outputs fastq files + GATK4_SAMTOFASTQ_MT ( GATK4_REVERTSAM_MT.out.bam ) + ch_versions = ch_versions.mix(GATK4_SAMTOFASTQ_MT.out.versions.first()) + + emit: + fastq = GATK4_SAMTOFASTQ_MT.out.fastq + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 26cf3e6b..be9b1947 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -73,6 +73,7 @@ include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -177,6 +178,14 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(ch_sv_annotate.versions) } + + // STEP 2.1: MT CALLING + ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) + + PREPARE_MT_ALIGNMENT ( + ch_bam_bai + ) + ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) From a08848318be32047b20d7f82ace0697a3d908ddb Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Thu, 21 Apr 2022 16:22:14 +0200 Subject: [PATCH 0450/1921] feat added modules required for subworkflow --- modules.json | 8 +++- .../nf-core/modules/gatk4/revertsam/main.nf | 42 ++++++++++++++++++ .../nf-core/modules/gatk4/revertsam/meta.yml | 36 ++++++++++++++++ .../nf-core/modules/gatk4/samtofastq/main.nf | 43 +++++++++++++++++++ .../nf-core/modules/gatk4/samtofastq/meta.yml | 36 ++++++++++++++++ 5 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/modules/gatk4/revertsam/main.nf create mode 100644 modules/nf-core/modules/gatk4/revertsam/meta.yml create mode 100644 modules/nf-core/modules/gatk4/samtofastq/main.nf create mode 100644 modules/nf-core/modules/gatk4/samtofastq/meta.yml diff --git a/modules.json b/modules.json index a18a664f..2da9c36e 100644 --- a/modules.json +++ b/modules.json @@ -36,6 +36,12 @@ "gatk4/intervallisttools": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "gatk4/revertsam": { + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + }, + "gatk4/samtofastq": { + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + }, "glnexus": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, @@ -110,4 +116,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/gatk4/revertsam/main.nf b/modules/nf-core/modules/gatk4/revertsam/main.nf new file mode 100644 index 00000000..4e8e9ddc --- /dev/null +++ b/modules/nf-core/modules/gatk4/revertsam/main.nf @@ -0,0 +1,42 @@ +process GATK4_REVERTSAM { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path('*.bam'), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK RevertSam] 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" RevertSam \\ + --INPUT $bam \\ + --OUTPUT ${prefix}.reverted.bam \\ + --TMP_DIR . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/revertsam/meta.yml b/modules/nf-core/modules/gatk4/revertsam/meta.yml new file mode 100644 index 00000000..6cc97d86 --- /dev/null +++ b/modules/nf-core/modules/gatk4/revertsam/meta.yml @@ -0,0 +1,36 @@ +name: gatk4_revertsam +description: Reverts SAM or BAM files to a previous state. +keywords: + - sam + - revert +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'] + - bam: + type: file + description: The input bam/sam file + pattern: "*.{bam,sam}" +output: + - bam: + type: file + description: The reverted bam/sam file + pattern: "*.reverted.bam" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/modules/gatk4/samtofastq/main.nf b/modules/nf-core/modules/gatk4/samtofastq/main.nf new file mode 100644 index 00000000..8553e419 --- /dev/null +++ b/modules/nf-core/modules/gatk4/samtofastq/main.nf @@ -0,0 +1,43 @@ +process GATK4_SAMTOFASTQ { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : + 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path('*.fastq.gz'), emit: fastq + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def output = meta.single_end ? "--FASTQ ${prefix}.fastq.gz" : "--FASTQ ${prefix}_1.fastq.gz --SECOND_END_FASTQ ${prefix}_2.fastq.gz" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK SamToFastq] 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" SamToFastq \\ + --INPUT $bam \\ + $output \\ + --TMP_DIR . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/gatk4/samtofastq/meta.yml b/modules/nf-core/modules/gatk4/samtofastq/meta.yml new file mode 100644 index 00000000..60ca6aee --- /dev/null +++ b/modules/nf-core/modules/gatk4/samtofastq/meta.yml @@ -0,0 +1,36 @@ +name: gatk4_samtofastq +description: Converts BAM/SAM file to FastQ format +keywords: + - bed + - interval list +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'] + - bam: + type: file + description: Input SAM/BAM file + pattern: "*.{bam,sam}" +output: + - fastq: + type: file + description: converted fastq file + pattern: "*.fastq" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" From 7e0368f79b064f56b5ccf0d926bc0cee26c104ee Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Fri, 22 Apr 2022 07:45:05 +0200 Subject: [PATCH 0451/1921] fix variable names --- conf/modules.config | 6 +++--- workflows/raredisease.nf | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 89973614..c365ee59 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -413,15 +413,15 @@ process { // process { - withName: '.*PREPARE_MT_ALLIGNMENT:SAMTOOLS_VIEW_MT' { + withName: '.*PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { ext.args2 = 'chrM' } - withName: '.*PREPARE_MT_ALLIGNMENT:GATK4_REVERTSAM_MT' { + withName: '.*PREPARE_MT_ALIGNMENT:GATK4_REVERTSAM_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } - withName: '.*PREPARE_MT_ALLIGNMENT:GATK4_SAMTOFASTQ_MT' { + withName: '.*PREPARE_MT_ALIGNMENT:GATK4_SAMTOFASTQ_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index be9b1947..53fc4860 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -180,10 +180,9 @@ workflow RAREDISEASE { } // STEP 2.1: MT CALLING - ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) PREPARE_MT_ALIGNMENT ( - ch_bam_bai + ch_mapped.bam_bai ) ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) From b6276e5641f8a6cd27666f659cba0137c882506a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 22 Apr 2022 10:15:55 +0200 Subject: [PATCH 0452/1921] update stranger --- modules.json | 4 ++-- modules/nf-core/modules/samtools/view/main.nf | 2 +- modules/nf-core/modules/samtools/view/meta.yml | 4 ++++ modules/nf-core/modules/stranger/main.nf | 11 +++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index aa223e95..460ca7ea 100644 --- a/modules.json +++ b/modules.json @@ -76,10 +76,10 @@ "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/view": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "12afb6b0faf3cabf769c9a2a7dd477e3f066eac0" }, "stranger": { - "git_sha": "a6cb75174bfbd131f3da14d8cd3e34c1a2e6e268" + "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" }, "svdb/merge": { "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf index 5f14fbbf..11cfb74b 100644 --- a/modules/nf-core/modules/samtools/view/main.nf +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -8,7 +8,7 @@ process SAMTOOLS_VIEW { 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" input: - tuple val(meta), path(input) + tuple val(meta), path(input), path(index) path fasta output: diff --git a/modules/nf-core/modules/samtools/view/meta.yml b/modules/nf-core/modules/samtools/view/meta.yml index 5604bfa7..a8b43ecc 100644 --- a/modules/nf-core/modules/samtools/view/meta.yml +++ b/modules/nf-core/modules/samtools/view/meta.yml @@ -25,6 +25,10 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + - index: + type: optional file + description: BAM.BAI/CRAM.CRAI file + pattern: "*.{.bai,.crai}" - fasta: type: optional file description: Reference file the CRAM was created with diff --git a/modules/nf-core/modules/stranger/main.nf b/modules/nf-core/modules/stranger/main.nf index 55678bd3..ddfa0070 100644 --- a/modules/nf-core/modules/stranger/main.nf +++ b/modules/nf-core/modules/stranger/main.nf @@ -33,4 +33,15 @@ process STRANGER { stranger: \$( stranger --version ) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + stranger: \$( stranger --version ) + END_VERSIONS + """ } From 090f4b73e46463c5cbe276d9be9439f0651418ff Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Fri, 22 Apr 2022 10:18:09 +0200 Subject: [PATCH 0453/1921] feat updated samtools view module --- modules.json | 2 +- modules/nf-core/modules/samtools/view/main.nf | 8 ++++---- modules/nf-core/modules/samtools/view/meta.yml | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules.json b/modules.json index 2da9c36e..1c9590f7 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "samtools/view": { - "git_sha": "1ad73f1b2abdea9398680d6d20014838135c9a35" + "git_sha": "12afb6b0faf3cabf769c9a2a7dd477e3f066eac0" }, "stranger": { "git_sha": "a6cb75174bfbd131f3da14d8cd3e34c1a2e6e268" diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf index 75aad063..11cfb74b 100644 --- a/modules/nf-core/modules/samtools/view/main.nf +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -2,13 +2,13 @@ process SAMTOOLS_VIEW { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::samtools=1.15" : null) + conda (params.enable_conda ? "bioconda::samtools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15--h1170115_1' : - 'quay.io/biocontainers/samtools:1.15--h1170115_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : + 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" input: - tuple val(meta), path(input) + tuple val(meta), path(input), path(index) path fasta output: diff --git a/modules/nf-core/modules/samtools/view/meta.yml b/modules/nf-core/modules/samtools/view/meta.yml index 5604bfa7..a8b43ecc 100644 --- a/modules/nf-core/modules/samtools/view/meta.yml +++ b/modules/nf-core/modules/samtools/view/meta.yml @@ -25,6 +25,10 @@ input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" + - index: + type: optional file + description: BAM.BAI/CRAM.CRAI file + pattern: "*.{.bai,.crai}" - fasta: type: optional file description: Reference file the CRAM was created with From 9f74a790724f399b6abc0f65192bb788d146631b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 22 Apr 2022 10:25:50 +0200 Subject: [PATCH 0454/1921] prettier int --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 460ca7ea..afc9bcab 100644 --- a/modules.json +++ b/modules.json @@ -110,4 +110,4 @@ } } } -} \ No newline at end of file +} From 9c1af90d11fc3dc70f9af5522b89cd9b1248afe3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 22 Apr 2022 11:09:14 +0200 Subject: [PATCH 0455/1921] remove init script --- bin/sentieon_init.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/sentieon_init.sh diff --git a/bin/sentieon_init.sh b/bin/sentieon_init.sh deleted file mode 100644 index e69de29b..00000000 From 4632634c0a2f41cf385669654f92b156e54078b4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 22 Apr 2022 11:14:28 +0200 Subject: [PATCH 0456/1921] change index parameter to bwa --- conf/genomes.config | 4 ++-- main.nf | 2 +- nextflow.config | 1 - nextflow_schema.json | 6 ------ 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 036ccbaa..f2628947 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,7 +15,7 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - sentieon = "" + bwa_index = "" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -28,7 +28,7 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - sentieon = "" + bwa_index = "" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index e0b12a13..feded8cf 100644 --- a/main.nf +++ b/main.nf @@ -25,7 +25,7 @@ params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbs params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_indels') params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') -params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'sentieon') +params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') diff --git a/nextflow.config b/nextflow.config index f173a2a2..d3910504 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,7 +12,6 @@ params { // Required options input = null outdir = null - sentieon_install_dir = null // References genome = null diff --git a/nextflow_schema.json b/nextflow_schema.json index a7ff5fce..d323842d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -35,12 +35,6 @@ "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})$" }, - "sentieon_install_dir": { - "type": "string", - "fa_icon": "fas fa-folder-open", - "description": "Directory where Sentieon binary is installed if not on $PATH", - "default": null - }, "multiqc_title": { "type": "string", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", From a920b1f53511b0b2702354f691cec6569732a3db Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 22 Apr 2022 13:25:51 +0200 Subject: [PATCH 0457/1921] fix exe not found error --- 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 433e2706..3bae8c78 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -29,7 +29,7 @@ process SENTIEON_BWAMEM { \$INDEX \\ $reads \\ $args \\ - | $sentieon_exe \\ + | sentieon \\ util \\ sort \\ -r $fasta \\ From f23f4052cfd46abfcb2b69ef43dc99ebff17852b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 23 Apr 2022 15:25:07 +0200 Subject: [PATCH 0458/1921] make separate modules for each step --- modules/local/sentieon/bqsr.nf | 78 +++++++++++++++++++ modules/local/sentieon/datametrics.nf | 62 +++++++++++++++ modules/local/sentieon/dedup.nf | 53 +++++++++++++ modules/local/sentieon/driver.nf | 97 ------------------------ modules/local/sentieon/locuscollector.nf | 46 +++++++++++ subworkflows/local/align.nf | 4 +- subworkflows/local/align_sentieon.nf | 37 ++++----- workflows/raredisease.nf | 2 - 8 files changed, 259 insertions(+), 120 deletions(-) create mode 100644 modules/local/sentieon/bqsr.nf create mode 100644 modules/local/sentieon/datametrics.nf create mode 100644 modules/local/sentieon/dedup.nf delete mode 100644 modules/local/sentieon/driver.nf create mode 100644 modules/local/sentieon/locuscollector.nf diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf new file mode 100644 index 00000000..0d036700 --- /dev/null +++ b/modules/local/sentieon/bqsr.nf @@ -0,0 +1,78 @@ +process SENTIEON_BQSR { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai), path(score), path(score_idx) + path fasta + path fai + path known_dbsnp + + output: + tuple val(meta), path('*.recal.bam') , emit: bam + tuple val(meta), path('*.recal.bai') , emit: bai + tuple val(meta), path('*recal_data.table') , emit: recal_pre + tuple val(meta), path('*recal_data.table.post') , emit: recal_post + tuple val(meta), path('*recal_result.csv') , emit: recal_csv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def ref = fasta ? "-r $fasta" : '' + def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + sentieon driver \\ + -t ${task.cpus} \\ + $args \\ + $ref \\ + $input \\ + --algo QualCal \\ + $dbsnp \\ + ${prefix}.recal_table.table + + sentieon driver \\ + -t ${task.cpus} \\ + $args \\ + $ref \\ + $input \\ + -q ${prefix}.recal_data.table \\ + --algo QualCal \\ + $dbsnp \\ + $prefix.recal_data.table.post \\ + --algo ReadWriter ${prefix}.recal.bam + + sentieon driver \\ + -t ${task.cpus} \\ + --algo QualCal \\ + --plot \\ + --before ${prefix}.recal.table \\ + --after ${prefix}.table.post \\ + ${prefix}_recal_result.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.recal.bam + touch ${prefix}.recal.bai + touch ${prefix}.recal_data.table + touch ${prefix}.recal_data.table.post + touch ${prefix}.recal.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf new file mode 100644 index 00000000..9c23ecf3 --- /dev/null +++ b/modules/local/sentieon/datametrics.nf @@ -0,0 +1,62 @@ +process SENTIEON_DATAMETRICS { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path fai + + output: + tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics + tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics + tuple val(meta), path('*gc_summary.txt') , emit: gc_summary + tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics + tuple val(meta), path('*aln_metrics.txt') , emit: aln_metrics + tuple val(meta), path('*is_metrics.txt') , emit: is_metrics + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def ref = fasta ? "-r $fasta" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + sentieon \\ + driver \\ + --algo GCBias --summary ${prefix}_gc_summary.txt ${prefix}_gc_metrics.txt \\ + --algo MeanQualityByCycle ${prefix}_mq_metrics.txt \\ + --algo QualDistribution ${prefix}_qd_metrics.txt \\ + --algo InsertSizeMetricAlgo ${prefix}_is_metrics.txt \\ + --algo AlignmentStat ${prefix}_aln_metrics.txt \\ + -t $task.cpus \\ + $input \\ + $ref \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.mq_metrics.txt + touch ${prefix}.qd_metrics.txt + touch ${prefix}.gc_summary.txt + touch ${prefix}.gc_metrics.txt + touch ${prefix}.aln_metrics.txt + touch ${prefix}.is_metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf new file mode 100644 index 00000000..729df8cc --- /dev/null +++ b/modules/local/sentieon/dedup.nf @@ -0,0 +1,53 @@ +process SENTIEON_DEDUP { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai), path(score), path(score_idx) + path fasta + path fai + + output: + tuple val(meta), path('*.bam') , emit: bam , optional: true + tuple val(meta), path('*.bai') , emit: bai , optional: true + tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + sentieon \\ + driver \\ + -t $task.cpus \\ + $input \\ + $args \\ + --algo Dedup \\ + --score_info $score \\ + --metrics ${prefix}_dedup_metrics.txt \\ + ${prefix}.deduped.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + touch ${prefix}.bai + touch ${prefix}.dedup_metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/modules/local/sentieon/driver.nf b/modules/local/sentieon/driver.nf deleted file mode 100644 index eff7dac5..00000000 --- a/modules/local/sentieon/driver.nf +++ /dev/null @@ -1,97 +0,0 @@ -process SENTIEON_DRIVER { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - input: - tuple val(meta), path(bam), path(bai), path(score), path(score_idx), path(recal_pre), path(recal_post) - path fasta - path fai - path known_dbsnp - path known_mills - path known_indels - - output: - tuple val(meta), path('*.bam') , emit: bam , optional: true - tuple val(meta), path('*.bai') , emit: bai , optional: true - tuple val(meta), path('*.cram') , emit: cram , optional: true - tuple val(meta), path('*.crai') , emit: crai , optional: true - tuple val(meta), path('*.vcf.gz') , emit: vcf , optional: true - tuple val(meta), path('*.vcf.gz.tbi') , emit: vcf_tbi , optional: true - tuple val(meta), path('*recal_data.table') , emit: recal_pre , optional: true - tuple val(meta), path('*recal_data.table.post') , emit: recal_post , optional: true - tuple val(meta), path('*recal.csv') , emit: recal_csv , optional: true - tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics , optional: true - tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics , optional: true - tuple val(meta), path('*gc_summary.txt') , emit: gc_summary , optional: true - tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics , optional: true - tuple val(meta), path('*aln_metrics.txt') , emit: aln_metrics , optional: true - tuple val(meta), path('*is_metrics.txt') , emit: is_metrics , optional: true - tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup, optional: true - tuple val(meta), path('*score.txt.gz') , emit: score , optional: true - tuple val(meta), path('*score.txt.gz.tbi') , emit: score_idx , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def input = bam ? '-i ' + bam.sort().join(' -i ') : '' - def ref = fasta ? "-r $fasta" : '' - def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' - def mills = known_mills ? "-k $known_mills" : '' - def indels = known_indels ? "-k $known_indels" : '' - if (args.contains('--algo Haplotyper')) { - if (known_dbsnp) { - dbsnp = '' - def args_list = args.split('--algo Haplotyper') - args_list = [ args_list[0] ] + ["--algo Haplotyper -d $known_dbsnp"] + [ args_list[-1] ] - args = args_list.join(' ') - } - } - """ - sentieon \\ - driver \\ - $ref \\ - -t $task.cpus \\ - $input \\ - $dbsnp \\ - $mills \\ - $indels \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam - touch ${prefix}.bai - touch ${prefix}.cram - touch ${prefix}.crai - touch ${prefix}.vcf.gz - touch ${prefix}.vcf.gz.tbi - touch ${prefix}.recal_data.table - touch ${prefix}.recal_data.table.post - touch ${prefix}.recal.csv - touch ${prefix}.dedup_metrics.txt - touch ${prefix}.score.txt.gz - touch ${prefix}.score.txt.gz.tbi - touch ${prefix}.mq_metrics.txt - touch ${prefix}.qd_metrics.txt - touch ${prefix}.gc_summary.txt - touch ${prefix}.gc_metrics.txt - touch ${prefix}.aln_metrics.txt - touch ${prefix}.is_metrics.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ -} diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf new file mode 100644 index 00000000..05724e7c --- /dev/null +++ b/modules/local/sentieon/locuscollector.nf @@ -0,0 +1,46 @@ +process SENTIEON_LOCUSCOLLECTOR { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path('*score.txt.gz') , emit: score , optional: true + tuple val(meta), path('*score.txt.gz.tbi') , emit: score_idx , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + """ + sentieon \\ + driver \\ + --algo LocusCollector \\ + --fun score_info ${idSample}_score.gz \\ + -t $task.cpus \\ + $input \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.score.txt.gz + touch ${prefix}.score.txt.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index e920354b..3d95fb34 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -13,8 +13,6 @@ workflow ALIGN { fai // channel: [genome.fai] index // channel: [ /path/to/bwamem2/index/ ] known_dbsnp // channel: [ /path/to/known_dbsnp/ ] - known_indels // channel: [ /path/to/known_indels/ ] - known_mills // channel: [ /path/to/known_mills/ ] main: ch_versions = Channel.empty() @@ -25,7 +23,7 @@ workflow ALIGN { ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if( aligner == "sentieon" ) { - ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp, known_indels, known_mills ) + ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp ) ch_marked_bam = ALIGN_SENTIEON.out.marked_bam ch_marked_bai = ALIGN_SENTIEON.out.marked_bai ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) diff --git a/subworkflows/local/align_sentieon.nf b/subworkflows/local/align_sentieon.nf index b253de7f..f4e5a120 100644 --- a/subworkflows/local/align_sentieon.nf +++ b/subworkflows/local/align_sentieon.nf @@ -2,11 +2,11 @@ // A subworkflow to annotate structural variants. // -include { SENTIEON_BWAMEM } from '../../modules/local/sentieon/bwamem' -include { SENTIEON_DRIVER as SENTIEON_DATAMETRICS } from '../../modules/local/sentieon/driver' -include { SENTIEON_DRIVER as SENTIEON_LOCUSCOLLECTOR } from '../../modules/local/sentieon/driver' -include { SENTIEON_DRIVER as SENTIEON_DEDUP } from '../../modules/local/sentieon/driver' -include { SENTIEON_DRIVER as SENTIEON_BQSR } from '../../modules/local/sentieon/driver' +include { SENTIEON_BWAMEM } from '../../modules/local/sentieon/bwamem' +include { SENTIEON_DATAMETRICS } from '../../modules/local/sentieon/datametrics' +include { SENTIEON_LOCUSCOLLECTOR } from '../../modules/local/sentieon/locuscollector' +include { SENTIEON_DEDUP } from '../../modules/local/sentieon/dedup' +include { SENTIEON_BQSR } from '../../modules/local/sentieon/bqsr' workflow ALIGN_SENTIEON { take: @@ -15,12 +15,12 @@ workflow ALIGN_SENTIEON { fai // path: genome.fai index // channel: [ /path/to/bwamem2/index/ ] known_dbsnp // path: params.known_dbsnp - known_indels // path: params.known_indels - known_mills // path: params.known_mills main: - ch_versions = Channel.empty() - ch_recal_pre = Channel.empty() + ch_versions = Channel.empty() + ch_bqsr_bam = Channel.empty() + ch_bqsr_bai = Channel.empty() + ch_bqsr_csv = Channel.empty() SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions) @@ -28,35 +28,36 @@ workflow ALIGN_SENTIEON { SENTIEON_BWAMEM.out .bam .join(SENTIEON_BWAMEM.out.bai) - .map { it -> it + [ [], [], [], [] ] } .set { ch_bam_bai } - SENTIEON_DATAMETRICS (ch_bam_bai, fasta, fai, [], [], [] ) + SENTIEON_DATAMETRICS (ch_bam_bai, fasta, fai ) ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions) - SENTIEON_LOCUSCOLLECTOR (ch_bam_bai, fasta, fai, [], [], [] ) + SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) ch_bam_bai - .map { meta, bam, bai, score, score_idx, recal_pre, recal_post -> [ meta, bam, bai ] } .join(SENTIEON_LOCUSCOLLECTOR.out.score) .join(SENTIEON_LOCUSCOLLECTOR.out.score_idx) - .map { it -> it + [ [], [] ] } .set { ch_bam_bai_score } - SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai, [], [], [] ) + SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai ) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam .join(SENTIEON_DEDUP.out.bai) - .map { it -> it + [ [], [], [], [] ] } .set { ch_dedup_bam_bai } - ch_recal_pre = SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp, known_mills, known_indels ).out.recal_pre + SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp ) + ch_bqsr_bam = SENTIEON_BQSR.out.bam + ch_bqsr_bai = SENTIEON_BQSR.out.bai + ch_bqsr_csv = SENTIEON_BQSR.out.recal_csv } emit: marked_bam = SENTIEON_DEDUP.out.bam marked_bai = SENTIEON_DEDUP.out.bai - recal_pre = ch_recal_pre + recal_bam = ch_bqsr_bam.ifEmpty(null) + recal_bai = ch_bqsr_bai.ifEmpty(null) + recal_csv = ch_bqsr_csv.ifEmpty(null) mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 19519c1f..e1a34c5c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -128,8 +128,6 @@ workflow RAREDISEASE { ch_references.genome_fai, ch_references.aligner_index, ch_known_dbsnp, - ch_known_indels, - ch_known_mills ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) From a81900561c3fa38fa61d66cfee681ecf7212cd80 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 24 Apr 2022 00:37:02 +0200 Subject: [PATCH 0459/1921] modify modules config --- conf/modules.config | 21 --------------------- modules/local/sentieon/bwamemindex.nf | 4 ++-- modules/local/sentieon/dedup.nf | 14 +++++++------- 3 files changed, 9 insertions(+), 30 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f3fef0fc..7c2262fb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -217,11 +217,6 @@ process { process{ withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") - publishDir = [ - path: { "${params.outdir}/sentieon" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { @@ -235,15 +230,6 @@ process{ } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { - ext.args = { [ - "--algo GCBias --summary ${meta.id}.gc_summary.txt ${meta.id}.gc_metrics.txt", - "--algo MeanQualityByCycle ${meta.id}.mq_metrics.txt", - "--algo QualDistribution ${meta.id}.qd_metrics.txt", - "--algo InsertSizeMetricAlgo ${meta.id}.is_metrics.txt", - "--algo AlignmentStat ${meta.id}.aln_metrics.txt", - "--algo LocusCollector --fun score_info ${meta.id}.score.txt.gz" - ].join(' ') - } publishDir = [ path: { "${params.outdir}/sentieon_bam_metrics" }, mode: params.publish_dir_mode, @@ -252,7 +238,6 @@ process{ } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { - ext.args = { "--algo LocusCollector --fun score_info ${meta.id}.score.txt.gz" } publishDir = [ path: { "${params.outdir}/sentieon_dedup" }, mode: params.publish_dir_mode, @@ -260,11 +245,6 @@ process{ } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { - ext.args = { [ - "--algo Dedup --score_info ${meta.id}.score.txt.gz", - "--metrics ${meta.id}.dedup_metrics.txt ${meta.id}.dedup.bam" - ].join(' ') - } publishDir = [ path: { "${params.outdir}/sentieon_dedup" }, mode: params.publish_dir_mode, @@ -272,7 +252,6 @@ process{ } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BQSR' { - ext.args = { "--algo QualCal ${meta.id}.recal_data.table" } publishDir = [ path: { "${params.outdir}/sentieon_recal" }, mode: params.publish_dir_mode, diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index e20cd7e4..3657b338 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -7,8 +7,8 @@ process SENTIEON_BWAINDEX { path fasta output: - path "bwa_index" , emit: index - path "versions.yml", emit: versions + path "bwa_index" , emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 729df8cc..3537baf1 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -9,10 +9,10 @@ process SENTIEON_DEDUP { path fai output: - tuple val(meta), path('*.bam') , emit: bam , optional: true - tuple val(meta), path('*.bai') , emit: bai , optional: true - tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path('*dedup.bam') , emit: bam + tuple val(meta), path('*dedup.bai') , emit: bai + tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,7 +30,7 @@ process SENTIEON_DEDUP { --algo Dedup \\ --score_info $score \\ --metrics ${prefix}_dedup_metrics.txt \\ - ${prefix}.deduped.bam + ${prefix}.dedup.bam cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -41,8 +41,8 @@ process SENTIEON_DEDUP { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.bam - touch ${prefix}.bai + touch ${prefix}.dedup.bam + touch ${prefix}.dedup.bai touch ${prefix}.dedup_metrics.txt cat <<-END_VERSIONS > versions.yml From 1e5e2c905f388a0586d71048375a0b621105ef9f Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Wed, 27 Apr 2022 09:02:03 +0200 Subject: [PATCH 0460/1921] feat added samplesheet github test-data path to test.config --- conf/test.config | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 6355730a..39ed52da 100644 --- a/conf/test.config +++ b/conf/test.config @@ -17,14 +17,16 @@ params { // Limit resources so that this can run on GitHub Actions max_cpus = 2 max_memory = '6.GB' - max_time = '6.h' + max_time = '2.h' // Input data // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' + //input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' // Genome references - fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + //fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + fasta = '/home/lucia.penaperez/data_tests/Homo_sapiens_assembly38_chr20_chrM.fasta' // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' From d3caec322b34b6356a5f822c790eef1ed7b1e820 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Thu, 28 Apr 2022 08:53:05 +0200 Subject: [PATCH 0461/1921] Path to fasta file needs to be fixed --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 39ed52da..9b6d00dd 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,7 +26,7 @@ params { // Genome references //fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' - fasta = '/home/lucia.penaperez/data_tests/Homo_sapiens_assembly38_chr20_chrM.fasta' + //fasta = 'Path_to_Homo_sapiens_assembly38_chr20_chrM.fasta' // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' From 964b577c01e6301129db924893a3f16be1fc91f6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 28 Apr 2022 14:07:32 +0200 Subject: [PATCH 0462/1921] module update --- modules.json | 4 ++-- modules/nf-core/modules/picard/collecthsmetrics/main.nf | 9 +++++---- modules/nf-core/modules/picard/collecthsmetrics/meta.yml | 7 ++++--- modules/nf-core/modules/untar/main.nf | 6 +++--- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/modules.json b/modules.json index afc9bcab..b47998ae 100644 --- a/modules.json +++ b/modules.json @@ -49,7 +49,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/collecthsmetrics": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905" }, "picard/collectmultiplemetrics": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" @@ -103,7 +103,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "untar": { - "git_sha": "9ae34a01d1747019fd37753ff4cafb05aec35a2b" + "git_sha": "9aadd9a6d3f5964476582319b3a1c54a3e3fe7c9" }, "vcfanno": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/modules/picard/collecthsmetrics/main.nf index 3acf8bb8..ef7a9b9f 100644 --- a/modules/nf-core/modules/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/modules/picard/collecthsmetrics/main.nf @@ -15,8 +15,8 @@ process PICARD_COLLECTHSMETRICS { path target_intervals output: - tuple val(meta), path("*collecthsmetrics.txt"), emit: hs_metrics - path "versions.yml" , emit: versions + tuple val(meta), path("*_metrics") , emit: metrics + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -41,7 +41,8 @@ process PICARD_COLLECTHSMETRICS { -BAIT_INTERVALS $bait_intervals \\ -TARGET_INTERVALS $target_intervals \\ -INPUT $bam \\ - -OUTPUT ${prefix}_collecthsmetrics.txt + -OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics + cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -52,7 +53,7 @@ process PICARD_COLLECTHSMETRICS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_collecthsmetrics.txt + touch ${prefix}.CollectHsMetrics.coverage_metrics cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/picard/collecthsmetrics/meta.yml b/modules/nf-core/modules/picard/collecthsmetrics/meta.yml index 4b94909f..dc9d647a 100644 --- a/modules/nf-core/modules/picard/collecthsmetrics/meta.yml +++ b/modules/nf-core/modules/picard/collecthsmetrics/meta.yml @@ -57,10 +57,11 @@ output: type: file description: File containing software versions pattern: "versions.yml" - - hs_metrics: + - metrics: type: file - description: The metrics file. - pattern: "*_collecthsmetrics.txt" + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" authors: - "@projectoriented" + - "@matthdsm" diff --git a/modules/nf-core/modules/untar/main.nf b/modules/nf-core/modules/untar/main.nf index bbfa0bfe..058d1764 100644 --- a/modules/nf-core/modules/untar/main.nf +++ b/modules/nf-core/modules/untar/main.nf @@ -2,10 +2,10 @@ process UNTAR { tag "$archive" label 'process_low' - conda (params.enable_conda ? "conda-forge::tar=1.34" : null) + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv2/biocontainers_v1.2.0_cv2.img' : - 'biocontainers/biocontainers:v1.2.0_cv2' }" + 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : + 'ubuntu:20.04' }" input: tuple val(meta), path(archive) From 4299eb54cad65d6b78700d210780ebe220c16240 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 28 Apr 2022 14:46:29 +0200 Subject: [PATCH 0463/1921] review suggestions --- conf/modules.config | 1 + modules/local/sentieon/bqsr.nf | 7 +++---- modules/local/sentieon/bwamemindex.nf | 5 +++-- modules/local/sentieon/datametrics.nf | 14 +++++++------- modules/local/sentieon/dedup.nf | 2 +- modules/local/sentieon/locuscollector.nf | 5 +++-- nextflow.config | 1 + nextflow_schema.json | 7 +++++++ 8 files changed, 26 insertions(+), 16 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7c2262fb..4d797d3d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -245,6 +245,7 @@ process{ } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { + ext.args = { $params.rmdup ? "--rmdup" : '' } publishDir = [ path: { "${params.outdir}/sentieon_dedup" }, mode: params.publish_dir_mode, diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index 0d036700..870b0771 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -23,14 +23,13 @@ process SENTIEON_BQSR { script: def args = task.ext.args ?: '' def input = bam ? '-i ' + bam.sort().join(' -i ') : '' - def ref = fasta ? "-r $fasta" : '' def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ sentieon driver \\ -t ${task.cpus} \\ + -r $fasta \\ $args \\ - $ref \\ $input \\ --algo QualCal \\ $dbsnp \\ @@ -38,8 +37,8 @@ process SENTIEON_BQSR { sentieon driver \\ -t ${task.cpus} \\ + -r $fasta \\ $args \\ - $ref \\ $input \\ -q ${prefix}.recal_data.table \\ --algo QualCal \\ @@ -68,7 +67,7 @@ process SENTIEON_BQSR { touch ${prefix}.recal.bai touch ${prefix}.recal_data.table touch ${prefix}.recal_data.table.post - touch ${prefix}.recal.csv + touch ${prefix}_recal_result.csv cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 3657b338..90b1f356 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -14,13 +14,14 @@ 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 ? "-p bwa_index/${task.ext.prefix}" : "-p bwa_index/${fasta.baseName}" """ mkdir bwa_index sentieon bwa index \\ $args \\ - -p bwa_index/${fasta.baseName} \\ + $prefix \\ $fasta cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 9c23ecf3..5ae0beec 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -34,8 +34,8 @@ process SENTIEON_DATAMETRICS { --algo InsertSizeMetricAlgo ${prefix}_is_metrics.txt \\ --algo AlignmentStat ${prefix}_aln_metrics.txt \\ -t $task.cpus \\ + -r $fasta \\ $input \\ - $ref \\ $args cat <<-END_VERSIONS > versions.yml @@ -47,12 +47,12 @@ process SENTIEON_DATAMETRICS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.mq_metrics.txt - touch ${prefix}.qd_metrics.txt - touch ${prefix}.gc_summary.txt - touch ${prefix}.gc_metrics.txt - touch ${prefix}.aln_metrics.txt - touch ${prefix}.is_metrics.txt + touch ${prefix}_mq_metrics.txt + touch ${prefix}_qd_metrics.txt + touch ${prefix}_gc_summary.txt + touch ${prefix}_gc_metrics.txt + touch ${prefix}_aln_metrics.txt + touch ${prefix}_is_metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 3537baf1..350d0a3a 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -43,7 +43,7 @@ process SENTIEON_DEDUP { """ touch ${prefix}.dedup.bam touch ${prefix}.dedup.bai - touch ${prefix}.dedup_metrics.txt + touch ${prefix}_dedup_metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index 05724e7c..0bcac45a 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -17,11 +17,12 @@ process SENTIEON_LOCUSCOLLECTOR { script: def args = task.ext.args ?: '' def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def prefix = task.ext.prefix ? "${task.ext.prefix}_score.txt.gz" : "${meta.id}_score.txt.gz" """ sentieon \\ driver \\ --algo LocusCollector \\ - --fun score_info ${idSample}_score.gz \\ + --fun score_info $prefix \\ -t $task.cpus \\ $input \\ $args @@ -33,7 +34,7 @@ process SENTIEON_LOCUSCOLLECTOR { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ? "${task.ext.prefix}_score.gz" : "${meta.id}_score.gz" """ touch ${prefix}.score.txt.gz touch ${prefix}.score.txt.gz.tbi diff --git a/nextflow.config b/nextflow.config index d3910504..74ac8787 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,6 +26,7 @@ params { // Alignment aligner = 'bwamem2' + rmdup = false // Variant calling variant_caller = 'deepvariant' diff --git a/nextflow_schema.json b/nextflow_schema.json index d323842d..56a72db5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -222,6 +222,13 @@ "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-map-signs", "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 } } }, From 3bcceda99ce1963bacfb9819b4d64fb5e16a064f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 28 Apr 2022 14:47:23 +0200 Subject: [PATCH 0464/1921] review suggestions --- workflows/raredisease.nf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e1a34c5c..f6150b22 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -145,12 +145,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) // STEP 1.6: EXPANSIONHUNTER AND STRANGER - CALL_REPEAT_EXPANSIONS ( - ch_mapped.bam_bai, - ch_references.genome_fasta, - ch_references.variant_catalog - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + // CALL_REPEAT_EXPANSIONS ( + // ch_mapped.bam_bai, + // ch_references.genome_fasta, + // ch_references.variant_catalog + // ) + // ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. From 9014df54103940c71fcff65392987dfd4ebce7c7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 29 Apr 2022 00:14:31 +0200 Subject: [PATCH 0465/1921] reorder program arguments --- modules/local/sentieon/datametrics.nf | 10 +++++----- modules/local/sentieon/dedup.nf | 4 ++-- modules/local/sentieon/locuscollector.nf | 6 ++---- workflows/raredisease.nf | 14 +++++++------- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 5ae0beec..8e713648 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -28,15 +28,15 @@ process SENTIEON_DATAMETRICS { """ sentieon \\ driver \\ + -t $task.cpus \\ + -r $fasta \\ + $input \\ + $args \\ --algo GCBias --summary ${prefix}_gc_summary.txt ${prefix}_gc_metrics.txt \\ --algo MeanQualityByCycle ${prefix}_mq_metrics.txt \\ --algo QualDistribution ${prefix}_qd_metrics.txt \\ --algo InsertSizeMetricAlgo ${prefix}_is_metrics.txt \\ - --algo AlignmentStat ${prefix}_aln_metrics.txt \\ - -t $task.cpus \\ - -r $fasta \\ - $input \\ - $args + --algo AlignmentStat ${prefix}_aln_metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 350d0a3a..45cc25e0 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -10,7 +10,7 @@ process SENTIEON_DEDUP { output: tuple val(meta), path('*dedup.bam') , emit: bam - tuple val(meta), path('*dedup.bai') , emit: bai + tuple val(meta), path('*dedup.bam.bai') , emit: bai tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup path "versions.yml" , emit: versions @@ -42,7 +42,7 @@ process SENTIEON_DEDUP { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.dedup.bam - touch ${prefix}.dedup.bai + touch ${prefix}.dedup.bam.bai touch ${prefix}_dedup_metrics.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index 0bcac45a..627e5f24 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -15,17 +15,15 @@ process SENTIEON_LOCUSCOLLECTOR { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' def input = bam ? '-i ' + bam.sort().join(' -i ') : '' def prefix = task.ext.prefix ? "${task.ext.prefix}_score.txt.gz" : "${meta.id}_score.txt.gz" """ sentieon \\ driver \\ - --algo LocusCollector \\ - --fun score_info $prefix \\ -t $task.cpus \\ $input \\ - $args + --algo LocusCollector \\ + --fun score_info $prefix cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f6150b22..3dc4451e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -144,13 +144,13 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) - // STEP 1.6: EXPANSIONHUNTER AND STRANGER - // CALL_REPEAT_EXPANSIONS ( - // ch_mapped.bam_bai, - // ch_references.genome_fasta, - // ch_references.variant_catalog - // ) - // ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + STEP 1.6: EXPANSIONHUNTER AND STRANGER + CALL_REPEAT_EXPANSIONS ( + ch_mapped.bam_bai, + ch_references.genome_fasta, + ch_references.variant_catalog + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. From 760b7a8266751cd6c319e078804eed770d717dc5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 29 Apr 2022 00:27:22 +0200 Subject: [PATCH 0466/1921] comment --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3dc4451e..e1a34c5c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -144,7 +144,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) - STEP 1.6: EXPANSIONHUNTER AND STRANGER + // STEP 1.6: EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, ch_references.genome_fasta, From 839678f7617aa6493684a147483a9b532a02a8d0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 29 Apr 2022 01:16:43 +0200 Subject: [PATCH 0467/1921] fix qc bam subworkflow --- subworkflows/nf-core/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 30c62990..26bfcf72 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -48,7 +48,7 @@ workflow QC_BAM { emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - hs_metrics = PICARD_COLLECTHSMETRICS.out.hs_metrics // channel: [ val(meta), path(metrics) ] + hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] From 5219eb0a1b568cd2c529382d661c1c6c980b23b0 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Fri, 29 Apr 2022 10:06:59 +0200 Subject: [PATCH 0468/1921] Update modules.json fix added a blank line at the end of the file Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 1c9590f7..859e770d 100644 --- a/modules.json +++ b/modules.json @@ -116,4 +116,4 @@ } } } -} \ No newline at end of file +} From 406fd3e3757ff128ef24f4257f20adafdfd42db1 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Fri, 29 Apr 2022 10:08:43 +0200 Subject: [PATCH 0469/1921] Update conf/test.config fix uncommented genome fasta reference Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 9b6d00dd..e4745675 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,7 @@ params { input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' // Genome references - //fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' //fasta = 'Path_to_Homo_sapiens_assembly38_chr20_chrM.fasta' // Variant catalog file From c33b22a134bc63d5fc5689699d97d859df4974b3 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Fri, 29 Apr 2022 10:08:43 +0200 Subject: [PATCH 0470/1921] Update conf/test.config fix uncommented genome fasta reference Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 9b6d00dd..e4745675 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,7 @@ params { input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' // Genome references - //fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' + fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' //fasta = 'Path_to_Homo_sapiens_assembly38_chr20_chrM.fasta' // Variant catalog file From 8104914f49cd55857b2ab4b064a6e9527aaed0f0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 29 Apr 2022 17:20:50 +0200 Subject: [PATCH 0471/1921] review suggestions --- conf/genomes.config | 6 ++++-- conf/modules.config | 7 +++++-- main.nf | 2 +- modules/local/sentieon/bqsr.nf | 2 +- modules/local/sentieon/bwamemindex.nf | 10 +++++----- modules/local/sentieon/datametrics.nf | 2 +- modules/local/sentieon/dedup.nf | 2 +- modules/local/sentieon/locuscollector.nf | 2 +- workflows/raredisease.nf | 6 +++--- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index f2628947..6f3e9423 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,7 +15,8 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - bwa_index = "" + bwa = "" + known_dbsnp = "" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -28,7 +29,8 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - bwa_index = "" + bwa = "" + known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/conf/modules.config b/conf/modules.config index 4d797d3d..76ce3d09 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -225,7 +225,7 @@ process{ publishDir = [ path: { "${params.outdir}/sentieon_align" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -233,7 +233,7 @@ process{ publishDir = [ path: { "${params.outdir}/sentieon_bam_metrics" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -241,6 +241,7 @@ process{ publishDir = [ path: { "${params.outdir}/sentieon_dedup" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -249,6 +250,7 @@ process{ publishDir = [ path: { "${params.outdir}/sentieon_dedup" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -256,6 +258,7 @@ process{ publishDir = [ path: { "${params.outdir}/sentieon_recal" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/main.nf b/main.nf index feded8cf..bee83c8c 100644 --- a/main.nf +++ b/main.nf @@ -25,7 +25,7 @@ params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbs params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_indels') params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') -params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') +params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index 870b0771..8cc350a3 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -22,7 +22,7 @@ process SENTIEON_BQSR { script: def args = task.ext.args ?: '' - def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def input = bam.sort().collect{"-i $it"}.join(' ') def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 90b1f356..3a03fd32 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -7,7 +7,7 @@ process SENTIEON_BWAINDEX { path fasta output: - path "bwa_index" , emit: index + path "bwa" , emit: index path "versions.yml" , emit: versions when: @@ -15,13 +15,13 @@ process SENTIEON_BWAINDEX { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ? "-p bwa_index/${task.ext.prefix}" : "-p bwa_index/${fasta.baseName}" + def prefix = task.ext.prefix ? "bwa/${task.ext.prefix}" : "bwa/${fasta.baseName}" """ - mkdir bwa_index + mkdir bwa sentieon bwa index \\ $args \\ - $prefix \\ + -p $prefix \\ $fasta cat <<-END_VERSIONS > versions.yml @@ -33,7 +33,7 @@ process SENTIEON_BWAINDEX { stub: """ - mkdir bwa_index + mkdir bwa cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 8e713648..1b8ee74c 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -22,7 +22,7 @@ process SENTIEON_DATAMETRICS { script: def args = task.ext.args ?: '' - def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def input = bam.sort().collect{"-i $it"}.join(' ') def ref = fasta ? "-r $fasta" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 45cc25e0..c135bdbe 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -19,7 +19,7 @@ process SENTIEON_DEDUP { script: def args = task.ext.args ?: '' - def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" """ sentieon \\ diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index 627e5f24..7b4faaf2 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -15,7 +15,7 @@ process SENTIEON_LOCUSCOLLECTOR { task.ext.when == null || task.ext.when script: - def input = bam ? '-i ' + bam.sort().join(' -i ') : '' + def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ? "${task.ext.prefix}_score.txt.gz" : "${meta.id}_score.txt.gz" """ sentieon \\ diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e1a34c5c..eab21f1e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -27,9 +27,9 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -if (params.known_dbsnp) { ch_known_dbsnp = file(params.known_dbsnp) } else { ch_known_dbsnp = [] } -if (params.known_mills) { ch_known_mills = file(params.known_mills) } else { ch_known_mills = [] } -if (params.known_indels) { ch_known_indels = file(params.known_indels) } else { ch_known_indels = [] } +ch_known_dbsnp = params.known_dbsnp ? file(params.known_dbsnp) : [] +ch_known_mills = params.known_mills ? file(params.known_mills) : [] +ch_known_indels = params.known_indels ? file(params.known_indels) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From c5db2f38751e88ffe4e9aa9188abe43f7721194f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 30 Apr 2022 02:31:51 +0200 Subject: [PATCH 0472/1921] review suggestion add index --- conf/genomes.config | 6 ++-- main.nf | 3 +- modules/local/sentieon/bqsr.nf | 35 ++++++++++++------------ nextflow_schema.json | 7 +++++ subworkflows/local/align.nf | 23 ++++++++-------- subworkflows/local/align_sentieon.nf | 13 +++++---- subworkflows/local/prepare_references.nf | 26 +++++++++++++++--- workflows/raredisease.nf | 14 ++++++---- 8 files changed, 81 insertions(+), 46 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 6f3e9423..8c1f4857 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -16,7 +16,8 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" bwa = "" - known_dbsnp = "" + dbsnp = "" + dbsnp_tbi = "" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -30,7 +31,8 @@ params { bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" bwa = "" - known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" + dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" + dbsnp_tbi = "" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index bee83c8c..5e7f77df 100644 --- a/main.nf +++ b/main.nf @@ -21,7 +21,8 @@ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') -params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp') +params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'dbsnp') +params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, 'dbsnp_tbi') params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_indels') params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index 8cc350a3..c17be4a5 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -4,18 +4,19 @@ process SENTIEON_BQSR { label 'sentieon' input: - tuple val(meta), path(bam), path(bai), path(score), path(score_idx) + tuple val(meta), path(bam), path(bai) path fasta path fai path known_dbsnp + path known_dbsnp_tbi output: - tuple val(meta), path('*.recal.bam') , emit: bam - tuple val(meta), path('*.recal.bai') , emit: bai - tuple val(meta), path('*recal_data.table') , emit: recal_pre - tuple val(meta), path('*recal_data.table.post') , emit: recal_post - tuple val(meta), path('*recal_result.csv') , emit: recal_csv - path "versions.yml" , emit: versions + tuple val(meta), path('*_recal.bam') , emit: bam + tuple val(meta), path('*_recal.bam.bai') , emit: bai + tuple val(meta), path('*_recal_data.table') , emit: recal_pre + tuple val(meta), path('*_recal_data.table_post') , emit: recal_post + tuple val(meta), path('*_recal_result.csv') , emit: recal_csv + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -33,25 +34,25 @@ process SENTIEON_BQSR { $input \\ --algo QualCal \\ $dbsnp \\ - ${prefix}.recal_table.table + ${prefix}_recal_data.table sentieon driver \\ -t ${task.cpus} \\ -r $fasta \\ $args \\ $input \\ - -q ${prefix}.recal_data.table \\ + -q ${prefix}_recal_data.table \\ --algo QualCal \\ $dbsnp \\ - $prefix.recal_data.table.post \\ - --algo ReadWriter ${prefix}.recal.bam + ${prefix}_recal_data.table_post \\ + --algo ReadWriter ${prefix}_recal.bam sentieon driver \\ -t ${task.cpus} \\ --algo QualCal \\ --plot \\ - --before ${prefix}.recal.table \\ - --after ${prefix}.table.post \\ + --before ${prefix}_recal_data.table \\ + --after ${prefix}_recal_data.table_post \\ ${prefix}_recal_result.csv cat <<-END_VERSIONS > versions.yml @@ -63,10 +64,10 @@ process SENTIEON_BQSR { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.recal.bam - touch ${prefix}.recal.bai - touch ${prefix}.recal_data.table - touch ${prefix}.recal_data.table.post + touch ${prefix}_recal.bam + touch ${prefix}_recal.bam.bai + touch ${prefix}_recal_data.table + touch ${prefix}_recal_data.table_post touch ${prefix}_recal_result.csv cat <<-END_VERSIONS > versions.yml diff --git a/nextflow_schema.json b/nextflow_schema.json index 56a72db5..caaaf293 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -108,6 +108,13 @@ "description": "Path to known dbSNP file.", "hidden": true }, + "known_dbsnp_tbi": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Path to known dbSNP file index.", + "hidden": true + }, "known_indels": { "type": "string", "format": "path", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 3d95fb34..65c5277a 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -7,12 +7,13 @@ include { ALIGN_SENTIEON } from './align_sentieon' workflow ALIGN { take: - aligner // string: params.aligner - reads_input // channel: [ val(meta), reads_input ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - index // channel: [ /path/to/bwamem2/index/ ] - known_dbsnp // channel: [ /path/to/known_dbsnp/ ] + aligner // string: params.aligner + reads_input // channel: [ val(meta), reads_input ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] + index // channel: [ /path/to/bwamem2/index/ ] + known_dbsnp // channel: [ /path/to/known_dbsnp ] + known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] main: ch_versions = Channel.empty() @@ -23,7 +24,7 @@ workflow ALIGN { ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if( aligner == "sentieon" ) { - ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp ) + ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp, known_dbsnp_tbi ) ch_marked_bam = ALIGN_SENTIEON.out.marked_bam ch_marked_bai = ALIGN_SENTIEON.out.marked_bai ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) @@ -34,9 +35,9 @@ workflow ALIGN { ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) emit: - marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] - marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] - bam_bai = ch_bam_bai // channel: [ val(meta), [ marked_bam, marked_bai ] ] + marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] + marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] + bam_bai = ch_bam_bai // channel: [ val(meta), [ marked_bam, marked_bai ] ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/align_sentieon.nf b/subworkflows/local/align_sentieon.nf index f4e5a120..9949b5d5 100644 --- a/subworkflows/local/align_sentieon.nf +++ b/subworkflows/local/align_sentieon.nf @@ -10,11 +10,12 @@ include { SENTIEON_BQSR } from '../../modules/local/sentieon/bqsr' workflow ALIGN_SENTIEON { take: - reads_input // channel: [ val(meta), reads_input ] - fasta // path: genome.fasta - fai // path: genome.fai - index // channel: [ /path/to/bwamem2/index/ ] - known_dbsnp // path: params.known_dbsnp + reads_input // channel: [ val(meta), reads_input ] + fasta // path: genome.fasta + fai // path: genome.fai + index // channel: [ /path/to/bwamem2/index/ ] + known_dbsnp // path: params.known_dbsnp + known_dbsnp_tbi // path: params.known_dbsnp main: ch_versions = Channel.empty() @@ -46,7 +47,7 @@ workflow ALIGN_SENTIEON { SENTIEON_DEDUP.out.bam .join(SENTIEON_DEDUP.out.bai) .set { ch_dedup_bam_bai } - SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp ) + SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp, 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/prepare_references.nf b/subworkflows/local/prepare_references.nf index 0ddb220c..204e6c56 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -2,18 +2,21 @@ // Prepare reference files // -include { CHECK_BED } from './prepare_bed' -include { CHECK_VCF } from './prepare_vcf' -include { PREPARE_GENOME } from './prepare_genome' +include { CHECK_BED } from './prepare_bed' +include { CHECK_VCF } from './prepare_vcf' +include { PREPARE_GENOME } from './prepare_genome' +include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/modules/tabix/tabix/main' workflow PREPARE_REFERENCES { take: aligner // [mandatory] params.aligner bwamem2_index // [mandatory] bwamem2_index - gnomad fasta // [mandatory] genome.fasta fai // [mandatory] genome.fai + gnomad + known_dbsnp + known_dbsnp_tbi sentieonbwa_index target_bed variant_catalog // [optional] variant_catalog.json @@ -34,6 +37,19 @@ workflow PREPARE_REFERENCES { .set { ch_genome } ch_versions = ch_versions.mix(ch_genome.versions) + // Dbsnp vcf + ch_dbsnp_vcf = Channel.empty() + ch_dbsnp_tbi = Channel.empty() + if (!known_dbsnp_tbi && known_dbsnp) { + ch_dbsnp_vcf = file(known_dbsnp) + TABIX_DBSNP([[id:'dbsnp'], ch_dbsnp_vcf]) + ch_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect {it[1]} + ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) + } else if (known_dbsnp_tbi && known_dbsnp) { + ch_dbsnp_vcf = file(known_dbsnp) + ch_dbsnp_tbi = file(known_dbsnp_tbi) + } + // Gnomad vcf ch_gnomad_vcf = Channel.empty() ch_gnomad_idx = Channel.empty() @@ -70,6 +86,8 @@ workflow PREPARE_REFERENCES { sequence_dict = ch_genome.sequence_dict variant_catalog = ch_genome.variant_catalog vcfanno_resources = ch_genome.vcfanno_resources + known_dbsnp = ch_dbsnp_vcf + known_dbsnp_tbi = ch_dbsnp_tbi gnomad_vcf = ch_gnomad_vcf gnomad_idx = ch_gnomad_idx target_bed = ch_target_bed diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eab21f1e..6014b968 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -27,9 +27,10 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_known_dbsnp = params.known_dbsnp ? file(params.known_dbsnp) : [] -ch_known_mills = params.known_mills ? file(params.known_mills) : [] -ch_known_indels = params.known_indels ? file(params.known_indels) : [] +ch_known_dbsnp = params.known_dbsnp ? file(params.known_dbsnp) : [] +ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? file(params.known_dbsnp_tbi) : [] +ch_known_mills = params.known_mills ? file(params.known_mills) : [] +ch_known_indels = params.known_indels ? file(params.known_indels) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -109,9 +110,11 @@ workflow RAREDISEASE { PREPARE_REFERENCES ( params.aligner, params.bwamem2_index, - params.gnomad, params.fasta, params.fasta_fai, + params.gnomad, + params.known_dbsnp, + params.known_dbsnp_tbi, params.sentieonbwa_index, params.target_bed, params.variant_catalog, @@ -127,7 +130,8 @@ workflow RAREDISEASE { ch_references.genome_fasta, ch_references.genome_fai, ch_references.aligner_index, - ch_known_dbsnp, + ch_references.known_dbsnp, + ch_references.known_dbsnp_tbi ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) From cf862359fbf4ac5c18e336985d0fb3c7e015f5a5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 30 Apr 2022 02:52:14 +0200 Subject: [PATCH 0473/1921] update prepare references --- subworkflows/local/prepare_references.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 204e6c56..65e5e83c 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -41,13 +41,13 @@ workflow PREPARE_REFERENCES { ch_dbsnp_vcf = Channel.empty() ch_dbsnp_tbi = Channel.empty() if (!known_dbsnp_tbi && known_dbsnp) { - ch_dbsnp_vcf = file(known_dbsnp) - TABIX_DBSNP([[id:'dbsnp'], ch_dbsnp_vcf]) + TABIX_DBSNP([[id:'dbsnp'], file(known_dbsnp)]) + ch_dbsnp_vcf = Channel.fromPath(known_dbsnp) ch_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect {it[1]} ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) } else if (known_dbsnp_tbi && known_dbsnp) { - ch_dbsnp_vcf = file(known_dbsnp) - ch_dbsnp_tbi = file(known_dbsnp_tbi) + ch_dbsnp_vcf = Channel.fromPath(known_dbsnp) + ch_dbsnp_tbi = Channel.fromPath(known_dbsnp_tbi) } // Gnomad vcf From 955617d75b59961031405ccc998439083cbf8692 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 30 Apr 2022 02:56:00 +0200 Subject: [PATCH 0474/1921] dbsnp to knowndbsnp --- conf/genomes.config | 8 ++++---- main.nf | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 8c1f4857..df8e17de 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -16,8 +16,8 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" bwa = "" - dbsnp = "" - dbsnp_tbi = "" + known_dbsnp = "" + known_dbsnp_tbi = "" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -31,8 +31,8 @@ params { bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" bwa = "" - dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" - dbsnp_tbi = "" + known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" + known_dbsnp_tbi = "" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index 5e7f77df..832ef29a 100644 --- a/main.nf +++ b/main.nf @@ -21,8 +21,8 @@ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') -params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'dbsnp') -params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, 'dbsnp_tbi') +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.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') From e64ee2c2ac27cbb9a7ddef4d00a936187f4d0052 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 2 May 2022 11:49:30 +0200 Subject: [PATCH 0475/1921] review suggestions --- modules/local/sentieon/bqsr.nf | 5 ++++- modules/local/sentieon/datametrics.nf | 1 - modules/local/sentieon/dedup.nf | 8 ++++---- modules/local/sentieon/locuscollector.nf | 4 ++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index c17be4a5..f3f7c432 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -23,6 +23,8 @@ process SENTIEON_BQSR { 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 prefix = task.ext.prefix ?: "${meta.id}" @@ -39,7 +41,7 @@ process SENTIEON_BQSR { sentieon driver \\ -t ${task.cpus} \\ -r $fasta \\ - $args \\ + $args2 \\ $input \\ -q ${prefix}_recal_data.table \\ --algo QualCal \\ @@ -49,6 +51,7 @@ process SENTIEON_BQSR { sentieon driver \\ -t ${task.cpus} \\ + $args3 --algo QualCal \\ --plot \\ --before ${prefix}_recal_data.table \\ diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 1b8ee74c..af227579 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -23,7 +23,6 @@ process SENTIEON_DATAMETRICS { script: def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') - def ref = fasta ? "-r $fasta" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ sentieon \\ diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index c135bdbe..18c31a1d 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -30,7 +30,7 @@ process SENTIEON_DEDUP { --algo Dedup \\ --score_info $score \\ --metrics ${prefix}_dedup_metrics.txt \\ - ${prefix}.dedup.bam + ${prefix}_dedup.bam cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -39,10 +39,10 @@ process SENTIEON_DEDUP { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.dedup.bam - touch ${prefix}.dedup.bam.bai + touch ${prefix}_dedup.bam + touch ${prefix}_dedup.bam.bai touch ${prefix}_dedup_metrics.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index 7b4faaf2..c143b61a 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -34,8 +34,8 @@ process SENTIEON_LOCUSCOLLECTOR { stub: def prefix = task.ext.prefix ? "${task.ext.prefix}_score.gz" : "${meta.id}_score.gz" """ - touch ${prefix}.score.txt.gz - touch ${prefix}.score.txt.gz.tbi + touch ${prefix}_score.txt.gz + touch ${prefix}_score.txt.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": From d49d23f342dc00522a766cda866064d73edb4ec2 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Tue, 3 May 2022 10:25:03 +0200 Subject: [PATCH 0476/1921] feat updating modules for MT subworkflow --- modules.json | 8 ++++---- modules/nf-core/modules/gatk4/revertsam/main.nf | 11 +++++++++++ modules/nf-core/modules/gatk4/samtofastq/main.nf | 13 +++++++++++++ modules/nf-core/modules/samtools/view/main.nf | 12 ++++++++++++ 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index 57838160..477f963b 100644 --- a/modules.json +++ b/modules.json @@ -37,10 +37,10 @@ "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "gatk4/revertsam": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273" }, "gatk4/samtofastq": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" }, "glnexus": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" @@ -82,7 +82,7 @@ "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/view": { - "git_sha": "12afb6b0faf3cabf769c9a2a7dd477e3f066eac0" + "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" }, "stranger": { "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" @@ -116,4 +116,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/gatk4/revertsam/main.nf b/modules/nf-core/modules/gatk4/revertsam/main.nf index 4e8e9ddc..3084658d 100644 --- a/modules/nf-core/modules/gatk4/revertsam/main.nf +++ b/modules/nf-core/modules/gatk4/revertsam/main.nf @@ -39,4 +39,15 @@ process GATK4_REVERTSAM { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.reverted.bam + + 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/modules/gatk4/samtofastq/main.nf b/modules/nf-core/modules/gatk4/samtofastq/main.nf index 8553e419..d8d94d69 100644 --- a/modules/nf-core/modules/gatk4/samtofastq/main.nf +++ b/modules/nf-core/modules/gatk4/samtofastq/main.nf @@ -40,4 +40,17 @@ process GATK4_SAMTOFASTQ { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.fastq.gz + touch ${prefix}_1.fastq.gz + touch ${prefix}_2.fastq.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/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf index 11cfb74b..55194e88 100644 --- a/modules/nf-core/modules/samtools/view/main.nf +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -41,4 +41,16 @@ process SAMTOOLS_VIEW { 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 + """ } From 8e1aa70dacf7899842feeeb8409e73a3be48a00e Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Tue, 3 May 2022 10:29:44 +0200 Subject: [PATCH 0477/1921] fix added a blank line at the end of modules.json --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 477f963b..c38ff5e9 100644 --- a/modules.json +++ b/modules.json @@ -116,4 +116,4 @@ } } } -} \ No newline at end of file +} From 0f11df268ba951ab7cf4ddcc921b9d02104e41d7 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 4 May 2022 11:15:51 +0200 Subject: [PATCH 0478/1921] added dnascope modules --- modules/local/sentieon/dnamodelapply.nf | 47 +++++++++++++++++++ modules/local/sentieon/dnascope.nf | 60 +++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 modules/local/sentieon/dnamodelapply.nf create mode 100644 modules/local/sentieon/dnascope.nf diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf new file mode 100644 index 00000000..adaef748 --- /dev/null +++ b/modules/local/sentieon/dnamodelapply.nf @@ -0,0 +1,47 @@ +process SENTIEON_DNAMODELAPPLY { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(vcf), path(vcf_idx) + path fasta + path fai + path ml_model + + output: + tuple val(meta), path("*_dnascope_ml.vcf") , emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + sentieon driver \\ + -t $task.cpus \\ + -r $fasta \\ + --algo DNAModelApply \\ + --model $ml_model \\ + -v $vcf \\ + ${prefix}_dnascope_ml.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_dnascope_ml.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) + END_VERSIONS + """ +} diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf new file mode 100644 index 00000000..9343ed84 --- /dev/null +++ b/modules/local/sentieon/dnascope.nf @@ -0,0 +1,60 @@ +process SENTIEON_DNASCOPE { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path fai + path known_dbsnp + path known_dbsnp_tbi + path ml_model + val pcrfree + + output: + tuple val(meta), path("*_dnascope.vcf"), path("*_dnascope.vcf.idx") , emit: vcf + 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 args3 = task.ext.args3 ?: '' + def dbsnp = known_dbsnp ? "-d ${known_dbsnp}" : '' + def model = ml_model ? "--model ${ml_model}" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + sentieon driver \\ + -t $task.cpus \\ + -r $fasta \\ + $args \\ + -i $bam \\ + --algo DNAscope \\ + $dbsnp \\ + $args2 \\ + $args3 \\ + $model \\ + ${prefix}_dnascope.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_dnascope.vcf + touch ${prefix}_dnascope.vcf.idx + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) + END_VERSIONS + """ +} From fddf0664ef95e55018cf325d350f74e884dc8d21 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 4 May 2022 12:34:08 +0200 Subject: [PATCH 0479/1921] added dnascope options --- nextflow.config | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nextflow.config b/nextflow.config index 74ac8787..9af0347e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -31,6 +31,11 @@ params { // Variant calling variant_caller = 'deepvariant' + // Dnascope SNV calling + pcrfree = true + call_interval = null + variant_types = 'snp, indel' + // Annotation vep_cache_version = '105' From 98a2984479490ef1588c6ea21747b537d1b6d938 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 4 May 2022 13:28:06 +0200 Subject: [PATCH 0480/1921] added sentieon calling options --- conf/modules.config | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index f0853872..06db1bba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -264,6 +264,36 @@ process{ } +// +// Sentieon SNV calling options +// + +process { + withName: '.*CALL_SENTIEON:.*' { + ext.when = params.variant_caller.equals("sentieon") + } + + withName: '.*CALL_SNV:CALL_SENTIEON:SENTIEON_DNASCOPE' { + ext.args = { params.call_interval ? "--interval ${params.call_interval}" : '' } + ext.args2 = { params.variant_types ? "--var_type ${params.variant_types}" : '' } + ext.args3 = { params.pcrfree ? "--pcr_indel_model NONE" : '' } + publishDir = [ + path: { "${params.outdir}/sentieon_dnascope" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV:CALL_SENTIEON:SENTIEON_DNAMODELAPPLY' { + publishDir = [ + path: { "${params.outdir}/sentieon_dnamodelapply" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + +} + // // Bam QC options // From d2318bb4e4ab34e5fdec2f07ba0a9ad95bcbaf6d Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 4 May 2022 13:54:54 +0200 Subject: [PATCH 0481/1921] added pcrfree variable --- nextflow_schema.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index caaaf293..47d1be3f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -251,6 +251,12 @@ "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", "fa_icon": "fas fa-map-signs", "enum": ["deepvariant", "sentieon"] + }, + "pcrfree": { + "type": "boolean", + "default": true, + "description": "indicates whether the sample is PCR Free or not. Set to true for PCR Free samples.", + "fa_icon": "fas fa-map-signs" } } }, From ffbea5f1d61b5f52b72cb5e013b73de1af1cb1df Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 4 May 2022 14:05:13 +0200 Subject: [PATCH 0482/1921] fixed spaces --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 9af0347e..52c0049b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -34,7 +34,7 @@ params { // Dnascope SNV calling pcrfree = true call_interval = null - variant_types = 'snp, indel' + variant_type = 'snp, indel' // Annotation vep_cache_version = '105' From 28bd2ec8f6124c53752d03e91082a40269f1e1f6 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 4 May 2022 14:26:21 +0200 Subject: [PATCH 0483/1921] fixed spaces --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 52c0049b..23403c36 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,7 +32,7 @@ params { variant_caller = 'deepvariant' // Dnascope SNV calling - pcrfree = true + pcrfree = true call_interval = null variant_type = 'snp, indel' From df88f39e1e5e0ee8efbb2bf382a56c4ea9cbfc75 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 4 May 2022 17:21:03 +0200 Subject: [PATCH 0484/1921] use secret --- bin/sentieon_init.sh | 13 +++++++++++++ conf/genomes.config | 2 +- modules/local/sentieon/bqsr.nf | 9 ++++++++- modules/local/sentieon/bwamem.nf | 7 +++++++ modules/local/sentieon/bwamemindex.nf | 7 +++++++ modules/local/sentieon/datametrics.nf | 7 +++++++ modules/local/sentieon/dedup.nf | 7 +++++++ modules/local/sentieon/locuscollector.nf | 7 +++++++ 8 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 bin/sentieon_init.sh diff --git a/bin/sentieon_init.sh b/bin/sentieon_init.sh new file mode 100644 index 00000000..ea8f393a --- /dev/null +++ b/bin/sentieon_init.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# +# Sentieon initialization script +# This script takes as input the name of a environment +# variable holding the Sentieon license encoded as Base64 text +set -eu +LICENSE_ENCODED="${!1}" +if [ "${#LICENSE_ENCODED}" -lt "1500" ]; then # Sentieon License server + export SENTIEON_LICENSE=$(echo -e "$LICENSE_ENCODED" | base64 -d) +else # Localhost license file + export SENTIEON_LICENSE=$(mktemp) + echo -e "$LICENSE_ENCODED" | base64 -d > $SENTIEON_LICENSE +fi diff --git a/conf/genomes.config b/conf/genomes.config index df8e17de..967379b5 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -30,7 +30,7 @@ params { fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - bwa = "" + bwa = "${params.local_genomes}/bwa/" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index f3f7c432..dbc1c68e 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -3,6 +3,8 @@ process SENTIEON_BQSR { label 'process_high' label 'sentieon' + secret 'SENTIEON_LICENSE_BASE64' + input: tuple val(meta), path(bam), path(bai) path fasta @@ -29,6 +31,11 @@ process SENTIEON_BQSR { def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ + if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + echo "Initializing SENTIEON_LICENSE env variable" + source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + fi + sentieon driver \\ -t ${task.cpus} \\ -r $fasta \\ @@ -51,7 +58,7 @@ process SENTIEON_BQSR { sentieon driver \\ -t ${task.cpus} \\ - $args3 + $args3 \\ --algo QualCal \\ --plot \\ --before ${prefix}_recal_data.table \\ diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index 3bae8c78..ed029806 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -3,6 +3,8 @@ process SENTIEON_BWAMEM { label 'process_high' label 'sentieon' + secret 'SENTIEON_LICENSE_BASE64' + input: tuple val(meta), path(reads) path fasta @@ -24,6 +26,11 @@ process SENTIEON_BWAMEM { """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` + if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + echo "Initializing SENTIEON_LICENSE env variable" + source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + fi + sentieon bwa mem \\ -t $task.cpus \\ \$INDEX \\ diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 3a03fd32..62114fb3 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -3,6 +3,8 @@ process SENTIEON_BWAINDEX { label 'process_high' label 'sentieon' + secret 'SENTIEON_LICENSE_BASE64' + input: path fasta @@ -19,6 +21,11 @@ process SENTIEON_BWAINDEX { """ mkdir bwa + if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + echo "Initializing SENTIEON_LICENSE env variable" + source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + fi + sentieon bwa index \\ $args \\ -p $prefix \\ diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index af227579..39dd325b 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -3,6 +3,8 @@ process SENTIEON_DATAMETRICS { label 'process_high' label 'sentieon' + secret 'SENTIEON_LICENSE_BASE64' + input: tuple val(meta), path(bam), path(bai) path fasta @@ -25,6 +27,11 @@ process SENTIEON_DATAMETRICS { def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" """ + if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + echo "Initializing SENTIEON_LICENSE env variable" + source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + fi + sentieon \\ driver \\ -t $task.cpus \\ diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 18c31a1d..2a8a1ade 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -3,6 +3,8 @@ process SENTIEON_DEDUP { label 'process_high' label 'sentieon' + secret 'SENTIEON_LICENSE_BASE64' + input: tuple val(meta), path(bam), path(bai), path(score), path(score_idx) path fasta @@ -22,6 +24,11 @@ process SENTIEON_DEDUP { def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" """ + if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + echo "Initializing SENTIEON_LICENSE env variable" + source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + fi + sentieon \\ driver \\ -t $task.cpus \\ diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index c143b61a..64ce88b3 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -3,6 +3,8 @@ process SENTIEON_LOCUSCOLLECTOR { label 'process_high' label 'sentieon' + secret 'SENTIEON_LICENSE_BASE64' + input: tuple val(meta), path(bam), path(bai) @@ -18,6 +20,11 @@ process SENTIEON_LOCUSCOLLECTOR { def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ? "${task.ext.prefix}_score.txt.gz" : "${meta.id}_score.txt.gz" """ + if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + echo "Initializing SENTIEON_LICENSE env variable" + source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + fi + sentieon \\ driver \\ -t $task.cpus \\ From 34605312d287649e7afa3cca246a491a290371e4 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Thu, 5 May 2022 07:09:57 +0200 Subject: [PATCH 0485/1921] Update subworkflows/local/prepare_MT_alignment.nf Co-authored-by: Anders Jemt --- subworkflows/local/prepare_MT_alignment.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 1e8ff923..16654ffa 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -11,7 +11,6 @@ workflow PREPARE_MT_ALIGNMENT { bam_cram // id: and file: bam index: bam.bai main: - ch_versions = Channel.empty() // Outputs bam containing only MT From 578118f9fd14ecf2f0c2d8b61671a6796e582eca Mon Sep 17 00:00:00 2001 From: Lucpen Date: Thu, 5 May 2022 07:57:38 +0200 Subject: [PATCH 0486/1921] feat changed config file to take GRCh37 too --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 16cb9739..a6b54758 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -414,7 +414,7 @@ process { process { withName: '.*PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { - ext.args2 = 'chrM' + ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } } withName: '.*PREPARE_MT_ALIGNMENT:GATK4_REVERTSAM_MT' { From a22ceab5ab76cabe25cfc45ad4db3d430291180c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 5 May 2022 14:28:17 +0200 Subject: [PATCH 0487/1921] bash conditional --- modules/local/sentieon/bqsr.nf | 4 ++-- modules/local/sentieon/bwamem.nf | 4 ++-- modules/local/sentieon/bwamemindex.nf | 4 ++-- modules/local/sentieon/datametrics.nf | 4 ++-- modules/local/sentieon/dedup.nf | 4 ++-- modules/local/sentieon/locuscollector.nf | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index dbc1c68e..75d7dbac 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -31,9 +31,9 @@ process SENTIEON_BQSR { def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ - if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + source sentieon_init.sh SENTIEON_LICENSE_BASE64 fi sentieon driver \\ diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index ed029806..9ce6d113 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -26,9 +26,9 @@ process SENTIEON_BWAMEM { """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` - if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + source sentieon_init.sh SENTIEON_LICENSE_BASE64 fi sentieon bwa mem \\ diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 62114fb3..59e71fb7 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -21,9 +21,9 @@ process SENTIEON_BWAINDEX { """ mkdir bwa - if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + source sentieon_init.sh SENTIEON_LICENSE_BASE64 fi sentieon bwa index \\ diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 39dd325b..012054b7 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -27,9 +27,9 @@ process SENTIEON_DATAMETRICS { def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" """ - if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + source sentieon_init.sh SENTIEON_LICENSE_BASE64 fi sentieon \\ diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 2a8a1ade..074df701 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -24,9 +24,9 @@ process SENTIEON_DEDUP { def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" """ - if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + source sentieon_init.sh SENTIEON_LICENSE_BASE64 fi sentieon \\ diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index 64ce88b3..c5448117 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -20,9 +20,9 @@ process SENTIEON_LOCUSCOLLECTOR { def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ? "${task.ext.prefix}_score.txt.gz" : "${meta.id}_score.txt.gz" """ - if [ ! -n \${SENTIEON_LICENSE_BASE64+x} ]; then + if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh \${SENTIEON_LICENSE_BASE64} + source sentieon_init.sh SENTIEON_LICENSE_BASE64 fi sentieon \\ From b4dc4078c3d563ad043d78e9bc62679c37ca54d1 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Thu, 5 May 2022 16:01:19 +0200 Subject: [PATCH 0488/1921] feat updated paths in test.config --- conf/test.config | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/conf/test.config b/conf/test.config index e4745675..a037cda4 100644 --- a/conf/test.config +++ b/conf/test.config @@ -21,19 +21,17 @@ params { // Input data // TODO nf-core: Give any required params for the test so that command line flags are not needed - //input = 'https://raw.githubusercontent.com/nf-core/raredisease/dev/assets/samplesheet.csv' input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' // Genome references - fasta = 'https://github.com/nf-core/test-datasets/raw/sarek/reference/chr20_hg38/Homo_sapiens_assembly38_chr20.fasta' - //fasta = 'Path_to_Homo_sapiens_assembly38_chr20_chrM.fasta' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' // Variant catalog file - variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/repeat_expansions.json' + variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' // Variant annotation - vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/vcfanno_grch38_small_test.tar.gz' - vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/grch38_vcfanno_config_-v0.2-_chr20.toml' + vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_grch38_small_test.tar.gz' + vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' - target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/target_chr20.bed' + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' } From 44fa13b7fd871ce141b435ea100655a836db27d1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 5 May 2022 17:38:52 +0200 Subject: [PATCH 0489/1921] v1.2.1 --- modules.json | 11 ++-- .../nf-core/modules/cnvpytor/callcnvs/main.nf | 22 +++---- .../modules/cnvpytor/callcnvs/meta.yml | 11 ++-- .../modules/cnvpytor/histogram/main.nf | 16 ++--- .../modules/cnvpytor/histogram/meta.yml | 4 ++ .../modules/cnvpytor/importreaddepth/main.nf | 10 ++-- .../modules/cnvpytor/importreaddepth/meta.yml | 1 + .../modules/cnvpytor/partition/main.nf | 15 ++--- .../modules/cnvpytor/partition/meta.yml | 4 ++ modules/nf-core/modules/cnvpytor/view/main.nf | 58 +++++++++++++++++++ .../nf-core/modules/cnvpytor/view/meta.yml | 56 ++++++++++++++++++ 11 files changed, 170 insertions(+), 38 deletions(-) create mode 100644 modules/nf-core/modules/cnvpytor/view/main.nf create mode 100644 modules/nf-core/modules/cnvpytor/view/meta.yml diff --git a/modules.json b/modules.json index 35c978e4..7c5711c7 100644 --- a/modules.json +++ b/modules.json @@ -16,16 +16,19 @@ "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" }, "cnvpytor/callcnvs": { - "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" + "git_sha": "26311aba2ace0eda4201651abe9276dbd8c2aef0" }, "cnvpytor/histogram": { - "git_sha": "cb54d1ebd77de5b482cae89ed9e51fa6ef97d3ee" + "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" }, "cnvpytor/importreaddepth": { - "git_sha": "67c1bc9568cfc40cf7038c7be13b976fe76d76a1" + "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" }, "cnvpytor/partition": { - "git_sha": "cb54d1ebd77de5b482cae89ed9e51fa6ef97d3ee" + "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" + }, + "cnvpytor/view": { + "git_sha": "ea1f5daf449190dd3b8550c1307f14aa3371413d" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf index 17675cde..092f6def 100644 --- a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf +++ b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf @@ -2,43 +2,43 @@ process CNVPYTOR_CALLCNVS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': - 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': + 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" input: tuple val(meta), path(pytor) + val bin_sizes output: - tuple val(meta), path("*.tsv"), emit: cnvs - path "versions.yml" , emit: versions + tuple val(meta), path("${pytor.baseName}.pytor") , emit: pytor + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '1000' + def bins = bin_sizes ?: '1000' def prefix = task.ext.prefix ?: "${meta.id}" """ cnvpytor \\ -root $pytor \\ - -call $args > ${prefix}.tsv + -call $bin_sizes cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.tsv + touch ${pytor.baseName}.pytor cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml b/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml index edfc462a..6ba46b6f 100644 --- a/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml +++ b/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml @@ -17,8 +17,11 @@ input: e.g. [ id:'test'] - pytor: type: file - description: cnvpytor root file + description: pytor file containing partitions of read depth histograms using mean-shift method pattern: "*.{pytor}" + - bin_sizes: + type: string + description: list of binsizes separated by space e.g. "1000 10000" and "1000" output: - meta: @@ -26,10 +29,10 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test' ] - - cnvs: + - pytor: type: file - description: file containing identified copy numer variations - pattern: "*.{tsv}" + description: pytor files containing cnv calls + pattern: "*.{pytor}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/modules/cnvpytor/histogram/main.nf index 9e59c6b8..fd2ebe14 100644 --- a/modules/nf-core/modules/cnvpytor/histogram/main.nf +++ b/modules/nf-core/modules/cnvpytor/histogram/main.nf @@ -2,13 +2,15 @@ process CNVPYTOR_HISTOGRAM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': - 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': + 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" input: tuple val(meta), path(pytor) + val bin_sizes + output: tuple val(meta), path("${pytor.baseName}.pytor") , emit: pytor @@ -18,15 +20,15 @@ process CNVPYTOR_HISTOGRAM { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '1000' + def bins = bin_sizes ?: '1000' """ cnvpytor \\ -root $pytor \\ - -his $args + -his $bins cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ @@ -36,7 +38,7 @@ process CNVPYTOR_HISTOGRAM { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/histogram/meta.yml b/modules/nf-core/modules/cnvpytor/histogram/meta.yml index fcad2221..ecd48b9a 100644 --- a/modules/nf-core/modules/cnvpytor/histogram/meta.yml +++ b/modules/nf-core/modules/cnvpytor/histogram/meta.yml @@ -22,6 +22,9 @@ input: type: file description: pytor file containing read depth data pattern: "*.{pytor}" + - bin_sizes: + type: string + description: list of binsizes separated by space e.g. "1000 10000" and "1000" output: - meta: @@ -40,3 +43,4 @@ output: authors: - "@sima-r" + - "@ramprasadn" diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf index 162da719..6f9abae9 100644 --- a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf @@ -2,10 +2,10 @@ process CNVPYTOR_IMPORTREADDEPTH { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': - 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': + 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" input: tuple val(meta), path(input_file), path(index) @@ -32,7 +32,7 @@ process CNVPYTOR_IMPORTREADDEPTH { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ @@ -43,7 +43,7 @@ process CNVPYTOR_IMPORTREADDEPTH { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml b/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml index 1cf3c0d0..8b58887e 100644 --- a/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml @@ -52,3 +52,4 @@ output: authors: - "@sima-r" + - "@ramprasadn" diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/modules/cnvpytor/partition/main.nf index 0311bdfc..6d7a9c6b 100644 --- a/modules/nf-core/modules/cnvpytor/partition/main.nf +++ b/modules/nf-core/modules/cnvpytor/partition/main.nf @@ -2,13 +2,14 @@ process CNVPYTOR_PARTITION { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.0" : null) + conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.0--py39h6a678da_2': - 'quay.io/biocontainers/cnvpytor:1.0--py39h6a678da_2' }" + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': + 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" input: tuple val(meta), path(pytor) + val bin_sizes output: tuple val(meta), path("${pytor.baseName}.pytor"), emit: pytor @@ -18,15 +19,15 @@ process CNVPYTOR_PARTITION { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def bins = bin_sizes ?: '1000' """ cnvpytor \\ -root $pytor \\ - -partition $args + -partition $bins cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ @@ -36,7 +37,7 @@ process CNVPYTOR_PARTITION { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/^.*pyCNVnator //; s/Using.*\$//' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/partition/meta.yml b/modules/nf-core/modules/cnvpytor/partition/meta.yml index a72cea4c..17b5e199 100644 --- a/modules/nf-core/modules/cnvpytor/partition/meta.yml +++ b/modules/nf-core/modules/cnvpytor/partition/meta.yml @@ -22,6 +22,9 @@ input: type: file description: pytor file containing read depth data pattern: "*.{pytor}" + - bin_sizes: + type: string + description: list of binsizes separated by space e.g. "1000 10000" and "1000" output: - meta: @@ -40,3 +43,4 @@ output: authors: - "@sima-r" + - "@ramprasadn" diff --git a/modules/nf-core/modules/cnvpytor/view/main.nf b/modules/nf-core/modules/cnvpytor/view/main.nf new file mode 100644 index 00000000..ad2249b8 --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/view/main.nf @@ -0,0 +1,58 @@ +process CNVPYTOR_VIEW { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': + 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" + + input: + tuple val(meta), path(pytor) + val bin_sizes + val output_format + + output: + tuple val(meta), path("*.vcf"), emit: vcf , optional: true + tuple val(meta), path("*.tsv"), emit: tsv , optional: true + tuple val(meta), path("*.xls"), emit: xls , optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def output_suffix = output_format ?: 'vcf' + def bins = bin_sizes ?: '1000' + """ + + python3 < versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + END_VERSIONS + """ + + stub: + def output_suffix = output_format ?: 'vcf' + """ + touch ${pytor.baseName}.${output_suffix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/cnvpytor/view/meta.yml b/modules/nf-core/modules/cnvpytor/view/meta.yml new file mode 100644 index 00000000..1392e90e --- /dev/null +++ b/modules/nf-core/modules/cnvpytor/view/meta.yml @@ -0,0 +1,56 @@ +name: cnvpytor_view +description: view function to generate vcfs +keywords: + - cnv calling +tools: + - cnvpytor: + description: calling CNVs using read depth + homepage: https://github.com/abyzovlab/CNVpytor + documentation: https://github.com/abyzovlab/CNVpytor + tool_dev_url: https://github.com/abyzovlab/CNVpytor + doi: "10.1101/2021.01.27.428472v1" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - pytor: + type: file + description: pytor file containing read depth data + pattern: "*.{pytor}" + - bin_sizes: + type: string + description: list of binsizes separated by space e.g. "1000 10000" and "1000" + - output_format: + type: string + description: output format of the cnv calls. Valid entries are "tsv", "vcf", and "xls" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - tsv: + type: file + description: tsv file containing cnv calls + pattern: "*.{tsv}" + - vcf: + type: file + description: vcf file containing cnv calls + pattern: "*.{vcf}" + - xls: + type: file + description: xls file containing cnv calls + pattern: "*.{xls}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@sima-r" + - "@ramprasadn" From f92a9339b0f3ebe4521f99dd3d6e0c7d4dd87963 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 5 May 2022 18:22:00 +0200 Subject: [PATCH 0490/1921] update subworkflow --- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ subworkflows/nf-core/call_cnv_cnvpytor.nf | 16 ++++++++++------ subworkflows/nf-core/call_structural_variants.nf | 15 ++++++++------- workflows/raredisease.nf | 3 ++- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/nextflow.config b/nextflow.config index 44ce8b41..8331319d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,6 +33,7 @@ params { // CNVpytor cnvpytor_chr = null + cnvpytor_binsizes = 10000 // Annotation vep_cache_version = '105' diff --git a/nextflow_schema.json b/nextflow_schema.json index 839c6096..3e229ac0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -265,6 +265,12 @@ "default": null, "description": "Chromosome names must be specified the same way as they are described in the sam/bam/cram header, e.g., chrX or X. One can specify multiple chromosomes separated by space.", "fa_icon": "fas fa-map-signs" + }, + "cnvpytor_binsizes": { + "type": "string", + "default": "10000", + "description": "List of binsizes separated by space e.g. '1000 10000' and '1000'", + "fa_icon": "fas fa-map-signs" } } }, diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/nf-core/call_cnv_cnvpytor.nf index 2ae9e69a..58eeb2a9 100644 --- a/subworkflows/nf-core/call_cnv_cnvpytor.nf +++ b/subworkflows/nf-core/call_cnv_cnvpytor.nf @@ -6,26 +6,30 @@ include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../modules/nf-co include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/modules/cnvpytor/histogram/main' include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/modules/cnvpytor/partition/main' include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/modules/cnvpytor/callcnvs/main' +include { CNVPYTOR_VIEW as VIEW } from '../../modules/nf-core/modules/cnvpytor/view/main' workflow CALL_CNV_CNVPYTOR { take: bam // channel: [ val(meta), path(bam)] bai // channel: [ val(meta), path(bai) ] case_info // channel: [ case_id ] + binsizes // channel: [ val(binsize) ] + fasta // channel: [ path(fasta) ] + fai // channel: [ path(fai) ] main: ch_versions = Channel.empty() - GENERATE_PYTOR(bam.join(bai, by: [0]),[],[]) - HISTOGRAMS(GENERATE_PYTOR.out.pytor) - PARTITIONS(HISTOGRAMS.out.pytor) - CALL_CNVS(PARTITIONS.out.pytor) + GENERATE_PYTOR(bam.join(bai, by: [0]), fasta, fai) + HISTOGRAMS(GENERATE_PYTOR.out.pytor, binsizes) + PARTITIONS(HISTOGRAMS.out.pytor, binsizes) + CALL_CNVS(PARTITIONS.out.pytor, binsizes) + VIEW(CALL_CNVS.out.pytor, binsizes, "vcf") ch_versions = ch_versions.mix(CALL_CNVS.out.versions) - //TO DO : tsv2vcf emit: - candidate_cnvs_tsv = CALL_CNVS.out.cnvs // channel: [ val(meta), path(*.tsv) ] + candidate_cnvs_tsv = VIEW.out.vcf // channel: [ val(meta), path(*.tsv) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 8d30d96f..da072a86 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -10,12 +10,13 @@ include { CALL_CNV_CNVPYTOR } from './call_cnv_cnvpytor' workflow CALL_STRUCTURAL_VARIANTS { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] - fasta // channel: [ path(genome.fasta) ] - fai // channel: [ path(genome.fai) ] - case_info // channel: [ val(case_info) ] - target_bed // channel: [ path(target.bed) ] + bam // channel: [ val(meta), path(bam) ] + bai // channel: [ val(meta), path(bai) ] + fasta // channel: [ path(genome.fasta) ] + fai // channel: [ path(genome.fai) ] + case_info // channel: [ val(case_info) ] + target_bed // channel: [ path(target.bed) ] + cnvpytor_bins // channel: [ val("binsizes") ] main: ch_versions = Channel.empty() @@ -35,7 +36,7 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) //cnvpytor - CALL_CNV_CNVPYTOR ( bam, bai, case_info ) + CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta, fai) .candidate_cnvs_tsv .collect{it[1]} .set {cnvpytor_tsv } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6014b968..8adc3239 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -172,7 +172,8 @@ workflow RAREDISEASE { ch_references.genome_fasta, ch_references.genome_fai, CHECK_INPUT.out.case_info, - ch_references.target_bed + ch_references.target_bed, + params.cnvpytor_binsizes ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From e64b5fddbb22bb8247ba546015aae9d96f1c919a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 5 May 2022 20:06:01 +0200 Subject: [PATCH 0491/1921] update channel names from tsv to vcf --- nextflow.config | 2 +- subworkflows/nf-core/call_cnv_cnvpytor.nf | 2 +- subworkflows/nf-core/call_structural_variants.nf | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nextflow.config b/nextflow.config index 8331319d..21e86445 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,7 +33,7 @@ params { // CNVpytor cnvpytor_chr = null - cnvpytor_binsizes = 10000 + cnvpytor_binsizes = '10000' // Annotation vep_cache_version = '105' diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/nf-core/call_cnv_cnvpytor.nf index 58eeb2a9..21fb4dff 100644 --- a/subworkflows/nf-core/call_cnv_cnvpytor.nf +++ b/subworkflows/nf-core/call_cnv_cnvpytor.nf @@ -29,7 +29,7 @@ workflow CALL_CNV_CNVPYTOR { ch_versions = ch_versions.mix(CALL_CNVS.out.versions) emit: - candidate_cnvs_tsv = VIEW.out.vcf // channel: [ val(meta), path(*.tsv) ] + candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(*.tsv) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index da072a86..4e85163d 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -37,22 +37,22 @@ workflow CALL_STRUCTURAL_VARIANTS { //cnvpytor CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta, fai) - .candidate_cnvs_tsv + .candidate_cnvs_vcf .collect{it[1]} - .set {cnvpytor_tsv } + .set {cnvpytor_vcf } ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) //merge tiddit_vcf .combine(manta_vcf) - .combine(manta_vcf) + .combine(cnvpytor_vcf) .toList() .set { vcf_list } case_info.combine(vcf_list) .set { merge_input_vcfs } - SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta"] ) + SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta","cnvpytor"] ) emit: From 4d326c9b8c60b194143d67bab8acacca5a14d989 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 5 May 2022 20:34:43 +0200 Subject: [PATCH 0492/1921] update prefix --- conf/modules.config | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index a0017cc8..027b80c2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -388,6 +388,7 @@ process { process { withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA' { + ext.prefix = { "${meta.id}_manta" } publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, @@ -396,43 +397,52 @@ process { } withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV' { - ext.args = '-p 6' + ext.args = '-p 6' publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, ] } + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:SVDB_MERGE_TIDDIT' { + ext.args = '--notag --pass_only' + ext.prefix = { "${meta.id}_tiddit" } + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:GENERATE_PYTOR" { - ext.args = {params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } + ext.args = { params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } + ext.prefix = { "${meta.id}_cnvpytor" } } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:HISTOGRAMS" { - ext.args = '10000 100000' + publishDir = [ + enabled: false + ] } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:PARTITIONS" { - ext.args = '10000 100000' + publishDir = [ + enabled: false + ] } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:CALL_CNVS" { - ext.args = '10000' publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, + enabled: false ] } - withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:SVDB_MERGE_TIDDIT' { - ext.args = '--notag --pass_only' - ext.prefix = 'tiddit' + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:VIEW" { publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } - withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { ext.args = '--pass_only' publishDir = [ From d97eaee36814936f3d21d8dfe4e9aa68e155714e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 6 May 2022 13:02:45 +0200 Subject: [PATCH 0493/1921] update svdb --- modules.json | 4 ++-- modules/nf-core/modules/svdb/merge/main.nf | 6 +++--- modules/nf-core/modules/svdb/query/main.nf | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index b8363713..1a88854d 100644 --- a/modules.json +++ b/modules.json @@ -91,10 +91,10 @@ "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" }, "svdb/merge": { - "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" }, "svdb/query": { - "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" }, "tabix/bgziptabix": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 4a39940c..0d56fea2 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -2,10 +2,10 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.0" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.0--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.0--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcfs) diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf index c669b5a5..dbab5259 100644 --- a/modules/nf-core/modules/svdb/query/main.nf +++ b/modules/nf-core/modules/svdb/query/main.nf @@ -2,10 +2,10 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.0" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.0--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.0--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcf) From 7cc756d9738dbe3578539e0bb0209cf77b27ca16 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 6 May 2022 13:08:42 +0200 Subject: [PATCH 0494/1921] update cnvpytor --- modules.json | 8 ++++---- .../nf-core/modules/cnvpytor/callcnvs/main.nf | 1 - modules/nf-core/modules/cnvpytor/view/main.nf | 16 +++++++++------- modules/nf-core/modules/cnvpytor/view/meta.yml | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/modules.json b/modules.json index 7c5711c7..4a914080 100644 --- a/modules.json +++ b/modules.json @@ -16,7 +16,7 @@ "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" }, "cnvpytor/callcnvs": { - "git_sha": "26311aba2ace0eda4201651abe9276dbd8c2aef0" + "git_sha": "1ccea5ff4d3dffbf9a8e53032481cc9246d4e23d" }, "cnvpytor/histogram": { "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" @@ -28,7 +28,7 @@ "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" }, "cnvpytor/view": { - "git_sha": "ea1f5daf449190dd3b8550c1307f14aa3371413d" + "git_sha": "af73544010cc9563ec7d7160aeb825ae28ec217f" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" @@ -97,10 +97,10 @@ "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" }, "svdb/merge": { - "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" }, "svdb/query": { - "git_sha": "a973b68200da801be1c2e27b8fd72d7256f5db6b" + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" }, "tabix/bgziptabix": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf index 092f6def..69c9d40e 100644 --- a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf +++ b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf @@ -20,7 +20,6 @@ process CNVPYTOR_CALLCNVS { script: def bins = bin_sizes ?: '1000' - def prefix = task.ext.prefix ?: "${meta.id}" """ cnvpytor \\ -root $pytor \\ diff --git a/modules/nf-core/modules/cnvpytor/view/main.nf b/modules/nf-core/modules/cnvpytor/view/main.nf index ad2249b8..1bb61a38 100644 --- a/modules/nf-core/modules/cnvpytor/view/main.nf +++ b/modules/nf-core/modules/cnvpytor/view/main.nf @@ -8,7 +8,7 @@ process CNVPYTOR_VIEW { 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" input: - tuple val(meta), path(pytor) + tuple val(meta), path(pytor_files) val bin_sizes val output_format @@ -23,17 +23,18 @@ process CNVPYTOR_VIEW { script: def output_suffix = output_format ?: 'vcf' - def bins = bin_sizes ?: '1000' + def bins = bin_sizes ?: '1000' + def input = pytor_files.join(" ") + def prefix = task.ext.prefix ?: "${meta.id}" """ python3 < versions.yml "${task.process}": diff --git a/modules/nf-core/modules/cnvpytor/view/meta.yml b/modules/nf-core/modules/cnvpytor/view/meta.yml index 1392e90e..e4e68fad 100644 --- a/modules/nf-core/modules/cnvpytor/view/meta.yml +++ b/modules/nf-core/modules/cnvpytor/view/meta.yml @@ -17,9 +17,9 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test' ] - - pytor: + - pytor_files: type: file - description: pytor file containing read depth data + description: pytor file containing cnv calls. To merge calls from multiple samples use a list of files. pattern: "*.{pytor}" - bin_sizes: type: string From 2e0b6f4f233fdd238b51b8a271341314b6c5d4e8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 6 May 2022 13:10:39 +0200 Subject: [PATCH 0495/1921] update subworkflow --- conf/modules.config | 2 +- subworkflows/nf-core/call_cnv_cnvpytor.nf | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 027b80c2..aeaf1217 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -416,7 +416,6 @@ process { withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:GENERATE_PYTOR" { ext.args = { params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } - ext.prefix = { "${meta.id}_cnvpytor" } } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:HISTOGRAMS" { @@ -438,6 +437,7 @@ process { } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:VIEW" { + ext.prefix = { "${meta.id}_cnvpytor" } publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/nf-core/call_cnv_cnvpytor.nf index 21fb4dff..6c1705c2 100644 --- a/subworkflows/nf-core/call_cnv_cnvpytor.nf +++ b/subworkflows/nf-core/call_cnv_cnvpytor.nf @@ -22,11 +22,29 @@ workflow CALL_CNV_CNVPYTOR { ch_versions = Channel.empty() GENERATE_PYTOR(bam.join(bai, by: [0]), fasta, fai) + ch_versions = ch_versions.mix(GENERATE_PYTOR.out.versions.first()) + HISTOGRAMS(GENERATE_PYTOR.out.pytor, binsizes) + ch_versions = ch_versions.mix(HISTOGRAMS.out.versions.first()) + PARTITIONS(HISTOGRAMS.out.pytor, binsizes) + ch_versions = ch_versions.mix(PARTITIONS.out.versions.first()) + CALL_CNVS(PARTITIONS.out.pytor, binsizes) - VIEW(CALL_CNVS.out.pytor, binsizes, "vcf") - ch_versions = ch_versions.mix(CALL_CNVS.out.versions) + ch_versions = ch_versions.mix(CALL_CNVS.out.versions.first()) + + CALL_CNVS.out + .pytor + .collect{it[1]} + .toList() + .set { file_list } + + case_info + .combine(file_list) + .set { ch_pytor } + + VIEW(ch_pytor, binsizes, "vcf") + ch_versions = ch_versions.mix(VIEW.out.versions.first()) emit: candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(*.tsv) ] From 7dddd1b40d90a4a7ecb56aa678638fb7de0b70e7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 6 May 2022 13:28:30 +0200 Subject: [PATCH 0496/1921] fix lint error --- modules/nf-core/modules/svdb/merge/main.nf | 6 +++--- modules/nf-core/modules/svdb/query/main.nf | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 4a39940c..0d56fea2 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -2,10 +2,10 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.0" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.0--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.0--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcfs) diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/modules/svdb/query/main.nf index c669b5a5..dbab5259 100644 --- a/modules/nf-core/modules/svdb/query/main.nf +++ b/modules/nf-core/modules/svdb/query/main.nf @@ -2,10 +2,10 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.0" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.0--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.0--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcf) From a792aad248d689930c56fcac87e7f5477dd5ceef Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 6 May 2022 13:38:26 +0200 Subject: [PATCH 0497/1921] change default bin size --- nextflow.config | 2 +- nextflow_schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index 21e86445..2e2194f7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,7 +33,7 @@ params { // CNVpytor cnvpytor_chr = null - cnvpytor_binsizes = '10000' + cnvpytor_binsizes = '1000' // Annotation vep_cache_version = '105' diff --git a/nextflow_schema.json b/nextflow_schema.json index 3e229ac0..186aa161 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -268,7 +268,7 @@ }, "cnvpytor_binsizes": { "type": "string", - "default": "10000", + "default": "1000", "description": "List of binsizes separated by space e.g. '1000 10000' and '1000'", "fa_icon": "fas fa-map-signs" } From 45af2da0a65eb3234e775c9e6963dc7a70a74e67 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 9 May 2022 09:34:25 +0200 Subject: [PATCH 0498/1921] Adds switch for gens --- nextflow.config | 1 + workflows/raredisease.nf | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/nextflow.config b/nextflow.config index b51aa773..a32aed61 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,6 +23,7 @@ params { // Main options analysis_type = 'wgs' annotate_sv_switch = false + gens_switch = false // Alignment aligner = 'bwamem2' diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f9ee2912..0369cfc7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -165,18 +165,20 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) // STEP 2.1: GENS - GENS ( - ch_marked_bam.join(ch_marked_bai, by: [0]), - CALL_SNV_DEEPVARIANT.out.vcf, - ch_references.genome_fasta, - ch_references.genome_fai, - file(params.gens_interval_list), - file(params.gens_pon), - file(params.gens_gnomad_pos), - CHECK_INPUT.out.case_info, - ch_references.sequence_dict - ) - ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) + if (params.gens_switch) { + GENS ( + ch_marked_bam.join(ch_marked_bai, by: [0]), + CALL_SNV_DEEPVARIANT.out.vcf, + ch_references.genome_fasta, + ch_references.genome_fai, + file(params.gens_interval_list), + file(params.gens_pon), + file(params.gens_gnomad_pos), + CHECK_INPUT.out.case_info, + ch_references.sequence_dict + ) + ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) + } ch_sv_annotate = Channel.empty() if (params.annotate_sv_switch) { From f6e306f45fe232ef04fd5f640630ef1da53afefc Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 9 May 2022 09:53:19 +0200 Subject: [PATCH 0499/1921] Removes collectreadcounts warning if disabled --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index cfcc6d9d..b5568e7e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -303,7 +303,7 @@ process { ] } - withName: ".*GENS:COLLECTREADCOUNTS" { + withName: GATK4_COLLECTREADCOUNTS { ext.args = '--interval-merging-rule OVERLAPPING_ONLY' } From 9fcfc6c9c1ac0452e16e4a1a0483efc29f1547f2 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 9 May 2022 09:54:59 +0200 Subject: [PATCH 0500/1921] Tests using actual id for collectreadcounts --- modules/local/gatk4/collectreadcounts/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index cca747fc..598a8676 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -1,5 +1,5 @@ process GATK4_COLLECTREADCOUNTS { - tag "wutface" + tag "$meta.id" label 'process_medium' conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) From 82ce56de86694bf28ec481f51ce1555e7325788c Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Mon, 9 May 2022 09:57:45 +0200 Subject: [PATCH 0501/1921] Updates gens to use ch_mapped --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0369cfc7..ddfd81a4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -167,7 +167,7 @@ workflow RAREDISEASE { // STEP 2.1: GENS if (params.gens_switch) { GENS ( - ch_marked_bam.join(ch_marked_bai, by: [0]), + ch_mapped.bam_bai, CALL_SNV_DEEPVARIANT.out.vcf, ch_references.genome_fasta, ch_references.genome_fai, From 4ec7e49d2ce4535f0ea305e52df5bdf3dc328a48 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 10 May 2022 11:32:18 +0200 Subject: [PATCH 0502/1921] Removes vestigial FastQC options --- conf/modules.config | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 5a034f98..9c51dd6f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -450,7 +450,7 @@ process { mode: params.publish_dir_mode, ] } - + withName: GATK4_COLLECTREADCOUNTS { ext.args = '--interval-merging-rule OVERLAPPING_ONLY' } @@ -461,10 +461,6 @@ process { mode: 'copy' ] } - - // nf-core modules - withName: FASTQC { - ext.args = '--quiet' } // From 1520727e4f83c9e8cb1b153d5b84adab80636ec1 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 11 May 2022 11:18:43 +0200 Subject: [PATCH 0503/1921] removed the pcrfree variable from input section --- modules/local/sentieon/dnascope.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index 9343ed84..27d5b905 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -10,7 +10,7 @@ process SENTIEON_DNASCOPE { path known_dbsnp path known_dbsnp_tbi path ml_model - val pcrfree + output: tuple val(meta), path("*_dnascope.vcf"), path("*_dnascope.vcf.idx") , emit: vcf From 4a59fb27a4c12aec7e3f61ce4ef06bfdae0279cd Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Thu, 12 May 2022 12:13:17 +0200 Subject: [PATCH 0504/1921] Applied prettier --- modules/local/gatk4/collectreadcounts/meta.yml | 4 ++-- modules/local/gatk4/denoisereadcounts/meta.yml | 4 ++-- modules/local/gens/meta.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/gatk4/collectreadcounts/meta.yml b/modules/local/gatk4/collectreadcounts/meta.yml index 6aa4a3dd..6da91b16 100644 --- a/modules/local/gatk4/collectreadcounts/meta.yml +++ b/modules/local/gatk4/collectreadcounts/meta.yml @@ -1,5 +1,5 @@ name: gatk4_collectreadcounts -description: +description: keywords: - bam - interval list @@ -13,7 +13,7 @@ tools: 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'] + licence: ["Apache-2.0"] input: - meta: type: map diff --git a/modules/local/gatk4/denoisereadcounts/meta.yml b/modules/local/gatk4/denoisereadcounts/meta.yml index 5edf4cde..6e343e8e 100644 --- a/modules/local/gatk4/denoisereadcounts/meta.yml +++ b/modules/local/gatk4/denoisereadcounts/meta.yml @@ -1,5 +1,5 @@ name: gatk4_denoisereadcounts -description: +description: keywords: - hdf5 - interval list @@ -12,7 +12,7 @@ tools: 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'] + licence: ["Apache-2.0"] input: - meta: type: map diff --git a/modules/local/gens/meta.yml b/modules/local/gens/meta.yml index 9907d667..44d0e7b7 100644 --- a/modules/local/gens/meta.yml +++ b/modules/local/gens/meta.yml @@ -1,5 +1,5 @@ name: gens -description: +description: keywords: - bed - vcf From ee7f5440cba9a4f8dda0979bcf60d6f4d965bd23 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Thu, 12 May 2022 12:37:39 +0200 Subject: [PATCH 0505/1921] Removes memory fix in local copy of markduplicates --- modules/nf-core/modules/picard/markduplicates/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 9125bbf9..5a30974a 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -26,7 +26,7 @@ process PICARD_MARKDUPLICATES { if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga * 14 / 15 as long + avail_mem = task.memory.giga } """ mkdir tmp From 2c2d3ce844d10ee885317c574ce44c34f5ba6745 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 11:31:17 +0200 Subject: [PATCH 0506/1921] added sentieon snv calling subworkflow --- subworkflows/local/call_snv_sentieon.nf | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 subworkflows/local/call_snv_sentieon.nf diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/call_snv_sentieon.nf new file mode 100644 index 00000000..41931484 --- /dev/null +++ b/subworkflows/local/call_snv_sentieon.nf @@ -0,0 +1,37 @@ +// +// A subworkflow to call SNVs by sentieon dnascope with a machine learning model. +// + +include { SENTIEON_DNASCOPE } from '../../modules/local/sentieon/dnascope' +include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamodelapply' + +workflow calling_sentieon { + take: + input // channel: [ val(meta), bam, bai ] + fasta // path: genome.fasta + fai // path: genome.fai + known_dbsnp // path: params.known_dbsnp + known_dbsnp_tbi // path: params.known_dbsnp + ml_model // path: params.ml_model + + main: + ch_versions = Channel.empty() + ch_dnascope_vcf = Channel.empty() + ch_dnamodelapply_vcf = Channel.empty() + + SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, ml_model ) + ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions) + + SENTIEON_DNASCOPE.out + .vcf + .set { ch_dnascope_vcf } + + SENTIEON_DNAMODELAPPLY ( ch_dnascope_vcf, fasta, fai, ml_model ) + ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) + ch_dnamodelapply_vcf = SENTIEON_DNAMODELAPPLY.out.vcf + + emit: + dnascope_vcf = ch_dnascope_vcf.ifEmpty(null) + dnamodelapply_vcf = ch_dnamodelapply_vcf.ifEmpty(null) + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} From f3cb081f08403d3385dfc5dcc8a634c50bca7801 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 12:47:00 +0200 Subject: [PATCH 0507/1921] changed the workflow name --- subworkflows/local/call_snv_sentieon.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/call_snv_sentieon.nf index 41931484..3e5d3640 100644 --- a/subworkflows/local/call_snv_sentieon.nf +++ b/subworkflows/local/call_snv_sentieon.nf @@ -5,7 +5,7 @@ include { SENTIEON_DNASCOPE } from '../../modules/local/sentieon/dnascope' include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamodelapply' -workflow calling_sentieon { +workflow CALL_SNV_SENTIEON { take: input // channel: [ val(meta), bam, bai ] fasta // path: genome.fasta From 00768efe244511730ca8fdb7ebdf2e3d5386a94c Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 12:47:52 +0200 Subject: [PATCH 0508/1921] added a workflow includig sentieon and deepvariant --- subworkflows/local/call_SNV.nf | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 subworkflows/local/call_SNV.nf diff --git a/subworkflows/local/call_SNV.nf b/subworkflows/local/call_SNV.nf new file mode 100644 index 00000000..7f8906e0 --- /dev/null +++ b/subworkflows/local/call_SNV.nf @@ -0,0 +1,45 @@ +// +// call Single-nucleotide Varinats +// + +include { CALL_SNV_DEEPVARIANT } from '../nf-core/call_snv_deepvariant' +include { CALL_SNV_SENTIEON } from './calling_sentieon' + +ml_model = file("https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model") + +workflow CALL_SNV { + take: + variant_caller // string: params.variant_caller + input // channel: [ val(meta), path(bam), path(bai) ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] + known_dbsnp // channel: [ /path/to/known_dbsnp ] + known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] + ml_model // channel: [ /path/to/ml_model ] + case_info // channel: [ case_id ] + + main: + ch_versions = Channel.empty() + + if (variant_caller == "deepvariat") { + CALL_SNV_DEEPVARIANT ( input, fasta, fai, case_info ) + ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf + ch_tabix = CALL_SNV_DEEPVARIANT.out.tabix + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + + } else if ( variant_caller == "sentieon" ) { + CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, ml_model ) + ch_vcf_dnascope = CALL_SNV_SENTIEON.out.dnascope_vcf + ch_vcf = CALL_SNV_SENTIEON.out.dnamodelapply_vcf + ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) + } else { + exit 1, 'Please provide a valid variant caller!' + } + + + emit: + vcf = ch_vcf + vcf_dnascope = ch_vcf_dnascope.ifEmpty(null) + tabix = ch_tabix.ifEmpty(null) + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} \ No newline at end of file From 1fc8a41e06ae6ce7c969fdcb35a7fe053cdbdbe2 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 12:54:30 +0200 Subject: [PATCH 0509/1921] corrections --- conf/modules.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 00ae964f..11c8c778 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -269,11 +269,11 @@ process{ // process { - withName: '.*CALL_SENTIEON:.*' { + withName: '.*CALL_SNV_SENTIEON:.*' { ext.when = params.variant_caller.equals("sentieon") } - withName: '.*CALL_SNV:CALL_SENTIEON:SENTIEON_DNASCOPE' { + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.args = { params.call_interval ? "--interval ${params.call_interval}" : '' } ext.args2 = { params.variant_types ? "--var_type ${params.variant_types}" : '' } ext.args3 = { params.pcrfree ? "--pcr_indel_model NONE" : '' } @@ -284,7 +284,7 @@ process { ] } - withName: '.*CALL_SNV:CALL_SENTIEON:SENTIEON_DNAMODELAPPLY' { + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { publishDir = [ path: { "${params.outdir}/sentieon_dnamodelapply" }, mode: params.publish_dir_mode, From a13cc3e87b495a3f62526b12d92511752d000888 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 16:17:42 +0200 Subject: [PATCH 0510/1921] added vcf index --- modules/local/sentieon/dnamodelapply.nf | 6 ++++-- modules/local/sentieon/dnascope.nf | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf index adaef748..dcb3b27d 100644 --- a/modules/local/sentieon/dnamodelapply.nf +++ b/modules/local/sentieon/dnamodelapply.nf @@ -10,8 +10,9 @@ process SENTIEON_DNAMODELAPPLY { path ml_model output: - tuple val(meta), path("*_dnascope_ml.vcf") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*_dnascope_ml.vcf") , emit: vcf + tuple val(meta), path("*_dnascope_ml.vcf.idx") , emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -38,6 +39,7 @@ process SENTIEON_DNAMODELAPPLY { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_dnascope_ml.vcf + touch ${prefix}_dnascope_ml.vcf.idx cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index 27d5b905..b9c9f109 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -11,10 +11,10 @@ process SENTIEON_DNASCOPE { path known_dbsnp_tbi path ml_model - output: - tuple val(meta), path("*_dnascope.vcf"), path("*_dnascope.vcf.idx") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*_dnascope.vcf") , emit: vcf + tuple val(meta), path("*_dnascope.vcf.idx") , emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From 277d0d24ad69d01ba0369b3575cb8f94e1cf28aa Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 16:18:42 +0200 Subject: [PATCH 0511/1921] fixed spaces --- subworkflows/local/call_SNV.nf | 44 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/subworkflows/local/call_SNV.nf b/subworkflows/local/call_SNV.nf index 7f8906e0..b4d5d095 100644 --- a/subworkflows/local/call_SNV.nf +++ b/subworkflows/local/call_SNV.nf @@ -4,42 +4,38 @@ include { CALL_SNV_DEEPVARIANT } from '../nf-core/call_snv_deepvariant' include { CALL_SNV_SENTIEON } from './calling_sentieon' - -ml_model = file("https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model") workflow CALL_SNV { take: - variant_caller // string: params.variant_caller - input // channel: [ val(meta), path(bam), path(bai) ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - known_dbsnp // channel: [ /path/to/known_dbsnp ] - known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] - ml_model // channel: [ /path/to/ml_model ] - case_info // channel: [ case_id ] + variant_caller // string: params.variant_caller + input // channel: [ val(meta), path(bam), path(bai) ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] + known_dbsnp // channel: [ /path/to/known_dbsnp ] + known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] + ml_model // channel: [ /path/to/ml_model ] + case_info // channel: [ case_id ] main: ch_versions = Channel.empty() if (variant_caller == "deepvariat") { - CALL_SNV_DEEPVARIANT ( input, fasta, fai, case_info ) - ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf - ch_tabix = CALL_SNV_DEEPVARIANT.out.tabix - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + CALL_SNV_DEEPVARIANT ( input, fasta, fai, case_info ) + ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf + ch_vcf_index = CALL_SNV_DEEPVARIANT.out.tabix + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) } else if ( variant_caller == "sentieon" ) { CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, ml_model ) - ch_vcf_dnascope = CALL_SNV_SENTIEON.out.dnascope_vcf - ch_vcf = CALL_SNV_SENTIEON.out.dnamodelapply_vcf - ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) + ch_vcf = CALL_SNV_SENTIEON.out.vcf + ch_vcf_index = CALL_SNV_SENTIEON.out.vcf_index + ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) } else { exit 1, 'Please provide a valid variant caller!' } - - + emit: - vcf = ch_vcf - vcf_dnascope = ch_vcf_dnascope.ifEmpty(null) - tabix = ch_tabix.ifEmpty(null) - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} \ No newline at end of file + vcf = ch_vcf + vcf_index = ch_vcf_index + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} From d126c60c961d5121b81f9b944d688b93370f25c9 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 16:19:46 +0200 Subject: [PATCH 0512/1921] added a condition to run dnamodelapply --- subworkflows/local/call_snv_sentieon.nf | 32 ++++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/call_snv_sentieon.nf index 3e5d3640..4a7ed010 100644 --- a/subworkflows/local/call_snv_sentieon.nf +++ b/subworkflows/local/call_snv_sentieon.nf @@ -12,26 +12,30 @@ workflow CALL_SNV_SENTIEON { fai // path: genome.fai known_dbsnp // path: params.known_dbsnp known_dbsnp_tbi // path: params.known_dbsnp - ml_model // path: params.ml_model + ml_model // path: params.ml_model main: ch_versions = Channel.empty() - ch_dnascope_vcf = Channel.empty() - ch_dnamodelapply_vcf = Channel.empty() - SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, ml_model ) - ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions) + SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, ml_model ) + ch_vcf = SENTIEON_DNASCOPE.out.vcf + ch_vcf_index = SENTIEON_DNASCOPE.out.vcf_index + ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions) - SENTIEON_DNASCOPE.out - .vcf - .set { ch_dnascope_vcf } + if ( ml_model ) { - SENTIEON_DNAMODELAPPLY ( ch_dnascope_vcf, fasta, fai, ml_model ) - ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) - ch_dnamodelapply_vcf = SENTIEON_DNAMODELAPPLY.out.vcf + ch_vcf. + .join( ch_vcf_index ) + .set { ch_vcf_idx } + + SENTIEON_DNAMODELAPPLY ( ch_vcf_idx, fasta, fai, ml_model ) + ch_vcf = SENTIEON_DNAMODELAPPLY.out.vcf + ch_vcf_index = SENTIEON_DNAMODELAPPLY.out.vcf_index + ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) + } emit: - dnascope_vcf = ch_dnascope_vcf.ifEmpty(null) - dnamodelapply_vcf = ch_dnamodelapply_vcf.ifEmpty(null) - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = ch_vcf + vcf_index = ch_vcf_index + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From f83a8e060a738c4c0cd956178fd07844a1f6f904 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 16:29:29 +0200 Subject: [PATCH 0513/1921] fixed spaces --- subworkflows/local/call_SNV.nf | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/subworkflows/local/call_SNV.nf b/subworkflows/local/call_SNV.nf index b4d5d095..a14141ac 100644 --- a/subworkflows/local/call_SNV.nf +++ b/subworkflows/local/call_SNV.nf @@ -7,14 +7,14 @@ include { CALL_SNV_SENTIEON } from './calling_sentieon' workflow CALL_SNV { take: - variant_caller // string: params.variant_caller - input // channel: [ val(meta), path(bam), path(bai) ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - known_dbsnp // channel: [ /path/to/known_dbsnp ] - known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] - ml_model // channel: [ /path/to/ml_model ] - case_info // channel: [ case_id ] + variant_caller // string: params.variant_caller + input // channel: [ val(meta), path(bam), path(bai) ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] + known_dbsnp // channel: [ /path/to/known_dbsnp ] + known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] + ml_model // channel: [ /path/to/ml_model ] + case_info // channel: [ case_id ] main: ch_versions = Channel.empty() @@ -33,9 +33,9 @@ workflow CALL_SNV { } else { exit 1, 'Please provide a valid variant caller!' } - - emit: - vcf = ch_vcf - vcf_index = ch_vcf_index - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + + emit: + vcf = ch_vcf + vcf_index = ch_vcf_index + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 8fa5cbf69035ef761018133ccda1521fe2aaea3c Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 May 2022 16:32:05 +0200 Subject: [PATCH 0514/1921] corrections --- nextflow.config | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nextflow.config b/nextflow.config index cfba667a..2e00056b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,17 +30,15 @@ params { // Variant calling variant_caller = 'deepvariant' - -<<<<<<< HEAD + // Dnascope SNV calling pcrfree = true call_interval = null variant_type = 'snp, indel' -======= + // CNVpytor cnvpytor_chr = null cnvpytor_binsizes = '1000' ->>>>>>> dev // Annotation vep_cache_version = '105' From 27de68767b6baf647b06c4e3f1351a873fab03c2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 14 May 2022 14:28:48 +0200 Subject: [PATCH 0515/1921] add empty lines to module.config --- conf/modules.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 11c8c778..60ef78a2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -272,18 +272,18 @@ process { withName: '.*CALL_SNV_SENTIEON:.*' { ext.when = params.variant_caller.equals("sentieon") } - + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.args = { params.call_interval ? "--interval ${params.call_interval}" : '' } ext.args2 = { params.variant_types ? "--var_type ${params.variant_types}" : '' } ext.args3 = { params.pcrfree ? "--pcr_indel_model NONE" : '' } - publishDir = [ + publishDir = [ path: { "${params.outdir}/sentieon_dnascope" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { publishDir = [ path: { "${params.outdir}/sentieon_dnamodelapply" }, @@ -291,7 +291,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - + } // From 657bb6cdd519eb5ffe84aa5d958b20006e20c442 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Mon, 16 May 2022 12:01:49 +0200 Subject: [PATCH 0516/1921] Add flowchart --- docs/images/raredisease_workflow.svg | 910 ++++++++++++++++++++++++ docs/images/raredisease_workflow_v0.png | Bin 0 -> 172170 bytes 2 files changed, 910 insertions(+) create mode 100644 docs/images/raredisease_workflow.svg create mode 100644 docs/images/raredisease_workflow_v0.png diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg new file mode 100644 index 00000000..a05e65d5 --- /dev/null +++ b/docs/images/raredisease_workflow.svg @@ -0,0 +1,910 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bam + + + + + Preprocessing, mapping etc +bwamem2, MarkDuplicates +Sentieon: bwamem, Locuscollector, Dedup + + + + Reports +MultiQC, Peddy, plink, rhocall + + + + + Variant calling + + SV +ExpansionHunter, CNVpytor, Manta, tiddit/sv + Mitochondria +According to GATK Best Practices +Mutect2, eKLIPse + SNV + short indels +Deepvariant +Sentieon: DNAscope, DNAModelApply + + + + + + + Variant annotation and prioritization + + SV +VCFanno, VEP, Gens + Mitochondria +Haplogrep, HmtNote, gnomAD_mt + SNV + short indels +VCFanno, CADD, VEP + + + + + + Outputs +VCFs, inputs for scout, Gens + + + + + vcf + + + + + + vcf + + + + + + vcf + + + + + + + fastq + + + + dev + + + + + + diff --git a/docs/images/raredisease_workflow_v0.png b/docs/images/raredisease_workflow_v0.png new file mode 100644 index 0000000000000000000000000000000000000000..f48034d0a7f7f87bc728ba425ae2afe457096a02 GIT binary patch literal 172170 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 Date: Mon, 16 May 2022 12:16:38 +0200 Subject: [PATCH 0517/1921] Increased icons size --- docs/images/raredisease_workflow.svg | 162 ++++++++++++------------ docs/images/raredisease_workflow_v0.png | Bin 172170 -> 266322 bytes 2 files changed, 81 insertions(+), 81 deletions(-) diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg index a05e65d5..5aedaf7f 100644 --- a/docs/images/raredisease_workflow.svg +++ b/docs/images/raredisease_workflow.svg @@ -3,12 +3,12 @@ + originx="5.8501525" + originy="12.591079" /> @@ -112,10 +112,10 @@ hide_knots="false" /> + transform="translate(5.8501515,12.591079)"> + id="g1311" + inkscape:export-filename="/Users/gwennabreton/Documents/GMS-RD-DNA/nf-core_raredisease/pipeline-flowcharts/nf-core-raredisease/raredisease_workflow_v0.png" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300"> + transform="translate(0,0.41424555)"> Preprocessing, mapping etcPreprocessing, mapping etc + id="tspan1508"> bwamem2, MarkDuplicates + id="tspan1512">bwamem2, MarkDuplicates Sentieon: bwamem, Locuscollector, Dedup + id="tspan1516">Sentieon: bwamem, Locuscollector, Dedup ReportsReports + id="tspan1522"> MultiQC, Peddy, plink, rhocall + id="tspan1526">MultiQC, Peddy, plink, rhocall + transform="translate(0,0.81806251)"> Variant calling + id="tspan1530">Variant calling @@ -549,19 +549,19 @@ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro';white-space:pre;shape-inside:url(#rect17389);fill:#000000">SV + id="tspan1534">SV ExpansionHunter, ExpansionHunter, CNVpytor, Manta, CNVpytor, Manta, tiddit/sv + id="tspan1542">tiddit/sv MitochondriaMitochondria + id="tspan1544"> According to GATK According to GATK Best Practices + id="tspan1552">Best Practices Mutect2, eKLIPse + id="tspan1556">Mutect2, eKLIPse SNV + short indelsSNV + short indels + id="tspan1560"> Deepvariant + id="tspan1564">Deepvariant Sentieon: DNAscope, Sentieon: DNAscope, DNAModelApply + id="tspan1572">DNAModelApply + transform="translate(0,2.5826905)"> Variant annotation and prioritization + id="tspan1576">Variant annotation and prioritization @@ -657,13 +657,13 @@ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro';white-space:pre;shape-inside:url(#rect17389-8);fill:#000000">SV + id="tspan1580">SV VCFanno, VEP, Gens + id="tspan1584">VCFanno, VEP, Gens Mitochondria + id="tspan1586">Mitochondria Haplogrep, HmtNote, Haplogrep, HmtNote, gnomAD_mt + id="tspan1592">gnomAD_mt SNV + short indels + id="tspan1594">SNV + short indels VCFanno, CADD, VEP + id="tspan1598">VCFanno, CADD, VEP @@ -721,21 +721,21 @@ y="0">OutputsOutputs + id="tspan1602"> VCFs, inputs for scout, Gens + id="tspan1606">VCFs, inputs for scout, Gens @@ -838,12 +838,12 @@ + inkscape:original-d="M 16.205895,-11.047027 V 4.5963258 L 48.667882,10.853613 81.129873,4.5963258 V -11.047027 Z" /> + transform="translate(0.77458502,9.5250003)"> dev + id="tspan1610">dev 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%0AX`TP|Kr-gw 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 Date: Mon, 16 May 2022 12:17:43 +0200 Subject: [PATCH 0518/1921] Added flowchart image - included workflow overview - created subsection with in-progress flowchart --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f2008807..4d2d39bd 100644 --- a/README.md +++ b/README.md @@ -40,10 +40,20 @@ On release, automated continuous integration tests run the pipeline on a full-si > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) -The different steps and corresponding tools are represented in the flowchart below. Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). +

+ +

+ +Note that it is possible to include/exclude certain tools or steps. + +### Work in progress flowchart +Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). + + + ## Quick Start 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.10.3`) From e3def69d2b9b759ec3411ebd49aa7216fea65ebf Mon Sep 17 00:00:00 2001 From: Gwennid Date: Mon, 16 May 2022 15:22:26 +0200 Subject: [PATCH 0519/1921] Replaced html by md syntax --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4d2d39bd..80d1e963 100644 --- a/README.md +++ b/README.md @@ -40,20 +40,16 @@ On release, automated continuous integration tests run the pipeline on a full-si > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) -

- -

+![nf-core/raredisease Workflow](docs/images/raredisease_workflow_v0.png) Note that it is possible to include/exclude certain tools or steps. ### Work in progress flowchart - +![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). - - ## Quick Start 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.10.3`) From b95bdb454d44dd65fd7abf0ead0ae4281ba191d3 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Mon, 16 May 2022 15:35:17 +0200 Subject: [PATCH 0520/1921] Added prettier ignore command --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 80d1e963..8cde14ee 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,10 @@ On release, automated continuous integration tests run the pipeline on a full-si > Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) -![nf-core/raredisease Workflow](docs/images/raredisease_workflow_v0.png) + +

+ +

Note that it is possible to include/exclude certain tools or steps. From f111a0662d2e49961abca855af39db3a28cdd7bc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 16 May 2022 16:28:42 +0200 Subject: [PATCH 0521/1921] functional subworkflow --- conf/genomes.config | 2 ++ conf/modules.config | 9 ++++-- main.nf | 1 + modules/local/sentieon/dnascope.nf | 14 ++++---- nextflow.config | 6 ++-- nextflow_schema.json | 26 +++++++++++---- .../local/{call_SNV.nf => call_snv.nf} | 32 +++++++++---------- subworkflows/local/call_snv_sentieon.nf | 30 ++++++++--------- subworkflows/local/prepare_references.nf | 6 ++-- workflows/raredisease.nf | 21 ++++++------ 10 files changed, 81 insertions(+), 66 deletions(-) rename subworkflows/local/{call_SNV.nf => call_snv.nf} (56%) diff --git a/conf/genomes.config b/conf/genomes.config index 967379b5..7adf8135 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -18,6 +18,7 @@ params { bwa = "" known_dbsnp = "" known_dbsnp_tbi = "" + ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -33,6 +34,7 @@ params { bwa = "${params.local_genomes}/bwa/" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" + ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/conf/modules.config b/conf/modules.config index 60ef78a2..7b7801bc 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -274,9 +274,12 @@ process { } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { - ext.args = { params.call_interval ? "--interval ${params.call_interval}" : '' } - ext.args2 = { params.variant_types ? "--var_type ${params.variant_types}" : '' } - ext.args3 = { params.pcrfree ? "--pcr_indel_model NONE" : '' } + ext.args2 = { [ + params.call_interval ? "--interval ${params.call_interval}" : '', + params.variant_type ? "--var_type ${params.variant_type}" : '', + params.pcrfree ? "--pcr_indel_model NONE" : '' + ].join(" ") + } publishDir = [ path: { "${params.outdir}/sentieon_dnascope" }, mode: params.publish_dir_mode, diff --git a/main.nf b/main.nf index 832ef29a..159e4ed8 100644 --- a/main.nf +++ b/main.nf @@ -25,6 +25,7 @@ params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbs 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.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index b9c9f109..3f33d196 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -10,21 +10,20 @@ process SENTIEON_DNASCOPE { path known_dbsnp path known_dbsnp_tbi path ml_model - + output: tuple val(meta), path("*_dnascope.vcf") , emit: vcf tuple val(meta), path("*_dnascope.vcf.idx") , emit: vcf_index - path "versions.yml" , emit: versions + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def args3 = task.ext.args3 ?: '' - 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 dbsnp = known_dbsnp ? "-d ${known_dbsnp}" : '' + def model = ml_model ? "--model ${ml_model}" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ @@ -36,7 +35,6 @@ process SENTIEON_DNASCOPE { --algo DNAscope \\ $dbsnp \\ $args2 \\ - $args3 \\ $model \\ ${prefix}_dnascope.vcf diff --git a/nextflow.config b/nextflow.config index cfba667a..368c1197 100644 --- a/nextflow.config +++ b/nextflow.config @@ -31,16 +31,14 @@ params { // Variant calling variant_caller = 'deepvariant' -<<<<<<< HEAD // Dnascope SNV calling pcrfree = true call_interval = null - variant_type = 'snp, indel' -======= + variant_type = 'snp,indel' + // CNVpytor cnvpytor_chr = null cnvpytor_binsizes = '1000' ->>>>>>> dev // Annotation vep_cache_version = '105' diff --git a/nextflow_schema.json b/nextflow_schema.json index e49a4dc7..6f715732 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -129,6 +129,13 @@ "description": "Path to known Mills file.", "hidden": true }, + "ml_model": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Path to sentieon machine learning model file.", + "hidden": true + }, "target_bed": { "type": "string", "format": "path", @@ -245,18 +252,25 @@ "fa_icon": "fas fa-map-signs", "description": "Options to adjust parameters and filtering criteria for variant calling.", "properties": { + "pcrfree": { + "type": "boolean", + "default": true, + "description": "indicates whether the sample is PCR Free or not. Set to true for PCR Free samples.", + "fa_icon": "fas fa-map-signs" + }, + "variant_type": { + "type": "string", + "default": "SNP", + "description": "Specifies the variant types for sentieon variant caller.", + "fa_icon": "fas fa-map-signs", + "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"] - }, - "pcrfree": { - "type": "boolean", - "default": true, - "description": "indicates whether the sample is PCR Free or not. Set to true for PCR Free samples.", - "fa_icon": "fas fa-map-signs" } } }, diff --git a/subworkflows/local/call_SNV.nf b/subworkflows/local/call_snv.nf similarity index 56% rename from subworkflows/local/call_SNV.nf rename to subworkflows/local/call_snv.nf index b4d5d095..a3f855ca 100644 --- a/subworkflows/local/call_SNV.nf +++ b/subworkflows/local/call_snv.nf @@ -3,11 +3,11 @@ // include { CALL_SNV_DEEPVARIANT } from '../nf-core/call_snv_deepvariant' -include { CALL_SNV_SENTIEON } from './calling_sentieon' - +include { CALL_SNV_SENTIEON } from './call_snv_sentieon' + workflow CALL_SNV { take: - variant_caller // string: params.variant_caller + variant_caller // string: params.variant_caller input // channel: [ val(meta), path(bam), path(bai) ] fasta // channel: [genome.fasta] fai // channel: [genome.fai] @@ -15,27 +15,27 @@ workflow CALL_SNV { known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] ml_model // channel: [ /path/to/ml_model ] case_info // channel: [ case_id ] - + main: ch_versions = Channel.empty() - if (variant_caller == "deepvariat") { + if (variant_caller == "deepvariant") { CALL_SNV_DEEPVARIANT ( input, fasta, fai, case_info ) - ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf - ch_vcf_index = CALL_SNV_DEEPVARIANT.out.tabix - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) - + ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf + ch_tabix = CALL_SNV_DEEPVARIANT.out.tabix + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + } else if ( variant_caller == "sentieon" ) { CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, ml_model ) - ch_vcf = CALL_SNV_SENTIEON.out.vcf - ch_vcf_index = CALL_SNV_SENTIEON.out.vcf_index - ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) + ch_vcf = CALL_SNV_SENTIEON.out.vcf + ch_tabix = CALL_SNV_SENTIEON.out.tabix + ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) } else { exit 1, 'Please provide a valid variant caller!' } - + emit: - vcf = ch_vcf - vcf_index = ch_vcf_index - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = ch_vcf + tabix = ch_tabix + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/call_snv_sentieon.nf index 4a7ed010..0c360975 100644 --- a/subworkflows/local/call_snv_sentieon.nf +++ b/subworkflows/local/call_snv_sentieon.nf @@ -7,35 +7,33 @@ include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamod workflow CALL_SNV_SENTIEON { take: - input // channel: [ val(meta), bam, bai ] - fasta // path: genome.fasta - fai // path: genome.fai - known_dbsnp // path: params.known_dbsnp - known_dbsnp_tbi // path: params.known_dbsnp - ml_model // path: params.ml_model + input // channel: [ val(meta), bam, bai ] + fasta // path: genome.fasta + fai // path: genome.fai + dbsnp // path: params.known_dbsnp + dbsnp_index // path: params.known_dbsnp + ml_model // path: params.ml_model main: ch_versions = Channel.empty() SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, ml_model ) - ch_vcf = SENTIEON_DNASCOPE.out.vcf - ch_vcf_index = SENTIEON_DNASCOPE.out.vcf_index + ch_vcf = SENTIEON_DNASCOPE.out.vcf + ch_index = SENTIEON_DNASCOPE.out.vcf_index ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions) if ( ml_model ) { - ch_vcf. - .join( ch_vcf_index ) - .set { ch_vcf_idx } + ch_vcf_idx = ch_vcf.join( ch_index ) SENTIEON_DNAMODELAPPLY ( ch_vcf_idx, fasta, fai, ml_model ) - ch_vcf = SENTIEON_DNAMODELAPPLY.out.vcf - ch_vcf_index = SENTIEON_DNAMODELAPPLY.out.vcf_index + ch_vcf = SENTIEON_DNAMODELAPPLY.out.vcf + ch_index = SENTIEON_DNAMODELAPPLY.out.vcf_index ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) } emit: - vcf = ch_vcf - vcf_index = ch_vcf_index - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = ch_vcf + tabix = ch_index + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 65e5e83c..6ab7ec2b 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -42,12 +42,12 @@ workflow PREPARE_REFERENCES { ch_dbsnp_tbi = Channel.empty() if (!known_dbsnp_tbi && known_dbsnp) { TABIX_DBSNP([[id:'dbsnp'], file(known_dbsnp)]) - ch_dbsnp_vcf = Channel.fromPath(known_dbsnp) + ch_dbsnp_vcf = file(known_dbsnp) ch_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect {it[1]} ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) } else if (known_dbsnp_tbi && known_dbsnp) { - ch_dbsnp_vcf = Channel.fromPath(known_dbsnp) - ch_dbsnp_tbi = Channel.fromPath(known_dbsnp_tbi) + ch_dbsnp_vcf = file(known_dbsnp) + ch_dbsnp_tbi = file(known_dbsnp_tbi) } // Gnomad vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d6b4f245..1bc6fd80 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -27,10 +27,7 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_known_dbsnp = params.known_dbsnp ? file(params.known_dbsnp) : [] -ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? file(params.known_dbsnp_tbi) : [] -ch_known_mills = params.known_mills ? file(params.known_mills) : [] -ch_known_indels = params.known_indels ? file(params.known_indels) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -54,6 +51,7 @@ include { CHECK_INPUT } from '../subworkflows/local/check_input include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { ALIGN } from '../subworkflows/local/align' +include { CALL_SNV } from '../subworkflows/local/call_snv' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -74,7 +72,6 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { CALL_SNV_DEEPVARIANT } from '../subworkflows/nf-core/call_snv_deepvariant' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' @@ -159,13 +156,17 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. - CALL_SNV_DEEPVARIANT ( + CALL_SNV ( + params.variant_caller, ch_mapped.bam_bai, ch_references.genome_fasta, ch_references.genome_fai, + ch_references.known_dbsnp, + ch_references.known_dbsnp_tbi, + ch_ml_model, CHECK_INPUT.out.case_info ) - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + ch_versions = ch_versions.mix(CALL_SNV.out.versions) CALL_STRUCTURAL_VARIANTS ( ch_mapped.marked_bam, @@ -192,16 +193,16 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(ch_sv_annotate.versions) } - + // STEP 2.1: MT CALLING - + PREPARE_MT_ALIGNMENT ( ch_mapped.bam_bai ) ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) // STEP 3: VARIANT ANNOTATION - ch_dv_vcf = CALL_SNV_DEEPVARIANT.out.vcf.join(CALL_SNV_DEEPVARIANT.out.tabix, by: [0]) + ch_dv_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) ANNOTATE_VCFANNO ( params.vcfanno_toml, From f17f8f9689ed6aa73013426b6996cc293ab0189e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 16 May 2022 16:57:39 +0200 Subject: [PATCH 0522/1921] add tabix --- subworkflows/local/call_snv.nf | 6 +++--- subworkflows/local/call_snv_sentieon.nf | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index a3f855ca..a809f8a3 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -35,7 +35,7 @@ workflow CALL_SNV { } emit: - vcf = ch_vcf - tabix = ch_tabix - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = ch_vcf + tabix = ch_tabix + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/call_snv_sentieon.nf index 0c360975..53d916dc 100644 --- a/subworkflows/local/call_snv_sentieon.nf +++ b/subworkflows/local/call_snv_sentieon.nf @@ -2,8 +2,9 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { SENTIEON_DNASCOPE } from '../../modules/local/sentieon/dnascope' -include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamodelapply' +include { SENTIEON_DNASCOPE } from '../../modules/local/sentieon/dnascope' +include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamodelapply' +include { TABIX_TABIX as TABIX_SENTIEON } from '../../modules/nf-core/modules/tabix/tabix/main' workflow CALL_SNV_SENTIEON { take: @@ -32,8 +33,10 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) } + TABIX_SENTIEON (ch_vcf) + emit: vcf = ch_vcf - tabix = ch_index + tabix = TABIX_SENTIEON.out.tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From c808d1e8936ac47fc4135cc05aefe2a9f3426c31 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 May 2022 08:27:13 +0200 Subject: [PATCH 0523/1921] updates default variant type in schema --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 6f715732..5ae90684 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -260,7 +260,7 @@ }, "variant_type": { "type": "string", - "default": "SNP", + "default": "snp", "description": "Specifies the variant types for sentieon variant caller.", "fa_icon": "fas fa-map-signs", "enum": ["snp", "indel", "snp,indel"] From ae229f468d4d62e4ec37f453567f5e95d33b1a90 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 May 2022 09:04:51 +0200 Subject: [PATCH 0524/1921] fix lint errors --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 368c1197..bd481028 100644 --- a/nextflow.config +++ b/nextflow.config @@ -33,7 +33,6 @@ params { // Dnascope SNV calling pcrfree = true - call_interval = null variant_type = 'snp,indel' // CNVpytor From 6ca3e33614d3a30cd6848b843cc4016a2bfc4638 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 May 2022 09:27:19 +0200 Subject: [PATCH 0525/1921] fix editorconfig --- conf/modules.config | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7b7801bc..16c3e639 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -275,11 +275,9 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.args2 = { [ - params.call_interval ? "--interval ${params.call_interval}" : '', - params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcrfree ? "--pcr_indel_model NONE" : '' - ].join(" ") - } + params.variant_type ? "--var_type ${params.variant_type}" : '', + params.pcrfree ? "--pcr_indel_model NONE" : '' + ].join(" ") } publishDir = [ path: { "${params.outdir}/sentieon_dnascope" }, mode: params.publish_dir_mode, From 6485c95d3ddc1afd4de5a6c289215e63a4300540 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 May 2022 10:12:28 +0200 Subject: [PATCH 0526/1921] fix editorlint errors --- conf/modules.config | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 16c3e639..ee22d8d7 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -261,7 +261,6 @@ process{ saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - } // @@ -275,10 +274,10 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.args2 = { [ - params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcrfree ? "--pcr_indel_model NONE" : '' - ].join(" ") } - publishDir = [ + params.variant_type ? "--var_type ${params.variant_type}" : '', + params.pcrfree ? "--pcr_indel_model NONE" : '' + ].join(" ") } + publishDir = [ path: { "${params.outdir}/sentieon_dnascope" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -286,13 +285,12 @@ process { } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { - publishDir = [ + publishDir = [ path: { "${params.outdir}/sentieon_dnamodelapply" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - } // From b52c959f606e24f7adee181140091dee7f4363ba Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 May 2022 16:11:06 +0200 Subject: [PATCH 0527/1921] add call intervals --- conf/genomes.config | 6 ++++-- conf/modules.config | 9 ++++++--- main.nf | 1 + nextflow_schema.json | 7 +++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 7adf8135..7c4bcadb 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -13,9 +13,10 @@ params { 'GRCh37' { fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" + bwa = "" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + call_interval = "" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - bwa = "" known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" @@ -29,9 +30,10 @@ params { 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" + bwa = "${params.local_genomes}/bwa/" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + call_interval = "" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - bwa = "${params.local_genomes}/bwa/" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" diff --git a/conf/modules.config b/conf/modules.config index ee22d8d7..d0912f4f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -274,8 +274,9 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.args2 = { [ - params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcrfree ? "--pcr_indel_model NONE" : '' + params.variant_type ? "--var_type ${params.variant_type}" : '', + params.pcrfree ? "--pcr_indel_model NONE" : '', + params.call_interval ? "--interval ${params.call_interval}" : '' ].join(" ") } publishDir = [ path: { "${params.outdir}/sentieon_dnascope" }, @@ -353,6 +354,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + withName: STRANGER { publishDir = [ path: { "${params.outdir}/stranger" }, @@ -472,6 +474,7 @@ process { mode: params.publish_dir_mode, ] } + withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { ext.args = '--pass_only' publishDir = [ @@ -532,7 +535,7 @@ process { } // -// PREPARE_MT_ALLIGNMENT +// PREPARE_MT_ALIGNMENT // process { diff --git a/main.nf b/main.nf index 159e4ed8..84323d7c 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.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp') params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp_tbi') diff --git a/nextflow_schema.json b/nextflow_schema.json index 5ae90684..3f68b9ee 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -252,6 +252,13 @@ "fa_icon": "fas fa-map-signs", "description": "Options to adjust parameters and filtering criteria for variant calling.", "properties": { + "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 + }, "pcrfree": { "type": "boolean", "default": true, From f0841c91b421e6276a24a416da6436b037e3ce29 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 18 May 2022 15:41:34 +0200 Subject: [PATCH 0528/1921] Fixed alignment --- docs/images/raredisease_workflow.png | Bin 0 -> 265967 bytes docs/images/raredisease_workflow.svg | 396 ++++++++++++++------------- 2 files changed, 204 insertions(+), 192 deletions(-) create mode 100644 docs/images/raredisease_workflow.png diff --git a/docs/images/raredisease_workflow.png b/docs/images/raredisease_workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc112e276b0a98a52964561d56a437c35025e59 GIT binary patch literal 265967 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

L9D>x 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

J>$MsWbb4Z6 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 literal 0 HcmV?d00001 diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg index 5aedaf7f..012f2c59 100644 --- a/docs/images/raredisease_workflow.svg +++ b/docs/images/raredisease_workflow.svg @@ -9,6 +9,9 @@ id="svg1159" inkscape:version="1.1.2 (b8e25be8, 2022-02-05)" sodipodi:docname="raredisease_workflow.svg" + inkscape:export-filename="/Users/gwennabreton/Documents/GMS-RD-DNA/nf-core_raredisease/pipeline-flowcharts/nf-core-raredisease/raredisease_workflow.png" + inkscape:export-xdpi="300" + inkscape:export-ydpi="300" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -24,9 +27,9 @@ inkscape:pagecheckerboard="0" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="1" - inkscape:cx="-10.5" - inkscape:cy="350.5" + inkscape:zoom="0.93303299" + inkscape:cx="199.88575" + inkscape:cy="320.99615" inkscape:window-width="1792" inkscape:window-height="989" inkscape:window-x="0" @@ -365,6 +368,30 @@ apply_with_radius="true" only_selected="false" hide_knots="false" /> + + + + + inkscape:transform-center-y="-13.397346" /> Preprocessing, mapping etcPreprocessing, mapping etc + id="tspan3373"> bwamem2, MarkDuplicates + id="tspan3377">bwamem2, MarkDuplicates Sentieon: bwamem, Locuscollector, Dedup + id="tspan3381">Sentieon: bwamem, Locuscollector, Dedup + inkscape:transform-center-y="-9.6355011" /> ReportsReports + id="tspan3387"> MultiQC, Peddy, plink, rhocall + id="tspan3391">MultiQC, Peddy, plink, rhocall + + - + id="g2510"> + Variant calling + id="g1657"> Variant calling - - SV + id="tspan3399">SV ExpansionHunter, CNVpytor, Manta, tiddit/sv - MitochondriaExpansionHunter, CNVpytor, Manta, tiddit/sv + Mitochondria + id="tspan3409"> According to GATK Best Practices + x="473.05078" + y="263.66196" + id="tspan3415">According to GATK Best Practices Mutect2, eKLIPse - SNV + short indelsMutect2, eKLIPse + SNV + short indels + id="tspan3425"> Deepvariant + x="48.398438" + y="263.66196" + id="tspan3431">Deepvariant Sentieon: DNAscope, DNAModelApply - + x="48.398438" + y="278.66196" + id="tspan3435">Sentieon: DNAscope, DNAModelApply - + id="g1676" + transform="translate(-110.84655,44.76017)"> + Variant annotation and prioritization + id="g1631" + transform="translate(0,-0.44417142)"> Variant annotation and prioritization - - SV + id="tspan3445">SV VCFanno, VEP, Gens - VCFanno, VEP, Gens + Mitochondria + id="tspan3451">Mitochondria Haplogrep, HmtNote, gnomAD_mt - Haplogrep, HmtNote, gnomAD_mt + SNV + short indels + id="tspan3459">SNV + short indels VCFanno, CADD, VEP - + x="55" + y="377.35532" + id="tspan3463">VCFanno, CADD, VEP + inkscape:transform-center-y="-9.6355011" /> OutputsOutputs + id="tspan3467"> VCFs, inputs for scout, Gens + id="tspan3471">VCFs, inputs for scout, Gens dev + id="tspan3475">dev Date: Wed, 18 May 2022 15:42:05 +0200 Subject: [PATCH 0529/1921] Modified PNG file name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8cde14ee..1b1a0a20 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ On release, automated continuous integration tests run the pipeline on a full-si

- +

Note that it is possible to include/exclude certain tools or steps. From 9c29a55618fdf2b7838a68ef959412afc07a606f Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 18 May 2022 15:42:52 +0200 Subject: [PATCH 0530/1921] Remove older version --- docs/images/raredisease_workflow_v0.png | Bin 266322 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/raredisease_workflow_v0.png diff --git a/docs/images/raredisease_workflow_v0.png b/docs/images/raredisease_workflow_v0.png deleted file mode 100644 index 00d0a3a4b7076ce44e703d02b54909dd3af14d58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266322 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
;jlPI-8Bk^ynZIzcZQmI4dQU+nw6&e@x6VD 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%0AX`TP|Kr-gw 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 Date: Wed, 18 May 2022 15:46:47 +0200 Subject: [PATCH 0531/1921] review suggestions --- conf/genomes.config | 2 +- conf/modules.config | 3 +-- modules/local/sentieon/dnamodelapply.nf | 12 ++++++------ modules/local/sentieon/dnascope.nf | 23 +++++++++++++---------- subworkflows/local/call_snv.nf | 3 ++- subworkflows/local/call_snv_sentieon.nf | 20 +++++++++----------- workflows/raredisease.nf | 3 ++- 7 files changed, 34 insertions(+), 32 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 7c4bcadb..53f2f180 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -30,7 +30,7 @@ params { 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - bwa = "${params.local_genomes}/bwa/" + bwa = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.{amb,ann,bwt,pac,sa}" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" diff --git a/conf/modules.config b/conf/modules.config index d0912f4f..a3c1aa9b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -275,8 +275,7 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.args2 = { [ params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcrfree ? "--pcr_indel_model NONE" : '', - params.call_interval ? "--interval ${params.call_interval}" : '' + params.pcrfree ? "--pcr_indel_model NONE" : '' ].join(" ") } publishDir = [ path: { "${params.outdir}/sentieon_dnascope" }, diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf index dcb3b27d..3be8ec10 100644 --- a/modules/local/sentieon/dnamodelapply.nf +++ b/modules/local/sentieon/dnamodelapply.nf @@ -10,9 +10,9 @@ process SENTIEON_DNAMODELAPPLY { path ml_model output: - tuple val(meta), path("*_dnascope_ml.vcf") , emit: vcf - tuple val(meta), path("*_dnascope_ml.vcf.idx") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*_dnascope_ml.vcf.gz") , emit: vcf + tuple val(meta), path("*_dnascope_ml.vcf.gz.tbi") , emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -27,7 +27,7 @@ process SENTIEON_DNAMODELAPPLY { --algo DNAModelApply \\ --model $ml_model \\ -v $vcf \\ - ${prefix}_dnascope_ml.vcf + ${prefix}_dnascope_ml.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -38,8 +38,8 @@ process SENTIEON_DNAMODELAPPLY { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_dnascope_ml.vcf - touch ${prefix}_dnascope_ml.vcf.idx + touch ${prefix}_dnascope_ml.vcf.gz + touch ${prefix}_dnascope_ml.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index 3f33d196..c4d7cf14 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -9,22 +9,24 @@ process SENTIEON_DNASCOPE { path fai path known_dbsnp path known_dbsnp_tbi + path call_interval path ml_model output: - tuple val(meta), path("*_dnascope.vcf") , emit: vcf - tuple val(meta), path("*_dnascope.vcf.idx") , emit: vcf_index + tuple val(meta), path("*_dnascope.vcf.gz") , emit: vcf + tuple val(meta), path("*_dnascope.vcf.gz.tbi") , emit: vcf_index 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 dbsnp = known_dbsnp ? "-d ${known_dbsnp}" : '' - def model = ml_model ? "--model ${ml_model}" : '' - def prefix = task.ext.prefix ?: "${meta.id}" + 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}" """ sentieon driver \\ @@ -34,9 +36,10 @@ process SENTIEON_DNASCOPE { -i $bam \\ --algo DNAscope \\ $dbsnp \\ + $interval \\ $args2 \\ $model \\ - ${prefix}_dnascope.vcf + ${prefix}_dnascope.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -47,8 +50,8 @@ process SENTIEON_DNASCOPE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_dnascope.vcf - touch ${prefix}_dnascope.vcf.idx + touch ${prefix}_dnascope.vcf.gz + touch ${prefix}_dnascope.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index a809f8a3..8af1eb4d 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -13,6 +13,7 @@ workflow CALL_SNV { fai // channel: [genome.fai] known_dbsnp // channel: [ /path/to/known_dbsnp ] known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] + call_interval // channel: [ /path/to/call_intervals ] ml_model // channel: [ /path/to/ml_model ] case_info // channel: [ case_id ] @@ -26,7 +27,7 @@ workflow CALL_SNV { ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) } else if ( variant_caller == "sentieon" ) { - CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, ml_model ) + CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, call_interval, ml_model ) ch_vcf = CALL_SNV_SENTIEON.out.vcf ch_tabix = CALL_SNV_SENTIEON.out.tabix ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/call_snv_sentieon.nf index 53d916dc..f9f2c3cf 100644 --- a/subworkflows/local/call_snv_sentieon.nf +++ b/subworkflows/local/call_snv_sentieon.nf @@ -4,21 +4,21 @@ include { SENTIEON_DNASCOPE } from '../../modules/local/sentieon/dnascope' include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamodelapply' -include { TABIX_TABIX as TABIX_SENTIEON } from '../../modules/nf-core/modules/tabix/tabix/main' workflow CALL_SNV_SENTIEON { take: - input // channel: [ val(meta), bam, bai ] - fasta // path: genome.fasta - fai // path: genome.fai - dbsnp // path: params.known_dbsnp - dbsnp_index // path: params.known_dbsnp - ml_model // path: params.ml_model + input // channel: [ val(meta), bam, bai ] + fasta // path: genome.fasta + fai // path: genome.fai + dbsnp // path: params.known_dbsnp + dbsnp_index // path: params.known_dbsnp + call_interval // path: params.call_interval + ml_model // path: params.ml_model main: ch_versions = Channel.empty() - SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, ml_model ) + SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, call_interval, ml_model ) ch_vcf = SENTIEON_DNASCOPE.out.vcf ch_index = SENTIEON_DNASCOPE.out.vcf_index ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions) @@ -33,10 +33,8 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) } - TABIX_SENTIEON (ch_vcf) - emit: vcf = ch_vcf - tabix = TABIX_SENTIEON.out.tbi + tabix = ch_index versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1bc6fd80..e1133bdd 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -27,7 +27,8 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_call_interval = params.call_interval ? file(params.call_interval) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From c0ff3e68f7d2c1c57bad84fc8a4e2f2233c9abff Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 18 May 2022 15:51:04 +0200 Subject: [PATCH 0532/1921] fix input channel mismatch for callsnv --- workflows/raredisease.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e1133bdd..b19580bf 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -164,6 +164,7 @@ workflow RAREDISEASE { ch_references.genome_fai, ch_references.known_dbsnp, ch_references.known_dbsnp_tbi, + ch_call_interval, ch_ml_model, CHECK_INPUT.out.case_info ) From 1f91aaa54f09a2f7c5f331f584d2145bab0376d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 18 May 2022 16:08:56 +0200 Subject: [PATCH 0533/1921] Update conf/genomes.config Co-authored-by: Anders Jemt --- conf/genomes.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/genomes.config b/conf/genomes.config index 53f2f180..5dda2207 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -30,7 +30,7 @@ params { 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - bwa = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.{amb,ann,bwt,pac,sa}" + bwa = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" From eca1291337ea3759685e8f31c79535df564c3227 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 19 May 2022 13:22:11 +0200 Subject: [PATCH 0534/1921] add index --- modules/local/ensemblvep/main.nf | 2 +- .../local/annotate_structural_variants.nf | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index c2264d16..0094ae79 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -8,7 +8,7 @@ process ENSEMBLVEP { 'quay.io/biocontainers/ensembl-vep:105.0--pl5321h4a94de4_1' }" input: - tuple val(meta), path(vcf) + tuple val(meta), path(vcf), path(index) val genome val species val cache_version diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 673d93c1..07bd8902 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,10 +2,11 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' +include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' +include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -55,8 +56,17 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) - ENSEMBLVEP_SV(BCFTOOLS_VIEW.out.vcf, + TABIX_SV_ANNO (BCFTOOLS_VIEW.out.vcf) + ch_versions = ch_versions.mix(TABIX_SV_ANNO.out.versions) + + BCFTOOLS_VIEW.out + .vcf + .join(TABIX_SV_ANNO.out.tbi) + .set { ch_vep_in } + + ENSEMBLVEP_SV(ch_vep_in, vep_genome, "homo_sapiens", vep_cache_version, From 1b67c275bf366dc571119bf82be33b28c58cc998 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Wed, 25 May 2022 10:32:32 +0200 Subject: [PATCH 0535/1921] removes tmp fix from local copy of markduplicates --- modules/nf-core/modules/picard/markduplicates/main.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 5a30974a..e754a587 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -29,8 +29,6 @@ process PICARD_MARKDUPLICATES { avail_mem = task.memory.giga } """ - mkdir tmp - export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp picard \\ -Xmx${avail_mem}g \\ MarkDuplicates \\ From 0ac1dd378ff5fa712c38e30bae3964f5b40e6fe1 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 27 May 2022 11:57:11 +0200 Subject: [PATCH 0536/1921] Adds gens_switch to nextflow_schema.json --- nextflow_schema.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 186aa161..19e8dc66 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -214,6 +214,12 @@ "default": false, "description": "Specifies whether or not to run annotate structural variant subworkflow.", "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" } } }, From fc23319e5b3c07e0a0dff2c3e27afa941d9a4de5 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Fri, 27 May 2022 12:08:25 +0200 Subject: [PATCH 0537/1921] Run prettier --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49783c0c..3caefff5 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Note that it is possible to include/exclude certain tools or steps. ### Work in progress flowchart -![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) +![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 51f3a8c13edd4bd977fb4e06d67e8c28dc3a385a Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Wed, 1 Jun 2022 08:16:22 +0200 Subject: [PATCH 0538/1921] Changes CALL_SNV_DEEPVARIANT to CALL_SNV --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 83836751..735bb207 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -186,7 +186,7 @@ workflow RAREDISEASE { if (params.gens_switch) { GENS ( ch_mapped.bam_bai, - CALL_SNV_DEEPVARIANT.out.vcf, + CALL_SNV.out.vcf, ch_references.genome_fasta, ch_references.genome_fai, file(params.gens_interval_list), From 38ac11b7435dcadee34f4693c98cb32d417637b7 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 1 Jun 2022 10:37:22 +0200 Subject: [PATCH 0539/1921] Created wgsmetricsalgo.nf from datametrics.nf --- modules/local/sentieon/wgsmetricsalgo.nf | 68 ++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 modules/local/sentieon/wgsmetricsalgo.nf diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf new file mode 100644 index 00000000..012054b7 --- /dev/null +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -0,0 +1,68 @@ +process SENTIEON_DATAMETRICS { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path fai + + output: + tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics + tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics + tuple val(meta), path('*gc_summary.txt') , emit: gc_summary + tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics + tuple val(meta), path('*aln_metrics.txt') , emit: aln_metrics + tuple val(meta), path('*is_metrics.txt') , emit: is_metrics + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + 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" + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + fi + + sentieon \\ + driver \\ + -t $task.cpus \\ + -r $fasta \\ + $input \\ + $args \\ + --algo GCBias --summary ${prefix}_gc_summary.txt ${prefix}_gc_metrics.txt \\ + --algo MeanQualityByCycle ${prefix}_mq_metrics.txt \\ + --algo QualDistribution ${prefix}_qd_metrics.txt \\ + --algo InsertSizeMetricAlgo ${prefix}_is_metrics.txt \\ + --algo AlignmentStat ${prefix}_aln_metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_mq_metrics.txt + touch ${prefix}_qd_metrics.txt + touch ${prefix}_gc_summary.txt + touch ${prefix}_gc_metrics.txt + touch ${prefix}_aln_metrics.txt + touch ${prefix}_is_metrics.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} From fc29d3093424f9d696011236ed43f7a167a4fc95 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 1 Jun 2022 10:52:57 +0200 Subject: [PATCH 0540/1921] Modified to wgsmetricsalgo algorithm --- modules/local/sentieon/wgsmetricsalgo.nf | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 012054b7..f3935665 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -1,6 +1,6 @@ process SENTIEON_DATAMETRICS { tag "$meta.id" - label 'process_high' + label 'process_medium' label 'sentieon' secret 'SENTIEON_LICENSE_BASE64' @@ -11,12 +11,7 @@ process SENTIEON_DATAMETRICS { path fai output: - tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics - tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics - tuple val(meta), path('*gc_summary.txt') , emit: gc_summary - tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics - tuple val(meta), path('*aln_metrics.txt') , emit: aln_metrics - tuple val(meta), path('*is_metrics.txt') , emit: is_metrics + tuple val(meta), path('*wgs_metrics.txt') , emit: wgs_metrics path "versions.yml" , emit: versions when: @@ -38,11 +33,7 @@ process SENTIEON_DATAMETRICS { -r $fasta \\ $input \\ $args \\ - --algo GCBias --summary ${prefix}_gc_summary.txt ${prefix}_gc_metrics.txt \\ - --algo MeanQualityByCycle ${prefix}_mq_metrics.txt \\ - --algo QualDistribution ${prefix}_qd_metrics.txt \\ - --algo InsertSizeMetricAlgo ${prefix}_is_metrics.txt \\ - --algo AlignmentStat ${prefix}_aln_metrics.txt + --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt \\ cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -53,12 +44,7 @@ process SENTIEON_DATAMETRICS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_mq_metrics.txt - touch ${prefix}_qd_metrics.txt - touch ${prefix}_gc_summary.txt - touch ${prefix}_gc_metrics.txt - touch ${prefix}_aln_metrics.txt - touch ${prefix}_is_metrics.txt + touch ${prefix}_wgs_metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": From fa67309937b6e58a88005105f445e04fd16a30a6 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Wed, 1 Jun 2022 15:49:31 +0200 Subject: [PATCH 0541/1921] feat started working on subworkflow --- subworkflows/local/align_MT.nf | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 subworkflows/local/align_MT.nf diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf new file mode 100644 index 00000000..7d062594 --- /dev/null +++ b/subworkflows/local/align_MT.nf @@ -0,0 +1,45 @@ +// +// Prepare bam files for MT allignment +// + +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' + +workflow ALIGN_MT { + take: + fastq // TO DO d: and file: bam index: bam.bai + + main: + ch_versions = Channel.empty() + + // Outputs bam files + BWAMEM2_MEM_MT ( fastq ) + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + + // Merges bam files + GATK4_MERGEBAMALIGNMENT_MT ( BWAMEM2_MEM_MT.out.bam ) + ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + + // Marks duplicates + PICARD_MARKDUPLICATES_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) + + // Calls variants with Mutect2 + GATK4_MUTECT2_MT ( PICARD_MARKDUPLICATES_MT.out.bam ) + ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) + + // Haplocheck + HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) + ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + + + emit: + vcf = GATK4_MUTECT2_MT.out.vcf + tbi = GATK4_MUTECT2_MT.out.tbi + txt = HAPLOCHECK_MT.out.txt + html = HAPLOCHECK_MT.out.html + versions = ch_versions // channel: [ versions.yml ] +} From 981fb572833b0896309c80458a737ce03661c73e Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Wed, 1 Jun 2022 16:44:54 +0200 Subject: [PATCH 0542/1921] feat added subw to main and added input data --- subworkflows/local/align_MT.nf | 9 ++++++--- workflows/raredisease.nf | 13 ++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 7d062594..9827a1b0 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -11,16 +11,19 @@ include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../mo workflow ALIGN_MT { take: fastq // TO DO d: and file: bam index: bam.bai + fasta + fai + dict main: ch_versions = Channel.empty() // Outputs bam files - BWAMEM2_MEM_MT ( fastq ) + BWAMEM2_MEM_MT ( fastq , fasta, true) ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) // Merges bam files - GATK4_MERGEBAMALIGNMENT_MT ( BWAMEM2_MEM_MT.out.bam ) + GATK4_MERGEBAMALIGNMENT_MT ( BWAMEM2_MEM_MT.out.bam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) // Marks duplicates @@ -28,7 +31,7 @@ workflow ALIGN_MT { ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Calls variants with Mutect2 - GATK4_MUTECT2_MT ( PICARD_MARKDUPLICATES_MT.out.bam ) + GATK4_MUTECT2_MT ( PICARD_MARKDUPLICATES_MT.out.bam, fasta, fai, dict, [], [], [], [] ) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b19580bf..71bf39b2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -77,6 +77,7 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' +include { ALIGN_MT } from '../subworkflows/local/align_MT' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -196,13 +197,23 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(ch_sv_annotate.versions) } - // STEP 2.1: MT CALLING + // STEP 2.1: PREPARING MT ALIGNMENT PREPARE_MT_ALIGNMENT ( ch_mapped.bam_bai ) ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) + // STEP 2.2: MT ALLIGNMENT + + ALIGN_MT ( + PREPARE_MT_ALIGNMENT.out.fastq, + ch_references.genome_fasta, + ch_references.genome_fai, + ch_references.sequence_dict + ) + ch_versions = ch_versions.mix(ALIGN_MT.out.versions) + // STEP 3: VARIANT ANNOTATION ch_dv_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) From 91ddc66b631b77752b7d01e1162f226ff542ea4c Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 15:59:13 +0200 Subject: [PATCH 0543/1921] Implements suggested change to publishDir --- conf/modules.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index a533aeb6..ee26aefd 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -489,7 +489,8 @@ process { withName: GENS { publishDir = [ path: { "${params.outdir}/gens" }, - mode: 'copy' + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } } From 3906da54aefc400899b44751e96cb1ff77b6b1a6 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:00:36 +0200 Subject: [PATCH 0544/1921] Removes gatk4/haplotypecaller module --- modules.json | 5 +- .../modules/gatk4/haplotypecaller/main.nf | 54 ------------- .../modules/gatk4/haplotypecaller/meta.yml | 75 ------------------- 3 files changed, 1 insertion(+), 133 deletions(-) delete mode 100644 modules/nf-core/modules/gatk4/haplotypecaller/main.nf delete mode 100644 modules/nf-core/modules/gatk4/haplotypecaller/meta.yml diff --git a/modules.json b/modules.json index 6c518b3e..f882a05a 100644 --- a/modules.json +++ b/modules.json @@ -51,9 +51,6 @@ "gatk4/createsequencedictionary": { "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, - "gatk4/haplotypecaller": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" - }, "gatk4/intervallisttools": { "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, @@ -137,4 +134,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/gatk4/haplotypecaller/main.nf b/modules/nf-core/modules/gatk4/haplotypecaller/main.nf deleted file mode 100644 index 33871fcf..00000000 --- a/modules/nf-core/modules/gatk4/haplotypecaller/main.nf +++ /dev/null @@ -1,54 +0,0 @@ -process GATK4_HAPLOTYPECALLER { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" - - input: - tuple val(meta), path(input), path(input_index), path(intervals) - path fasta - path fai - path dict - path dbsnp - path dbsnp_tbi - - output: - tuple val(meta), path("*.vcf.gz"), emit: vcf - tuple val(meta), path("*.tbi") , emit: tbi - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def interval_option = intervals ? "-L ${intervals}" : "" - def dbsnp_option = dbsnp ? "-D ${dbsnp}" : "" - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK HaplotypeCaller] 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" \\ - HaplotypeCaller \\ - -R $fasta \\ - -I $input \\ - ${dbsnp_option} \\ - ${interval_option} \\ - -O ${prefix}.vcf.gz \\ - $args \\ - --tmp-dir . - - 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/modules/gatk4/haplotypecaller/meta.yml b/modules/nf-core/modules/gatk4/haplotypecaller/meta.yml deleted file mode 100644 index 81851a96..00000000 --- a/modules/nf-core/modules/gatk4/haplotypecaller/meta.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: gatk4_haplotypecaller -description: Call germline SNPs and indels via local re-assembly of haplotypes -keywords: - - gatk4 - - haplotypecaller - - haplotype -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 ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - intervals: - type: file - description: Bed file with the genomic regions included in the library (optional) - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" - - dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - dbsnp: - type: file - description: VCF file containing known sites (optional) - - dbsnp_tbi: - type: file - description: VCF index of dbsnp (optional) - -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 VCF file - pattern: "*.vcf.gz" - - tbi: - type: file - description: Index of VCF file - pattern: "*.vcf.gz.tbi" - -authors: - - "@suzannejin" - - "@FriederikeHanssen" From 7074cf44a988c154099e68ce51248b536c03c0b2 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:01:58 +0200 Subject: [PATCH 0545/1921] Removes debug lines --- subworkflows/local/gens.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 5f7b0616..23511954 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -24,9 +24,6 @@ workflow GENS { [meta, bam, bai, []] }.set { ch_bam } - bam.view() - ch_bam.view() - COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) From 73f108bae67dfc86eb7b85f4fcd0ca48f35f096f Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:03:35 +0200 Subject: [PATCH 0546/1921] Removes unused mapping --- subworkflows/local/gens.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 23511954..e88b27f6 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -20,9 +20,6 @@ workflow GENS { main: ch_versions = Channel.empty() - bam.map { meta, bam, bai -> - [meta, bam, bai, []] - }.set { ch_bam } COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) From a67d2cf0eedd1942f12ec635260649f36fa78dfd Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:05:46 +0200 Subject: [PATCH 0547/1921] Implements suggestions --- modules/local/gens/main.nf | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 9ea940b4..e8033e9c 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -2,10 +2,7 @@ process GENS { tag "$meta.id" label 'process_medium' - //conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'raysloks/gens_preproc:1.0.1' : - 'raysloks/gens_preproc:1.0.1' }" + container 'raysloks/gens_preproc:1.0.1' input: tuple val(meta), path(read_counts) From 96f9fc6816fcb9f9e228ea5ec9832bb111a57ff3 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:14:38 +0200 Subject: [PATCH 0548/1921] Implements suggestion --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index ee26aefd..33b9e890 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -482,7 +482,7 @@ process { ] } - withName: GATK4_COLLECTREADCOUNTS { + withName: '.*GENS:COLLECTREADCOUNTS' { ext.args = '--interval-merging-rule OVERLAPPING_ONLY' } From 52a45822ec082730ad08987a1f67781d6f806da1 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:33:47 +0200 Subject: [PATCH 0549/1921] Adds gens params to nextflow_schema.json --- nextflow_schema.json | 67 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index a5420d3b..12742886 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", @@ -200,6 +203,30 @@ "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", + "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", + "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": { + "type": "string", + "format": "file-path", + "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 } } }, @@ -214,7 +241,11 @@ "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" + ] }, "annotate_sv_switch": { "type": "boolean", @@ -241,7 +272,10 @@ "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", @@ -276,14 +310,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" + ] } } }, @@ -318,7 +359,10 @@ "default": "104", "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": ["104", "105"] + "enum": [ + "104", + "105" + ] } } }, @@ -429,7 +473,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": { @@ -528,4 +579,4 @@ "$ref": "#/definitions/generic_options" } ] -} +} \ No newline at end of file From 7c99fb65cb4fe367e39755781478cdf74191db47 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:40:17 +0200 Subject: [PATCH 0550/1921] Adds stubs to the new modules --- modules/local/gatk4/collectreadcounts/main.nf | 11 +++++++++++ modules/local/gatk4/denoisereadcounts/main.nf | 12 ++++++++++++ modules/local/gens/main.nf | 14 ++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index 598a8676..de6fed4f 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -42,4 +42,15 @@ process GATK4_COLLECTREADCOUNTS { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.hdf5 + + 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/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index a22aefdb..8ca2e8a7 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -39,4 +39,16 @@ process GATK4_DENOISEREADCOUNTS { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.standardizedCR.tsv + touch ${prefix}.denoisedCR.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/local/gens/main.nf b/modules/local/gens/main.nf index e8033e9c..f6cd8eb5 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -34,4 +34,18 @@ process GENS { generate_gens_data.pl: \$(echo \$(generate_gens_data.pl --version 2>&1)) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.baf.bed.gz + touch ${prefix}.baf.bed.gz.tbi + touch ${prefix}.cov.bed.gz + touch ${prefix}.cov.bed.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + generate_gens_data.pl: \$(echo \$(generate_gens_data.pl --version 2>&1)) + END_VERSIONS + """ } From 1aca1165d81ed7e9b4691bf6ee96f27d0ee137f6 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:44:35 +0200 Subject: [PATCH 0551/1921] Adds default: null to new params --- nextflow_schema.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 12742886..f70b9023 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -207,6 +207,7 @@ "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.", @@ -215,6 +216,7 @@ "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.", @@ -223,6 +225,7 @@ "gens_gnomad_pos": { "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.", From a3cb5ae5be89c226a6d43f7cfe7a1b166a7c64db Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 16:54:00 +0200 Subject: [PATCH 0552/1921] Run prettier --- modules.json | 2 +- nextflow_schema.json | 43 ++++++++----------------------------------- 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/modules.json b/modules.json index f882a05a..60f0b643 100644 --- a/modules.json +++ b/modules.json @@ -134,4 +134,4 @@ } } } -} \ No newline at end of file +} diff --git a/nextflow_schema.json b/nextflow_schema.json index f70b9023..98e67b1a 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", @@ -244,11 +241,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"] }, "annotate_sv_switch": { "type": "boolean", @@ -275,10 +268,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", @@ -313,21 +303,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"] } } }, @@ -362,10 +345,7 @@ "default": "104", "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": [ - "104", - "105" - ] + "enum": ["104", "105"] } } }, @@ -476,14 +456,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": { @@ -582,4 +555,4 @@ "$ref": "#/definitions/generic_options" } ] -} \ No newline at end of file +} From 7307805baaa79d297ec704ec1d1093829f36fc21 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Tue, 7 Jun 2022 17:05:48 +0200 Subject: [PATCH 0553/1921] Adds new params to main.nf --- main.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main.nf b/main.nf index 84323d7c..d9dda4c9 100644 --- a/main.nf +++ b/main.nf @@ -34,6 +34,9 @@ params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_c params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') params.vep_cache = WorkflowMain.getGenomeAttribute(params, 'vep_cache') +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') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 23f613b77897396e5b8fe99af0d17e7e5955f7ed Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:30:22 +0200 Subject: [PATCH 0554/1921] add roh --- conf/modules.config | 11 +++- modules.json | 3 + modules/nf-core/modules/bcftools/roh/main.nf | 61 +++++++++++++++++++ modules/nf-core/modules/bcftools/roh/meta.yml | 55 +++++++++++++++++ subworkflows/local/annotate_snvs.nf | 49 +++++++++++++++ subworkflows/nf-core/annotate_vcfanno.nf | 24 -------- workflows/raredisease.nf | 20 +++--- 7 files changed, 191 insertions(+), 32 deletions(-) create mode 100644 modules/nf-core/modules/bcftools/roh/main.nf create mode 100644 modules/nf-core/modules/bcftools/roh/meta.yml create mode 100644 subworkflows/local/annotate_snvs.nf delete mode 100644 subworkflows/nf-core/annotate_vcfanno.nf diff --git a/conf/modules.config b/conf/modules.config index 4d1038db..47e9f6c3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -530,7 +530,16 @@ process { // process { - withName: '.*ANNOTATE_VCFANNO:VCFANNO' { + withName: '.*ANNOTATE_SNVS:VCFANNO' { + publishDir = [ + path: { "${params.outdir}/variant_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { + ext.args = { "--samples ${meta.id}" } publishDir = [ path: { "${params.outdir}/variant_annotation" }, mode: params.publish_dir_mode, diff --git a/modules.json b/modules.json index 60f0b643..41606171 100644 --- a/modules.json +++ b/modules.json @@ -6,6 +6,9 @@ "bcftools/norm": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "bcftools/roh": { + "git_sha": "b0dba3ee7543dc89a00575fb619408de97cd889d" + }, "bcftools/view": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, diff --git a/modules/nf-core/modules/bcftools/roh/main.nf b/modules/nf-core/modules/bcftools/roh/main.nf new file mode 100644 index 00000000..890b6fad --- /dev/null +++ b/modules/nf-core/modules/bcftools/roh/main.nf @@ -0,0 +1,61 @@ +process BCFTOOLS_ROH { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': + 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + + input: + tuple val(meta), path(vcf), path(tbi) + path af_file + path genetic_map + path regions_file + path samples_file + path targets_file + + output: + tuple val(meta), path("*.roh"), emit: roh + 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 af_read = af_file ? "--AF-file ${af_file}" : '' + def gen_map = genetic_map ? "--genetic-map ${genetic_map}" : '' + def reg_file = regions_file ? "--regions-file ${regions_file}" : '' + def samp_file = samples_file ? "--samples-file ${samples_file}" : '' + def targ_file = targets_file ? "--targets-file ${targets_file}" : '' + """ + bcftools \\ + roh \\ + $args \\ + $af_read \\ + $gen_map \\ + $reg_file \\ + $samp_file \\ + $targ_file \\ + -o ${prefix}.roh \\ + $vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.roh + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bcftools/roh/meta.yml b/modules/nf-core/modules/bcftools/roh/meta.yml new file mode 100644 index 00000000..fd03d4ce --- /dev/null +++ b/modules/nf-core/modules/bcftools/roh/meta.yml @@ -0,0 +1,55 @@ +name: "bcftools_roh" +description: A program for detecting runs of homo/autozygosity. Only bi-allelic sites are considered. +keywords: + - roh +tools: + - "roh": + description: "A program for detecting runs of homo/autozygosity. Only bi-allelic sites are considered." + homepage: https://www.htslib.org/ + documentation: http://www.htslib.org/doc/bcftools.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 ] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf,.vcf.gz}" + - af_file: + type: file + description: "Read allele frequencies from a tab-delimited file containing the columns: CHROM\tPOS\tREF,ALT\tAF." + - genetic_map: + type: file + description: "Genetic map in the format required also by IMPUTE2." + - regions_file: + type: file + description: "Regions can be specified either on command line or in a VCF, BED, or tab-delimited file (the default)." + - samples_file: + type: file + description: "File of sample names to include or exclude if prefixed with '^'." + - targets_file: + type: file + description: "Targets can be specified either on command line or in a VCF, BED, or tab-delimited file (the default)." + +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" + - roh: + type: file + description: Contains site-specific and/or per-region runs of homo/autozygosity calls. + pattern: "*.{roh}" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf new file mode 100644 index 00000000..9fcb2ce5 --- /dev/null +++ b/subworkflows/local/annotate_snvs.nf @@ -0,0 +1,49 @@ +// +// A subworkflow to annotate snvs +// + +include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' +include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' + + +workflow ANNOTATE_SNVS { + + take: + vcf + vcfanno_resource_dir + vcfanno_toml + vep_genome + vep_cache_version + vep_cache + fasta + gnomad_af + samples + + main: + ch_versions = Channel.empty() + ch_toml = file(vcfanno_toml) + + vcf.map { meta, vcf, idx -> + return [meta, []] + } + .set { ch_placeholder } + + VCFANNO (vcf, ch_placeholder, ch_toml, vcfanno_resource_dir) + ch_versions = ch_versions.mix(VCFANNO.out.versions) + + vcf.map { meta, vcf, idx -> + return [ vcf, idx ] + } + .set { ch_roh_vcfs} + + samples + .combine(ch_roh_vcfs) + .set { ch_roh_input } + + ch_roh_input.view() + BCFTOOLS_ROH (ch_roh_input, gnomad_af, [], [], [], []) + + emit: + vcf_ann = VCFANNO.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/nf-core/annotate_vcfanno.nf b/subworkflows/nf-core/annotate_vcfanno.nf deleted file mode 100644 index ce665ba5..00000000 --- a/subworkflows/nf-core/annotate_vcfanno.nf +++ /dev/null @@ -1,24 +0,0 @@ -// -// Annotate with VCFanno -// - -include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' - -workflow ANNOTATE_VCFANNO { - take: - toml // channel: path(toml) - vcf // channel: [ val(meta), path(vcf), path(tbi) ] - resource_dir // channel: path(resource_dir) - - main: - ch_versions = Channel.empty() - ch_toml = file(toml) - - ch_placeholder = vcf.map { meta, vcf, idx -> vcf = []; [meta, vcf] } - VCFANNO (vcf, ch_placeholder, ch_toml, resource_dir) - ch_versions = ch_versions.mix(VCFANNO.out.versions) - - emit: - annotated_vcf = VCFANNO.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b19580bf..29b16d12 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -50,9 +50,11 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // include { CHECK_INPUT } from '../subworkflows/local/check_input' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' +include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { ALIGN } from '../subworkflows/local/align' include { CALL_SNV } from '../subworkflows/local/call_snv' +include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -74,9 +76,7 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -204,14 +204,20 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) // STEP 3: VARIANT ANNOTATION - ch_dv_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) + ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) - ANNOTATE_VCFANNO ( + ANNOTATE_SNVS ( + ch_vcf, + ch_references.vcfanno_resources, params.vcfanno_toml, - ch_dv_vcf, - ch_references.vcfanno_resources + params.genome, + params.vep_cache_version, + params.vep_cache, + ch_references.genome_fasta, + ch_references.gnomad_vcf, + CHECK_INPUT.out.samples ) - ch_versions = ch_versions.mix(ANNOTATE_VCFANNO.out.versions) + ch_versions = ch_versions.mix(ANNOTATE_SNVS.out.versions) // // MODULE: Pipeline reporting From f3373e669fddfa49407ca862fbd19008e37a4f68 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 08:04:09 +0200 Subject: [PATCH 0555/1921] add comment --- subworkflows/local/annotate_snvs.nf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 9fcb2ce5..9fc83a3a 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -23,6 +23,9 @@ workflow ANNOTATE_SNVS { ch_versions = Channel.empty() ch_toml = file(vcfanno_toml) + // + // annotate vcfanno + // vcf.map { meta, vcf, idx -> return [meta, []] } @@ -31,6 +34,9 @@ workflow ANNOTATE_SNVS { VCFANNO (vcf, ch_placeholder, ch_toml, vcfanno_resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) + // + // annotate rhocall + // vcf.map { meta, vcf, idx -> return [ vcf, idx ] } @@ -41,7 +47,7 @@ workflow ANNOTATE_SNVS { .set { ch_roh_input } ch_roh_input.view() - BCFTOOLS_ROH (ch_roh_input, gnomad_af, [], [], [], []) + BCFTOOLS_ROH (ch_roh_input, gnomad_af.collect{it[1]}, [], [], [], []) emit: vcf_ann = VCFANNO.out.vcf From 7707b6da7b6be5a2483c0a2b185fcfd9548c7d07 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 08:13:41 +0200 Subject: [PATCH 0556/1921] remove view --- subworkflows/local/annotate_snvs.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 9fc83a3a..11cb7e58 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -46,7 +46,6 @@ workflow ANNOTATE_SNVS { .combine(ch_roh_vcfs) .set { ch_roh_input } - ch_roh_input.view() BCFTOOLS_ROH (ch_roh_input, gnomad_af.collect{it[1]}, [], [], [], []) emit: From 4a1b0e0069f9f63ee114e35a7b1988df2d165720 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:00:19 +0200 Subject: [PATCH 0557/1921] add tab file --- conf/genomes.config | 4 ++++ conf/modules.config | 9 ++++++++ main.nf | 2 ++ modules/nf-core/modules/bcftools/roh/main.nf | 2 +- nextflow_schema.json | 14 ++++++++++++ subworkflows/local/annotate_snvs.nf | 2 +- subworkflows/local/prepare_references.nf | 24 ++++++++++++++++---- 7 files changed, 51 insertions(+), 6 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 5dda2207..4a4c01fc 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -17,6 +17,8 @@ params { bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + gnomad_af = "" + gnomad_af_tbi = "" known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" @@ -34,6 +36,8 @@ params { bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" + gnomad_af_tbi = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" diff --git a/conf/modules.config b/conf/modules.config index 47e9f6c3..6533ac13 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -165,6 +165,15 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + + withName: '.*PREPARE_REFERENCES:TABIX_GNOMAD_AF' { + ext.args = '-s 1 -b 2 -e 2' + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } // diff --git a/main.nf b/main.nf index 84323d7c..775656f6 100644 --- a/main.nf +++ b/main.nf @@ -22,6 +22,8 @@ params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') +params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') +params.gnomad_tbi = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_tbi') 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') diff --git a/modules/nf-core/modules/bcftools/roh/main.nf b/modules/nf-core/modules/bcftools/roh/main.nf index 890b6fad..83ac4e65 100644 --- a/modules/nf-core/modules/bcftools/roh/main.nf +++ b/modules/nf-core/modules/bcftools/roh/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_ROH { input: tuple val(meta), path(vcf), path(tbi) - path af_file + tuple path(af_file), path(af_file_tbi) path genetic_map path regions_file path samples_file diff --git a/nextflow_schema.json b/nextflow_schema.json index 3f68b9ee..6a50cd32 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -101,6 +101,20 @@ "description": "Path to directory for gnomad vcf.", "help_text": "Path to the gnomad vcf file. If you don't provide one, gnomad annotations will not be used." }, + "gnomad_af": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-bezier-curve", + "description": "Path to the gnomad tab file with allele frequencies.", + "help_text": "Path to the gnomad tab file with CHR/START/REF,ALT/AF. Can be generated from gnomad annoations vcf" + }, + "gnomad_af_tbi": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-bezier-curve", + "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" + }, "known_dbsnp": { "type": "string", "format": "path", diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 11cb7e58..cb118f3b 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -46,7 +46,7 @@ workflow ANNOTATE_SNVS { .combine(ch_roh_vcfs) .set { ch_roh_input } - BCFTOOLS_ROH (ch_roh_input, gnomad_af.collect{it[1]}, [], [], [], []) + BCFTOOLS_ROH (ch_roh_input, gnomad_af, [], [], [], []) emit: vcf_ann = VCFANNO.out.vcf diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 6ab7ec2b..c98d8bd7 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -2,10 +2,11 @@ // Prepare reference files // -include { CHECK_BED } from './prepare_bed' -include { CHECK_VCF } from './prepare_vcf' -include { PREPARE_GENOME } from './prepare_genome' -include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/modules/tabix/tabix/main' +include { CHECK_BED } from './prepare_bed' +include { CHECK_VCF } from './prepare_vcf' +include { PREPARE_GENOME } from './prepare_genome' +include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/modules/tabix/tabix/main' +include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/modules/tabix/tabix/main' workflow PREPARE_REFERENCES { @@ -15,6 +16,8 @@ workflow PREPARE_REFERENCES { fasta // [mandatory] genome.fasta fai // [mandatory] genome.fai gnomad + gnomad_af + gnomad_af_tbi known_dbsnp known_dbsnp_tbi sentieonbwa_index @@ -63,6 +66,18 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(CHECK_VCF.out.versions) } + // Gnomad tab + ch_gnomad_af = Channel.empty() + if (!gnomad_af_tbi && gnomad_af) { + ch_gnomad_tab = [[id:'gnomad'], file(gnomad_af)] + TABIX_GNOMAD_AF(ch_gnomad_tab) + ch_gnomad_tbi = TABIX_GNOMAD_AF.out.tbi + ch_gnomad_af = ch_gnomad_tab.join(ch_gnomad_tbi) + ch_versions = ch_versions.mix(CHECK_VCF.out.versions) + } else if (!gnomad_af_tbi && gnomad_af) { + ch_gnomad_af = [[id:'gnomad'], file(gnomad_af), file(gnomad_af_tbi)] + } + // Target bed ch_target_bed = Channel.empty() ch_target_intervals = Channel.empty() @@ -90,6 +105,7 @@ workflow PREPARE_REFERENCES { known_dbsnp_tbi = ch_dbsnp_tbi gnomad_vcf = ch_gnomad_vcf gnomad_idx = ch_gnomad_idx + gnomad_af = ch_gnomad_af target_bed = ch_target_bed target_intervals = ch_target_intervals bait_intervals = ch_bait_intervals From 5ff2defbdfe49f35f20e4c9a4a396f78bdc4778c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:00:45 +0200 Subject: [PATCH 0558/1921] modify input to prepare references --- workflows/raredisease.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 29b16d12..9f808d32 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -112,6 +112,8 @@ workflow RAREDISEASE { params.fasta, params.fasta_fai, params.gnomad, + params.gnomad_af, + params.gnomad_af_tbi, params.known_dbsnp, params.known_dbsnp_tbi, params.sentieonbwa_index, @@ -214,7 +216,7 @@ workflow RAREDISEASE { params.vep_cache_version, params.vep_cache, ch_references.genome_fasta, - ch_references.gnomad_vcf, + ch_references.gnomad_af, CHECK_INPUT.out.samples ) ch_versions = ch_versions.mix(ANNOTATE_SNVS.out.versions) From a17e0e18d4a4cad9bf137691cb0fbf0ba22b34fe Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:29:24 +0200 Subject: [PATCH 0559/1921] fix variable name conflicts --- main.nf | 2 +- subworkflows/local/prepare_references.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/main.nf b/main.nf index 775656f6..dd0efcfe 100644 --- a/main.nf +++ b/main.nf @@ -23,7 +23,7 @@ params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') -params.gnomad_tbi = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_tbi') +params.gnomad_af_tbi = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_tbi') 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') diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index c98d8bd7..288cab2e 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -72,10 +72,10 @@ workflow PREPARE_REFERENCES { ch_gnomad_tab = [[id:'gnomad'], file(gnomad_af)] TABIX_GNOMAD_AF(ch_gnomad_tab) ch_gnomad_tbi = TABIX_GNOMAD_AF.out.tbi - ch_gnomad_af = ch_gnomad_tab.join(ch_gnomad_tbi) + ch_gnomad_af = ch_gnomad_tab.join(ch_gnomad_tbi).collect{ it -> return [it[1], it[2]]} ch_versions = ch_versions.mix(CHECK_VCF.out.versions) - } else if (!gnomad_af_tbi && gnomad_af) { - ch_gnomad_af = [[id:'gnomad'], file(gnomad_af), file(gnomad_af_tbi)] + } else if (gnomad_af_tbi && gnomad_af) { + ch_gnomad_af = [file(gnomad_af), file(gnomad_af_tbi)] } // Target bed From 30194ef8197c9633f07d253683ce5f01a5144784 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 15:12:27 +0200 Subject: [PATCH 0560/1921] revert rohcall --- modules/nf-core/modules/bcftools/roh/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/modules/bcftools/roh/main.nf b/modules/nf-core/modules/bcftools/roh/main.nf index 83ac4e65..890b6fad 100644 --- a/modules/nf-core/modules/bcftools/roh/main.nf +++ b/modules/nf-core/modules/bcftools/roh/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_ROH { input: tuple val(meta), path(vcf), path(tbi) - tuple path(af_file), path(af_file_tbi) + path af_file path genetic_map path regions_file path samples_file From 0fbe94bddd3b597e9d78005d07d4d2bd2c8387d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 15:34:13 +0200 Subject: [PATCH 0561/1921] update bcftools/roh --- modules.json | 2 +- modules/nf-core/modules/bcftools/roh/main.nf | 2 +- modules/nf-core/modules/bcftools/roh/meta.yml | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index 41606171..7ead82c1 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bcftools/roh": { - "git_sha": "b0dba3ee7543dc89a00575fb619408de97cd889d" + "git_sha": "c079ee20250f5676c53b145fdd00f9defe91f112" }, "bcftools/view": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" diff --git a/modules/nf-core/modules/bcftools/roh/main.nf b/modules/nf-core/modules/bcftools/roh/main.nf index 890b6fad..83ac4e65 100644 --- a/modules/nf-core/modules/bcftools/roh/main.nf +++ b/modules/nf-core/modules/bcftools/roh/main.nf @@ -9,7 +9,7 @@ process BCFTOOLS_ROH { input: tuple val(meta), path(vcf), path(tbi) - path af_file + tuple path(af_file), path(af_file_tbi) path genetic_map path regions_file path samples_file diff --git a/modules/nf-core/modules/bcftools/roh/meta.yml b/modules/nf-core/modules/bcftools/roh/meta.yml index fd03d4ce..fa0fd088 100644 --- a/modules/nf-core/modules/bcftools/roh/meta.yml +++ b/modules/nf-core/modules/bcftools/roh/meta.yml @@ -23,6 +23,9 @@ input: - af_file: type: file description: "Read allele frequencies from a tab-delimited file containing the columns: CHROM\tPOS\tREF,ALT\tAF." + - af_file_tbi: + type: file + description: "tbi index of af_file." - genetic_map: type: file description: "Genetic map in the format required also by IMPUTE2." From c3dd6690ed1f8ab214a0cc8b8dd0fc5af4381a48 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 15:39:08 +0200 Subject: [PATCH 0562/1921] prettier --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49783c0c..3caefff5 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Note that it is possible to include/exclude certain tools or steps. ### Work in progress flowchart -![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) +![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From e80b143bfc18843dd7d7e20b0e4f5971cb969909 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Jun 2022 15:57:49 +0200 Subject: [PATCH 0563/1921] fix spacing --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 6533ac13..1a8e0d19 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -547,7 +547,7 @@ process { ] } - withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { + withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { ext.args = { "--samples ${meta.id}" } publishDir = [ path: { "${params.outdir}/variant_annotation" }, From 1d5529b00e26ea27d4cdd6ed12ed3c72a62ddde3 Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Thu, 9 Jun 2022 09:35:21 +0200 Subject: [PATCH 0564/1921] Removes meta_vcf --- modules/local/gens/main.nf | 6 +++--- subworkflows/local/gens.nf | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index f6cd8eb5..70671ee8 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -6,12 +6,12 @@ process GENS { input: tuple val(meta), path(read_counts) - tuple val(meta_vcf), path(vcf) - path gnomad_positions + tuple path(vcf) + path gnomad_positions output: tuple val(meta), path('*.cov.bed.gz'), emit: cov - tuple val(meta_vcf), path('*.baf.bed.gz'), emit: baf + tuple val(meta), path('*.baf.bed.gz'), emit: baf path "versions.yml" , emit: versions script: diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index e88b27f6..f4dd6f3b 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -27,7 +27,7 @@ workflow GENS { DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions) - GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, vcf, gnomad_pos ) + GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, vcf.map { meta, vcf -> vcf }, gnomad_pos ) ch_versions = ch_versions.mix(GENS_GENERATE.out.versions) emit: From 991ad1970a02770753d4f7dd280b9bd8afb4b43d Mon Sep 17 00:00:00 2001 From: Emil Bertilsson Date: Thu, 9 Jun 2022 09:39:21 +0200 Subject: [PATCH 0565/1921] Fixes single element tuple --- modules/local/gens/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 70671ee8..f4e113c5 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -6,7 +6,7 @@ process GENS { input: tuple val(meta), path(read_counts) - tuple path(vcf) + path vcf path gnomad_positions output: From 9bf1bf193fc0abc773bd36d39b417a11b3dd3dee Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Jun 2022 17:16:59 +0200 Subject: [PATCH 0566/1921] update readme --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index e19d7301..1ef9bcba 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,6 @@ > > You can follow the work in the [dev](https://github.com/nf-core/raredisease/tree/dev) branch. - - **nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for call and score variants from WGS/WES of rare disease patients. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! From b0eed811daf391b3d9ab80faca50f94a4ccc87aa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Jun 2022 17:33:03 +0200 Subject: [PATCH 0567/1921] install rhocall --- modules.json | 3 ++ .../nf-core/modules/rhocall/annotate/main.nf | 51 ++++++++++++++++++ .../nf-core/modules/rhocall/annotate/meta.yml | 54 +++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 modules/nf-core/modules/rhocall/annotate/main.nf create mode 100644 modules/nf-core/modules/rhocall/annotate/meta.yml diff --git a/modules.json b/modules.json index 7ead82c1..7fb17a8a 100644 --- a/modules.json +++ b/modules.json @@ -90,6 +90,9 @@ "qualimap/bamqc": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "rhocall/annotate": { + "git_sha": "17a4e931427b5b144c0d0227a3ea49347ba7457a" + }, "samtools/faidx": { "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, diff --git a/modules/nf-core/modules/rhocall/annotate/main.nf b/modules/nf-core/modules/rhocall/annotate/main.nf new file mode 100644 index 00000000..95d647b1 --- /dev/null +++ b/modules/nf-core/modules/rhocall/annotate/main.nf @@ -0,0 +1,51 @@ +process RHOCALL_ANNOTATE { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::rhocall=0.5.1" : null) + 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' }" + + input: + tuple val(meta), path(vcf), path(tbi) + tuple val(meta), path(roh) + path bed + + output: + tuple val(meta), path("*_rhocall.vcf"), 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 az_bed = bed ? "-b ${bed}" : '' + """ + rhocall \\ + annotate \\ + $args \\ + $az_bed \\ + -r $roh \\ + -o ${prefix}_rhocall.vcf \\ + $vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rhocall: \$(echo \$(rhocall --version 2>&1) | sed 's/rhocall, version //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_rhocall.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rhocall: \$(echo \$(rhocall --version 2>&1) | sed 's/rhocall, version //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/rhocall/annotate/meta.yml b/modules/nf-core/modules/rhocall/annotate/meta.yml new file mode 100644 index 00000000..4ece9d2b --- /dev/null +++ b/modules/nf-core/modules/rhocall/annotate/meta.yml @@ -0,0 +1,54 @@ +name: "rhocall_annotate" +description: "Markup VCF file using rho-calls." +keywords: + - roh + - rhocall +tools: + - "rhocall": + description: "Call regions of homozygosity and make tentative UPD calls." + homepage: "https://github.com/dnil/rhocall" + documentation: "https://github.com/dnil/rhocall" + tool_dev_url: "https://github.com/dnil" + doi: "" + licence: "['GPL v3']" + +input: + - 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}" + - tbi: + type: file + description: vcf index file + pattern: "*.{tbi}" + - roh: + type: file + description: Bcftools roh style TSV file with CHR,POS,AZ,QUAL + pattern: "*.{roh}" + - bed: + type: file + description: BED file with AZ windows. + pattern: "*.{bed}" + +output: + - 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}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@ramprasadn" From ed57b2020935cad1aa22631cb8bbcddb342ba489 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Jun 2022 18:04:57 +0200 Subject: [PATCH 0568/1921] add rhocall to subworkflow --- conf/modules.config | 11 ++++++++++- subworkflows/local/annotate_snvs.nf | 22 ++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 1a8e0d19..c323775e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -548,7 +548,16 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { - ext.args = { "--samples ${meta.id}" } + ext.args = { "--samples ${meta.id} --skip-indels " } + publishDir = [ + path: { "${params.outdir}/variant_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { + ext.args = { "--v14 " } publishDir = [ path: { "${params.outdir}/variant_annotation" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index cb118f3b..5376bbc6 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,8 +2,9 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' -include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' +include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' +include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' +include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' workflow ANNOTATE_SNVS { @@ -43,11 +44,28 @@ workflow ANNOTATE_SNVS { .set { ch_roh_vcfs} 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, 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} + + RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) + emit: vcf_ann = VCFANNO.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] From 7c3a557fe26c7f926346b672a4bc8b6392cb75d4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Jun 2022 22:48:40 +0200 Subject: [PATCH 0569/1921] change output --- 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 5376bbc6..ed91a430 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -67,6 +67,6 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) emit: - vcf_ann = VCFANNO.out.vcf + vcf_ann = RHOCALL_ANNOTATE.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 13784cf87a2ba895ad7b2f49c1a25ef8c51144f8 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Tue, 14 Jun 2022 14:09:19 +0200 Subject: [PATCH 0570/1921] feat installed modules and updated markdup and bwamem2 --- modules.json | 13 ++- .../modules/gatk4/mergebamalignment/main.nf | 57 ++++++++++++ .../modules/gatk4/mergebamalignment/meta.yml | 46 ++++++++++ modules/nf-core/modules/gatk4/mutect2/main.nf | 74 +++++++++++++++ .../nf-core/modules/gatk4/mutect2/meta.yml | 89 +++++++++++++++++++ modules/nf-core/modules/haplocheck/main.nf | 44 +++++++++ modules/nf-core/modules/haplocheck/meta.yml | 55 ++++++++++++ .../modules/picard/markduplicates/main.nf | 12 +-- 8 files changed, 382 insertions(+), 8 deletions(-) create mode 100644 modules/nf-core/modules/gatk4/mergebamalignment/main.nf create mode 100644 modules/nf-core/modules/gatk4/mergebamalignment/meta.yml create mode 100644 modules/nf-core/modules/gatk4/mutect2/main.nf create mode 100644 modules/nf-core/modules/gatk4/mutect2/meta.yml create mode 100644 modules/nf-core/modules/haplocheck/main.nf create mode 100644 modules/nf-core/modules/haplocheck/meta.yml diff --git a/modules.json b/modules.json index 60f0b643..1b497897 100644 --- a/modules.json +++ b/modules.json @@ -54,6 +54,12 @@ "gatk4/intervallisttools": { "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, + "gatk4/mergebamalignment": { + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" + }, + "gatk4/mutect2": { + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" + }, "gatk4/revertsam": { "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273" }, @@ -63,6 +69,9 @@ "glnexus": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "haplocheck": { + "git_sha": "f5615c3db63a2bda7a1dbfaeae447cac3161d7b9" + }, "manta/germline": { "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243" }, @@ -79,7 +88,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/markduplicates": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6" }, "picard/sortvcf": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" @@ -134,4 +143,4 @@ } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/gatk4/mergebamalignment/main.nf b/modules/nf-core/modules/gatk4/mergebamalignment/main.nf new file mode 100644 index 00000000..ff51de06 --- /dev/null +++ b/modules/nf-core/modules/gatk4/mergebamalignment/main.nf @@ -0,0 +1,57 @@ +process GATK4_MERGEBAMALIGNMENT { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + + input: + tuple val(meta), path(aligned), path(unmapped) + path fasta + path dict + + output: + tuple val(meta), path('*.bam'), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK MergeBamAlignment] 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" MergeBamAlignment \\ + --UNMAPPED_BAM $unmapped \\ + --ALIGNED_BAM $aligned \\ + --OUTPUT ${prefix}.bam \\ + --REFERENCE_SEQUENCE $fasta \\ + --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}.bam + + 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/modules/gatk4/mergebamalignment/meta.yml b/modules/nf-core/modules/gatk4/mergebamalignment/meta.yml new file mode 100644 index 00000000..b4bff490 --- /dev/null +++ b/modules/nf-core/modules/gatk4/mergebamalignment/meta.yml @@ -0,0 +1,46 @@ +name: gatk4_mergebamalignment +description: Merge unmapped with mapped BAM files +keywords: + - bam + - merge +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'] + - aligned: + type: file + description: The aligned bam file + pattern: "*.{bam}" + - unaligned: + type: file + description: The unmaped bam file + pattern: "*.{bam}" + - fasta: + type: file + description: The reference fasta file + - dict: + type: file + description: GATK sequence dictionary +output: + - bam: + type: file + description: The merged bam file + pattern: "*.bam" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/modules/gatk4/mutect2/main.nf b/modules/nf-core/modules/gatk4/mutect2/main.nf new file mode 100644 index 00000000..abec0d73 --- /dev/null +++ b/modules/nf-core/modules/gatk4/mutect2/main.nf @@ -0,0 +1,74 @@ +process GATK4_MUTECT2 { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_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 + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi + tuple val(meta), path("*.stats") , emit: stats + tuple val(meta), path("*.f1r2.tar.gz"), optional:true, emit: f1r2 + 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 = input.collect{ "--input $it"}.join(" ") + def interval_command = intervals ? "--intervals $intervals" : "" + def pon_command = panel_of_normals ? "--panel-of-normals $panel_of_normals" : "" + def gr_command = germline_resource ? "--germline-resource $germline_resource" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK Mutect2] 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" Mutect2 \\ + $inputs \\ + --output ${prefix}.vcf.gz \\ + --reference $fasta \\ + $pon_command \\ + $gr_command \\ + $interval_command \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + touch ${prefix}.vcf.gz.stats + touch ${prefix}.f1r2.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/modules/gatk4/mutect2/meta.yml b/modules/nf-core/modules/gatk4/mutect2/meta.yml new file mode 100644 index 00000000..aa0a02aa --- /dev/null +++ b/modules/nf-core/modules/gatk4/mutect2/meta.yml @@ -0,0 +1,89 @@ +name: gatk4_mutect2 +description: Call somatic SNVs and indels via local assembly of haplotypes. +keywords: + - gatk4 + - mutect2 + - haplotype + - somatic +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'] + - input: + type: list + description: list of BAM files, also able to take CRAM as an input + pattern: "*.{bam/cram}" + - input_index: + type: list + description: list of BAM file indexes, also able to take CRAM indexes as an input + pattern: "*.{bam.bai/cram.crai}" + - intervals: + type: File/string + description: Specify region the tools is run on. + pattern: ".{bed,interval_list}/chrM" + - 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" + - germline_resource: + type: file + description: Population vcf of germline sequencing, containing allele fractions. + pattern: "*.vcf.gz" + - germline_resource_tbi: + type: file + description: Index file for the germline resource. + pattern: "*.vcf.gz.tbi" + - panel_of_normals: + type: file + description: vcf file to be used as a panel of normals. + pattern: "*.vcf.gz" + - panel_of_normals_tbi: + type: file + description: Index for the panel of normals. + pattern: "*.vcf.gz.tbi" + +output: + - vcf: + type: file + description: compressed vcf file + pattern: "*.vcf.gz" + - tbi: + type: file + description: Index of vcf file + pattern: "*vcf.gz.tbi" + - stats: + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" + - f1r2: + type: file + description: file containing information to be passed to LearnReadOrientationModel (only outputted when tumor_normal_pair mode is run) + pattern: "*.f1r2.tar.gz" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@GCJMackenzie" diff --git a/modules/nf-core/modules/haplocheck/main.nf b/modules/nf-core/modules/haplocheck/main.nf new file mode 100644 index 00000000..08c1c76b --- /dev/null +++ b/modules/nf-core/modules/haplocheck/main.nf @@ -0,0 +1,44 @@ +process HAPLOCHECK { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::haplocheck=1.3.3" : null) + 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' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.txt") , emit: txt + tuple val(meta), path("*.html"), emit: html + 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}" + """ + haplocheck --raw --out $prefix $vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + haplocheck: \$(echo \$(haplocheck --version 2>&1) | cut -f 2 -d " " ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.raw.txt + touch ${prefix}.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + haplocheck: \$(echo \$(haplocheck --version 2>&1) | cut -f 2 -d " " ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/haplocheck/meta.yml b/modules/nf-core/modules/haplocheck/meta.yml new file mode 100644 index 00000000..79da6a40 --- /dev/null +++ b/modules/nf-core/modules/haplocheck/meta.yml @@ -0,0 +1,55 @@ +name: "haplocheck" +description: | + Haplocheck detects contamination patterns in mtDNA AND WGS sequencing studies by analyzing + the mitochondrial DNA. Haplocheck also works as a proxy tool for nDNA studies and provides + users a graphical report to investigate the contamination further. Internally, it uses the + Haplogrep tool, that supports rCRS and RSRS mitochondrial versions. +keywords: + - mitochondrial + - mtDNA + - contamination +tools: + - "haplocheck": + description: "Detects in-sample contamination in mtDNA or WGS sequencing studies by analyzing the mitochondrial content." + homepage: "https://github.com/genepi/haplocheck" + documentation: "https://github.com/genepi/haplocheck" + tool_dev_url: "https://github.com/genepi/haplocheck" + doi: 10.1101/gr.256545.119 + licence: "['MIT']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + + - vcf: + type: file + description: VCF file + pattern: "*.{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" + + - txt: + type: file + description: Raw report in txt format + pattern: "*.{txt}" + + - html: + type: file + description: Haplocheck HTML report + pattern: "*.{html}" + +authors: + - "@lmtani" diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index e754a587..87f913d4 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + conda (params.enable_conda ? "bioconda::picard=2.27.2" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.27.2--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.2--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -33,9 +33,9 @@ process PICARD_MARKDUPLICATES { -Xmx${avail_mem}g \\ MarkDuplicates \\ $args \\ - I=$bam \\ - O=${prefix}.bam \\ - M=${prefix}.MarkDuplicates.metrics.txt + --INPUT $bam \\ + --OUTPUT ${prefix}.bam \\ + --METRICS_FILE ${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": From 60011ea82fe4574cc3eac451fc32a00d97a9a480 Mon Sep 17 00:00:00 2001 From: Lucia Pena Perez Date: Wed, 15 Jun 2022 07:55:37 +0200 Subject: [PATCH 0571/1921] feat changing module conf and adjusting parameters for align_MT --- conf/modules.config | 10 ++++++++++ subworkflows/local/align_MT.nf | 18 +++++++++++------- subworkflows/local/prepare_MT_alignment.nf | 1 + workflows/raredisease.nf | 8 +++++--- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 4d1038db..8dacdc36 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -556,3 +556,13 @@ process { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } + +// +// ALIGN_MT +// + +process { + withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } +} diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 9827a1b0..d7579e15 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -10,20 +10,24 @@ include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../mo workflow ALIGN_MT { take: - fastq // TO DO d: and file: bam index: bam.bai - fasta - fai - dict + fastq // Fastq + ubam // unmapped bam + index // channel: [ /path/to/bwamem2/index/ ] + fasta // channel: [genome.fasta] + dict // channel: [genome.dict] + fai // channel: [genome.fai] main: ch_versions = Channel.empty() // Outputs bam files - BWAMEM2_MEM_MT ( fastq , fasta, true) - ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + BWAMEM2_MEM_MT ( fastq , index, true) + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + ch_mt_bam = BWAMEM2_MEM_MT.out.bam + ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) // Merges bam files - GATK4_MERGEBAMALIGNMENT_MT ( BWAMEM2_MEM_MT.out.bam, fasta, dict ) + GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) // Marks duplicates diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 16654ffa..7a05cb96 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -27,5 +27,6 @@ workflow PREPARE_MT_ALIGNMENT { emit: fastq = GATK4_SAMTOFASTQ_MT.out.fastq + bam = GATK4_REVERTSAM_MT.out.bam versions = ch_versions // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 71bf39b2..dd41532e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -208,9 +208,11 @@ workflow RAREDISEASE { ALIGN_MT ( PREPARE_MT_ALIGNMENT.out.fastq, - ch_references.genome_fasta, - ch_references.genome_fai, - ch_references.sequence_dict + PREPARE_MT_ALIGNMENT.out.bam, + ch_references.aligner_index, + ch_references.genome_fasta, + ch_references.sequence_dict, + ch_references.genome_fai ) ch_versions = ch_versions.mix(ALIGN_MT.out.versions) From 6dc3ec4fe6ce1e5eb53a1551a1729803cf77f0a9 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 15 Jun 2022 11:51:05 +0200 Subject: [PATCH 0572/1921] Fixed alignment --- modules/local/sentieon/wgsmetricsalgo.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index f3935665..1b019ff7 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -11,8 +11,8 @@ process SENTIEON_DATAMETRICS { path fai output: - tuple val(meta), path('*wgs_metrics.txt') , emit: wgs_metrics - path "versions.yml" , emit: versions + tuple val(meta), path('*wgs_metrics.txt'), emit: wgs_metrics + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From 42c970b5c4f07fea1babccd5f74d279371ae762c Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 15 Jun 2022 15:11:29 +0200 Subject: [PATCH 0573/1921] Update nextflow_schema.json Fixed typo --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 6a50cd32..d69c3d0a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -99,14 +99,14 @@ "format": "path", "fa_icon": "fas fa-bezier-curve", "description": "Path to directory for gnomad vcf.", - "help_text": "Path to the gnomad vcf file. If you don't provide one, gnomad annotations will not be used." + "help_text": "Path to the gnomad annotations vcf file. If you don't provide one, gnomad annotations will not be used." }, "gnomad_af": { "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", "description": "Path to the gnomad tab file with allele frequencies.", - "help_text": "Path to the gnomad tab file with CHR/START/REF,ALT/AF. Can be generated from gnomad annoations vcf" + "help_text": "Path to the gnomad tab file with CHR/START/REF,ALT/AF. Can be generated from the gnomad annotations vcf." }, "gnomad_af_tbi": { "type": "string", From 79dfbaf777a342c178032e42f69abf31de218401 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 15 Jun 2022 15:26:48 +0200 Subject: [PATCH 0574/1921] Fixed readme prettier error --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49783c0c..3caefff5 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Note that it is possible to include/exclude certain tools or steps. ### Work in progress flowchart -![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) +![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). From 17ab103e8ca614254c740a7895a18f6bf5c687f4 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 27 Jun 2022 10:07:15 +0200 Subject: [PATCH 0575/1921] feat continue fixing --- conf/modules.config | 8 ++++++++ conf/test.config | 2 ++ main.nf | 1 + subworkflows/local/align_MT.nf | 23 ++++++++++++++++++++++- workflows/raredisease.nf | 6 ++++-- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 8dacdc36..eac09e19 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -565,4 +565,12 @@ process { withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } + + withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } + + withName: '.*ALIGN_MT:GATK4_MUTECT2_MT' { + ext.args = '--mitochondria' + } } diff --git a/conf/test.config b/conf/test.config index a037cda4..74733d94 100644 --- a/conf/test.config +++ b/conf/test.config @@ -34,4 +34,6 @@ params { vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' + + intervals_mt='https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' } diff --git a/main.nf b/main.nf index 84323d7c..b6559672 100644 --- a/main.nf +++ b/main.nf @@ -22,6 +22,7 @@ params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') +params.intervals_mt = WorkflowMain.getGenomeAttribute(params, 'intervals_mt') 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') diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index d7579e15..66806a40 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -5,6 +5,7 @@ include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SMATOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' @@ -16,6 +17,7 @@ workflow ALIGN_MT { fasta // channel: [genome.fasta] dict // channel: [genome.dict] fai // channel: [genome.fai] + intervals_mt //intervals of MT main: ch_versions = Channel.empty() @@ -32,10 +34,29 @@ workflow ALIGN_MT { // Marks duplicates PICARD_MARKDUPLICATES_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + + + ch_bam_markdup = PICARD_MARKDUPLICATES_MT.out.bam ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) + // Index bam file + SMATOOLS_INDEX_MT(PICARD_MARKDUPLICATES_MT.out.bam) + ch_bai = Channel.fromPath(SMATOOLS_INDEX_MT.out.bai) + ch2=PICARD_MARKDUPLICATES_MT.out.bam.join(ch_bai, by: [0]) + //ch3=ch2.join([], by:[0]) + + + ch_versions = ch_versions.mix(SMATOOLS_INDEX_MT.out.versions.first()) + + + //PICARD_MARKDUPLICATES_MT.out.bam + //.map {meta, bam -> + // return[meta,bam,SMATOOLS_INDEX_MT.out.bai, intervals_mt] + // }.set {ch3} + + // Calls variants with Mutect2 - GATK4_MUTECT2_MT ( PICARD_MARKDUPLICATES_MT.out.bam, fasta, fai, dict, [], [], [], [] ) + GATK4_MUTECT2_MT ( [ch2, intervals_mt ], fasta, fai, dict, [], [], [], [] ) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dd41532e..7836619c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -16,6 +16,7 @@ def checkPathParamList = [ params.fasta_fai, params.gnomad, params.input, + params.intervals_mt, params.multiqc_config, params.sentieonbwa_index, params.svdb_query_dbs, @@ -205,14 +206,15 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) // STEP 2.2: MT ALLIGNMENT - + ch_int = Channel.fromPath(params.intervals_mt) ALIGN_MT ( PREPARE_MT_ALIGNMENT.out.fastq, PREPARE_MT_ALIGNMENT.out.bam, ch_references.aligner_index, ch_references.genome_fasta, ch_references.sequence_dict, - ch_references.genome_fai + ch_references.genome_fai, + ch_int ) ch_versions = ch_versions.mix(ALIGN_MT.out.versions) From a314f1f74b394cc33c306dde5c56a449f9efbefe Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 29 Jun 2022 11:27:51 +0200 Subject: [PATCH 0576/1921] fix input for mutect and changed modules.config --- conf/modules.config | 13 ++++-- modules.json | 3 ++ modules/nf-core/modules/samtools/sort/main.nf | 42 ++++++++++++++++++ .../nf-core/modules/samtools/sort/meta.yml | 44 +++++++++++++++++++ subworkflows/local/align_MT.nf | 36 ++++++--------- 5 files changed, 112 insertions(+), 26 deletions(-) create mode 100644 modules/nf-core/modules/samtools/sort/main.nf create mode 100644 modules/nf-core/modules/samtools/sort/meta.yml diff --git a/conf/modules.config b/conf/modules.config index eac09e19..dd6f9850 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -549,7 +549,7 @@ process { } withName: '.*PREPARE_MT_ALIGNMENT:GATK4_REVERTSAM_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } withName: '.*PREPARE_MT_ALIGNMENT:GATK4_SAMTOFASTQ_MT' { @@ -563,14 +563,19 @@ process { process { withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.prefix = { "${meta.id}_merged" } } withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true --OPTICAL_DUPLICATE_PIXEL_DISTANCE 2500 --ASSUME_SORT_ORDER queryname --CLEAR_DT false --ADD_PG_TAG_TO_READS false' + } + + withName: '.*ALIGN_MT:SMATOOLS_SORT_MT' { + ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria' + ext.args = '--mitochondria-mode TRUE' } } diff --git a/modules.json b/modules.json index 1b497897..bfaeceb2 100644 --- a/modules.json +++ b/modules.json @@ -105,6 +105,9 @@ "samtools/merge": { "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, + "samtools/sort": { + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + }, "samtools/stats": { "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf new file mode 100644 index 00000000..b4fc1cbe --- /dev/null +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -0,0 +1,42 @@ +process SAMTOOLS_SORT { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::samtools=1.15.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : + 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + 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 + 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 + + 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/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml new file mode 100644 index 00000000..a820c55a --- /dev/null +++ b/modules/nf-core/modules/samtools/sort/meta.yml @@ -0,0 +1,44 @@ +name: samtools_sort +description: Sort SAM/BAM/CRAM file +keywords: + - sort + - 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: hhttp://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 ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@ewels" diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 66806a40..788941fc 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -6,6 +6,7 @@ include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../mo include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' include { SAMTOOLS_INDEX as SMATOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_SORT as SMATOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' @@ -34,40 +35,31 @@ workflow ALIGN_MT { // Marks duplicates PICARD_MARKDUPLICATES_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) - - - ch_bam_markdup = PICARD_MARKDUPLICATES_MT.out.bam ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) - // Index bam file - SMATOOLS_INDEX_MT(PICARD_MARKDUPLICATES_MT.out.bam) - ch_bai = Channel.fromPath(SMATOOLS_INDEX_MT.out.bai) - ch2=PICARD_MARKDUPLICATES_MT.out.bam.join(ch_bai, by: [0]) - //ch3=ch2.join([], by:[0]) - + // Sort bam file + SMATOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) + ch_versions = ch_versions.mix(SMATOOLS_SORT_MT.out.versions.first()) + // Index bam file + SMATOOLS_INDEX_MT(SMATOOLS_SORT_MT.out.bam) + ch2=SMATOOLS_SORT_MT.out.bam.join(SMATOOLS_INDEX_MT.out.bai, by: [0]) + ch3=ch2.combine(intervals_mt) ch_versions = ch_versions.mix(SMATOOLS_INDEX_MT.out.versions.first()) - - - //PICARD_MARKDUPLICATES_MT.out.bam - //.map {meta, bam -> - // return[meta,bam,SMATOOLS_INDEX_MT.out.bai, intervals_mt] - // }.set {ch3} - - + // Calls variants with Mutect2 - GATK4_MUTECT2_MT ( [ch2, intervals_mt ], fasta, fai, dict, [], [], [], [] ) + GATK4_MUTECT2_MT ( ch3, fasta, fai, dict, [], [], [], [] ) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck - HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) - ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + // HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) + // ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) emit: vcf = GATK4_MUTECT2_MT.out.vcf tbi = GATK4_MUTECT2_MT.out.tbi - txt = HAPLOCHECK_MT.out.txt - html = HAPLOCHECK_MT.out.html + // txt = HAPLOCHECK_MT.out.txt + // html = HAPLOCHECK_MT.out.html versions = ch_versions // channel: [ versions.yml ] } From 190bba327efd3cb81e01fe13dcd9c1eb193a7a15 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 29 Jun 2022 13:42:44 +0200 Subject: [PATCH 0577/1921] Review suggestions --- conf/modules.config | 6 +++--- nextflow_schema.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index c323775e..73eb827c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -541,7 +541,7 @@ process { process { withName: '.*ANNOTATE_SNVS:VCFANNO' { publishDir = [ - path: { "${params.outdir}/variant_annotation" }, + path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -550,7 +550,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { ext.args = { "--samples ${meta.id} --skip-indels " } publishDir = [ - path: { "${params.outdir}/variant_annotation" }, + path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -559,7 +559,7 @@ process { withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { ext.args = { "--v14 " } publishDir = [ - path: { "${params.outdir}/variant_annotation" }, + path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] diff --git a/nextflow_schema.json b/nextflow_schema.json index 6a50cd32..8f72aff7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -104,14 +104,14 @@ "gnomad_af": { "type": "string", "format": "path", - "fa_icon": "fas fa-bezier-curve", + "fa_icon": "fas fa-file", "description": "Path to the gnomad tab file with allele frequencies.", "help_text": "Path to the gnomad tab file with CHR/START/REF,ALT/AF. Can be generated from gnomad annoations vcf" }, "gnomad_af_tbi": { "type": "string", "format": "path", - "fa_icon": "fas fa-bezier-curve", + "fa_icon": "fas fa-file", "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" }, From c95714af09ba4c4d96a5465d8cdc4f42c1b8842b Mon Sep 17 00:00:00 2001 From: lucpen Date: Thu, 30 Jun 2022 09:31:02 +0200 Subject: [PATCH 0578/1921] Feat added addorreplacereadgroups --- conf/modules.config | 6 ++- modules.json | 3 ++ .../picard/addorreplacereadgroups/main.nf | 53 +++++++++++++++++++ .../picard/addorreplacereadgroups/meta.yml | 46 ++++++++++++++++ subworkflows/local/align_MT.nf | 21 +++++--- 5 files changed, 120 insertions(+), 9 deletions(-) create mode 100644 modules/nf-core/modules/picard/addorreplacereadgroups/main.nf create mode 100644 modules/nf-core/modules/picard/addorreplacereadgroups/meta.yml diff --git a/conf/modules.config b/conf/modules.config index dd6f9850..14c221b0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -562,13 +562,17 @@ process { // process { + withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { + ext.args = { "-M -K 100000000" } + } + withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true --OPTICAL_DUPLICATE_PIXEL_DISTANCE 2500 --ASSUME_SORT_ORDER queryname --CLEAR_DT false --ADD_PG_TAG_TO_READS false' + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' } withName: '.*ALIGN_MT:SMATOOLS_SORT_MT' { diff --git a/modules.json b/modules.json index bfaeceb2..1e4fd609 100644 --- a/modules.json +++ b/modules.json @@ -81,6 +81,9 @@ "multiqc": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, + "picard/addorreplacereadgroups": { + "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6" + }, "picard/collecthsmetrics": { "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905" }, diff --git a/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf b/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf new file mode 100644 index 00000000..aff83c9f --- /dev/null +++ b/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf @@ -0,0 +1,53 @@ +process PICARD_ADDORREPLACEREADGROUPS { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::picard=2.27.2" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.27.2--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.2--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def ID = task.ext.id ?: "id" + def LIBRARY= task.ext.library ?: "library" + def PLATFORM= task.ext.platform ?: "illumina" + def BARCODE= task.ext.barcode ?: "barcode" + def SAMPLE= task.ext.sample ?: "sample" + def INDEX= task.ext.index ?: "index" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard AddOrReplaceReadGroups] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + AddOrReplaceReadGroups \\ + -Xmx${avail_mem}g \\ + --INPUT ${bam} \\ + --OUTPUT ${prefix}.bam \\ + --RGID ${ID} \\ + --RGLB ${LIBRARY} \\ + --RGPL ${PLATFORM} \\ + --RGPU ${BARCODE} \\ + --RGSM ${SAMPLE} \\ + --CREATE_INDEX true + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/modules/picard/addorreplacereadgroups/meta.yml new file mode 100644 index 00000000..e013bf4b --- /dev/null +++ b/modules/nf-core/modules/picard/addorreplacereadgroups/meta.yml @@ -0,0 +1,46 @@ +name: picard_addorreplacereadgroups +description: Assigns all the reads in a file to a single new read-group +keywords: + - add + - replace + - read-group +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037226472-AddOrReplaceReadGroups-Picard- + tool_dev_url: https://github.com/broadinstitute/picard + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM file + pattern: "*.{bam}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - bam: + type: file + description: Output BAM file + pattern: "*.{bam}" + +authors: + - "@sateeshperi" + - "@mjcipriano" + - "@hseabolt" diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 788941fc..3026578c 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -2,13 +2,14 @@ // Prepare bam files for MT allignment // -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SMATOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_SORT as SMATOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' -include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SMATOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_SORT as SMATOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' workflow ALIGN_MT { take: @@ -33,8 +34,12 @@ workflow ALIGN_MT { GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + // Add read group to merged bam file + PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) + // Marks duplicates - PICARD_MARKDUPLICATES_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file From baf390a3ad01bcd8292a0e6d4899696da81188a1 Mon Sep 17 00:00:00 2001 From: sima-r Date: Mon, 4 Jul 2022 12:40:51 +0200 Subject: [PATCH 0579/1921] added tnscope module which calls mt varinats --- conf/modules.config | 11 +++++++ modules/local/sentieon/tnscope.nf | 52 +++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 modules/local/sentieon/tnscope.nf diff --git a/conf/modules.config b/conf/modules.config index 4d1038db..250f3b4e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -556,3 +556,14 @@ process { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } + +// +// SENTIEON_TNSCOPE_MT_CALL +// + +process { + withName: '.*SENTIEON_TNSCOPE' { + ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } + ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " + } +} \ No newline at end of file diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf new file mode 100644 index 00000000..d3080ac3 --- /dev/null +++ b/modules/local/sentieon/tnscope.nf @@ -0,0 +1,52 @@ +process SENTIEON_TNSCOPE { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path fai + + output: + tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz") , emit: vcf + tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz.tbi") , emit: vcf_index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def interval = task.ext.args ?: '' + def call_settings = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + sentieon driver \\ + -t $task.cpus \\ + -r $fasta \\ + -i $bam \\ + $interval \\ + --algo TNscope \\ + --tumor_sample ${meta.id} \\ + $call_settings \\ + ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz + touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) + END_VERSIONS + """ +} From 6abe375d2b34e354000d11c34367d0ef3b7c15c5 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 5 Jul 2022 13:26:55 +0200 Subject: [PATCH 0580/1921] fixed spaces --- modules/local/sentieon/tnscope.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf index d3080ac3..13d75554 100644 --- a/modules/local/sentieon/tnscope.nf +++ b/modules/local/sentieon/tnscope.nf @@ -26,10 +26,10 @@ process SENTIEON_TNSCOPE { -t $task.cpus \\ -r $fasta \\ -i $bam \\ - $interval \\ + $interval \\ --algo TNscope \\ --tumor_sample ${meta.id} \\ - $call_settings \\ + $call_settings \\ ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz cat <<-END_VERSIONS > versions.yml From 401f5401b85362fe55fef7fda453a4bf4276ea1b Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 5 Jul 2022 13:39:53 +0200 Subject: [PATCH 0581/1921] fixed scpaces --- conf/modules.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 250f3b4e..31a2a113 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -562,8 +562,8 @@ process { // process { - withName: '.*SENTIEON_TNSCOPE' { + withName: '.*SENTIEON_TNSCOPE' { ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " - } -} \ No newline at end of file + } +} From 33bbed677a7581ce4a5cf2ae6da44f0ce698599b Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 5 Jul 2022 13:47:31 +0200 Subject: [PATCH 0582/1921] fixed spaces --- modules/local/sentieon/tnscope.nf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf index 13d75554..fb0b49c5 100644 --- a/modules/local/sentieon/tnscope.nf +++ b/modules/local/sentieon/tnscope.nf @@ -9,17 +9,17 @@ process SENTIEON_TNSCOPE { path fai output: - tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz") , emit: vcf - tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz") , emit: vcf + tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz.tbi") , emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def interval = task.ext.args ?: '' - def call_settings = task.ext.args2 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def interval = task.ext.args ?: '' + def call_settings = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" """ sentieon driver \\ From ce440fb8ea95ab619709317181ef83147b2731d3 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 5 Jul 2022 13:51:31 +0200 Subject: [PATCH 0583/1921] fixed spaces --- modules/local/sentieon/tnscope.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf index fb0b49c5..d16b5ab9 100644 --- a/modules/local/sentieon/tnscope.nf +++ b/modules/local/sentieon/tnscope.nf @@ -26,10 +26,10 @@ process SENTIEON_TNSCOPE { -t $task.cpus \\ -r $fasta \\ -i $bam \\ - $interval \\ + $interval \\ --algo TNscope \\ --tumor_sample ${meta.id} \\ - $call_settings \\ + $call_settings \\ ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz cat <<-END_VERSIONS > versions.yml From d030692e9e2f2646e9dd4dd4d24e634888fba7ce Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 6 Jul 2022 10:55:46 +0200 Subject: [PATCH 0584/1921] Fix alignment (extra spaces) Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- modules/local/sentieon/wgsmetricsalgo.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 1b019ff7..40f000e6 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -20,7 +20,7 @@ process SENTIEON_DATAMETRICS { script: def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" From f9e44e9b43988b0d4740cf99289467a8cb2fc350 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 6 Jul 2022 10:56:52 +0200 Subject: [PATCH 0585/1921] Removed extra backslashes Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- modules/local/sentieon/wgsmetricsalgo.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 40f000e6..77871567 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -33,7 +33,7 @@ process SENTIEON_DATAMETRICS { -r $fasta \\ $input \\ $args \\ - --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt \\ + --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": From 99fbf96729606eb93c3289d3778549c4d9382f62 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 6 Jul 2022 10:57:59 +0200 Subject: [PATCH 0586/1921] Fixed alignment (extra spaces) Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- modules/local/sentieon/wgsmetricsalgo.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 77871567..ac944bb7 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -42,7 +42,7 @@ process SENTIEON_DATAMETRICS { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_wgs_metrics.txt From cddf475985cc7980509758a231fdbace59ca162e Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 6 Jul 2022 10:59:56 +0200 Subject: [PATCH 0587/1921] Fixed alignment --- modules/local/sentieon/wgsmetricsalgo.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index ac944bb7..37221b98 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -20,7 +20,7 @@ process SENTIEON_DATAMETRICS { script: def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" From cd8363c7c6f24d32f4e01ec861da6dc0c03f0ee3 Mon Sep 17 00:00:00 2001 From: Lucas Taniguti Date: Sat, 9 Jul 2022 09:48:18 -0300 Subject: [PATCH 0588/1921] fix: add RG diring the alignment step (bwamem2) --- conf/modules.config | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 14c221b0..d2881e36 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -545,6 +545,7 @@ process { process { withName: '.*PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { + ext.args = { "-h " } ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } } @@ -563,7 +564,7 @@ process { process { withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { - ext.args = { "-M -K 100000000" } + ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { @@ -573,12 +574,13 @@ process { withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.prefix = { "${meta.id}_markduplicates" } } withName: '.*ALIGN_MT:SMATOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } - + withName: '.*ALIGN_MT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } From b324d963dd74b9fbf48bbb5d10ef8e40e1137caf Mon Sep 17 00:00:00 2001 From: Lucas Taniguti Date: Sat, 9 Jul 2022 09:50:00 -0300 Subject: [PATCH 0589/1921] wip: cosmetic changes --- subworkflows/local/align_MT.nf | 18 +++++++++--------- subworkflows/local/prepare_MT_alignment.nf | 2 +- workflows/raredisease.nf | 7 ++----- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 3026578c..07d25520 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -13,13 +13,13 @@ include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } fr workflow ALIGN_MT { take: - fastq // Fastq - ubam // unmapped bam - index // channel: [ /path/to/bwamem2/index/ ] - fasta // channel: [genome.fasta] - dict // channel: [genome.dict] - fai // channel: [genome.fai] - intervals_mt //intervals of MT + fastq // channel: [ val(meta), path('*.fastq.gz') ] + ubam // channel: [ val(meta), path('*.bam') ] + index // channel: [ /path/to/bwamem2/index/ ] + fasta // channel: [ genome.fasta ] + dict // channel: [ genome.dict ] + fai // channel: [ genome.fai ] + intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] main: ch_versions = Channel.empty() @@ -41,7 +41,7 @@ workflow ALIGN_MT { // Marks duplicates PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) - + // Sort bam file SMATOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) ch_versions = ch_versions.mix(SMATOOLS_SORT_MT.out.versions.first()) @@ -51,7 +51,7 @@ workflow ALIGN_MT { ch2=SMATOOLS_SORT_MT.out.bam.join(SMATOOLS_INDEX_MT.out.bai, by: [0]) ch3=ch2.combine(intervals_mt) ch_versions = ch_versions.mix(SMATOOLS_INDEX_MT.out.versions.first()) - + // Calls variants with Mutect2 GATK4_MUTECT2_MT ( ch3, fasta, fai, dict, [], [], [], [] ) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 7a05cb96..83e4cc3f 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -8,7 +8,7 @@ include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/ workflow PREPARE_MT_ALIGNMENT { take: - bam_cram // id: and file: bam index: bam.bai + bam // channel: [ val(meta), file(bam), file(bai) ] main: ch_versions = Channel.empty() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7836619c..49012a7f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -199,10 +199,7 @@ workflow RAREDISEASE { } // STEP 2.1: PREPARING MT ALIGNMENT - - PREPARE_MT_ALIGNMENT ( - ch_mapped.bam_bai - ) + PREPARE_MT_ALIGNMENT ( ch_mapped.bam_bai ) ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) // STEP 2.2: MT ALLIGNMENT @@ -211,7 +208,7 @@ workflow RAREDISEASE { PREPARE_MT_ALIGNMENT.out.fastq, PREPARE_MT_ALIGNMENT.out.bam, ch_references.aligner_index, - ch_references.genome_fasta, + ch_references.genome_fasta, ch_references.sequence_dict, ch_references.genome_fai, ch_int From f7fe1fd8418f0a13958577f313f412d0935bc839 Mon Sep 17 00:00:00 2001 From: Lucas Taniguti Date: Sat, 9 Jul 2022 09:50:46 -0300 Subject: [PATCH 0590/1921] feat: uncomment haplocheck process --- subworkflows/local/align_MT.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 07d25520..2eb661af 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -57,14 +57,14 @@ workflow ALIGN_MT { ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck - // HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) - // ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) + ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) emit: vcf = GATK4_MUTECT2_MT.out.vcf tbi = GATK4_MUTECT2_MT.out.tbi - // txt = HAPLOCHECK_MT.out.txt - // html = HAPLOCHECK_MT.out.html + txt = HAPLOCHECK_MT.out.txt + html = HAPLOCHECK_MT.out.html versions = ch_versions // channel: [ versions.yml ] } From f63c3fbdb825e44f6b9086b0574ff8166232c75c Mon Sep 17 00:00:00 2001 From: Lucas Taniguti Date: Sat, 9 Jul 2022 09:51:59 -0300 Subject: [PATCH 0591/1921] tests: add temporary tests - usefull to quickly run only mito subworkflow --- tests/config/nextflow.config | 33 +++++++++++++++++ tests/config/test_data.config | 22 +++++++++++ tests/subworkflows/local/align_MT/main.nf | 37 +++++++++++++++++++ .../local/align_MT/nextflow.config | 7 ++++ 4 files changed, 99 insertions(+) create mode 100644 tests/config/nextflow.config create mode 100644 tests/config/test_data.config create mode 100644 tests/subworkflows/local/align_MT/main.nf create mode 100644 tests/subworkflows/local/align_MT/nextflow.config diff --git a/tests/config/nextflow.config b/tests/config/nextflow.config new file mode 100644 index 00000000..2c672d49 --- /dev/null +++ b/tests/config/nextflow.config @@ -0,0 +1,33 @@ +params { + outdir = "output/" + publish_dir_mode = "copy" + enable_conda = false + singularity_pull_docker_container = false +} + +process { + cpus = 2 + memory = 3.GB + time = 2.h +} + +if ("$PROFILE" == "singularity") { + singularity.enabled = true + singularity.autoMounts = true +} else if ("$PROFILE" == "conda") { + params.enable_conda = true +} else { + docker.enabled = true + docker.userEmulation = true + docker.runOptions = "--platform linux/x86_64" +} + +// Increase time available to build Conda environment +conda { createTimeout = "120 min" } + +// Load test_data.config containing paths to test data +includeConfig 'test_data.config' + +manifest { + nextflowVersion = '!>=21.10.0' +} diff --git a/tests/config/test_data.config b/tests/config/test_data.config new file mode 100644 index 00000000..cabb8f72 --- /dev/null +++ b/tests/config/test_data.config @@ -0,0 +1,22 @@ +// Base directory for test data +// TODO: Commit these files to nf-core/test-datasets if we want to keep testing with them +def test_data_dir1 = "https://raw.githubusercontent.com/lmtani/wf-human-mito/main" + +def test_data_dir2 = "https://gist.github.com/lmtani/f5f164e34c9e7aba44474d93c7108eb3/raw/e529b386f39a8efc2c6512d0bb8975c2a0c1ce59" + +params { + test_data { + 'mini_human_genome' { + 'alignment' { + bam = "${test_data_dir2}/NA12878_aligned.bam" + bai = "${test_data_dir2}/NA12878_aligned.bam.bai" + } + fasta = "${test_data_dir1}/tests/data/Homo_sapiens_assembly38_chrM_and_alt.fasta" + fai = "${test_data_dir1}/tests/data/Homo_sapiens_assembly38_chrM_and_alt.fasta.fai" + dict = "${test_data_dir1}/tests/data/Homo_sapiens_assembly38_chrM_and_alt.dict" + } + 'mitochondria' { + intervals_mt = "${test_data_dir1}/data/non_control_region.chrM.interval_list" + } + } +} diff --git a/tests/subworkflows/local/align_MT/main.nf b/tests/subworkflows/local/align_MT/main.nf new file mode 100644 index 00000000..96721c02 --- /dev/null +++ b/tests/subworkflows/local/align_MT/main.nf @@ -0,0 +1,37 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { BWAMEM2_INDEX } from '../../../../modules/nf-core/modules/bwamem2/index/main' + +include { PREPARE_MT_ALIGNMENT } from '../../../../subworkflows/local/prepare_MT_alignment' +include { ALIGN_MT } from '../../../../subworkflows/local/align_MT' + + + + +workflow align_mt { + input = [ [ id:'A', sample:'NA12878', single_end: false], // meta map + file(params.test_data['mini_human_genome']['alignment']['bam'], checkIfExists: true), + file(params.test_data['mini_human_genome']['alignment']['bai'], checkIfExists: true), + ] + + fasta = [ file(params.test_data['mini_human_genome']['fasta'], checkIfExists: true) ] + fai = [ file(params.test_data['mini_human_genome']['fai'], checkIfExists: true) ] + dict = [ file(params.test_data['mini_human_genome']['dict'], checkIfExists: true) ] + intervals_mt = [ file(params.test_data['mitochondria']['intervals_mt'], checkIfExists: true ) ] + + PREPARE_MT_ALIGNMENT ( input ) + + BWAMEM2_INDEX ( fasta ) + + ALIGN_MT ( + PREPARE_MT_ALIGNMENT.out.fastq, + PREPARE_MT_ALIGNMENT.out.bam, + BWAMEM2_INDEX.out.index, + fasta, + dict, + fai, + intervals_mt + ) +} diff --git a/tests/subworkflows/local/align_MT/nextflow.config b/tests/subworkflows/local/align_MT/nextflow.config new file mode 100644 index 00000000..06309122 --- /dev/null +++ b/tests/subworkflows/local/align_MT/nextflow.config @@ -0,0 +1,7 @@ +process { + publishDir = [ + path: { "${params.outdir}/workspace/${task.process.tokenize(':')[-1].toLowerCase()}" }, + mode: "copy", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] +} From 43dfa10943df37599965844ad9bf74058fb88130 Mon Sep 17 00:00:00 2001 From: Lucas Taniguti Date: Sat, 9 Jul 2022 10:18:24 -0300 Subject: [PATCH 0592/1921] wip: add reminder comment --- subworkflows/local/align_MT.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 2eb661af..9650c051 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -57,6 +57,8 @@ workflow ALIGN_MT { ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck + // TODO: probably it will be outside this subworkflow as we want to run + // with the VCF with the variants from the shifted alignment (to solve the mt circularity issue) HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) From 83e72a68dc14286f30b4fe8af2d7020fe19846ab Mon Sep 17 00:00:00 2001 From: sima-r Date: Thu, 14 Jul 2022 13:03:35 +0200 Subject: [PATCH 0593/1921] updated cnvpytor modules --- modules.json | 10 +++++----- modules/nf-core/modules/cnvpytor/callcnvs/main.nf | 4 ++-- modules/nf-core/modules/cnvpytor/histogram/main.nf | 4 ++-- .../nf-core/modules/cnvpytor/importreaddepth/main.nf | 4 ++-- modules/nf-core/modules/cnvpytor/partition/main.nf | 4 ++-- modules/nf-core/modules/cnvpytor/view/main.nf | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/modules.json b/modules.json index 60f0b643..c3a63b58 100644 --- a/modules.json +++ b/modules.json @@ -19,19 +19,19 @@ "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" }, "cnvpytor/callcnvs": { - "git_sha": "1ccea5ff4d3dffbf9a8e53032481cc9246d4e23d" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/histogram": { - "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/importreaddepth": { - "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/partition": { - "git_sha": "19cfb4e95196d0e8cc14a67ecb8f1ed0b0fcc3a7" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/view": { - "git_sha": "af73544010cc9563ec7d7160aeb825ae28ec217f" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "custom/dumpsoftwareversions": { "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf index 69c9d40e..021cd879 100644 --- a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf +++ b/modules/nf-core/modules/cnvpytor/callcnvs/main.nf @@ -27,7 +27,7 @@ process CNVPYTOR_CALLCNVS { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ @@ -37,7 +37,7 @@ process CNVPYTOR_CALLCNVS { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/modules/cnvpytor/histogram/main.nf index fd2ebe14..2abb96e6 100644 --- a/modules/nf-core/modules/cnvpytor/histogram/main.nf +++ b/modules/nf-core/modules/cnvpytor/histogram/main.nf @@ -28,7 +28,7 @@ process CNVPYTOR_HISTOGRAM { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ @@ -38,7 +38,7 @@ process CNVPYTOR_HISTOGRAM { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf index 6f9abae9..fd09d1c7 100644 --- a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf +++ b/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf @@ -32,7 +32,7 @@ process CNVPYTOR_IMPORTREADDEPTH { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ @@ -43,7 +43,7 @@ process CNVPYTOR_IMPORTREADDEPTH { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/modules/cnvpytor/partition/main.nf index 6d7a9c6b..d32741ba 100644 --- a/modules/nf-core/modules/cnvpytor/partition/main.nf +++ b/modules/nf-core/modules/cnvpytor/partition/main.nf @@ -27,7 +27,7 @@ process CNVPYTOR_PARTITION { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ @@ -37,7 +37,7 @@ process CNVPYTOR_PARTITION { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ } diff --git a/modules/nf-core/modules/cnvpytor/view/main.nf b/modules/nf-core/modules/cnvpytor/view/main.nf index 1bb61a38..153f43e8 100644 --- a/modules/nf-core/modules/cnvpytor/view/main.nf +++ b/modules/nf-core/modules/cnvpytor/view/main.nf @@ -42,7 +42,7 @@ process CNVPYTOR_VIEW { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ @@ -54,7 +54,7 @@ process CNVPYTOR_VIEW { cat <<-END_VERSIONS > versions.yml "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' )) + cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) END_VERSIONS """ } From fed792c222408226d16099b10a39f6485182f6fa Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Tue, 26 Jul 2022 16:41:18 +0200 Subject: [PATCH 0594/1921] Renamed process --- modules/local/sentieon/wgsmetricsalgo.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 37221b98..f6c25b0e 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -1,4 +1,4 @@ -process SENTIEON_DATAMETRICS { +process SENTIEON_WGSMETRICSALGO { tag "$meta.id" label 'process_medium' label 'sentieon' From e550b57932bf1c1691e2d664610db2b8bfd56efc Mon Sep 17 00:00:00 2001 From: sima-r Date: Mon, 4 Jul 2022 12:40:51 +0200 Subject: [PATCH 0595/1921] added tnscope module which calls mt varinats --- conf/modules.config | 11 +++++++ modules/local/sentieon/tnscope.nf | 52 +++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 modules/local/sentieon/tnscope.nf diff --git a/conf/modules.config b/conf/modules.config index 33b9e890..e94b7cea 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -568,3 +568,14 @@ process { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } + +// +// SENTIEON_TNSCOPE_MT_CALL +// + +process { + withName: '.*SENTIEON_TNSCOPE' { + ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } + ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " + } +} \ No newline at end of file diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf new file mode 100644 index 00000000..d3080ac3 --- /dev/null +++ b/modules/local/sentieon/tnscope.nf @@ -0,0 +1,52 @@ +process SENTIEON_TNSCOPE { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + input: + tuple val(meta), path(bam), path(bai) + path fasta + path fai + + output: + tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz") , emit: vcf + tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz.tbi") , emit: vcf_index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def interval = task.ext.args ?: '' + def call_settings = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + sentieon driver \\ + -t $task.cpus \\ + -r $fasta \\ + -i $bam \\ + $interval \\ + --algo TNscope \\ + --tumor_sample ${meta.id} \\ + $call_settings \\ + ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz + touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) + END_VERSIONS + """ +} From 51a6863ca71d20823d7de3f1aaf9d9c602b6e571 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 9 Aug 2022 17:02:10 +0200 Subject: [PATCH 0596/1921] Revert "added tnscope module which calls mt varinats" This reverts commit e550b57932bf1c1691e2d664610db2b8bfd56efc. --- conf/modules.config | 11 ------- modules/local/sentieon/tnscope.nf | 52 ------------------------------- 2 files changed, 63 deletions(-) delete mode 100644 modules/local/sentieon/tnscope.nf diff --git a/conf/modules.config b/conf/modules.config index e94b7cea..33b9e890 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -568,14 +568,3 @@ process { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } - -// -// SENTIEON_TNSCOPE_MT_CALL -// - -process { - withName: '.*SENTIEON_TNSCOPE' { - ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } - ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " - } -} \ No newline at end of file diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf deleted file mode 100644 index d3080ac3..00000000 --- a/modules/local/sentieon/tnscope.nf +++ /dev/null @@ -1,52 +0,0 @@ -process SENTIEON_TNSCOPE { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - input: - tuple val(meta), path(bam), path(bai) - path fasta - path fai - - output: - tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz") , emit: vcf - tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def interval = task.ext.args ?: '' - def call_settings = task.ext.args2 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - - """ - sentieon driver \\ - -t $task.cpus \\ - -r $fasta \\ - -i $bam \\ - $interval \\ - --algo TNscope \\ - --tumor_sample ${meta.id} \\ - $call_settings \\ - ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz - touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) - END_VERSIONS - """ -} From 1d017e33f738641ef8e9c5e8fd3e67816781479c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 9 Aug 2022 19:44:07 +0200 Subject: [PATCH 0597/1921] install modules --- modules.json | 12 +++ .../nf-core/modules/genmod/annotate/main.nf | 46 +++++++++++ .../nf-core/modules/genmod/annotate/meta.yml | 40 ++++++++++ .../nf-core/modules/genmod/compound/main.nf | 46 +++++++++++ .../nf-core/modules/genmod/compound/meta.yml | 40 ++++++++++ modules/nf-core/modules/genmod/models/main.nf | 52 ++++++++++++ .../nf-core/modules/genmod/models/meta.yml | 49 ++++++++++++ modules/nf-core/modules/genmod/score/main.nf | 55 +++++++++++++ modules/nf-core/modules/genmod/score/meta.yml | 53 ++++++++++++ subworkflows/local/genmod.nf | 80 +++++++++++++++++++ 10 files changed, 473 insertions(+) create mode 100644 modules/nf-core/modules/genmod/annotate/main.nf create mode 100644 modules/nf-core/modules/genmod/annotate/meta.yml create mode 100644 modules/nf-core/modules/genmod/compound/main.nf create mode 100644 modules/nf-core/modules/genmod/compound/meta.yml create mode 100644 modules/nf-core/modules/genmod/models/main.nf create mode 100644 modules/nf-core/modules/genmod/models/meta.yml create mode 100644 modules/nf-core/modules/genmod/score/main.nf create mode 100644 modules/nf-core/modules/genmod/score/meta.yml create mode 100644 subworkflows/local/genmod.nf diff --git a/modules.json b/modules.json index c3a63b58..cd5019f7 100644 --- a/modules.json +++ b/modules.json @@ -60,6 +60,18 @@ "gatk4/samtofastq": { "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" }, + "genmod/annotate": { + "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + }, + "genmod/compound": { + "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + }, + "genmod/models": { + "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + }, + "genmod/score": { + "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + }, "glnexus": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, diff --git a/modules/nf-core/modules/genmod/annotate/main.nf b/modules/nf-core/modules/genmod/annotate/main.nf new file mode 100644 index 00000000..b7ecd3fc --- /dev/null +++ b/modules/nf-core/modules/genmod/annotate/main.nf @@ -0,0 +1,46 @@ +process GENMOD_ANNOTATE { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null) + 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' }" + + input: + tuple val(meta), path(input_vcf) + + output: + tuple val(meta), path("*_annotate.vcf"), 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}" + """ + genmod \\ + annotate \\ + $args \\ + --outfile ${prefix}_annotate.vcf \\ + $input_vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_annotate.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/genmod/annotate/meta.yml b/modules/nf-core/modules/genmod/annotate/meta.yml new file mode 100644 index 00000000..5df7f666 --- /dev/null +++ b/modules/nf-core/modules/genmod/annotate/meta.yml @@ -0,0 +1,40 @@ +name: "genmod_annotate" +description: for annotating regions, frequencies, cadd scores +keywords: + - annotate + - genmod +tools: + - "genmod": + description: "Annotate genetic inheritance models in variant files" + homepage: "https://github.com/Clinical-Genomics/genmod" + documentation: "https://github.com/Clinical-Genomics/genmod" + tool_dev_url: "https://github.com/moonso" + doi: "" + licence: "['MIT']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_vcf: + type: file + description: VCF file + pattern: "*.{vcf}" +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: vcf + description: Annotated VCF file + pattern: "*.{vcf}" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/modules/genmod/compound/main.nf b/modules/nf-core/modules/genmod/compound/main.nf new file mode 100644 index 00000000..848cbea3 --- /dev/null +++ b/modules/nf-core/modules/genmod/compound/main.nf @@ -0,0 +1,46 @@ +process GENMOD_COMPOUND { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null) + 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' }" + + input: + tuple val(meta), path(input_vcf) + + output: + tuple val(meta), path("*_compound.vcf"), 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}" + """ + genmod \\ + compound \\ + $args \\ + --outfile ${prefix}_compound.vcf \\ + $input_vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_compound.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/genmod/compound/meta.yml b/modules/nf-core/modules/genmod/compound/meta.yml new file mode 100644 index 00000000..27fb3cdf --- /dev/null +++ b/modules/nf-core/modules/genmod/compound/meta.yml @@ -0,0 +1,40 @@ +name: "genmod_compound" +description: Score compounds +keywords: + - compound + - genmod +tools: + - "genmod": + description: "Annotate genetic inheritance models in variant files" + homepage: "https://github.com/Clinical-Genomics/genmod" + documentation: "https://github.com/Clinical-Genomics/genmod" + tool_dev_url: "https://github.com/moonso" + doi: "" + licence: "['MIT']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_vcf: + type: file + description: VCF file + pattern: "*.{vcf}" +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: Output VCF file + pattern: "*.{vcf}" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/modules/genmod/models/main.nf b/modules/nf-core/modules/genmod/models/main.nf new file mode 100644 index 00000000..f571eb32 --- /dev/null +++ b/modules/nf-core/modules/genmod/models/main.nf @@ -0,0 +1,52 @@ +process GENMOD_MODELS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::genmod=3.7.4 conda-forge::python=3.4.5" : null) + 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' }" + + input: + tuple val(meta), path(input_vcf) + path (fam) + path (reduced_penetrance) + + output: + tuple val(meta), path("*_models.vcf"), 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 family_file = fam ? "--family_file ${fam}" : "" + def pen_file = reduced_penetrance ? "--reduced_penetrance ${reduced_penetrance}" : "" + """ + genmod \\ + models \\ + $args \\ + $pen_file \\ + $family_file \\ + --outfile ${prefix}_models.vcf \\ + $input_vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_models.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/genmod/models/meta.yml b/modules/nf-core/modules/genmod/models/meta.yml new file mode 100644 index 00000000..42c80f7a --- /dev/null +++ b/modules/nf-core/modules/genmod/models/meta.yml @@ -0,0 +1,49 @@ +name: "genmod_models" +description: annotate models of inheritance +keywords: + - models + - genmod +tools: + - "genmod": + description: "Annotate genetic inheritance models in variant files" + homepage: "https://github.com/Clinical-Genomics/genmod" + documentation: "https://github.com/Clinical-Genomics/genmod" + tool_dev_url: "https://github.com/moonso" + doi: "" + licence: "['MIT']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_vcf: + type: file + description: vcf file + pattern: "*.{vcf}" + - reduced_penetrance: + type: file + description: file with gene ids that have reduced penetrance + pattern: "*.{tsv}" + - family_file: + type: file + description: ped file + pattern: "*.{ped}" + +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: Output VCF file + pattern: "*.{vcf}" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/modules/genmod/score/main.nf b/modules/nf-core/modules/genmod/score/main.nf new file mode 100644 index 00000000..4059a0f4 --- /dev/null +++ b/modules/nf-core/modules/genmod/score/main.nf @@ -0,0 +1,55 @@ +process GENMOD_SCORE { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null) + 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' }" + + input: + tuple val(meta), path(input_vcf) + path (fam) + path (reduced_penetrance) + path (score_config) + + output: + tuple val(meta), path("*_score.vcf"), 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 family_file = fam ? "--family_file ${fam}" : "" + def pen_file = reduced_penetrance ? "--reduced_penetrance ${reduced_penetrance}" : "" + def config_file = score_config ? "--score_config ${score_config}" : "" + """ + genmod \\ + score \\ + $args \\ + $pen_file \\ + $family_file \\ + $config_file \\ + --outfile ${prefix}_score.vcf \\ + $input_vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_score.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/genmod/score/meta.yml b/modules/nf-core/modules/genmod/score/meta.yml new file mode 100644 index 00000000..324b45e0 --- /dev/null +++ b/modules/nf-core/modules/genmod/score/meta.yml @@ -0,0 +1,53 @@ +name: "genmod_score" +description: Score the variants of a vcf based on their annotation +keywords: + - score + - genmod +tools: + - "genmod": + description: "Annotate genetic inheritance models in variant files" + homepage: "https://github.com/Clinical-Genomics/genmod" + documentation: "https://github.com/Clinical-Genomics/genmod" + tool_dev_url: "https://github.com/moonso" + doi: "" + licence: "['MIT']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_vcf: + type: file + description: vcf file + pattern: "*.{vcf}" + - reduced_penetrance: + type: file + description: file with gene ids that have reduced penetrance + pattern: "*.{tsv}" + - family_file: + type: file + description: ped file + pattern: "*.{ped}" + - score_config: + type: file + description: rank model config file + pattern: "*.{ini}" + +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: Output VCF file + pattern: "*.{vcf}" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/genmod.nf b/subworkflows/local/genmod.nf new file mode 100644 index 00000000..07bd8902 --- /dev/null +++ b/subworkflows/local/genmod.nf @@ -0,0 +1,80 @@ +// +// A subworkflow to annotate structural variants. +// + +include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' +include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' + +workflow ANNOTATE_STRUCTURAL_VARIANTS { + + take: + vcf // channel: [ val(meta), path(vcf) ] + sv_dbs // file: dbs.csv + vep_genome + vep_cache_version + vep_cache + fasta // file: genome.fasta + seq_dict // file: genome.dict + + main: + ch_versions = Channel.empty() + + Channel.fromPath(sv_dbs) + .splitCsv ( header:true ) + .multiMap { row -> + vcf_dbs: row.filename + in_frqs: row.in_freq_info_key + in_occs: row.in_allele_count_info_key + out_frqs: row.out_freq_info_key + out_occs: row.out_allele_count_info_key + } + .set { ch_svdb_dbs } + + SVDB_QUERY(vcf, + ch_svdb_dbs.in_occs.toList(), + ch_svdb_dbs.in_frqs.toList(), + ch_svdb_dbs.out_occs.toList(), + ch_svdb_dbs.out_frqs.toList(), + ch_svdb_dbs.vcf_dbs.toList() + ) + ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) + + PICARD_SORTVCF(SVDB_QUERY.out.vcf, + fasta, + seq_dict + ) + + PICARD_SORTVCF.out.vcf + .map { + meta, vcf -> + return [meta,vcf,[]] + } + .set { ch_sortvcf } + ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) + + BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) + + TABIX_SV_ANNO (BCFTOOLS_VIEW.out.vcf) + ch_versions = ch_versions.mix(TABIX_SV_ANNO.out.versions) + + BCFTOOLS_VIEW.out + .vcf + .join(TABIX_SV_ANNO.out.tbi) + .set { ch_vep_in } + + ENSEMBLVEP_SV(ch_vep_in, + vep_genome, + "homo_sapiens", + vep_cache_version, + file(vep_cache) + ) + ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) + + emit: + vcf_ann = ENSEMBLVEP_SV.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} From 45cfe042287e29c38ec40e7051eee49bf34563cd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Aug 2022 10:07:49 +0200 Subject: [PATCH 0598/1921] sv genmod --- conf/genomes.config | 4 ++ main.nf | 2 + modules/local/create_pedfile.nf | 38 +++++++++++++++ nextflow_schema.json | 14 ++++++ subworkflows/local/genmod.nf | 85 ++++++++------------------------- workflows/raredisease.nf | 27 +++++++++-- 6 files changed, 101 insertions(+), 69 deletions(-) create mode 100644 modules/local/create_pedfile.nf diff --git a/conf/genomes.config b/conf/genomes.config index 5dda2207..3f5976d2 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -20,6 +20,8 @@ params { known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" + reduced_penetrance = "" + score_config = "" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -37,6 +39,8 @@ params { known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" + reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" + score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index d9dda4c9..f1f49f85 100644 --- a/main.nf +++ b/main.nf @@ -27,6 +27,8 @@ params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, 'known_dbs 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.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') +params.score_config = WorkflowMain.getGenomeAttribute(params, 'score_config') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf new file mode 100644 index 00000000..3ff30041 --- /dev/null +++ b/modules/local/create_pedfile.nf @@ -0,0 +1,38 @@ +process MAKE_PED { + tag "make_ped" + + conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.9--1' : + 'quay.io/biocontainers/python:3.9--1' }" + + input: + path samplesheet + + output: + path '*.ped' , emit: ped + + when: + task.ext.when == null || task.ext.when + + script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ + """ + export INPUT_FILE=${samplesheet} + export OUTPUT_FILE="familyinfo.ped" + + python3 < - vcf_dbs: row.filename - in_frqs: row.in_freq_info_key - in_occs: row.in_allele_count_info_key - out_frqs: row.out_freq_info_key - out_occs: row.out_allele_count_info_key - } - .set { ch_svdb_dbs } - - SVDB_QUERY(vcf, - ch_svdb_dbs.in_occs.toList(), - ch_svdb_dbs.in_frqs.toList(), - ch_svdb_dbs.out_occs.toList(), - ch_svdb_dbs.out_frqs.toList(), - ch_svdb_dbs.vcf_dbs.toList() - ) - ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) - - PICARD_SORTVCF(SVDB_QUERY.out.vcf, - fasta, - seq_dict - ) - - PICARD_SORTVCF.out.vcf - .map { - meta, vcf -> - return [meta,vcf,[]] - } - .set { ch_sortvcf } - ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - - BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) - ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) - - TABIX_SV_ANNO (BCFTOOLS_VIEW.out.vcf) - ch_versions = ch_versions.mix(TABIX_SV_ANNO.out.versions) - - BCFTOOLS_VIEW.out - .vcf - .join(TABIX_SV_ANNO.out.tbi) - .set { ch_vep_in } - - ENSEMBLVEP_SV(ch_vep_in, - vep_genome, - "homo_sapiens", - vep_cache_version, - file(vep_cache) - ) - ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) + GENMOD_ANNOTATE(vcf) + ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) + GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ped, reduced_penetrance) + ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) + GENMOD_SCORE(GENMOD_MODELS.out.vcf, ped, reduced_penetrance, score_config) + ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) + GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) + ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) emit: - vcf_ann = ENSEMBLVEP_SV.out.vcf + vcf_ann = GENMOD_COMPOUND.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 735bb207..7b948f30 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -27,8 +27,10 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] -ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] +ch_score_config = params.score_config ? file(params.score_config) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -45,9 +47,16 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +// +// MODULE: local modules +// + +include { MAKE_PED } from '../modules/local/create_pedfile' + // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // + include { CHECK_INPUT } from '../subworkflows/local/check_input' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' @@ -78,6 +87,7 @@ include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' +include { RANK_VARIANTS } from '../subworkflows/local/genmod' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -100,6 +110,10 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) + MAKE_PED ( + ch_input + ) + // STEP 0: QUALITY CHECK. FASTQC ( CHECK_INPUT.out.reads @@ -197,7 +211,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } - + ch_sv_annotate = Channel.empty() if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( @@ -210,6 +224,13 @@ workflow RAREDISEASE { ch_references.sequence_dict ).set {ch_sv_annotate} + RANK_VARIANTS ( + ch_sv_annotate.vcf_ann, + MAKE_PED.out.ped, + ch_reduced_penetrance, + ch_score_config + ) + ch_versions = ch_versions.mix(ch_sv_annotate.versions) } From c467f0ec9a18c0688da90a440a94a263bac0a8c7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Aug 2022 13:54:38 +0200 Subject: [PATCH 0599/1921] sv update --- conf/modules.config | 33 +++++++++++++++++++++++ subworkflows/{local => nf-core}/genmod.nf | 0 workflows/raredisease.nf | 12 ++++----- 3 files changed, 39 insertions(+), 6 deletions(-) rename subworkflows/{local => nf-core}/genmod.nf (100%) diff --git a/conf/modules.config b/conf/modules.config index 33b9e890..ddb6f5e2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -535,6 +535,39 @@ process { mode: params.publish_dir_mode, ] } + + withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE { + ext.args = " --annotate_regions " + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_MODELS' { + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } // diff --git a/subworkflows/local/genmod.nf b/subworkflows/nf-core/genmod.nf similarity index 100% rename from subworkflows/local/genmod.nf rename to subworkflows/nf-core/genmod.nf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7b948f30..f1870ba3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -82,12 +82,12 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' -include { RANK_VARIANTS } from '../subworkflows/local/genmod' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' +include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/nf-core/genmod' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From ba0c41f3aa023cccaeaa448c211a860b25f97206 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Aug 2022 14:41:08 +0200 Subject: [PATCH 0600/1921] add snv --- conf/modules.config | 52 +++++++++++++++++++++++++++++++++++++++- workflows/raredisease.nf | 19 ++++++++++----- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d60244c7..6c25c3c3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -545,7 +545,14 @@ process { ] } - withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE { +} + +// +// Score and rank structural variants +// + +process { + withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { ext.args = " --annotate_regions " publishDir = [ path: { "${params.outdir}/genmod" }, @@ -563,6 +570,7 @@ process { } withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + ext.args = " --rank_results " publishDir = [ path: { "${params.outdir}/genmod" }, mode: params.publish_dir_mode, @@ -611,6 +619,48 @@ process { } } +// +// Score and rank SNVs +// + +process { + withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { + ext.args = " --annotate_regions " + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.args = " --whole_gene " + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { + ext.args = " --rank_results " + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + + // // PREPARE_MT_ALIGNMENT // diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f8316937..260b0c07 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -84,11 +84,11 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { ANNOTATE_VCFANNO } from '../subworkflows/nf-core/annotate_vcfanno' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/prepare_MT_alignment' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/nf-core/genmod' +include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/nf-core/genmod' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -227,7 +227,7 @@ workflow RAREDISEASE { ch_references.sequence_dict ).set {ch_sv_annotate} - RANK_VARIANTS ( + RANK_VARIANTS_SV ( ch_sv_annotate.vcf_ann, MAKE_PED.out.ped, ch_reduced_penetrance, @@ -260,6 +260,13 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANNOTATE_SNVS.out.versions) + RANK_VARIANTS_SNV ( + ANNOTATE_SNVS.out.vcf_ann, + MAKE_PED.out.ped, + ch_reduced_penetrance, + ch_score_config + ) + // // MODULE: Pipeline reporting // From c59bcb5afb784c1f0796a2cfcdfc58651c33f35c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Aug 2022 14:55:50 +0200 Subject: [PATCH 0601/1921] updates genomes config --- conf/genomes.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 87d5316d..d0166586 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -22,8 +22,8 @@ params { known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - reduced_penetrance = "" - score_config = "" + reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" + score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -43,7 +43,7 @@ params { known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" + reduced_penetrance = "" score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" From 26b83baa1b374652b827692f1f99b558d01be390 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Aug 2022 22:54:31 +0200 Subject: [PATCH 0602/1921] sv vep filter --- conf/genomes.config | 2 + main.nf | 1 + modules/local/filter_vep.nf | 54 +++++++++++++++++++ nextflow_schema.json | 7 +++ .../local/annotate_structural_variants.nf | 6 ++- workflows/raredisease.nf | 1 + 6 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 modules/local/filter_vep.nf diff --git a/conf/genomes.config b/conf/genomes.config index d0166586..68954528 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -24,6 +24,7 @@ params { ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" + vep_filters = "${params.local_genomes}/gene_panels.bed" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -45,6 +46,7 @@ params { ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" reduced_penetrance = "" score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" + vep_filters = "${params.local_genomes}/gene_panels.bed" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index f88b21e0..a1d0a2bb 100644 --- a/main.nf +++ b/main.nf @@ -35,6 +35,7 @@ params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_be params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') 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') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') params.vep_cache = WorkflowMain.getGenomeAttribute(params, 'vep_cache') diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf new file mode 100644 index 00000000..78ca488a --- /dev/null +++ b/modules/local/filter_vep.nf @@ -0,0 +1,54 @@ +process FILTER_VEP { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::ensembl-vep=105.0" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ensembl-vep:105.0--pl5321h4a94de4_1' : + 'quay.io/biocontainers/ensembl-vep:105.0--pl5321h4a94de4_1' }" + + input: + tuple val(meta), path(vcf) + path (select_feature_file_bed) + + output: + tuple val(meta), path("*.ann_filter.vcf.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + export INPUT_FILE=${select_feature_file_bed} + export OUTPUT_FILE="feature.list" + + python3 < versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ +} diff --git a/nextflow_schema.json b/nextflow_schema.json index c524af7e..cd2e2a8a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -164,6 +164,13 @@ "description": "Rank model config file for genmod.", "hidden": true }, + "vep_filters": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Gene panel file to be used with filter_vep to separate clinical and research variants.", + "hidden": true + }, "target_bed": { "type": "string", "format": "path", diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 07bd8902..e69aaae7 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -7,10 +7,12 @@ include { PICARD_SORTVCF } from '../../modules/nf-core/modules/pi include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' +include { FILTER_VEP } from '../../modules/local/filter_vep' workflow ANNOTATE_STRUCTURAL_VARIANTS { take: + feature_file vcf // channel: [ val(meta), path(vcf) ] sv_dbs // file: dbs.csv vep_genome @@ -74,7 +76,9 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) + FILTER_VEP(ENSEMBLVEP_SV.out.vcf, feature_file) + emit: - vcf_ann = ENSEMBLVEP_SV.out.vcf + vcf_ann = FILTER_VEP.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 260b0c07..2645fd30 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -218,6 +218,7 @@ workflow RAREDISEASE { ch_sv_annotate = Channel.empty() if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( + params.vep_filters, CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, params.genome, From 9dec33fe88d9cedb226c38b899478402392b61d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Aug 2022 23:40:46 +0200 Subject: [PATCH 0603/1921] add stub --- modules/local/filter_vep.nf | 11 +++++++++++ workflows/raredisease.nf | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 78ca488a..71d0ccf2 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -51,4 +51,15 @@ process FILTER_VEP { ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.ann_filter.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2645fd30..f8595646 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -31,6 +31,7 @@ ch_ml_model = params.ml_model ? file(params.ml_model) ch_call_interval = params.call_interval ? file(params.call_interval) : [] ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] ch_score_config = params.score_config ? file(params.score_config) : [] +ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -218,7 +219,7 @@ workflow RAREDISEASE { ch_sv_annotate = Channel.empty() if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( - params.vep_filters, + ch_vep_filters, CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, params.genome, From 2d6ad58fde7d7f11f0540627aeab9bba971eee06 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 17 Aug 2022 12:03:23 +0200 Subject: [PATCH 0604/1921] add snv vep --- conf/modules.config | 18 ++++++++++++++++++ subworkflows/local/annotate_snvs.nf | 26 ++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 6c25c3c3..571b8bb6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -617,6 +617,24 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + + withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { + ext.args = [ + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + ] + } } // diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index ed91a430..9db7d089 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,9 +2,11 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' -include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' -include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' +include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' +include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' +include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' +include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' +include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' workflow ANNOTATE_SNVS { @@ -66,7 +68,23 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) + TABIX_SNV_ANNO (RHOCALL_ANNOTATE.out.vcf) + ch_versions = ch_versions.mix(TABIX_SNV_ANNO.out.versions) + + RHOCALL_ANNOTATE.out + .vcf + .join(TABIX_SNV_ANNO.out.tbi) + .set { ch_vep_in } + + ENSEMBLVEP_SNV(ch_vep_in, + vep_genome, + "homo_sapiens", + vep_cache_version, + file(vep_cache) + ) + ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) + emit: - vcf_ann = RHOCALL_ANNOTATE.out.vcf + vcf_ann = ENSEMBLVEP_SNV.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From e947a9a3c48a3fd0ba5b10602f13ecfedc26926e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:14:00 +0200 Subject: [PATCH 0605/1921] update config --- conf/modules.config | 45 ++++++++++----------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 6c25c3c3..8568211f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -553,29 +553,15 @@ process { process { withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - ext.args = " --annotate_regions " - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_MODELS' { - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + if (params.genome == 'GRCh37') { + ext.args = '--annotate_regions --genome-build 37' + } else if (params.genome == 'GRCh38') { + ext.args = '--annotate_regions --genome-build 38' + } } withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { ext.args = " --rank_results " - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { @@ -625,30 +611,19 @@ process { process { withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - ext.args = " --annotate_regions " - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + if (params.genome == 'GRCh37') { + ext.args = '--annotate_regions --genome-build 37' + } else if (params.genome == 'GRCh38') { + ext.args = '--annotate_regions --genome-build 38' + } } withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { ext.args = " --whole_gene " - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { ext.args = " --rank_results " - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { From 7307755c2ec85550a2d2fef094f207aa04c6b9c7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:38:08 +0200 Subject: [PATCH 0606/1921] refactor config --- conf/modules.config | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 8568211f..b42d3e16 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -553,10 +553,8 @@ process { process { withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - if (params.genome == 'GRCh37') { - ext.args = '--annotate_regions --genome-build 37' - } else if (params.genome == 'GRCh38') { - ext.args = '--annotate_regions --genome-build 38' + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' } } @@ -611,10 +609,8 @@ process { process { withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - if (params.genome == 'GRCh37') { - ext.args = '--annotate_regions --genome-build 37' - } else if (params.genome == 'GRCh38') { - ext.args = '--annotate_regions --genome-build 38' + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' } } From ebcb48296bd903ece9ccc5ea420903b9afc94535 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 18 Aug 2022 16:12:24 +0200 Subject: [PATCH 0607/1921] update nextflow.config --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index fd48352c..37f4974c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,7 +14,7 @@ params { outdir = null // References - genome = null + genome = 'GRCh37' igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false local_genomes = null From 2291b0476ba5b940141d87799f66c80723db1143 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 22 Aug 2022 10:37:23 +0200 Subject: [PATCH 0608/1921] Fix spelling of SAMTOOLS_SORT and INDEX --- subworkflows/local/align_MT.nf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 9650c051..e376bb07 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -6,8 +6,8 @@ include { BWAMEM2_MEM as BWAMEM2_MEM_MT } fr include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SMATOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_SORT as SMATOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' @@ -43,14 +43,14 @@ workflow ALIGN_MT { ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file - SMATOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) - ch_versions = ch_versions.mix(SMATOOLS_SORT_MT.out.versions.first()) + SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) + ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) // Index bam file - SMATOOLS_INDEX_MT(SMATOOLS_SORT_MT.out.bam) - ch2=SMATOOLS_SORT_MT.out.bam.join(SMATOOLS_INDEX_MT.out.bai, by: [0]) + SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) + ch2=SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_SORT_MT.out.bai, by: [0]) ch3=ch2.combine(intervals_mt) - ch_versions = ch_versions.mix(SMATOOLS_INDEX_MT.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) // Calls variants with Mutect2 GATK4_MUTECT2_MT ( ch3, fasta, fai, dict, [], [], [], [] ) From 33248ab5b893a37ce463f87a4154342a8dc82b42 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 22 Aug 2022 10:39:11 +0200 Subject: [PATCH 0609/1921] Fix correct spelling samtools --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index d2881e36..ddfab4a5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -577,7 +577,7 @@ process { ext.prefix = { "${meta.id}_markduplicates" } } - withName: '.*ALIGN_MT:SMATOOLS_SORT_MT' { + withName: '.*ALIGN_MT:SAMTOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } From fe8ae1d100d4560a3befbd4f3244094185c4e499 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 22 Aug 2022 10:54:33 +0200 Subject: [PATCH 0610/1921] Fix module name stools --- subworkflows/local/align_MT.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index e376bb07..86c3c6fa 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -48,9 +48,9 @@ workflow ALIGN_MT { // Index bam file SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch2=SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_SORT_MT.out.bai, by: [0]) + ch2=SAMTOOLS_INDEX_MT.out.bam.join(SAMTOOLS_SORT_MT.out.bai, by: [0]) ch3=ch2.combine(intervals_mt) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) // Calls variants with Mutect2 GATK4_MUTECT2_MT ( ch3, fasta, fai, dict, [], [], [], [] ) From 73dcbacefd4ae32619e04e7a4dae866b9cad0b23 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 22 Aug 2022 11:04:43 +0200 Subject: [PATCH 0611/1921] fix previously committed mistake in names --- subworkflows/local/align_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 86c3c6fa..40d7ec13 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -48,7 +48,7 @@ workflow ALIGN_MT { // Index bam file SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch2=SAMTOOLS_INDEX_MT.out.bam.join(SAMTOOLS_SORT_MT.out.bai, by: [0]) + ch2=SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) ch3=ch2.combine(intervals_mt) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) From 668b81acb39069ec61a74d9c7239ab76bb76ac68 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Aug 2022 16:40:21 +0200 Subject: [PATCH 0612/1921] update modules --- modules.json | 6 +++--- modules/nf-core/modules/genmod/compound/main.nf | 1 + modules/nf-core/modules/genmod/models/main.nf | 1 + modules/nf-core/modules/genmod/score/main.nf | 3 --- modules/nf-core/modules/genmod/score/meta.yml | 4 ---- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/modules.json b/modules.json index 315530aa..c09113f3 100644 --- a/modules.json +++ b/modules.json @@ -67,13 +67,13 @@ "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" }, "genmod/compound": { - "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" }, "genmod/models": { - "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" }, "genmod/score": { - "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" }, "glnexus": { "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" diff --git a/modules/nf-core/modules/genmod/compound/main.nf b/modules/nf-core/modules/genmod/compound/main.nf index 848cbea3..4bdff8df 100644 --- a/modules/nf-core/modules/genmod/compound/main.nf +++ b/modules/nf-core/modules/genmod/compound/main.nf @@ -24,6 +24,7 @@ process GENMOD_COMPOUND { genmod \\ compound \\ $args \\ + --processes ${task.cpus} \\ --outfile ${prefix}_compound.vcf \\ $input_vcf diff --git a/modules/nf-core/modules/genmod/models/main.nf b/modules/nf-core/modules/genmod/models/main.nf index f571eb32..d786d269 100644 --- a/modules/nf-core/modules/genmod/models/main.nf +++ b/modules/nf-core/modules/genmod/models/main.nf @@ -30,6 +30,7 @@ process GENMOD_MODELS { $args \\ $pen_file \\ $family_file \\ + --processes ${task.cpus} \\ --outfile ${prefix}_models.vcf \\ $input_vcf diff --git a/modules/nf-core/modules/genmod/score/main.nf b/modules/nf-core/modules/genmod/score/main.nf index 4059a0f4..9b7bd009 100644 --- a/modules/nf-core/modules/genmod/score/main.nf +++ b/modules/nf-core/modules/genmod/score/main.nf @@ -10,7 +10,6 @@ process GENMOD_SCORE { input: tuple val(meta), path(input_vcf) path (fam) - path (reduced_penetrance) path (score_config) output: @@ -24,13 +23,11 @@ process GENMOD_SCORE { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def family_file = fam ? "--family_file ${fam}" : "" - def pen_file = reduced_penetrance ? "--reduced_penetrance ${reduced_penetrance}" : "" def config_file = score_config ? "--score_config ${score_config}" : "" """ genmod \\ score \\ $args \\ - $pen_file \\ $family_file \\ $config_file \\ --outfile ${prefix}_score.vcf \\ diff --git a/modules/nf-core/modules/genmod/score/meta.yml b/modules/nf-core/modules/genmod/score/meta.yml index 324b45e0..3c0ae932 100644 --- a/modules/nf-core/modules/genmod/score/meta.yml +++ b/modules/nf-core/modules/genmod/score/meta.yml @@ -21,10 +21,6 @@ input: type: file description: vcf file pattern: "*.{vcf}" - - reduced_penetrance: - type: file - description: file with gene ids that have reduced penetrance - pattern: "*.{tsv}" - family_file: type: file description: ped file From 81653218c3eeba47cbcad2c1c6d2895f8d141156 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Aug 2022 16:42:22 +0200 Subject: [PATCH 0613/1921] remove penetrance for score --- subworkflows/nf-core/genmod.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/genmod.nf b/subworkflows/nf-core/genmod.nf index d60ff812..206f75a5 100644 --- a/subworkflows/nf-core/genmod.nf +++ b/subworkflows/nf-core/genmod.nf @@ -22,7 +22,7 @@ workflow RANK_VARIANTS { ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ped, reduced_penetrance) ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) - GENMOD_SCORE(GENMOD_MODELS.out.vcf, ped, reduced_penetrance, score_config) + GENMOD_SCORE(GENMOD_MODELS.out.vcf, ped, score_config) ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) From 184c517053fe7905c5246711e790094e7f183caf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Aug 2022 17:14:38 +0200 Subject: [PATCH 0614/1921] check if files exist --- workflows/raredisease.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 260b0c07..ab581b96 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -17,6 +17,8 @@ def checkPathParamList = [ params.gnomad, params.input, params.multiqc_config, + params.reduced_penetrance, + params.score_config, params.sentieonbwa_index, params.svdb_query_dbs, params.vcfanno_resources, From 61dc9266223057344148a4526f64a5d22d95ad28 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 23 Aug 2022 09:14:18 +0200 Subject: [PATCH 0615/1921] fix removed ADDORREPLACEREADGROUPS module --- subworkflows/local/align_MT.nf | 7 +------ subworkflows/local/prepare_MT_alignment.nf | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 40d7ec13..b995f46c 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -4,7 +4,6 @@ include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' @@ -34,12 +33,8 @@ workflow ALIGN_MT { GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) - // Add read group to merged bam file - PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) - ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) - // Marks duplicates - PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) + PICARD_MARKDUPLICATES_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 83e4cc3f..4625996e 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -14,7 +14,7 @@ workflow PREPARE_MT_ALIGNMENT { ch_versions = Channel.empty() // Outputs bam containing only MT - SAMTOOLS_VIEW_MT ( bam_cram, [] ) + SAMTOOLS_VIEW_MT ( bam, [] ) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_MT.out.versions.first()) // Removes alignment information From 1e4362708f52b2d495d787127f92c60929cd4c4b Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 23 Aug 2022 15:43:49 +0200 Subject: [PATCH 0616/1921] Fix unstage previous commit --- subworkflows/local/align_MT.nf | 7 ++++++- subworkflows/local/prepare_MT_alignment.nf | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index b995f46c..40d7ec13 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -4,6 +4,7 @@ include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' @@ -33,8 +34,12 @@ workflow ALIGN_MT { GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + // Add read group to merged bam file + PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) + // Marks duplicates - PICARD_MARKDUPLICATES_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 4625996e..83e4cc3f 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -14,7 +14,7 @@ workflow PREPARE_MT_ALIGNMENT { ch_versions = Channel.empty() // Outputs bam containing only MT - SAMTOOLS_VIEW_MT ( bam, [] ) + SAMTOOLS_VIEW_MT ( bam_cram, [] ) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_MT.out.versions.first()) // Removes alignment information From 15a1ea77c66107ebf86792a8337dbdf21828d9bc Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 23 Aug 2022 15:46:04 +0200 Subject: [PATCH 0617/1921] fix change once again cram_bam to bam --- subworkflows/local/prepare_MT_alignment.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 83e4cc3f..4625996e 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -14,7 +14,7 @@ workflow PREPARE_MT_ALIGNMENT { ch_versions = Channel.empty() // Outputs bam containing only MT - SAMTOOLS_VIEW_MT ( bam_cram, [] ) + SAMTOOLS_VIEW_MT ( bam, [] ) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_MT.out.versions.first()) // Removes alignment information From c389565a4f0563a9049bf114b59389092ca3935d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 11:53:41 +0200 Subject: [PATCH 0618/1921] review suggestions --- assets/svrank_model.ini | 475 +++++++++++++++++++++++++++++ conf/genomes.config | 6 +- main.nf | 3 +- modules/local/create_pedfile.nf | 25 +- modules/local/samplesheet_check.nf | 1 + nextflow_schema.json | 11 +- subworkflows/local/check_input.nf | 2 +- subworkflows/nf-core/genmod.nf | 2 +- workflows/raredisease.nf | 15 +- 9 files changed, 507 insertions(+), 33 deletions(-) create mode 100644 assets/svrank_model.ini diff --git a/assets/svrank_model.ini b/assets/svrank_model.ini new file mode 100644 index 00000000..a4c0f2d3 --- /dev/null +++ b/assets/svrank_model.ini @@ -0,0 +1,475 @@ +[Version] + version = 1.8 + name = svrank_model + +[Categories] + [[allele_frequency]] + category_aggregation = min + + [[clinical_significance]] + category_aggregation = sum + + [[consequence]] + category_aggregation = max + + [[gene_intolerance_prediction]] + category_aggregation = sum + + [[inheritance_models]] + category_aggregation = min + + [[variant_call_quality_filter]] + category_aggregate = sum + + [[variant_length]] + category_aggregation = min + + [[variant_type]] + category_aggregation = min + +[gnomad_sv] + category = allele_frequency + data_type = float + description = Gnomad sv genomes frequency + field = INFO + info_key = gnomad_svAF + record_rule = max + separators = ',', + + [[not_reported]] + score = 6 + + [[common]] + score = -12 + lower = 0.02 + upper = 1.1 + + [[intermediate]] + score = 1 + lower = 0.005 + upper = 0.02 + + [[rare]] + score = 2 + lower = 0.0005 + upper = 0.005 + + [[very_rare]] + score = 4 + lower = 0 + upper = 0.0005 + +[swegen] + category = allele_frequency + data_type = float + description = Swegen genomes frequency + field = INFO + info_key = swegenAF + record_rule = max + separators = ',', + + [[not_reported]] + score = 6 + + [[common]] + score = -12 + lower = 0.02 + upper = 1.1 + + [[intermediate]] + score = 1 + lower = 0.005 + upper = 0.02 + + [[rare]] + score = 2 + lower = 0.0005 + upper = 0.005 + + [[very_rare]] + score = 4 + lower = 0 + upper = 0.0005 + +[svdb_merge_mip] + category = allele_frequency + data_type = float + description = Clinical genomics genomes frequency + field = INFO + info_key = clinical_genomics_mipAF + record_rule = max + separators = ',', + + [[not_reported]] + score = 6 + + [[common]] + score = -12 + lower = 0.02 + upper = 1.1 + + [[intermediate]] + score = 1 + lower = 0.005 + upper = 0.02 + + [[rare]] + score = 2 + lower = 0.0005 + upper = 0.005 + + [[very_rare]] + score = 4 + lower = 0 + upper = 0.0005 + +[sv_len] + category = variant_length + data_type = integer + description = The length of the structural variant + field = INFO + info_key = SVLEN + record_rule = min + separators = ',', + + [[not_reported]] + score = 0 + + [[long_pos]] + score = 3 + lower = 1000001 + upper = 100000000 + + [[long_neg]] + score = 3 + lower = -100000000 + upper = -1000001 + + [[medium_pos]] + score = 3 + lower = 50001 + upper = 1000000 + + [[medium_neg]] + score = 3 + lower = -1000000 + upper = -50001 + +[gene_intolerance_score] + category = gene_intolerance_prediction + data_type = float + description = Gnomad gene intolerance prediction + field = INFO + info_key = most_severe_pli + record_rule = max + separators = None + + [[not_reported]] + score = 0 + + [[low_intolerance]] + score = 0 + lower = 0 + upper = 0.90 + + [[medium_intolerance]] + score = 2 + lower = 0.90 + upper = 0.99 + + [[high_intolerance]] + score = 4 + lower = 0.99 + upper = 1.1 + +[genetic_models] + data_type = string + description = The inheritance models followed for the variant + category = inheritance_models + field = INFO + info_key = GeneticModels + record_rule = max + separators = ',', ':', '|', + + [[ad]] + priority = 1 + score = 3 + string = 'AD' + + [[ad_dn]] + priority = 1 + score = 3 + string = 'AD_dn' + + [[ar]] + priority = 1 + score = 3 + string = 'AR_hom' + + [[ar_dn]] + priority = 1 + score = 3 + string = 'AR_hom_dn' + + [[ar_comp]] + priority = 1 + score = 3 + string = 'AR_comp' + + [[ar_comp_dn]] + priority = 1 + score = 3 + string = 'AR_comp_dn' + + [[xr]] + priority = 1 + score = 3 + string = 'XR' + + [[xr_dn]] + priority = 1 + score = 3 + string = 'XR_dn' + + [[xd]] + priority = 1 + score = 3 + string = 'XD' + + [[xd_dn]] + priority = 1 + score = 3 + string = 'XD_dn' + + [[not_reported]] + score = 0 + +[model_score] + category = variant_call_quality_filter + data_type = integer + description = The inheritance model score + field = INFO + info_key = ModelScore + record_rule = min + separators = ',',':', + + [[not_reported]] + score = 0 + + [[low_qual]] + score = -5 + lower = 0 + upper = 20 + + [[high_qual]] + score = 0 + lower = 20 + upper = 300 + +[most_severe_consequence] + category = consequence + data_type = string + description = The most severe consequence for this variant + field = INFO + info_key = most_severe_consequence + record_rule = max + separators = ',', ':', '|', + + [[transcript_ablation]] + score = 10 + priority = 6 + string = 'transcript_ablation' + + [[initiator_codon_variant]] + score = 9 + priority = 5 + string = 'initiator_codon_variant' + + [[frameshift_variant]] + score = 8 + priority = 5 + string = 'frameshift_variant' + + [[stop_gained]] + score = 8 + priority = 5 + string = 'stop_gained' + + [[start_lost]] + score = 8 + priority = 5 + string = 'start_lost' + + [[stop_lost]] + score = 8 + priority = 5 + string = 'stop_lost' + + [[splice_acceptor_variant]] + score = 8 + priority = 5 + string = 'splice_acceptor_variant' + + [[splice_donor_variant]] + score = 8 + priority = 5 + string = 'splice_donor_variant' + + [[coding_sequence_variant]] + score = 7 + priority = 4 + string = 'coding_sequence_variant' + + [[inframe_deletion]] + score = 5 + priority = 4 + string = 'inframe_deletion' + + [[transcript_amplification]] + score = 5 + priority = 4 + string = 'transcript_amplification' + + [[splice_region_variant]] + score = 5 + priority = 4 + string = 'splice_region_variant' + + [[missense_variant]] + score = 5 + priority = 4 + string = 'missense_variant' + + [[protein_altering_variant]] + score = 5 + priority = 4 + string = 'protein_altering_variant' + + [[inframe_insertion]] + score = 5 + priority = 4 + string = 'inframe_insertion' + + [[incomplete_terminal_codon_variant]] + score = 5 + priority = 4 + string = 'incomplete_terminal_codon_variant' + + [[non_coding_transcript_exon_variant]] + score = 3 + priority = 2 + string = 'non_coding_transcript_exon_variant' + + [[synonymous_variant]] + score = 2 + priority = 2 + string = 'synonymous_variant' + + [[mature_mirna_variant]] + score = 1 + priority = 2 + string = 'mature_mirna_variant' + + [[non_coding_transcript_variant]] + score = 1 + priority = 2 + string = 'non_coding_transcript_variant' + + [[regulatory_region_variant]] + score = 1 + priority = 2 + string = 'regulatory_region_variant' + + [[upstream_gene_variant]] + score = 1 + priority = 2 + string = 'upstream_gene_variant' + + [[regulatory_region_amplification]] + score = 1 + priority = 2 + string = 'regulatory_region_amplification' + + [[tfbs_amplification]] + score = 1 + priority = 2 + string = 'tfbs_amplification' + + [[5_prime_utr_variant]] + score = 1 + priority = 2 + string = '5_prime_utr_variant' + + [[intron_variant]] + score = 1 + priority = 2 + string = 'intron_variant' + + [[3_prime_utr_variant]] + score = 1 + priority = 2 + string = '3_prime_utr_variant' + + [[feature_truncation]] + score = 1 + priority = 2 + string = 'feature_truncation' + + [[TF_binding_site_variant]] + score = 1 + priority = 2 + string = 'TF_binding_site_variant' + + [[stop_retained_variant]] + score = 1 + priority = 2 + string = 'stop_retained_variant' + + [[feature_elongation]] + score = 1 + priority = 2 + string = 'feature_elongation' + + [[regulatory_region_ablation]] + score = 1 + priority = 2 + string = 'regulatory_region_ablation' + + [[tfbs_ablation]] + score = 1 + priority = 2 + string = 'tfbs_ablation' + + [[downstream_gene_variant]] + score = 1 + priority = 2 + string = 'downstream_gene_variant' + + [[NMD_transcript_variant]] + score = 1 + priority = 2 + string = 'NMD_transcript_variant' + + [[intergenic_variant]] + score = 0 + priority = 0 + string = 'intergenic_variant' + + [[not_reported]] + score = 0 + +[filter] + category = variant_call_quality_filter + data_type = string + description = The filters for the variant + field = FILTER + record_rule = min + separators = ';', + + [[not_reported]] + score = 0 + + [[pass]] + score = 3 + priority = 1 + string = 'PASS' diff --git a/conf/genomes.config b/conf/genomes.config index d0166586..77cd2eca 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -23,7 +23,8 @@ params { known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" - score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" + score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" + score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -44,7 +45,8 @@ params { known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" reduced_penetrance = "" - score_config = "${params.local_genomes}/rank_model_-v1.31-.ini" + score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" + score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index f88b21e0..877e54d8 100644 --- a/main.nf +++ b/main.nf @@ -30,7 +30,8 @@ params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_ind params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') -params.score_config = WorkflowMain.getGenomeAttribute(params, 'score_config') +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.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index 3ff30041..196fe3ec 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -7,7 +7,7 @@ process MAKE_PED { 'quay.io/biocontainers/python:3.9--1' }" input: - path samplesheet + val(samples) output: path '*.ped' , emit: ped @@ -16,23 +16,12 @@ process MAKE_PED { task.ext.when == null || task.ext.when script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ + def pedinfo = "" + for(int i = 0; ifamily.ped + echo "$pedinfo" >>family.ped """ } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index e8d19a6f..b114546c 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -21,6 +21,7 @@ process SAMPLESHEET_CHECK { check_samplesheet.py \\ $samplesheet \\ samplesheet.valid.csv + cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version | sed 's/Python //g') diff --git a/nextflow_schema.json b/nextflow_schema.json index c524af7e..13184486 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -157,11 +157,18 @@ "description": "File with gene ids that have reduced penetrance. For use with genmod", "hidden": true }, - "score_config": { + "score_config_snv": { "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", - "description": "Rank model config file for genmod.", + "description": "SNV rank model config file for genmod.", + "hidden": true + }, + "score_config_sv": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "SV rank model config file for genmod.", "hidden": true }, "target_bed": { diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 334ab1df..5856870a 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -23,7 +23,7 @@ workflow CHECK_INPUT { case_info // channel: [ case_id ] reads // channel: [ val(meta), [ reads ] ] samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] - versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] + versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] diff --git a/subworkflows/nf-core/genmod.nf b/subworkflows/nf-core/genmod.nf index 206f75a5..7bc74780 100644 --- a/subworkflows/nf-core/genmod.nf +++ b/subworkflows/nf-core/genmod.nf @@ -1,5 +1,5 @@ // -// A subworkflow to score, rank and filter variants. +// A subworkflow to score and rank variants. // include { GENMOD_ANNOTATE } from '../../modules/nf-core/modules/genmod/annotate/main' diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ab581b96..5adee2ff 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -18,7 +18,8 @@ def checkPathParamList = [ params.input, params.multiqc_config, params.reduced_penetrance, - params.score_config, + params.score_config_snv, + params.score_config_sv, params.sentieonbwa_index, params.svdb_query_dbs, params.vcfanno_resources, @@ -32,7 +33,8 @@ if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input sample ch_ml_model = params.ml_model ? file(params.ml_model) : [] ch_call_interval = params.call_interval ? file(params.call_interval) : [] ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] -ch_score_config = params.score_config ? file(params.score_config) : [] +ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] +ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -113,10 +115,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) - MAKE_PED ( - ch_input - ) - + MAKE_PED (CHECK_INPUT.out.samples.toList()) // STEP 0: QUALITY CHECK. FASTQC ( CHECK_INPUT.out.reads @@ -233,7 +232,7 @@ workflow RAREDISEASE { ch_sv_annotate.vcf_ann, MAKE_PED.out.ped, ch_reduced_penetrance, - ch_score_config + ch_score_config_sv ) ch_versions = ch_versions.mix(ch_sv_annotate.versions) @@ -266,7 +265,7 @@ workflow RAREDISEASE { ANNOTATE_SNVS.out.vcf_ann, MAKE_PED.out.ped, ch_reduced_penetrance, - ch_score_config + ch_score_config_snv ) // From f488390b9ab83e92bb79bf4c4bcd57d6b47f8494 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 12:01:48 +0200 Subject: [PATCH 0619/1921] rename config --- assets/{svrank_model.ini => svrank_model.config} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/{svrank_model.ini => svrank_model.config} (100%) diff --git a/assets/svrank_model.ini b/assets/svrank_model.config similarity index 100% rename from assets/svrank_model.ini rename to assets/svrank_model.config From 4d9483c9804f2ee280aa48acb5254f093792d064 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 12:08:25 +0200 Subject: [PATCH 0620/1921] update for lint error --- .nf-core.yml | 1 + assets/{svrank_model.config => svrank_model.ini} | 0 2 files changed, 1 insertion(+) rename assets/{svrank_model.config => svrank_model.ini} (100%) diff --git a/.nf-core.yml b/.nf-core.yml index a6868bcb..78cc7bed 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,6 +4,7 @@ lint: - .github/ISSUE_TEMPLATE/bug_report.yml - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml + - assets/svrank_model.ini - .github/workflows/linting.yml - .github/workflows/linting_comment.yml - .github/workflows/branch.yml diff --git a/assets/svrank_model.config b/assets/svrank_model.ini similarity index 100% rename from assets/svrank_model.config rename to assets/svrank_model.ini From 491e46020391ae60dfb6de2f66a51e245e8f40f5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 12:14:04 +0200 Subject: [PATCH 0621/1921] update workflow test --- .github/workflows/linting.yml | 2 +- .nf-core.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 77358dee..58b17042 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -20,7 +20,7 @@ jobs: run: npm install -g editorconfig-checker - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') + run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.ini\|.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') Prettier: runs-on: ubuntu-latest diff --git a/.nf-core.yml b/.nf-core.yml index 78cc7bed..a6868bcb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -4,7 +4,6 @@ lint: - .github/ISSUE_TEMPLATE/bug_report.yml - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml - - assets/svrank_model.ini - .github/workflows/linting.yml - .github/workflows/linting_comment.yml - .github/workflows/branch.yml From ddb345b3a328b1af55a4609ea3e4afa9d18ca813 Mon Sep 17 00:00:00 2001 From: lucpen Date: Thu, 25 Aug 2022 13:32:48 +0200 Subject: [PATCH 0622/1921] feat updated picard AddOrReplaceReadGroups --- conf/modules.config | 7 ++++++- modules.json | 2 +- .../modules/picard/addorreplacereadgroups/main.nf | 9 +++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ddfab4a5..719dff27 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -572,11 +572,16 @@ process { ext.prefix = { "${meta.id}_merged" } } + + withName: '.*ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } + withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } - + withName: '.*ALIGN_MT:SAMTOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } diff --git a/modules.json b/modules.json index 1e4fd609..1ee7db76 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/addorreplacereadgroups": { - "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6" + "git_sha": "baa2845d2818066bcbd8b91e6ce77d71e36ecf45" }, "picard/collecthsmetrics": { "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905" diff --git a/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf b/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf index aff83c9f..116aa4fa 100644 --- a/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf @@ -2,10 +2,10 @@ process PICARD_ADDORREPLACEREADGROUPS { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::picard=2.27.2" : null) + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.2--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.2--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -34,8 +34,9 @@ process PICARD_ADDORREPLACEREADGROUPS { } """ picard \\ - AddOrReplaceReadGroups \\ -Xmx${avail_mem}g \\ + AddOrReplaceReadGroups \\ + $args \\ --INPUT ${bam} \\ --OUTPUT ${prefix}.bam \\ --RGID ${ID} \\ From e09b1e4d9ff503a5f54e64d692a8236151f71fa6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 16:23:32 +0200 Subject: [PATCH 0623/1921] revert a git workflow --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 58b17042..77358dee 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -20,7 +20,7 @@ jobs: run: npm install -g editorconfig-checker - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.ini\|.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') + run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') Prettier: runs-on: ubuntu-latest From 07fdce4349beba006f2c0dfc0a10285566277a87 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 16:56:48 +0200 Subject: [PATCH 0624/1921] add stub --- modules/local/ensemblvep/main.nf | 12 ++++++++++++ subworkflows/local/annotate_snvs.nf | 2 +- subworkflows/local/annotate_structural_variants.nf | 2 +- workflows/raredisease.nf | 8 ++++---- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 0094ae79..392aa240 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -50,4 +50,16 @@ process ENSEMBLVEP { ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.ann.vcf.gz + touch ${prefix}.summary.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 9db7d089..1e2e1851 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -80,7 +80,7 @@ workflow ANNOTATE_SNVS { vep_genome, "homo_sapiens", vep_cache_version, - file(vep_cache) + vep_cache ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 07bd8902..238e8223 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -70,7 +70,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { vep_genome, "homo_sapiens", vep_cache_version, - file(vep_cache) + vep_cache ) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5adee2ff..ab5f045c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -22,8 +22,7 @@ def checkPathParamList = [ params.score_config_sv, params.sentieonbwa_index, params.svdb_query_dbs, - params.vcfanno_resources, - params.vep_cache + params.vcfanno_resources ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -35,6 +34,7 @@ ch_call_interval = params.call_interval ? file(params.call_interval) ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] +ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -223,7 +223,7 @@ workflow RAREDISEASE { params.svdb_query_dbs, params.genome, params.vep_cache_version, - params.vep_cache, + ch_vep_cache, ch_references.genome_fasta, ch_references.sequence_dict ).set {ch_sv_annotate} @@ -254,7 +254,7 @@ workflow RAREDISEASE { params.vcfanno_toml, params.genome, params.vep_cache_version, - params.vep_cache, + ch_vep_cache, ch_references.genome_fasta, ch_references.gnomad_af, CHECK_INPUT.out.samples From 561d22f6ec68b2610c6f1577557cdded034903db Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 17:00:48 +0200 Subject: [PATCH 0625/1921] fix lint error --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 77358dee..58b17042 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -20,7 +20,7 @@ jobs: run: npm install -g editorconfig-checker - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') + run: editorconfig-checker -exclude README.md $(find .* -type f | grep -v '.ini\|.git\|.py\|.md\|json\|yml\|yaml\|html\|css\|work\|.nextflow\|build\|nf_core.egg-info\|log.txt\|Makefile') Prettier: runs-on: ubuntu-latest From 59fb73326cb8f0abfb013e6fae03a96fe0ecc396 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 17 Aug 2022 12:03:23 +0200 Subject: [PATCH 0626/1921] add snv vep --- conf/modules.config | 18 ++++++++++++++++++ subworkflows/local/annotate_snvs.nf | 26 ++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e9f952fb..e51aab1b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -576,6 +576,24 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + + withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { + ext.args = [ + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + ] + } } // diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index ed91a430..9db7d089 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,9 +2,11 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' -include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' -include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' +include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' +include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' +include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' +include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' +include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' workflow ANNOTATE_SNVS { @@ -66,7 +68,23 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) + TABIX_SNV_ANNO (RHOCALL_ANNOTATE.out.vcf) + ch_versions = ch_versions.mix(TABIX_SNV_ANNO.out.versions) + + RHOCALL_ANNOTATE.out + .vcf + .join(TABIX_SNV_ANNO.out.tbi) + .set { ch_vep_in } + + ENSEMBLVEP_SNV(ch_vep_in, + vep_genome, + "homo_sapiens", + vep_cache_version, + file(vep_cache) + ) + ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) + emit: - vcf_ann = RHOCALL_ANNOTATE.out.vcf + vcf_ann = ENSEMBLVEP_SNV.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From be0a00e60226c3f092594a4e99ecd15daba2e6f5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Aug 2022 16:56:48 +0200 Subject: [PATCH 0627/1921] add stub --- modules/local/ensemblvep/main.nf | 12 ++++++++++++ subworkflows/local/annotate_snvs.nf | 2 +- .../local/annotate_structural_variants.nf | 2 +- workflows/raredisease.nf | 16 +++++++++------- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 0094ae79..392aa240 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -50,4 +50,16 @@ process ENSEMBLVEP { ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.ann.vcf.gz + touch ${prefix}.summary.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 9db7d089..1e2e1851 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -80,7 +80,7 @@ workflow ANNOTATE_SNVS { vep_genome, "homo_sapiens", vep_cache_version, - file(vep_cache) + vep_cache ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 07bd8902..238e8223 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -70,7 +70,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { vep_genome, "homo_sapiens", vep_cache_version, - file(vep_cache) + vep_cache ) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4fe0d0c1..e6b32f33 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -19,16 +19,18 @@ def checkPathParamList = [ params.multiqc_config, params.sentieonbwa_index, params.svdb_query_dbs, - params.vcfanno_resources, - params.vep_cache + params.vcfanno_resources ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] -ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] +ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] +ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -199,7 +201,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } - + ch_sv_annotate = Channel.empty() if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( @@ -207,7 +209,7 @@ workflow RAREDISEASE { params.svdb_query_dbs, params.genome, params.vep_cache_version, - params.vep_cache, + ch_vep_cache, ch_references.genome_fasta, ch_references.sequence_dict ).set {ch_sv_annotate} @@ -231,7 +233,7 @@ workflow RAREDISEASE { params.vcfanno_toml, params.genome, params.vep_cache_version, - params.vep_cache, + ch_vep_cache, ch_references.genome_fasta, ch_references.gnomad_af, CHECK_INPUT.out.samples From 9a77085c780cdbf538f4237db9389fae24a56bfc Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 26 Aug 2022 10:16:57 +0200 Subject: [PATCH 0628/1921] fix removed tests folder --- tests/config/nextflow.config | 33 ----------------- tests/config/test_data.config | 22 ----------- tests/subworkflows/local/align_MT/main.nf | 37 ------------------- .../local/align_MT/nextflow.config | 7 ---- 4 files changed, 99 deletions(-) delete mode 100644 tests/config/nextflow.config delete mode 100644 tests/config/test_data.config delete mode 100644 tests/subworkflows/local/align_MT/main.nf delete mode 100644 tests/subworkflows/local/align_MT/nextflow.config diff --git a/tests/config/nextflow.config b/tests/config/nextflow.config deleted file mode 100644 index 2c672d49..00000000 --- a/tests/config/nextflow.config +++ /dev/null @@ -1,33 +0,0 @@ -params { - outdir = "output/" - publish_dir_mode = "copy" - enable_conda = false - singularity_pull_docker_container = false -} - -process { - cpus = 2 - memory = 3.GB - time = 2.h -} - -if ("$PROFILE" == "singularity") { - singularity.enabled = true - singularity.autoMounts = true -} else if ("$PROFILE" == "conda") { - params.enable_conda = true -} else { - docker.enabled = true - docker.userEmulation = true - docker.runOptions = "--platform linux/x86_64" -} - -// Increase time available to build Conda environment -conda { createTimeout = "120 min" } - -// Load test_data.config containing paths to test data -includeConfig 'test_data.config' - -manifest { - nextflowVersion = '!>=21.10.0' -} diff --git a/tests/config/test_data.config b/tests/config/test_data.config deleted file mode 100644 index cabb8f72..00000000 --- a/tests/config/test_data.config +++ /dev/null @@ -1,22 +0,0 @@ -// Base directory for test data -// TODO: Commit these files to nf-core/test-datasets if we want to keep testing with them -def test_data_dir1 = "https://raw.githubusercontent.com/lmtani/wf-human-mito/main" - -def test_data_dir2 = "https://gist.github.com/lmtani/f5f164e34c9e7aba44474d93c7108eb3/raw/e529b386f39a8efc2c6512d0bb8975c2a0c1ce59" - -params { - test_data { - 'mini_human_genome' { - 'alignment' { - bam = "${test_data_dir2}/NA12878_aligned.bam" - bai = "${test_data_dir2}/NA12878_aligned.bam.bai" - } - fasta = "${test_data_dir1}/tests/data/Homo_sapiens_assembly38_chrM_and_alt.fasta" - fai = "${test_data_dir1}/tests/data/Homo_sapiens_assembly38_chrM_and_alt.fasta.fai" - dict = "${test_data_dir1}/tests/data/Homo_sapiens_assembly38_chrM_and_alt.dict" - } - 'mitochondria' { - intervals_mt = "${test_data_dir1}/data/non_control_region.chrM.interval_list" - } - } -} diff --git a/tests/subworkflows/local/align_MT/main.nf b/tests/subworkflows/local/align_MT/main.nf deleted file mode 100644 index 96721c02..00000000 --- a/tests/subworkflows/local/align_MT/main.nf +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env nextflow - -nextflow.enable.dsl = 2 - -include { BWAMEM2_INDEX } from '../../../../modules/nf-core/modules/bwamem2/index/main' - -include { PREPARE_MT_ALIGNMENT } from '../../../../subworkflows/local/prepare_MT_alignment' -include { ALIGN_MT } from '../../../../subworkflows/local/align_MT' - - - - -workflow align_mt { - input = [ [ id:'A', sample:'NA12878', single_end: false], // meta map - file(params.test_data['mini_human_genome']['alignment']['bam'], checkIfExists: true), - file(params.test_data['mini_human_genome']['alignment']['bai'], checkIfExists: true), - ] - - fasta = [ file(params.test_data['mini_human_genome']['fasta'], checkIfExists: true) ] - fai = [ file(params.test_data['mini_human_genome']['fai'], checkIfExists: true) ] - dict = [ file(params.test_data['mini_human_genome']['dict'], checkIfExists: true) ] - intervals_mt = [ file(params.test_data['mitochondria']['intervals_mt'], checkIfExists: true ) ] - - PREPARE_MT_ALIGNMENT ( input ) - - BWAMEM2_INDEX ( fasta ) - - ALIGN_MT ( - PREPARE_MT_ALIGNMENT.out.fastq, - PREPARE_MT_ALIGNMENT.out.bam, - BWAMEM2_INDEX.out.index, - fasta, - dict, - fai, - intervals_mt - ) -} diff --git a/tests/subworkflows/local/align_MT/nextflow.config b/tests/subworkflows/local/align_MT/nextflow.config deleted file mode 100644 index 06309122..00000000 --- a/tests/subworkflows/local/align_MT/nextflow.config +++ /dev/null @@ -1,7 +0,0 @@ -process { - publishDir = [ - path: { "${params.outdir}/workspace/${task.process.tokenize(':')[-1].toLowerCase()}" }, - mode: "copy", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] -} From a2668caaa2362c3325668b0e47637d7af620ad75 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 Aug 2022 10:47:21 +0200 Subject: [PATCH 0629/1921] review suggestions --- modules/local/create_pedfile.nf | 10 +++++----- workflows/raredisease.nf | 6 ++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index 196fe3ec..b4761f07 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -15,13 +15,13 @@ process MAKE_PED { when: task.ext.when == null || task.ext.when - script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ - def pedinfo = "" + script: + def pedinfo = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') for(int i = 0; ifamily.ped - echo "$pedinfo" >>family.ped + echo "$pedinfo" > family.ped """ } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5adee2ff..c3ffe1a0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -116,6 +116,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) MAKE_PED (CHECK_INPUT.out.samples.toList()) + // STEP 0: QUALITY CHECK. FASTQC ( CHECK_INPUT.out.reads @@ -227,6 +228,7 @@ workflow RAREDISEASE { ch_references.genome_fasta, ch_references.sequence_dict ).set {ch_sv_annotate} + ch_versions = ch_versions.mix(ch_sv_annotate.versions) RANK_VARIANTS_SV ( ch_sv_annotate.vcf_ann, @@ -234,8 +236,7 @@ workflow RAREDISEASE { ch_reduced_penetrance, ch_score_config_sv ) - - ch_versions = ch_versions.mix(ch_sv_annotate.versions) + ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) } // STEP 2.1: MT CALLING @@ -267,6 +268,7 @@ workflow RAREDISEASE { ch_reduced_penetrance, ch_score_config_snv ) + ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) // // MODULE: Pipeline reporting From 0be3bcc71734ece38998c5039ba381c5efb0ea93 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 26 Aug 2022 10:51:49 +0200 Subject: [PATCH 0630/1921] fix inconsistencies after merging with main --- conf/modules.config | 5 +++-- workflows/raredisease.nf | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9c67a4d5..b8e1c70d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -223,7 +223,7 @@ process { // Sentieon alignment options // -process{ +process { withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") } @@ -626,7 +626,8 @@ process { } withName: '.*ALIGN_MT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria-mode TRUE' + ext.args = '--mitochondria-mode TRUE' + } } // diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e22649da..134188de 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -57,6 +57,7 @@ include { GENS } from '../subworkflows/local/gens' include { ALIGN } from '../subworkflows/local/align' include { CALL_SNV } from '../subworkflows/local/call_snv' include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' +include { ALIGN_MT } from '../subworkflows/local/align_MT' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -79,8 +80,6 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/ include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' -include { ALIGN_MT } from '../subworkflows/local/align_MT' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 9005dc6a9b6de496b7a1d5e3cdb4f2c373b5fdaf Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 26 Aug 2022 11:08:46 +0200 Subject: [PATCH 0631/1921] fix formatting errors --- modules.json | 2 +- nextflow_schema.json | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules.json b/modules.json index d7a251e8..5623307d 100644 --- a/modules.json +++ b/modules.json @@ -155,4 +155,4 @@ } } } -} \ No newline at end of file +} diff --git a/nextflow_schema.json b/nextflow_schema.json index 82f40388..cdf86ea0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -115,6 +115,13 @@ "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" }, + "intervals_mt": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-file", + "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" + }, "known_dbsnp": { "type": "string", "format": "path", From 3a29f145d10c535b38000a6b90e422a521deb900 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 26 Aug 2022 11:12:42 +0200 Subject: [PATCH 0632/1921] fix deleted trailing spaces --- conf/modules.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index b8e1c70d..6fe44eab 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -611,22 +611,22 @@ process { ext.prefix = { "${meta.id}_merged" } } - + withName: '.*ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } - + withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } - + withName: '.*ALIGN_MT:SAMTOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria-mode TRUE' + ext.args = '--mitochondria-mode TRUE' } } From f260ffdf003b6ab282e81c3ee0c3adc7fd8ef481 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 Aug 2022 13:51:35 +0200 Subject: [PATCH 0633/1921] update ini --- assets/svrank_model.ini | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/assets/svrank_model.ini b/assets/svrank_model.ini index a4c0f2d3..510aadf1 100644 --- a/assets/svrank_model.ini +++ b/assets/svrank_model.ini @@ -91,38 +91,6 @@ lower = 0 upper = 0.0005 -[svdb_merge_mip] - category = allele_frequency - data_type = float - description = Clinical genomics genomes frequency - field = INFO - info_key = clinical_genomics_mipAF - record_rule = max - separators = ',', - - [[not_reported]] - score = 6 - - [[common]] - score = -12 - lower = 0.02 - upper = 1.1 - - [[intermediate]] - score = 1 - lower = 0.005 - upper = 0.02 - - [[rare]] - score = 2 - lower = 0.0005 - upper = 0.005 - - [[very_rare]] - score = 4 - lower = 0 - upper = 0.0005 - [sv_len] category = variant_length data_type = integer From 9d9561bbc8f3f70f6e554ef017d2287eb32b76b7 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Fri, 26 Aug 2022 15:01:39 +0200 Subject: [PATCH 0634/1921] Update conf/test.config Co-authored-by: Anders Jemt --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 74733d94..6e19d738 100644 --- a/conf/test.config +++ b/conf/test.config @@ -35,5 +35,5 @@ params { target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' - intervals_mt='https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' + intervals_mt = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' } From 51e97700fff81833162c19be17576bb96d3f10df Mon Sep 17 00:00:00 2001 From: Lucpen Date: Fri, 26 Aug 2022 15:02:22 +0200 Subject: [PATCH 0635/1921] Update conf/modules.config Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- conf/modules.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 6fe44eab..9614c6cb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -611,7 +611,6 @@ process { ext.prefix = { "${meta.id}_merged" } } - withName: '.*ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } From d04876949eaad92a94d655eaee94b0a12485a3e2 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Fri, 26 Aug 2022 15:09:34 +0200 Subject: [PATCH 0636/1921] Apply suggestions from code review Co-authored-by: Anders Jemt --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 134188de..352de8bb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -222,7 +222,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) // STEP 2.2: MT ALLIGNMENT - ch_int = Channel.fromPath(params.intervals_mt) + ch_intervals_mt = Channel.fromPath(params.intervals_mt) ALIGN_MT ( PREPARE_MT_ALIGNMENT.out.fastq, PREPARE_MT_ALIGNMENT.out.bam, From ee5b34e1b9913f2c45323f8dd9aaa655c5ddca4b Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 26 Aug 2022 16:18:07 +0200 Subject: [PATCH 0637/1921] feat making ANALYSE_MT subworkflow --- conf/modules.config | 22 +++++++-------- subworkflows/local/align_MT.nf | 2 +- subworkflows/local/analyse_MT.nf | 47 ++++++++++++++++++++++++++++++++ workflows/raredisease.nf | 35 ++++++++++++++++-------- 4 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 subworkflows/local/analyse_MT.nf diff --git a/conf/modules.config b/conf/modules.config index 9614c6cb..a72ea8db 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -579,52 +579,52 @@ process { } // -// PREPARE_MT_ALIGNMENT +// ANALYSE_MT:PREPARE_MT_ALIGNMENT // process { - withName: '.*PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { + withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { ext.args = { "-h " } ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } } - withName: '.*PREPARE_MT_ALIGNMENT:GATK4_REVERTSAM_MT' { + withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:GATK4_REVERTSAM_MT' { ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } - withName: '.*PREPARE_MT_ALIGNMENT:GATK4_SAMTOFASTQ_MT' { + withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:GATK4_SAMTOFASTQ_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } // -// ALIGN_MT +// ANALYSE_MT:ALIGN_MT // process { - withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { + withName: '.*ANALYSE_MT:ALIGN_MT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } - withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { + withName: '.*ANALYSE_MT:ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } - withName: '.*ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { + withName: '.*ANALYSE_MT:ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } - withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { + withName: '.*ANALYSE_MT:ALIGN_MT:PICARD_MARKDUPLICATES_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } - withName: '.*ALIGN_MT:SAMTOOLS_SORT_MT' { + withName: '.*ANALYSE_MT:ALIGN_MT:SAMTOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ALIGN_MT:GATK4_MUTECT2_MT' { + withName: '.*ANALYSE_MT:ALIGN_MT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } } diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf index 40d7ec13..4b51a2ba 100644 --- a/subworkflows/local/align_MT.nf +++ b/subworkflows/local/align_MT.nf @@ -1,5 +1,5 @@ // -// Prepare bam files for MT allignment +// Allign MT // include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf new file mode 100644 index 00000000..988d854c --- /dev/null +++ b/subworkflows/local/analyse_MT.nf @@ -0,0 +1,47 @@ +// +// Analyse MT +// + +include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' +include { ALIGN_MT } from './align_MT' + + + +workflow ANALYSE_MT { + take: + bam // channel: [ val(meta), file(bam), file(bai) ] + index // channel: [ /path/to/bwamem2/index/ ] + fasta // channel: [ genome.fasta ] + dict // channel: [ genome.dict ] + fai // channel: [ genome.fai ] + intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] + + main: + ch_versions = Channel.empty() + + // STEP 1: PREPARING MT ALIGNMENT + PREPARE_MT_ALIGNMENT ( bam ) + ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files + + // STEP 2.1: MT ALLIGNMENT + + ch_intervals_mt = Channel.fromPath(params.intervals_mt) + ALIGN_MT ( + PREPARE_MT_ALIGNMENT.out.fastq, + PREPARE_MT_ALIGNMENT.out.bam, + index, + fasta, + dict, + fai, + ch_intervals_mt + ) + ch_versions = ch_versions.mix(ALIGN_MT.out.versions) + + + emit: + vcf = ALIGN_MT.out.vcf + tbi = ALIGN_MT.out.tbi + txt = ALIGN_MT.out.txt + html = ALIGN_MT.out.html + versions = ch_versions // channel: [ versions.yml ] +} \ No newline at end of file diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 352de8bb..3c0f1ba7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -56,8 +56,9 @@ include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_st include { GENS } from '../subworkflows/local/gens' include { ALIGN } from '../subworkflows/local/align' include { CALL_SNV } from '../subworkflows/local/call_snv' -include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' -include { ALIGN_MT } from '../subworkflows/local/align_MT' +include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' +//include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' +//include { ALIGN_MT } from '../subworkflows/local/align_MT' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -217,22 +218,34 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(ch_sv_annotate.versions) } - // STEP 2.1: PREPARING MT ALIGNMENT - PREPARE_MT_ALIGNMENT ( ch_mapped.bam_bai ) - ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) - // STEP 2.2: MT ALLIGNMENT + // STEP 2.1: PREPARING MT ALIGNMENT ch_intervals_mt = Channel.fromPath(params.intervals_mt) - ALIGN_MT ( - PREPARE_MT_ALIGNMENT.out.fastq, - PREPARE_MT_ALIGNMENT.out.bam, + ANALYSE_MT ( + ch_mapped.bam_bai, ch_references.aligner_index, ch_references.genome_fasta, ch_references.sequence_dict, ch_references.genome_fai, - ch_int + ch_intervals_mt ) - ch_versions = ch_versions.mix(ALIGN_MT.out.versions) + ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) + // STEP 2.1: PREPARING MT ALIGNMENT + //PREPARE_MT_ALIGNMENT ( ch_mapped.bam_bai ) + //ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) + + // STEP 2.2: MT ALLIGNMENT + //ch_intervals_mt = Channel.fromPath(params.intervals_mt) + //ALIGN_MT ( + // PREPARE_MT_ALIGNMENT.out.fastq, + // PREPARE_MT_ALIGNMENT.out.bam, + // ch_references.aligner_index, + // ch_references.genome_fasta, + // ch_references.sequence_dict, + // ch_references.genome_fai, + // ch_int + //) + //ch_versions = ch_versions.mix(ALIGN_MT.out.versions) // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) From d5477203b95a0ebdfec60e61a379abadb64c77fc Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 26 Aug 2022 16:21:09 +0200 Subject: [PATCH 0638/1921] fix deleted commented lines --- workflows/raredisease.nf | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3c0f1ba7..7076bbdd 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -57,8 +57,6 @@ include { GENS } from '../subworkflows/local/gens' include { ALIGN } from '../subworkflows/local/align' include { CALL_SNV } from '../subworkflows/local/call_snv' include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' -//include { PREPARE_MT_ALIGNMENT } from '../subworkflows/local/prepare_MT_alignment' -//include { ALIGN_MT } from '../subworkflows/local/align_MT' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -219,7 +217,7 @@ workflow RAREDISEASE { } - // STEP 2.1: PREPARING MT ALIGNMENT + // STEP 2.1: ANALYSE MT ch_intervals_mt = Channel.fromPath(params.intervals_mt) ANALYSE_MT ( ch_mapped.bam_bai, @@ -230,22 +228,6 @@ workflow RAREDISEASE { ch_intervals_mt ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) - // STEP 2.1: PREPARING MT ALIGNMENT - //PREPARE_MT_ALIGNMENT ( ch_mapped.bam_bai ) - //ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions) - - // STEP 2.2: MT ALLIGNMENT - //ch_intervals_mt = Channel.fromPath(params.intervals_mt) - //ALIGN_MT ( - // PREPARE_MT_ALIGNMENT.out.fastq, - // PREPARE_MT_ALIGNMENT.out.bam, - // ch_references.aligner_index, - // ch_references.genome_fasta, - // ch_references.sequence_dict, - // ch_references.genome_fai, - // ch_int - //) - //ch_versions = ch_versions.mix(ALIGN_MT.out.versions) // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) From 8bc302dde2819deb517347531574c2024ae8a8f6 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 29 Aug 2022 07:17:32 +0200 Subject: [PATCH 0639/1921] feat changing name of variable and subworkflow --- conf/modules.config | 14 +++---- subworkflows/local/align_MT.nf | 72 -------------------------------- subworkflows/local/analyse_MT.nf | 14 +++---- 3 files changed, 14 insertions(+), 86 deletions(-) delete mode 100644 subworkflows/local/align_MT.nf diff --git a/conf/modules.config b/conf/modules.config index a72ea8db..2c10ef72 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -598,33 +598,33 @@ process { } // -// ANALYSE_MT:ALIGN_MT +// ANALYSE_MT:ALIGN_AND_CALL_MT // process { - withName: '.*ANALYSE_MT:ALIGN_MT:BWAMEM2_MEM_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } - withName: '.*ANALYSE_MT:ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } - withName: '.*ANALYSE_MT:ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } - withName: '.*ANALYSE_MT:ALIGN_MT:PICARD_MARKDUPLICATES_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } - withName: '.*ANALYSE_MT:ALIGN_MT:SAMTOOLS_SORT_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ANALYSE_MT:ALIGN_MT:GATK4_MUTECT2_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } } diff --git a/subworkflows/local/align_MT.nf b/subworkflows/local/align_MT.nf deleted file mode 100644 index 4b51a2ba..00000000 --- a/subworkflows/local/align_MT.nf +++ /dev/null @@ -1,72 +0,0 @@ -// -// Allign MT -// - -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' -include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' - -workflow ALIGN_MT { - take: - fastq // channel: [ val(meta), path('*.fastq.gz') ] - ubam // channel: [ val(meta), path('*.bam') ] - index // channel: [ /path/to/bwamem2/index/ ] - fasta // channel: [ genome.fasta ] - dict // channel: [ genome.dict ] - fai // channel: [ genome.fai ] - intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] - - main: - ch_versions = Channel.empty() - - // Outputs bam files - BWAMEM2_MEM_MT ( fastq , index, true) - ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) - ch_mt_bam = BWAMEM2_MEM_MT.out.bam - ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) - - // Merges bam files - GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) - ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) - - // Add read group to merged bam file - PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) - ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) - - // Marks duplicates - PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) - ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) - - // Sort bam file - SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) - - // Index bam file - SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch2=SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) - ch3=ch2.combine(intervals_mt) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) - - // Calls variants with Mutect2 - GATK4_MUTECT2_MT ( ch3, fasta, fai, dict, [], [], [], [] ) - ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) - - // Haplocheck - // TODO: probably it will be outside this subworkflow as we want to run - // with the VCF with the variants from the shifted alignment (to solve the mt circularity issue) - HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) - ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) - - - emit: - vcf = GATK4_MUTECT2_MT.out.vcf - tbi = GATK4_MUTECT2_MT.out.tbi - txt = HAPLOCHECK_MT.out.txt - html = HAPLOCHECK_MT.out.html - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 988d854c..254d4a53 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -3,7 +3,7 @@ // include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' -include { ALIGN_MT } from './align_MT' +include { ALIGN_AND_CALL_MT } from './align_and_call_MT' @@ -26,7 +26,7 @@ workflow ANALYSE_MT { // STEP 2.1: MT ALLIGNMENT ch_intervals_mt = Channel.fromPath(params.intervals_mt) - ALIGN_MT ( + ALIGN_AND_CALL_MT ( PREPARE_MT_ALIGNMENT.out.fastq, PREPARE_MT_ALIGNMENT.out.bam, index, @@ -35,13 +35,13 @@ workflow ANALYSE_MT { fai, ch_intervals_mt ) - ch_versions = ch_versions.mix(ALIGN_MT.out.versions) + ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) emit: - vcf = ALIGN_MT.out.vcf - tbi = ALIGN_MT.out.tbi - txt = ALIGN_MT.out.txt - html = ALIGN_MT.out.html + vcf = ALIGN_AND_CALL_MT.out.vcf + tbi = ALIGN_AND_CALL_MT.out.tbi + txt = ALIGN_AND_CALL_MT.out.txt + html = ALIGN_AND_CALL_MT.out.html versions = ch_versions // channel: [ versions.yml ] } \ No newline at end of file From d1065e19c06fa75b88ccc4fe5961dd2ea355a9c2 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 29 Aug 2022 07:33:27 +0200 Subject: [PATCH 0640/1921] feat adding subworkflow after changing name --- subworkflows/local/align_and_call_MT.nf | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 subworkflows/local/align_and_call_MT.nf diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf new file mode 100644 index 00000000..98c861c1 --- /dev/null +++ b/subworkflows/local/align_and_call_MT.nf @@ -0,0 +1,72 @@ +// +// Allign and call MT +// + +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' + +workflow ALIGN_AND_CALL_MT { + take: + fastq // channel: [ val(meta), path('*.fastq.gz') ] + ubam // channel: [ val(meta), path('*.bam') ] + index // channel: [ /path/to/bwamem2/index/ ] + fasta // channel: [ genome.fasta ] + dict // channel: [ genome.dict ] + fai // channel: [ genome.fai ] + intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] + + main: + ch_versions = Channel.empty() + + // Outputs bam files + BWAMEM2_MEM_MT ( fastq , index, true) + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + ch_mt_bam = BWAMEM2_MEM_MT.out.bam + ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) + + // Merges bam files + GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) + ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + + // Add read group to merged bam file + PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) + ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) + + // Marks duplicates + PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) + ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) + + // Sort bam file + SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) + ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) + + // Index bam file + SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) + ch_sort_index_bam=SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) + ch_sort_index_bam_intervals_mt=ch_sort_index_bam.combine(intervals_mt) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) + + // Calls variants with Mutect2 + GATK4_MUTECT2_MT ( ch_sort_index_bam_intervals_mt, fasta, fai, dict, [], [], [], [] ) + ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) + + // Haplocheck + // TODO: probably it will be outside this subworkflow as we want to run + // with the VCF with the variants from the shifted alignment (to solve the mt circularity issue) + HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) + ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + + + emit: + vcf = GATK4_MUTECT2_MT.out.vcf + tbi = GATK4_MUTECT2_MT.out.tbi + txt = HAPLOCHECK_MT.out.txt + html = HAPLOCHECK_MT.out.html + versions = ch_versions // channel: [ versions.yml ] +} From 26710ccae9537673d21a5bdce6e2c7fa4de126ac Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Mon, 29 Aug 2022 08:50:05 +0200 Subject: [PATCH 0641/1921] Updated a comment --- subworkflows/local/analyse_MT.nf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 254d4a53..ff290ed6 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -23,8 +23,7 @@ workflow ANALYSE_MT { PREPARE_MT_ALIGNMENT ( bam ) ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files - // STEP 2.1: MT ALLIGNMENT - + // STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING ch_intervals_mt = Channel.fromPath(params.intervals_mt) ALIGN_AND_CALL_MT ( PREPARE_MT_ALIGNMENT.out.fastq, @@ -44,4 +43,4 @@ workflow ANALYSE_MT { txt = ALIGN_AND_CALL_MT.out.txt html = ALIGN_AND_CALL_MT.out.html versions = ch_versions // channel: [ versions.yml ] -} \ No newline at end of file +} From d2116224bbcc4210f352d6cdd13653aaf6e829c1 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 29 Aug 2022 15:05:50 +0200 Subject: [PATCH 0642/1921] fix changing " to ' --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 2c10ef72..f4aa3c8c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -584,7 +584,7 @@ process { process { withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { - ext.args = { "-h " } + ext.args = { '-h ' } ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } } From c22a9425a640b3d3560351e11cf13bb2bf790063 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Aug 2022 15:16:56 +0200 Subject: [PATCH 0643/1921] update options --- modules/local/filter_vep.nf | 4 ++-- subworkflows/local/annotate_snvs.nf | 5 ++++- subworkflows/local/annotate_structural_variants.nf | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 71d0ccf2..d629f3f1 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -43,8 +43,8 @@ process FILTER_VEP { --format vcf \\ --input_file $vcf \\ --output_file ${prefix}.ann_filter.vcf.gz \\ - --filter \"SYMBOL in feature.list\" \\ - --soft_filter + --only_matched \\ + --filter \"SYMBOL in feature.list\" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 1e2e1851..4c3bec80 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -84,7 +84,10 @@ workflow ANNOTATE_SNVS { ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) + FILTER_VEP(ENSEMBLVEP_SNV.out.vcf, feature_file) + emit: - vcf_ann = ENSEMBLVEP_SNV.out.vcf + vcf_ann_clinical = FILTER_VEP.out.vcf + vcf_ann_research = ENSEMBLVEP_SNV.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index e6e5cecf..b8655fc4 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -79,6 +79,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { FILTER_VEP(ENSEMBLVEP_SV.out.vcf, feature_file) emit: - vcf_ann = FILTER_VEP.out.vcf + vcf_ann_clinical = FILTER_VEP.out.vcf + vcf_ann_research = ENSEMBLVEP_SV.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From e655a64ee6feea08a6eb7d36202be774c7118113 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Aug 2022 13:44:19 +0200 Subject: [PATCH 0644/1921] add switch to annotate snv --- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ workflows/raredisease.nf | 43 +++++++++++++++++++++------------------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/nextflow.config b/nextflow.config index 37f4974c..ea94fa41 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,6 +22,7 @@ params { // Main options analysis_type = 'wgs' + annotate_snv_switch = false annotate_sv_switch = false gens_switch = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 9d519115..7216d31a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -285,6 +285,12 @@ "fa_icon": "fas fa-book", "enum": ["wgs", "wes", "mito"] }, + "annotate_snv_switch": { + "type": "boolean", + "default": false, + "description": "Specifies whether or not to run annotate SNV subworkflow.", + "fa_icon": "fas fa-book" + }, "annotate_sv_switch": { "type": "boolean", "default": false, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4b491e47..81ccd136 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -243,7 +243,7 @@ workflow RAREDISEASE { // STEP 2.1: ANALYSE MT ch_intervals_mt = Channel.fromPath(params.intervals_mt) - ANALYSE_MT ( + ANALYSE_MT ( ch_mapped.bam_bai, ch_references.aligner_index, ch_references.genome_fasta, @@ -256,26 +256,29 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) - ANNOTATE_SNVS ( - ch_vcf, - ch_references.vcfanno_resources, - params.vcfanno_toml, - params.genome, - params.vep_cache_version, - ch_vep_cache, - ch_references.genome_fasta, - ch_references.gnomad_af, - CHECK_INPUT.out.samples - ) - ch_versions = ch_versions.mix(ANNOTATE_SNVS.out.versions) + ch_snv_annotate = Channel.empty() + if (params.annotate_snv_switch) { + ANNOTATE_SNVS ( + ch_vcf, + ch_references.vcfanno_resources, + params.vcfanno_toml, + params.genome, + params.vep_cache_version, + ch_vep_cache, + ch_references.genome_fasta, + ch_references.gnomad_af, + CHECK_INPUT.out.samples + ).set {ch_snv_annotate} + ch_versions = ch_versions.mix(ch_snv_annotate.versions) - RANK_VARIANTS_SNV ( - ANNOTATE_SNVS.out.vcf_ann, - MAKE_PED.out.ped, - ch_reduced_penetrance, - ch_score_config_snv - ) - ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) + RANK_VARIANTS_SNV ( + ANNOTATE_SNVS.out.vcf_ann, + MAKE_PED.out.ped, + ch_reduced_penetrance, + ch_score_config_snv + ) + ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) + } // // MODULE: Pipeline reporting From 18820bb472ba4377a2efcd3c038afe2211f24115 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Aug 2022 14:06:44 +0200 Subject: [PATCH 0645/1921] fix fromPath error --- conf/genomes.config | 2 ++ workflows/raredisease.nf | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/genomes.config b/conf/genomes.config index 77cd2eca..91791bb2 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -19,6 +19,7 @@ params { gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" gnomad_af = "" gnomad_af_tbi = "" + intervals_mt = "" known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" @@ -41,6 +42,7 @@ params { gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" gnomad_af_tbi = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" + intervals_mt = "${params.local_genomes}/non_control_region.chrM.interval_list" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 81ccd136..26802ac2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -272,7 +272,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(ch_snv_annotate.versions) RANK_VARIANTS_SNV ( - ANNOTATE_SNVS.out.vcf_ann, + ch_snv_annotate.vcf_ann, MAKE_PED.out.ped, ch_reduced_penetrance, ch_score_config_snv From 1ef5c8ddcaed2a5a9db91cb7efd00eec73adba99 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Aug 2022 15:18:06 +0200 Subject: [PATCH 0646/1921] fix black error --- bin/check_samplesheet.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index d39456c9..eb13477e 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -98,7 +98,10 @@ def _validate_pair(self, row): """Assert that read pairs have the same file extension. Report pair status.""" if row[self._first_col] and row[self._second_col]: row[self._single_col] = False - if Path(row[self._first_col]).suffixes[-2:] != Path(row[self._second_col]).suffixes[-2:]: + if ( + Path(row[self._first_col]).suffixes[-2:] + != Path(row[self._second_col]).suffixes[-2:] + ): raise AssertionError("FASTQ pairs must have the same file extensions.") else: row[self._single_col] = True @@ -189,13 +192,25 @@ def check_samplesheet(file_in, file_out): https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv """ - required_columns = {"sample", "lane", "fastq_1", "fastq_2", "gender", "phenotype", "paternal_id", "maternal_id", "case_id"} + required_columns = { + "sample", + "lane", + "fastq_1", + "fastq_2", + "gender", + "phenotype", + "paternal_id", + "maternal_id", + "case_id", + } # See https://docs.python.org/3.9/library/csv.html#id3 to read up on `newline=""`. with file_in.open(newline="") as in_handle: reader = csv.DictReader(in_handle, dialect=sniff_format(in_handle)) # Validate the existence of the expected header columns. if not required_columns.issubset(reader.fieldnames): - logger.critical(f"The sample sheet **must** contain the column headers: {', '.join(required_columns)}.") + logger.critical( + f"The sample sheet **must** contain the column headers: {', '.join(required_columns)}." + ) sys.exit(1) # Validate each row. checker = RowChecker() From 1a9c817e50617a4c6069d8f6e95cddf2e3dc0f0f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Aug 2022 15:25:59 +0200 Subject: [PATCH 0647/1921] update modules.json --- modules.json | 162 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 108 insertions(+), 54 deletions(-) diff --git a/modules.json b/modules.json index 1be0bbb8..8d3ee942 100644 --- a/modules.json +++ b/modules.json @@ -6,166 +6,220 @@ "git_url": "https://github.com/nf-core/modules.git", "modules": { "bcftools/norm": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "bcftools/roh": { - "git_sha": "c079ee20250f5676c53b145fdd00f9defe91f112" + "git_sha": "c079ee20250f5676c53b145fdd00f9defe91f112", + "branch": "master" }, "bcftools/view": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "bwamem2/index": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "bwamem2/mem": { - "git_sha": "4f5274c3de0c9521f5033893ff61057a74c45ba9" + "git_sha": "4f5274c3de0c9521f5033893ff61057a74c45ba9", + "branch": "master" }, "cat/cat": { - "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" + "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641", + "branch": "master" }, "cnvpytor/callcnvs": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", + "branch": "master" }, "cnvpytor/histogram": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", + "branch": "master" }, "cnvpytor/importreaddepth": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", + "branch": "master" }, "cnvpytor/partition": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", + "branch": "master" }, "cnvpytor/view": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", + "branch": "master" }, "custom/dumpsoftwareversions": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", + "branch": "master" }, "deepvariant": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30", + "branch": "master" }, "expansionhunter": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "fastqc": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "gatk4/bedtointervallist": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449", + "branch": "master" }, "gatk4/createsequencedictionary": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449", + "branch": "master" }, "gatk4/intervallisttools": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449", + "branch": "master" }, "gatk4/mergebamalignment": { - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7", + "branch": "master" }, "gatk4/mutect2": { - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7", + "branch": "master" }, "gatk4/revertsam": { - "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273" + "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273", + "branch": "master" }, "gatk4/samtofastq": { - "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" + "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce", + "branch": "master" }, "genmod/annotate": { - "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" + "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5", + "branch": "master" }, "genmod/compound": { - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99", + "branch": "master" }, "genmod/models": { - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99", + "branch": "master" }, "genmod/score": { - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99", + "branch": "master" }, "glnexus": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "haplocheck": { - "git_sha": "f5615c3db63a2bda7a1dbfaeae447cac3161d7b9" + "git_sha": "f5615c3db63a2bda7a1dbfaeae447cac3161d7b9", + "branch": "master" }, "manta/germline": { - "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243" + "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243", + "branch": "master" }, "mosdepth": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", + "branch": "master" }, "multiqc": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "picard/addorreplacereadgroups": { - "git_sha": "baa2845d2818066bcbd8b91e6ce77d71e36ecf45" + "git_sha": "baa2845d2818066bcbd8b91e6ce77d71e36ecf45", + "branch": "master" }, "picard/collecthsmetrics": { - "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905" + "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905", + "branch": "master" }, "picard/collectmultiplemetrics": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "picard/markduplicates": { - "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6" + "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6", + "branch": "master" }, "picard/sortvcf": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "qualimap/bamqc": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "rhocall/annotate": { - "git_sha": "17a4e931427b5b144c0d0227a3ea49347ba7457a" + "git_sha": "17a4e931427b5b144c0d0227a3ea49347ba7457a", + "branch": "master" }, "samtools/faidx": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", + "branch": "master" }, "samtools/index": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", + "branch": "master" }, "samtools/merge": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", + "branch": "master" }, "samtools/sort": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", + "branch": "master" }, "samtools/stats": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", + "branch": "master" }, "samtools/view": { - "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" + "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce", + "branch": "master" }, "stranger": { - "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" + "git_sha": "c7329a3a5730872dea512921217993cfa7acd959", + "branch": "master" }, "svdb/merge": { - "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd", + "branch": "master" }, "svdb/query": { - "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd", + "branch": "master" }, "tabix/bgziptabix": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "tabix/tabix": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "tiddit/cov": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30", + "branch": "master" }, "tiddit/sv": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30", + "branch": "master" }, "ucsc/wigtobigwig": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" }, "untar": { - "git_sha": "9aadd9a6d3f5964476582319b3a1c54a3e3fe7c9" + "git_sha": "9aadd9a6d3f5964476582319b3a1c54a3e3fe7c9", + "branch": "master" }, "vcfanno": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", + "branch": "master" } } } From bb5107df4908889680978ea617a46f5a7a89eab1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Aug 2022 15:34:54 +0200 Subject: [PATCH 0648/1921] fix lint error --- modules.json | 216 ++++++++++++++++++++++++------------------------ nextflow.config | 1 + 2 files changed, 109 insertions(+), 108 deletions(-) diff --git a/modules.json b/modules.json index 8d3ee942..63e42025 100644 --- a/modules.json +++ b/modules.json @@ -6,220 +6,220 @@ "git_url": "https://github.com/nf-core/modules.git", "modules": { "bcftools/norm": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bcftools/roh": { - "git_sha": "c079ee20250f5676c53b145fdd00f9defe91f112", - "branch": "master" + "branch": "master", + "git_sha": "c079ee20250f5676c53b145fdd00f9defe91f112" }, "bcftools/view": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bwamem2/index": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "bwamem2/mem": { - "git_sha": "4f5274c3de0c9521f5033893ff61057a74c45ba9", - "branch": "master" + "branch": "master", + "git_sha": "4f5274c3de0c9521f5033893ff61057a74c45ba9" }, "cat/cat": { - "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641", - "branch": "master" + "branch": "master", + "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" }, "cnvpytor/callcnvs": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", - "branch": "master" + "branch": "master", + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/histogram": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", - "branch": "master" + "branch": "master", + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/importreaddepth": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", - "branch": "master" + "branch": "master", + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/partition": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", - "branch": "master" + "branch": "master", + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "cnvpytor/view": { - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518", - "branch": "master" + "branch": "master", + "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" }, "custom/dumpsoftwareversions": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", - "branch": "master" + "branch": "master", + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "deepvariant": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30", - "branch": "master" + "branch": "master", + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "expansionhunter": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "fastqc": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "gatk4/bedtointervallist": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449", - "branch": "master" + "branch": "master", + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "gatk4/createsequencedictionary": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449", - "branch": "master" + "branch": "master", + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "gatk4/intervallisttools": { - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449", - "branch": "master" + "branch": "master", + "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" }, "gatk4/mergebamalignment": { - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7", - "branch": "master" + "branch": "master", + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "gatk4/mutect2": { - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7", - "branch": "master" + "branch": "master", + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "gatk4/revertsam": { - "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273", - "branch": "master" + "branch": "master", + "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273" }, "gatk4/samtofastq": { - "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce", - "branch": "master" + "branch": "master", + "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" }, "genmod/annotate": { - "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5", - "branch": "master" + "branch": "master", + "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" }, "genmod/compound": { - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99", - "branch": "master" + "branch": "master", + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" }, "genmod/models": { - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99", - "branch": "master" + "branch": "master", + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" }, "genmod/score": { - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99", - "branch": "master" + "branch": "master", + "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" }, "glnexus": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "haplocheck": { - "git_sha": "f5615c3db63a2bda7a1dbfaeae447cac3161d7b9", - "branch": "master" + "branch": "master", + "git_sha": "f5615c3db63a2bda7a1dbfaeae447cac3161d7b9" }, "manta/germline": { - "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243", - "branch": "master" + "branch": "master", + "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243" }, "mosdepth": { - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d", - "branch": "master" + "branch": "master", + "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" }, "multiqc": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/addorreplacereadgroups": { - "git_sha": "baa2845d2818066bcbd8b91e6ce77d71e36ecf45", - "branch": "master" + "branch": "master", + "git_sha": "baa2845d2818066bcbd8b91e6ce77d71e36ecf45" }, "picard/collecthsmetrics": { - "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905", - "branch": "master" + "branch": "master", + "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905" }, "picard/collectmultiplemetrics": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "picard/markduplicates": { - "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6", - "branch": "master" + "branch": "master", + "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6" }, "picard/sortvcf": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "qualimap/bamqc": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "rhocall/annotate": { - "git_sha": "17a4e931427b5b144c0d0227a3ea49347ba7457a", - "branch": "master" + "branch": "master", + "git_sha": "17a4e931427b5b144c0d0227a3ea49347ba7457a" }, "samtools/faidx": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", - "branch": "master" + "branch": "master", + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/index": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", - "branch": "master" + "branch": "master", + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/merge": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", - "branch": "master" + "branch": "master", + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/sort": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", - "branch": "master" + "branch": "master", + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/stats": { - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773", - "branch": "master" + "branch": "master", + "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" }, "samtools/view": { - "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce", - "branch": "master" + "branch": "master", + "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" }, "stranger": { - "git_sha": "c7329a3a5730872dea512921217993cfa7acd959", - "branch": "master" + "branch": "master", + "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" }, "svdb/merge": { - "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd", - "branch": "master" + "branch": "master", + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" }, "svdb/query": { - "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd", - "branch": "master" + "branch": "master", + "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" }, "tabix/bgziptabix": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "tabix/tabix": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "tiddit/cov": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30", - "branch": "master" + "branch": "master", + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "tiddit/sv": { - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30", - "branch": "master" + "branch": "master", + "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, "ucsc/wigtobigwig": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" }, "untar": { - "git_sha": "9aadd9a6d3f5964476582319b3a1c54a3e3fe7c9", - "branch": "master" + "branch": "master", + "git_sha": "9aadd9a6d3f5964476582319b3a1c54a3e3fe7c9" }, "vcfanno": { - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe", - "branch": "master" + "branch": "master", + "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" } } } diff --git a/nextflow.config b/nextflow.config index 16bf8b84..3a94fc6b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -48,6 +48,7 @@ params { max_multiqc_email_size = '25.MB' // Boilerplate options + outdir = 'results' tracedir = "${params.outdir}/pipeline_info" publish_dir_mode = 'copy' email = null From 06b758307ec57df18e3d508d0d6a0bbbe563d382 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Sep 2022 10:26:56 +0200 Subject: [PATCH 0649/1921] change default --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 471d28b7..5204d2ee 100644 --- a/nextflow.config +++ b/nextflow.config @@ -21,7 +21,7 @@ params { // Main options analysis_type = 'wgs' - annotate_snv_switch = false + annotate_snv_switch = true annotate_sv_switch = false gens_switch = false From d1084d511e48da07139a9a8d0774909954d3a582 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Sep 2022 10:59:41 +0200 Subject: [PATCH 0650/1921] fix error --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 7216d31a..a9a652df 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -287,7 +287,7 @@ }, "annotate_snv_switch": { "type": "boolean", - "default": false, + "default": true, "description": "Specifies whether or not to run annotate SNV subworkflow.", "fa_icon": "fas fa-book" }, From 28e26043f5886f0c0a8857bdebebed5894c78ce8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Sep 2022 16:39:06 +0200 Subject: [PATCH 0651/1921] review suggestions --- workflows/raredisease.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 26802ac2..312c3d4a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -218,7 +218,6 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } - ch_sv_annotate = Channel.empty() if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, @@ -256,7 +255,6 @@ workflow RAREDISEASE { // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) - ch_snv_annotate = Channel.empty() if (params.annotate_snv_switch) { ANNOTATE_SNVS ( ch_vcf, From a281a25dcf0e4319fc3156da667f04b75c7827a9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 8 Sep 2022 13:08:43 +0200 Subject: [PATCH 0652/1921] add vep filter to snv --- subworkflows/local/annotate_snvs.nf | 2 ++ workflows/raredisease.nf | 1 + 2 files changed, 3 insertions(+) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 4c3bec80..fde6a0bf 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -7,11 +7,13 @@ include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/b include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' +include { FILTER_VEP } from '../../modules/local/filter_vep' workflow ANNOTATE_SNVS { take: + feature_file vcf vcfanno_resource_dir vcfanno_toml diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c8815189..343d8b4f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -259,6 +259,7 @@ workflow RAREDISEASE { if (params.annotate_snv_switch) { ANNOTATE_SNVS ( + ch_vep_filters, ch_vcf, ch_references.vcfanno_resources, params.vcfanno_toml, From b47cea36c281cf13715998a2bb37f1762a2bfff6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Sep 2022 23:58:05 +0200 Subject: [PATCH 0653/1921] Add vcfparser python script --- assets/variant_consequences_v1.txt | 39 +++++++ bin/vcfparser.py | 179 +++++++++++++++++++++++++++++ 2 files changed, 218 insertions(+) create mode 100644 assets/variant_consequences_v1.txt create mode 100644 bin/vcfparser.py diff --git a/assets/variant_consequences_v1.txt b/assets/variant_consequences_v1.txt new file mode 100644 index 00000000..0893a8b9 --- /dev/null +++ b/assets/variant_consequences_v1.txt @@ -0,0 +1,39 @@ +transcript_ablation +splice_acceptor_variant +splice_donor_variant +stop_gained +frameshift_variant +stop_lost +start_lost +transcript_amplification +inframe_insertion +inframe_deletion +missense_variant +protein_altering_variant +splice_region_variant +splice_donor_5th_base_variant +splice_donor_region_variant +splice_polypyrimidine_tract_variant +incomplete_terminal_codon_variant +start_retained_variant +stop_retained_variant +synonymous_variant +coding_sequence_variant +mature_miRNA_variant +5_prime_UTR_variant +3_prime_UTR_variant +non_coding_transcript_exon_variant +intron_variant +NMD_transcript_variant +non_coding_transcript_variant +upstream_gene_variant +downstream_gene_variant +TFBS_ablation +TFBS_amplification +TF_binding_site_variant +regulatory_region_ablation +regulatory_region_amplification +feature_elongation +regulatory_region_variant +feature_truncation +intergenic_variant diff --git a/bin/vcfparser.py b/bin/vcfparser.py new file mode 100644 index 00000000..40445e13 --- /dev/null +++ b/bin/vcfparser.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +import argparse +import sys +from collections import Counter +from pathlib import Path + +def parse_vep_csq_transcripts(transcripts, allele_ind, csq_ind, hgnc_ind, var_csq): + """ + Parse conseqences for each transcript and return HGNC IDs, alleles, and their severity rank + based on the term's ranking in the ensembl consequences list. + + Args: + transcripts (list): A list of vep transcript annotation + allele_ind (int) : Index of the "allele" in the vep annotation record + csq_ind (int) : Index of the "Consequence" in the vep annotation record + hgnc_ind (int) : Index of the "HGNC_ID" in the vep annotation record + var_csq (list): A list of consequence terms ordered by rank + + Returns: + hgnc_ids (list): list of hgnc ids in the record + alleles (list): list of alleles in the record + consequences (list): list of consequence terms in the record + severity (list): list of consequence term ranks + """ + + consequences = [] + hgnc_ids = [] + severity = [] + alleles = [] + mscsq_anno = [] + for transcript in transcripts: + vep_fields = transcript.strip().split("|") + csq = vep_fields[csq_ind].split("&")[0] + hgnc_id = vep_fields[hgnc_ind] + allele = vep_fields[allele_ind].replace("CSQ=", "") + consequences.append(csq) + hgnc_ids.append(hgnc_id) + severity.append(var_csq.index(csq)) + alleles.append(allele) + return hgnc_ids, alleles, consequences, severity + + +def construct_most_severe_consequence_info(line, allele_ind, csq_ind, hgnc_ind, var_csq): + """ + Parse conseqences for each transcript and return HGNC IDs, alleles, and their severity rank + based on the term's ranking in the ensembl consequences list. + + Args: + line (str) : Vcf record + allele_ind (int) : Index of the "allele" in the vep annotation record + csq_ind (int) : Index of the "Consequence" in the vep annotation record + hgnc_ind (int) : Index of the "HGNC_ID" in the vep annotation record + var_csq (list): A list of consequence terms ordered by rank + + Returns: + columns (list): A list of fields in the vcf record with most severe consequence added + to the INFO column + """ + + columns = line.strip().split() + transcripts = columns[7].split("CSQ=")[1].split(",") + hgnc_ids, alleles, consequences, severity = parse_vep_csq_transcripts( + transcripts, allele_ind, csq_ind, hgnc_ind, var_csq + ) + unique_ids = list(set(hgnc_ids)) + mscsq_anno = [] + for gene_id in unique_ids: + if gene_id != "": + indices = find_indices(hgnc_ids, gene_id) + alleles_sub = [alleles[i] for i in indices] + consequences_sub = [consequences[i] for i in indices] + severity_sub = [severity[i] for i in indices] + most_severe_csq = consequences_sub[severity_sub.index(min(severity_sub))] + most_severe_allele = alleles_sub[severity_sub.index(min(severity_sub))] + mscsq_anno.append(gene_id + ":" + most_severe_allele + "|" + most_severe_csq) + columns[7] += ";most_severe_consequence=" + ",".join(mscsq_anno) + return columns + + +def find_indices(list_to_check, item_to_find): + """ + Get indices of an element in a list + + Args: + list_to_check (list) + item_to_find (value) + + Returns: + indices (list) + """ + indices = [] + for idx, value in enumerate(list_to_check): + if value == item_to_find: + indices.append(idx) + return indices + + +def parse_vep_csq_schema(line): + """ + Get indices of allele, consequence, and hgnc id in the annotation + + Args: + line: INFO line in the vcf header with CSQ information + + Returns: + allele_ind (int) : Index of the "allele" in the vep annotation record + csq_ind (int) : Index of the "Consequence" in the vep annotation record + hgnc_ind (int) : Index of the "HGNC_ID" in the vep annotation record + """ + fields = line.strip().split("Format: ")[1].replace('">', "").split("|") + allele_ind = fields.index("Allele") + csq_ind = fields.index("Consequence") + hgnc_ind = fields.index("HGNC_ID") + + return allele_ind, csq_ind, hgnc_ind + + +def write_csq_annotated_vcf(file_in, file_out, var_csq): + """Add most severe consequence field to record, and write the record to a vcf file""" + counter = 0 + for line in file_in: + if line.startswith("#"): + if line.startswith("##INFO=\n' + ) + counter = 0 + file_out.write(line) + else: + mscsq = construct_most_severe_consequence_info(line, allele_ind, csq_ind, hgnc_ind, var_csq) + file_out.write("\t".join(mscsq) + "\n") + + +def parse_args(argv=None): + """Define and immediately parse command line arguments.""" + parser = argparse.ArgumentParser( + description="Annotate vcf with the most severe consequence field.", + epilog="Example: python vcfparser.py vep.vcf vep.most_severe_csq.vcf", + ) + parser.add_argument( + "file_in", + metavar="FILE_IN", + type=Path, + help="Vcf file annotated with vep.", + ) + parser.add_argument( + "file_out", + metavar="FILE_OUT", + type=Path, + help="Vcf with most_severe_consequence annotations added to it.", + ) + parser.add_argument( + "variant_csq", + metavar="VARIANT_CSQ", + type=Path, + help="Variant consequences ranked by severity", + ) + return parser.parse_args(argv) + + +def main(argv=None): + """Coordinate argument parsing and program execution.""" + args = parse_args(argv) + if not args.file_in.is_file(): + print(f"The given input file {args.file_in} was not found!") + sys.exit(2) + args.file_out.parent.mkdir(parents=True, exist_ok=True) + with open(args.variant_csq) as f: + var_csq = [line.strip() for line in f] + with open(args.file_out, "w") as out_vcf: + with open(args.file_in) as in_vcf: + write_csq_annotated_vcf(in_vcf, out_vcf, var_csq) + + +if __name__ == "__main__": + sys.exit(main()) From a6af0624a2ec7b96c1ef62136614ffa2b2c25ba0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 10 Sep 2022 00:08:54 +0200 Subject: [PATCH 0654/1921] Add vcfparser module --- modules/local/filter_vep.nf | 17 --------------- modules/local/vcfparser.nf | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 modules/local/vcfparser.nf diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index d629f3f1..7b96fbde 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -22,23 +22,6 @@ process FILTER_VEP { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - export INPUT_FILE=${select_feature_file_bed} - export OUTPUT_FILE="feature.list" - - python3 < versions.yml + "${task.process}": + vcfparser: v1.0 + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcfparser.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + vcfparser: v1.0 + END_VERSIONS + """ +} From dd1c4a241e7229dd3ebc4a852958aa5011bb6711 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 11 Sep 2022 00:05:02 +0200 Subject: [PATCH 0655/1921] add vcfparser to workflow --- bin/vcfparser.py | 1 + workflows/raredisease.nf | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/bin/vcfparser.py b/bin/vcfparser.py index 40445e13..12da31d1 100644 --- a/bin/vcfparser.py +++ b/bin/vcfparser.py @@ -4,6 +4,7 @@ from collections import Counter from pathlib import Path + def parse_vep_csq_transcripts(transcripts, allele_ind, csq_ind, hgnc_ind, var_csq): """ Parse conseqences for each transcript and return HGNC IDs, alleles, and their severity rank diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 343d8b4f..eafff398 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -30,13 +30,14 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] -ch_call_interval = params.call_interval ? file(params.call_interval) : [] -ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] -ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] -ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] -ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] -ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] +ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] +ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] +ch_variant_consequences = file("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) +ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] +ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -58,6 +59,8 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // include { MAKE_PED } from '../modules/local/create_pedfile' +include { VCFPARSER as VCFPARSER_SNV } from '../modules/local/vcfparser' +include { VCFPARSER as VCFPARSER_SV } from '../modules/local/vcfparser' // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -239,6 +242,11 @@ workflow RAREDISEASE { ch_score_config_sv ) ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) + + VCFPARSER_SV ( + RANK_VARIANTS_SV.out.vcf, + ch_variant_consequences + ) } @@ -279,6 +287,11 @@ workflow RAREDISEASE { ch_score_config_snv ) ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) + + VCFPARSER_SNV ( + RANK_VARIANTS_SNV.out.vcf, + ch_variant_consequences + ) } // From c26e831a8babad769a41570a002eb0ea7f016fe3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 11 Sep 2022 00:56:09 +0200 Subject: [PATCH 0656/1921] add modules to subworkflow --- conf/genomes.config | 2 ++ main.nf | 1 + modules/local/filter_vep.nf | 4 +-- modules/local/vcfparser.nf | 2 +- nextflow_schema.json | 7 ++++ subworkflows/local/annotate_snvs.nf | 8 ++--- .../local/annotate_structural_variants.nf | 7 ++-- subworkflows/nf-core/genmod.nf | 2 +- workflows/raredisease.nf | 33 +++++++++++++------ 9 files changed, 41 insertions(+), 25 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index de523ad9..79592106 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -26,6 +26,7 @@ params { reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" + select_feature_file = "${params.local_genomes}/hgnc.txt" svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" @@ -50,6 +51,7 @@ params { reduced_penetrance = "" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" + select_feature_file = "${params.local_genomes}/hgnc.txt" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" diff --git a/main.nf b/main.nf index 9ea1f2a0..a1e5bcdc 100644 --- a/main.nf +++ b/main.nf @@ -33,6 +33,7 @@ params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model' params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') +params.select_feature_file = WorkflowMain.getGenomeAttribute(params, 'select_feature_file') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 7b96fbde..7d1fb448 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -9,7 +9,7 @@ process FILTER_VEP { input: tuple val(meta), path(vcf) - path (select_feature_file_bed) + path (select_feature_file) output: tuple val(meta), path("*.ann_filter.vcf.gz"), emit: vcf @@ -27,7 +27,7 @@ process FILTER_VEP { --input_file $vcf \\ --output_file ${prefix}.ann_filter.vcf.gz \\ --only_matched \\ - --filter \"SYMBOL in feature.list\" + --filter \"HGNC_ID in ${select_feature_file}\" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/vcfparser.nf b/modules/local/vcfparser.nf index 641d880b..14063b79 100644 --- a/modules/local/vcfparser.nf +++ b/modules/local/vcfparser.nf @@ -12,7 +12,7 @@ process VCFPARSER { path (variant_consequences) output: - tuple val(meta), path("*.vcfparser.vcf"), emit: vcf + tuple val(meta), path("*.vcfparser.vcf") , emit: vcf path "versions.yml" , emit: versions when: diff --git a/nextflow_schema.json b/nextflow_schema.json index b36cfec5..e7daabba 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -178,6 +178,13 @@ "description": "SV rank model config file for genmod.", "hidden": true }, + "select_feature_file": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "File containing HGNC_IDs of interest on separate lines.", + "hidden": true + }, "vep_filters": { "type": "string", "format": "path", diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index fde6a0bf..fc4064f7 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -7,7 +7,6 @@ include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/b include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' -include { FILTER_VEP } from '../../modules/local/filter_vep' workflow ANNOTATE_SNVS { @@ -86,10 +85,7 @@ workflow ANNOTATE_SNVS { ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) - FILTER_VEP(ENSEMBLVEP_SNV.out.vcf, feature_file) - emit: - vcf_ann_clinical = FILTER_VEP.out.vcf - vcf_ann_research = ENSEMBLVEP_SNV.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf_ann = ENSEMBLVEP_SNV.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index b8655fc4..a7a01a54 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -7,7 +7,6 @@ include { PICARD_SORTVCF } from '../../modules/nf-core/modules/pi include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' -include { FILTER_VEP } from '../../modules/local/filter_vep' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -76,10 +75,8 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) - FILTER_VEP(ENSEMBLVEP_SV.out.vcf, feature_file) emit: - vcf_ann_clinical = FILTER_VEP.out.vcf - vcf_ann_research = ENSEMBLVEP_SV.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf_ann = ENSEMBLVEP_SV.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/genmod.nf b/subworkflows/nf-core/genmod.nf index 7bc74780..c3241396 100644 --- a/subworkflows/nf-core/genmod.nf +++ b/subworkflows/nf-core/genmod.nf @@ -28,6 +28,6 @@ workflow RANK_VARIANTS { ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) emit: - vcf_ann = GENMOD_COMPOUND.out.vcf + vcf = GENMOD_COMPOUND.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eafff398..bf56c8ea 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -30,14 +30,15 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] -ch_call_interval = params.call_interval ? file(params.call_interval) : [] -ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] -ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] -ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] +ch_select_feature_file = params.select_feature_file ? file(params.select_feature_file): [] +ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] +ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] ch_variant_consequences = file("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) -ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] -ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] +ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] +ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -58,9 +59,11 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // MODULE: local modules // -include { MAKE_PED } from '../modules/local/create_pedfile' -include { VCFPARSER as VCFPARSER_SNV } from '../modules/local/vcfparser' -include { VCFPARSER as VCFPARSER_SV } from '../modules/local/vcfparser' +include { MAKE_PED } from '../modules/local/create_pedfile' +include { VCFPARSER as VCFPARSER_SNV } from '../modules/local/vcfparser' +include { VCFPARSER as VCFPARSER_SV } from '../modules/local/vcfparser' +include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' +include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -247,6 +250,11 @@ workflow RAREDISEASE { RANK_VARIANTS_SV.out.vcf, ch_variant_consequences ) + + FILTER_VEP_SV( + VCFPARSER_SV.out.vcf, + ch_select_feature_file + ) } @@ -292,6 +300,11 @@ workflow RAREDISEASE { RANK_VARIANTS_SNV.out.vcf, ch_variant_consequences ) + + FILTER_VEP_SNV( + VCFPARSER_SNV.out.vcf, + ch_select_feature_file + ) } // From 2f5cd3a0612240a66cdc21ebb71d8a3dcc4755bf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 12 Sep 2022 13:49:05 +0200 Subject: [PATCH 0657/1921] remove select_feature_file and retain vep_filters --- main.nf | 1 - nextflow_schema.json | 9 +-------- subworkflows/local/annotate_snvs.nf | 1 - subworkflows/local/annotate_structural_variants.nf | 1 - workflows/raredisease.nf | 7 ++----- 5 files changed, 3 insertions(+), 16 deletions(-) diff --git a/main.nf b/main.nf index a1e5bcdc..9ea1f2a0 100644 --- a/main.nf +++ b/main.nf @@ -33,7 +33,6 @@ params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model' params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') -params.select_feature_file = WorkflowMain.getGenomeAttribute(params, 'select_feature_file') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/nextflow_schema.json b/nextflow_schema.json index e7daabba..6e18bebd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -178,18 +178,11 @@ "description": "SV rank model config file for genmod.", "hidden": true }, - "select_feature_file": { - "type": "string", - "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "File containing HGNC_IDs of interest on separate lines.", - "hidden": true - }, "vep_filters": { "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", - "description": "Gene panel file to be used with filter_vep to separate clinical and research variants.", + "description": "File containing HGNC_IDs of interest on separate lines.", "hidden": true }, "target_bed": { diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index fc4064f7..34b46c18 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -12,7 +12,6 @@ include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/t workflow ANNOTATE_SNVS { take: - feature_file vcf vcfanno_resource_dir vcfanno_toml diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index a7a01a54..8a23a96e 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -11,7 +11,6 @@ include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/m workflow ANNOTATE_STRUCTURAL_VARIANTS { take: - feature_file vcf // channel: [ val(meta), path(vcf) ] sv_dbs // file: dbs.csv vep_genome diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index bf56c8ea..e66e42ce 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -33,7 +33,6 @@ if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input sample ch_ml_model = params.ml_model ? file(params.ml_model) : [] ch_call_interval = params.call_interval ? file(params.call_interval) : [] ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] -ch_select_feature_file = params.select_feature_file ? file(params.select_feature_file): [] ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] ch_variant_consequences = file("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) @@ -227,7 +226,6 @@ workflow RAREDISEASE { if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( - ch_vep_filters, CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, params.genome, @@ -253,7 +251,7 @@ workflow RAREDISEASE { FILTER_VEP_SV( VCFPARSER_SV.out.vcf, - ch_select_feature_file + ch_vep_filters ) } @@ -275,7 +273,6 @@ workflow RAREDISEASE { if (params.annotate_snv_switch) { ANNOTATE_SNVS ( - ch_vep_filters, ch_vcf, ch_references.vcfanno_resources, params.vcfanno_toml, @@ -303,7 +300,7 @@ workflow RAREDISEASE { FILTER_VEP_SNV( VCFPARSER_SNV.out.vcf, - ch_select_feature_file + ch_vep_filters ) } From 66678a882ab52827f9778c3c7d9dcfef385d9594 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:25:12 +0200 Subject: [PATCH 0658/1921] review suggestions --- bin/vcfparser.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/bin/vcfparser.py b/bin/vcfparser.py index 12da31d1..f72357e8 100644 --- a/bin/vcfparser.py +++ b/bin/vcfparser.py @@ -1,11 +1,13 @@ #!/usr/bin/env python import argparse import sys -from collections import Counter from pathlib import Path +from typing import Tuple, TextIO -def parse_vep_csq_transcripts(transcripts, allele_ind, csq_ind, hgnc_ind, var_csq): +def parse_vep_csq_transcripts( + transcripts: list, allele_ind: int, csq_ind: int, hgnc_ind: int, var_csq: list +) -> Tuple[list, list, list, list]: """ Parse conseqences for each transcript and return HGNC IDs, alleles, and their severity rank based on the term's ranking in the ensembl consequences list. @@ -28,7 +30,6 @@ def parse_vep_csq_transcripts(transcripts, allele_ind, csq_ind, hgnc_ind, var_cs hgnc_ids = [] severity = [] alleles = [] - mscsq_anno = [] for transcript in transcripts: vep_fields = transcript.strip().split("|") csq = vep_fields[csq_ind].split("&")[0] @@ -41,7 +42,9 @@ def parse_vep_csq_transcripts(transcripts, allele_ind, csq_ind, hgnc_ind, var_cs return hgnc_ids, alleles, consequences, severity -def construct_most_severe_consequence_info(line, allele_ind, csq_ind, hgnc_ind, var_csq): +def construct_most_severe_consequence_info( + line: str, allele_ind: int, csq_ind: int, hgnc_ind: int, var_csq: list +) -> list: """ Parse conseqences for each transcript and return HGNC IDs, alleles, and their severity rank based on the term's ranking in the ensembl consequences list. @@ -74,11 +77,12 @@ def construct_most_severe_consequence_info(line, allele_ind, csq_ind, hgnc_ind, most_severe_csq = consequences_sub[severity_sub.index(min(severity_sub))] most_severe_allele = alleles_sub[severity_sub.index(min(severity_sub))] mscsq_anno.append(gene_id + ":" + most_severe_allele + "|" + most_severe_csq) - columns[7] += ";most_severe_consequence=" + ",".join(mscsq_anno) + if mscsq_anno: + columns[7] += ";most_severe_consequence=" + ",".join(mscsq_anno) return columns -def find_indices(list_to_check, item_to_find): +def find_indices(list_to_check: list, item_to_find: str) -> list: """ Get indices of an element in a list @@ -96,7 +100,7 @@ def find_indices(list_to_check, item_to_find): return indices -def parse_vep_csq_schema(line): +def parse_vep_csq_schema(line: str) -> Tuple[int, int, int]: """ Get indices of allele, consequence, and hgnc id in the annotation @@ -116,20 +120,16 @@ def parse_vep_csq_schema(line): return allele_ind, csq_ind, hgnc_ind -def write_csq_annotated_vcf(file_in, file_out, var_csq): +def write_csq_annotated_vcf(file_in: TextIO, file_out: TextIO, var_csq: list): """Add most severe consequence field to record, and write the record to a vcf file""" - counter = 0 for line in file_in: if line.startswith("#"): + file_out.write(line) if line.startswith("##INFO=\n' ) - counter = 0 - file_out.write(line) else: mscsq = construct_most_severe_consequence_info(line, allele_ind, csq_ind, hgnc_ind, var_csq) file_out.write("\t".join(mscsq) + "\n") @@ -139,22 +139,22 @@ def parse_args(argv=None): """Define and immediately parse command line arguments.""" parser = argparse.ArgumentParser( description="Annotate vcf with the most severe consequence field.", - epilog="Example: python vcfparser.py vep.vcf vep.most_severe_csq.vcf", + epilog="Example: python vcfparser.py --file_in vep.vcf --file_out vep.most_severe_csq.vcf --variant_csq variant_consequence.txt", ) parser.add_argument( - "file_in", + "--file_in", metavar="FILE_IN", type=Path, help="Vcf file annotated with vep.", ) parser.add_argument( - "file_out", + "--file_out", metavar="FILE_OUT", type=Path, help="Vcf with most_severe_consequence annotations added to it.", ) parser.add_argument( - "variant_csq", + "--variant_csq", metavar="VARIANT_CSQ", type=Path, help="Variant consequences ranked by severity", From b44926b897395823b7055cc82696367c59e6ef8b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:37:50 +0200 Subject: [PATCH 0659/1921] add file exists check for variant_csq --- bin/vcfparser.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/vcfparser.py b/bin/vcfparser.py index f72357e8..b6d14732 100644 --- a/bin/vcfparser.py +++ b/bin/vcfparser.py @@ -168,6 +168,9 @@ def main(argv=None): if not args.file_in.is_file(): print(f"The given input file {args.file_in} was not found!") sys.exit(2) + if not args.variant_csq.is_file(): + print(f"The given variant consequence file {args.variant_csq} was not found!") + sys.exit(2) args.file_out.parent.mkdir(parents=True, exist_ok=True) with open(args.variant_csq) as f: var_csq = [line.strip() for line in f] From 729b9bf43e549fc9045a9851006c6f18bb5989ed Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Sep 2022 14:32:14 +0200 Subject: [PATCH 0660/1921] switch order --- subworkflows/local/vcfparser.nf | 26 ++++++++++++++++++++++++++ workflows/raredisease.nf | 26 ++++++++++++++------------ 2 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 subworkflows/local/vcfparser.nf diff --git a/subworkflows/local/vcfparser.nf b/subworkflows/local/vcfparser.nf new file mode 100644 index 00000000..fcda7129 --- /dev/null +++ b/subworkflows/local/vcfparser.nf @@ -0,0 +1,26 @@ +// +// A subworkflow to call SNVs by sentieon dnascope with a machine learning model. +// + +include { VCFPARSER } from '../../modules/local/vcfparser' + +workflow VCFPARSER_CSQ { + take: + clinical // channel: [ val(meta), vcf ] + research // channel: [ val(meta), vcf ] + variant_consequences // path: consequences.txt + + main: + ch_versions = Channel.empty() + + ch_input = clinical.join(research) + + VCFPARSER ( + ch_input, + variant_consequences + ) + + emit: + vcf = VCFPARSER.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e66e42ce..f38fa906 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -59,8 +59,6 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // include { MAKE_PED } from '../modules/local/create_pedfile' -include { VCFPARSER as VCFPARSER_SNV } from '../modules/local/vcfparser' -include { VCFPARSER as VCFPARSER_SV } from '../modules/local/vcfparser' include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' @@ -76,6 +74,8 @@ include { GENS } from '../subworkflows/local/gens' include { ALIGN } from '../subworkflows/local/align' include { CALL_SNV } from '../subworkflows/local/call_snv' include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' +include { VCFPARSER_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/vcfparser' +include { VCFPARSER_CSQ as ANN_CSQ_SV } from '../subworkflows/local/vcfparser' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -244,14 +244,15 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) - VCFPARSER_SV ( + FILTER_VEP_SV( RANK_VARIANTS_SV.out.vcf, - ch_variant_consequences + ch_vep_filters ) - FILTER_VEP_SV( - VCFPARSER_SV.out.vcf, - ch_vep_filters + ANN_CSQ_SV ( + FILTER_VEP_SV.out.vcf, + RANK_VARIANTS_SV.out.vcf, + ch_variant_consequences ) } @@ -293,14 +294,15 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) - VCFPARSER_SNV ( + FILTER_VEP_SNV( RANK_VARIANTS_SNV.out.vcf, - ch_variant_consequences + ch_vep_filters ) - FILTER_VEP_SNV( - VCFPARSER_SNV.out.vcf, - ch_vep_filters + ANN_CSQ_SNV ( + FILTER_VEP_SNV.out.vcf, + RANK_VARIANTS_SNV.out.vcf, + ch_variant_consequences ) } From e3af85c61084e3f78441372bf764f55c3a3ef2f9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Sep 2022 15:47:30 +0200 Subject: [PATCH 0661/1921] update modules --- modules.json | 62 +++++++++---------- modules/nf-core/modules/bcftools/norm/main.nf | 8 +-- .../nf-core/modules/bcftools/norm/meta.yml | 8 ++- modules/nf-core/modules/bcftools/view/main.nf | 6 +- modules/nf-core/modules/bwamem2/index/main.nf | 6 +- .../nf-core/modules/bwamem2/index/meta.yml | 12 +++- modules/nf-core/modules/bwamem2/mem/main.nf | 2 +- modules/nf-core/modules/bwamem2/mem/meta.yml | 5 ++ .../custom/dumpsoftwareversions/main.nf | 8 +-- .../templates/dumpsoftwareversions.py | 14 ++--- .../nf-core/modules/expansionhunter/meta.yml | 2 +- .../modules/gatk4/bedtointervallist/main.nf | 6 +- .../gatk4/createsequencedictionary/main.nf | 6 +- .../modules/gatk4/intervallisttools/main.nf | 6 +- .../nf-core/modules/gatk4/revertsam/main.nf | 6 +- .../nf-core/modules/gatk4/samtofastq/main.nf | 6 +- .../nf-core/modules/manta/germline/main.nf | 2 +- modules/nf-core/modules/mosdepth/main.nf | 45 +++++++++----- modules/nf-core/modules/mosdepth/meta.yml | 29 +++++++-- modules/nf-core/modules/multiqc/main.nf | 17 +++-- modules/nf-core/modules/multiqc/meta.yml | 11 ++++ .../picard/addorreplacereadgroups/main.nf | 11 ++++ .../modules/picard/collecthsmetrics/main.nf | 16 ++--- .../picard/collectmultiplemetrics/main.nf | 14 +++-- .../picard/collectmultiplemetrics/meta.yml | 4 ++ .../modules/picard/markduplicates/main.nf | 6 +- .../nf-core/modules/picard/sortvcf/main.nf | 10 +-- .../nf-core/modules/samtools/faidx/main.nf | 4 +- .../nf-core/modules/samtools/faidx/meta.yml | 4 ++ .../nf-core/modules/samtools/merge/main.nf | 3 +- .../nf-core/modules/samtools/merge/meta.yml | 4 ++ .../nf-core/modules/samtools/stats/main.nf | 9 +-- modules/nf-core/modules/samtools/view/main.nf | 2 +- modules/nf-core/modules/svdb/merge/main.nf | 12 ++-- modules/nf-core/modules/svdb/merge/meta.yml | 2 +- .../nf-core/modules/tabix/bgziptabix/main.nf | 6 +- modules/nf-core/modules/tabix/tabix/main.nf | 5 +- modules/nf-core/modules/tabix/tabix/meta.yml | 4 ++ modules/nf-core/modules/tiddit/cov/main.nf | 16 ++--- modules/nf-core/modules/tiddit/cov/meta.yml | 2 +- modules/nf-core/modules/tiddit/sv/main.nf | 33 +++++----- modules/nf-core/modules/tiddit/sv/meta.yml | 20 +++--- .../nf-core/modules/ucsc/wigtobigwig/main.nf | 4 +- modules/nf-core/modules/untar/main.nf | 29 +++++++-- modules/nf-core/modules/untar/meta.yml | 8 ++- modules/nf-core/modules/vcfanno/main.nf | 4 +- 46 files changed, 314 insertions(+), 185 deletions(-) diff --git a/modules.json b/modules.json index 63e42025..87f4ae01 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "modules": { "bcftools/norm": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" }, "bcftools/roh": { "branch": "master", @@ -15,15 +15,15 @@ }, "bcftools/view": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" }, "bwamem2/index": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "d0ff29fca32ba795177584ebfd51dcd6b0d5f890" }, "bwamem2/mem": { "branch": "master", - "git_sha": "4f5274c3de0c9521f5033893ff61057a74c45ba9" + "git_sha": "30b04859129f5f4235accdea9fdea8f1feb23809" }, "cat/cat": { "branch": "master", @@ -51,7 +51,7 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" }, "deepvariant": { "branch": "master", @@ -59,7 +59,7 @@ }, "expansionhunter": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "848ee9a215d02d80be033bfa60881700f2bd914c" }, "fastqc": { "branch": "master", @@ -67,15 +67,15 @@ }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "409af2f27cbe45109acc7fee70718d2bf20aa449" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "gatk4/mergebamalignment": { "branch": "master", @@ -87,11 +87,11 @@ }, "gatk4/revertsam": { "branch": "master", - "git_sha": "f231291e7730654158cbd3f10b82c292e27fa273" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" + "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" }, "genmod/annotate": { "branch": "master", @@ -119,35 +119,35 @@ }, "manta/germline": { "branch": "master", - "git_sha": "ffedf09b6e84b479c9c901274f74bb33f3777243" + "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" }, "mosdepth": { "branch": "master", - "git_sha": "e745e167c1020928ef20ea1397b6b4d230681b4d" + "git_sha": "72a31b76eb1b58879e0d91fb1d992e0118693098" }, "multiqc": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "5587389874dac9c9953a2ab6f01d49af81969492" }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "baa2845d2818066bcbd8b91e6ce77d71e36ecf45" + "git_sha": "67652c7c4dda138c9e71f093b1aea91f29f87c50" }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "35231d394940dca2291ac2321c8f9b2e3b039905" + "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" }, "picard/markduplicates": { "branch": "master", - "git_sha": "63db63757cab03cfa7a02c0d0f134b66fbfadea6" + "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" }, "picard/sortvcf": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" }, "qualimap/bamqc": { "branch": "master", @@ -159,7 +159,7 @@ }, "samtools/faidx": { "branch": "master", - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "3eb99152cedbb7280258858e5df08478a4670696" }, "samtools/index": { "branch": "master", @@ -167,7 +167,7 @@ }, "samtools/merge": { "branch": "master", - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "720027275ccdc1363bb2a19c6412da148e31d94b" }, "samtools/sort": { "branch": "master", @@ -175,11 +175,11 @@ }, "samtools/stats": { "branch": "master", - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" + "git_sha": "f4eab7945952dc4934224309701a49913ea05ae6" }, "samtools/view": { "branch": "master", - "git_sha": "6b64f9cb6c3dd3577931cc3cd032d6fb730000ce" + "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" }, "stranger": { "branch": "master", @@ -187,7 +187,7 @@ }, "svdb/merge": { "branch": "master", - "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" + "git_sha": "6b011dd14821385c282e030c6d993d2116aed23f" }, "svdb/query": { "branch": "master", @@ -195,31 +195,31 @@ }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" }, "tabix/tabix": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" }, "tiddit/cov": { "branch": "master", - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "40996cdbe1874f9c2ba693fee76d2b4f316f95f2" }, "tiddit/sv": { "branch": "master", - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" + "git_sha": "b689b8ed88a9f89eb2f7c75d3eb0bace77ade109" }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "233fa70811a03a4cecb2ece483b5c8396e2cee1d" }, "untar": { "branch": "master", - "git_sha": "9aadd9a6d3f5964476582319b3a1c54a3e3fe7c9" + "git_sha": "393dbd6ddafe3f18eac02893dd4a21e4d45de679" }, "vcfanno": { "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" + "git_sha": "13631304102ca3d99def3578611b79332f6fd175" } } } diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/modules/bcftools/norm/main.nf index b81a4310..96f306bc 100644 --- a/modules/nf-core/modules/bcftools/norm/main.nf +++ b/modules/nf-core/modules/bcftools/norm/main.nf @@ -2,13 +2,13 @@ process BCFTOOLS_NORM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) + conda (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : - 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': + 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" input: - tuple val(meta), path(vcf) + tuple val(meta), path(vcf), path(tbi) path(fasta) output: diff --git a/modules/nf-core/modules/bcftools/norm/meta.yml b/modules/nf-core/modules/bcftools/norm/meta.yml index ce4aee85..2b3c8eae 100644 --- a/modules/nf-core/modules/bcftools/norm/meta.yml +++ b/modules/nf-core/modules/bcftools/norm/meta.yml @@ -24,6 +24,12 @@ input: description: | The vcf file to be normalized e.g. 'file1.vcf' + pattern: "*.{vcf,vcf.gz}" + - tbi: + type: file + description: | + An optional index of the VCF file (for when the VCF is compressed) + pattern: "*.vcf.gz.tbi" - fasta: type: file description: FASTA reference file @@ -37,7 +43,7 @@ output: - vcf: type: file description: VCF normalized output file - pattern: "*.{vcf.gz}" + pattern: "*.vcf.gz" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/modules/bcftools/view/main.nf index ca1121a5..3df08a57 100644 --- a/modules/nf-core/modules/bcftools/view/main.nf +++ b/modules/nf-core/modules/bcftools/view/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_VIEW { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? 'bioconda::bcftools=1.14' : null) + conda (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.14--h88f3f91_0' : - 'quay.io/biocontainers/bcftools:1.14--h88f3f91_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': + 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/modules/bwamem2/index/main.nf index 900f27d4..6b63ea59 100644 --- a/modules/nf-core/modules/bwamem2/index/main.nf +++ b/modules/nf-core/modules/bwamem2/index/main.nf @@ -8,11 +8,11 @@ process BWAMEM2_INDEX { 'quay.io/biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "bwamem2" , emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("bwamem2"), emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/modules/bwamem2/index/meta.yml b/modules/nf-core/modules/bwamem2/index/meta.yml index 1b52448d..a6b11ae5 100644 --- a/modules/nf-core/modules/bwamem2/index/meta.yml +++ b/modules/nf-core/modules/bwamem2/index/meta.yml @@ -14,14 +14,24 @@ tools: documentation: https://github.com/bwa-mem2/bwa-mem2#usage licence: ["MIT"] input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - fasta: type: file description: Input genome fasta file output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - index: type: file description: BWA genome index files - pattern: "*.{0132,amb,ann,bwt.2bit.64,pac}" + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/modules/bwamem2/mem/main.nf index 978c4019..08dc5dfb 100644 --- a/modules/nf-core/modules/bwamem2/mem/main.nf +++ b/modules/nf-core/modules/bwamem2/mem/main.nf @@ -9,7 +9,7 @@ process BWAMEM2_MEM { input: tuple val(meta), path(reads) - path index + tuple val(meta2), path(index) val sort_bam output: diff --git a/modules/nf-core/modules/bwamem2/mem/meta.yml b/modules/nf-core/modules/bwamem2/mem/meta.yml index 25c97f91..a4655510 100644 --- a/modules/nf-core/modules/bwamem2/mem/meta.yml +++ b/modules/nf-core/modules/bwamem2/mem/meta.yml @@ -37,6 +37,11 @@ input: description: use samtools sort (true) or samtools view (false) pattern: "true or false" output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - bam: type: file description: Output BAM file containing read alignments diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf index 327d5100..34b50b9f 100644 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf @@ -1,11 +1,11 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { - label 'process_low' + label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda (params.enable_conda ? "bioconda::multiqc=1.11" : null) + conda (params.enable_conda ? 'bioconda::multiqc=1.13a' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.13a--pyhdfd78af_1' : + 'quay.io/biocontainers/multiqc:1.13a--pyhdfd78af_1' }" input: path versions diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py index 787bdb7b..d1390392 100644 --- a/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -1,10 +1,9 @@ #!/usr/bin/env python +import yaml import platform from textwrap import dedent -import yaml - def _make_versions_html(versions): html = [ @@ -59,12 +58,11 @@ def _make_versions_html(versions): for process, process_versions in versions_by_process.items(): module = process.split(":")[-1] try: - if versions_by_module[module] != process_versions: - raise AssertionError( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) + assert versions_by_module[module] == process_versions, ( + "We assume that software versions are the same between all modules. " + "If you see this error-message it means you discovered an edge-case " + "and should open an issue in nf-core/tools. " + ) except KeyError: versions_by_module[module] = process_versions diff --git a/modules/nf-core/modules/expansionhunter/meta.yml b/modules/nf-core/modules/expansionhunter/meta.yml index 3483c0db..c5a89c10 100644 --- a/modules/nf-core/modules/expansionhunter/meta.yml +++ b/modules/nf-core/modules/expansionhunter/meta.yml @@ -1,5 +1,5 @@ name: expansionhunter -description: write your description here +description: Estimate repeat sizes using NGS data keywords: - STR - repeat_expansions diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf index 118f535b..6224d9b3 100644 --- a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/modules/gatk4/bedtointervallist/main.nf @@ -2,10 +2,10 @@ process GATK4_BEDTOINTERVALLIST { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" input: tuple val(meta), path(bed) diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf index dbf37048..13fa9e81 100644 --- a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf @@ -2,10 +2,10 @@ process GATK4_CREATESEQUENCEDICTIONARY { tag "$fasta" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" input: path fasta diff --git a/modules/nf-core/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/modules/gatk4/intervallisttools/main.nf index 1b9b37f4..7ab26c15 100644 --- a/modules/nf-core/modules/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/modules/gatk4/intervallisttools/main.nf @@ -2,10 +2,10 @@ process GATK4_INTERVALLISTTOOLS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" input: tuple val(meta), path(intervals) diff --git a/modules/nf-core/modules/gatk4/revertsam/main.nf b/modules/nf-core/modules/gatk4/revertsam/main.nf index 3084658d..959c3e79 100644 --- a/modules/nf-core/modules/gatk4/revertsam/main.nf +++ b/modules/nf-core/modules/gatk4/revertsam/main.nf @@ -2,10 +2,10 @@ process GATK4_REVERTSAM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/modules/gatk4/samtofastq/main.nf b/modules/nf-core/modules/gatk4/samtofastq/main.nf index d8d94d69..de83293a 100644 --- a/modules/nf-core/modules/gatk4/samtofastq/main.nf +++ b/modules/nf-core/modules/gatk4/samtofastq/main.nf @@ -2,10 +2,10 @@ process GATK4_SAMTOFASTQ { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.5.0" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.5.0--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.5.0--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/modules/manta/germline/main.nf b/modules/nf-core/modules/manta/germline/main.nf index c680dc9d..5f2964fb 100644 --- a/modules/nf-core/modules/manta/germline/main.nf +++ b/modules/nf-core/modules/manta/germline/main.nf @@ -1,6 +1,6 @@ process MANTA_GERMLINE { tag "$meta.id" - label 'process_high' + label 'process_medium' conda (params.enable_conda ? "bioconda::manta=1.6.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/nf-core/modules/mosdepth/main.nf b/modules/nf-core/modules/mosdepth/main.nf index ff91e06f..d7e3c929 100644 --- a/modules/nf-core/modules/mosdepth/main.nf +++ b/modules/nf-core/modules/mosdepth/main.nf @@ -10,18 +10,22 @@ process MOSDEPTH { input: tuple val(meta), path(bam), path(bai) path bed - val window_size + path fasta output: - tuple val(meta), path('*.global.dist.txt') , emit: global_txt - tuple val(meta), path('*.region.dist.txt') , emit: regions_txt , optional:true - tuple val(meta), path('*.summary.txt') , emit: summary_txt - tuple val(meta), path('*.per-base.d4') , emit: d4 , optional:true - tuple val(meta), path('*.per-base.bed.gz') , emit: per_base_bed, optional:true - tuple val(meta), path('*.per-base.bed.gz.csi'), emit: per_base_csi, optional:true - tuple val(meta), path('*.regions.bed.gz') , emit: regions_bed , optional:true - tuple val(meta), path('*.regions.bed.gz.csi') , emit: regions_csi , optional:true - path "versions.yml" , emit: versions + tuple val(meta), path('*.global.dist.txt') , emit: global_txt + tuple val(meta), path('*.summary.txt') , emit: summary_txt + tuple val(meta), path('*.region.dist.txt') , optional:true, emit: regions_txt + tuple val(meta), path('*.per-base.d4') , optional:true, emit: per_base_d4 + tuple val(meta), path('*.per-base.bed.gz') , optional:true, emit: per_base_bed + tuple val(meta), path('*.per-base.bed.gz.csi') , optional:true, emit: per_base_csi + tuple val(meta), path('*.regions.bed.gz') , optional:true, emit: regions_bed + tuple val(meta), path('*.regions.bed.gz.csi') , optional:true, emit: regions_csi + tuple val(meta), path('*.quantized.bed.gz') , optional:true, emit: quantized_bed + tuple val(meta), path('*.quantized.bed.gz.csi') , optional:true, emit: quantized_csi + tuple val(meta), path('*.thresholds.bed.gz') , optional:true, emit: thresholds_bed + tuple val(meta), path('*.thresholds.bed.gz.csi'), optional:true, emit: thresholds_csi + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -29,19 +33,24 @@ process MOSDEPTH { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - if (window_size) { - interval = "--by ${window_size}" - } else if ( bed ) { - interval = "--by ${bed}" - } else { - interval = "" + def reference = fasta ? "--fasta ${fasta}" : "" + def interval = bed ? "--by ${bed}" : "" + if (bed && args.contains("--by")) { + exit 1, "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition" } + if (!bed && args.contains("--thresholds")) { + exit 1, "'--thresholds' can only be specified in conjunction with '--by'" + } + """ mosdepth \\ + --threads $task.cpus \\ $interval \\ + $reference \\ $args \\ $prefix \\ $bam + cat <<-END_VERSIONS > versions.yml "${task.process}": mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//') @@ -59,6 +68,10 @@ process MOSDEPTH { touch ${prefix}.per-base.bed.gz.csi touch ${prefix}.regions.bed.gz touch ${prefix}.regions.bed.gz.csi + touch ${prefix}.quantized.bed.gz + touch ${prefix}.quantized.bed.gz.csi + touch ${prefix}.thresholds.bed.gz + touch ${prefix}.thresholds.bed.gz.csi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/mosdepth/meta.yml b/modules/nf-core/modules/mosdepth/meta.yml index 636e966b..d1e33447 100644 --- a/modules/nf-core/modules/mosdepth/meta.yml +++ b/modules/nf-core/modules/mosdepth/meta.yml @@ -30,10 +30,10 @@ input: type: file description: BED file with intersected intervals pattern: "*.{bed}" - - window_size: - type: integer - description: Window size - pattern: "[0-9]+" + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta}" output: - meta: type: map @@ -60,6 +60,10 @@ output: type: file description: Index file for BED file with per-base coverage pattern: "*.{per-base.bed.gz.csi}" + - per_base_d4: + type: file + description: D4 file with per-base coverage + pattern: "*.{per-base.d4}" - regions_bed: type: file description: BED file with per-region coverage @@ -68,6 +72,22 @@ output: type: file description: Index file for BED file with per-region coverage pattern: "*.{regions.bed.gz.csi}" + - quantized_bed: + type: file + description: BED file with binned coverage + pattern: "*.{quantized.bed.gz}" + - quantized_csi: + type: file + description: Index file for BED file with binned coverage + pattern: "*.{quantized.bed.gz.csi}" + - thresholds_bed: + type: file + description: BED file with the number of bases in each region that are covered at or above each threshold + pattern: "*.{thresholds.bed.gz}" + - thresholds_csi: + type: file + description: Index file for BED file with threshold coverage + pattern: "*.{thresholds.bed.gz.csi}" - versions: type: file description: File containing software versions @@ -76,3 +96,4 @@ authors: - "@joseespinosa" - "@drpatelh" - "@ramprasadn" + - "@matthdsm" diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index ae019dbf..d10dae69 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -1,13 +1,15 @@ process MULTIQC { label 'process_medium' - conda (params.enable_conda ? 'bioconda::multiqc=1.12' : null) + conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.12--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.12--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" input: - path multiqc_files + path multiqc_files, stageAs: "?/*" + path(multiqc_config) + path(multiqc_logo) output: path "*multiqc_report.html", emit: report @@ -20,8 +22,13 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def config = multiqc_config ? "--config $multiqc_config" : '' """ - multiqc -f $args . + multiqc \\ + --force \\ + $config \\ + $args \\ + . cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml index 6fa891ef..a1029f33 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -12,11 +12,21 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + input: - multiqc_files: type: file description: | List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + output: - report: type: file @@ -38,3 +48,4 @@ authors: - "@abhi18av" - "@bunop" - "@drpatelh" + - "@jfy133" diff --git a/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf b/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf index 116aa4fa..f7f929de 100644 --- a/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf @@ -51,4 +51,15 @@ process PICARD_ADDORREPLACEREADGROUPS { picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ } diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/modules/picard/collecthsmetrics/main.nf index ef7a9b9f..6cc04dbf 100644 --- a/modules/nf-core/modules/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/modules/picard/collecthsmetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTHSMETRICS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -24,7 +24,7 @@ process PICARD_COLLECTHSMETRICS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def reference = fasta ? "-R $fasta" : "" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3 if (!task.memory) { @@ -38,10 +38,10 @@ process PICARD_COLLECTHSMETRICS { CollectHsMetrics \\ $args \\ $reference \\ - -BAIT_INTERVALS $bait_intervals \\ - -TARGET_INTERVALS $target_intervals \\ - -INPUT $bam \\ - -OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics + --BAIT_INTERVALS $bait_intervals \\ + --TARGET_INTERVALS $target_intervals \\ + --INPUT $bam \\ + --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf index 340463a8..63f4e872 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf @@ -2,14 +2,15 @@ process PICARD_COLLECTMULTIPLEMETRICS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: tuple val(meta), path(bam) path fasta + path fai output: tuple val(meta), path("*_metrics"), emit: metrics @@ -22,6 +23,7 @@ process PICARD_COLLECTMULTIPLEMETRICS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3 if (!task.memory) { log.info '[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -33,9 +35,9 @@ process PICARD_COLLECTMULTIPLEMETRICS { -Xmx${avail_mem}g \\ CollectMultipleMetrics \\ $args \\ - INPUT=$bam \\ - OUTPUT=${prefix}.CollectMultipleMetrics \\ - REFERENCE_SEQUENCE=$fasta + --INPUT $bam \\ + --OUTPUT ${prefix}.CollectMultipleMetrics \\ + $reference cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml index 68b5c65e..c11b02cf 100644 --- a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml @@ -28,6 +28,10 @@ input: - fasta: type: file description: Genome fasta file + - fai: + type: file + description: Index of FASTA file. Only needed when fasta is supplied. + pattern: "*.fai" output: - meta: type: map diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 87f913d4..4e559fea 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.27.2" : null) + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.2--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.2--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/modules/picard/sortvcf/main.nf b/modules/nf-core/modules/picard/sortvcf/main.nf index 4047545e..b57b39c6 100644 --- a/modules/nf-core/modules/picard/sortvcf/main.nf +++ b/modules/nf-core/modules/picard/sortvcf/main.nf @@ -2,10 +2,10 @@ process PICARD_SORTVCF { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.26.10" : null) + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.26.10--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.26.10--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: tuple val(meta), path(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 = sequence_dict ? "--SEQUENCE_DICTIONARY $sequence_dict" : "" + def reference = reference ? "--REFERENCE_SEQUENCE $reference" : "" def avail_mem = 3 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/modules/samtools/faidx/main.nf b/modules/nf-core/modules/samtools/faidx/main.nf index fdce7d9b..ef940db2 100644 --- a/modules/nf-core/modules/samtools/faidx/main.nf +++ b/modules/nf-core/modules/samtools/faidx/main.nf @@ -1,6 +1,6 @@ process SAMTOOLS_FAIDX { tag "$fasta" - label 'process_low' + label 'process_single' conda (params.enable_conda ? "bioconda::samtools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -12,6 +12,7 @@ process SAMTOOLS_FAIDX { output: tuple val(meta), path ("*.fai"), emit: fai + tuple val(meta), path ("*.gzi"), emit: gzi, optional: true path "versions.yml" , emit: versions when: @@ -22,6 +23,7 @@ process SAMTOOLS_FAIDX { """ samtools \\ faidx \\ + $args \\ $fasta cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/modules/samtools/faidx/meta.yml index e9767764..fe2fe9a1 100644 --- a/modules/nf-core/modules/samtools/faidx/meta.yml +++ b/modules/nf-core/modules/samtools/faidx/meta.yml @@ -33,6 +33,10 @@ output: type: file description: FASTA index file pattern: "*.{fai}" + - gzi: + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/modules/samtools/merge/main.nf index bbf7e8fb..d01bbed8 100644 --- a/modules/nf-core/modules/samtools/merge/main.nf +++ b/modules/nf-core/modules/samtools/merge/main.nf @@ -8,8 +8,9 @@ process SAMTOOLS_MERGE { 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" input: - tuple val(meta), path(input_files) + tuple val(meta), path(input_files, stageAs: "?/*") path fasta + path fai output: tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/nf-core/modules/samtools/merge/meta.yml index fb78e55c..f6833d0c 100644 --- a/modules/nf-core/modules/samtools/merge/meta.yml +++ b/modules/nf-core/modules/samtools/merge/meta.yml @@ -29,6 +29,10 @@ input: type: optional file description: Reference file the CRAM was created with pattern: "*.{fasta,fa}" + - fai: + type: optional file + description: Index of the reference file the CRAM was created with + pattern: "*.fai" output: - meta: type: map diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index bbdc3240..9b0c3867 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -1,6 +1,6 @@ process SAMTOOLS_STATS { tag "$meta.id" - label 'process_low' + label 'process_single' conda (params.enable_conda ? "bioconda::samtools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -20,14 +20,15 @@ process SAMTOOLS_STATS { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" """ samtools \\ stats \\ - --threads ${task.cpus-1} \\ + --threads ${task.cpus} \\ ${reference} \\ ${input} \\ - > ${input}.stats + > ${prefix}.stats cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -38,7 +39,7 @@ process SAMTOOLS_STATS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${input}.stats + touch ${prefix}.stats cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf index 55194e88..59ded5c3 100644 --- a/modules/nf-core/modules/samtools/view/main.nf +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -1,6 +1,6 @@ process SAMTOOLS_VIEW { tag "$meta.id" - label 'process_medium' + label 'process_low' conda (params.enable_conda ? "bioconda::samtools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 0d56fea2..05fb2b17 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -1,18 +1,17 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - - conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) + conda (params.enable_conda ? "bioconda::svdb=2.6.1 bioconda::samtools=1.15.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:56d0a468970fbb474d92f0591abcf677757fb370-0': + 'quay.io/biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:56d0a468970fbb474d92f0591abcf677757fb370-0' }" input: tuple val(meta), path(vcfs) val (priority) output: - tuple val(meta), path("*_sv_merge.vcf"), emit: vcf + tuple val(meta), path("*_sv_merge.vcf.gz"), emit: vcf path "versions.yml" , emit: versions when: @@ -37,10 +36,12 @@ process SVDB_MERGE { $prio \\ --vcf $input \\ > ${prefix}_sv_merge.vcf + bgzip ${prefix}_sv_merge.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ @@ -52,6 +53,7 @@ process SVDB_MERGE { cat <<-END_VERSIONS > versions.yml "${task.process}": svdb: \$( echo \$(svdb) | head -1 | sed 's/usage: SVDB-\\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/' ) + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/svdb/merge/meta.yml b/modules/nf-core/modules/svdb/merge/meta.yml index e166bad0..c71279e8 100644 --- a/modules/nf-core/modules/svdb/merge/meta.yml +++ b/modules/nf-core/modules/svdb/merge/meta.yml @@ -34,6 +34,6 @@ output: - vcf: type: file description: merged VCF file - pattern: "*_sv_merge.vcf" + pattern: "*_sv_merge.vcf.gz" authors: - "@ramprasadn" diff --git a/modules/nf-core/modules/tabix/bgziptabix/main.nf b/modules/nf-core/modules/tabix/bgziptabix/main.nf index 77fd91a5..0d05984a 100644 --- a/modules/nf-core/modules/tabix/bgziptabix/main.nf +++ b/modules/nf-core/modules/tabix/bgziptabix/main.nf @@ -1,6 +1,6 @@ process TABIX_BGZIPTABIX { tag "$meta.id" - label 'process_medium' + label 'process_single' conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -22,8 +22,8 @@ process TABIX_BGZIPTABIX { def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - bgzip --threads ${task.cpus} -c $args $input > ${prefix}.gz - tabix $args2 ${prefix}.gz + bgzip --threads ${task.cpus} -c $args $input > ${prefix}.${input.getExtension()}.gz + tabix $args2 ${prefix}.${input.getExtension()}.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/tabix/tabix/main.nf b/modules/nf-core/modules/tabix/tabix/main.nf index c9dab068..21b2e79f 100644 --- a/modules/nf-core/modules/tabix/tabix/main.nf +++ b/modules/nf-core/modules/tabix/tabix/main.nf @@ -1,6 +1,6 @@ process TABIX_TABIX { tag "$meta.id" - label 'process_medium' + label 'process_single' conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -11,7 +11,8 @@ process TABIX_TABIX { tuple val(meta), path(tab) output: - tuple val(meta), path("*.tbi"), emit: tbi + tuple val(meta), path("*.tbi"), optional:true, emit: tbi + tuple val(meta), path("*.csi"), optional:true, emit: csi path "versions.yml" , emit: versions when: diff --git a/modules/nf-core/modules/tabix/tabix/meta.yml b/modules/nf-core/modules/tabix/tabix/meta.yml index 89478abe..fcc6e524 100644 --- a/modules/nf-core/modules/tabix/tabix/meta.yml +++ b/modules/nf-core/modules/tabix/tabix/meta.yml @@ -31,6 +31,10 @@ output: type: file description: tabix index file pattern: "*.{tbi}" + - csi: + type: file + description: coordinate sorted index file + pattern: "*.{csi}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/modules/tiddit/cov/main.nf b/modules/nf-core/modules/tiddit/cov/main.nf index 578c4043..4d7e2827 100644 --- a/modules/nf-core/modules/tiddit/cov/main.nf +++ b/modules/nf-core/modules/tiddit/cov/main.nf @@ -2,17 +2,17 @@ process TIDDIT_COV { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::tiddit=2.12.1" : null) + conda (params.enable_conda ? "bioconda::tiddit=3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tiddit:2.12.1--py38h1773678_0' : - 'quay.io/biocontainers/tiddit:2.12.1--py38h1773678_0' }" + 'https://depot.galaxyproject.org/singularity/tiddit:3.0.0--py39h59fae87_1' : + 'quay.io/biocontainers/tiddit:3.0.0--py39h59fae87_1' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(input) path fasta output: - tuple val(meta), path("*.tab"), optional: true, emit: cov + tuple val(meta), path("*.bed"), optional: true, emit: cov tuple val(meta), path("*.wig"), optional: true, emit: wig path "versions.yml" , emit: versions @@ -28,12 +28,12 @@ process TIDDIT_COV { --cov \\ -o $prefix \\ $args \\ - --bam $bam \\ + --bam $input \\ $reference cat <<-END_VERSIONS > versions.yml "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') END_VERSIONS """ @@ -45,7 +45,7 @@ process TIDDIT_COV { cat <<-END_VERSIONS > versions.yml "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/tiddit/cov/meta.yml b/modules/nf-core/modules/tiddit/cov/meta.yml index d925b783..98ea27c2 100644 --- a/modules/nf-core/modules/tiddit/cov/meta.yml +++ b/modules/nf-core/modules/tiddit/cov/meta.yml @@ -19,7 +19,7 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - bam: + - input: type: file description: BAM/CRAM file pattern: "*.{bam,cram}" diff --git a/modules/nf-core/modules/tiddit/sv/main.nf b/modules/nf-core/modules/tiddit/sv/main.nf index 1bf7146a..2e876ef1 100644 --- a/modules/nf-core/modules/tiddit/sv/main.nf +++ b/modules/nf-core/modules/tiddit/sv/main.nf @@ -2,21 +2,20 @@ process TIDDIT_SV { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::tiddit=2.12.1" : null) + conda (params.enable_conda ? "bioconda::tiddit=3.1.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tiddit:2.12.1--py38h1773678_0' : - 'quay.io/biocontainers/tiddit:2.12.1--py38h1773678_0' }" + 'https://depot.galaxyproject.org/singularity/tiddit:3.1.0--py39h59fae87_1' : + 'quay.io/biocontainers/tiddit:3.1.0--py39h59fae87_1' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(input), path(input_index) path fasta - path fai + path bwa_index output: - tuple val(meta), path("*.vcf") , emit: vcf - tuple val(meta), path("*.ploidy.tab") , emit: ploidy - tuple val(meta), path("*.signals.tab"), emit: signals - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf") , emit: vcf + tuple val(meta), path("*.ploidies.tab"), emit: ploidy + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -24,18 +23,21 @@ process TIDDIT_SV { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def reference = fasta == "dummy_file.txt" ? "--ref $fasta" : "" + def bwa_command = bwa_index ? "[[ -d $bwa_index ]] && for i in $bwa_index/*; do [[ -f $fasta && ! \"\$i\" =~ .*\"$fasta\".* ]] && ln -s \$i ${fasta}.\${i##*.} || ln -s \$i .; done" : "" + """ + $bwa_command + tiddit \\ --sv \\ $args \\ - --bam $bam \\ - $reference \\ + --bam $input \\ + --ref $fasta \\ -o $prefix cat <<-END_VERSIONS > versions.yml "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') END_VERSIONS """ @@ -43,12 +45,11 @@ process TIDDIT_SV { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.vcf - touch ${prefix}.ploidy.tab - touch ${prefix}.signals.tab + touch ${prefix}.ploidies.tab cat <<-END_VERSIONS > versions.yml "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*TIDDIT-//; s/ .*\$//') + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') END_VERSIONS """ } diff --git a/modules/nf-core/modules/tiddit/sv/meta.yml b/modules/nf-core/modules/tiddit/sv/meta.yml index fc307081..8b41c69c 100644 --- a/modules/nf-core/modules/tiddit/sv/meta.yml +++ b/modules/nf-core/modules/tiddit/sv/meta.yml @@ -17,14 +17,22 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" - fasta: type: file description: Input FASTA file pattern: "*.{fasta,fa}" - - fai: + - bwa_index: type: file - description: FASTA index file - pattern: "*.{fai}" + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" output: - meta: type: map @@ -38,11 +46,7 @@ output: - ploidy: type: file description: tab - pattern: "*.{ploidy.tab}" - - signals: - type: file - description: tab - pattern: "*.{signals.tab}" + pattern: "*.{ploidies.tab}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf index 2af7190b..2cdc557d 100644 --- a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf @@ -1,9 +1,8 @@ -def VERSION = '377' // Version information not provided by tool on CLI - process UCSC_WIGTOBIGWIG { tag "$meta.id" label 'process_medium' + // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ucsc-wigtobigwig:377--h0b8a92a_2' : @@ -23,6 +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. """ wigToBigWig \\ $args \\ diff --git a/modules/nf-core/modules/untar/main.nf b/modules/nf-core/modules/untar/main.nf index 058d1764..007871b3 100644 --- a/modules/nf-core/modules/untar/main.nf +++ b/modules/nf-core/modules/untar/main.nf @@ -1,6 +1,6 @@ process UNTAR { tag "$archive" - label 'process_low' + label 'process_single' conda (params.enable_conda ? "conda-forge::sed=4.7" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -21,12 +21,29 @@ process UNTAR { def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' untar = archive.toString() - '.tar.gz' + """ - tar \\ - -xzvf \\ - $args \\ - $archive \\ - $args2 \\ + mkdir output + + ## Ensures --strip-components only applied when top level of tar contents is a directory + ## If just files or multiple directories, place all in output + if [[ \$(tar -tzf ${archive} | grep "/\$" | wc -l) -eq 1 ]]; then + tar \\ + -C output --strip-components 1 \\ + -xzvf \\ + $args \\ + $archive \\ + $args2 + else + tar \\ + -C output \\ + -xzvf \\ + $args \\ + $archive \\ + $args2 + fi + + mv output ${untar} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/untar/meta.yml b/modules/nf-core/modules/untar/meta.yml index d426919b..ea7a3f38 100644 --- a/modules/nf-core/modules/untar/meta.yml +++ b/modules/nf-core/modules/untar/meta.yml @@ -26,9 +26,9 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - untar: - type: file - description: - pattern: "*.*" + type: directory + description: Directory containing contents of archive + pattern: "*/" - versions: type: file description: File containing software versions @@ -36,3 +36,5 @@ output: authors: - "@joseespinosa" - "@drpatelh" + - "@matthdsm" + - "@jfy133" diff --git a/modules/nf-core/modules/vcfanno/main.nf b/modules/nf-core/modules/vcfanno/main.nf index bc0514c9..6f264af2 100644 --- a/modules/nf-core/modules/vcfanno/main.nf +++ b/modules/nf-core/modules/vcfanno/main.nf @@ -9,7 +9,6 @@ process VCFANNO { input: tuple val(meta), path(vcf), path(tbi) - tuple val(meta), path(vcf_uncompressed) path toml path resource_dir @@ -23,7 +22,6 @@ process VCFANNO { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def input_vcf = vcf_uncompressed ?: vcf """ ln -sf $resource_dir/* \$(pwd) @@ -31,7 +29,7 @@ process VCFANNO { -p $task.cpus \\ $args \\ $toml \\ - $input_vcf \\ + $vcf \\ > ${prefix}_annotated.vcf cat <<-END_VERSIONS > versions.yml From c7d0be3656d77325b550b970b1e876681894eca6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 15 Sep 2022 17:47:48 +0200 Subject: [PATCH 0662/1921] update modules & fix compatibility --- modules.json | 8 ++++---- modules/local/sentieon/bwamem.nf | 2 +- modules/local/sentieon/bwamemindex.nf | 6 +++--- modules/nf-core/modules/multiqc/main.nf | 5 ++++- modules/nf-core/modules/multiqc/meta.yml | 4 ++++ modules/nf-core/modules/svdb/merge/main.nf | 2 +- modules/nf-core/modules/ucsc/wigtobigwig/main.nf | 1 + modules/nf-core/modules/untar/main.nf | 2 +- subworkflows/local/align.nf | 2 +- subworkflows/local/annotate_snvs.nf | 6 +----- subworkflows/local/prepare_genome.nf | 6 +++--- subworkflows/nf-core/align_bwamem2.nf | 4 +++- subworkflows/nf-core/call_snv_deepvariant.nf | 12 ++++++++++-- subworkflows/nf-core/call_structural_variants.nf | 3 ++- subworkflows/nf-core/qc_bam.nf | 4 ++-- workflows/raredisease.nf | 5 ++++- 16 files changed, 45 insertions(+), 27 deletions(-) diff --git a/modules.json b/modules.json index 87f4ae01..bb60823e 100644 --- a/modules.json +++ b/modules.json @@ -127,7 +127,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "5587389874dac9c9953a2ab6f01d49af81969492" + "git_sha": "4b1d4bf401d4cf65ebc4f604bc8c8e7551109db3" }, "picard/addorreplacereadgroups": { "branch": "master", @@ -187,7 +187,7 @@ }, "svdb/merge": { "branch": "master", - "git_sha": "6b011dd14821385c282e030c6d993d2116aed23f" + "git_sha": "513b5fcab92243bb6e227cd36ac779796d304f4a" }, "svdb/query": { "branch": "master", @@ -211,11 +211,11 @@ }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "233fa70811a03a4cecb2ece483b5c8396e2cee1d" + "git_sha": "8572bc8865d166edf2d8efeb97e77bfc53d0866b" }, "untar": { "branch": "master", - "git_sha": "393dbd6ddafe3f18eac02893dd4a21e4d45de679" + "git_sha": "b63b9f752dc8e43fc70b0491aad5e0a270ab0e10" }, "vcfanno": { "branch": "master", diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index 9ce6d113..9212fa61 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) path fasta path fai - path index + tuple val(meta2), path(index) output: tuple val(meta), path('*.bam'), emit: bam diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 59e71fb7..2dae1b09 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -6,11 +6,11 @@ process SENTIEON_BWAINDEX { secret 'SENTIEON_LICENSE_BASE64' input: - path fasta + tuple val(meta), path(fasta) output: - path "bwa" , emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("bwa"), emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf index d10dae69..698461d7 100644 --- a/modules/nf-core/modules/multiqc/main.nf +++ b/modules/nf-core/modules/multiqc/main.nf @@ -9,6 +9,7 @@ process MULTIQC { input: path multiqc_files, stageAs: "?/*" path(multiqc_config) + path(extra_multiqc_config) path(multiqc_logo) output: @@ -23,11 +24,13 @@ process MULTIQC { script: def args = task.ext.args ?: '' def config = multiqc_config ? "--config $multiqc_config" : '' + def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' """ multiqc \\ --force \\ - $config \\ $args \\ + $config \\ + $extra_config \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml index a1029f33..ebc29b27 100644 --- a/modules/nf-core/modules/multiqc/meta.yml +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -22,6 +22,10 @@ input: type: file description: Optional config yml for MultiQC pattern: "*.{yml,yaml}" + - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. + pattern: "*.{yml,yaml}" - multiqc_logo: type: file description: Optional logo file for MultiQC diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/modules/svdb/merge/main.nf index 05fb2b17..477dbb0d 100644 --- a/modules/nf-core/modules/svdb/merge/main.nf +++ b/modules/nf-core/modules/svdb/merge/main.nf @@ -48,7 +48,7 @@ process SVDB_MERGE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_sv_merge.vcf + touch ${prefix}_sv_merge.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf index 2cdc557d..4daff1f5 100644 --- a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/modules/ucsc/wigtobigwig/main.nf @@ -38,6 +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. """ touch ${prefix}.bw diff --git a/modules/nf-core/modules/untar/main.nf b/modules/nf-core/modules/untar/main.nf index 007871b3..71eea7b2 100644 --- a/modules/nf-core/modules/untar/main.nf +++ b/modules/nf-core/modules/untar/main.nf @@ -27,7 +27,7 @@ process UNTAR { ## Ensures --strip-components only applied when top level of tar contents is a directory ## If just files or multiple directories, place all in output - if [[ \$(tar -tzf ${archive} | grep "/\$" | wc -l) -eq 1 ]]; then + if [[ \$(tar -tzf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then tar \\ -C output --strip-components 1 \\ -xzvf \\ diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 65c5277a..0b1f40be 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -19,7 +19,7 @@ workflow ALIGN { ch_versions = Channel.empty() if( aligner == "bwamem2" ) { - ALIGN_BWAMEM2 ( reads_input, index ) + ALIGN_BWAMEM2 ( reads_input, index, fasta, fai ) ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 1e2e1851..94f51acb 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -29,12 +29,8 @@ workflow ANNOTATE_SNVS { // // annotate vcfanno // - vcf.map { meta, vcf, idx -> - return [meta, []] - } - .set { ch_placeholder } - VCFANNO (vcf, ch_placeholder, ch_toml, vcfanno_resource_dir) + VCFANNO (vcf, ch_toml, vcfanno_resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) // diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 0d29a58a..ebf4a7ca 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -25,12 +25,12 @@ workflow PREPARE_GENOME { // Fetch aligner index or create from scratch if required if (aligner == "bwamem2") { - BWAMEM2_INDEX ( ch_fasta ) - ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : Channel.fromPath(bwamem2_index).collect() + BWAMEM2_INDEX ( [[], ch_fasta] ) + ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } else if (aligner == "sentieon") { SENTIEON_BWAINDEX ( ch_fasta ) - ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : Channel.fromPath(sentieon_index).collect() + ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) } else { exit 1, 'Please provide a valid aligner!' diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index e99c3575..3d637122 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -14,6 +14,8 @@ workflow ALIGN_BWAMEM2 { take: reads_input // channel: [ val(meta), reads_input ] index // channel: [ /path/to/bwamem2/index/ ] + fasta // channel: [genome.fasta] + fai // channel: [genome.fai] main: ch_versions = Channel.empty() @@ -44,7 +46,7 @@ workflow ALIGN_BWAMEM2 { .set{ bams } // create a new multi-channel named bams // TODO: If there are no samples to merge, skip the process - SAMTOOLS_MERGE ( bams.multiple, [] ) + SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions) diff --git a/subworkflows/nf-core/call_snv_deepvariant.nf b/subworkflows/nf-core/call_snv_deepvariant.nf index e6ec6c4b..180cb94d 100644 --- a/subworkflows/nf-core/call_snv_deepvariant.nf +++ b/subworkflows/nf-core/call_snv_deepvariant.nf @@ -37,8 +37,16 @@ workflow CALL_SNV_DEEPVARIANT { GLNEXUS ( ch_gvcfs ) ch_versions = ch_versions.mix(GLNEXUS.out.versions) - SPLIT_MULTIALLELICS_GL (GLNEXUS.out.bcf, fasta) - REMOVE_DUPLICATES_GL (SPLIT_MULTIALLELICS_GL.out.vcf, fasta) + ch_split_multi_in = GLNEXUS.out.bcf + .map{meta, bcf -> + return [meta, bcf, []]} + SPLIT_MULTIALLELICS_GL (ch_split_multi_in, fasta) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_GL.out.versions) + + ch_remove_dup_in = SPLIT_MULTIALLELICS_GL.out.vcf + .map{meta, vcf -> + return [meta, vcf, []]} + REMOVE_DUPLICATES_GL (ch_remove_dup_in, fasta) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_GL.out.versions) TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 4e85163d..a19a0e80 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -29,7 +29,8 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) //tiddit - CALL_SV_TIDDIT ( bam, fasta, fai, case_info ) + ch_tiddit_bam = bam.join(bai) + CALL_SV_TIDDIT ( ch_tiddit_bam, fasta, fai, case_info ) .vcf .collect{it[1]} .set { tiddit_vcf } diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 26bfcf72..24dffafb 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -24,7 +24,7 @@ workflow QC_BAM { ch_versions = Channel.empty() // COLLECT MULTIPLE METRICS - PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta ) + PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta, fai ) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) // COLLECT HS METRICS @@ -52,7 +52,7 @@ workflow QC_BAM { qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] - d4 = MOSDEPTH.out.d4 // channel: [ val(meta), path(*.d4) ] + d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(*.d4) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 312c3d4a..765432f1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -299,7 +299,10 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) MULTIQC ( - ch_multiqc_files.collect() + ch_multiqc_files.collect(), + [], + [], + [] ) multiqc_report = MULTIQC.out.report.toList() ch_versions = ch_versions.mix(MULTIQC.out.versions) From 28a3673ab3d06ad35a4d87c646d7dd5c6c684c7c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 16 Sep 2022 12:25:23 +0200 Subject: [PATCH 0663/1921] add 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 9212fa61..c6d95089 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) path fasta path fai - tuple val(meta2), path(index) + tuple val(meta2), path(index) // meta2 has same purpose as meta, and holds information about the genome/index output: tuple val(meta), path('*.bam'), emit: bam From 26eb98803151d818c600a552ea32a19c71201d07 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Sep 2022 14:23:02 +0200 Subject: [PATCH 0664/1921] review suggestions --- bin/{vcfparser.py => add_most_severe_consequence.py} | 5 ++++- .../local/{vcfparser.nf => add_most_severe_consequence.nf} | 4 ++-- subworkflows/local/{vcfparser.nf => annotate_consequence.nf} | 4 ++-- workflows/raredisease.nf | 4 ++-- 4 files changed, 10 insertions(+), 7 deletions(-) rename bin/{vcfparser.py => add_most_severe_consequence.py} (97%) rename modules/local/{vcfparser.nf => add_most_severe_consequence.nf} (89%) rename subworkflows/local/{vcfparser.nf => annotate_consequence.nf} (83%) diff --git a/bin/vcfparser.py b/bin/add_most_severe_consequence.py similarity index 97% rename from bin/vcfparser.py rename to bin/add_most_severe_consequence.py index b6d14732..0a28c4d6 100644 --- a/bin/vcfparser.py +++ b/bin/add_most_severe_consequence.py @@ -62,7 +62,10 @@ def construct_most_severe_consequence_info( """ columns = line.strip().split() - transcripts = columns[7].split("CSQ=")[1].split(",") + info_fields = columns[7].split(";") + for field in info_fields: + if field.startswith("CSQ="): + transcripts = field.split("CSQ=")[1].split(",") hgnc_ids, alleles, consequences, severity = parse_vep_csq_transcripts( transcripts, allele_ind, csq_ind, hgnc_ind, var_csq ) diff --git a/modules/local/vcfparser.nf b/modules/local/add_most_severe_consequence.nf similarity index 89% rename from modules/local/vcfparser.nf rename to modules/local/add_most_severe_consequence.nf index 14063b79..3ef2117f 100644 --- a/modules/local/vcfparser.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -1,4 +1,4 @@ -process VCFPARSER { +process ADD_MOST_SEVERE_CSQ { tag "$meta.id" label 'process_low' @@ -22,7 +22,7 @@ process VCFPARSER { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - python3 vcfparser.py ${vcf} ${prefix}.vcfparser.vcf ${variant_consequences} + python3 add_most_severe_consequence.py ${vcf} ${prefix}.vcfparser.vcf ${variant_consequences} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/vcfparser.nf b/subworkflows/local/annotate_consequence.nf similarity index 83% rename from subworkflows/local/vcfparser.nf rename to subworkflows/local/annotate_consequence.nf index fcda7129..808743db 100644 --- a/subworkflows/local/vcfparser.nf +++ b/subworkflows/local/annotate_consequence.nf @@ -2,9 +2,9 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { VCFPARSER } from '../../modules/local/vcfparser' +include { ADD_MOST_SEVERE_CSQ } from '../../modules/local/add_most_severe_consequence' -workflow VCFPARSER_CSQ { +workflow ANNOTATE_CSQ { take: clinical // channel: [ val(meta), vcf ] research // channel: [ val(meta), vcf ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index df2ae4c4..87238dac 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -74,8 +74,8 @@ include { GENS } from '../subworkflows/local/gens' include { ALIGN } from '../subworkflows/local/align' include { CALL_SNV } from '../subworkflows/local/call_snv' include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' -include { VCFPARSER_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/vcfparser' -include { VCFPARSER_CSQ as ANN_CSQ_SV } from '../subworkflows/local/vcfparser' +include { ANNOTATE_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/annotate_consequence' +include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_consequence' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From d44b936c37abac79d57b1d03157fc4e139baa8e6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Sep 2022 14:24:47 +0200 Subject: [PATCH 0665/1921] update version string --- modules/local/add_most_severe_consequence.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/add_most_severe_consequence.nf b/modules/local/add_most_severe_consequence.nf index 3ef2117f..c17dcc2f 100644 --- a/modules/local/add_most_severe_consequence.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -26,7 +26,7 @@ process ADD_MOST_SEVERE_CSQ { cat <<-END_VERSIONS > versions.yml "${task.process}": - vcfparser: v1.0 + add_most_severe_consequence: v1.0 END_VERSIONS """ @@ -37,7 +37,7 @@ process ADD_MOST_SEVERE_CSQ { cat <<-END_VERSIONS > versions.yml "${task.process}": - vcfparser: v1.0 + add_most_severe_consequence: v1.0 END_VERSIONS """ } From 6bf2cb156a5f3086a533dede33ed64afd6cad52f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Sep 2022 14:28:25 +0200 Subject: [PATCH 0666/1921] fix missing module error --- subworkflows/local/annotate_consequence.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/annotate_consequence.nf b/subworkflows/local/annotate_consequence.nf index 808743db..2da8db6a 100644 --- a/subworkflows/local/annotate_consequence.nf +++ b/subworkflows/local/annotate_consequence.nf @@ -15,12 +15,12 @@ workflow ANNOTATE_CSQ { ch_input = clinical.join(research) - VCFPARSER ( + ADD_MOST_SEVERE_CSQ ( ch_input, variant_consequences ) emit: - vcf = VCFPARSER.out.vcf + vcf = ADD_MOST_SEVERE_CSQ.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 1255dc769d662bcf9c653fa4bb6ac4939de4b1e7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 27 Sep 2022 15:43:41 +0200 Subject: [PATCH 0667/1921] install vep --- modules.json | 4 + modules/nf-core/modules/ensemblvep/Dockerfile | 31 ++++++++ modules/nf-core/modules/ensemblvep/build.sh | 28 +++++++ .../modules/ensemblvep/environment.yml | 10 +++ modules/nf-core/modules/ensemblvep/main.nf | 56 ++++++++++++++ modules/nf-core/modules/ensemblvep/meta.yml | 73 +++++++++++++++++++ 6 files changed, 202 insertions(+) create mode 100644 modules/nf-core/modules/ensemblvep/Dockerfile create mode 100755 modules/nf-core/modules/ensemblvep/build.sh create mode 100644 modules/nf-core/modules/ensemblvep/environment.yml create mode 100644 modules/nf-core/modules/ensemblvep/main.nf create mode 100644 modules/nf-core/modules/ensemblvep/meta.yml diff --git a/modules.json b/modules.json index bb60823e..c71f6d72 100644 --- a/modules.json +++ b/modules.json @@ -57,6 +57,10 @@ "branch": "master", "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" }, + "ensemblvep": { + "branch": "master", + "git_sha": "973151e9eab9bac400aa99f099075a10cdd8e84c" + }, "expansionhunter": { "branch": "master", "git_sha": "848ee9a215d02d80be033bfa60881700f2bd914c" diff --git a/modules/nf-core/modules/ensemblvep/Dockerfile b/modules/nf-core/modules/ensemblvep/Dockerfile new file mode 100644 index 00000000..7d2c99c4 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/Dockerfile @@ -0,0 +1,31 @@ +FROM nfcore/base:1.14 +LABEL \ + author="Maxime Garcia" \ + description="VEP image for nf-core pipelines" \ + maintainer="maxime.garcia@scilifelab.se" + +# Install the conda environment +COPY environment.yml / +RUN conda env create -f /environment.yml && conda clean -a + +# Setup default ARG variables +ARG GENOME=GRCh38 +ARG SPECIES=homo_sapiens +ARG VEP_CACHE_VERSION=106 +ARG VEP_VERSION=106.1 + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-vep-${VEP_VERSION}/bin:$PATH + +# Download Genome +RUN vep_install \ + -a c \ + -c .vep \ + -s ${SPECIES} \ + -y ${GENOME} \ + --CACHE_VERSION ${VEP_CACHE_VERSION} \ + --CONVERT \ + --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-vep-${VEP_VERSION} > nf-core-vep-${VEP_VERSION}.yml diff --git a/modules/nf-core/modules/ensemblvep/build.sh b/modules/nf-core/modules/ensemblvep/build.sh new file mode 100755 index 00000000..eaa3ed5b --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/build.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Build and push all containers + +build_push() { + GENOME=$1 + SPECIES=$2 + VEP_CACHE_VERSION=$3 + VEP_VERSION=$4 + + docker build \ + . \ + -t nfcore/vep:${VEP_VERSION}.${GENOME} \ + --build-arg GENOME=${GENOME} \ + --build-arg SPECIES=${SPECIES} \ + --build-arg VEP_CACHE_VERSION=${VEP_CACHE_VERSION} \ + --build-arg VEP_VERSION=${VEP_VERSION} + + docker push nfcore/vep:${VEP_VERSION}.${GENOME} +} + +build_push "GRCh37" "homo_sapiens" "106" "106.1" +build_push "GRCh38" "homo_sapiens" "106" "106.1" +build_push "GRCm38" "mus_musculus" "102" "106.1" +build_push "GRCm39" "mus_musculus" "106" "106.1" +build_push "CanFam3.1" "canis_lupus_familiaris" "104" "106.1" +build_push "WBcel235" "caenorhabditis_elegans" "106" "106.1" diff --git a/modules/nf-core/modules/ensemblvep/environment.yml b/modules/nf-core/modules/ensemblvep/environment.yml new file mode 100644 index 00000000..d378f810 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/environment.yml @@ -0,0 +1,10 @@ +# You can use this file to create a conda environment for this module: +# conda env create -f environment.yml +name: nf-core-vep-106.1 +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - bioconda::ensembl-vep=106.1 diff --git a/modules/nf-core/modules/ensemblvep/main.nf b/modules/nf-core/modules/ensemblvep/main.nf new file mode 100644 index 00000000..8a2c6363 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/main.nf @@ -0,0 +1,56 @@ +process ENSEMBLVEP { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::ensembl-vep=106.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ensembl-vep:106.1--pl5321h4a94de4_0' : + 'quay.io/biocontainers/ensembl-vep:106.1--pl5321h4a94de4_0' }" + + input: + tuple val(meta), path(vcf) + val genome + val species + val cache_version + path cache + path fasta + path extra_files + + output: + tuple val(meta), path("*.ann.vcf") , optional:true, emit: vcf + tuple val(meta), path("*.ann.tab") , optional:true, emit: tab + tuple val(meta), path("*.ann.json") , optional:true, emit: json + path "*.summary.html" , emit: report + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json")? 'json' : args.contains("--tab")? 'tab' : 'vcf' + def prefix = task.ext.prefix ?: "${meta.id}" + def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" + def reference = fasta ? "--fasta $fasta" : "" + + """ + vep \\ + -i $vcf \\ + -o ${prefix}.ann.${file_extension} \\ + $args \\ + $reference \\ + --assembly $genome \\ + --species $species \\ + --cache \\ + --cache_version $cache_version \\ + --dir_cache $dir_cache \\ + --fork $task.cpus \\ + --stats_file ${prefix}.summary.html \\ + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/ensemblvep/meta.yml b/modules/nf-core/modules/ensemblvep/meta.yml new file mode 100644 index 00000000..a4dde8a6 --- /dev/null +++ b/modules/nf-core/modules/ensemblvep/meta.yml @@ -0,0 +1,73 @@ +name: ENSEMBLVEP +description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled through `task.ext.args`. +keywords: + - annotation +tools: + - ensemblvep: + description: | + VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs + or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. + homepage: https://www.ensembl.org/info/docs/tools/vep/index.html + documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html + licence: ["Apache-2.0"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - genome: + type: value + description: | + which genome to annotate with + - species: + type: value + description: | + which species to annotate with + - cache_version: + type: value + description: | + which version of the cache to annotate with + - cache: + type: file + description: | + path to VEP cache (optional) + - fasta: + type: file + description: | + reference FASTA file (optional) + pattern: "*.{fasta,fa}" + - extra_files: + type: tuple + description: | + path to file(s) needed for plugins (optional) +output: + - vcf: + type: file + description: | + annotated vcf (optional) + pattern: "*.ann.vcf" + - tab: + type: file + description: | + tab file with annotated variants (optional) + pattern: "*.ann.tab" + - json: + type: file + description: | + json file with annotated variants (optional) + pattern: "*.ann.json" + - report: + type: file + description: VEP report file + pattern: "*.html" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" From 932edc8d943a648588f9761f8eef3afad0aed57a Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 28 Sep 2022 10:16:17 +0200 Subject: [PATCH 0668/1921] fixed the input channel --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index ebf4a7ca..e44bcaea 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -29,7 +29,7 @@ workflow PREPARE_GENOME { ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } else if (aligner == "sentieon") { - SENTIEON_BWAINDEX ( ch_fasta ) + SENTIEON_BWAINDEX ( [[], ch_fasta] ) ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) } else { From f94a14a065bd38e6554ee13a8377858395263e07 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Sep 2022 14:18:49 +0200 Subject: [PATCH 0669/1921] switch vep from local to nf-core --- subworkflows/local/annotate_consequence.nf | 18 +++++++++++------- subworkflows/local/annotate_snvs.nf | 13 +++++-------- .../local/annotate_structural_variants.nf | 13 +++++-------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/subworkflows/local/annotate_consequence.nf b/subworkflows/local/annotate_consequence.nf index 2da8db6a..da220c13 100644 --- a/subworkflows/local/annotate_consequence.nf +++ b/subworkflows/local/annotate_consequence.nf @@ -2,7 +2,8 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { ADD_MOST_SEVERE_CSQ } from '../../modules/local/add_most_severe_consequence' +include { ADD_MOST_SEVERE_CSQ as ADD_MOST_SEVERE_CSQ_CLIN } from '../../modules/local/add_most_severe_consequence' +include { ADD_MOST_SEVERE_CSQ as ADD_MOST_SEVERE_CSQ_RES } from '../../modules/local/add_most_severe_consequence' workflow ANNOTATE_CSQ { take: @@ -13,14 +14,17 @@ workflow ANNOTATE_CSQ { main: ch_versions = Channel.empty() - ch_input = clinical.join(research) - - ADD_MOST_SEVERE_CSQ ( - ch_input, + ADD_MOST_SEVERE_CSQ_CLIN ( + clinical, + variant_consequences + ) + ADD_MOST_SEVERE_CSQ_RES ( + research, variant_consequences ) emit: - vcf = ADD_MOST_SEVERE_CSQ.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + clinical_vcf = ADD_MOST_SEVERE_CSQ_CLIN.out.vcf + research_vcf = ADD_MOST_SEVERE_CSQ_RES.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index aab1c097..c718f61f 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -5,7 +5,7 @@ include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' -include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' +include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/nf-core/modules/ensemblvep/main' include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' @@ -67,16 +67,13 @@ workflow ANNOTATE_SNVS { TABIX_SNV_ANNO (RHOCALL_ANNOTATE.out.vcf) ch_versions = ch_versions.mix(TABIX_SNV_ANNO.out.versions) - RHOCALL_ANNOTATE.out - .vcf - .join(TABIX_SNV_ANNO.out.tbi) - .set { ch_vep_in } - - ENSEMBLVEP_SNV(ch_vep_in, + ENSEMBLVEP_SNV(RHOCALL_ANNOTATE.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, - vep_cache + vep_cache, + fasta, + [] ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 8a23a96e..08f33d81 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -6,7 +6,7 @@ include { SVDB_QUERY } from '../../modules/nf-core/modules/sv include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/nf-core/modules/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -61,16 +61,13 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { TABIX_SV_ANNO (BCFTOOLS_VIEW.out.vcf) ch_versions = ch_versions.mix(TABIX_SV_ANNO.out.versions) - BCFTOOLS_VIEW.out - .vcf - .join(TABIX_SV_ANNO.out.tbi) - .set { ch_vep_in } - - ENSEMBLVEP_SV(ch_vep_in, + ENSEMBLVEP_SV(BCFTOOLS_VIEW.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, - vep_cache + vep_cache, + fasta, + [] ) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) From e527c4b6f820ef72a1cfde84a7ddca13a086433d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Sep 2022 14:38:59 +0200 Subject: [PATCH 0670/1921] update vep --- modules.json | 2 +- modules/nf-core/modules/ensemblvep/main.nf | 33 ++++++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/modules.json b/modules.json index c71f6d72..c4fdfc1d 100644 --- a/modules.json +++ b/modules.json @@ -59,7 +59,7 @@ }, "ensemblvep": { "branch": "master", - "git_sha": "973151e9eab9bac400aa99f099075a10cdd8e84c" + "git_sha": "3d7ce9363079da9a79def248218dcc56efcd5410" }, "expansionhunter": { "branch": "master", diff --git a/modules/nf-core/modules/ensemblvep/main.nf b/modules/nf-core/modules/ensemblvep/main.nf index 8a2c6363..fd2c893a 100644 --- a/modules/nf-core/modules/ensemblvep/main.nf +++ b/modules/nf-core/modules/ensemblvep/main.nf @@ -17,11 +17,14 @@ process ENSEMBLVEP { path extra_files output: - tuple val(meta), path("*.ann.vcf") , optional:true, emit: vcf - tuple val(meta), path("*.ann.tab") , optional:true, emit: tab - tuple val(meta), path("*.ann.json") , optional:true, emit: json - path "*.summary.html" , emit: report - path "versions.yml" , emit: versions + tuple val(meta), path("*.ann.vcf") , optional:true, emit: vcf + tuple val(meta), path("*.ann.tab") , optional:true, emit: tab + tuple val(meta), path("*.ann.json") , optional:true, emit: json + tuple val(meta), path("*.ann.vcf.gz") , optional:true, emit: vcf_gz + tuple val(meta), path("*.ann.tab.gz") , optional:true, emit: tab_gz + tuple val(meta), path("*.ann.json.gz") , optional:true, emit: json_gz + path "*.summary.html" , emit: report + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -29,6 +32,7 @@ process ENSEMBLVEP { script: def args = task.ext.args ?: '' def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json")? 'json' : args.contains("--tab")? 'tab' : 'vcf' + def compress_out = args.contains("--compress_output") ? '.gz' : '' def prefix = task.ext.prefix ?: "${meta.id}" def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" def reference = fasta ? "--fasta $fasta" : "" @@ -36,7 +40,7 @@ process ENSEMBLVEP { """ vep \\ -i $vcf \\ - -o ${prefix}.ann.${file_extension} \\ + -o ${prefix}.ann.${file_extension}${compress_out} \\ $args \\ $reference \\ --assembly $genome \\ @@ -48,6 +52,23 @@ process ENSEMBLVEP { --stats_file ${prefix}.summary.html \\ + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.ann.vcf + touch ${prefix}.ann.tab + touch ${prefix}.ann.json + touch ${prefix}.ann.vcf.gz + touch ${prefix}.ann.tab.gz + touch ${prefix}.ann.json.gz + touch ${prefix}.summary.html + cat <<-END_VERSIONS > versions.yml "${task.process}": ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') From 1bb33879737dd7fd7d0d6e4d7d6771efce6580b4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Sep 2022 14:48:21 +0200 Subject: [PATCH 0671/1921] remove local module --- modules/local/ensemblvep/main.nf | 65 ------------------------------- modules/local/ensemblvep/meta.yml | 65 ------------------------------- 2 files changed, 130 deletions(-) delete mode 100644 modules/local/ensemblvep/main.nf delete mode 100644 modules/local/ensemblvep/meta.yml diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf deleted file mode 100644 index 392aa240..00000000 --- a/modules/local/ensemblvep/main.nf +++ /dev/null @@ -1,65 +0,0 @@ -process ENSEMBLVEP { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::ensembl-vep=105.0" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:105.0--pl5321h4a94de4_1' : - 'quay.io/biocontainers/ensembl-vep:105.0--pl5321h4a94de4_1' }" - - input: - tuple val(meta), path(vcf), path(index) - val genome - val species - val cache_version - path cache - - output: - tuple val(meta), path("*.ann.vcf.gz"), emit: vcf - path "*.summary.html" , emit: report, 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 dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" - """ - mkdir $prefix - - vep \\ - -i $vcf \\ - -o ${prefix}.ann.vcf.gz \\ - $args \\ - --assembly $genome \\ - --species $species \\ - --cache \\ - --cache_version $cache_version \\ - --dir_cache $dir_cache \\ - --fork $task.cpus \\ - --vcf \\ - --compress_output bgzip \\ - --stats_file ${prefix}.summary.html - - rm -rf $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.ann.vcf.gz - touch ${prefix}.summary.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/ensemblvep/meta.yml b/modules/local/ensemblvep/meta.yml deleted file mode 100644 index cd9c8905..00000000 --- a/modules/local/ensemblvep/meta.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: ENSEMBLVEP -description: Ensembl Variant Effect Predictor (VEP) -keywords: - - annotation -tools: - - ensemblvep: - description: | - VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs - or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. - homepage: https://www.ensembl.org/info/docs/tools/vep/index.html - documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html - licence: ["Apache-2.0"] -params: - - use_cache: - type: boolean - description: | - Enable the usage of containers with cache - Does not work with conda - - vep_tag: - type: value - description: | - Specify the tag for the container - https://hub.docker.com/r/nfcore/vep/tags -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - vcf to annotate - - genome: - type: value - description: | - which genome to annotate with - - species: - type: value - description: | - which species to annotate with - - cache_version: - type: value - description: | - which version of the cache to annotate with - - cache: - type: file - description: | - path to VEP cache (optional) -output: - - vcf: - type: file - description: | - annotated vcf - pattern: "*.ann.vcf" - - report: - type: file - description: VEP report file - pattern: "*.html" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@maxulysse" From 6f3c9c80091d77f5f9d0d1940ec4631ea8fd37b1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Sep 2022 15:57:53 +0200 Subject: [PATCH 0672/1921] update ci --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a64a034..b4e4506d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: matrix: NXF_VER: - "21.10.3" - - "latest-everything" + - "latest-stable" steps: - name: Check out pipeline code uses: actions/checkout@v2 From 969a2ad34e916be5e407a6a7b55ed57aedcc68c5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Sep 2022 15:59:52 +0200 Subject: [PATCH 0673/1921] revert last commit --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4e4506d..7a64a034 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: matrix: NXF_VER: - "21.10.3" - - "latest-stable" + - "latest-everything" steps: - name: Check out pipeline code uses: actions/checkout@v2 From e42d68fcad7f35240b71d3d21711988d98f21d4f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Sep 2022 13:53:53 +0200 Subject: [PATCH 0674/1921] update ci --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a64a034..ec507a1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: NXF_VER: - - "21.10.3" + - "21.10.4" - "latest-everything" steps: - name: Check out pipeline code From 65281f6e2e363a054356932e769e1aeebfcd9fa8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Sep 2022 14:01:34 +0200 Subject: [PATCH 0675/1921] update to version 21.10 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ec507a1e..a76ec02f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: NXF_VER: - - "21.10.4" + - "21.10" - "latest-everything" steps: - name: Check out pipeline code From 279fdaacf88d66ee2b57f136eac1858939e4f961 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Sep 2022 14:35:00 +0200 Subject: [PATCH 0676/1921] change back to 21.10.4 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a76ec02f..ec507a1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: NXF_VER: - - "21.10" + - "21.10.4" - "latest-everything" steps: - name: Check out pipeline code From 1583be2d33970a5cb5c31638e38fd1aef9f395eb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Sep 2022 16:00:05 +0200 Subject: [PATCH 0677/1921] update conf --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 85947b7a..b17f0b52 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -533,7 +533,7 @@ process { '--distance 5000', '--buffer_size 20000', '--format vcf --max_sv_size 248956422', - '--appris --biotype --canonical --ccds', + '--appris --biotype --canonical --ccds --compress_output bgzip', '--domains --exclude_predicted --force_overwrite', '--humdiv --no_progress --no_stats --numbers', '--polyphen p --protein --offline --regulatory --sift p --symbol --tsl', @@ -608,7 +608,7 @@ process { '--distance 5000', '--buffer_size 20000', '--format vcf --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', '--domains --exclude_predicted --force_overwrite', '--hgvs --humdiv --no_progress --no_stats --numbers', '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', From 1b827288a36d4ee65438377d77a0f9f472a8126a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Wed, 5 Oct 2022 10:36:06 +0200 Subject: [PATCH 0678/1921] liftover --- bin/check_samplesheet.py | 0 conf/genomes.config | 8 +++ conf/modules.config | 64 ++++++++++++++++++ conf/test.config | 6 ++ docs/images/mqc_fastqc_adapter.png | Bin docs/images/mqc_fastqc_counts.png | Bin docs/images/mqc_fastqc_quality.png | Bin lib/NfcoreSchema.groovy | 0 lib/NfcoreTemplate.groovy | 0 lib/Utils.groovy | 0 lib/WorkflowMain.groovy | 0 lib/WorkflowRaredisease.groovy | 0 modules.json | 4 ++ modules/nf-core/modules/ensemblvep/build.sh | 0 .../modules/picard/liftovervcf/main.nf | 61 +++++++++++++++++ .../modules/picard/liftovervcf/meta.yml | 55 +++++++++++++++ subworkflows/local/align_and_call_MT.nf | 9 ++- subworkflows/local/analyse_MT.nf | 57 ++++++++++++++-- subworkflows/local/prepare_genome.nf | 2 +- workflows/raredisease.nf | 36 ++++++---- 20 files changed, 279 insertions(+), 23 deletions(-) mode change 100755 => 100644 bin/check_samplesheet.py mode change 100755 => 100644 docs/images/mqc_fastqc_adapter.png mode change 100755 => 100644 docs/images/mqc_fastqc_counts.png mode change 100755 => 100644 docs/images/mqc_fastqc_quality.png mode change 100755 => 100644 lib/NfcoreSchema.groovy mode change 100755 => 100644 lib/NfcoreTemplate.groovy mode change 100755 => 100644 lib/Utils.groovy mode change 100755 => 100644 lib/WorkflowMain.groovy mode change 100755 => 100644 lib/WorkflowRaredisease.groovy mode change 100755 => 100644 modules/nf-core/modules/ensemblvep/build.sh create mode 100644 modules/nf-core/modules/picard/liftovervcf/main.nf create mode 100644 modules/nf-core/modules/picard/liftovervcf/meta.yml diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py old mode 100755 new mode 100644 diff --git a/conf/genomes.config b/conf/genomes.config index 79592106..82acb9e6 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -13,6 +13,9 @@ params { 'GRCh37' { fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" + fasta_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" + index_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" + shift_chain = "${params.local_genomes}/ShiftBack.chain bwa = "" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" @@ -20,6 +23,7 @@ params { gnomad_af = "" gnomad_af_tbi = "" intervals_mt = "" + intervals_mt_shift = "" known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" @@ -38,13 +42,17 @@ params { 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" + fasta_shift = "${params.local_genomes}/hg38.chrM.shifted8000.fa" + index_shift = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" bwa = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain call_interval = "" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" gnomad_af_tbi = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" intervals_mt = "${params.local_genomes}/non_control_region.chrM.interval_list" + intervals_mt_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" diff --git a/conf/modules.config b/conf/modules.config index b17f0b52..dc33ab13 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -700,6 +700,70 @@ process { ext.args = '--mitochondria-mode TRUE' } } +// +// ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT +// +process { + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:BWAMEM2_INDEX' { + ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" + ] + } + + + + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:SAMTOOLS_FAIDX' { + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*fai" + ] + } + + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:GET_CHROM_SIZES' { + publishDir = [ + enabled: false, + ] + } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { + ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.prefix = { "${meta.id}_merged" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.prefix = { "${meta.id}_markduplicates" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { + ext.prefix = { "${meta.id}_sorted" } + } + + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { + ext.args = '--mitochondria-mode TRUE' + } + withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { + ext.args = '' + } + +} + // // SENTIEON_TNSCOPE_MT_CALL diff --git a/conf/test.config b/conf/test.config index 6e19d738..9f0cce39 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,6 +25,7 @@ params { // Genome references fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' + fasta_shift='https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' @@ -36,4 +37,9 @@ params { target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' intervals_mt = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' + intervals_mt_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' + + shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference//ShiftBack.chain' + + genome = 'GRCh38' } diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png old mode 100755 new mode 100644 diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png old mode 100755 new mode 100644 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png old mode 100755 new mode 100644 diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy old mode 100755 new mode 100644 diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy old mode 100755 new mode 100644 diff --git a/lib/Utils.groovy b/lib/Utils.groovy old mode 100755 new mode 100644 diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy old mode 100755 new mode 100644 diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy old mode 100755 new mode 100644 diff --git a/modules.json b/modules.json index c4fdfc1d..9d2ca938 100644 --- a/modules.json +++ b/modules.json @@ -133,6 +133,10 @@ "branch": "master", "git_sha": "4b1d4bf401d4cf65ebc4f604bc8c8e7551109db3" }, + "nf-core/picard/liftovervcf": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "67652c7c4dda138c9e71f093b1aea91f29f87c50" diff --git a/modules/nf-core/modules/ensemblvep/build.sh b/modules/nf-core/modules/ensemblvep/build.sh old mode 100755 new mode 100644 diff --git a/modules/nf-core/modules/picard/liftovervcf/main.nf b/modules/nf-core/modules/picard/liftovervcf/main.nf new file mode 100644 index 00000000..334f68b0 --- /dev/null +++ b/modules/nf-core/modules/picard/liftovervcf/main.nf @@ -0,0 +1,61 @@ +process PICARD_LIFTOVERVCF { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + + input: + tuple val(meta), path(input_vcf) + path dict + path chain + path fasta + + output: + tuple val(meta), path("*lifted.vcf.gz") , emit: vcf_lifted + tuple val(meta), path("*unlifted.vcf.gz"), emit: vcf_unlifted + 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 avail_mem = 1 + if (!task.memory) { + log.info '[Picard LiftoverVcf] Available memory not known - defaulting to 1GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + LiftoverVcf \\ + $args \\ + --INPUT $input_vcf \\ + --OUTPUT ${prefix}.lifted.vcf.gz \\ + --CHAIN $chain \\ + --REJECT ${prefix}.unlifted.vcf.gz \\ + --REFERENCE_SEQUENCE $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard LiftoverVcf --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.lifted.vcf.gz + touch ${prefix}.unlifted.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard LiftoverVcf --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/picard/liftovervcf/meta.yml b/modules/nf-core/modules/picard/liftovervcf/meta.yml new file mode 100644 index 00000000..55f04963 --- /dev/null +++ b/modules/nf-core/modules/picard/liftovervcf/meta.yml @@ -0,0 +1,55 @@ +name: picard_liftovervcf +description: convert between genome builds +keywords: + - liftOver + - picard +tools: + - picard: + description: Move annotations from one assembly to another + homepage: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard + tool_dev_url: https://github.com/broadinstitute/picard + doi: "" + licence: ["MIT"] + +input: + - meta: + type: map + description: Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + - chain: + type: file + description: The liftover chain file + - fasta: + type: file + description: fasta file + pattern: "*.fasta" + - dict: + type: file + description: dictionary for 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" + - vcf_lifted: + type: file + description: VCF file containing successfully lifted variants + pattern: "*.{lifted.vcf.gz}" + - vcf_unlifted: + type: file + description: VCF file containing unsuccessfully lifted variants + pattern: "*.{unlifted.vcf.gz}" + +authors: + - "@lucpen" diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index 98c861c1..ba071d6a 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -11,6 +11,8 @@ include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } fr include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' + + workflow ALIGN_AND_CALL_MT { take: fastq // channel: [ val(meta), path('*.fastq.gz') ] @@ -31,15 +33,16 @@ workflow ALIGN_AND_CALL_MT { ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) // Merges bam files - GATK4_MERGEBAMALIGNMENT_MT ( ch_fastq_ubam, fasta, dict ) + GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + // Add read group to merged bam file PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) // Marks duplicates - PICARD_MARKDUPLICATES_MT ( PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file @@ -53,7 +56,7 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) // Calls variants with Mutect2 - GATK4_MUTECT2_MT ( ch_sort_index_bam_intervals_mt, fasta, fai, dict, [], [], [], [] ) + GATK4_MUTECT2_MT (ch_sort_index_bam_intervals_mt, fasta, fai, dict, [], [], [],[]) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index ff290ed6..11d0423e 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -1,11 +1,11 @@ // // Analyse MT // - include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' include { ALIGN_AND_CALL_MT } from './align_and_call_MT' - - +include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' +include { PREPARE_GENOME as PREPARE_GENOME_MT } from './prepare_genome' +include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/modules/picard/liftovervcf/main' workflow ANALYSE_MT { take: @@ -15,15 +15,21 @@ workflow ANALYSE_MT { dict // channel: [ genome.dict ] fai // channel: [ genome.fai ] intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] + fasta_shift // channel: [ genome.fasta ] + intervals_mt_shift // channel: [ file(control_region_shifted.chrM.interval_list) ] + shift_chain + main: ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT PREPARE_MT_ALIGNMENT ( bam ) - ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files - // STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING + ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files + + + //STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING ch_intervals_mt = Channel.fromPath(params.intervals_mt) ALIGN_AND_CALL_MT ( PREPARE_MT_ALIGNMENT.out.fastq, @@ -33,14 +39,51 @@ workflow ANALYSE_MT { dict, fai, ch_intervals_mt + ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) - + aligner="bwamem2" + // STEP 2.2: MT ALLIGNMENT SHIFT AND VARIANT CALLING + ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) + PREPARE_GENOME_MT(aligner,[],[],fasta_shift ,[],[],[]).set { ch_genome } + ch_versions = ch_versions.mix(ch_genome.versions) + ch_dict_shift = ch_genome.sequence_dict + ch_fai_shift = ch_genome.fai + ch_index_shift =ch_genome.aligner_index + + + ALIGN_AND_CALL_MT_SHIFT ( + PREPARE_MT_ALIGNMENT.out.fastq, + PREPARE_MT_ALIGNMENT.out.bam, + ch_index_shift, + fasta_shift, + ch_dict_shift, + ch_fai_shift, + ch_intervals_mt_shift + ) + ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) + + PICARD_LIFTOVERVCF (ALIGN_AND_CALL_MT_SHIFT.out.vcf,dict,shift_chain,fasta) + ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) + + + + + emit: vcf = ALIGN_AND_CALL_MT.out.vcf tbi = ALIGN_AND_CALL_MT.out.tbi txt = ALIGN_AND_CALL_MT.out.txt html = ALIGN_AND_CALL_MT.out.html - versions = ch_versions // channel: [ versions.yml ] + vcf_shift = ALIGN_AND_CALL_MT_SHIFT.out.vcf + tbi_shift = ALIGN_AND_CALL_MT_SHIFT.out.tbi + txt_shift = ALIGN_AND_CALL_MT_SHIFT.out.txt + html_shift = ALIGN_AND_CALL_MT_SHIFT.out.html + + vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted + vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted + + versions = ch_versions // channel: [ versions.yml ] + } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index e44bcaea..6ff0513a 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -29,7 +29,7 @@ workflow PREPARE_GENOME { ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } else if (aligner == "sentieon") { - SENTIEON_BWAINDEX ( [[], ch_fasta] ) + SENTIEON_BWAINDEX ([[],ch_fasta] ) ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 87238dac..566d81e1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -13,10 +13,12 @@ WorkflowRaredisease.initialise(params, log) def checkPathParamList = [ params.bwamem2_index, params.fasta, + params.fasta_shift, params.fasta_fai, params.gnomad, params.input, params.intervals_mt, + params.intervals_mt_shift, params.multiqc_config, params.reduced_penetrance, params.score_config_snv, @@ -68,6 +70,7 @@ include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' include { CHECK_INPUT } from '../subworkflows/local/check_input' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' + include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { GENS } from '../subworkflows/local/gens' @@ -89,6 +92,7 @@ include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_co include { FASTQC } from '../modules/nf-core/modules/fastqc/main' include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' + include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' // @@ -161,7 +165,7 @@ workflow RAREDISEASE { ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - + // STEP 1.5: BAM QUALITY CHECK QC_BAM ( ch_mapped.marked_bam, @@ -173,7 +177,7 @@ workflow RAREDISEASE { ch_references.chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) - + // STEP 1.6: EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, @@ -181,7 +185,7 @@ workflow RAREDISEASE { ch_references.variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) - + // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV ( @@ -196,7 +200,7 @@ workflow RAREDISEASE { CHECK_INPUT.out.case_info ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) - + CALL_STRUCTURAL_VARIANTS ( ch_mapped.marked_bam, ch_mapped.marked_bai, @@ -223,7 +227,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } - + if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, @@ -255,20 +259,28 @@ workflow RAREDISEASE { ch_variant_consequences ) } - - - // STEP 2.1: ANALYSE MT + + + // STEP 2.1: ANALYSE MT ch_intervals_mt = Channel.fromPath(params.intervals_mt) + ch_fasta_shift=Channel.fromPath(params.fasta_shift) + ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) + ANALYSE_MT ( ch_mapped.bam_bai, ch_references.aligner_index, ch_references.genome_fasta, ch_references.sequence_dict, ch_references.genome_fai, - ch_intervals_mt + ch_intervals_mt, + params.fasta_shift, + params.intervals_mt_shift, + params.shift_chain + + ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) - + // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) @@ -305,14 +317,14 @@ workflow RAREDISEASE { ch_variant_consequences ) } - + // // MODULE: Pipeline reporting // CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') ) - + // // MODULE: MultiQC // From 5db9aeb184a23c6ba05cc2b77d2ddadfe00b9ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Wed, 5 Oct 2022 13:10:44 +0200 Subject: [PATCH 0679/1921] filepermissions --- bin/check_samplesheet.py | 0 lib/NfcoreSchema.groovy | 0 lib/NfcoreTemplate.groovy | 0 lib/Utils.groovy | 0 lib/WorkflowMain.groovy | 0 lib/WorkflowRaredisease.groovy | 0 modules/nf-core/modules/ensemblvep/build.sh | 0 7 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bin/check_samplesheet.py mode change 100644 => 100755 lib/NfcoreSchema.groovy mode change 100644 => 100755 lib/NfcoreTemplate.groovy mode change 100644 => 100755 lib/Utils.groovy mode change 100644 => 100755 lib/WorkflowMain.groovy mode change 100644 => 100755 lib/WorkflowRaredisease.groovy mode change 100644 => 100755 modules/nf-core/modules/ensemblvep/build.sh diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py old mode 100644 new mode 100755 diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy old mode 100644 new mode 100755 diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy old mode 100644 new mode 100755 diff --git a/lib/Utils.groovy b/lib/Utils.groovy old mode 100644 new mode 100755 diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy old mode 100644 new mode 100755 diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy old mode 100644 new mode 100755 diff --git a/modules/nf-core/modules/ensemblvep/build.sh b/modules/nf-core/modules/ensemblvep/build.sh old mode 100644 new mode 100755 From ac2c2aa105a3770c2bb8e226d6dc7357a898d92c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Wed, 5 Oct 2022 13:22:52 +0200 Subject: [PATCH 0680/1921] filepermissions --- docs/images/mqc_fastqc_adapter.png | Bin docs/images/mqc_fastqc_counts.png | Bin docs/images/mqc_fastqc_quality.png | Bin docs/images/nf-core-raredisease_logo_dark.png | Bin docs/images/nf-core-raredisease_logo_light.png | Bin docs/images/raredisease_workflow.png | Bin docs/images/raredisease_workflow.svg | 0 7 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docs/images/mqc_fastqc_adapter.png mode change 100644 => 100755 docs/images/mqc_fastqc_counts.png mode change 100644 => 100755 docs/images/mqc_fastqc_quality.png mode change 100644 => 100755 docs/images/nf-core-raredisease_logo_dark.png mode change 100644 => 100755 docs/images/nf-core-raredisease_logo_light.png mode change 100644 => 100755 docs/images/raredisease_workflow.png mode change 100644 => 100755 docs/images/raredisease_workflow.svg diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png old mode 100644 new mode 100755 diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png old mode 100644 new mode 100755 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png old mode 100644 new mode 100755 diff --git a/docs/images/nf-core-raredisease_logo_dark.png b/docs/images/nf-core-raredisease_logo_dark.png old mode 100644 new mode 100755 diff --git a/docs/images/nf-core-raredisease_logo_light.png b/docs/images/nf-core-raredisease_logo_light.png old mode 100644 new mode 100755 diff --git a/docs/images/raredisease_workflow.png b/docs/images/raredisease_workflow.png old mode 100644 new mode 100755 diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg old mode 100644 new mode 100755 From ca7de7b2d963280ee5519d2448a3dda2e8ee7922 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Wed, 5 Oct 2022 13:27:07 +0200 Subject: [PATCH 0681/1921] Delete mqc_fastqc_adapter.png --- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 docs/images/mqc_fastqc_adapter.png diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 Date: Wed, 5 Oct 2022 13:27:25 +0200 Subject: [PATCH 0682/1921] Delete raredisease_workflow.svg --- docs/images/raredisease_workflow.svg | 922 --------------------------- 1 file changed, 922 deletions(-) delete mode 100755 docs/images/raredisease_workflow.svg diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg deleted file mode 100755 index 012f2c59..00000000 --- a/docs/images/raredisease_workflow.svg +++ /dev/null @@ -1,922 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bam - - - - - Preprocessing, mapping etc -bwamem2, MarkDuplicates -Sentieon: bwamem, Locuscollector, Dedup - - - - Reports -MultiQC, Peddy, plink, rhocall - - - - - Variant calling - - SV -ExpansionHunter, CNVpytor, Manta, tiddit/sv - Mitochondria -According to GATK Best Practices -Mutect2, eKLIPse - SNV + short indels -Deepvariant -Sentieon: DNAscope, DNAModelApply - - - - Variant annotation and prioritization - - SV -VCFanno, VEP, Gens - Mitochondria -Haplogrep, HmtNote, gnomAD_mt - SNV + short indels -VCFanno, CADD, VEP - - - - - Outputs -VCFs, inputs for scout, Gens - - - - - vcf - - - - - - vcf - - - - - - vcf - - - - - - - fastq - - - - dev - - - - - - From 52f1e11506dee9de82a4131cac4acf0d44eb4b06 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Wed, 5 Oct 2022 13:27:45 +0200 Subject: [PATCH 0683/1921] Delete nf-core-raredisease_logo_dark.png --- docs/images/nf-core-raredisease_logo_dark.png | Bin 75872 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 docs/images/nf-core-raredisease_logo_dark.png diff --git a/docs/images/nf-core-raredisease_logo_dark.png b/docs/images/nf-core-raredisease_logo_dark.png deleted file mode 100755 index 9e7a1960ad55bf1761376247a48c8229ebdc227c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75872 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 L(>>Y0+MoMhsb=rF From 5e1db03fbf99dd1a32e35e4f4b78fee9e4b578fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Wed, 5 Oct 2022 13:40:37 +0200 Subject: [PATCH 0684/1921] images --- docs/images/mqc_fastqc_adapter.png | Bin 0 -> 23458 bytes docs/images/nf-core-raredisease_logo_dark.png | Bin 0 -> 75872 bytes docs/images/raredisease_workflow.svg | 922 ++++++++++++++++++ 3 files changed, 922 insertions(+) create mode 100755 docs/images/mqc_fastqc_adapter.png create mode 100755 docs/images/nf-core-raredisease_logo_dark.png create mode 100755 docs/images/raredisease_workflow.svg diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png new file mode 100755 index 0000000000000000000000000000000000000000..361d0e47acfb424dea1f326590d1eb2f6dfa26b5 GIT binary patch literal 23458 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 L(>>Y0+MoMhsb=rF literal 0 HcmV?d00001 diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg new file mode 100755 index 00000000..012f2c59 --- /dev/null +++ b/docs/images/raredisease_workflow.svg @@ -0,0 +1,922 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bam + + + + + Preprocessing, mapping etc +bwamem2, MarkDuplicates +Sentieon: bwamem, Locuscollector, Dedup + + + + Reports +MultiQC, Peddy, plink, rhocall + + + + + Variant calling + + SV +ExpansionHunter, CNVpytor, Manta, tiddit/sv + Mitochondria +According to GATK Best Practices +Mutect2, eKLIPse + SNV + short indels +Deepvariant +Sentieon: DNAscope, DNAModelApply + + + + Variant annotation and prioritization + + SV +VCFanno, VEP, Gens + Mitochondria +Haplogrep, HmtNote, gnomAD_mt + SNV + short indels +VCFanno, CADD, VEP + + + + + Outputs +VCFs, inputs for scout, Gens + + + + + vcf + + + + + + vcf + + + + + + vcf + + + + + + + fastq + + + + dev + + + + + + From 613792b50258463e2dac204240074cab1e7cbd7b Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Wed, 5 Oct 2022 14:07:10 +0200 Subject: [PATCH 0685/1921] Update subworkflows/local/analyse_MT.nf Co-authored-by: Lucpen --- subworkflows/local/analyse_MT.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 11d0423e..1d131481 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -39,7 +39,6 @@ workflow ANALYSE_MT { dict, fai, ch_intervals_mt - ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) From 184a6e479b9886a0c513d734e51cd4294589b504 Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Wed, 5 Oct 2022 14:07:18 +0200 Subject: [PATCH 0686/1921] Update subworkflows/local/analyse_MT.nf Co-authored-by: Lucpen --- subworkflows/local/analyse_MT.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 1d131481..1e0f1cce 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -25,7 +25,6 @@ workflow ANALYSE_MT { // STEP 1: PREPARING MT ALIGNMENT PREPARE_MT_ALIGNMENT ( bam ) - ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files From 3718315dff5978eb9ee0856a07d0e98dd662dcc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Wed, 5 Oct 2022 14:34:32 +0200 Subject: [PATCH 0687/1921] modified: conf/modules.config modified: subworkflows/local/analyse_MT.nf modified: subworkflows/local/prepare_genome.nf modified: workflows/raredisease.nf --- conf/modules.config | 10 +++--- subworkflows/local/analyse_MT.nf | 53 +++++++++++++--------------- subworkflows/local/prepare_genome.nf | 2 +- workflows/raredisease.nf | 4 --- 4 files changed, 30 insertions(+), 39 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index dc33ab13..2741abb1 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -704,7 +704,7 @@ process { // ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT // process { - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:BWAMEM2_INDEX' { + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:BWAMEM2_INDEX' { ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, @@ -716,7 +716,7 @@ process { } - + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.outdir}/references" }, @@ -753,15 +753,15 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { ext.prefix = { "${meta.id}_sorted" } } - + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } - withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { + withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { ext.args = '' } - + } diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 11d0423e..1693e7ec 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -1,11 +1,11 @@ // // Analyse MT // -include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' -include { ALIGN_AND_CALL_MT } from './align_and_call_MT' -include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' -include { PREPARE_GENOME as PREPARE_GENOME_MT } from './prepare_genome' -include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/modules/picard/liftovervcf/main' +include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' +include { ALIGN_AND_CALL_MT } from './align_and_call_MT' +include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' +include { PREPARE_GENOME as PREPARE_GENOME_MT } from './prepare_genome' +include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/modules/picard/liftovervcf/main' workflow ANALYSE_MT { take: @@ -18,17 +18,14 @@ workflow ANALYSE_MT { fasta_shift // channel: [ genome.fasta ] intervals_mt_shift // channel: [ file(control_region_shifted.chrM.interval_list) ] shift_chain - main: ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT PREPARE_MT_ALIGNMENT ( bam ) - ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files - //STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING ch_intervals_mt = Channel.fromPath(params.intervals_mt) ALIGN_AND_CALL_MT ( @@ -39,11 +36,9 @@ workflow ANALYSE_MT { dict, fai, ch_intervals_mt - ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) - aligner="bwamem2" // STEP 2.2: MT ALLIGNMENT SHIFT AND VARIANT CALLING ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) PREPARE_GENOME_MT(aligner,[],[],fasta_shift ,[],[],[]).set { ch_genome } @@ -51,7 +46,7 @@ workflow ANALYSE_MT { ch_dict_shift = ch_genome.sequence_dict ch_fai_shift = ch_genome.fai ch_index_shift =ch_genome.aligner_index - + ALIGN_AND_CALL_MT_SHIFT ( PREPARE_MT_ALIGNMENT.out.fastq, @@ -64,26 +59,26 @@ workflow ANALYSE_MT { ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) - PICARD_LIFTOVERVCF (ALIGN_AND_CALL_MT_SHIFT.out.vcf,dict,shift_chain,fasta) - ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) - - + // STEP 2.3: PICARD_LIFTOVERVCF + PICARD_LIFTOVERVCF ( + ALIGN_AND_CALL_MT_SHIFT.out.vcf, + dict, + shift_chain, + fasta) + ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) - emit: - vcf = ALIGN_AND_CALL_MT.out.vcf - tbi = ALIGN_AND_CALL_MT.out.tbi - txt = ALIGN_AND_CALL_MT.out.txt - html = ALIGN_AND_CALL_MT.out.html - vcf_shift = ALIGN_AND_CALL_MT_SHIFT.out.vcf - tbi_shift = ALIGN_AND_CALL_MT_SHIFT.out.tbi - txt_shift = ALIGN_AND_CALL_MT_SHIFT.out.txt - html_shift = ALIGN_AND_CALL_MT_SHIFT.out.html - - vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted - vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted - - versions = ch_versions // channel: [ versions.yml ] + vcf = ALIGN_AND_CALL_MT.out.vcf + tbi = ALIGN_AND_CALL_MT.out.tbi + txt = ALIGN_AND_CALL_MT.out.txt + html = ALIGN_AND_CALL_MT.out.html + vcf_shift = ALIGN_AND_CALL_MT_SHIFT.out.vcf + tbi_shift = ALIGN_AND_CALL_MT_SHIFT.out.tbi + txt_shift = ALIGN_AND_CALL_MT_SHIFT.out.txt + html_shift = ALIGN_AND_CALL_MT_SHIFT.out.html + vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted + vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 6ff0513a..9d1b11e7 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -29,7 +29,7 @@ workflow PREPARE_GENOME { ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } else if (aligner == "sentieon") { - SENTIEON_BWAINDEX ([[],ch_fasta] ) + SENTIEON_BWAINDEX ([ [], ch_fasta] ) ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 566d81e1..6225dea6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -70,7 +70,6 @@ include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' include { CHECK_INPUT } from '../subworkflows/local/check_input' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' - include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { GENS } from '../subworkflows/local/gens' @@ -92,7 +91,6 @@ include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_co include { FASTQC } from '../modules/nf-core/modules/fastqc/main' include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' - include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' // @@ -276,8 +274,6 @@ workflow RAREDISEASE { params.fasta_shift, params.intervals_mt_shift, params.shift_chain - - ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) From 99bc475fcc158491cadfcd394e9dd804ef4ac8da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Wed, 5 Oct 2022 14:45:23 +0200 Subject: [PATCH 0688/1921] modified: subworkflows/local/analyse_MT.nf --- subworkflows/local/analyse_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 1693e7ec..9cfeaeb0 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -41,7 +41,7 @@ workflow ANALYSE_MT { // STEP 2.2: MT ALLIGNMENT SHIFT AND VARIANT CALLING ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) - PREPARE_GENOME_MT(aligner,[],[],fasta_shift ,[],[],[]).set { ch_genome } + PREPARE_GENOME_MT("bwamem2",[],[],fasta_shift ,[],[],[]).set { ch_genome } ch_versions = ch_versions.mix(ch_genome.versions) ch_dict_shift = ch_genome.sequence_dict ch_fai_shift = ch_genome.fai From b89d7a0c3f799476f697fbbaf0e69ae0dbc89ef5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Oct 2022 16:49:22 +0200 Subject: [PATCH 0689/1921] update to new structure --- modules.json | 443 +++++++++--------- .../{modules => }/bcftools/norm/main.nf | 0 .../{modules => }/bcftools/norm/meta.yml | 0 .../{modules => }/bcftools/roh/main.nf | 0 .../{modules => }/bcftools/roh/meta.yml | 0 .../{modules => }/bcftools/view/main.nf | 0 .../{modules => }/bcftools/view/meta.yml | 0 .../{modules => }/bwamem2/index/main.nf | 0 .../{modules => }/bwamem2/index/meta.yml | 0 .../nf-core/{modules => }/bwamem2/mem/main.nf | 0 .../{modules => }/bwamem2/mem/meta.yml | 0 modules/nf-core/{modules => }/cat/cat/main.nf | 0 .../nf-core/{modules => }/cat/cat/meta.yml | 0 .../{modules => }/cnvpytor/callcnvs/main.nf | 0 .../{modules => }/cnvpytor/callcnvs/meta.yml | 0 .../{modules => }/cnvpytor/histogram/main.nf | 0 .../{modules => }/cnvpytor/histogram/meta.yml | 0 .../cnvpytor/importreaddepth/main.nf | 0 .../cnvpytor/importreaddepth/meta.yml | 0 .../{modules => }/cnvpytor/partition/main.nf | 0 .../{modules => }/cnvpytor/partition/meta.yml | 0 .../{modules => }/cnvpytor/view/main.nf | 0 .../{modules => }/cnvpytor/view/meta.yml | 0 .../custom/dumpsoftwareversions/main.nf | 0 .../custom/dumpsoftwareversions/meta.yml | 0 .../templates/dumpsoftwareversions.py | 0 .../nf-core/{modules => }/deepvariant/main.nf | 0 .../{modules => }/deepvariant/meta.yml | 0 .../{modules => }/ensemblvep/Dockerfile | 0 .../nf-core/{modules => }/ensemblvep/build.sh | 0 .../{modules => }/ensemblvep/environment.yml | 0 .../nf-core/{modules => }/ensemblvep/main.nf | 0 .../nf-core/{modules => }/ensemblvep/meta.yml | 0 .../{modules => }/expansionhunter/main.nf | 0 .../{modules => }/expansionhunter/meta.yml | 0 modules/nf-core/{modules => }/fastqc/main.nf | 0 modules/nf-core/{modules => }/fastqc/meta.yml | 0 .../gatk4/bedtointervallist/main.nf | 0 .../gatk4/bedtointervallist/meta.yml | 0 .../gatk4/createsequencedictionary/main.nf | 0 .../gatk4/createsequencedictionary/meta.yml | 0 .../gatk4/intervallisttools/main.nf | 0 .../gatk4/intervallisttools/meta.yml | 0 .../gatk4/mergebamalignment/main.nf | 0 .../gatk4/mergebamalignment/meta.yml | 0 .../{modules => }/gatk4/mutect2/main.nf | 0 .../{modules => }/gatk4/mutect2/meta.yml | 0 .../{modules => }/gatk4/revertsam/main.nf | 0 .../{modules => }/gatk4/revertsam/meta.yml | 0 .../{modules => }/gatk4/samtofastq/main.nf | 0 .../{modules => }/gatk4/samtofastq/meta.yml | 0 .../{modules => }/genmod/annotate/main.nf | 0 .../{modules => }/genmod/annotate/meta.yml | 0 .../{modules => }/genmod/compound/main.nf | 0 .../{modules => }/genmod/compound/meta.yml | 0 .../{modules => }/genmod/models/main.nf | 0 .../{modules => }/genmod/models/meta.yml | 0 .../{modules => }/genmod/score/main.nf | 0 .../{modules => }/genmod/score/meta.yml | 0 modules/nf-core/{modules => }/glnexus/main.nf | 0 .../nf-core/{modules => }/glnexus/meta.yml | 0 .../nf-core/{modules => }/haplocheck/main.nf | 0 .../nf-core/{modules => }/haplocheck/meta.yml | 0 .../{modules => }/manta/germline/main.nf | 0 .../{modules => }/manta/germline/meta.yml | 0 .../nf-core/{modules => }/mosdepth/main.nf | 0 .../nf-core/{modules => }/mosdepth/meta.yml | 0 modules/nf-core/{modules => }/multiqc/main.nf | 0 .../nf-core/{modules => }/multiqc/meta.yml | 0 .../picard/addorreplacereadgroups/main.nf | 0 .../picard/addorreplacereadgroups/meta.yml | 0 .../picard/collecthsmetrics/main.nf | 0 .../picard/collecthsmetrics/meta.yml | 0 .../picard/collectmultiplemetrics/main.nf | 0 .../picard/collectmultiplemetrics/meta.yml | 0 .../picard/markduplicates/main.nf | 0 .../picard/markduplicates/meta.yml | 0 .../{modules => }/picard/sortvcf/main.nf | 0 .../{modules => }/picard/sortvcf/meta.yml | 0 .../{modules => }/qualimap/bamqc/main.nf | 0 .../{modules => }/qualimap/bamqc/meta.yml | 0 .../{modules => }/rhocall/annotate/main.nf | 0 .../{modules => }/rhocall/annotate/meta.yml | 0 .../{modules => }/samtools/faidx/main.nf | 0 .../{modules => }/samtools/faidx/meta.yml | 0 .../{modules => }/samtools/index/main.nf | 0 .../{modules => }/samtools/index/meta.yml | 0 .../{modules => }/samtools/merge/main.nf | 0 .../{modules => }/samtools/merge/meta.yml | 0 .../{modules => }/samtools/sort/main.nf | 0 .../{modules => }/samtools/sort/meta.yml | 0 .../{modules => }/samtools/stats/main.nf | 0 .../{modules => }/samtools/stats/meta.yml | 0 .../{modules => }/samtools/view/main.nf | 0 .../{modules => }/samtools/view/meta.yml | 0 .../nf-core/{modules => }/stranger/main.nf | 0 .../nf-core/{modules => }/stranger/meta.yml | 0 .../nf-core/{modules => }/svdb/merge/main.nf | 0 .../nf-core/{modules => }/svdb/merge/meta.yml | 0 .../nf-core/{modules => }/svdb/query/main.nf | 0 .../nf-core/{modules => }/svdb/query/meta.yml | 0 .../{modules => }/tabix/bgziptabix/main.nf | 0 .../{modules => }/tabix/bgziptabix/meta.yml | 0 .../nf-core/{modules => }/tabix/tabix/main.nf | 0 .../{modules => }/tabix/tabix/meta.yml | 0 .../nf-core/{modules => }/tiddit/cov/main.nf | 0 .../nf-core/{modules => }/tiddit/cov/meta.yml | 0 .../nf-core/{modules => }/tiddit/sv/main.nf | 0 .../nf-core/{modules => }/tiddit/sv/meta.yml | 0 .../{modules => }/ucsc/wigtobigwig/main.nf | 0 .../{modules => }/ucsc/wigtobigwig/meta.yml | 0 modules/nf-core/{modules => }/untar/main.nf | 0 modules/nf-core/{modules => }/untar/meta.yml | 0 modules/nf-core/{modules => }/vcfanno/main.nf | 0 .../nf-core/{modules => }/vcfanno/meta.yml | 0 115 files changed, 222 insertions(+), 221 deletions(-) rename modules/nf-core/{modules => }/bcftools/norm/main.nf (100%) rename modules/nf-core/{modules => }/bcftools/norm/meta.yml (100%) rename modules/nf-core/{modules => }/bcftools/roh/main.nf (100%) rename modules/nf-core/{modules => }/bcftools/roh/meta.yml (100%) rename modules/nf-core/{modules => }/bcftools/view/main.nf (100%) rename modules/nf-core/{modules => }/bcftools/view/meta.yml (100%) rename modules/nf-core/{modules => }/bwamem2/index/main.nf (100%) rename modules/nf-core/{modules => }/bwamem2/index/meta.yml (100%) rename modules/nf-core/{modules => }/bwamem2/mem/main.nf (100%) rename modules/nf-core/{modules => }/bwamem2/mem/meta.yml (100%) rename modules/nf-core/{modules => }/cat/cat/main.nf (100%) rename modules/nf-core/{modules => }/cat/cat/meta.yml (100%) rename modules/nf-core/{modules => }/cnvpytor/callcnvs/main.nf (100%) rename modules/nf-core/{modules => }/cnvpytor/callcnvs/meta.yml (100%) rename modules/nf-core/{modules => }/cnvpytor/histogram/main.nf (100%) rename modules/nf-core/{modules => }/cnvpytor/histogram/meta.yml (100%) rename modules/nf-core/{modules => }/cnvpytor/importreaddepth/main.nf (100%) rename modules/nf-core/{modules => }/cnvpytor/importreaddepth/meta.yml (100%) rename modules/nf-core/{modules => }/cnvpytor/partition/main.nf (100%) rename modules/nf-core/{modules => }/cnvpytor/partition/meta.yml (100%) rename modules/nf-core/{modules => }/cnvpytor/view/main.nf (100%) rename modules/nf-core/{modules => }/cnvpytor/view/meta.yml (100%) rename modules/nf-core/{modules => }/custom/dumpsoftwareversions/main.nf (100%) rename modules/nf-core/{modules => }/custom/dumpsoftwareversions/meta.yml (100%) rename modules/nf-core/{modules => }/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py (100%) rename modules/nf-core/{modules => }/deepvariant/main.nf (100%) rename modules/nf-core/{modules => }/deepvariant/meta.yml (100%) rename modules/nf-core/{modules => }/ensemblvep/Dockerfile (100%) rename modules/nf-core/{modules => }/ensemblvep/build.sh (100%) rename modules/nf-core/{modules => }/ensemblvep/environment.yml (100%) rename modules/nf-core/{modules => }/ensemblvep/main.nf (100%) rename modules/nf-core/{modules => }/ensemblvep/meta.yml (100%) rename modules/nf-core/{modules => }/expansionhunter/main.nf (100%) rename modules/nf-core/{modules => }/expansionhunter/meta.yml (100%) rename modules/nf-core/{modules => }/fastqc/main.nf (100%) rename modules/nf-core/{modules => }/fastqc/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/bedtointervallist/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/bedtointervallist/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/createsequencedictionary/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/createsequencedictionary/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/intervallisttools/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/intervallisttools/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/mergebamalignment/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/mergebamalignment/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/mutect2/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/mutect2/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/revertsam/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/revertsam/meta.yml (100%) rename modules/nf-core/{modules => }/gatk4/samtofastq/main.nf (100%) rename modules/nf-core/{modules => }/gatk4/samtofastq/meta.yml (100%) rename modules/nf-core/{modules => }/genmod/annotate/main.nf (100%) rename modules/nf-core/{modules => }/genmod/annotate/meta.yml (100%) rename modules/nf-core/{modules => }/genmod/compound/main.nf (100%) rename modules/nf-core/{modules => }/genmod/compound/meta.yml (100%) rename modules/nf-core/{modules => }/genmod/models/main.nf (100%) rename modules/nf-core/{modules => }/genmod/models/meta.yml (100%) rename modules/nf-core/{modules => }/genmod/score/main.nf (100%) rename modules/nf-core/{modules => }/genmod/score/meta.yml (100%) rename modules/nf-core/{modules => }/glnexus/main.nf (100%) rename modules/nf-core/{modules => }/glnexus/meta.yml (100%) rename modules/nf-core/{modules => }/haplocheck/main.nf (100%) rename modules/nf-core/{modules => }/haplocheck/meta.yml (100%) rename modules/nf-core/{modules => }/manta/germline/main.nf (100%) rename modules/nf-core/{modules => }/manta/germline/meta.yml (100%) rename modules/nf-core/{modules => }/mosdepth/main.nf (100%) rename modules/nf-core/{modules => }/mosdepth/meta.yml (100%) rename modules/nf-core/{modules => }/multiqc/main.nf (100%) rename modules/nf-core/{modules => }/multiqc/meta.yml (100%) rename modules/nf-core/{modules => }/picard/addorreplacereadgroups/main.nf (100%) rename modules/nf-core/{modules => }/picard/addorreplacereadgroups/meta.yml (100%) rename modules/nf-core/{modules => }/picard/collecthsmetrics/main.nf (100%) rename modules/nf-core/{modules => }/picard/collecthsmetrics/meta.yml (100%) rename modules/nf-core/{modules => }/picard/collectmultiplemetrics/main.nf (100%) rename modules/nf-core/{modules => }/picard/collectmultiplemetrics/meta.yml (100%) rename modules/nf-core/{modules => }/picard/markduplicates/main.nf (100%) rename modules/nf-core/{modules => }/picard/markduplicates/meta.yml (100%) rename modules/nf-core/{modules => }/picard/sortvcf/main.nf (100%) rename modules/nf-core/{modules => }/picard/sortvcf/meta.yml (100%) rename modules/nf-core/{modules => }/qualimap/bamqc/main.nf (100%) rename modules/nf-core/{modules => }/qualimap/bamqc/meta.yml (100%) rename modules/nf-core/{modules => }/rhocall/annotate/main.nf (100%) rename modules/nf-core/{modules => }/rhocall/annotate/meta.yml (100%) rename modules/nf-core/{modules => }/samtools/faidx/main.nf (100%) rename modules/nf-core/{modules => }/samtools/faidx/meta.yml (100%) rename modules/nf-core/{modules => }/samtools/index/main.nf (100%) rename modules/nf-core/{modules => }/samtools/index/meta.yml (100%) rename modules/nf-core/{modules => }/samtools/merge/main.nf (100%) rename modules/nf-core/{modules => }/samtools/merge/meta.yml (100%) rename modules/nf-core/{modules => }/samtools/sort/main.nf (100%) rename modules/nf-core/{modules => }/samtools/sort/meta.yml (100%) rename modules/nf-core/{modules => }/samtools/stats/main.nf (100%) rename modules/nf-core/{modules => }/samtools/stats/meta.yml (100%) rename modules/nf-core/{modules => }/samtools/view/main.nf (100%) rename modules/nf-core/{modules => }/samtools/view/meta.yml (100%) rename modules/nf-core/{modules => }/stranger/main.nf (100%) rename modules/nf-core/{modules => }/stranger/meta.yml (100%) rename modules/nf-core/{modules => }/svdb/merge/main.nf (100%) rename modules/nf-core/{modules => }/svdb/merge/meta.yml (100%) rename modules/nf-core/{modules => }/svdb/query/main.nf (100%) rename modules/nf-core/{modules => }/svdb/query/meta.yml (100%) rename modules/nf-core/{modules => }/tabix/bgziptabix/main.nf (100%) rename modules/nf-core/{modules => }/tabix/bgziptabix/meta.yml (100%) rename modules/nf-core/{modules => }/tabix/tabix/main.nf (100%) rename modules/nf-core/{modules => }/tabix/tabix/meta.yml (100%) rename modules/nf-core/{modules => }/tiddit/cov/main.nf (100%) rename modules/nf-core/{modules => }/tiddit/cov/meta.yml (100%) rename modules/nf-core/{modules => }/tiddit/sv/main.nf (100%) rename modules/nf-core/{modules => }/tiddit/sv/meta.yml (100%) rename modules/nf-core/{modules => }/ucsc/wigtobigwig/main.nf (100%) rename modules/nf-core/{modules => }/ucsc/wigtobigwig/meta.yml (100%) rename modules/nf-core/{modules => }/untar/main.nf (100%) rename modules/nf-core/{modules => }/untar/meta.yml (100%) rename modules/nf-core/{modules => }/vcfanno/main.nf (100%) rename modules/nf-core/{modules => }/vcfanno/meta.yml (100%) diff --git a/modules.json b/modules.json index c4fdfc1d..976979f4 100644 --- a/modules.json +++ b/modules.json @@ -2,228 +2,229 @@ "name": "nf-core/raredisease", "homePage": "https://github.com/nf-core/raredisease", "repos": { - "nf-core/modules": { - "git_url": "https://github.com/nf-core/modules.git", + "https://github.com/nf-core/modules.git": { "modules": { - "bcftools/norm": { - "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" - }, - "bcftools/roh": { - "branch": "master", - "git_sha": "c079ee20250f5676c53b145fdd00f9defe91f112" - }, - "bcftools/view": { - "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" - }, - "bwamem2/index": { - "branch": "master", - "git_sha": "d0ff29fca32ba795177584ebfd51dcd6b0d5f890" - }, - "bwamem2/mem": { - "branch": "master", - "git_sha": "30b04859129f5f4235accdea9fdea8f1feb23809" - }, - "cat/cat": { - "branch": "master", - "git_sha": "eeda4136c096688d04cc40bb3c70d948213ed641" - }, - "cnvpytor/callcnvs": { - "branch": "master", - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" - }, - "cnvpytor/histogram": { - "branch": "master", - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" - }, - "cnvpytor/importreaddepth": { - "branch": "master", - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" - }, - "cnvpytor/partition": { - "branch": "master", - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" - }, - "cnvpytor/view": { - "branch": "master", - "git_sha": "16536b69368595f7e5934fcbaef5033522d49518" - }, - "custom/dumpsoftwareversions": { - "branch": "master", - "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" - }, - "deepvariant": { - "branch": "master", - "git_sha": "fd5f6f5f4ffef4ab5a4e809bd3211bbc71c38d30" - }, - "ensemblvep": { - "branch": "master", - "git_sha": "3d7ce9363079da9a79def248218dcc56efcd5410" - }, - "expansionhunter": { - "branch": "master", - "git_sha": "848ee9a215d02d80be033bfa60881700f2bd914c" - }, - "fastqc": { - "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" - }, - "gatk4/bedtointervallist": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "gatk4/createsequencedictionary": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "gatk4/intervallisttools": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "gatk4/mergebamalignment": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "gatk4/mutect2": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "gatk4/revertsam": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "gatk4/samtofastq": { - "branch": "master", - "git_sha": "169b2b96c1167f89ab07127b7057c1d90a6996c7" - }, - "genmod/annotate": { - "branch": "master", - "git_sha": "94619a3faf6918030ff948f0bce36812a339f4b5" - }, - "genmod/compound": { - "branch": "master", - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" - }, - "genmod/models": { - "branch": "master", - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" - }, - "genmod/score": { - "branch": "master", - "git_sha": "a8e6a88163eb1fe650cf57b5f7c067a4a10bbc99" - }, - "glnexus": { - "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" - }, - "haplocheck": { - "branch": "master", - "git_sha": "f5615c3db63a2bda7a1dbfaeae447cac3161d7b9" - }, - "manta/germline": { - "branch": "master", - "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" - }, - "mosdepth": { - "branch": "master", - "git_sha": "72a31b76eb1b58879e0d91fb1d992e0118693098" - }, - "multiqc": { - "branch": "master", - "git_sha": "4b1d4bf401d4cf65ebc4f604bc8c8e7551109db3" - }, - "picard/addorreplacereadgroups": { - "branch": "master", - "git_sha": "67652c7c4dda138c9e71f093b1aea91f29f87c50" - }, - "picard/collecthsmetrics": { - "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" - }, - "picard/collectmultiplemetrics": { - "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" - }, - "picard/markduplicates": { - "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" - }, - "picard/sortvcf": { - "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c" - }, - "qualimap/bamqc": { - "branch": "master", - "git_sha": "49b18b1639f4f7104187058866a8fab33332bdfe" - }, - "rhocall/annotate": { - "branch": "master", - "git_sha": "17a4e931427b5b144c0d0227a3ea49347ba7457a" - }, - "samtools/faidx": { - "branch": "master", - "git_sha": "3eb99152cedbb7280258858e5df08478a4670696" - }, - "samtools/index": { - "branch": "master", - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" - }, - "samtools/merge": { - "branch": "master", - "git_sha": "720027275ccdc1363bb2a19c6412da148e31d94b" - }, - "samtools/sort": { - "branch": "master", - "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773" - }, - "samtools/stats": { - "branch": "master", - "git_sha": "f4eab7945952dc4934224309701a49913ea05ae6" - }, - "samtools/view": { - "branch": "master", - "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" - }, - "stranger": { - "branch": "master", - "git_sha": "c7329a3a5730872dea512921217993cfa7acd959" - }, - "svdb/merge": { - "branch": "master", - "git_sha": "513b5fcab92243bb6e227cd36ac779796d304f4a" - }, - "svdb/query": { - "branch": "master", - "git_sha": "313d76e00525c8e975dabce0c34973fd53c3f4dd" - }, - "tabix/bgziptabix": { - "branch": "master", - "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" - }, - "tabix/tabix": { - "branch": "master", - "git_sha": "5e7b1ef9a5a2d9258635bcbf70fcf37dacd1b247" - }, - "tiddit/cov": { - "branch": "master", - "git_sha": "40996cdbe1874f9c2ba693fee76d2b4f316f95f2" - }, - "tiddit/sv": { - "branch": "master", - "git_sha": "b689b8ed88a9f89eb2f7c75d3eb0bace77ade109" - }, - "ucsc/wigtobigwig": { - "branch": "master", - "git_sha": "8572bc8865d166edf2d8efeb97e77bfc53d0866b" - }, - "untar": { - "branch": "master", - "git_sha": "b63b9f752dc8e43fc70b0491aad5e0a270ab0e10" - }, - "vcfanno": { - "branch": "master", - "git_sha": "13631304102ca3d99def3578611b79332f6fd175" + "nf-core": { + "bcftools/norm": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bcftools/roh": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bcftools/view": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bwamem2/index": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cat/cat": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/callcnvs": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/histogram": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/importreaddepth": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/partition": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/view": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "custom/dumpsoftwareversions": { + "branch": "master", + "git_sha": "8022c68e7403eecbd8ba9c49496f69f8c49d50f0" + }, + "deepvariant": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "ensemblvep": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "expansionhunter": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "fastqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/bedtointervallist": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/createsequencedictionary": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/intervallisttools": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/mergebamalignment": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/mutect2": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/revertsam": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/samtofastq": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/annotate": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/compound": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/models": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/score": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "glnexus": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "haplocheck": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "manta/germline": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "mosdepth": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "multiqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/addorreplacereadgroups": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/collecthsmetrics": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/collectmultiplemetrics": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/markduplicates": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/sortvcf": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "qualimap/bamqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "rhocall/annotate": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/index": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/merge": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/sort": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/stats": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/view": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "stranger": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "svdb/merge": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "svdb/query": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tabix/bgziptabix": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tabix/tabix": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tiddit/cov": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tiddit/sv": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "ucsc/wigtobigwig": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "untar": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "vcfanno": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + } } } } diff --git a/modules/nf-core/modules/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf similarity index 100% rename from modules/nf-core/modules/bcftools/norm/main.nf rename to modules/nf-core/bcftools/norm/main.nf diff --git a/modules/nf-core/modules/bcftools/norm/meta.yml b/modules/nf-core/bcftools/norm/meta.yml similarity index 100% rename from modules/nf-core/modules/bcftools/norm/meta.yml rename to modules/nf-core/bcftools/norm/meta.yml diff --git a/modules/nf-core/modules/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf similarity index 100% rename from modules/nf-core/modules/bcftools/roh/main.nf rename to modules/nf-core/bcftools/roh/main.nf diff --git a/modules/nf-core/modules/bcftools/roh/meta.yml b/modules/nf-core/bcftools/roh/meta.yml similarity index 100% rename from modules/nf-core/modules/bcftools/roh/meta.yml rename to modules/nf-core/bcftools/roh/meta.yml diff --git a/modules/nf-core/modules/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf similarity index 100% rename from modules/nf-core/modules/bcftools/view/main.nf rename to modules/nf-core/bcftools/view/main.nf diff --git a/modules/nf-core/modules/bcftools/view/meta.yml b/modules/nf-core/bcftools/view/meta.yml similarity index 100% rename from modules/nf-core/modules/bcftools/view/meta.yml rename to modules/nf-core/bcftools/view/meta.yml diff --git a/modules/nf-core/modules/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf similarity index 100% rename from modules/nf-core/modules/bwamem2/index/main.nf rename to modules/nf-core/bwamem2/index/main.nf diff --git a/modules/nf-core/modules/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml similarity index 100% rename from modules/nf-core/modules/bwamem2/index/meta.yml rename to modules/nf-core/bwamem2/index/meta.yml diff --git a/modules/nf-core/modules/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf similarity index 100% rename from modules/nf-core/modules/bwamem2/mem/main.nf rename to modules/nf-core/bwamem2/mem/main.nf diff --git a/modules/nf-core/modules/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml similarity index 100% rename from modules/nf-core/modules/bwamem2/mem/meta.yml rename to modules/nf-core/bwamem2/mem/meta.yml diff --git a/modules/nf-core/modules/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf similarity index 100% rename from modules/nf-core/modules/cat/cat/main.nf rename to modules/nf-core/cat/cat/main.nf diff --git a/modules/nf-core/modules/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml similarity index 100% rename from modules/nf-core/modules/cat/cat/meta.yml rename to modules/nf-core/cat/cat/meta.yml diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/main.nf b/modules/nf-core/cnvpytor/callcnvs/main.nf similarity index 100% rename from modules/nf-core/modules/cnvpytor/callcnvs/main.nf rename to modules/nf-core/cnvpytor/callcnvs/main.nf diff --git a/modules/nf-core/modules/cnvpytor/callcnvs/meta.yml b/modules/nf-core/cnvpytor/callcnvs/meta.yml similarity index 100% rename from modules/nf-core/modules/cnvpytor/callcnvs/meta.yml rename to modules/nf-core/cnvpytor/callcnvs/meta.yml diff --git a/modules/nf-core/modules/cnvpytor/histogram/main.nf b/modules/nf-core/cnvpytor/histogram/main.nf similarity index 100% rename from modules/nf-core/modules/cnvpytor/histogram/main.nf rename to modules/nf-core/cnvpytor/histogram/main.nf diff --git a/modules/nf-core/modules/cnvpytor/histogram/meta.yml b/modules/nf-core/cnvpytor/histogram/meta.yml similarity index 100% rename from modules/nf-core/modules/cnvpytor/histogram/meta.yml rename to modules/nf-core/cnvpytor/histogram/meta.yml diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/main.nf b/modules/nf-core/cnvpytor/importreaddepth/main.nf similarity index 100% rename from modules/nf-core/modules/cnvpytor/importreaddepth/main.nf rename to modules/nf-core/cnvpytor/importreaddepth/main.nf diff --git a/modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml b/modules/nf-core/cnvpytor/importreaddepth/meta.yml similarity index 100% rename from modules/nf-core/modules/cnvpytor/importreaddepth/meta.yml rename to modules/nf-core/cnvpytor/importreaddepth/meta.yml diff --git a/modules/nf-core/modules/cnvpytor/partition/main.nf b/modules/nf-core/cnvpytor/partition/main.nf similarity index 100% rename from modules/nf-core/modules/cnvpytor/partition/main.nf rename to modules/nf-core/cnvpytor/partition/main.nf diff --git a/modules/nf-core/modules/cnvpytor/partition/meta.yml b/modules/nf-core/cnvpytor/partition/meta.yml similarity index 100% rename from modules/nf-core/modules/cnvpytor/partition/meta.yml rename to modules/nf-core/cnvpytor/partition/meta.yml diff --git a/modules/nf-core/modules/cnvpytor/view/main.nf b/modules/nf-core/cnvpytor/view/main.nf similarity index 100% rename from modules/nf-core/modules/cnvpytor/view/main.nf rename to modules/nf-core/cnvpytor/view/main.nf diff --git a/modules/nf-core/modules/cnvpytor/view/meta.yml b/modules/nf-core/cnvpytor/view/meta.yml similarity index 100% rename from modules/nf-core/modules/cnvpytor/view/meta.yml rename to modules/nf-core/cnvpytor/view/meta.yml diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf similarity index 100% rename from modules/nf-core/modules/custom/dumpsoftwareversions/main.nf rename to modules/nf-core/custom/dumpsoftwareversions/main.nf diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml similarity index 100% rename from modules/nf-core/modules/custom/dumpsoftwareversions/meta.yml rename to modules/nf-core/custom/dumpsoftwareversions/meta.yml diff --git a/modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py similarity index 100% rename from modules/nf-core/modules/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py rename to modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py diff --git a/modules/nf-core/modules/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf similarity index 100% rename from modules/nf-core/modules/deepvariant/main.nf rename to modules/nf-core/deepvariant/main.nf diff --git a/modules/nf-core/modules/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml similarity index 100% rename from modules/nf-core/modules/deepvariant/meta.yml rename to modules/nf-core/deepvariant/meta.yml diff --git a/modules/nf-core/modules/ensemblvep/Dockerfile b/modules/nf-core/ensemblvep/Dockerfile similarity index 100% rename from modules/nf-core/modules/ensemblvep/Dockerfile rename to modules/nf-core/ensemblvep/Dockerfile diff --git a/modules/nf-core/modules/ensemblvep/build.sh b/modules/nf-core/ensemblvep/build.sh similarity index 100% rename from modules/nf-core/modules/ensemblvep/build.sh rename to modules/nf-core/ensemblvep/build.sh diff --git a/modules/nf-core/modules/ensemblvep/environment.yml b/modules/nf-core/ensemblvep/environment.yml similarity index 100% rename from modules/nf-core/modules/ensemblvep/environment.yml rename to modules/nf-core/ensemblvep/environment.yml diff --git a/modules/nf-core/modules/ensemblvep/main.nf b/modules/nf-core/ensemblvep/main.nf similarity index 100% rename from modules/nf-core/modules/ensemblvep/main.nf rename to modules/nf-core/ensemblvep/main.nf diff --git a/modules/nf-core/modules/ensemblvep/meta.yml b/modules/nf-core/ensemblvep/meta.yml similarity index 100% rename from modules/nf-core/modules/ensemblvep/meta.yml rename to modules/nf-core/ensemblvep/meta.yml diff --git a/modules/nf-core/modules/expansionhunter/main.nf b/modules/nf-core/expansionhunter/main.nf similarity index 100% rename from modules/nf-core/modules/expansionhunter/main.nf rename to modules/nf-core/expansionhunter/main.nf diff --git a/modules/nf-core/modules/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml similarity index 100% rename from modules/nf-core/modules/expansionhunter/meta.yml rename to modules/nf-core/expansionhunter/meta.yml diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/fastqc/main.nf similarity index 100% rename from modules/nf-core/modules/fastqc/main.nf rename to modules/nf-core/fastqc/main.nf diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml similarity index 100% rename from modules/nf-core/modules/fastqc/meta.yml rename to modules/nf-core/fastqc/meta.yml diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/bedtointervallist/main.nf rename to modules/nf-core/gatk4/bedtointervallist/main.nf diff --git a/modules/nf-core/modules/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/bedtointervallist/meta.yml rename to modules/nf-core/gatk4/bedtointervallist/meta.yml diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/createsequencedictionary/main.nf rename to modules/nf-core/gatk4/createsequencedictionary/main.nf diff --git a/modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/createsequencedictionary/meta.yml rename to modules/nf-core/gatk4/createsequencedictionary/meta.yml diff --git a/modules/nf-core/modules/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/intervallisttools/main.nf rename to modules/nf-core/gatk4/intervallisttools/main.nf diff --git a/modules/nf-core/modules/gatk4/intervallisttools/meta.yml b/modules/nf-core/gatk4/intervallisttools/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/intervallisttools/meta.yml rename to modules/nf-core/gatk4/intervallisttools/meta.yml diff --git a/modules/nf-core/modules/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/mergebamalignment/main.nf rename to modules/nf-core/gatk4/mergebamalignment/main.nf diff --git a/modules/nf-core/modules/gatk4/mergebamalignment/meta.yml b/modules/nf-core/gatk4/mergebamalignment/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/mergebamalignment/meta.yml rename to modules/nf-core/gatk4/mergebamalignment/meta.yml diff --git a/modules/nf-core/modules/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/mutect2/main.nf rename to modules/nf-core/gatk4/mutect2/main.nf diff --git a/modules/nf-core/modules/gatk4/mutect2/meta.yml b/modules/nf-core/gatk4/mutect2/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/mutect2/meta.yml rename to modules/nf-core/gatk4/mutect2/meta.yml diff --git a/modules/nf-core/modules/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/revertsam/main.nf rename to modules/nf-core/gatk4/revertsam/main.nf diff --git a/modules/nf-core/modules/gatk4/revertsam/meta.yml b/modules/nf-core/gatk4/revertsam/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/revertsam/meta.yml rename to modules/nf-core/gatk4/revertsam/meta.yml diff --git a/modules/nf-core/modules/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf similarity index 100% rename from modules/nf-core/modules/gatk4/samtofastq/main.nf rename to modules/nf-core/gatk4/samtofastq/main.nf diff --git a/modules/nf-core/modules/gatk4/samtofastq/meta.yml b/modules/nf-core/gatk4/samtofastq/meta.yml similarity index 100% rename from modules/nf-core/modules/gatk4/samtofastq/meta.yml rename to modules/nf-core/gatk4/samtofastq/meta.yml diff --git a/modules/nf-core/modules/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf similarity index 100% rename from modules/nf-core/modules/genmod/annotate/main.nf rename to modules/nf-core/genmod/annotate/main.nf diff --git a/modules/nf-core/modules/genmod/annotate/meta.yml b/modules/nf-core/genmod/annotate/meta.yml similarity index 100% rename from modules/nf-core/modules/genmod/annotate/meta.yml rename to modules/nf-core/genmod/annotate/meta.yml diff --git a/modules/nf-core/modules/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf similarity index 100% rename from modules/nf-core/modules/genmod/compound/main.nf rename to modules/nf-core/genmod/compound/main.nf diff --git a/modules/nf-core/modules/genmod/compound/meta.yml b/modules/nf-core/genmod/compound/meta.yml similarity index 100% rename from modules/nf-core/modules/genmod/compound/meta.yml rename to modules/nf-core/genmod/compound/meta.yml diff --git a/modules/nf-core/modules/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf similarity index 100% rename from modules/nf-core/modules/genmod/models/main.nf rename to modules/nf-core/genmod/models/main.nf diff --git a/modules/nf-core/modules/genmod/models/meta.yml b/modules/nf-core/genmod/models/meta.yml similarity index 100% rename from modules/nf-core/modules/genmod/models/meta.yml rename to modules/nf-core/genmod/models/meta.yml diff --git a/modules/nf-core/modules/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf similarity index 100% rename from modules/nf-core/modules/genmod/score/main.nf rename to modules/nf-core/genmod/score/main.nf diff --git a/modules/nf-core/modules/genmod/score/meta.yml b/modules/nf-core/genmod/score/meta.yml similarity index 100% rename from modules/nf-core/modules/genmod/score/meta.yml rename to modules/nf-core/genmod/score/meta.yml diff --git a/modules/nf-core/modules/glnexus/main.nf b/modules/nf-core/glnexus/main.nf similarity index 100% rename from modules/nf-core/modules/glnexus/main.nf rename to modules/nf-core/glnexus/main.nf diff --git a/modules/nf-core/modules/glnexus/meta.yml b/modules/nf-core/glnexus/meta.yml similarity index 100% rename from modules/nf-core/modules/glnexus/meta.yml rename to modules/nf-core/glnexus/meta.yml diff --git a/modules/nf-core/modules/haplocheck/main.nf b/modules/nf-core/haplocheck/main.nf similarity index 100% rename from modules/nf-core/modules/haplocheck/main.nf rename to modules/nf-core/haplocheck/main.nf diff --git a/modules/nf-core/modules/haplocheck/meta.yml b/modules/nf-core/haplocheck/meta.yml similarity index 100% rename from modules/nf-core/modules/haplocheck/meta.yml rename to modules/nf-core/haplocheck/meta.yml diff --git a/modules/nf-core/modules/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf similarity index 100% rename from modules/nf-core/modules/manta/germline/main.nf rename to modules/nf-core/manta/germline/main.nf diff --git a/modules/nf-core/modules/manta/germline/meta.yml b/modules/nf-core/manta/germline/meta.yml similarity index 100% rename from modules/nf-core/modules/manta/germline/meta.yml rename to modules/nf-core/manta/germline/meta.yml diff --git a/modules/nf-core/modules/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf similarity index 100% rename from modules/nf-core/modules/mosdepth/main.nf rename to modules/nf-core/mosdepth/main.nf diff --git a/modules/nf-core/modules/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml similarity index 100% rename from modules/nf-core/modules/mosdepth/meta.yml rename to modules/nf-core/mosdepth/meta.yml diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/multiqc/main.nf similarity index 100% rename from modules/nf-core/modules/multiqc/main.nf rename to modules/nf-core/multiqc/main.nf diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml similarity index 100% rename from modules/nf-core/modules/multiqc/meta.yml rename to modules/nf-core/multiqc/meta.yml diff --git a/modules/nf-core/modules/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf similarity index 100% rename from modules/nf-core/modules/picard/addorreplacereadgroups/main.nf rename to modules/nf-core/picard/addorreplacereadgroups/main.nf diff --git a/modules/nf-core/modules/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml similarity index 100% rename from modules/nf-core/modules/picard/addorreplacereadgroups/meta.yml rename to modules/nf-core/picard/addorreplacereadgroups/meta.yml diff --git a/modules/nf-core/modules/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf similarity index 100% rename from modules/nf-core/modules/picard/collecthsmetrics/main.nf rename to modules/nf-core/picard/collecthsmetrics/main.nf diff --git a/modules/nf-core/modules/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml similarity index 100% rename from modules/nf-core/modules/picard/collecthsmetrics/meta.yml rename to modules/nf-core/picard/collecthsmetrics/meta.yml diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf similarity index 100% rename from modules/nf-core/modules/picard/collectmultiplemetrics/main.nf rename to modules/nf-core/picard/collectmultiplemetrics/main.nf diff --git a/modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml similarity index 100% rename from modules/nf-core/modules/picard/collectmultiplemetrics/meta.yml rename to modules/nf-core/picard/collectmultiplemetrics/meta.yml diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf similarity index 100% rename from modules/nf-core/modules/picard/markduplicates/main.nf rename to modules/nf-core/picard/markduplicates/main.nf diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml similarity index 100% rename from modules/nf-core/modules/picard/markduplicates/meta.yml rename to modules/nf-core/picard/markduplicates/meta.yml diff --git a/modules/nf-core/modules/picard/sortvcf/main.nf b/modules/nf-core/picard/sortvcf/main.nf similarity index 100% rename from modules/nf-core/modules/picard/sortvcf/main.nf rename to modules/nf-core/picard/sortvcf/main.nf diff --git a/modules/nf-core/modules/picard/sortvcf/meta.yml b/modules/nf-core/picard/sortvcf/meta.yml similarity index 100% rename from modules/nf-core/modules/picard/sortvcf/meta.yml rename to modules/nf-core/picard/sortvcf/meta.yml diff --git a/modules/nf-core/modules/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf similarity index 100% rename from modules/nf-core/modules/qualimap/bamqc/main.nf rename to modules/nf-core/qualimap/bamqc/main.nf diff --git a/modules/nf-core/modules/qualimap/bamqc/meta.yml b/modules/nf-core/qualimap/bamqc/meta.yml similarity index 100% rename from modules/nf-core/modules/qualimap/bamqc/meta.yml rename to modules/nf-core/qualimap/bamqc/meta.yml diff --git a/modules/nf-core/modules/rhocall/annotate/main.nf b/modules/nf-core/rhocall/annotate/main.nf similarity index 100% rename from modules/nf-core/modules/rhocall/annotate/main.nf rename to modules/nf-core/rhocall/annotate/main.nf diff --git a/modules/nf-core/modules/rhocall/annotate/meta.yml b/modules/nf-core/rhocall/annotate/meta.yml similarity index 100% rename from modules/nf-core/modules/rhocall/annotate/meta.yml rename to modules/nf-core/rhocall/annotate/meta.yml diff --git a/modules/nf-core/modules/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf similarity index 100% rename from modules/nf-core/modules/samtools/faidx/main.nf rename to modules/nf-core/samtools/faidx/main.nf diff --git a/modules/nf-core/modules/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/faidx/meta.yml rename to modules/nf-core/samtools/faidx/meta.yml diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf similarity index 100% rename from modules/nf-core/modules/samtools/index/main.nf rename to modules/nf-core/samtools/index/main.nf diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/index/meta.yml rename to modules/nf-core/samtools/index/meta.yml diff --git a/modules/nf-core/modules/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf similarity index 100% rename from modules/nf-core/modules/samtools/merge/main.nf rename to modules/nf-core/samtools/merge/main.nf diff --git a/modules/nf-core/modules/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/merge/meta.yml rename to modules/nf-core/samtools/merge/meta.yml diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf similarity index 100% rename from modules/nf-core/modules/samtools/sort/main.nf rename to modules/nf-core/samtools/sort/main.nf diff --git a/modules/nf-core/modules/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/sort/meta.yml rename to modules/nf-core/samtools/sort/meta.yml diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf similarity index 100% rename from modules/nf-core/modules/samtools/stats/main.nf rename to modules/nf-core/samtools/stats/main.nf diff --git a/modules/nf-core/modules/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/stats/meta.yml rename to modules/nf-core/samtools/stats/meta.yml diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf similarity index 100% rename from modules/nf-core/modules/samtools/view/main.nf rename to modules/nf-core/samtools/view/main.nf diff --git a/modules/nf-core/modules/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml similarity index 100% rename from modules/nf-core/modules/samtools/view/meta.yml rename to modules/nf-core/samtools/view/meta.yml diff --git a/modules/nf-core/modules/stranger/main.nf b/modules/nf-core/stranger/main.nf similarity index 100% rename from modules/nf-core/modules/stranger/main.nf rename to modules/nf-core/stranger/main.nf diff --git a/modules/nf-core/modules/stranger/meta.yml b/modules/nf-core/stranger/meta.yml similarity index 100% rename from modules/nf-core/modules/stranger/meta.yml rename to modules/nf-core/stranger/meta.yml diff --git a/modules/nf-core/modules/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf similarity index 100% rename from modules/nf-core/modules/svdb/merge/main.nf rename to modules/nf-core/svdb/merge/main.nf diff --git a/modules/nf-core/modules/svdb/merge/meta.yml b/modules/nf-core/svdb/merge/meta.yml similarity index 100% rename from modules/nf-core/modules/svdb/merge/meta.yml rename to modules/nf-core/svdb/merge/meta.yml diff --git a/modules/nf-core/modules/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf similarity index 100% rename from modules/nf-core/modules/svdb/query/main.nf rename to modules/nf-core/svdb/query/main.nf diff --git a/modules/nf-core/modules/svdb/query/meta.yml b/modules/nf-core/svdb/query/meta.yml similarity index 100% rename from modules/nf-core/modules/svdb/query/meta.yml rename to modules/nf-core/svdb/query/meta.yml diff --git a/modules/nf-core/modules/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf similarity index 100% rename from modules/nf-core/modules/tabix/bgziptabix/main.nf rename to modules/nf-core/tabix/bgziptabix/main.nf diff --git a/modules/nf-core/modules/tabix/bgziptabix/meta.yml b/modules/nf-core/tabix/bgziptabix/meta.yml similarity index 100% rename from modules/nf-core/modules/tabix/bgziptabix/meta.yml rename to modules/nf-core/tabix/bgziptabix/meta.yml diff --git a/modules/nf-core/modules/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf similarity index 100% rename from modules/nf-core/modules/tabix/tabix/main.nf rename to modules/nf-core/tabix/tabix/main.nf diff --git a/modules/nf-core/modules/tabix/tabix/meta.yml b/modules/nf-core/tabix/tabix/meta.yml similarity index 100% rename from modules/nf-core/modules/tabix/tabix/meta.yml rename to modules/nf-core/tabix/tabix/meta.yml diff --git a/modules/nf-core/modules/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf similarity index 100% rename from modules/nf-core/modules/tiddit/cov/main.nf rename to modules/nf-core/tiddit/cov/main.nf diff --git a/modules/nf-core/modules/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml similarity index 100% rename from modules/nf-core/modules/tiddit/cov/meta.yml rename to modules/nf-core/tiddit/cov/meta.yml diff --git a/modules/nf-core/modules/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf similarity index 100% rename from modules/nf-core/modules/tiddit/sv/main.nf rename to modules/nf-core/tiddit/sv/main.nf diff --git a/modules/nf-core/modules/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml similarity index 100% rename from modules/nf-core/modules/tiddit/sv/meta.yml rename to modules/nf-core/tiddit/sv/meta.yml diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/main.nf b/modules/nf-core/ucsc/wigtobigwig/main.nf similarity index 100% rename from modules/nf-core/modules/ucsc/wigtobigwig/main.nf rename to modules/nf-core/ucsc/wigtobigwig/main.nf diff --git a/modules/nf-core/modules/ucsc/wigtobigwig/meta.yml b/modules/nf-core/ucsc/wigtobigwig/meta.yml similarity index 100% rename from modules/nf-core/modules/ucsc/wigtobigwig/meta.yml rename to modules/nf-core/ucsc/wigtobigwig/meta.yml diff --git a/modules/nf-core/modules/untar/main.nf b/modules/nf-core/untar/main.nf similarity index 100% rename from modules/nf-core/modules/untar/main.nf rename to modules/nf-core/untar/main.nf diff --git a/modules/nf-core/modules/untar/meta.yml b/modules/nf-core/untar/meta.yml similarity index 100% rename from modules/nf-core/modules/untar/meta.yml rename to modules/nf-core/untar/meta.yml diff --git a/modules/nf-core/modules/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf similarity index 100% rename from modules/nf-core/modules/vcfanno/main.nf rename to modules/nf-core/vcfanno/main.nf diff --git a/modules/nf-core/modules/vcfanno/meta.yml b/modules/nf-core/vcfanno/meta.yml similarity index 100% rename from modules/nf-core/modules/vcfanno/meta.yml rename to modules/nf-core/vcfanno/meta.yml From dbc47743aeaa42220540080ce8f6f89cc97e2937 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Oct 2022 17:17:49 +0200 Subject: [PATCH 0690/1921] 21.10.03 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ec507a1e..7a64a034 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: NXF_VER: - - "21.10.4" + - "21.10.3" - "latest-everything" steps: - name: Check out pipeline code From 873b272995b2d97a8efe020ff350aa61fd4886c2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Oct 2022 17:49:44 +0200 Subject: [PATCH 0691/1921] force update modules --- modules/nf-core/bwamem2/index/main.nf | 2 +- .../custom/dumpsoftwareversions/main.nf | 6 +- .../templates/dumpsoftwareversions.py | 98 +++++++++++-------- modules/nf-core/deepvariant/main.nf | 6 +- modules/nf-core/multiqc/main.nf | 2 +- modules/nf-core/samtools/merge/main.nf | 6 +- modules/nf-core/samtools/merge/meta.yml | 4 + modules/nf-core/samtools/sort/main.nf | 1 + modules/nf-core/samtools/sort/meta.yml | 4 + modules/nf-core/samtools/view/main.nf | 26 +++-- modules/nf-core/samtools/view/meta.yml | 30 +++++- modules/nf-core/ucsc/wigtobigwig/main.nf | 2 +- 12 files changed, 119 insertions(+), 68 deletions(-) mode change 100644 => 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf index 6b63ea59..0b7ad199 100644 --- a/modules/nf-core/bwamem2/index/main.nf +++ b/modules/nf-core/bwamem2/index/main.nf @@ -1,6 +1,6 @@ process BWAMEM2_INDEX { tag "$fasta" - label 'process_high' + label 'process_single' conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 34b50b9f..cebb6e05 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda (params.enable_conda ? 'bioconda::multiqc=1.13a' : null) + conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13a--pyhdfd78af_1' : - 'quay.io/biocontainers/multiqc:1.13a--pyhdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py old mode 100644 new mode 100755 index d1390392..da033408 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -1,11 +1,16 @@ #!/usr/bin/env python + +"""Provide functions to merge multiple versions.yml files.""" + + import yaml import platform from textwrap import dedent def _make_versions_html(versions): + """Generate a tabular HTML output of all versions for MultiQC.""" html = [ dedent( """\\ @@ -44,46 +49,53 @@ def _make_versions_html(versions): return "\\n".join(html) -versions_this_module = {} -versions_this_module["${task.process}"] = { - "python": platform.python_version(), - "yaml": yaml.__version__, -} - -with open("$versions") as f: - versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module - -# aggregate versions by the module name (derived from fully-qualified process name) -versions_by_module = {} -for process, process_versions in versions_by_process.items(): - module = process.split(":")[-1] - try: - assert versions_by_module[module] == process_versions, ( - "We assume that software versions are the same between all modules. " - "If you see this error-message it means you discovered an edge-case " - "and should open an issue in nf-core/tools. " - ) - except KeyError: - versions_by_module[module] = process_versions - -versions_by_module["Workflow"] = { - "Nextflow": "$workflow.nextflow.version", - "$workflow.manifest.name": "$workflow.manifest.version", -} - -versions_mqc = { - "id": "software_versions", - "section_name": "${workflow.manifest.name} Software Versions", - "section_href": "https://github.com/${workflow.manifest.name}", - "plot_type": "html", - "description": "are collected at run time from the software output.", - "data": _make_versions_html(versions_by_module), -} - -with open("software_versions.yml", "w") as f: - yaml.dump(versions_by_module, f, default_flow_style=False) -with open("software_versions_mqc.yml", "w") as f: - yaml.dump(versions_mqc, f, default_flow_style=False) - -with open("versions.yml", "w") as f: - yaml.dump(versions_this_module, f, default_flow_style=False) +def main(): + """Load all version files and generate merged output.""" + versions_this_module = {} + versions_this_module["${task.process}"] = { + "python": platform.python_version(), + "yaml": yaml.__version__, + } + + with open("$versions") as f: + versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module + + # aggregate versions by the module name (derived from fully-qualified process name) + versions_by_module = {} + for process, process_versions in versions_by_process.items(): + module = process.split(":")[-1] + try: + if versions_by_module[module] != process_versions: + raise AssertionError( + "We assume that software versions are the same between all modules. " + "If you see this error-message it means you discovered an edge-case " + "and should open an issue in nf-core/tools. " + ) + except KeyError: + versions_by_module[module] = process_versions + + versions_by_module["Workflow"] = { + "Nextflow": "$workflow.nextflow.version", + "$workflow.manifest.name": "$workflow.manifest.version", + } + + versions_mqc = { + "id": "software_versions", + "section_name": "${workflow.manifest.name} Software Versions", + "section_href": "https://github.com/${workflow.manifest.name}", + "plot_type": "html", + "description": "are collected at run time from the software output.", + "data": _make_versions_html(versions_by_module), + } + + with open("software_versions.yml", "w") as f: + yaml.dump(versions_by_module, f, default_flow_style=False) + with open("software_versions_mqc.yml", "w") as f: + yaml.dump(versions_mqc, f, default_flow_style=False) + + with open("versions.yml", "w") as f: + yaml.dump(versions_this_module, f, default_flow_style=False) + + +if __name__ == "__main__": + main() diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index e2a0bee7..344fdb03 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -4,12 +4,10 @@ process DEEPVARIANT { if (params.enable_conda) { - exit 1, "Conda environments cannot be used when using the DeepVariant tool. Please use docker or singularity containers." + exit 1, "Conda environments cannot be used with DeepVariant at the moment. Please use Docker or Singularity containers." } - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'google/deepvariant:1.3.0' : - 'google/deepvariant:1.3.0' }" + container "google/deepvariant:1.3.0" input: tuple val(meta), path(input), path(index), path(intervals) diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 698461d7..a8159a57 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,5 +1,5 @@ process MULTIQC { - label 'process_medium' + label 'process_single' conda (params.enable_conda ? 'bioconda::multiqc=1.13' : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index d01bbed8..91f14116 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -15,15 +15,17 @@ process SAMTOOLS_MERGE { output: tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + tuple val(meta), path("*.csi") , optional:true, emit: csi path "versions.yml" , emit: versions + when: task.ext.when == null || task.ext.when script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def file_type = input_files[0].getExtension() + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() def reference = fasta ? "--reference ${fasta}" : "" """ samtools \\ @@ -42,7 +44,7 @@ process SAMTOOLS_MERGE { stub: prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" - def file_type = input_files[0].getExtension() + def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() """ touch ${prefix}.${file_type} diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index f6833d0c..5bd84bc5 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -51,6 +51,10 @@ output: type: file description: File containing software versions pattern: "versions.yml" + - csi: + type: file + description: BAM index file (optional) + pattern: "*.csi" authors: - "@drpatelh" - "@yuukiiwa " diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index b4fc1cbe..ab7f1cca 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -12,6 +12,7 @@ process SAMTOOLS_SORT { output: tuple val(meta), path("*.bam"), emit: bam + tuple val(meta), path("*.csi"), emit: csi, optional: true path "versions.yml" , emit: versions when: diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index a820c55a..09289751 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -39,6 +39,10 @@ output: type: file description: File containing software versions pattern: "versions.yml" + - csi: + type: file + description: BAM index file (optional) + pattern: "*.csi" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 59ded5c3..94da5d69 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -10,31 +10,39 @@ process SAMTOOLS_VIEW { 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 - path "versions.yml" , emit: versions + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.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} -C" : "" - def file_type = input.getExtension() + 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 \\ - $input \\ - $args2 \\ - > ${prefix}.${file_type} + -o ${prefix}.${file_type} \\ + $input cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index a8b43ecc..a52e4f8d 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -33,6 +33,10 @@ input: 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 @@ -41,12 +45,29 @@ output: e.g. [ id:'test', single_end:false ] - bam: type: file - description: filtered/converted BAM/SAM file - pattern: "*.{bam,sam}" + description: optional filtered/converted BAM file + pattern: "*.{bam}" - cram: type: file - description: filtered/converted CRAM file - pattern: "*.cram" + 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 @@ -55,3 +76,4 @@ authors: - "@drpatelh" - "@joseespinosa" - "@FriederikeHanssen" + - "@priyanka-surana" diff --git a/modules/nf-core/ucsc/wigtobigwig/main.nf b/modules/nf-core/ucsc/wigtobigwig/main.nf index 4daff1f5..cf76cf0a 100644 --- a/modules/nf-core/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/ucsc/wigtobigwig/main.nf @@ -1,6 +1,6 @@ process UCSC_WIGTOBIGWIG { tag "$meta.id" - label 'process_medium' + label 'process_single' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. conda (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) From 58b442d0dd6ccd18aa7ecec72da1b4c5b328c31d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Oct 2022 21:51:20 +0200 Subject: [PATCH 0692/1921] trigger GitHub actions From 270a10aef6ef16724b56f419ccc50b5d4cfe61f3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Oct 2022 23:41:34 +0200 Subject: [PATCH 0693/1921] fix path in pipeline --- subworkflows/local/align_and_call_MT.nf | 16 ++++++++-------- subworkflows/local/annotate_snvs.nf | 10 +++++----- .../local/annotate_structural_variants.nf | 10 +++++----- subworkflows/local/prepare_MT_alignment.nf | 6 +++--- subworkflows/local/prepare_bed.nf | 10 +++++----- subworkflows/local/prepare_genome.nf | 8 ++++---- subworkflows/local/prepare_references.nf | 4 ++-- subworkflows/local/prepare_vcf.nf | 6 +++--- subworkflows/nf-core/align_bwamem2.nf | 12 ++++++------ subworkflows/nf-core/call_cnv_cnvpytor.nf | 10 +++++----- subworkflows/nf-core/call_repeat_expansions.nf | 4 ++-- subworkflows/nf-core/call_snv_deepvariant.nf | 10 +++++----- subworkflows/nf-core/call_structural_variants.nf | 2 +- subworkflows/nf-core/call_sv_manta.nf | 2 +- subworkflows/nf-core/call_sv_tiddit.nf | 4 ++-- subworkflows/nf-core/genmod.nf | 8 ++++---- subworkflows/nf-core/qc_bam.nf | 12 ++++++------ workflows/raredisease.nf | 6 +++--- 18 files changed, 70 insertions(+), 70 deletions(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index 98c861c1..fe1d849e 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -2,14 +2,14 @@ // Allign and call MT // -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' -include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/gatk4/mutect2/main' workflow ALIGN_AND_CALL_MT { take: diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index c718f61f..f3982bcd 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,11 +2,11 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/modules/vcfanno/main' -include { BCFTOOLS_ROH } from '../../modules/nf-core/modules/bcftools/roh/main' -include { RHOCALL_ANNOTATE } from '../../modules/nf-core/modules/rhocall/annotate/main' -include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/nf-core/modules/ensemblvep/main' -include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' +include { VCFANNO } from '../../modules/nf-core/vcfanno/main' +include { BCFTOOLS_ROH } from '../../modules/nf-core/bcftools/roh/main' +include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhocall/annotate/main' +include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/nf-core/ensemblvep/main' +include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/tabix/tabix/main' workflow ANNOTATE_SNVS { diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 08f33d81..31e7f96e 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,11 +2,11 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY } from '../../modules/nf-core/modules/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/modules/picard/sortvcf/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/modules/bcftools/view/main' -include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/modules/tabix/tabix/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/nf-core/modules/ensemblvep/main' +include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' +include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/tabix/tabix/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/nf-core/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 4625996e..4ef2fdb1 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -2,9 +2,9 @@ // Prepare bam files for MT allignment // -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../modules/nf-core/modules/samtools/view/main' -include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/modules/gatk4/revertsam/main' -include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/modules/gatk4/samtofastq/main' +include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../modules/nf-core/samtools/view/main' +include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/gatk4/revertsam/main' +include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/gatk4/samtofastq/main' workflow PREPARE_MT_ALIGNMENT { take: diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf index 72d37c83..ba2f8333 100644 --- a/subworkflows/local/prepare_bed.nf +++ b/subworkflows/local/prepare_bed.nf @@ -2,11 +2,11 @@ // Prepare reference bed files // -include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/modules/gatk4/bedtointervallist/main' -include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/modules/gatk4/intervallisttools/main' -include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/modules/cat/cat/main' -include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/modules/tabix/tabix/main' -include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/modules/tabix/bgziptabix/main' +include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' +include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/gatk4/intervallisttools/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' +include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' workflow CHECK_BED { take: diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index e44bcaea..8e45d214 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,10 +2,10 @@ // Prepare reference genome files // -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/modules/untar/main' -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' -include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' +include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 288cab2e..29290aee 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -5,8 +5,8 @@ include { CHECK_BED } from './prepare_bed' include { CHECK_VCF } from './prepare_vcf' include { PREPARE_GENOME } from './prepare_genome' -include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/modules/tabix/tabix/main' -include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/modules/tabix/tabix/main' +include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' workflow PREPARE_REFERENCES { diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 8917aaa6..03a31bcf 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -2,9 +2,9 @@ // Prepare reference vcf files // -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../modules/nf-core/modules/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../modules/nf-core/modules/bcftools/norm/main' -include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/modules/tabix/tabix/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/tabix/tabix/main' include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' workflow CHECK_VCF { diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 3d637122..f446ef4e 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -2,12 +2,12 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -include { BWAMEM2_MEM } from '../../modules/nf-core/modules/bwamem2/mem/main' -include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' -include { SAMTOOLS_MERGE } from '../../modules/nf-core/modules/samtools/merge/main' -include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' +include { BWAMEM2_MEM } from '../../modules/nf-core/bwamem2/mem/main' +include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_STATS } from '../../modules/nf-core/samtools/stats/main' +include { SAMTOOLS_MERGE } from '../../modules/nf-core/samtools/merge/main' +include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/picard/markduplicates/main' workflow ALIGN_BWAMEM2 { diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/nf-core/call_cnv_cnvpytor.nf index 6c1705c2..262fa2ea 100644 --- a/subworkflows/nf-core/call_cnv_cnvpytor.nf +++ b/subworkflows/nf-core/call_cnv_cnvpytor.nf @@ -2,11 +2,11 @@ // CNVpytor workflow - Calling CNVs // -include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../modules/nf-core/modules/cnvpytor/importreaddepth/main' -include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/modules/cnvpytor/histogram/main' -include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/modules/cnvpytor/partition/main' -include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/modules/cnvpytor/callcnvs/main' -include { CNVPYTOR_VIEW as VIEW } from '../../modules/nf-core/modules/cnvpytor/view/main' +include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../modules/nf-core/cnvpytor/importreaddepth/main' +include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/cnvpytor/histogram/main' +include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/cnvpytor/partition/main' +include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/cnvpytor/callcnvs/main' +include { CNVPYTOR_VIEW as VIEW } from '../../modules/nf-core/cnvpytor/view/main' workflow CALL_CNV_CNVPYTOR { take: diff --git a/subworkflows/nf-core/call_repeat_expansions.nf b/subworkflows/nf-core/call_repeat_expansions.nf index b43a56d4..4040a2e0 100644 --- a/subworkflows/nf-core/call_repeat_expansions.nf +++ b/subworkflows/nf-core/call_repeat_expansions.nf @@ -2,8 +2,8 @@ // Run ExpansionHunter and Stranger // -include { EXPANSIONHUNTER } from '../../modules/nf-core/modules/expansionhunter/main' -include { STRANGER } from '../../modules/nf-core/modules/stranger/main' +include { EXPANSIONHUNTER } from '../../modules/nf-core/expansionhunter/main' +include { STRANGER } from '../../modules/nf-core/stranger/main' workflow CALL_REPEAT_EXPANSIONS { take: diff --git a/subworkflows/nf-core/call_snv_deepvariant.nf b/subworkflows/nf-core/call_snv_deepvariant.nf index 180cb94d..813dc9a9 100644 --- a/subworkflows/nf-core/call_snv_deepvariant.nf +++ b/subworkflows/nf-core/call_snv_deepvariant.nf @@ -2,11 +2,11 @@ // A variant caller workflow for deepvariant // -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/modules/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/modules/bcftools/norm/main' -include { DEEPVARIANT } from '../../modules/nf-core/modules/deepvariant/main' -include { GLNEXUS } from '../../modules/nf-core/modules/glnexus/main' -include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/modules/tabix/tabix/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/bcftools/norm/main' +include { DEEPVARIANT } from '../../modules/nf-core/deepvariant/main' +include { GLNEXUS } from '../../modules/nf-core/glnexus/main' +include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_SNV_DEEPVARIANT { take: diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index a19a0e80..81d6c68a 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -4,7 +4,7 @@ include { CALL_SV_MANTA } from './call_sv_manta' include { CALL_SV_TIDDIT } from './call_sv_tiddit' -include { SVDB_MERGE } from '../../modules/nf-core/modules/svdb/merge/main' +include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' include { CALL_CNV_CNVPYTOR } from './call_cnv_cnvpytor' workflow CALL_STRUCTURAL_VARIANTS { diff --git a/subworkflows/nf-core/call_sv_manta.nf b/subworkflows/nf-core/call_sv_manta.nf index 4d49447d..a07251db 100644 --- a/subworkflows/nf-core/call_sv_manta.nf +++ b/subworkflows/nf-core/call_sv_manta.nf @@ -2,7 +2,7 @@ // A structural variant caller workflow for manta // -include { MANTA_GERMLINE as MANTA } from '../../modules/nf-core/modules/manta/germline/main' +include { MANTA_GERMLINE as MANTA } from '../../modules/nf-core/manta/germline/main' workflow CALL_SV_MANTA { take: diff --git a/subworkflows/nf-core/call_sv_tiddit.nf b/subworkflows/nf-core/call_sv_tiddit.nf index de89e2d8..f8ed45f7 100644 --- a/subworkflows/nf-core/call_sv_tiddit.nf +++ b/subworkflows/nf-core/call_sv_tiddit.nf @@ -2,9 +2,9 @@ // A structural variant caller workflow for tiddit // -include { TIDDIT_SV } from '../../modules/nf-core/modules/tiddit/sv/main' +include { TIDDIT_SV } from '../../modules/nf-core/tiddit/sv/main' -include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../modules/nf-core/modules/svdb/merge/main' +include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../modules/nf-core/svdb/merge/main' workflow CALL_SV_TIDDIT { take: diff --git a/subworkflows/nf-core/genmod.nf b/subworkflows/nf-core/genmod.nf index c3241396..f7e821c0 100644 --- a/subworkflows/nf-core/genmod.nf +++ b/subworkflows/nf-core/genmod.nf @@ -2,10 +2,10 @@ // A subworkflow to score and rank variants. // -include { GENMOD_ANNOTATE } from '../../modules/nf-core/modules/genmod/annotate/main' -include { GENMOD_MODELS } from '../../modules/nf-core/modules/genmod/models/main' -include { GENMOD_SCORE } from '../../modules/nf-core/modules/genmod/score/main' -include { GENMOD_COMPOUND } from '../../modules/nf-core/modules/genmod/compound/main' +include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' +include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' +include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' +include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' workflow RANK_VARIANTS { diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/nf-core/qc_bam.nf index 24dffafb..e6ad575f 100644 --- a/subworkflows/nf-core/qc_bam.nf +++ b/subworkflows/nf-core/qc_bam.nf @@ -2,12 +2,12 @@ // A quality check subworkflow for processed bams. // -include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/modules/picard/collectmultiplemetrics/main' -include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/modules/picard/collecthsmetrics/main' -include { QUALIMAP_BAMQC } from '../../modules/nf-core/modules/qualimap/bamqc/main' -include { TIDDIT_COV } from '../../modules/nf-core/modules/tiddit/cov/main' -include { MOSDEPTH } from '../../modules/nf-core/modules/mosdepth/main' -include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/modules/ucsc/wigtobigwig/main' +include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/picard/collectmultiplemetrics/main' +include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/picard/collecthsmetrics/main' +include { QUALIMAP_BAMQC } from '../../modules/nf-core/qualimap/bamqc/main' +include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' +include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' workflow QC_BAM { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 87238dac..4483a409 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -87,9 +87,9 @@ include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_co // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/modules/fastqc/main' -include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' // // SUBWORKFLOW: Consists entirely of nf-core/modules From ab6cbdb0097831a5fb08469d714236c34b8ebc7b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Oct 2022 23:48:46 +0200 Subject: [PATCH 0694/1921] fix pipeline error --- subworkflows/local/prepare_MT_alignment.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/prepare_MT_alignment.nf index 4ef2fdb1..d8b03d43 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/prepare_MT_alignment.nf @@ -14,7 +14,7 @@ workflow PREPARE_MT_ALIGNMENT { ch_versions = Channel.empty() // Outputs bam containing only MT - SAMTOOLS_VIEW_MT ( bam, [] ) + SAMTOOLS_VIEW_MT ( bam, [], [] ) ch_versions = ch_versions.mix(SAMTOOLS_VIEW_MT.out.versions.first()) // Removes alignment information From b23431954713e0ecb917f636126acadf01497a78 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 6 Oct 2022 00:09:55 +0200 Subject: [PATCH 0695/1921] dumpsoftwareversions_merge --- .../custom/dumpsoftwareversions/templates/dumpsoftwareversions.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py old mode 100755 new mode 100644 From 214597988d86d9911180afb0f13dcad44db6d7d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Thu, 6 Oct 2022 11:52:17 +0200 Subject: [PATCH 0696/1921] new file: modules.json --- modules.json | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 modules.json diff --git a/modules.json b/modules.json new file mode 100644 index 00000000..976979f4 --- /dev/null +++ b/modules.json @@ -0,0 +1,232 @@ +{ + "name": "nf-core/raredisease", + "homePage": "https://github.com/nf-core/raredisease", + "repos": { + "https://github.com/nf-core/modules.git": { + "modules": { + "nf-core": { + "bcftools/norm": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bcftools/roh": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bcftools/view": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bwamem2/index": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cat/cat": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/callcnvs": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/histogram": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/importreaddepth": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/partition": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "cnvpytor/view": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "custom/dumpsoftwareversions": { + "branch": "master", + "git_sha": "8022c68e7403eecbd8ba9c49496f69f8c49d50f0" + }, + "deepvariant": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "ensemblvep": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "expansionhunter": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "fastqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/bedtointervallist": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/createsequencedictionary": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/intervallisttools": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/mergebamalignment": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/mutect2": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/revertsam": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "gatk4/samtofastq": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/annotate": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/compound": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/models": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "genmod/score": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "glnexus": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "haplocheck": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "manta/germline": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "mosdepth": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "multiqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/addorreplacereadgroups": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/collecthsmetrics": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/collectmultiplemetrics": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/markduplicates": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "picard/sortvcf": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "qualimap/bamqc": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "rhocall/annotate": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/index": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/merge": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/sort": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/stats": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "samtools/view": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "stranger": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "svdb/merge": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "svdb/query": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tabix/bgziptabix": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tabix/tabix": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tiddit/cov": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "tiddit/sv": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "ucsc/wigtobigwig": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "untar": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "vcfanno": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + } + } + } + } + } +} From d4c27dcbe6da9f73deab1c4f1321158dcaf55abc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 8 Oct 2022 01:12:13 +0200 Subject: [PATCH 0697/1921] bwa index --- main.nf | 2 +- modules.json | 4 ++ modules/nf-core/bwa/index/main.nf | 35 ++++++++++++++ modules/nf-core/bwa/index/meta.yml | 32 +++++++++++++ nextflow_schema.json | 17 ++++--- subworkflows/local/align.nf | 7 +-- subworkflows/local/prepare_genome.nf | 48 ++++++++++++------- subworkflows/local/prepare_references.nf | 7 +-- .../nf-core/call_structural_variants.nf | 3 +- subworkflows/nf-core/call_sv_tiddit.nf | 7 +-- workflows/raredisease.nf | 10 ++-- 11 files changed, 132 insertions(+), 40 deletions(-) create mode 100644 modules/nf-core/bwa/index/main.nf create mode 100644 modules/nf-core/bwa/index/meta.yml diff --git a/main.nf b/main.nf index 9ea1f2a0..7e4be075 100644 --- a/main.nf +++ b/main.nf @@ -19,6 +19,7 @@ nextflow.enable.dsl = 2 params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') @@ -34,7 +35,6 @@ params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_p 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.sentieonbwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') 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') diff --git a/modules.json b/modules.json index 976979f4..8b0b6916 100644 --- a/modules.json +++ b/modules.json @@ -17,6 +17,10 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, + "bwa/index": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, "bwamem2/index": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf new file mode 100644 index 00000000..aa75ae5d --- /dev/null +++ b/modules/nf-core/bwa/index/main.nf @@ -0,0 +1,35 @@ +process BWA_INDEX { + tag "$fasta" + label 'process_single' + + conda (params.enable_conda ? "bioconda::bwa=0.7.17" : null) + 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' }" + + input: + path fasta + + output: + path "bwa" , emit: index + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + mkdir bwa + bwa \\ + index \\ + $args \\ + -p bwa/${fasta.baseName} \\ + $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml new file mode 100644 index 00000000..2bbd81d9 --- /dev/null +++ b/modules/nf-core/bwa/index/meta.yml @@ -0,0 +1,32 @@ +name: bwa_index +description: Create BWA index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bwa: + description: | + BWA is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: http://bio-bwa.sourceforge.net/ + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: ["GPL-3.0-or-later"] +input: + - fasta: + type: file + description: Input genome fasta file +output: + - index: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@maxulysse" diff --git a/nextflow_schema.json b/nextflow_schema.json index 6e18bebd..0d423e08 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -86,6 +86,14 @@ "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`." }, + "bwa_index": { + "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", + "hidden": true + }, "bwamem2_index": { "type": "string", "format": "directory-path", @@ -193,15 +201,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 }, - "sentieonbwa_index": { - "type": "string", - "format": "directory-path", - "default": null, - "description": "Directory for pre-built sentieon index.", - "help_text": "If none provided, will be generated automatically from the FASTA reference.", - "fa_icon": "fas fa-folder-open", - "hidden": true - }, "svdb_query_dbs": { "type": "string", "format": "file-path", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 0b1f40be..39c7ed7d 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -11,7 +11,8 @@ workflow ALIGN { reads_input // channel: [ val(meta), reads_input ] fasta // channel: [genome.fasta] fai // channel: [genome.fai] - index // channel: [ /path/to/bwamem2/index/ ] + index_bwa // channel: [ /path/to/bwamem2/index/ ] + index_bwamem2 // channel: [ /path/to/bwamem2/index/ ] known_dbsnp // channel: [ /path/to/known_dbsnp ] known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] @@ -19,12 +20,12 @@ workflow ALIGN { ch_versions = Channel.empty() if( aligner == "bwamem2" ) { - ALIGN_BWAMEM2 ( reads_input, index, fasta, fai ) + ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai ) ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if( aligner == "sentieon" ) { - ALIGN_SENTIEON ( reads_input, fasta, fai, index, known_dbsnp, known_dbsnp_tbi ) + ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi ) ch_marked_bam = ALIGN_SENTIEON.out.marked_bam ch_marked_bai = ALIGN_SENTIEON.out.marked_bai ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 8e45d214..05a01c41 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -3,6 +3,7 @@ // include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' +include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' @@ -12,27 +13,41 @@ include { SENTIEON_BWAINDEX } from '../../modules/local/ workflow PREPARE_GENOME { take: aligner // [mandatory] params.aligner + bwa_index // [mandatory] bwa_index bwamem2_index // [mandatory] bwamem2_index - sentieon_index // [mandatory] sentieon_index fasta // [mandatory] genome.fasta fai // [mandatory] genome.fai variant_catalog // [optional] variant_catalog.json vcfanno_resources // [mandatory] vcfanno resource file main: - ch_fasta = file(fasta) - ch_versions = Channel.empty() + ch_fasta = file(fasta) + ch_versions = Channel.empty() + ch_bwa_index = Channel.empty() + ch_bwamem2_index = Channel.empty() // Fetch aligner index or create from scratch if required if (aligner == "bwamem2") { BWAMEM2_INDEX ( [[], ch_fasta] ) - ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] + ch_bwamem2_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) - } else if (aligner == "sentieon") { - SENTIEON_BWAINDEX ( [[], ch_fasta] ) - ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] - ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + } + + if (!bwa_index) { + if (aligner == "sentieon") { + SENTIEON_BWAINDEX ( [[], ch_fasta] ) + ch_bwa_index = !bwa_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] + ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + } else { + BWA_INDEX ( [[], ch_fasta] ) + ch_bwa_index = BWA_INDEX.out.index + ch_versions = ch_versions.mix(BWA_INDEX.out.versions) + } } else { + ch_bwa_index = [[],file(bwa_index)] + } + + if (aligner != "bwamem2" && aligner != "sentieon" ) { exit 1, 'Please provide a valid aligner!' } @@ -73,12 +88,13 @@ workflow PREPARE_GENOME { emit: - aligner_index = ch_aligner_index // path: bwamem2/index - chrom_sizes = ch_chrom_sizes // path: chrom.sizes - fasta = ch_fasta // path: genome.fasta - fai = ch_fai // path: genome.fasta.fai - sequence_dict = ch_sequence_dict - variant_catalog = ch_variant_catalog // path: variant_catalog.json - vcfanno_resources = ch_vcfanno_resources // channel: [ untar'd files, ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + bwa_index = ch_bwa_index // path: bwamem2/index + bwamem2_index = ch_bwamem2_index // path: bwamem2/index + chrom_sizes = ch_chrom_sizes // path: chrom.sizes + fasta = ch_fasta // path: genome.fasta + fai = ch_fai // path: genome.fasta.fai + sequence_dict = ch_sequence_dict + variant_catalog = ch_variant_catalog // path: variant_catalog.json + vcfanno_resources = ch_vcfanno_resources // channel: [ untar'd files, ] + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 29290aee..7c53e135 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -12,6 +12,7 @@ include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tab workflow PREPARE_REFERENCES { take: aligner // [mandatory] params.aligner + bwa_index bwamem2_index // [mandatory] bwamem2_index fasta // [mandatory] genome.fasta fai // [mandatory] genome.fai @@ -20,7 +21,6 @@ workflow PREPARE_REFERENCES { gnomad_af_tbi known_dbsnp known_dbsnp_tbi - sentieonbwa_index target_bed variant_catalog // [optional] variant_catalog.json vcfanno_resources // [mandatory] vcfanno resource file @@ -30,8 +30,8 @@ workflow PREPARE_REFERENCES { ch_versions = Channel.empty() PREPARE_GENOME ( aligner, + bwa_index, bwamem2_index, - sentieonbwa_index, fasta, fai, variant_catalog, @@ -94,7 +94,8 @@ workflow PREPARE_REFERENCES { } emit: - aligner_index = ch_genome.aligner_index + bwa_index = ch_genome.bwa_index + bwamem2_index = ch_genome.bwamem2_index chrom_sizes = ch_genome.chrom_sizes genome_fasta = ch_genome.fasta genome_fai = ch_genome.fai diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 81d6c68a..6b78d56b 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -12,6 +12,7 @@ workflow CALL_STRUCTURAL_VARIANTS { take: bam // channel: [ val(meta), path(bam) ] bai // channel: [ val(meta), path(bai) ] + bwa_index // channel: [ val(meta), path(bwa_index)] fasta // channel: [ path(genome.fasta) ] fai // channel: [ path(genome.fai) ] case_info // channel: [ val(case_info) ] @@ -30,7 +31,7 @@ workflow CALL_STRUCTURAL_VARIANTS { //tiddit ch_tiddit_bam = bam.join(bai) - CALL_SV_TIDDIT ( ch_tiddit_bam, fasta, fai, case_info ) + CALL_SV_TIDDIT ( ch_tiddit_bam, fasta, bwa_index, case_info ) .vcf .collect{it[1]} .set { tiddit_vcf } diff --git a/subworkflows/nf-core/call_sv_tiddit.nf b/subworkflows/nf-core/call_sv_tiddit.nf index f8ed45f7..f4de6b5b 100644 --- a/subworkflows/nf-core/call_sv_tiddit.nf +++ b/subworkflows/nf-core/call_sv_tiddit.nf @@ -10,11 +10,12 @@ workflow CALL_SV_TIDDIT { take: bam // channel: [ val(meta), path(bam) ] fasta // path(fasta) - fai // path(fai) - case_info // channel: [ case_id ] + index // [ val(meta), path(bwa_index)] + case_info // channel: [ case_id ] main: - TIDDIT_SV ( bam, fasta, fai ) + index_for_tiddit = index.map { meta, ind -> ind } + TIDDIT_SV ( bam, fasta, index_for_tiddit ) ch_versions = TIDDIT_SV.out.versions TIDDIT_SV.out diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4483a409..a1f2047e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -11,6 +11,7 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ + params.bwa_index, params.bwamem2_index, params.fasta, params.fasta_fai, @@ -21,7 +22,6 @@ def checkPathParamList = [ params.reduced_penetrance, params.score_config_snv, params.score_config_sv, - params.sentieonbwa_index, params.svdb_query_dbs, params.vcfanno_resources ] @@ -133,6 +133,7 @@ workflow RAREDISEASE { // STEP 0: PREPARE GENOME REFERENCES AND INDICES. PREPARE_REFERENCES ( params.aligner, + params.bwa_index, params.bwamem2_index, params.fasta, params.fasta_fai, @@ -141,7 +142,6 @@ workflow RAREDISEASE { params.gnomad_af_tbi, params.known_dbsnp, params.known_dbsnp_tbi, - params.sentieonbwa_index, params.target_bed, params.variant_catalog, params.vcfanno_resources @@ -155,7 +155,8 @@ workflow RAREDISEASE { CHECK_INPUT.out.reads, ch_references.genome_fasta, ch_references.genome_fai, - ch_references.aligner_index, + ch_references.bwa_index, + ch_references.bwamem2_index, ch_references.known_dbsnp, ch_references.known_dbsnp_tbi ) @@ -200,6 +201,7 @@ workflow RAREDISEASE { CALL_STRUCTURAL_VARIANTS ( ch_mapped.marked_bam, ch_mapped.marked_bai, + ch_references.bwa_index, ch_references.genome_fasta, ch_references.genome_fai, CHECK_INPUT.out.case_info, @@ -261,7 +263,7 @@ workflow RAREDISEASE { ch_intervals_mt = Channel.fromPath(params.intervals_mt) ANALYSE_MT ( ch_mapped.bam_bai, - ch_references.aligner_index, + ch_references.bwamem2_index, ch_references.genome_fasta, ch_references.sequence_dict, ch_references.genome_fai, From 52d9e74764e96554381a0f31ffbb6730c880605a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Mon, 10 Oct 2022 14:02:30 +0200 Subject: [PATCH 0698/1921] new file: modules/nf-core/picard/liftovervcf/main.nf new file: modules/nf-core/picard/liftovervcf/meta.yml modified: subworkflows/local/align_and_call_MT.nf --- modules/nf-core/picard/liftovervcf/main.nf | 61 +++++++++++++++++++++ modules/nf-core/picard/liftovervcf/meta.yml | 55 +++++++++++++++++++ subworkflows/local/align_and_call_MT.nf | 17 +++--- subworkflows/local/analyse_MT.nf | 3 +- subworkflows/local/prepare_genome.nf | 10 ++-- workflows/raredisease.nf | 27 ++++----- 6 files changed, 140 insertions(+), 33 deletions(-) create mode 100644 modules/nf-core/picard/liftovervcf/main.nf create mode 100644 modules/nf-core/picard/liftovervcf/meta.yml diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf new file mode 100644 index 00000000..334f68b0 --- /dev/null +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -0,0 +1,61 @@ +process PICARD_LIFTOVERVCF { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + + input: + tuple val(meta), path(input_vcf) + path dict + path chain + path fasta + + output: + tuple val(meta), path("*lifted.vcf.gz") , emit: vcf_lifted + tuple val(meta), path("*unlifted.vcf.gz"), emit: vcf_unlifted + 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 avail_mem = 1 + if (!task.memory) { + log.info '[Picard LiftoverVcf] Available memory not known - defaulting to 1GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + LiftoverVcf \\ + $args \\ + --INPUT $input_vcf \\ + --OUTPUT ${prefix}.lifted.vcf.gz \\ + --CHAIN $chain \\ + --REJECT ${prefix}.unlifted.vcf.gz \\ + --REFERENCE_SEQUENCE $fasta + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard LiftoverVcf --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.lifted.vcf.gz + touch ${prefix}.unlifted.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(echo \$(picard LiftoverVcf --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/picard/liftovervcf/meta.yml b/modules/nf-core/picard/liftovervcf/meta.yml new file mode 100644 index 00000000..55f04963 --- /dev/null +++ b/modules/nf-core/picard/liftovervcf/meta.yml @@ -0,0 +1,55 @@ +name: picard_liftovervcf +description: convert between genome builds +keywords: + - liftOver + - picard +tools: + - picard: + description: Move annotations from one assembly to another + homepage: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard + tool_dev_url: https://github.com/broadinstitute/picard + doi: "" + licence: ["MIT"] + +input: + - meta: + type: map + description: Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + - chain: + type: file + description: The liftover chain file + - fasta: + type: file + description: fasta file + pattern: "*.fasta" + - dict: + type: file + description: dictionary for 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" + - vcf_lifted: + type: file + description: VCF file containing successfully lifted variants + pattern: "*.{lifted.vcf.gz}" + - vcf_unlifted: + type: file + description: VCF file containing unsuccessfully lifted variants + pattern: "*.{unlifted.vcf.gz}" + +authors: + - "@lucpen" diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index ab8af39a..f6f9d511 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -2,14 +2,14 @@ // Allign and call MT // -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' -include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/gatk4/mutect2/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' @@ -36,7 +36,6 @@ workflow ALIGN_AND_CALL_MT { GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, fasta, dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) - // Add read group to merged bam file PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 9cfeaeb0..d85b1ec0 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -5,7 +5,7 @@ include { PREPARE_MT_ALIGNMENT } from './prepare_MT_al include { ALIGN_AND_CALL_MT } from './align_and_call_MT' include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' include { PREPARE_GENOME as PREPARE_GENOME_MT } from './prepare_genome' -include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/modules/picard/liftovervcf/main' +include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' workflow ANALYSE_MT { take: @@ -47,7 +47,6 @@ workflow ANALYSE_MT { ch_fai_shift = ch_genome.fai ch_index_shift =ch_genome.aligner_index - ALIGN_AND_CALL_MT_SHIFT ( PREPARE_MT_ALIGNMENT.out.fastq, PREPARE_MT_ALIGNMENT.out.bam, diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 3f0f1890..e44bcaea 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,10 +2,10 @@ // Prepare reference genome files // -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' -include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' -include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/modules/untar/main' +include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' @@ -29,7 +29,7 @@ workflow PREPARE_GENOME { ch_aligner_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } else if (aligner == "sentieon") { - SENTIEON_BWAINDEX ([ [], ch_fasta] ) + SENTIEON_BWAINDEX ( [[], ch_fasta] ) ch_aligner_index = !sentieon_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7f22fcf1..6225dea6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -47,10 +47,8 @@ ch_vep_filters = params.vep_filters ? file(params.vep_filters) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() -ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) +ch_multiqc_config = file("$projectDir/assets/multiqc_config.yml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -91,9 +89,9 @@ include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_co // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' +include { FASTQC } from '../modules/nf-core/modules/fastqc/main' +include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' // // SUBWORKFLOW: Consists entirely of nf-core/modules @@ -329,20 +327,18 @@ 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) - ch_methods_description = Channel.value(methods_description) - ch_multiqc_files = Channel.empty() + ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) + ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) MULTIQC ( ch_multiqc_files.collect(), - ch_multiqc_config.collect().ifEmpty([]), - ch_multiqc_custom_config.collect().ifEmpty([]), - ch_multiqc_logo.collect().ifEmpty([]) + [], + [], + [] ) multiqc_report = MULTIQC.out.report.toList() ch_versions = ch_versions.mix(MULTIQC.out.versions) @@ -359,9 +355,6 @@ workflow.onComplete { NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) } NfcoreTemplate.summary(workflow, params, log) - if (params.hook_url) { - NfcoreTemplate.adaptivecard(workflow, params, summary_params, projectDir, log) - } } /* From 3a328f8c990f82685c02705cde99162be32771ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Mon, 10 Oct 2022 15:02:09 +0200 Subject: [PATCH 0699/1921] deleted: modules/nf-core/modules/picard/liftovervcf/main.nf deleted: modules/nf-core/modules/picard/liftovervcf/meta.yml modified: workflows/raredisease.nf modified: subworkflows/local/align_and_call_MT.nf modified: subworkflows/local/analyse_MT.nf modified: subworkflows/local/prepare_genome.nf --- .../modules/picard/liftovervcf/main.nf | 61 ------------------- .../modules/picard/liftovervcf/meta.yml | 55 ----------------- workflows/raredisease.nf | 6 +- 3 files changed, 3 insertions(+), 119 deletions(-) delete mode 100644 modules/nf-core/modules/picard/liftovervcf/main.nf delete mode 100644 modules/nf-core/modules/picard/liftovervcf/meta.yml diff --git a/modules/nf-core/modules/picard/liftovervcf/main.nf b/modules/nf-core/modules/picard/liftovervcf/main.nf deleted file mode 100644 index 334f68b0..00000000 --- a/modules/nf-core/modules/picard/liftovervcf/main.nf +++ /dev/null @@ -1,61 +0,0 @@ -process PICARD_LIFTOVERVCF { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" - - input: - tuple val(meta), path(input_vcf) - path dict - path chain - path fasta - - output: - tuple val(meta), path("*lifted.vcf.gz") , emit: vcf_lifted - tuple val(meta), path("*unlifted.vcf.gz"), emit: vcf_unlifted - 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 avail_mem = 1 - if (!task.memory) { - log.info '[Picard LiftoverVcf] Available memory not known - defaulting to 1GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.giga - } - """ - picard \\ - -Xmx${avail_mem}g \\ - LiftoverVcf \\ - $args \\ - --INPUT $input_vcf \\ - --OUTPUT ${prefix}.lifted.vcf.gz \\ - --CHAIN $chain \\ - --REJECT ${prefix}.unlifted.vcf.gz \\ - --REFERENCE_SEQUENCE $fasta - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(echo \$(picard LiftoverVcf --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.lifted.vcf.gz - touch ${prefix}.unlifted.vcf.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(echo \$(picard LiftoverVcf --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS - """ -} diff --git a/modules/nf-core/modules/picard/liftovervcf/meta.yml b/modules/nf-core/modules/picard/liftovervcf/meta.yml deleted file mode 100644 index 55f04963..00000000 --- a/modules/nf-core/modules/picard/liftovervcf/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: picard_liftovervcf -description: convert between genome builds -keywords: - - liftOver - - picard -tools: - - picard: - description: Move annotations from one assembly to another - homepage: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard - documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard - tool_dev_url: https://github.com/broadinstitute/picard - doi: "" - licence: ["MIT"] - -input: - - meta: - type: map - description: Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_vcf: - type: file - description: VCF file - pattern: "*.{vcf,vcf.gz}" - - chain: - type: file - description: The liftover chain file - - fasta: - type: file - description: fasta file - pattern: "*.fasta" - - dict: - type: file - description: dictionary for 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" - - vcf_lifted: - type: file - description: VCF file containing successfully lifted variants - pattern: "*.{lifted.vcf.gz}" - - vcf_unlifted: - type: file - description: VCF file containing unsuccessfully lifted variants - pattern: "*.{unlifted.vcf.gz}" - -authors: - - "@lucpen" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6225dea6..c3294aee 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -89,9 +89,9 @@ include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_co // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/modules/fastqc/main' -include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/modules/custom/dumpsoftwareversions/main' +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' // // SUBWORKFLOW: Consists entirely of nf-core/modules From 0f3640e8d35085cc5b98e861179fc7590ec7cb6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Mon, 10 Oct 2022 15:07:56 +0200 Subject: [PATCH 0700/1921] modified: subworkflows/local/prepare_genome.nf --- subworkflows/local/prepare_genome.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index e44bcaea..8e45d214 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,10 +2,10 @@ // Prepare reference genome files // -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/modules/untar/main' -include { BWAMEM2_INDEX } from '../../modules/nf-core/modules/bwamem2/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/modules/samtools/faidx/main' -include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/modules/gatk4/createsequencedictionary/main' +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' +include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' From cb715d57b0bc6f3b3f548ab9c91ecc23d9a3f3d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thankaswamy=20Kosalai=20Subazini=2C=20Labmed=20US=C3=96=20?= =?UTF-8?q?=28sth036=29?= Date: Mon, 10 Oct 2022 15:10:31 +0200 Subject: [PATCH 0701/1921] modified: subworkflows/local/align_and_call_MT.nf --- subworkflows/local/align_and_call_MT.nf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index f6f9d511..ab080276 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -2,14 +2,14 @@ // Allign and call MT // -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/modules/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/modules/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/modules/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/modules/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/modules/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/modules/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/modules/haplocheck/main' -include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/modules/gatk4/mutect2/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/gatk4/mutect2/main' From 38a7cd8c6788e3afd8b0690f0b140aed131f3953 Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Tue, 11 Oct 2022 09:53:54 +0200 Subject: [PATCH 0702/1921] Update workflows/raredisease.nf Co-authored-by: Lucpen --- workflows/raredisease.nf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c3294aee..8323da46 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -47,8 +47,10 @@ ch_vep_filters = params.vep_filters ? file(params.vep_filters) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -ch_multiqc_config = file("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() +ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() +ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From fba9aad8525dda21511e14affca12577b08cced8 Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Tue, 11 Oct 2022 09:54:11 +0200 Subject: [PATCH 0703/1921] Update workflows/raredisease.nf Co-authored-by: Lucpen --- workflows/raredisease.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8323da46..66a99608 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -328,7 +328,8 @@ 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) + ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) From eb064eb2abbd7bc5580675575ffd9bd89077d1b3 Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Tue, 11 Oct 2022 09:54:20 +0200 Subject: [PATCH 0704/1921] Update workflows/raredisease.nf Co-authored-by: Lucpen --- workflows/raredisease.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 66a99608..91fd52e4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -334,6 +334,7 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) From 01852bb8393b54046ad01fb6571953a3578ae5f2 Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Tue, 11 Oct 2022 09:54:31 +0200 Subject: [PATCH 0705/1921] Update workflows/raredisease.nf Co-authored-by: Lucpen --- workflows/raredisease.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 91fd52e4..ee2d025b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -340,9 +340,9 @@ workflow RAREDISEASE { MULTIQC ( ch_multiqc_files.collect(), - [], - [], - [] + ch_multiqc_config.collect().ifEmpty([]), + ch_multiqc_custom_config.collect().ifEmpty([]), + ch_multiqc_logo.collect().ifEmpty([]) ) multiqc_report = MULTIQC.out.report.toList() ch_versions = ch_versions.mix(MULTIQC.out.versions) From 5dd75d650bb586412b51db3216d5442022d25b70 Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Tue, 11 Oct 2022 09:54:53 +0200 Subject: [PATCH 0706/1921] Update conf/modules.config Co-authored-by: Lucpen --- conf/modules.config | 3 --- 1 file changed, 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 2741abb1..52d0992f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -758,9 +758,6 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } - withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { - ext.args = '' - } } From 6b9afea2ae5c430be4a9755fe0fc1b89bf183d5a Mon Sep 17 00:00:00 2001 From: Subazini TK Date: Tue, 11 Oct 2022 09:58:48 +0200 Subject: [PATCH 0707/1921] Update workflows/raredisease.nf Co-authored-by: Lucpen --- workflows/raredisease.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ee2d025b..f9787ffb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -359,6 +359,9 @@ workflow.onComplete { NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) } NfcoreTemplate.summary(workflow, params, log) + if (params.hook_url) { + NfcoreTemplate.adaptivecard(workflow, params, summary_params, projectDir, log) + } } /* From 5ecf89b42eb3a7b9458b0bd24d74693450c84200 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:03:07 +0200 Subject: [PATCH 0708/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f9787ffb..33daf801 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -48,7 +48,7 @@ ch_vep_filters = params.vep_filters ? file(params.vep_filters) */ ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) From 893c084f5a7f68903c46edcd18be6d21409612c8 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:03:13 +0200 Subject: [PATCH 0709/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 33daf801..2db24d5b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -50,7 +50,7 @@ ch_vep_filters = params.vep_filters ? file(params.vep_filters) ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) +ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 0d4289f69c62cac65961007bc62a836c2e8b46e2 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:03:19 +0200 Subject: [PATCH 0710/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2db24d5b..6ec4cddb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -329,7 +329,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) - ch_methods_description = Channel.value(methods_description) + ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) From 5f69855b21ad4aeab4b9ef91bef0d924b3db7598 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:03:24 +0200 Subject: [PATCH 0711/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6ec4cddb..908404c9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -328,7 +328,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) ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) From 41a0d24402a60047d1690287e061fcaeac0a250b Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:03:30 +0200 Subject: [PATCH 0712/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 908404c9..8ce2aa6a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -259,8 +259,8 @@ workflow RAREDISEASE { ch_variant_consequences ) } - - + + // STEP 2.1: ANALYSE MT ch_intervals_mt = Channel.fromPath(params.intervals_mt) ch_fasta_shift=Channel.fromPath(params.fasta_shift) From a2875da2ddf6e410ddc0b0dc88bc39a9bfecc71f Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:05:09 +0200 Subject: [PATCH 0713/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8ce2aa6a..3d4edbfb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -261,7 +261,7 @@ workflow RAREDISEASE { } - // STEP 2.1: ANALYSE MT + // STEP 2.1: ANALYSE MT ch_intervals_mt = Channel.fromPath(params.intervals_mt) ch_fasta_shift=Channel.fromPath(params.fasta_shift) ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) From 25e34dabc30cb26fe6602b3eb6660181298f69f5 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:05:15 +0200 Subject: [PATCH 0714/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3d4edbfb..db63ee31 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -360,8 +360,8 @@ workflow.onComplete { } NfcoreTemplate.summary(workflow, params, log) if (params.hook_url) { - NfcoreTemplate.adaptivecard(workflow, params, summary_params, projectDir, log) - } + NfcoreTemplate.adaptivecard(workflow, params, summary_params, projectDir, log) + } } /* From 75e7fcd4c3e2358e70c8b40093c556be2a399f87 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 11 Oct 2022 10:23:58 +0200 Subject: [PATCH 0715/1921] Update workflows/raredisease.nf --- workflows/raredisease.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index db63ee31..eb1d7751 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -331,8 +331,6 @@ workflow RAREDISEASE { methods_description = WorkflowRaredisease.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description) ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) - ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) From d97342c668292f6524d334df8fba6a2273c3a619 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 11 Oct 2022 16:53:52 +0200 Subject: [PATCH 0716/1921] fix an error in channel assignment --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 05a01c41..a20bc45c 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -36,7 +36,7 @@ workflow PREPARE_GENOME { if (!bwa_index) { if (aligner == "sentieon") { SENTIEON_BWAINDEX ( [[], ch_fasta] ) - ch_bwa_index = !bwa_index ? SENTIEON_BWAINDEX.out.index : [[],file(sentieon_index)] + ch_bwa_index = SENTIEON_BWAINDEX.out.index ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) } else { BWA_INDEX ( [[], ch_fasta] ) From 89df85e3f52ced194b5ad5341a6b124a2388546b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 11 Oct 2022 16:55:42 +0200 Subject: [PATCH 0717/1921] fix conflict with mito subw --- subworkflows/local/analyse_MT.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index d85b1ec0..a946586e 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -45,7 +45,7 @@ workflow ANALYSE_MT { ch_versions = ch_versions.mix(ch_genome.versions) ch_dict_shift = ch_genome.sequence_dict ch_fai_shift = ch_genome.fai - ch_index_shift =ch_genome.aligner_index + ch_index_shift =ch_genome.bwamem2_index ALIGN_AND_CALL_MT_SHIFT ( PREPARE_MT_ALIGNMENT.out.fastq, @@ -78,6 +78,6 @@ workflow ANALYSE_MT { html_shift = ALIGN_AND_CALL_MT_SHIFT.out.html vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } From b6d648a0e4a4c0739df524ed1102667ad4d8f7ea Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 11 Oct 2022 17:08:30 +0200 Subject: [PATCH 0718/1921] add switch --- subworkflows/local/analyse_MT.nf | 2 +- subworkflows/local/prepare_genome.nf | 3 ++- subworkflows/local/prepare_references.nf | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index a946586e..c9126032 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -41,7 +41,7 @@ workflow ANALYSE_MT { // STEP 2.2: MT ALLIGNMENT SHIFT AND VARIANT CALLING ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) - PREPARE_GENOME_MT("bwamem2",[],[],fasta_shift ,[],[],[]).set { ch_genome } + PREPARE_GENOME_MT("bwamem2",[],[],fasta_shift ,[],[],[],false).set { ch_genome } ch_versions = ch_versions.mix(ch_genome.versions) ch_dict_shift = ch_genome.sequence_dict ch_fai_shift = ch_genome.fai diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index a20bc45c..9c2eae80 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -19,6 +19,7 @@ workflow PREPARE_GENOME { fai // [mandatory] genome.fai variant_catalog // [optional] variant_catalog.json vcfanno_resources // [mandatory] vcfanno resource file + bwa_index_switch // boolean val main: ch_fasta = file(fasta) @@ -33,7 +34,7 @@ workflow PREPARE_GENOME { ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) } - if (!bwa_index) { + if ( bwa_index_switch && !bwa_index) { if (aligner == "sentieon") { SENTIEON_BWAINDEX ( [[], ch_fasta] ) ch_bwa_index = SENTIEON_BWAINDEX.out.index diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 7c53e135..5bc820b0 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -35,7 +35,8 @@ workflow PREPARE_REFERENCES { fasta, fai, variant_catalog, - vcfanno_resources + vcfanno_resources, + true ) .set { ch_genome } ch_versions = ch_versions.mix(ch_genome.versions) From 57f1511bf6842a762407fb9f5b45099763da37b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 11 Oct 2022 17:15:29 +0200 Subject: [PATCH 0719/1921] fix ci error --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 9c2eae80..19a9dfcb 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -44,7 +44,7 @@ workflow PREPARE_GENOME { ch_bwa_index = BWA_INDEX.out.index ch_versions = ch_versions.mix(BWA_INDEX.out.versions) } - } else { + } else if (bwa_index_switch) { ch_bwa_index = [[],file(bwa_index)] } From 2338e005defea47315ac857807668f406d9a5070 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 13 Oct 2022 00:15:42 +0200 Subject: [PATCH 0720/1921] fix groovy parse error --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 9f0cce39..cbe1ca80 100644 --- a/conf/test.config +++ b/conf/test.config @@ -39,7 +39,7 @@ params { intervals_mt = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' intervals_mt_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' - shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference//ShiftBack.chain' + shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' genome = 'GRCh38' } From 5896c8c63b55b5a7e6acc5c307697c06df3babfd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 13 Oct 2022 00:18:20 +0200 Subject: [PATCH 0721/1921] fix quotes in configs --- conf/genomes.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 82acb9e6..80a7dd9b 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -15,7 +15,7 @@ params { fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" fasta_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" index_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - shift_chain = "${params.local_genomes}/ShiftBack.chain + shift_chain = "${params.local_genomes}/ShiftBack.chain" bwa = "" bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" @@ -23,7 +23,7 @@ params { gnomad_af = "" gnomad_af_tbi = "" intervals_mt = "" - intervals_mt_shift = "" + intervals_mt_shift = "" known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" @@ -43,10 +43,10 @@ params { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" fasta_shift = "${params.local_genomes}/hg38.chrM.shifted8000.fa" - index_shift = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" + index_shift = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" bwa = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain + shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain" call_interval = "" gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" From 327c2efd4a8fc54f84cbea150ea996e17b6bb0e3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 19 Oct 2022 11:21:48 +0200 Subject: [PATCH 0722/1921] fix test --- conf/genomes.config | 108 ++++++++++++------------ conf/modules.config | 5 +- conf/test.config | 19 ++--- main.nf | 6 +- modules.json | 2 +- modules/nf-core/bwa/index/main.nf | 22 ++++- modules/nf-core/bwa/index/meta.yml | 10 +++ nextflow_schema.json | 30 +++++++ subworkflows/local/align_and_call_MT.nf | 4 +- subworkflows/local/analyse_MT.nf | 17 ++-- workflows/raredisease.nf | 48 +++++------ 11 files changed, 161 insertions(+), 110 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 80a7dd9b..41eb46b9 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,62 +11,62 @@ params { genomes { 'GRCh37' { - fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" - fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" - fasta_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" - index_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - shift_chain = "${params.local_genomes}/ShiftBack.chain" - bwa = "" - bwamem2 = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - call_interval = "" - gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - gnomad_af = "" - gnomad_af_tbi = "" - intervals_mt = "" - intervals_mt_shift = "" - known_dbsnp = "" - known_dbsnp_tbi = "" - ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" - score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" - score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" - select_feature_file = "${params.local_genomes}/hgnc.txt" - svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" - variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" - vep_cache = "${params.local_genomes}/vep_cache" - vep_filters = "${params.local_genomes}/gene_panels.bed" + fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" + fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" + mt_shift_fasta = "${params.local_genomes}/grch37.chrM.shifted8000.fa" + mt_shift_fasta_index = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" + mt_shift_chain = "${params.local_genomes}/ShiftBack.chain" + bwa_index = "" + bwamem2_index = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + call_interval = "" + gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + gnomad_af = "" + gnomad_af_tbi = "" + intervals_mt = "" + intervals_mt_shift = "" + known_dbsnp = "" + known_dbsnp_tbi = "" + ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" + reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" + score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" + score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" + select_feature_file = "${params.local_genomes}/hgnc.txt" + svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" + variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" + vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" + vep_cache = "${params.local_genomes}/vep_cache" + vep_filters = "${params.local_genomes}/gene_panels.bed" } 'GRCh38' { - fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" - fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - fasta_shift = "${params.local_genomes}/hg38.chrM.shifted8000.fa" - index_shift = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - bwa = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" - bwamem2 = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain" - call_interval = "" - gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" - gnomad_af_tbi = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" - intervals_mt = "${params.local_genomes}/non_control_region.chrM.interval_list" - intervals_mt_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" - known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" - known_dbsnp_tbi = "" - ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - reduced_penetrance = "" - score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" - score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" - select_feature_file = "${params.local_genomes}/hgnc.txt" - svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" - variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" - vep_cache = "${params.local_genomes}/vep_cache" - vep_filters = "${params.local_genomes}/gene_panels.bed" + fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" + fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" + mt_shift_fasta = "${params.local_genomes}/hg38.chrM.shifted8000.fa" + mt_shift_fasta_index = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" + bwa_index = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" + bwamem2_index = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + mt_shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain" + call_interval = "" + gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" + gnomad_af_tbi = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" + intervals_mt = "${params.local_genomes}/non_control_region.chrM.interval_list" + intervals_mt_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" + known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" + known_dbsnp_tbi = "" + ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" + reduced_penetrance = "" + score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" + score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" + select_feature_file = "${params.local_genomes}/hgnc.txt" + svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" + variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" + vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" + vep_cache = "${params.local_genomes}/vep_cache" + vep_filters = "${params.local_genomes}/gene_panels.bed" } } } diff --git a/conf/modules.config b/conf/modules.config index 52d0992f..cd54c2f7 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -715,8 +715,6 @@ process { ] } - - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.outdir}/references" }, @@ -732,6 +730,7 @@ process { enabled: false, ] } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } @@ -754,11 +753,9 @@ process { ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } - } diff --git a/conf/test.config b/conf/test.config index cbe1ca80..21b2eeb2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -21,25 +21,24 @@ params { // Input data // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' // Genome references - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' - fasta_shift='https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' + bwa_index = '' + mt_shift_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' // Variant annotation - vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_grch38_small_test.tar.gz' - vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' + vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_grch38_small_test.tar.gz' + vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' - target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' - - intervals_mt = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' + intervals_mt = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' intervals_mt_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' - - shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' + mt_shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' genome = 'GRCh38' } diff --git a/main.nf b/main.nf index fd5c69ea..825e0c52 100644 --- a/main.nf +++ b/main.nf @@ -20,13 +20,17 @@ nextflow.enable.dsl = 2 params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') -params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') +params.mt_shift_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_shift_fasta') +params.mt_shift_fasta_index = WorkflowMain.getGenomeAttribute(params, 'mt_shift_fasta_index') +params.mt_shift_fasta_chain = WorkflowMain.getGenomeAttribute(params, 'mt_shift_fasta_chain') +params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_tbi = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_tbi') params.intervals_mt = WorkflowMain.getGenomeAttribute(params, 'intervals_mt') +params.intervals_mt_shift = WorkflowMain.getGenomeAttribute(params, 'intervals_mt_shift') 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') diff --git a/modules.json b/modules.json index 8b0b6916..89e58170 100644 --- a/modules.json +++ b/modules.json @@ -19,7 +19,7 @@ }, "bwa/index": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "8ddc73f0a37e6be2e852fd828d3effe9734ffa62" }, "bwamem2/index": { "branch": "master", diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index aa75ae5d..4b81aa82 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -8,11 +8,11 @@ process BWA_INDEX { 'quay.io/biocontainers/bwa:0.7.17--hed695b0_7' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "bwa" , emit: index - path "versions.yml", emit: versions + tuple val(meta), path(bwa) , emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -32,4 +32,20 @@ process BWA_INDEX { bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') END_VERSIONS """ + + stub: + """ + mkdir bwa + + touch bwa/genome.amb + touch bwa/genome.ann + touch bwa/genome.bwt + touch bwa/genome.pac + touch bwa/genome.sa + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml index 2bbd81d9..2c6cfcd7 100644 --- a/modules/nf-core/bwa/index/meta.yml +++ b/modules/nf-core/bwa/index/meta.yml @@ -15,10 +15,20 @@ tools: arxiv: arXiv:1303.3997 licence: ["GPL-3.0-or-later"] input: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] - fasta: type: file description: Input genome fasta file output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] - index: type: file description: BWA genome index files diff --git a/nextflow_schema.json b/nextflow_schema.json index 03889e1a..2e63e954 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -130,6 +130,13 @@ "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" }, + "intervals_mt_shift": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-file", + "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", @@ -165,6 +172,29 @@ "description": "Path to sentieon machine learning model file.", "hidden": true }, + "mt_shift_fasta": { + "type": "string", + "format": "file-path", + "mimetype": "text/plain", + "description": "Path to mitochondrial FASTA genome file.", + "fa_icon": "far fa-file-code" + }, + "mt_shift_fasta_index": { + "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_shift_fasta_chain": { + "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", diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index ab080276..3282691f 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -1,5 +1,5 @@ // -// Allign and call MT +// Align and call MT // include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/bwamem2/mem/main' @@ -11,8 +11,6 @@ include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } fr include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/gatk4/mutect2/main' - - workflow ALIGN_AND_CALL_MT { take: fastq // channel: [ val(meta), path('*.fastq.gz') ] diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index c9126032..c9b10bde 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -4,7 +4,7 @@ include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' include { ALIGN_AND_CALL_MT } from './align_and_call_MT' include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' -include { PREPARE_GENOME as PREPARE_GENOME_MT } from './prepare_genome' +include { PREPARE_GENOME as PREPARE_GENOME_SHIFTED_MT } from './prepare_genome' include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' workflow ANALYSE_MT { @@ -39,21 +39,18 @@ workflow ANALYSE_MT { ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) - // STEP 2.2: MT ALLIGNMENT SHIFT AND VARIANT CALLING + // STEP 2.2: MT ALIGNMENT SHIFT AND VARIANT CALLING ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) - PREPARE_GENOME_MT("bwamem2",[],[],fasta_shift ,[],[],[],false).set { ch_genome } - ch_versions = ch_versions.mix(ch_genome.versions) - ch_dict_shift = ch_genome.sequence_dict - ch_fai_shift = ch_genome.fai - ch_index_shift =ch_genome.bwamem2_index + PREPARE_GENOME_SHIFTED_MT("bwamem2",[],[],fasta_shift ,[],[],[],false).set { ch_mt_shifted_genome } + ch_versions = ch_versions.mix(ch_mt_shifted_genome.versions) ALIGN_AND_CALL_MT_SHIFT ( PREPARE_MT_ALIGNMENT.out.fastq, PREPARE_MT_ALIGNMENT.out.bam, - ch_index_shift, + ch_mt_shifted_genome.bwamem2_index, fasta_shift, - ch_dict_shift, - ch_fai_shift, + ch_mt_shifted_genome.sequence_dict, + ch_mt_shifted_genome.fai, ch_intervals_mt_shift ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ce684712..901d9e17 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -14,7 +14,8 @@ def checkPathParamList = [ params.bwa_index, params.bwamem2_index, params.fasta, - params.fasta_shift, + params.mt_shift_fasta, + params.mt_shift_fasta_chain, params.fasta_fai, params.gnomad, params.input, @@ -32,14 +33,18 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] -ch_call_interval = params.call_interval ? file(params.call_interval) : [] -ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] -ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] -ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] +ch_ml_model = params.ml_model ? file(params.ml_model) : [] +ch_call_interval = params.call_interval ? file(params.call_interval) : [] +ch_intervals_mt = params.intervals_mt ? file(params.intervals_mt) : [] +ch_intervals_mt_shift = params.intervals_mt_shift ? file(params.intervals_mt_shift) : [] +ch_mt_shift_fasta = params.mt_shift_fasta ? file(params.mt_shift_fasta) : [] +ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] +ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] +ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] +ch_shift_fasta_chain = params.mt_shift_fasta_chain? file(params.mt_shift_fasta_chain): [] ch_variant_consequences = file("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) -ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] -ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] +ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] +ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -166,7 +171,7 @@ workflow RAREDISEASE { ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - + // STEP 1.5: BAM QUALITY CHECK QC_BAM ( ch_mapped.marked_bam, @@ -178,7 +183,7 @@ workflow RAREDISEASE { ch_references.chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) - + // STEP 1.6: EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, @@ -186,7 +191,7 @@ workflow RAREDISEASE { ch_references.variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) - + // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV ( @@ -201,7 +206,7 @@ workflow RAREDISEASE { CHECK_INPUT.out.case_info ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) - + CALL_STRUCTURAL_VARIANTS ( ch_mapped.marked_bam, ch_mapped.marked_bai, @@ -229,7 +234,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } - + if (params.annotate_sv_switch) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, @@ -262,12 +267,7 @@ workflow RAREDISEASE { ) } - // STEP 2.1: ANALYSE MT - ch_intervals_mt = Channel.fromPath(params.intervals_mt) - ch_fasta_shift=Channel.fromPath(params.fasta_shift) - ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) - ANALYSE_MT ( ch_mapped.bam_bai, ch_references.bwamem2_index, @@ -275,12 +275,12 @@ workflow RAREDISEASE { ch_references.sequence_dict, ch_references.genome_fai, ch_intervals_mt, - params.fasta_shift, - params.intervals_mt_shift, - params.shift_chain + ch_mt_shift_fasta, + ch_intervals_mt_shift, + ch_shift_fasta_chain ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) - + // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) @@ -317,14 +317,14 @@ workflow RAREDISEASE { ch_variant_consequences ) } - + // // MODULE: Pipeline reporting // CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') ) - + // // MODULE: MultiQC // From d416def08eec0dc9905e627e715d85e8c2163168 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 23 Oct 2022 01:54:18 +0200 Subject: [PATCH 0723/1921] test works --- conf/genomes.config | 11 +- conf/modules.config | 104 +++++++-- conf/test.config | 3 +- main.nf | 6 +- modules/local/get_chrom_sizes.nf | 2 +- nextflow.config | 3 - nextflow_schema.json | 11 +- subworkflows/local/annotate_snvs.nf | 2 +- subworkflows/local/prepare_bed.nf | 75 ------- subworkflows/local/prepare_references.nf | 175 ++++++++-------- subworkflows/local/prepare_vcf.nf | 5 +- workflows/raredisease.nf | 256 ++++++++++++----------- 12 files changed, 328 insertions(+), 325 deletions(-) delete mode 100644 subworkflows/local/prepare_bed.nf diff --git a/conf/genomes.config b/conf/genomes.config index 41eb46b9..341f1a63 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -19,9 +19,9 @@ params { bwa_index = "" bwamem2_index = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" - gnomad = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + gnomad_vcf = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" gnomad_af = "" - gnomad_af_tbi = "" + gnomad_af_idx = "" intervals_mt = "" intervals_mt_shift = "" known_dbsnp = "" @@ -38,6 +38,7 @@ params { vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" + vep_cache_version = '105' } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -48,15 +49,16 @@ params { bwamem2_index = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" mt_shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain" call_interval = "" - gnomad = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + gnomad_vcf = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" - gnomad_af_tbi = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" + gnomad_af_idx = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" intervals_mt = "${params.local_genomes}/non_control_region.chrM.interval_list" intervals_mt_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" reduced_penetrance = "" + sequence_dictionary = "" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" select_feature_file = "${params.local_genomes}/hgnc.txt" @@ -67,6 +69,7 @@ params { vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" + vep_cache_version = '105' } } } diff --git a/conf/modules.config b/conf/modules.config index cd54c2f7..fd82f5d2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -58,7 +58,7 @@ process { // process { - withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:BWAMEM2_INDEX' { + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX' { ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, @@ -69,8 +69,8 @@ process { ] } - withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:SENTIEON_BWAINDEX' { - ext.when = {!params.sentieonbwa_index && params.aligner == "sentieon"} + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX' { + ext.when = {!params.bwa_index && params.aligner == "sentieon"} publishDir = [ path: { "${params.outdir}/references" }, mode: 'copy', @@ -79,7 +79,18 @@ process { ] } - withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:SAMTOOLS_FAIDX' { + withName: '.*PREPARE_REFERENCES:BWA_INDEX' { + ext.when = {!params.bwa_index} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference + ] + } + + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX' { + ext.when = {!params.fasta_fai} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -89,25 +100,61 @@ process { ] } - withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:GET_CHROM_SIZES' { + withName: '.*PREPARE_REFERENCES:GATK_SD' { + ext.when = {!params.sequence_dictionary} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*dict" + ] + } + + withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { publishDir = [ enabled: false, ] } - withName: '.*PREPARE_REFERENCES:PREPARE_GENOME:UNTAR_VCFANNO' { + withName: '.*PREPARE_REFERENCES:UNTAR_VCFANNO' { publishDir = [ enabled: false, ] } + withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { + ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*tbi" + ] + } + + withName: '.*PREPARE_REFERENCES:TABIX_GNOMAD_AF' { + ext.when = {params.gnomad_af && !params.gnomad_af_idx} + ext.args = '-s 1 -b 2 -e 2' + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*tbi" + ] + } + withName: '.*PREPARE_REFERENCES:CHECK_VCF:CHECK_INPUT_VCF' { + ext.when = {params.gnomad_vcf} publishDir = [ enabled: false, ] } withName: '.*PREPARE_REFERENCES:CHECK_VCF:SPLIT_MULTIALLELICS_PV' { + ext.when = {params.gnomad_vcf} ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } publishDir = [ @@ -116,6 +163,7 @@ process { } withName: '.*PREPARE_REFERENCES:CHECK_VCF:REMOVE_DUPLICATES_PV' { + ext.when = {params.gnomad_vcf} ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ @@ -126,6 +174,16 @@ process { } withName: '.*PREPARE_REFERENCES:CHECK_VCF:TABIX_PV' { + ext.when = {params.gnomad_vcf} + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*PREPARE_REFERENCES:TABIX_PT' { + ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } publishDir = [ path: { "${params.outdir}/processed_references" }, mode: params.publish_dir_mode, @@ -133,7 +191,8 @@ process { ] } - withName: '.*PREPARE_REFERENCES:CHECK_BED:TABIX_.*' { + withName: '.*PREPARE_REFERENCES:TABIX_PBT' { + ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } publishDir = [ path: { "${params.outdir}/processed_references" }, mode: params.publish_dir_mode, @@ -141,7 +200,8 @@ process { ] } - withName: '.*PREPARE_REFERENCES:CHECK_BED:GATK_BILT' { + withName: '.*PREPARE_REFERENCES:GATK_BILT' { + ext.when = { params.target_bed } ext.prefix = { "${meta.id}_target" } publishDir = [ path: { "${params.outdir}/processed_references" }, @@ -150,14 +210,16 @@ process { ] } - withName: '.*PREPARE_REFERENCES:CHECK_BED:GATK_ILT' { + withName: '.*PREPARE_REFERENCES:GATK_ILT' { + ext.when = { params.target_bed } ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' publishDir = [ enabled: false ] } - withName: '.*PREPARE_REFERENCES:CHECK_BED:CAT_CAT_BAIT' { + withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { + ext.when = { params.target_bed } ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/processed_references" }, @@ -166,14 +228,6 @@ process { ] } - withName: '.*PREPARE_REFERENCES:TABIX_GNOMAD_AF' { - ext.args = '-s 1 -b 2 -e 2' - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } } // @@ -209,6 +263,13 @@ process { ] } + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { + ext.prefix = { "${meta.id}_sorted_md" } + publishDir = [ + enabled: false, + ] + } + withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ @@ -217,6 +278,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + } // @@ -704,7 +766,7 @@ process { // ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT // process { - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:BWAMEM2_INDEX' { + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:BWAMEM2_INDEX' { ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, @@ -715,7 +777,7 @@ process { ] } - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:SAMTOOLS_FAIDX' { + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:SAMTOOLS_FAIDX' { publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -725,7 +787,7 @@ process { ] } - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:PREPARE_GENOME:GET_CHROM_SIZES' { + withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:GET_CHROM_SIZES' { publishDir = [ enabled: false, ] diff --git a/conf/test.config b/conf/test.config index 21b2eeb2..0b162fa2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,6 @@ params { // Genome references fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' - bwa_index = '' mt_shift_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' // Variant catalog file @@ -41,4 +40,6 @@ params { mt_shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' genome = 'GRCh38' + vep_cache_version = '105' } + diff --git a/main.nf b/main.nf index 825e0c52..2056d863 100644 --- a/main.nf +++ b/main.nf @@ -26,9 +26,9 @@ params.mt_shift_fasta_chain = WorkflowMain.getGenomeAttribute(params, 'mt_shift_ params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') -params.gnomad = WorkflowMain.getGenomeAttribute(params, 'gnomad') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') -params.gnomad_af_tbi = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_tbi') +params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') +params.gnomad_vcf = WorkflowMain.getGenomeAttribute(params, 'gnomad_vcf') params.intervals_mt = WorkflowMain.getGenomeAttribute(params, 'intervals_mt') params.intervals_mt_shift = WorkflowMain.getGenomeAttribute(params, 'intervals_mt_shift') params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp') @@ -37,6 +37,7 @@ params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_ind params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') 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') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') @@ -46,6 +47,7 @@ params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filte params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') 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') diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 66919879..d7a2ebf1 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -7,7 +7,7 @@ process GET_CHROM_SIZES { 'quay.io/biocontainers/gnu-wget:1.18--0' }" input: - path fai + tuple val(meta), path(fai) output: path '*.sizes' , emit: sizes diff --git a/nextflow.config b/nextflow.config index 39abcfc1..97ca5bf7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -40,9 +40,6 @@ params { cnvpytor_chr = null cnvpytor_binsizes = '1000' - // Annotation - vep_cache_version = '105' - // MultiQC options multiqc_config = null multiqc_title = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 2e63e954..e7c35a0a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -102,7 +102,7 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "gnomad": { + "gnomad_vcf": { "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", @@ -116,7 +116,7 @@ "description": "Path to the gnomad tab file with allele frequencies.", "help_text": "Path to the gnomad tab file with CHR/START/REF,ALT/AF. Can be generated from the gnomad annotations vcf." }, - "gnomad_af_tbi": { + "gnomad_af_idx": { "type": "string", "format": "path", "fa_icon": "fas fa-file", @@ -216,6 +216,13 @@ "description": "SV rank model config file for genmod.", "hidden": true }, + "sequence_dictionary": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Genome dictionary file", + "hidden": true + }, "vep_filters": { "type": "string", "format": "path", diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index f3982bcd..01742abf 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -24,7 +24,7 @@ workflow ANNOTATE_SNVS { main: ch_versions = Channel.empty() - ch_toml = file(vcfanno_toml) + ch_toml = Channel.fromPath(vcfanno_toml) // // annotate vcfanno diff --git a/subworkflows/local/prepare_bed.nf b/subworkflows/local/prepare_bed.nf deleted file mode 100644 index ba2f8333..00000000 --- a/subworkflows/local/prepare_bed.nf +++ /dev/null @@ -1,75 +0,0 @@ -// -// Prepare reference bed files -// - -include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' -include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/gatk4/intervallisttools/main' -include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' -include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' -include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' - -workflow CHECK_BED { - take: - bed // file: bed file - seq_dictionary // path: sequence_dictionary - - main: - tab_out = Channel.empty() - ch_versions = Channel.empty() - - if (bed) { - bed_file = file(bed) - id = bed.split('/')[-1] - ch_bed = Channel.fromList([[['id':id], bed_file]]) - - if ( bed.endsWith(".gz") && file(bed, checkIfExists:true) ) { - tbi_out = TABIX_PT (ch_bed).tbi - tab_out = ch_bed.join(tbi_out) - ch_versions = ch_versions.mix(TABIX_PT.out.versions) - } else if ( file(bed, checkIfExists:true) ) { - tab_out = TABIX_PBT (ch_bed).gz_tbi - ch_versions = ch_versions.mix(TABIX_PBT.out.versions) - } - - interval_list = GATK_BILT (ch_bed, seq_dictionary).interval_list - ch_versions = ch_versions.mix(GATK_BILT.out.versions) - - GATK_ILT(interval_list) - ch_versions = ch_versions.mix(GATK_ILT.out.versions) - - GATK_ILT.out - .interval_list - .collect{ it[1] } - .set { ch_bait_intervals_split } - - ch_bait_intervals_split - .map { it -> it[0] - .toString() - .split("_split")[0] - .split("/")[-1] + "_bait.intervals_list" - } - .flatten() - .concat(ch_bait_intervals_split) - .toList() - .map { - id, bait -> - return [['id':id], bait] - } - .set { ch_bait_intervals_cat_in } - - CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) - .file_out - .map { - id, file -> - return [file] - } - .set { ch_bait_intervals_cat_out } - - } - - emit: - bed = tab_out - target_intervals = interval_list.collect{it[1]} - bait_intervals = ch_bait_intervals_cat_out - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 5bc820b0..cb54173b 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -2,115 +2,104 @@ // Prepare reference files // -include { CHECK_BED } from './prepare_bed' -include { CHECK_VCF } from './prepare_vcf' -include { PREPARE_GENOME } from './prepare_genome' -include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' -include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' +include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' +include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' +include { CHECK_VCF } from './prepare_vcf' +include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' +include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' +include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/gatk4/intervallisttools/main' +include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' +include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' +include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' workflow PREPARE_REFERENCES { take: - aligner // [mandatory] params.aligner - bwa_index - bwamem2_index // [mandatory] bwamem2_index - fasta // [mandatory] genome.fasta - fai // [mandatory] genome.fai - gnomad - gnomad_af - gnomad_af_tbi + ch_fasta_no_meta // [mandatory] genome.fasta + ch_fasta_meta + fai // [optional ] genome.fai + gnomad_af_tab + gnomad_vcf_in known_dbsnp - known_dbsnp_tbi target_bed - variant_catalog // [optional] variant_catalog.json vcfanno_resources // [mandatory] vcfanno resource file main: - // Prepare genome - ch_versions = Channel.empty() - PREPARE_GENOME ( - aligner, - bwa_index, - bwamem2_index, - fasta, - fai, - variant_catalog, - vcfanno_resources, - true - ) - .set { ch_genome } - ch_versions = ch_versions.mix(ch_genome.versions) + ch_versions = Channel.empty() + ch_tbi = Channel.empty() + ch_bgzip_tbi = Channel.empty() - // Dbsnp vcf - ch_dbsnp_vcf = Channel.empty() - ch_dbsnp_tbi = Channel.empty() - if (!known_dbsnp_tbi && known_dbsnp) { - TABIX_DBSNP([[id:'dbsnp'], file(known_dbsnp)]) - ch_dbsnp_vcf = file(known_dbsnp) - ch_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect {it[1]} - ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) - } else if (known_dbsnp_tbi && known_dbsnp) { - ch_dbsnp_vcf = file(known_dbsnp) - ch_dbsnp_tbi = file(known_dbsnp_tbi) - } + BWA_INDEX(ch_fasta_meta) + BWAMEM2_INDEX(ch_fasta_meta) + SENTIEON_BWAINDEX(ch_fasta_meta) + SAMTOOLS_FAIDX(ch_fasta_meta) + GATK_SD(ch_fasta_no_meta) + GET_CHROM_SIZES( SAMTOOLS_FAIDX.out.fai ) + TABIX_DBSNP(known_dbsnp) + TABIX_GNOMAD_AF(gnomad_af_tab) + CHECK_VCF(gnomad_vcf_in, ch_fasta_no_meta) + TABIX_PT(target_bed).tbi.set { ch_tbi } + TABIX_PBT(target_bed).gz_tbi.set { ch_bgzip_tbi } + GATK_BILT(target_bed, GATK_SD.out.dict).interval_list + GATK_ILT(GATK_BILT.out.interval_list) + GATK_ILT.out.interval_list + .collect{ it[1] } + .map { it -> + meta = it[0].toString().split("_split")[0].split("/")[-1] + "_bait.intervals_list" + return [[id:meta], it] + } + .set { ch_bait_intervals_cat_in } - // Gnomad vcf - ch_gnomad_vcf = Channel.empty() - ch_gnomad_idx = Channel.empty() - if (gnomad) { - CHECK_VCF( - gnomad, - ch_genome.fasta - ) - ch_gnomad_vcf = CHECK_VCF.out.vcf - ch_gnomad_idx = CHECK_VCF.out.idx - ch_versions = ch_versions.mix(CHECK_VCF.out.versions) - } + CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) - // Gnomad tab - ch_gnomad_af = Channel.empty() - if (!gnomad_af_tbi && gnomad_af) { - ch_gnomad_tab = [[id:'gnomad'], file(gnomad_af)] - TABIX_GNOMAD_AF(ch_gnomad_tab) - ch_gnomad_tbi = TABIX_GNOMAD_AF.out.tbi - ch_gnomad_af = ch_gnomad_tab.join(ch_gnomad_tbi).collect{ it -> return [it[1], it[2]]} - ch_versions = ch_versions.mix(CHECK_VCF.out.versions) - } else if (gnomad_af_tbi && gnomad_af) { - ch_gnomad_af = [file(gnomad_af), file(gnomad_af_tbi)] + // Uncompress vcfanno resources if nothing else given + if ( params.vcfanno_resources.endsWith('.tar.gz') ) { + ch_vcfanno_resources = UNTAR_VCFANNO ( [[],params.vcfanno_resources] ).untar + .map { + id, resources -> + return [resources] + } + ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) + } else { + ch_vcfanno_resources = Channel.fromPath(vcfanno_resources) } - // Target bed - ch_target_bed = Channel.empty() - ch_target_intervals = Channel.empty() - ch_bait_intervals = Channel.empty() - if (target_bed) { - CHECK_BED( - target_bed, - ch_genome.sequence_dict - ) - ch_target_bed = CHECK_BED.out.bed - ch_target_intervals = CHECK_BED.out.target_intervals - ch_bait_intervals = CHECK_BED.out.bait_intervals - ch_versions = ch_versions.mix(CHECK_BED.out.versions) - } + // Gather versions + ch_versions = ch_versions.mix(BWA_INDEX.out.versions) + ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) + ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) + ch_versions = ch_versions.mix(GATK_SD.out.versions) + ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) + ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) + ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) + ch_versions = ch_versions.mix(CHECK_VCF.out.versions) + ch_versions = ch_versions.mix(TABIX_PT.out.versions) + ch_versions = ch_versions.mix(TABIX_PBT.out.versions) + ch_versions = ch_versions.mix(GATK_BILT.out.versions) + ch_versions = ch_versions.mix(GATK_ILT.out.versions) emit: - bwa_index = ch_genome.bwa_index - bwamem2_index = ch_genome.bwamem2_index - chrom_sizes = ch_genome.chrom_sizes - genome_fasta = ch_genome.fasta - genome_fai = ch_genome.fai - sequence_dict = ch_genome.sequence_dict - variant_catalog = ch_genome.variant_catalog - vcfanno_resources = ch_genome.vcfanno_resources - known_dbsnp = ch_dbsnp_vcf - known_dbsnp_tbi = ch_dbsnp_tbi - gnomad_vcf = ch_gnomad_vcf - gnomad_idx = ch_gnomad_idx - gnomad_af = ch_gnomad_af - target_bed = ch_target_bed - target_intervals = ch_target_intervals - bait_intervals = ch_bait_intervals + bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() + bwa_index = BWA_INDEX.out.index ?: SENTIEON_BWAINDEX.out.index + bwamem2_index = BWAMEM2_INDEX.out.index + chrom_sizes = GET_CHROM_SIZES.out.sizes + fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] }.collect() + gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi + gnomad_tbi = CHECK_VCF.out.index + gnomad_vcf = CHECK_VCF.out.vcf + known_dbsnp_tbi = TABIX_DBSNP.out.tbi + sequence_dict = GATK_SD.out.dict + target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi) + target_intervals = GATK_BILT.out.interval_list.collect{it[1]} + vcfanno_resources = ch_vcfanno_resources versions = ch_versions + } diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/prepare_vcf.nf index 03a31bcf..97f6a3f3 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/prepare_vcf.nf @@ -9,11 +9,10 @@ include { CHECK_INPUT_VCF } from '../../modules/local/ch workflow CHECK_VCF { take: - vcf // file: vcf file + vcf_file // file: vcf file fasta // path(fasta) main: - vcf_file = file(vcf) ch_versions = Channel.empty() CHECK_INPUT_VCF( vcf_file ) @@ -46,6 +45,6 @@ workflow CHECK_VCF { emit: vcf = vcf_out // path: normalized_vcf - idx = TABIX_PV.out.tbi + index = TABIX_PV.out.tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 901d9e17..1752386f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -13,53 +13,56 @@ WorkflowRaredisease.initialise(params, log) def checkPathParamList = [ params.bwa_index, params.bwamem2_index, + params.call_interval, params.fasta, - params.mt_shift_fasta, - params.mt_shift_fasta_chain, params.fasta_fai, - params.gnomad, + params.gens_gnomad_pos, + params.gens_interval_list, + params.gens_pon, + params.gnomad_af, + params.gnomad_af_idx, + params.gnomad_vcf, params.input, params.intervals_mt, params.intervals_mt_shift, + params.known_dbsnp, + params.known_dbsnp_tbi, + params.known_indels, + params.known_mills, + params.ml_model, + params.mt_shift_fasta, + params.mt_shift_fasta_index, + params.mt_shift_fasta_chain, params.multiqc_config, params.reduced_penetrance, params.score_config_snv, params.score_config_sv, + params.sequence_dictionary, + params.target_bed, params.svdb_query_dbs, - params.vcfanno_resources + params.variant_catalog, + params.vep_filters, + params.vcfanno_resources, + params.vcfanno_toml, + params.vep_cache ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -ch_ml_model = params.ml_model ? file(params.ml_model) : [] -ch_call_interval = params.call_interval ? file(params.call_interval) : [] -ch_intervals_mt = params.intervals_mt ? file(params.intervals_mt) : [] -ch_intervals_mt_shift = params.intervals_mt_shift ? file(params.intervals_mt_shift) : [] -ch_mt_shift_fasta = params.mt_shift_fasta ? file(params.mt_shift_fasta) : [] -ch_reduced_penetrance = params.reduced_penetrance ? file(params.reduced_penetrance) : [] -ch_score_config_snv = params.score_config_snv ? file(params.score_config_snv) : [] -ch_score_config_sv = params.score_config_sv ? file(params.score_config_sv) : [] -ch_shift_fasta_chain = params.mt_shift_fasta_chain? file(params.mt_shift_fasta_chain): [] -ch_variant_consequences = file("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) -ch_vep_cache = params.vep_cache ? file(params.vep_cache) : [] -ch_vep_filters = params.vep_filters ? file(params.vep_filters) : [] - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CONFIG FILES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() -ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) +ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() +ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() +ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT LOCAL MODULES/SUBWORKFLOWS + IMPORT MODULES AND SUBWORKFLOWS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @@ -67,48 +70,42 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil // MODULE: local modules // -include { MAKE_PED } from '../modules/local/create_pedfile' -include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' -include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' +include { MAKE_PED } from '../modules/local/create_pedfile' +include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' +include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' // -// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules +// MODULE: Installed directly from nf-core/modules // -include { CHECK_INPUT } from '../subworkflows/local/check_input' -include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' -include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' -include { GENS } from '../subworkflows/local/gens' -include { ALIGN } from '../subworkflows/local/align' -include { CALL_SNV } from '../subworkflows/local/call_snv' -include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' -include { ANNOTATE_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/annotate_consequence' -include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_consequence' - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT NF-CORE MODULES/SUBWORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' // -// MODULE: Installed directly from nf-core/modules +// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' +include { CHECK_INPUT } from '../subworkflows/local/check_input' +include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' +include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { GENS } from '../subworkflows/local/gens' +include { ALIGN } from '../subworkflows/local/align' +include { CALL_SNV } from '../subworkflows/local/call_snv' +include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' +include { ANNOTATE_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/annotate_consequence' +include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_consequence' // // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/nf-core/genmod' -include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/nf-core/genmod' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/nf-core/genmod' +include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/nf-core/genmod' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -123,51 +120,84 @@ workflow RAREDISEASE { ch_versions = Channel.empty() - // - // SUBWORKFLOW: Read in samplesheet, validate and stage input files - // - CHECK_INPUT ( - ch_input - ) - ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) + // Initialize input channels + if (params.input) { + ch_input = Channel.fromPath(params.input) + CHECK_INPUT (ch_input) + } else { + exit 1, 'Input samplesheet not specified!' + } + // Initialize file channels + 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() : ( exit 1, 'Genome fasta not specified!' ) + ch_genome_fasta_meta = ch_genome_fasta_no_meta.map { it -> [[id:it.baseName], it] } + ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).collect() : Channel.empty() + ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) + ch_intervals_mt = params.intervals_mt ? Channel.fromPath(params.intervals_mt).collect() : Channel.value([]) + ch_intervals_mt_shift = params.intervals_mt_shift ? Channel.fromPath(params.intervals_mt_shift).collect() : Channel.value([]) + ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) + ch_ml_model = params.ml_model ? Channel.fromPath(params.ml_model).collect() : Channel.value([]) + ch_mt_shift_fasta = params.mt_shift_fasta ? Channel.fromPath(params.mt_shift_fasta).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_shift_fasta_chain = params.mt_shift_fasta_chain ? Channel.fromPath(params.mt_shift_fasta_chain).collect() : Channel.value([]) + ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it.baseName], it] } : 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) + ch_vep_cache = 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_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).collect() : Channel.value([]) + + // Generate pedigree file MAKE_PED (CHECK_INPUT.out.samples.toList()) - // STEP 0: QUALITY CHECK. - FASTQC ( - CHECK_INPUT.out.reads - ) + // Input QC + FASTQC (CHECK_INPUT.out.reads) + ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - // STEP 0: PREPARE GENOME REFERENCES AND INDICES. + // Prepare references and indices. PREPARE_REFERENCES ( - params.aligner, - params.bwa_index, - params.bwamem2_index, - params.fasta, + ch_genome_fasta_no_meta, + ch_genome_fasta_meta, params.fasta_fai, - params.gnomad, - params.gnomad_af, - params.gnomad_af_tbi, - params.known_dbsnp, - params.known_dbsnp_tbi, - params.target_bed, - params.variant_catalog, + ch_gnomad_af_tab, + ch_gnomad_vcf_unprocessed, + ch_known_dbsnp, + ch_target_bed_unprocessed, params.vcfanno_resources ) .set { ch_references } - ch_versions = ch_versions.mix(ch_references.versions) + + // Gather built indices or get them from the params + ch_bait_intervals = ch_references.bait_intervals + ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index) : ( ch_references.bwa_index ?: Channel.empty() ) + ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index) : ( ch_references.bwamem2_index ?: Channel.empty() ) + ch_chrom_sizes = ch_references.chrom_sizes + ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} : Channel.empty() + ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai) : ( ch_references.fasta_fai ?: Channel.empty() ) + ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx) : ( ch_references.gnomad_af_idx ?: Channel.empty() ) + ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) + ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi) : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) + ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary) : ( ch_references.sequence_dict ?: Channel.empty() ) + ch_target_bed = ch_references.target_bed + ch_target_intervals = ch_references.target_intervals + ch_vcfanno_resources = ch_references.vcfanno_resources + ch_versions = ch_versions.mix(ch_references.versions) + // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( params.aligner, CHECK_INPUT.out.reads, - ch_references.genome_fasta, - ch_references.genome_fai, - ch_references.bwa_index, - ch_references.bwamem2_index, - ch_references.known_dbsnp, - ch_references.known_dbsnp_tbi + ch_genome_fasta_no_meta, + ch_genome_fai, + ch_bwa_index, + ch_bwamem2_index, + ch_known_dbsnp, + ch_known_dbsnp_tbi ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) @@ -176,19 +206,19 @@ workflow RAREDISEASE { QC_BAM ( ch_mapped.marked_bam, ch_mapped.marked_bai, - ch_references.genome_fasta, - ch_references.genome_fai, - ch_references.bait_intervals, - ch_references.target_intervals, - ch_references.chrom_sizes + ch_genome_fasta_no_meta, + ch_genome_fai, + ch_bait_intervals, + ch_target_intervals, + ch_chrom_sizes ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) // STEP 1.6: EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, - ch_references.genome_fasta, - ch_references.variant_catalog + ch_genome_fasta_no_meta, + ch_variant_catalog ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) @@ -197,10 +227,10 @@ workflow RAREDISEASE { CALL_SNV ( params.variant_caller, ch_mapped.bam_bai, - ch_references.genome_fasta, - ch_references.genome_fai, - ch_references.known_dbsnp, - ch_references.known_dbsnp_tbi, + ch_genome_fasta_no_meta, + ch_genome_fai, + ch_known_dbsnp, + ch_known_dbsnp_tbi, ch_call_interval, ch_ml_model, CHECK_INPUT.out.case_info @@ -210,11 +240,11 @@ workflow RAREDISEASE { CALL_STRUCTURAL_VARIANTS ( ch_mapped.marked_bam, ch_mapped.marked_bai, - ch_references.bwa_index, - ch_references.genome_fasta, - ch_references.genome_fai, + ch_bwa_index, + ch_genome_fasta_no_meta, + ch_genome_fai, CHECK_INPUT.out.case_info, - ch_references.target_bed, + ch_target_bed, params.cnvpytor_binsizes ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) @@ -224,13 +254,13 @@ workflow RAREDISEASE { GENS ( ch_mapped.bam_bai, CALL_SNV.out.vcf, - ch_references.genome_fasta, - ch_references.genome_fai, + ch_genome_fasta_meta, + ch_genome_fai, file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), CHECK_INPUT.out.case_info, - ch_references.sequence_dict + ch_sequence_dictionary ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } @@ -242,8 +272,8 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - ch_references.genome_fasta, - ch_references.sequence_dict + ch_genome_fasta_meta, + ch_sequence_dictionary ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) @@ -267,19 +297,6 @@ workflow RAREDISEASE { ) } - // STEP 2.1: ANALYSE MT - ANALYSE_MT ( - ch_mapped.bam_bai, - ch_references.bwamem2_index, - ch_references.genome_fasta, - ch_references.sequence_dict, - ch_references.genome_fai, - ch_intervals_mt, - ch_mt_shift_fasta, - ch_intervals_mt_shift, - ch_shift_fasta_chain - ) - ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) @@ -287,13 +304,13 @@ workflow RAREDISEASE { if (params.annotate_snv_switch) { ANNOTATE_SNVS ( ch_vcf, - ch_references.vcfanno_resources, + ch_vcfanno_resources, params.vcfanno_toml, params.genome, params.vep_cache_version, ch_vep_cache, - ch_references.genome_fasta, - ch_references.gnomad_af, + ch_genome_fasta_meta, + ch_gnomad_af, CHECK_INPUT.out.samples ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) @@ -346,6 +363,7 @@ workflow RAREDISEASE { ) multiqc_report = MULTIQC.out.report.toList() ch_versions = ch_versions.mix(MULTIQC.out.versions) + } /* From c8d92c5d19ca0d5c6827ef16c97fe36511a3b928 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 23 Oct 2022 23:41:12 +0200 Subject: [PATCH 0724/1921] fix errors in config --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index fd82f5d2..9efff86d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -264,7 +264,7 @@ process { } withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { - ext.prefix = { "${meta.id}_sorted_md" } + ext.prefix = { "${meta.id}_sorted_merged" } publishDir = [ enabled: false, ] @@ -385,7 +385,7 @@ process { } withName: '.*QC_BAM:TIDDIT_COV' { - ext.args = '-z 500 -w -u' + ext.args = '-z 500 -w' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, mode: params.publish_dir_mode, From 34e55ac7cb583e8a2c535cc6c80e5d81b59e7070 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Oct 2022 00:18:17 +0200 Subject: [PATCH 0725/1921] add analyse mt --- workflows/raredisease.nf | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1752386f..6597bea1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -70,40 +70,40 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil // MODULE: local modules // -include { MAKE_PED } from '../modules/local/create_pedfile' include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' +include { MAKE_PED } from '../modules/local/create_pedfile' // // MODULE: Installed directly from nf-core/modules // +include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { CHECK_INPUT } from '../subworkflows/local/check_input' -include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' -include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' -include { GENS } from '../subworkflows/local/gens' include { ALIGN } from '../subworkflows/local/align' -include { CALL_SNV } from '../subworkflows/local/call_snv' include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' include { ANNOTATE_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/annotate_consequence' include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_consequence' +include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { CALL_SNV } from '../subworkflows/local/call_snv' +include { CHECK_INPUT } from '../subworkflows/local/check_input' +include { GENS } from '../subworkflows/local/gens' +include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' // // SUBWORKFLOW: Consists entirely of nf-core/modules // include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' +include { QC_BAM } from '../subworkflows/nf-core/qc_bam' include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/nf-core/genmod' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/nf-core/genmod' @@ -128,7 +128,7 @@ workflow RAREDISEASE { exit 1, 'Input samplesheet not specified!' } - // Initialize file channels + // Initialize all file channels including unprocessed vcf, bed and tab files 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() : ( exit 1, 'Genome fasta not specified!' ) ch_genome_fasta_meta = ch_genome_fasta_no_meta.map { it -> [[id:it.baseName], it] } @@ -297,6 +297,18 @@ workflow RAREDISEASE { ) } + ANALYSE_MT ( + ch_mapped.bam_bai, + ch_bwamem2_index, + ch_genome_fasta_no_meta, + ch_sequence_dictionary, + ch_references.genome_fai, + ch_intervals_mt, + params.fasta_shift, + params.intervals_mt_shift, + params.shift_chain + ) + ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) // STEP 3: VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) From b0226405347a98934b7cbee8a96b514fcaf77f13 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Oct 2022 14:12:51 +0200 Subject: [PATCH 0726/1921] for PR --- conf/modules.config | 6 +++- subworkflows/local/prepare_references.nf | 21 +++--------- workflows/raredisease.nf | 41 ++++++++++++------------ 3 files changed, 30 insertions(+), 38 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9efff86d..bf5d4a5c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -118,8 +118,12 @@ process { } withName: '.*PREPARE_REFERENCES:UNTAR_VCFANNO' { + ext.when = { params.vcfanno_resources && params.vcfanno_resources.endsWith('.tar.gz') } publishDir = [ - enabled: false, + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, ] } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index cb54173b..6c62616e 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -55,20 +55,8 @@ workflow PREPARE_REFERENCES { return [[id:meta], it] } .set { ch_bait_intervals_cat_in } - CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) - - // Uncompress vcfanno resources if nothing else given - if ( params.vcfanno_resources.endsWith('.tar.gz') ) { - ch_vcfanno_resources = UNTAR_VCFANNO ( [[],params.vcfanno_resources] ).untar - .map { - id, resources -> - return [resources] - } - ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) - } else { - ch_vcfanno_resources = Channel.fromPath(vcfanno_resources) - } + UNTAR_VCFANNO ( vcfanno_resources ) // Gather versions ch_versions = ch_versions.mix(BWA_INDEX.out.versions) @@ -84,13 +72,14 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(TABIX_PBT.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) ch_versions = ch_versions.mix(GATK_ILT.out.versions) + ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) emit: - bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() + bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] } bwa_index = BWA_INDEX.out.index ?: SENTIEON_BWAINDEX.out.index bwamem2_index = BWAMEM2_INDEX.out.index chrom_sizes = GET_CHROM_SIZES.out.sizes - fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] }.collect() + fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] } gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi gnomad_tbi = CHECK_VCF.out.index gnomad_vcf = CHECK_VCF.out.vcf @@ -98,7 +87,7 @@ workflow PREPARE_REFERENCES { sequence_dict = GATK_SD.out.dict target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi) target_intervals = GATK_BILT.out.interval_list.collect{it[1]} - vcfanno_resources = ch_vcfanno_resources + vcfanno_resources = UNTAR_VCFANNO.out.untar.map { id, resources -> [resources] } versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6597bea1..6938a631 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -129,26 +129,26 @@ workflow RAREDISEASE { } // Initialize all file channels including unprocessed vcf, bed and tab files - 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() : ( exit 1, 'Genome fasta not specified!' ) + ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval) : Channel.value([]) + ch_genome_fasta_no_meta = params.fasta ? Channel.fromPath(params.fasta) : ( exit 1, 'Genome fasta not specified!' ) ch_genome_fasta_meta = ch_genome_fasta_no_meta.map { it -> [[id:it.baseName], it] } - ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).collect() : Channel.empty() - ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) - ch_intervals_mt = params.intervals_mt ? Channel.fromPath(params.intervals_mt).collect() : Channel.value([]) - ch_intervals_mt_shift = params.intervals_mt_shift ? Channel.fromPath(params.intervals_mt_shift).collect() : Channel.value([]) - ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) - ch_ml_model = params.ml_model ? Channel.fromPath(params.ml_model).collect() : Channel.value([]) - ch_mt_shift_fasta = params.mt_shift_fasta ? Channel.fromPath(params.mt_shift_fasta).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_shift_fasta_chain = params.mt_shift_fasta_chain ? Channel.fromPath(params.mt_shift_fasta_chain).collect() : Channel.value([]) - ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it.baseName], it] } : Channel.value([]) - ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog).collect() : Channel.value([]) + ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf) : Channel.empty() + ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) + ch_intervals_mt = params.intervals_mt ? Channel.fromPath(params.intervals_mt) : Channel.value([]) + ch_intervals_mt_shift = params.intervals_mt_shift ? Channel.fromPath(params.intervals_mt_shift) : Channel.value([]) + ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) + ch_ml_model = params.ml_model ? Channel.fromPath(params.ml_model) : Channel.value([]) + ch_mt_shift_fasta = params.mt_shift_fasta ? Channel.fromPath(params.mt_shift_fasta) : Channel.value([]) + ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance) : Channel.value([]) + ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv) : Channel.value([]) + ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv) : Channel.value([]) + ch_shift_fasta_chain = params.mt_shift_fasta_chain ? Channel.fromPath(params.mt_shift_fasta_chain) : Channel.value([]) + ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) + ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog) : Channel.value([]) ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) - ch_vep_cache = 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_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).collect() : Channel.value([]) + ch_vep_cache = params.vep_cache ? Channel.fromPath(params.vep_cache) : Channel.value([]) + ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters) : Channel.value([]) + ch_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) // Generate pedigree file MAKE_PED (CHECK_INPUT.out.samples.toList()) @@ -167,7 +167,7 @@ workflow RAREDISEASE { ch_gnomad_vcf_unprocessed, ch_known_dbsnp, ch_target_bed_unprocessed, - params.vcfanno_resources + ch_vcfanno_resources_unprocessed ) .set { ch_references } @@ -184,10 +184,9 @@ workflow RAREDISEASE { ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary) : ( ch_references.sequence_dict ?: Channel.empty() ) ch_target_bed = ch_references.target_bed ch_target_intervals = ch_references.target_intervals - ch_vcfanno_resources = ch_references.vcfanno_resources + ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources : Channel.fromPath(params.vcfanno_resources) ch_versions = ch_versions.mix(ch_references.versions) - // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( params.aligner, From a904a370d17f8f5ef8ddd24525870c2ee53310d2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Oct 2022 02:09:38 +0200 Subject: [PATCH 0727/1921] modify MT subworkflow --- conf/genomes.config | 118 +++++++++--------- conf/modules.config | 90 ++++++++----- conf/test.config | 8 +- main.nf | 68 +++++----- nextflow_schema.json | 24 +++- subworkflows/local/analyse_MT.nf | 68 +++++----- ...lignment.nf => convert_mt_bam_to_fastq.nf} | 2 +- subworkflows/local/prepare_genome.nf | 101 --------------- subworkflows/local/prepare_references.nf | 88 +++++++------ workflows/raredisease.nf | 73 ++++++----- 10 files changed, 303 insertions(+), 337 deletions(-) rename subworkflows/local/{prepare_MT_alignment.nf => convert_mt_bam_to_fastq.nf} (97%) delete mode 100644 subworkflows/local/prepare_genome.nf diff --git a/conf/genomes.config b/conf/genomes.config index 341f1a63..95d88578 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -11,65 +11,69 @@ params { genomes { 'GRCh37' { - fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" - fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" - mt_shift_fasta = "${params.local_genomes}/grch37.chrM.shifted8000.fa" - mt_shift_fasta_index = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - mt_shift_chain = "${params.local_genomes}/ShiftBack.chain" - bwa_index = "" - bwamem2_index = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - call_interval = "" - gnomad_vcf = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" - gnomad_af = "" - gnomad_af_idx = "" - intervals_mt = "" - intervals_mt_shift = "" - known_dbsnp = "" - known_dbsnp_tbi = "" - ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" - score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" - score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" - select_feature_file = "${params.local_genomes}/hgnc.txt" - svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" - variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" - vep_cache = "${params.local_genomes}/vep_cache" - vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = '105' + fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" + fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" + bwa_index = "" + bwamem2_index = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + call_interval = "" + gnomad_vcf = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" + gnomad_af = "" + gnomad_af_idx = "" + known_dbsnp = "" + known_dbsnp_tbi = "" + ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" + mt_backchain_shift = "${params.local_genomes}/ShiftBack.chain" + mt_bwamem2_index_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" + mt_fasta_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" + mt_fai_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" + mt_intervals = "" + mt_intervals_shift = "" + mt_sequence_dictionary_shift = "" + reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" + score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" + score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" + sequence_dictionary = "" + select_feature_file = "${params.local_genomes}/hgnc.txt" + svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" + variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" + vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" + vep_cache = "${params.local_genomes}/vep_cache" + vep_filters = "${params.local_genomes}/gene_panels.bed" + vep_cache_version = '105' } 'GRCh38' { - fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" - fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - mt_shift_fasta = "${params.local_genomes}/hg38.chrM.shifted8000.fa" - mt_shift_fasta_index = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - bwa_index = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" - bwamem2_index = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - mt_shift_chain = "${params.local_genomes}/grch38_ShiftBack.chain" - call_interval = "" - gnomad_vcf = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" - gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" - gnomad_af_idx = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" - intervals_mt = "${params.local_genomes}/non_control_region.chrM.interval_list" - intervals_mt_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" - known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" - known_dbsnp_tbi = "" - ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - reduced_penetrance = "" - sequence_dictionary = "" - score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" - score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" - select_feature_file = "${params.local_genomes}/hgnc.txt" - svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" - variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" - vep_cache = "${params.local_genomes}/vep_cache" - vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = '105' + fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" + fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" + bwa_index = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" + bwamem2_index = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" + call_interval = "" + gnomad_vcf = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" + gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" + gnomad_af_idx = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" + known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" + known_dbsnp_tbi = "" + ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" + mt_backchain_shift = "${params.local_genomes}/grch38_ShiftBack.chain" + mt_bwamem2_index_shift = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" + mt_fasta_shift = "${params.local_genomes}/hg38.chrM.shifted8000.fa" + mt_fai_shift = "" + mt_intervals = "${params.local_genomes}/non_control_region.chrM.interval_list" + mt_intervals_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" + reduced_penetrance = "" + sequence_dictionary = "" + score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" + score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" + select_feature_file = "${params.local_genomes}/hgnc.txt" + svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" + target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" + variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" + vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" + vep_cache = "${params.local_genomes}/vep_cache" + vep_filters = "${params.local_genomes}/gene_panels.bed" + vep_cache_version = '105' } } } diff --git a/conf/modules.config b/conf/modules.config index bf5d4a5c..a5d95207 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -69,6 +69,17 @@ process { ] } + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_SHIFT_MT' { + ext.when = {!params.mt_bwamem2_index_shift && params.mt_fasta_shift} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" + ] + } + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX' { ext.when = {!params.bwa_index && params.aligner == "sentieon"} publishDir = [ @@ -100,6 +111,17 @@ process { ] } + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { + ext.when = {!params.mt_fai_shift && params.mt_fasta_shift} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*fai" + ] + } + withName: '.*PREPARE_REFERENCES:GATK_SD' { ext.when = {!params.sequence_dictionary} publishDir = [ @@ -111,6 +133,17 @@ process { ] } + withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { + ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*dict" + ] + } + withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { publishDir = [ enabled: false, @@ -717,20 +750,23 @@ process { // -// ANALYSE_MT:PREPARE_MT_ALIGNMENT +// ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ // process { - withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:SAMTOOLS_VIEW_MT' { + withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:SAMTOOLS_VIEW_MT' { + ext.when = { params.mt_fasta_shift } ext.args = { '-h ' } ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } } - withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:GATK4_REVERTSAM_MT' { + withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { + ext.when = { params.mt_fasta_shift } ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } - withName: '.*ANALYSE_MT:PREPARE_MT_ALIGNMENT:GATK4_SAMTOFASTQ_MT' { + withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { + ext.when = { params.mt_fasta_shift } ext.args = '--VALIDATION_STRINGENCY LENIENT' } } @@ -741,28 +777,34 @@ process { process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals } ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals } ext.args = '--VALIDATION_STRINGENCY LENIENT' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals } ext.args = '--mitochondria-mode TRUE' } } @@ -770,60 +812,44 @@ process { // ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT // process { - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:BWAMEM2_INDEX' { - ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" - ] - } - - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:SAMTOOLS_FAIDX' { - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*fai" - ] - } - - withName: '.*ANALYSE_MT:PREPARE_GENOME_MT:GET_CHROM_SIZES' { - publishDir = [ - enabled: false, - ] - } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } ext.args = '--VALIDATION_STRINGENCY LENIENT' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } ext.args = '--mitochondria-mode TRUE' - } + } } +process { + withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { + ext.when = { params.mt_fasta_shift && params.mt_backchain_shift } + } +} // // SENTIEON_TNSCOPE_MT_CALL diff --git a/conf/test.config b/conf/test.config index 0b162fa2..74259f35 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,7 @@ params { // Genome references fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' - mt_shift_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' + mt_fasta_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' @@ -35,9 +35,9 @@ params { vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' - intervals_mt = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' - intervals_mt_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' - mt_shift_chain = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' + mt_intervals = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' + mt_intervals_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' + mt_backchain_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' genome = 'GRCh38' vep_cache_version = '105' diff --git a/main.nf b/main.nf index 2056d863..c2b9c872 100644 --- a/main.nf +++ b/main.nf @@ -18,39 +18,41 @@ nextflow.enable.dsl = 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') -params.mt_shift_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_shift_fasta') -params.mt_shift_fasta_index = WorkflowMain.getGenomeAttribute(params, 'mt_shift_fasta_index') -params.mt_shift_fasta_chain = WorkflowMain.getGenomeAttribute(params, 'mt_shift_fasta_chain') -params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') -params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') -params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') -params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') -params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') -params.gnomad_vcf = WorkflowMain.getGenomeAttribute(params, 'gnomad_vcf') -params.intervals_mt = WorkflowMain.getGenomeAttribute(params, 'intervals_mt') -params.intervals_mt_shift = WorkflowMain.getGenomeAttribute(params, 'intervals_mt_shift') -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.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') -params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') -params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_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') -params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') -params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') -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.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') +params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') +params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') +params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') +params.gnomad_vcf = WorkflowMain.getGenomeAttribute(params, 'gnomad_vcf') +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_backchain_shift = WorkflowMain.getGenomeAttribute(params, 'mt_backchain_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.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') +params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') +params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_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') +params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') +params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') +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') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/nextflow_schema.json b/nextflow_schema.json index e7c35a0a..9cbd40fe 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -123,14 +123,14 @@ "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" }, - "intervals_mt": { + "mt_intervals": { "type": "string", "format": "path", "fa_icon": "fas fa-file", "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" }, - "intervals_mt_shift": { + "mt_intervals_shift": { "type": "string", "format": "path", "fa_icon": "fas fa-file", @@ -172,14 +172,21 @@ "description": "Path to sentieon machine learning model file.", "hidden": true }, - "mt_shift_fasta": { + "mt_fasta_shift": { "type": "string", "format": "file-path", "mimetype": "text/plain", "description": "Path to mitochondrial FASTA genome file.", "fa_icon": "far fa-file-code" }, - "mt_shift_fasta_index": { + "mt_fai_shift": { + "type": "string", + "format": "file-path", + "mimetype": "text/plain", + "description": "Path to mitochondrial FASTA genome index file.", + "fa_icon": "far fa-file-code" + }, + "mt_bwamem2_index_shift": { "type": "string", "format": "directory-path", "description": "Directory for pre-built bwamem2 index for shifted mitochondrial fasta.", @@ -187,7 +194,7 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "mt_shift_fasta_chain": { + "mt_backchain_shift": { "type": "string", "format": "directory-path", "description": "Chain file describing the alignment between the mitochondrial shifted fasta and typical mitochondrial fasta", @@ -223,6 +230,13 @@ "description": "Genome dictionary file", "hidden": true }, + "mt_sequence_dictionary_shift": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "Shifted mitochondrial genome dictionary file", + "hidden": true + }, "vep_filters": { "type": "string", "format": "path", diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index c9b10bde..425f5f85 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -1,66 +1,62 @@ // // Analyse MT // -include { PREPARE_MT_ALIGNMENT } from './prepare_MT_alignment' +include { CONVERT_MT_BAM_TO_FASTQ } from './convert_mt_bam_to_fastq' include { ALIGN_AND_CALL_MT } from './align_and_call_MT' include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' -include { PREPARE_GENOME as PREPARE_GENOME_SHIFTED_MT } from './prepare_genome' include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' workflow ANALYSE_MT { take: - bam // channel: [ val(meta), file(bam), file(bai) ] - index // channel: [ /path/to/bwamem2/index/ ] - fasta // channel: [ genome.fasta ] - dict // channel: [ genome.dict ] - fai // channel: [ genome.fai ] - intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] - fasta_shift // channel: [ genome.fasta ] - intervals_mt_shift // channel: [ file(control_region_shifted.chrM.interval_list) ] - shift_chain + bam // channel: [ val(meta), file(bam), file(bai) ] + genome_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] + genome_fasta // channel: [ genome.fasta ] + genome_dict // channel: [ genome.dict ] + genome_fai // channel: [ genome.fai ] + mt_intervals // channel: [ file(non_control_region.chrM.interval_list) ] + shift_mt_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] + shift_mt_fasta // channel: [ genome.fasta ] + shift_mt_dict // channel: [ genome.dict ] + shift_mt_fai // channel: [ genome.fai ] + shift_mt_intervals // channel: [ file(control_region_shifted.chrM.interval_list) ] + shift_mt_backchain main: ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT - PREPARE_MT_ALIGNMENT ( bam ) - ch_versions = ch_versions.mix(PREPARE_MT_ALIGNMENT.out.versions)// Outputs bam files + CONVERT_MT_BAM_TO_FASTQ ( bam ) + ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions)// Outputs bam files //STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING - ch_intervals_mt = Channel.fromPath(params.intervals_mt) ALIGN_AND_CALL_MT ( - PREPARE_MT_ALIGNMENT.out.fastq, - PREPARE_MT_ALIGNMENT.out.bam, - index, - fasta, - dict, - fai, - ch_intervals_mt + CONVERT_MT_BAM_TO_FASTQ.out.fastq, + CONVERT_MT_BAM_TO_FASTQ.out.bam, + genome_bwamem2_index, + genome_fasta, + genome_dict, + genome_fai, + mt_intervals ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) - // STEP 2.2: MT ALIGNMENT SHIFT AND VARIANT CALLING - ch_intervals_mt_shift = Channel.fromPath(params.intervals_mt_shift) - PREPARE_GENOME_SHIFTED_MT("bwamem2",[],[],fasta_shift ,[],[],[],false).set { ch_mt_shifted_genome } - ch_versions = ch_versions.mix(ch_mt_shifted_genome.versions) - ALIGN_AND_CALL_MT_SHIFT ( - PREPARE_MT_ALIGNMENT.out.fastq, - PREPARE_MT_ALIGNMENT.out.bam, - ch_mt_shifted_genome.bwamem2_index, - fasta_shift, - ch_mt_shifted_genome.sequence_dict, - ch_mt_shifted_genome.fai, - ch_intervals_mt_shift + CONVERT_MT_BAM_TO_FASTQ.out.fastq, + CONVERT_MT_BAM_TO_FASTQ.out.bam, + shift_mt_bwamem2_index, + shift_mt_fasta, + shift_mt_dict, + shift_mt_fai, + shift_mt_intervals ) ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) // STEP 2.3: PICARD_LIFTOVERVCF PICARD_LIFTOVERVCF ( ALIGN_AND_CALL_MT_SHIFT.out.vcf, - dict, - shift_chain, - fasta) + genome_dict, + shift_mt_backchain, + genome_fasta) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) diff --git a/subworkflows/local/prepare_MT_alignment.nf b/subworkflows/local/convert_mt_bam_to_fastq.nf similarity index 97% rename from subworkflows/local/prepare_MT_alignment.nf rename to subworkflows/local/convert_mt_bam_to_fastq.nf index d8b03d43..b126a310 100644 --- a/subworkflows/local/prepare_MT_alignment.nf +++ b/subworkflows/local/convert_mt_bam_to_fastq.nf @@ -6,7 +6,7 @@ include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../modules/nf-core/ include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/gatk4/revertsam/main' include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/gatk4/samtofastq/main' -workflow PREPARE_MT_ALIGNMENT { +workflow CONVERT_MT_BAM_TO_FASTQ { take: bam // channel: [ val(meta), file(bam), file(bai) ] diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf deleted file mode 100644 index 19a9dfcb..00000000 --- a/subworkflows/local/prepare_genome.nf +++ /dev/null @@ -1,101 +0,0 @@ -// -// Prepare reference genome files -// - -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' -include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' -include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' -include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' -include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' -include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' - -workflow PREPARE_GENOME { - take: - aligner // [mandatory] params.aligner - bwa_index // [mandatory] bwa_index - bwamem2_index // [mandatory] bwamem2_index - fasta // [mandatory] genome.fasta - fai // [mandatory] genome.fai - variant_catalog // [optional] variant_catalog.json - vcfanno_resources // [mandatory] vcfanno resource file - bwa_index_switch // boolean val - - main: - ch_fasta = file(fasta) - ch_versions = Channel.empty() - ch_bwa_index = Channel.empty() - ch_bwamem2_index = Channel.empty() - - // Fetch aligner index or create from scratch if required - if (aligner == "bwamem2") { - BWAMEM2_INDEX ( [[], ch_fasta] ) - ch_bwamem2_index = !bwamem2_index ? BWAMEM2_INDEX.out.index : [[],file(bwamem2_index)] - ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) - } - - if ( bwa_index_switch && !bwa_index) { - if (aligner == "sentieon") { - SENTIEON_BWAINDEX ( [[], ch_fasta] ) - ch_bwa_index = SENTIEON_BWAINDEX.out.index - ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) - } else { - BWA_INDEX ( [[], ch_fasta] ) - ch_bwa_index = BWA_INDEX.out.index - ch_versions = ch_versions.mix(BWA_INDEX.out.versions) - } - } else if (bwa_index_switch) { - ch_bwa_index = [[],file(bwa_index)] - } - - if (aligner != "bwamem2" && aligner != "sentieon" ) { - exit 1, 'Please provide a valid aligner!' - } - - if ( fai ) { - ch_fai = file(fai) - } else { - ch_fai = SAMTOOLS_FAIDX ( [[], ch_fasta] ) - .fai - .collect{it[1]} - ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) - } - - // Uncompress vcfanno resources if nothing else given - if ( params.vcfanno_resources.endsWith('.tar.gz') ) { - ch_vcfanno_resources = UNTAR_VCFANNO ( [[],params.vcfanno_resources] ).untar - .map { - id, resources -> - return [resources] - } - ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) - } else { - ch_vcfanno_resources = file(vcfanno_resources) - } - - if ( variant_catalog && file(variant_catalog, checkIfExists:true) ) { - ch_variant_catalog = file(variant_catalog) - } else { - if ( params.genome == 'GRCh38' ) { - ch_variant_catalog = file("https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/reference/variant_catalog_grch38.json") - } else { - ch_variant_catalog = file("https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/reference/variant_catalog_grch37.json") - } - } - - ch_sequence_dict = GATK_SD ( ch_fasta ).dict - ch_chrom_sizes = GET_CHROM_SIZES ( ch_fai ).sizes - ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) - - - emit: - bwa_index = ch_bwa_index // path: bwamem2/index - bwamem2_index = ch_bwamem2_index // path: bwamem2/index - chrom_sizes = ch_chrom_sizes // path: chrom.sizes - fasta = ch_fasta // path: genome.fasta - fai = ch_fai // path: genome.fasta.fai - sequence_dict = ch_sequence_dict - variant_catalog = ch_variant_catalog // path: variant_catalog.json - vcfanno_resources = ch_vcfanno_resources // channel: [ untar'd files, ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 6c62616e..b13bcffa 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -2,28 +2,33 @@ // Prepare reference files // -include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' -include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' -include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' -include { CHECK_VCF } from './prepare_vcf' -include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' -include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' -include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/gatk4/intervallisttools/main' -include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' -include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' -include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' -include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' -include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' -include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' -include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' +include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' +include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' +include { BWAMEM2_INDEX as BWAMEM2_INDEX_SHIFT_MT } from '../../modules/nf-core/bwamem2/index/main' +include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' +include { CHECK_VCF } from './prepare_vcf' +include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' +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 { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' +include { SAMTOOLS_FAIDX } from '../../modules/nf-core/samtools/faidx/main' +include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_SHIFT_MT } from '../../modules/nf-core/samtools/faidx/main' +include { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' +include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' +include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' workflow PREPARE_REFERENCES { take: - ch_fasta_no_meta // [mandatory] genome.fasta - ch_fasta_meta + fasta_no_meta // [mandatory] genome.fasta + fasta_meta fai // [optional ] genome.fai + mt_fasta_shift_no_meta + mt_fasta_shift_meta gnomad_af_tab gnomad_vcf_in known_dbsnp @@ -35,15 +40,18 @@ workflow PREPARE_REFERENCES { ch_tbi = Channel.empty() ch_bgzip_tbi = Channel.empty() - BWA_INDEX(ch_fasta_meta) - BWAMEM2_INDEX(ch_fasta_meta) - SENTIEON_BWAINDEX(ch_fasta_meta) - SAMTOOLS_FAIDX(ch_fasta_meta) - GATK_SD(ch_fasta_no_meta) + BWA_INDEX(fasta_meta) + BWAMEM2_INDEX(fasta_meta) + BWAMEM2_INDEX_SHIFT_MT(mt_fasta_shift_meta) + SENTIEON_BWAINDEX(fasta_meta) + SAMTOOLS_FAIDX(fasta_meta) + SAMTOOLS_FAIDX_SHIFT_MT(mt_fasta_shift_meta) + GATK_SD(fasta_no_meta) + GATK_SD_SHIFT_MT(mt_fasta_shift_no_meta) GET_CHROM_SIZES( SAMTOOLS_FAIDX.out.fai ) TABIX_DBSNP(known_dbsnp) TABIX_GNOMAD_AF(gnomad_af_tab) - CHECK_VCF(gnomad_vcf_in, ch_fasta_no_meta) + CHECK_VCF(gnomad_vcf_in, fasta_no_meta) TABIX_PT(target_bed).tbi.set { ch_tbi } TABIX_PBT(target_bed).gz_tbi.set { ch_bgzip_tbi } GATK_BILT(target_bed, GATK_SD.out.dict).interval_list @@ -61,9 +69,12 @@ workflow PREPARE_REFERENCES { // Gather versions ch_versions = ch_versions.mix(BWA_INDEX.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) + ch_versions = ch_versions.mix(BWAMEM2_INDEX_SHIFT_MT.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.out.versions) + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_SHIFT_MT.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) ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) @@ -75,20 +86,23 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) emit: - bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] } - bwa_index = BWA_INDEX.out.index ?: SENTIEON_BWAINDEX.out.index - bwamem2_index = BWAMEM2_INDEX.out.index - chrom_sizes = GET_CHROM_SIZES.out.sizes - fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] } - gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi - gnomad_tbi = CHECK_VCF.out.index - gnomad_vcf = CHECK_VCF.out.vcf - known_dbsnp_tbi = TABIX_DBSNP.out.tbi - sequence_dict = GATK_SD.out.dict - target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi) - target_intervals = GATK_BILT.out.interval_list.collect{it[1]} - vcfanno_resources = UNTAR_VCFANNO.out.untar.map { id, resources -> [resources] } - versions = ch_versions + bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] } + bwa_index = BWA_INDEX.out.index ?: SENTIEON_BWAINDEX.out.index + bwamem2_index = BWAMEM2_INDEX.out.index + bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index + chrom_sizes = GET_CHROM_SIZES.out.sizes + fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] } + fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] } + gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi + gnomad_tbi = CHECK_VCF.out.index + gnomad_vcf = CHECK_VCF.out.vcf + known_dbsnp_tbi = TABIX_DBSNP.out.tbi + sequence_dict = GATK_SD.out.dict + sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict + target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi) + target_intervals = GATK_BILT.out.interval_list.collect{it[1]} + vcfanno_resources = UNTAR_VCFANNO.out.untar.map { id, resources -> [resources] } + versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6938a631..708e8c23 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -23,16 +23,18 @@ def checkPathParamList = [ params.gnomad_af_idx, params.gnomad_vcf, params.input, - params.intervals_mt, - params.intervals_mt_shift, params.known_dbsnp, params.known_dbsnp_tbi, params.known_indels, params.known_mills, params.ml_model, - params.mt_shift_fasta, - params.mt_shift_fasta_index, - params.mt_shift_fasta_chain, + params.mt_backchain_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.multiqc_config, params.reduced_penetrance, params.score_config_snv, @@ -131,24 +133,25 @@ workflow RAREDISEASE { // Initialize all file channels including unprocessed vcf, bed and tab files ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval) : Channel.value([]) ch_genome_fasta_no_meta = params.fasta ? Channel.fromPath(params.fasta) : ( exit 1, 'Genome fasta not specified!' ) - ch_genome_fasta_meta = ch_genome_fasta_no_meta.map { it -> [[id:it.baseName], it] } - ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf) : Channel.empty() + 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] } : Channel.value([[],[]]) - ch_intervals_mt = params.intervals_mt ? Channel.fromPath(params.intervals_mt) : Channel.value([]) - ch_intervals_mt_shift = params.intervals_mt_shift ? Channel.fromPath(params.intervals_mt_shift) : Channel.value([]) + ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf) : Channel.empty() ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) ch_ml_model = params.ml_model ? Channel.fromPath(params.ml_model) : Channel.value([]) - ch_mt_shift_fasta = params.mt_shift_fasta ? Channel.fromPath(params.mt_shift_fasta) : Channel.value([]) + ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift) : Channel.value([]) + ch_mt_fasta_shift_no_meta = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift) : Channel.value([]) + ch_mt_fasta_shift_meta = params.mt_fasta_shift ? ch_mt_fasta_shift_no_meta.map { it -> [[id:it[0].simpleName], it] } : Channel.value([]) + ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals) : Channel.value([]) + ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift) : Channel.value([]) ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance) : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv) : Channel.value([]) ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv) : Channel.value([]) - ch_shift_fasta_chain = params.mt_shift_fasta_chain ? Channel.fromPath(params.mt_shift_fasta_chain) : Channel.value([]) ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog) : Channel.value([]) ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) + ch_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) ch_vep_cache = params.vep_cache ? Channel.fromPath(params.vep_cache) : Channel.value([]) ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters) : Channel.value([]) - ch_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) // Generate pedigree file MAKE_PED (CHECK_INPUT.out.samples.toList()) @@ -163,6 +166,8 @@ workflow RAREDISEASE { ch_genome_fasta_no_meta, ch_genome_fasta_meta, params.fasta_fai, + ch_mt_fasta_shift_no_meta, + ch_mt_fasta_shift_meta, ch_gnomad_af_tab, ch_gnomad_vcf_unprocessed, ch_known_dbsnp, @@ -172,20 +177,23 @@ workflow RAREDISEASE { .set { ch_references } // Gather built indices or get them from the params - ch_bait_intervals = ch_references.bait_intervals - ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index) : ( ch_references.bwa_index ?: Channel.empty() ) - ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index) : ( ch_references.bwamem2_index ?: Channel.empty() ) - ch_chrom_sizes = ch_references.chrom_sizes - ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} : Channel.empty() - ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai) : ( ch_references.fasta_fai ?: Channel.empty() ) - ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx) : ( ch_references.gnomad_af_idx ?: Channel.empty() ) - ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) - ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi) : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) - ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary) : ( ch_references.sequence_dict ?: Channel.empty() ) - ch_target_bed = ch_references.target_bed - ch_target_intervals = ch_references.target_intervals - ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources : Channel.fromPath(params.vcfanno_resources) - ch_versions = ch_versions.mix(ch_references.versions) + ch_bait_intervals = ch_references.bait_intervals + ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index) : ( ch_references.bwa_index ?: Channel.empty() ) + ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index) : ( ch_references.bwamem2_index ?: Channel.empty() ) + ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift) : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) + ch_chrom_sizes = ch_references.chrom_sizes + ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} : Channel.empty() + ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai) : ( ch_references.fasta_fai ?: Channel.empty() ) + ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift) : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) + ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx) : ( ch_references.gnomad_af_idx ?: Channel.empty() ) + ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) + ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi) : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) + ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary) : ( ch_references.sequence_dict ?: Channel.empty() ) + ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift) : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) + ch_target_bed = ch_references.target_bed + ch_target_intervals = ch_references.target_intervals + ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources : Channel.fromPath(params.vcfanno_resources) + ch_versions = ch_versions.mix(ch_references.versions) // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( @@ -301,11 +309,14 @@ workflow RAREDISEASE { ch_bwamem2_index, ch_genome_fasta_no_meta, ch_sequence_dictionary, - ch_references.genome_fai, - ch_intervals_mt, - params.fasta_shift, - params.intervals_mt_shift, - params.shift_chain + ch_genome_fai, + ch_mt_intervals, + ch_bwamem2_index_mt_shift, + ch_mt_fasta_shift_no_meta, + ch_sequence_dictionary_mt_shift, + ch_mt_shift_fai, + ch_mt_intervals_shift, + ch_mt_backchain_shift ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) From 5d535ad4f56e6e6a0f13a531ded2ae8426ce6db0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Oct 2022 02:29:50 +0200 Subject: [PATCH 0728/1921] add empty lines --- conf/modules.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index a5d95207..1f2254dc 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -808,9 +808,11 @@ process { ext.args = '--mitochondria-mode TRUE' } } + // // ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT // + process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } From f676e6dae5e9cecf2667a97afd374595108bc3fc Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 25 Oct 2022 13:50:16 +0200 Subject: [PATCH 0729/1921] Removed unsupported argument of tiddit --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 52d0992f..b74b15df 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -323,7 +323,7 @@ process { } withName: '.*QC_BAM:TIDDIT_COV' { - ext.args = '-z 500 -w -u' + ext.args = '-z 500 -w' publishDir = [ path: { "${params.outdir}/tiddit_coverage" }, mode: params.publish_dir_mode, From 7e1d36f6cc0d774de949de2c6c04b533f92d9038 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 25 Oct 2022 13:59:38 +0200 Subject: [PATCH 0730/1921] nfcore modules update --- modules.json | 22 ++++++------ modules/nf-core/bwa/index/main.nf | 22 ++++++++++-- modules/nf-core/bwa/index/meta.yml | 10 ++++++ modules/nf-core/fastqc/main.nf | 34 ++++++------------- .../nf-core/gatk4/bedtointervallist/main.nf | 6 ++-- .../gatk4/createsequencedictionary/main.nf | 6 ++-- .../nf-core/gatk4/intervallisttools/main.nf | 6 ++-- .../nf-core/gatk4/mergebamalignment/main.nf | 6 ++-- modules/nf-core/gatk4/mutect2/main.nf | 6 ++-- modules/nf-core/gatk4/revertsam/main.nf | 6 ++-- modules/nf-core/gatk4/samtofastq/main.nf | 6 ++-- modules/nf-core/picard/markduplicates/main.nf | 3 ++ .../nf-core/picard/markduplicates/meta.yml | 10 +++++- modules/nf-core/samtools/view/main.nf | 4 ++- 14 files changed, 86 insertions(+), 61 deletions(-) diff --git a/modules.json b/modules.json index 8b0b6916..281dd436 100644 --- a/modules.json +++ b/modules.json @@ -19,7 +19,7 @@ }, "bwa/index": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "9518fa4f65f3fb8cde24fde7d40333b39ec8fd65" }, "bwamem2/index": { "branch": "master", @@ -71,35 +71,35 @@ }, "fastqc": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "f6a11408536fbee6cbea1f5977605011873de3ca" }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "gatk4/mutect2": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "gatk4/revertsam": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, "genmod/annotate": { "branch": "master", @@ -151,7 +151,7 @@ }, "picard/markduplicates": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "eca65aa4a5e2e192ac44d6962c8f9260f314ffb8" }, "picard/sortvcf": { "branch": "master", @@ -187,7 +187,7 @@ }, "samtools/view": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "202683bfc98ddecdd456ea73268e330bca2e5c5a" }, "stranger": { "branch": "master", diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index aa75ae5d..6d70fc15 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -8,11 +8,11 @@ process BWA_INDEX { 'quay.io/biocontainers/bwa:0.7.17--hed695b0_7' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "bwa" , emit: index - path "versions.yml", emit: versions + tuple val(meta), path(bwa) , emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -32,4 +32,20 @@ process BWA_INDEX { bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') END_VERSIONS """ + + stub: + """ + mkdir bwa + + touch bwa/genome.amb + touch bwa/genome.ann + touch bwa/genome.bwt + touch bwa/genome.pac + touch bwa/genome.sa + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml index 2bbd81d9..2c6cfcd7 100644 --- a/modules/nf-core/bwa/index/meta.yml +++ b/modules/nf-core/bwa/index/meta.yml @@ -15,10 +15,20 @@ tools: arxiv: arXiv:1303.3997 licence: ["GPL-3.0-or-later"] input: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] - fasta: type: file description: Input genome fasta file output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] - index: type: file description: BWA genome index files diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 05730368..55c50c87 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -8,7 +8,7 @@ process FASTQC { 'quay.io/biocontainers/fastqc:0.11.9--0' }" input: - tuple val(meta), path(reads) + tuple val(meta), path(reads, stageAs: "?/*") output: tuple val(meta), path("*.html"), emit: html @@ -20,30 +20,16 @@ process FASTQC { script: def args = task.ext.args ?: '' - // Add soft-links to original FastQs for consistent naming in pipeline def prefix = task.ext.prefix ?: "${meta.id}" - if (meta.single_end) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz - fastqc $args --threads $task.cpus ${prefix}.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) - END_VERSIONS - """ - } else { - """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz - fastqc $args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) - END_VERSIONS - """ - } + """ + printf "%s\\n" $reads | while read f; do ln -s \$f ${prefix}_\$(basename \$f) ; done + fastqc $args --threads $task.cpus ${prefix}_* + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" ) + END_VERSIONS + """ stub: def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 6224d9b3..64a3fa9a 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -2,10 +2,10 @@ process GATK4_BEDTOINTERVALLIST { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + '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(bed) diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index 13fa9e81..fb78cdf5 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -2,10 +2,10 @@ process GATK4_CREATESEQUENCEDICTIONARY { tag "$fasta" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" input: path fasta diff --git a/modules/nf-core/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf index 7ab26c15..09e2b257 100644 --- a/modules/nf-core/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/gatk4/intervallisttools/main.nf @@ -2,10 +2,10 @@ process GATK4_INTERVALLISTTOOLS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + '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) diff --git a/modules/nf-core/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf index ff51de06..55f9b6a5 100644 --- a/modules/nf-core/gatk4/mergebamalignment/main.nf +++ b/modules/nf-core/gatk4/mergebamalignment/main.nf @@ -2,10 +2,10 @@ process GATK4_MERGEBAMALIGNMENT { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + '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(aligned), path(unmapped) diff --git a/modules/nf-core/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf index abec0d73..693340d9 100644 --- a/modules/nf-core/gatk4/mutect2/main.nf +++ b/modules/nf-core/gatk4/mutect2/main.nf @@ -2,10 +2,10 @@ process GATK4_MUTECT2 { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + '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) diff --git a/modules/nf-core/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf index 959c3e79..1c52aeff 100644 --- a/modules/nf-core/gatk4/revertsam/main.nf +++ b/modules/nf-core/gatk4/revertsam/main.nf @@ -2,10 +2,10 @@ process GATK4_REVERTSAM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + '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(bam) diff --git a/modules/nf-core/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf index de83293a..b7a6bcb0 100644 --- a/modules/nf-core/gatk4/samtofastq/main.nf +++ b/modules/nf-core/gatk4/samtofastq/main.nf @@ -2,10 +2,10 @@ process GATK4_SAMTOFASTQ { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.6.1" : null) + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.6.1--hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.2.6.1--hdfd78af_0' }" + '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(bam) diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index 4e559fea..d1f3aaa1 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -9,6 +9,8 @@ process PICARD_MARKDUPLICATES { input: tuple val(meta), path(bam) + path fasta + path fai output: tuple val(meta), path("*.bam") , emit: bam @@ -35,6 +37,7 @@ process PICARD_MARKDUPLICATES { $args \\ --INPUT $bam \\ --OUTPUT ${prefix}.bam \\ + --REFERENCE_SEQUENCE $fasta \\ --METRICS_FILE ${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 842817bc..3f2357bb 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -24,7 +24,15 @@ input: - bam: type: file description: BAM file - pattern: "*.{bam}" + pattern: "*.{bam,cram,sam}" + - fasta: + type: file + description: Reference genome fasta file + pattern: "*.{fasta,fa}" + - fai: + type: file + description: Reference genome fasta index + pattern: "*.{fai}" output: - meta: type: map diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 94da5d69..b2f5c678 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -26,6 +26,7 @@ process SAMTOOLS_VIEW { 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}": "" @@ -42,7 +43,8 @@ process SAMTOOLS_VIEW { ${readnames} \\ $args \\ -o ${prefix}.${file_type} \\ - $input + $input \\ + $args2 cat <<-END_VERSIONS > versions.yml "${task.process}": From 7e2f7f1541877707dd38f4f059f478545567c2ca Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 25 Oct 2022 14:01:49 +0200 Subject: [PATCH 0731/1921] updated align_bwamem2 based on changes on PICARD_MARKDUPLICATES module --- subworkflows/nf-core/align_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index f446ef4e..e5a38d8d 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -51,7 +51,7 @@ workflow ALIGN_BWAMEM2 { ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions) // Marking duplicates - MARKDUPLICATES ( prepared_bam ) + MARKDUPLICATES ( prepared_bam , fasta, fai ) SAMTOOLS_INDEX_MD ( MARKDUPLICATES.out.bam ) ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions) From 5be705da3e6a996e451aa67ebcf3546c6c7117d5 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 25 Oct 2022 14:13:40 +0200 Subject: [PATCH 0732/1921] updated the inputs of picard_markduplicates_mt --- subworkflows/local/align_and_call_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index ab080276..2ef9cc0c 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -41,7 +41,7 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) // Marks duplicates - PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam ) + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, fasta, fai ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file From 441675cac01172c98b74b72dd8037415d91e3459 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Oct 2022 14:15:48 +0200 Subject: [PATCH 0733/1921] review suggestions and add comments --- conf/genomes.config | 3 ++- subworkflows/local/prepare_references.nf | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/conf/genomes.config b/conf/genomes.config index 95d88578..5b11a860 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -61,10 +61,11 @@ params { mt_fai_shift = "" mt_intervals = "${params.local_genomes}/non_control_region.chrM.interval_list" mt_intervals_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" + mt_sequence_dictionary_shift = "" reduced_penetrance = "" - sequence_dictionary = "" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" + sequence_dictionary = "" select_feature_file = "${params.local_genomes}/hgnc.txt" svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index b13bcffa..4903c267 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -40,6 +40,7 @@ workflow PREPARE_REFERENCES { ch_tbi = Channel.empty() ch_bgzip_tbi = Channel.empty() + // Genome indices BWA_INDEX(fasta_meta) BWAMEM2_INDEX(fasta_meta) BWAMEM2_INDEX_SHIFT_MT(mt_fasta_shift_meta) @@ -49,11 +50,18 @@ workflow PREPARE_REFERENCES { GATK_SD(fasta_no_meta) GATK_SD_SHIFT_MT(mt_fasta_shift_no_meta) GET_CHROM_SIZES( SAMTOOLS_FAIDX.out.fai ) + + // Vcf, tab and bed indices TABIX_DBSNP(known_dbsnp) TABIX_GNOMAD_AF(gnomad_af_tab) CHECK_VCF(gnomad_vcf_in, fasta_no_meta) TABIX_PT(target_bed).tbi.set { ch_tbi } TABIX_PBT(target_bed).gz_tbi.set { ch_bgzip_tbi } + + // Check if a vcf file is normalized and create index + CHECK_VCF(gnomad_vcf_in, fasta_no_meta) + + // Generate bait and target intervals GATK_BILT(target_bed, GATK_SD.out.dict).interval_list GATK_ILT(GATK_BILT.out.interval_list) GATK_ILT.out.interval_list @@ -64,6 +72,8 @@ workflow PREPARE_REFERENCES { } .set { ch_bait_intervals_cat_in } CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) + + // Untar vcfanno UNTAR_VCFANNO ( vcfanno_resources ) // Gather versions From 579106f0db88c912856ff5a3c01d4fab87ba04f8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Oct 2022 20:11:28 +0200 Subject: [PATCH 0734/1921] fix bwamem2 error --- subworkflows/local/prepare_references.nf | 3 +- subworkflows/nf-core/align_bwamem2.nf | 3 +- workflows/raredisease.nf | 64 ++++++++++++------------ 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 4903c267..012493fb 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -54,7 +54,6 @@ workflow PREPARE_REFERENCES { // Vcf, tab and bed indices TABIX_DBSNP(known_dbsnp) TABIX_GNOMAD_AF(gnomad_af_tab) - CHECK_VCF(gnomad_vcf_in, fasta_no_meta) TABIX_PT(target_bed).tbi.set { ch_tbi } TABIX_PBT(target_bed).gz_tbi.set { ch_bgzip_tbi } @@ -98,7 +97,7 @@ workflow PREPARE_REFERENCES { emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] } bwa_index = BWA_INDEX.out.index ?: SENTIEON_BWAINDEX.out.index - bwamem2_index = BWAMEM2_INDEX.out.index + bwamem2_index = BWAMEM2_INDEX.out.index.collect() bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index chrom_sizes = GET_CHROM_SIZES.out.sizes fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] } diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index f446ef4e..4e3d8e3e 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -45,7 +45,8 @@ workflow ALIGN_BWAMEM2 { } .set{ bams } // create a new multi-channel named bams - // TODO: If there are no samples to merge, skip the process + bams.multiple.view() + // If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 708e8c23..0b0a6c70 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -131,27 +131,27 @@ workflow RAREDISEASE { } // Initialize all file channels including unprocessed vcf, bed and tab files - ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval) : Channel.value([]) - ch_genome_fasta_no_meta = params.fasta ? Channel.fromPath(params.fasta) : ( exit 1, 'Genome fasta not specified!' ) + 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() : ( exit 1, '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] } : Channel.value([[],[]]) - ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf) : Channel.empty() - ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([[],[]]) - ch_ml_model = params.ml_model ? Channel.fromPath(params.ml_model) : Channel.value([]) - ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift) : Channel.value([]) - ch_mt_fasta_shift_no_meta = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift) : Channel.value([]) - ch_mt_fasta_shift_meta = params.mt_fasta_shift ? ch_mt_fasta_shift_no_meta.map { it -> [[id:it[0].simpleName], it] } : Channel.value([]) - ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals) : Channel.value([]) - ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift) : Channel.value([]) - ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance) : Channel.value([]) - ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv) : Channel.value([]) - ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv) : Channel.value([]) - ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) - ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog) : Channel.value([]) - ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true) - ch_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] } : Channel.value([]) - ch_vep_cache = params.vep_cache ? Channel.fromPath(params.vep_cache) : Channel.value([]) - ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters) : 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_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).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.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.value([]) + ch_mt_fasta_shift_meta = params.mt_fasta_shift ? ch_mt_fasta_shift_no_meta.map { it -> [[id:it[0].simpleName], it] }.collect() : Channel.value([]) + 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_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.value([]) + ch_vep_cache = 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([]) // Generate pedigree file MAKE_PED (CHECK_INPUT.out.samples.toList()) @@ -178,21 +178,21 @@ workflow RAREDISEASE { // Gather built indices or get them from the params ch_bait_intervals = ch_references.bait_intervals - ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index) : ( ch_references.bwa_index ?: Channel.empty() ) - ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index) : ( ch_references.bwamem2_index ?: Channel.empty() ) - ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift) : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) + ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).collect() : ( ch_references.bwa_index ?: Channel.empty() ) + ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).collect() : ( ch_references.bwamem2_index ?: Channel.empty() ) + ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) ch_chrom_sizes = ch_references.chrom_sizes - ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} : Channel.empty() - ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai) : ( ch_references.fasta_fai ?: Channel.empty() ) - ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift) : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) - ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx) : ( ch_references.gnomad_af_idx ?: Channel.empty() ) - ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) - ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi) : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) - ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary) : ( ch_references.sequence_dict ?: Channel.empty() ) - ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift) : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) + ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} : Channel.empty() + ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() : ( ch_references.fasta_fai ?: Channel.empty() ) + ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) + ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() : ( ch_references.gnomad_af_idx ?: Channel.empty() ) + ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) + ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).collect() : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) + ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() : ( ch_references.sequence_dict ?: Channel.empty() ) + ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).collect() : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) ch_target_bed = ch_references.target_bed ch_target_intervals = ch_references.target_intervals - ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources : Channel.fromPath(params.vcfanno_resources) + ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. From 93f05e62d9b9a3d90fbefc7c26e991a3e3625793 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Oct 2022 20:11:42 +0200 Subject: [PATCH 0735/1921] renove view --- subworkflows/nf-core/align_bwamem2.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/nf-core/align_bwamem2.nf index 4e3d8e3e..e449f1fa 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/nf-core/align_bwamem2.nf @@ -45,7 +45,6 @@ workflow ALIGN_BWAMEM2 { } .set{ bams } // create a new multi-channel named bams - bams.multiple.view() // If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) From a4ae2585e89818f9f46723c8fa38fc0fe6104e19 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Oct 2022 13:42:11 +0200 Subject: [PATCH 0736/1921] review suggestions --- conf/modules.config | 38 ++++++++++++++++---------------- nextflow_schema.json | 17 ++++++++++++++ subworkflows/local/analyse_MT.nf | 6 ++--- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 1f2254dc..bdf494ea 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -70,7 +70,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_SHIFT_MT' { - ext.when = {!params.mt_bwamem2_index_shift && params.mt_fasta_shift} + ext.when = {!params.mt_bwamem2_index_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -112,7 +112,7 @@ process { } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { - ext.when = {!params.mt_fai_shift && params.mt_fasta_shift} + ext.when = {!params.mt_fai_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -134,7 +134,7 @@ process { } withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { - ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift} + ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -755,18 +755,18 @@ process { process { withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:SAMTOOLS_VIEW_MT' { - ext.when = { params.mt_fasta_shift } + ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = { '-h ' } ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } } withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { - ext.when = { params.mt_fasta_shift } + ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { - ext.when = { params.mt_fasta_shift } + ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT' } } @@ -777,34 +777,34 @@ process { process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' } } @@ -815,41 +815,41 @@ process { process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' } } process { withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { - ext.when = { params.mt_fasta_shift && params.mt_backchain_shift } + ext.when = { params.mt_fasta_shift && params.mt_backchain_shift && !(params.analysis_type == "wes") } } } diff --git a/nextflow_schema.json b/nextflow_schema.json index 9cbd40fe..98533526 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -68,6 +68,7 @@ "format": "file-path", "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 }, @@ -106,6 +107,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", + "pattern": "^\\S+\\.vcf(\\.gz)?$", "description": "Path to directory for gnomad vcf.", "help_text": "Path to the gnomad annotations vcf file. If you don't provide one, gnomad annotations will not be used." }, @@ -113,6 +115,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-file", + "pattern": "^\\S+\\.tab(\\.gz)?$", "description": "Path to the gnomad tab file with allele frequencies.", "help_text": "Path to the gnomad tab file with CHR/START/REF,ALT/AF. Can be generated from the gnomad annotations vcf." }, @@ -120,6 +123,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-file", + "pattern": "^\\S+\\.bed(\\.gz)?\\.idx$", "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" }, @@ -127,6 +131,7 @@ "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" }, @@ -134,6 +139,7 @@ "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" }, @@ -141,6 +147,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", + "pattern": "^\\S+\\.vcf(\\.gz)?$", "description": "Path to known dbSNP file.", "hidden": true }, @@ -148,6 +155,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", + "pattern": "^\\S+\\.vcf(\\.gz)?\\.tbi$", "description": "Path to known dbSNP file index.", "hidden": true }, @@ -155,6 +163,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", + "pattern": "^\\S+\\.vcf(\\.gz)?$", "description": "Path to known indels file.", "hidden": true }, @@ -162,6 +171,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", + "pattern": "^\\S+\\.vcf(\\.gz)?$", "description": "Path to known Mills file.", "hidden": true }, @@ -176,6 +186,7 @@ "type": "string", "format": "file-path", "mimetype": "text/plain", + "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to mitochondrial FASTA genome file.", "fa_icon": "far fa-file-code" }, @@ -183,6 +194,7 @@ "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" }, @@ -227,6 +239,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", + "pattern": "^\\S+\\.dict$", "description": "Genome dictionary file", "hidden": true }, @@ -234,6 +247,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-chart-bar", + "pattern": "^\\S+\\.dict$", "description": "Shifted mitochondrial genome dictionary file", "hidden": true }, @@ -248,6 +262,7 @@ "type": "string", "format": "path", "fa_icon": "fas fa-bezier-curve", + "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 @@ -277,6 +292,7 @@ "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 @@ -305,6 +321,7 @@ "format": "file-path", "default": null, "fa_icon": "fas fa-bezier-curve", + "pattern": "^\\S+\\.interval_list?$", "description": "Path to interval list for Gens.", "help_text": "This file contains the binning intervals used for CollectReadCounts.", "hidden": true diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 425f5f85..bece2ea4 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -16,10 +16,10 @@ workflow ANALYSE_MT { mt_intervals // channel: [ file(non_control_region.chrM.interval_list) ] shift_mt_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] shift_mt_fasta // channel: [ genome.fasta ] - shift_mt_dict // channel: [ genome.dict ] - shift_mt_fai // channel: [ genome.fai ] + shift_mt_dict // channel: [ genome.dict ] + shift_mt_fai // channel: [ genome.fai ] shift_mt_intervals // channel: [ file(control_region_shifted.chrM.interval_list) ] - shift_mt_backchain + shift_mt_backchain // channel: [ file(shift.back_chain) ] main: ch_versions = Channel.empty() From 7093b9c27e615891d97bf94169a2d940db0bca3d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Oct 2022 13:42:27 +0200 Subject: [PATCH 0737/1921] fix line limits --- workflows/raredisease.nf | 94 +++++++++++++++++++++++++++------------- 1 file changed, 63 insertions(+), 31 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0b0a6c70..43c983b5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -131,27 +131,47 @@ workflow RAREDISEASE { } // Initialize all file channels including unprocessed vcf, bed and tab files - 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() : ( exit 1, 'Genome fasta not specified!' ) + 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() + : ( exit 1, '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_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).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.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.value([]) - ch_mt_fasta_shift_meta = params.mt_fasta_shift ? ch_mt_fasta_shift_no_meta.map { it -> [[id:it[0].simpleName], it] }.collect() : Channel.value([]) - 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_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).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.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.value([]) + ch_mt_fasta_shift_meta = params.mt_fasta_shift ? ch_mt_fasta_shift_no_meta.map { it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([]) + 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_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.value([]) - ch_vep_cache = 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_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([]) + ch_vep_cache = 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([]) // Generate pedigree file MAKE_PED (CHECK_INPUT.out.samples.toList()) @@ -178,21 +198,33 @@ workflow RAREDISEASE { // Gather built indices or get them from the params ch_bait_intervals = ch_references.bait_intervals - ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).collect() : ( ch_references.bwa_index ?: Channel.empty() ) - ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).collect() : ( ch_references.bwamem2_index ?: Channel.empty() ) - ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) + ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).collect() + : ( ch_references.bwa_index ?: Channel.empty() ) + ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).collect() + : ( ch_references.bwamem2_index ?: Channel.empty() ) + ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() + : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) ch_chrom_sizes = ch_references.chrom_sizes - ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} : Channel.empty() - ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() : ( ch_references.fasta_fai ?: Channel.empty() ) - ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) - ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() : ( ch_references.gnomad_af_idx ?: Channel.empty() ) - ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) - ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).collect() : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) - ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() : ( ch_references.sequence_dict ?: Channel.empty() ) - ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).collect() : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) + ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} + : Channel.empty() + ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() + : ( ch_references.fasta_fai ?: Channel.empty() ) + ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() + : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) + ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() + : ( ch_references.gnomad_af_idx ?: Channel.empty() ) + ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf + : Channel.value([]) + ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).collect() + : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) + ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() + : ( ch_references.sequence_dict ?: Channel.empty() ) + ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).collect() + : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) ch_target_bed = ch_references.target_bed ch_target_intervals = ch_references.target_intervals - ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources : Channel.fromPath(params.vcfanno_resources).collect() + ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources + : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. From 0aed84af47395fba9265730aaf181ec76d672def Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Oct 2022 14:41:29 +0200 Subject: [PATCH 0738/1921] fix lint error --- nextflow_schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 98533526..db099e44 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -321,7 +321,6 @@ "format": "file-path", "default": null, "fa_icon": "fas fa-bezier-curve", - "pattern": "^\\S+\\.interval_list?$", "description": "Path to interval list for Gens.", "help_text": "This file contains the binning intervals used for CollectReadCounts.", "hidden": true From f4745a8149bedb02e6c2b39376fbc43e7f53e96a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Oct 2022 15:24:26 +0200 Subject: [PATCH 0739/1921] update make_ped --- modules/local/create_pedfile.nf | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index b4761f07..6acae0d9 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -17,9 +17,15 @@ process MAKE_PED { script: def pedinfo = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') + def samples_list = [] for(int i = 0; i family.ped From e781aaa91a298649a9f21e98b2810086db749f20 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Oct 2022 16:41:06 +0200 Subject: [PATCH 0740/1921] refactor alignment subworkflows --- subworkflows/local/align.nf | 26 +++++++------------ .../alignment}/align_bwamem2.nf | 12 ++++----- .../local/{ => alignment}/align_sentieon.nf | 10 +++---- workflows/raredisease.nf | 2 +- 4 files changed, 21 insertions(+), 29 deletions(-) rename subworkflows/{nf-core => local/alignment}/align_bwamem2.nf (92%) rename subworkflows/local/{ => alignment}/align_sentieon.nf (85%) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 39c7ed7d..6fd07f2c 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -2,8 +2,8 @@ // Map to reference // -include { ALIGN_BWAMEM2 } from '../nf-core/align_bwamem2' -include { ALIGN_SENTIEON } from './align_sentieon' +include { ALIGN_BWAMEM2 } from './alignment/align_bwamem2' +include { ALIGN_SENTIEON } from './alignment/align_sentieon' workflow ALIGN { take: @@ -19,26 +19,18 @@ workflow ALIGN { main: ch_versions = Channel.empty() - if( aligner == "bwamem2" ) { - ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai ) - ch_marked_bam = ALIGN_BWAMEM2.out.marked_bam - ch_marked_bai = ALIGN_BWAMEM2.out.marked_bai - ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) - } else if( aligner == "sentieon" ) { - ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi ) - ch_marked_bam = ALIGN_SENTIEON.out.marked_bam - ch_marked_bai = ALIGN_SENTIEON.out.marked_bai - ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) - } else { - exit 1, 'Please provide a valid aligner!' - } + ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai ) + ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi ) + 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_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) + emit: - marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] + marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bai ] ] marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] bam_bai = ch_bam_bai // channel: [ val(meta), [ marked_bam, marked_bai ] ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/nf-core/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf similarity index 92% rename from subworkflows/nf-core/align_bwamem2.nf rename to subworkflows/local/alignment/align_bwamem2.nf index 7879bfd5..2993a906 100644 --- a/subworkflows/nf-core/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -2,12 +2,12 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -include { BWAMEM2_MEM } from '../../modules/nf-core/bwamem2/mem/main' -include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_STATS } from '../../modules/nf-core/samtools/stats/main' -include { SAMTOOLS_MERGE } from '../../modules/nf-core/samtools/merge/main' -include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../modules/nf-core/picard/markduplicates/main' +include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main' +include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_STATS } from '../../../modules/nf-core/samtools/stats/main' +include { SAMTOOLS_MERGE } from '../../../modules/nf-core/samtools/merge/main' +include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' workflow ALIGN_BWAMEM2 { diff --git a/subworkflows/local/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf similarity index 85% rename from subworkflows/local/align_sentieon.nf rename to subworkflows/local/alignment/align_sentieon.nf index 9949b5d5..c498958e 100644 --- a/subworkflows/local/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -2,11 +2,11 @@ // A subworkflow to annotate structural variants. // -include { SENTIEON_BWAMEM } from '../../modules/local/sentieon/bwamem' -include { SENTIEON_DATAMETRICS } from '../../modules/local/sentieon/datametrics' -include { SENTIEON_LOCUSCOLLECTOR } from '../../modules/local/sentieon/locuscollector' -include { SENTIEON_DEDUP } from '../../modules/local/sentieon/dedup' -include { SENTIEON_BQSR } from '../../modules/local/sentieon/bqsr' +include { SENTIEON_BWAMEM } from '../../../modules/local/sentieon/bwamem' +include { SENTIEON_DATAMETRICS } from '../../../modules/local/sentieon/datametrics' +include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' +include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' +include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' workflow ALIGN_SENTIEON { take: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 43c983b5..f3a49698 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -227,7 +227,7 @@ workflow RAREDISEASE { : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) - // STEP 1: ALIGNING READS, FETCH STATS, AND MERGE. + // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( params.aligner, CHECK_INPUT.out.reads, From 2cff42a9e2500e1a9b7150e6a4c7da6cc0611ced Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Oct 2022 20:03:49 +0200 Subject: [PATCH 0741/1921] fix typo --- subworkflows/local/align.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 6fd07f2c..b9e09eeb 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -29,7 +29,7 @@ workflow ALIGN { emit: - marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bai ] ] + marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] bam_bai = ch_bam_bai // channel: [ val(meta), [ marked_bam, marked_bai ] ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] From d0484bfc2947bbf4f57e82b6fb5e69836751b35c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 28 Oct 2022 03:10:33 +0200 Subject: [PATCH 0742/1921] update pipeline --- subworkflows/local/prepare_references.nf | 30 ++++++++++++------------ workflows/raredisease.nf | 12 +++++----- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 012493fb..42ce93b6 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -95,22 +95,22 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) emit: - bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] } - bwa_index = BWA_INDEX.out.index ?: SENTIEON_BWAINDEX.out.index + bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() + bwa_index = BWA_INDEX.out.index.collect() ?: SENTIEON_BWAINDEX.out.index.collect() bwamem2_index = BWAMEM2_INDEX.out.index.collect() - bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index - chrom_sizes = GET_CHROM_SIZES.out.sizes - fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] } - fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] } - gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi - gnomad_tbi = CHECK_VCF.out.index - gnomad_vcf = CHECK_VCF.out.vcf - known_dbsnp_tbi = TABIX_DBSNP.out.tbi - sequence_dict = GATK_SD.out.dict - sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict - target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi) - target_intervals = GATK_BILT.out.interval_list.collect{it[1]} - vcfanno_resources = UNTAR_VCFANNO.out.untar.map { id, resources -> [resources] } + bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() + chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() + fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] }.collect() + fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] }.collect() + gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() + gnomad_tbi = CHECK_VCF.out.index.collect() + gnomad_vcf = CHECK_VCF.out.vcf.collect() + known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() + sequence_dict = GATK_SD.out.dict.collect() + sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() + target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() + target_intervals = GATK_BILT.out.interval_list.collect{it[1]}.collect() + vcfanno_resources = UNTAR_VCFANNO.out.untar.map { id, resources -> [resources] }.collect() versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 43c983b5..42f8e980 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -147,9 +147,9 @@ workflow RAREDISEASE { 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.value([]) + : 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.value([]) + : 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() @@ -198,21 +198,21 @@ workflow RAREDISEASE { // Gather built indices or get them from the params ch_bait_intervals = ch_references.bait_intervals - ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).collect() + ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).map {it -> [[id:it[0].simpleName], it]}.collect() : ( ch_references.bwa_index ?: Channel.empty() ) - ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).collect() + ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).map {it -> [[id:it[0].simpleName], it]}.collect() : ( ch_references.bwamem2_index ?: Channel.empty() ) ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) ch_chrom_sizes = ch_references.chrom_sizes - ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_genome_af_idx).map {meta, tab, idx -> [tab,idx]} - : Channel.empty() ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() : ( ch_references.fasta_fai ?: Channel.empty() ) ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() : ( ch_references.gnomad_af_idx ?: Channel.empty() ) + 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_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).collect() From cb6ad660c1025312724d04033fd7a8f5d9760568 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 31 Oct 2022 13:58:35 +0100 Subject: [PATCH 0743/1921] recursion --- main.nf | 1 + modules/nf-core/svdb/query/main.nf | 47 ++++++++----------- nextflow_schema.json | 2 +- .../local/annotate_structural_variants.nf | 40 ++++++++++------ workflows/raredisease.nf | 2 +- 5 files changed, 47 insertions(+), 45 deletions(-) diff --git a/main.nf b/main.nf index c2b9c872..7335d481 100644 --- a/main.nf +++ b/main.nf @@ -11,6 +11,7 @@ */ nextflow.enable.dsl = 2 +nextflow.preview.recursion = true /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index dbab5259..ac9eead3 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -9,39 +9,30 @@ process SVDB_QUERY { input: tuple val(meta), path(vcf) - val(in_occs) - val(in_frqs) - val(out_occs) - val(out_frqs) - path (vcf_dbs) + tuple val(in_occs), val(in_frqs), val(out_occs), val(out_frqs), path (vcf_dbs) + val(placeholder) output: - tuple val(meta), path("*_query.vcf"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*_query.vcf") , emit: vcf + tuple val(in_occs_rem), val(in_frqs_rem), val(out_occs_rem), val(out_frqs_rem), path (vcf_dbs_rem) , emit: vals + 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 in_occ = "" - def in_frq = "" - def out_occ = "" - def out_frq = "" - if (in_occs) { - in_occ = "--in_occ ${in_occs.join(',')}" - } - if (in_frqs) { - in_frq = "--in_frq ${in_frqs.join(',')}" - } - if (out_occs) { - out_occ = "--out_occ ${out_occs.join(',')}" - } - if (out_frqs) { - out_frq = "--out_frq ${out_frqs.join(',')}" - } - + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def in_occ = "--in_occ " + in_occs.head() + in_occs_rem = in_occs.tail() + def in_frq = "--in_frq " + in_frqs.head() + in_frqs_rem = in_frqs.tail() + def out_occ = "--out_occ " + out_occs.head() + out_occs_rem = out_occs.tail() + def out_frq = "--out_frq " + out_frqs.head() + out_frqs_rem = out_frqs.tail() + def vcf_db = vcf_dbs.head() + vcf_dbs_rem = vcf_dbs.tail() """ svdb \\ --query \\ @@ -50,9 +41,9 @@ process SVDB_QUERY { $out_occ \\ $out_frq \\ $args \\ - --db ${vcf_dbs.join(',')} \\ + --db $vcf_db \\ --query_vcf $vcf \\ - --prefix ${prefix} + --prefix ${prefix}_${task.index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow_schema.json b/nextflow_schema.json index db099e44..4253f52c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -466,7 +466,7 @@ "default": "104", "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": ["104", "105"] + "enum": ["104", "105", "106"] } } }, diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 31e7f96e..2a37efdb 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -3,6 +3,7 @@ // include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' +include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/tabix/tabix/main' @@ -33,27 +34,36 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { } .set { ch_svdb_dbs } - SVDB_QUERY(vcf, - ch_svdb_dbs.in_occs.toList(), - ch_svdb_dbs.in_frqs.toList(), - ch_svdb_dbs.out_occs.toList(), - ch_svdb_dbs.out_frqs.toList(), - ch_svdb_dbs.vcf_dbs.toList() - ) + ch_svdb_dbs.in_occs.toList() + .concat(ch_svdb_dbs.in_frqs.toList(), + ch_svdb_dbs.out_occs.toList(), + ch_svdb_dbs.out_frqs.toList(), + ch_svdb_dbs.vcf_dbs.toList()) + .toList() + .set { ch_dbs_in } + + vcf.collect().set {ch_vcf_in} + SVDB_QUERY + .recurse(ch_vcf_in, ch_dbs_in,[] ) + .until{ it -> it[1][1] == [] } + + SVDB_QUERY.out.vcf.groupTuple().set { ch_merge_in } + ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) + SVDB_MERGE(ch_merge_in, []) - PICARD_SORTVCF(SVDB_QUERY.out.vcf, - fasta, - seq_dict - ) + // PICARD_SORTVCF(SVDB_MERGE.out.vcf, + // fasta, + // seq_dict + // ) - PICARD_SORTVCF.out.vcf - .map { - meta, vcf -> + // PICARD_SORTVCF.out.vcf + SVDB_MERGE.out.vcf + .map { meta, vcf -> return [meta,vcf,[]] } .set { ch_sortvcf } - ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) + // ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 42f8e980..c29cf610 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -311,7 +311,7 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - ch_genome_fasta_meta, + ch_genome_fasta_no_meta, ch_sequence_dictionary ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) From b00736d12741aeb484eef381bc7b55ec23218c52 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Nov 2022 02:23:51 +0100 Subject: [PATCH 0744/1921] add pli --- bin/add_most_severe_pli.py | 139 +++++++++++++++++++ modules/local/add_most_severe_consequence.nf | 15 +- 2 files changed, 148 insertions(+), 6 deletions(-) create mode 100644 bin/add_most_severe_pli.py diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py new file mode 100644 index 00000000..351b5041 --- /dev/null +++ b/bin/add_most_severe_pli.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python +import argparse +import sys +from pathlib import Path +from typing import TextIO + + +def parse_vep_transcripts(transcripts: list, symbol_ind: int) -> list: + """ + Parse each transcript and return a list of gene symbols. + + Args: + transcripts (list): A list of vep transcript annotation + symbol_ind (int) : Index of the "allele" in the vep annotation record + + Returns: + gene_ids (list): list of gene ids in the record + """ + + gene_ids = [] + for transcript in transcripts: + vep_fields = transcript.strip().split("|") + gene_id = vep_fields[symbol_ind] + gene_ids.append(gene_id) + return gene_ids + + +def construct_most_severe_pli_info(line: str, symbol_ind: int, pli_gene: dict) -> list: + """ + Parse gene symbols, find the highest pli value of all gene symbols, add most_severe_pli tag to the info + field and return a list of modified columns + + Args: + line (str) : Vcf record + symbol_ind (int) : Index of the "SYMBOL" in the vep annotation record + pli_gene (dict): A dict of pli values, where gene symbols are the keys + + Returns: + columns (list): A list of fields in the vcf record with most severe pli added + to the INFO column + """ + + columns = line.strip().split() + info_fields = columns[7].split(";") + for field in info_fields: + if field.startswith("CSQ="): + transcripts = field.split("CSQ=")[1].split(",") + gene_ids = parse_vep_transcripts(transcripts, symbol_ind) + unique_ids = list(set(gene_ids)) + pli_values = [] + for gene_id in unique_ids: + if gene_id != "" and pli_gene.get(gene_id) is not None: + pli_values.append(pli_gene.get(gene_id)) + if pli_values: + columns[7] += ";most_severe_pli={:.2f}".format(max(pli_values)) + return columns + + +def parse_vep_csq_schema(line: str) -> int: + """ + Get indices of gene symbol in the annotation + + Args: + line: INFO line in the vcf header with CSQ information + + Returns: + symbol_ind (int) : Index of the "SYMBOL" in the vep annotation record + """ + fields = line.strip().split("Format: ")[1].replace('">', "").split("|") + symbol_ind = fields.index("SYMBOL") + + return symbol_ind + + +def write_pli_annotated_vcf(file_in: TextIO, file_out: TextIO, var_csq: list): + """Add most severe pli field to record, and write the record to a vcf file""" + for line in file_in: + if line.startswith("#"): + file_out.write(line) + if line.startswith("##INFO=\n' + ) + else: + vcf_record = construct_most_severe_pli_info(line, symbol_ind, var_csq) + file_out.write("\t".join(vcf_record) + "\n") + + +def parse_args(argv=None): + """Define and immediately parse command line arguments.""" + parser = argparse.ArgumentParser( + description="Annotate vcf with the most severe pli field.", + epilog="Example: python vcfparser.py --file_in vep.vcf --file_out vep.most_severe_pli.vcf --pli pli_per_gene.txt", + ) + parser.add_argument( + "--file_in", + metavar="FILE_IN", + type=Path, + help="Vcf file annotated with vep.", + ) + parser.add_argument( + "--file_out", + metavar="FILE_OUT", + type=Path, + help="Vcf with most_severe_pli annotations added to it.", + ) + parser.add_argument( + "--pli", + metavar="PLI", + type=Path, + help="Pli", + ) + return parser.parse_args(argv) + + +def main(argv=None): + """Coordinate argument parsing and program execution.""" + args = parse_args(argv) + if not args.file_in.is_file(): + print(f"The given input file {args.file_in} was not found!") + sys.exit(2) + if not args.pli.is_file(): + print(f"The given variant consequence file {args.pli} was not found!") + sys.exit(2) + args.file_out.parent.mkdir(parents=True, exist_ok=True) + pli_gene = {} + with open(args.pli) as f: + for line in f: + cols = line.strip().split() + if cols[0] != "gene": + pli_gene[cols[0]] = float(cols[1]) + with open(args.file_out, "w") as out_vcf: + with open(args.file_in) as in_vcf: + write_pli_annotated_vcf(in_vcf, out_vcf, pli_gene) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/modules/local/add_most_severe_consequence.nf b/modules/local/add_most_severe_consequence.nf index c17dcc2f..4d1397fb 100644 --- a/modules/local/add_most_severe_consequence.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -10,10 +10,12 @@ process ADD_MOST_SEVERE_CSQ { input: tuple val(meta), path(vcf) path (variant_consequences) + path (pli_gene) output: - tuple val(meta), path("*.vcfparser.vcf") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.csq_pli.vcf") , emit: csq_pli_vcf + tuple val(meta), path("*.csq.vcf") , emit: csq_vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -22,22 +24,23 @@ process ADD_MOST_SEVERE_CSQ { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - python3 add_most_severe_consequence.py ${vcf} ${prefix}.vcfparser.vcf ${variant_consequences} + python3 add_most_severe_consequence.py --file_in ${vcf} --file_out ${prefix}.csq.vcf --variant_csq ${variant_consequences} + python3 add_most_severe_pli.py --file_in ${prefix}.csq.vcf --file_out ${prefix}.csq_pli.vcf --pli ${pli} cat <<-END_VERSIONS > versions.yml "${task.process}": - add_most_severe_consequence: v1.0 + add_most_severe_consequence_pli: v1.0 END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcfparser.vcf + touch ${prefix}.csq_pli.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": - add_most_severe_consequence: v1.0 + add_most_severe_consequence_pli: v1.0 END_VERSIONS """ } From edb96c472a00fff5b211690dcf4fd371645e058d Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 10:11:30 +0100 Subject: [PATCH 0745/1921] feat updated modules.config --- conf/modules.config | 62 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index bdf494ea..318668f0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -643,7 +643,6 @@ process { mode: params.publish_dir_mode, ] } - } // @@ -806,7 +805,7 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' - } + } } // @@ -845,6 +844,65 @@ process { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { + ext.prefix = { "${meta.id}_filtered" } + } +} + +// +// ANALYSE_MT:MERGE_ANNOTATE_MT +// + +process { + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_MERGEVCFS_LIFT_UNLIFT_MT' { + ext.prefix = { "${meta.id}_merged" } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_VARIANTFILTRATION_MT' { + ext.prefix = { "${meta.id}_filt" } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/gatk4" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { + ext.args = [ + '--plugin LoFtool,cache/Plugins/LoFtool_scores.txt', + '--distance 0', + '--buffer_size 20000', + '--format vcf --max_sv_size 16600', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/mt_annotation" }, + mode: params.publish_dir_mode, + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:CHANGE_NAME_VCF_MT' { + ext.file_type = 'vcf.gz' + } } process { From f2bb3495f68e48d0a53765189b3a638f60b414aa Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 10:21:51 +0100 Subject: [PATCH 0746/1921] feat installed and updated modules --- modules.json | 32 +++++++ modules/nf-core/bcftools/merge/main.nf | 46 ++++++++++ modules/nf-core/bcftools/merge/meta.yml | 72 ++++++++++++++++ .../nf-core/gatk4/filtermutectcalls/main.nf | 70 +++++++++++++++ .../nf-core/gatk4/filtermutectcalls/meta.yml | 85 +++++++++++++++++++ modules/nf-core/gatk4/mergevcfs/main.nf | 59 +++++++++++++ modules/nf-core/gatk4/mergevcfs/meta.yml | 48 +++++++++++ .../nf-core/gatk4/variantfiltration/main.nf | 47 ++++++++++ .../nf-core/gatk4/variantfiltration/meta.yml | 56 ++++++++++++ modules/nf-core/haplogrep2/classify/main.nf | 49 +++++++++++ modules/nf-core/haplogrep2/classify/meta.yml | 43 ++++++++++ modules/nf-core/hmtnote/main.nf | 45 ++++++++++ modules/nf-core/hmtnote/meta.yml | 39 +++++++++ modules/nf-core/picard/liftovervcf/main.nf | 6 +- .../nf-core/picard/renamesampleinvcf/main.nf | 56 ++++++++++++ .../nf-core/picard/renamesampleinvcf/meta.yml | 44 ++++++++++ 16 files changed, 794 insertions(+), 3 deletions(-) create mode 100644 modules/nf-core/bcftools/merge/main.nf create mode 100644 modules/nf-core/bcftools/merge/meta.yml create mode 100644 modules/nf-core/gatk4/filtermutectcalls/main.nf create mode 100644 modules/nf-core/gatk4/filtermutectcalls/meta.yml create mode 100644 modules/nf-core/gatk4/mergevcfs/main.nf create mode 100644 modules/nf-core/gatk4/mergevcfs/meta.yml create mode 100644 modules/nf-core/gatk4/variantfiltration/main.nf create mode 100644 modules/nf-core/gatk4/variantfiltration/meta.yml create mode 100644 modules/nf-core/haplogrep2/classify/main.nf create mode 100644 modules/nf-core/haplogrep2/classify/meta.yml create mode 100644 modules/nf-core/hmtnote/main.nf create mode 100644 modules/nf-core/hmtnote/meta.yml create mode 100644 modules/nf-core/picard/renamesampleinvcf/main.nf create mode 100644 modules/nf-core/picard/renamesampleinvcf/meta.yml diff --git a/modules.json b/modules.json index 281dd436..9c564d2a 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,10 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bcftools/merge": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, "bcftools/norm": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" @@ -81,6 +85,10 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/filtermutectcalls": { + "branch": "master", + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" @@ -89,6 +97,10 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/mergevcfs": { + "branch": "master", + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + }, "gatk4/mutect2": { "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" @@ -101,6 +113,10 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/variantfiltration": { + "branch": "master", + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + }, "genmod/annotate": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" @@ -125,6 +141,14 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, + "haplogrep2/classify": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, + "hmtnote": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, "manta/germline": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" @@ -149,10 +173,18 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, + "picard/liftovervcf": { + "branch": "master", + "git_sha": "3d5d18db1b39e1133505ae2fa2a062b0073c8a6a" + }, "picard/markduplicates": { "branch": "master", "git_sha": "eca65aa4a5e2e192ac44d6962c8f9260f314ffb8" }, + "picard/renamesampleinvcf": { + "branch": "master", + "git_sha": "af53d9fcbc10982ff8fd1b87f9fec60b19eaba3d" + }, "picard/sortvcf": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf new file mode 100644 index 00000000..af586cd1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/main.nf @@ -0,0 +1,46 @@ +process BCFTOOLS_MERGE { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': + 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + + input: + tuple val(meta), path(vcfs), path(tbis) + path bed + path fasta + path fasta_fai + + output: + tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: merged_variants + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def regions = 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 v") || args.contains("-Ov") ? "vcf" : + "vcf.gz" + + """ + bcftools merge \\ + $regions \\ + --threads $task.cpus \\ + --output ${prefix}.${extension} \\ + $args \\ + *.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml new file mode 100644 index 00000000..53dc23eb --- /dev/null +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -0,0 +1,72 @@ +name: bcftools_merge +description: Merge VCF files +keywords: + - variant calling + - merge + - VCF +tools: + - merge: + description: | + Merge VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: files + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbis: + type: files + 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" + - fasta: + type: file + description: "(Optional) The fasta reference file (only necessary for the `--gvcf FILE` parameter)" + pattern: "*.{fasta,fa}" + - fasta: + type: file + description: "(Optional) The fasta reference file index (only necessary for the `--gvcf FILE` parameter)" + pattern: "*.fai" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf_gz: + type: file + description: VCF merged output file (bgzipped) => when `--output-type z` is used + pattern: "*.vcf.gz" + - vcf: + type: file + description: VCF merged output file => when `--output-type v` is used + pattern: "*.vcf" + - bcf_gz: + type: file + description: BCF merged output file (bgzipped) => when `--output-type b` is used + pattern: "*.bcf.gz" + - bcf: + type: file + description: BCF merged output file => when `--output-type u` is used + pattern: "*.bcf" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf new file mode 100644 index 00000000..130c83b6 --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -0,0 +1,70 @@ +process GATK4_FILTERMUTECTCALLS { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf), path(vcf_tbi), path(stats), path(orientationbias), path(segmentation), path(table), val(estimate) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: tbi + tuple val(meta), path("*.filteringStats.tsv"), emit: stats + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def 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 avail_mem = 3 + if (!task.memory) { + log.info '[GATK FilterMutectCalls] 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" FilterMutectCalls \\ + --variant $vcf \\ + --output ${prefix}.vcf.gz \\ + --reference $fasta \\ + $orientationbias_command \\ + $segmentation_command \\ + $estimate_command \\ + $table_command \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + touch ${prefix}.vcf.gz.filteringStats.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/filtermutectcalls/meta.yml b/modules/nf-core/gatk4/filtermutectcalls/meta.yml new file mode 100644 index 00000000..d1972d70 --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/meta.yml @@ -0,0 +1,85 @@ +name: gatk4_filtermutectcalls +description: | + Filters the raw output of mutect2, can optionally use outputs of calculatecontamination and learnreadorientationmodel to improve filtering. +keywords: + - filtermutectcalls + - mutect2 + - gatk4 + - filtervcf +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 + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: compressed vcf file of mutect2calls + pattern: "*.vcf.gz" + - vcf_tbi: + type: file + description: Tabix index of vcf file + pattern: "*vcf.gz.tbi" + - stats: + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" + - orientationbias: + type: list + description: files containing artifact priors for input vcf. Optional input. + pattern: "*.artifact-prior.tar.gz" + - segmentation: + type: list + description: tables containing segmentation information for input vcf. Optional input. + pattern: "*.segmentation.table" + - table: + type: list + description: table(s) containing contamination data for input vcf. Optional input, takes priority over estimate. + pattern: "*.contamination.table" + - estimate: + type: val + description: estimation of contamination value as a double. Optional input, will only be used if table is not specified. + - fasta: + type: file + description: The reference fasta file + pattern: "*.fasta" + - fai: + type: file + description: Index of reference fasta file + pattern: "*.fasta.fai" + - dict: + type: file + description: GATK sequence dictionary + pattern: "*.dict" + +output: + - vcf: + type: file + description: file containing filtered mutect2 calls. + pattern: "*.vcf.gz" + - tbi: + type: file + description: tbi file that pairs with vcf. + pattern: "*.vcf.gz.tbi" + - stats: + type: file + description: file containing statistics of the filtermutectcalls run. + pattern: "*.filteringStats.tsv" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@GCJMackenzie" + - "@maxulysse" diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf new file mode 100644 index 00000000..0b065b5b --- /dev/null +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -0,0 +1,59 @@ +process GATK4_MERGEVCFS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf) + path dict + + output: + tuple val(meta), path('*.vcf.gz'), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def input_list = vcf.collect{ "--INPUT $it"}.join(' ') + def reference_command = dict ? "--SEQUENCE_DICTIONARY $dict" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK MergeVcfs] 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" MergeVcfs \\ + $input_list \\ + --OUTPUT ${prefix}.vcf.gz \\ + $reference_command \\ + --TMP_DIR . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/mergevcfs/meta.yml b/modules/nf-core/gatk4/mergevcfs/meta.yml new file mode 100644 index 00000000..3ebce0b9 --- /dev/null +++ b/modules/nf-core/gatk4/mergevcfs/meta.yml @@ -0,0 +1,48 @@ +name: gatk4_mergevcfs +description: Merges several vcf files +keywords: + - vcf + - merge +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'] + - vcf: + type: list + description: Two or more VCF files + pattern: "*.{vcf,vcf.gz}" + - ref_dict: + type: file + description: Optional Sequence Dictionary as input + pattern: "*.dict" + - use_ref_dict: + type: boolean + description: Specify whether or not to use a given reference dictionary +output: + - vcf: + type: file + description: merged vcf file + pattern: "*.vcf.gz" + - tbi: + type: file + description: index files for the merged vcf files + pattern: "*.tbi" + + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf new file mode 100644 index 00000000..ad269b15 --- /dev/null +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -0,0 +1,47 @@ +process GATK4_VARIANTFILTRATION { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf), path(tbi) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK VariantFiltration] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.toGiga() + } + """ + gatk --java-options "-Xmx${avail_mem}G" VariantFiltration \\ + --variant $vcf \\ + --output ${prefix}.vcf.gz \\ + --reference $fasta \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/variantfiltration/meta.yml b/modules/nf-core/gatk4/variantfiltration/meta.yml new file mode 100644 index 00000000..04b1c086 --- /dev/null +++ b/modules/nf-core/gatk4/variantfiltration/meta.yml @@ -0,0 +1,56 @@ +name: gatk4_variantfiltration +description: Filter variants +keywords: + - vcf + - filter +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'] + - vcf: + type: list + description: List of VCF(.gz) files + pattern: "*.{vcf,vcf.gz}" + - vcf_tbi: + type: list + description: List of VCF file indexes + pattern: "*.{idx,tbi}" + - fasta: + type: file + description: Fasta file of reference genome + pattern: "*.fasta" + - fai: + type: file + description: Index of fasta file + pattern: "*.fasta.fai" + - dict: + type: file + description: Sequence dictionary of fastea file + pattern: "*.dict" +output: + - vcf: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - tbi: + type: file + description: Index of VCF file + pattern: "*.vcf.gz.tbi" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/haplogrep2/classify/main.nf b/modules/nf-core/haplogrep2/classify/main.nf new file mode 100644 index 00000000..c49cb957 --- /dev/null +++ b/modules/nf-core/haplogrep2/classify/main.nf @@ -0,0 +1,49 @@ +process HAPLOGREP2_CLASSIFY { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::haplogrep=2.4.0" : null) + 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' }" + + input: + tuple val(meta), path(inputfile) + val(format) + + output: + tuple val(meta), path("*.txt"), emit: txt + 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}" + """ + haplogrep \\ + classify \\ + $args \\ + --in $inputfile \\ + --out ${prefix}.txt \\ + --format $format + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + haplogrep2: \$(echo \$(haplogrep --version 2>&1) | (sed 's/htt.*//') | (sed 's/.*v//')) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + haplogrep2: \$(echo \$(haplogrep --version 2>&1) | (sed 's/htt.*//') | (sed 's/.*v//')) + END_VERSIONS + """ + +} diff --git a/modules/nf-core/haplogrep2/classify/meta.yml b/modules/nf-core/haplogrep2/classify/meta.yml new file mode 100644 index 00000000..b4c2ec66 --- /dev/null +++ b/modules/nf-core/haplogrep2/classify/meta.yml @@ -0,0 +1,43 @@ +name: "haplogrep2_classify" +description: classification into haplogroups +keywords: + - haplogroups. +tools: + - "haplogrep2": + description: "A tool for mtDNA haplogroup classification." + homepage: "https://github.com/seppinho/haplogrep-cmd" + documentation: "https://github.com/seppinho/haplogrep-cmd" + tool_dev_url: "https://github.com/seppinho/haplogrep-cmd" + doi: "" + licence: "['MIT']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - inputfile: + type: file + description: valid options are hsd, vcf, or fasta files + pattern: "*.{vcf,vcf.gz,fasta,hsd}" + - format: + type: stringformat of file either vcf fasta or hsd + +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" + - txt: + type: file + description: text file with classification information + pattern: "*.{txt}" + +authors: + - "@lucpen" diff --git a/modules/nf-core/hmtnote/main.nf b/modules/nf-core/hmtnote/main.nf new file mode 100644 index 00000000..a1796924 --- /dev/null +++ b/modules/nf-core/hmtnote/main.nf @@ -0,0 +1,45 @@ +process HMTNOTE { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::hmtnote=0.7.2" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/hmtnote:0.7.2--pyhdfd78af_0': + 'quay.io/biocontainers/hmtnote:0.7.2--pyhdfd78af_0' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*_annotated.vcf"), 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}" + + """ + hmtnote \\ + annotate \\ + $vcf \\ + ${prefix}_annotated.vcf \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) + END_VERSIONS + """ + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_annotated.vcf + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/hmtnote/meta.yml b/modules/nf-core/hmtnote/meta.yml new file mode 100644 index 00000000..92b4be1b --- /dev/null +++ b/modules/nf-core/hmtnote/meta.yml @@ -0,0 +1,39 @@ +name: hmtnote +description: Human mitochondrial variants annotation using HmtVar. +keywords: + - hmtnote mitochondria annotation +tools: + - hmtnote: + description: Human mitochondrial variants annotation using HmtVar. + homepage: https://github.com/robertopreste/HmtNote + documentation: https://hmtnote.readthedocs.io/en/latest/usage.html + tool_dev_url: None + doi: "https://doi.org/10.1101/600619" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + - vcf: + type: file + description: vcf file + pattern: "*.vcf" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: annotated vcf + pattern: "*_annotated.vcf" + +authors: + - "@sysbiocoder" diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf index 334f68b0..d4f6be95 100644 --- a/modules/nf-core/picard/liftovervcf/main.nf +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -14,9 +14,9 @@ process PICARD_LIFTOVERVCF { path fasta output: - tuple val(meta), path("*lifted.vcf.gz") , emit: vcf_lifted - tuple val(meta), path("*unlifted.vcf.gz"), emit: vcf_unlifted - path "versions.yml" , emit: versions + tuple val(meta), path("*.lifted.vcf.gz") , emit: vcf_lifted + tuple val(meta), path("*.unlifted.vcf.gz"), emit: vcf_unlifted + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf new file mode 100644 index 00000000..da492b0d --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/main.nf @@ -0,0 +1,56 @@ + +process PICARD_RENAMESAMPLEINVCF { + tag "$meta.id" + label 'process_single' + + conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def extended_args = args.contains("--NEW_SAMPLE_NAME") ? $args : "${args} --NEW_SAMPLE_NAME ${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard RenameSampleInVcf] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + + """ + picard \\ + RenameSampleInVcf \\ + -Xmx${avail_mem}g \\ + --INPUT $vcf \\ + --OUTPUT ${prefix}_renam.vcf.gz \\ + $extended_args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard RenameSampleInVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_renam.vcf.gz + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard RenameSampleInVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/picard/renamesampleinvcf/meta.yml b/modules/nf-core/picard/renamesampleinvcf/meta.yml new file mode 100644 index 00000000..8f3ed6b4 --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/meta.yml @@ -0,0 +1,44 @@ +name: "picard_renamesampleinvcf" +description: changes name of sample in the vcf file +keywords: + - picard + - picard/renamesampleinvcf +tools: + - "picard": + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + tool_dev_url: "https://github.com/broadinstitute/picard" + doi: "" + licence: "['MIT']" + +input: + - 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" + - vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + +authors: + - "@Lucpen" From 1133d903cb022b96a166acd21b13460223ccdf91 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 10:23:26 +0100 Subject: [PATCH 0747/1921] feat added local module to change file name --- modules/local/change_name.nf | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 modules/local/change_name.nf diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf new file mode 100644 index 00000000..ea8b8869 --- /dev/null +++ b/modules/local/change_name.nf @@ -0,0 +1,36 @@ +process CHANGE_NAME { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.9--1' : + 'quay.io/biocontainers/python:3.9--1' }" + + input: + tuple val(meta), path(input_file) + + output: + tuple val(meta), path( "*.${file_type}"), emit: file + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + file_type = task.ext.file_type ?: input_file.getExtension() + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + mv \\ + $input_file \\ + ${meta.id}.${file_type} + """ + + stub: + def args = task.ext.args ?: '' + file_type = task.ext.file_type ?: input_file.getExtension() + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.${file_type} + """ +} \ No newline at end of file From 5b8b63ca8ac68007749b727b88294cc22bb8e8b9 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 12:29:19 +0100 Subject: [PATCH 0748/1921] feat updated align_and_call_MT --- subworkflows/local/align_and_call_MT.nf | 34 +++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index bf0339f2..c2c1b39a 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -10,6 +10,9 @@ include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } fr include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/samtools/sort/main' include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' 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 { PICARD_RENAMESAMPLEINVCF as PICARD_RENAMESAMPLEINVCF_MT } from '../../modules/nf-core/picard/renamesampleinvcf/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' workflow ALIGN_AND_CALL_MT { take: @@ -62,11 +65,32 @@ workflow ALIGN_AND_CALL_MT { HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + // Filter Mutect2 calls + ch_mutect_tbi = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) + ch_mutect_out = ch_mutect_tbi.join(GATK4_MUTECT2_MT.out.stats, by: [0]) + ch_to_filt = ch_mutect_out.map { + meta, vcf, tbi, stats -> + return [meta, vcf, tbi, stats, [], [], [], []]} + GATK4_FILTERMUTECTCALLS_MT( ch_to_filt, + fasta, + fai, + dict ) + ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) + + // Replace within the vcf sample as a sample name with meta.id + PICARD_RENAMESAMPLEINVCF_MT(GATK4_FILTERMUTECTCALLS_MT.out.vcf) + ch_versions = ch_versions.mix(PICARD_RENAMESAMPLEINVCF_MT.out.versions.first()) + + TABIX_TABIX_MT(PICARD_RENAMESAMPLEINVCF_MT.out.vcf) + ch_versions = ch_versions.mix(TABIX_TABIX_MT.out.versions.first()) + emit: - vcf = GATK4_MUTECT2_MT.out.vcf - tbi = GATK4_MUTECT2_MT.out.tbi - txt = HAPLOCHECK_MT.out.txt - html = HAPLOCHECK_MT.out.html - versions = ch_versions // channel: [ versions.yml ] + vcf = PICARD_RENAMESAMPLEINVCF_MT.out.vcf + tbi = TABIX_TABIX_MT.out.tbi + stats = GATK4_MUTECT2_MT.out.stats + filt_sats = GATK4_FILTERMUTECTCALLS_MT.out.stats + txt = HAPLOCHECK_MT.out.txt + html = HAPLOCHECK_MT.out.html + versions = ch_versions } From 9a7241c97e95bbe7f73c3f7c70948a86d1b018ab Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 12:31:55 +0100 Subject: [PATCH 0749/1921] feat updated reference names --- subworkflows/local/align_and_call_MT.nf | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index c2c1b39a..db045dc9 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -18,23 +18,23 @@ workflow ALIGN_AND_CALL_MT { take: fastq // channel: [ val(meta), path('*.fastq.gz') ] ubam // channel: [ val(meta), path('*.bam') ] - index // channel: [ /path/to/bwamem2/index/ ] - fasta // channel: [ genome.fasta ] - dict // channel: [ genome.dict ] - fai // channel: [ genome.fai ] + genome_index // channel: [ /path/to/bwamem2/index/ ] + genome_fasta // channel: [ genome.fasta ] + genome_dict // channel: [ genome.dict ] + genome_fai // channel: [ genome.fai ] intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] main: ch_versions = Channel.empty() // Outputs bam files - BWAMEM2_MEM_MT ( fastq , index, true) + BWAMEM2_MEM_MT ( fastq , genome_index, true) ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) ch_mt_bam = BWAMEM2_MEM_MT.out.bam ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) // Merges bam files - GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, fasta, dict ) + GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, genome_fasta, genome_dict ) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) // Add read group to merged bam file @@ -42,7 +42,7 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) // Marks duplicates - PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, fasta, fai ) + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, genome_fasta, genome_fai ) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) // Sort bam file @@ -56,7 +56,7 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) // Calls variants with Mutect2 - GATK4_MUTECT2_MT (ch_sort_index_bam_intervals_mt, fasta, fai, dict, [], [], [],[]) + GATK4_MUTECT2_MT (ch_sort_index_bam_intervals_mt, genome_fasta, genome_fai, genome_dict, [], [], [],[]) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) // Haplocheck @@ -72,9 +72,9 @@ workflow ALIGN_AND_CALL_MT { meta, vcf, tbi, stats -> return [meta, vcf, tbi, stats, [], [], [], []]} GATK4_FILTERMUTECTCALLS_MT( ch_to_filt, - fasta, - fai, - dict ) + genome_fasta, + genome_fai, + genome_dict ) ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) // Replace within the vcf sample as a sample name with meta.id From 9146c7f4fe8412280cf5543c69563c283e75b6c6 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 12:39:28 +0100 Subject: [PATCH 0750/1921] feat added merge_annotate_MT sw --- subworkflows/local/merge_annotate_MT.nf | 124 ++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 subworkflows/local/merge_annotate_MT.nf diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf new file mode 100644 index 00000000..3851ea4f --- /dev/null +++ b/subworkflows/local/merge_annotate_MT.nf @@ -0,0 +1,124 @@ +// +// Merge and annotate MT +// + +include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../modules/nf-core/gatk4/mergevcfs/main' +include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../modules/nf-core/gatk4/variantfiltration/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' +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 { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../modules/local/change_name_vcf' +include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../modules/nf-core/bcftools/merge/main' +include { HMTNOTE as HMTNOTE_MT } from '../../modules/nf-core/hmtnote/main' +include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../modules/nf-core/tabix/tabix/main' +include { ENSEMBLVEP as ENSEMBLVEP_MT } from '../../modules/nf-core/ensemblvep/main' +include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../modules/nf-core/haplogrep2/classify/main' + +workflow MERGE_ANNOTATE_MT { + take: + vcf1 // channel: [ val(meta), path('*.vcf.gz') ] + vcf2 // channel: [ val(meta), path('*.vcf.gz') ] + genome_fasta // channel: [ genome.fasta ] + genome_dict // channel: [ genome.dict ] + genome_fai // channel: [ genome.fai ] + vep_genome + vep_cache_version + vep_cache + case_info // channel: [ val(case_info) ] + vep_genome + vep_cache_version + vep_cache + + main: + ch_versions = Channel.empty() + + ch_vcfs = vcf1 + .join(vcf2, remainder: true) + .map{ meta, vcf1, vcf2 -> + [meta, [vcf1, vcf2]] + } + + GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, genome_dict) + ch_versions = ch_versions.mix(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.versions.first()) + + // Filtering Variants + ch_filt_vcf = GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf.join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, by:[0]) + GATK4_VARIANTFILTRATION_MT(ch_filt_vcf, + genome_fasta, + genome_fai, + genome_dict) + ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) + + // Spliting multiallelic calls + ch_in_split=GATK4_VARIANTFILTRATION_MT.out.vcf.join( GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) + SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions) + + TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) + ch_in_remdup = SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi) + + // Removing duplicates and merging if there is more than one sample + REMOVE_DUPLICATES_MT(ch_in_remdup, genome_fasta) + TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_MT.out.versions) + + REMOVE_DUPLICATES_MT.out.vcf + .collect{it[1]} + .toList() + .set { file_list } + + TABIX_TABIX_MT2.out.tbi + .collect{it[1]} + .toList() + .set { file_list2 } + + case_info + .combine(file_list) + .combine(file_list2) + .set { ch_br } + + ch_br.branch { + meta, vcf, tbi -> + single: vcf.size() == 1 + return [meta, vcf] + multiple: vcf.size() > 1 + return [meta, vcf, tbi] + }.set { ch_dedup_vcf } + + BCFTOOLS_MERGE_MT( ch_dedup_vcf.multiple, + [], + genome_fasta, + genome_fai) + ch_mer_vcf=BCFTOOLS_MERGE_MT.out.merged_variants + ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) + + ch_ch_n=CHANGE_NAME_VCF_MT(ch_dedup_vcf.single) + ch_in_vep=ch_mer_vcf.mix(ch_dedup_vcf.single) + + // Annotating with Hmtnote + //HMTNOTE_MT(ch_in_vep) + //ch_versions = ch_versions.mix(HMTNOTE_MT.out.versions.first()) + + // Annotating with ensembl Vep + ENSEMBLVEP_MT( ch_in_vep, + vep_genome, + "homo_sapiens", + vep_cache_version, + vep_cache, + genome_fasta, + []) + ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) + + // Running haplogrep2 + TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf) + HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") + ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) + + emit: + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt + vcf = ENSEMBLVEP_MT.out.vcf_gz + tbi = TABIX_TABIX_MT3.out.tbi + report = ENSEMBLVEP_MT.out.report + versions = ch_versions // channel: [ versions.yml ] +} \ No newline at end of file From 8f66099d3ba3e8674e5adea3c56173e21cd4d550 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 12:40:19 +0100 Subject: [PATCH 0751/1921] feat updated analyse_MT --- subworkflows/local/analyse_MT.nf | 45 ++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index bece2ea4..2cf672e5 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -5,6 +5,7 @@ include { CONVERT_MT_BAM_TO_FASTQ } from './convert_mt_ba include { ALIGN_AND_CALL_MT } from './align_and_call_MT' include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' +include { MERGE_ANNOTATE_MT } from './merge_annotate_MT' workflow ANALYSE_MT { take: @@ -20,6 +21,10 @@ workflow ANALYSE_MT { shift_mt_fai // channel: [ genome.fai ] shift_mt_intervals // channel: [ file(control_region_shifted.chrM.interval_list) ] shift_mt_backchain // channel: [ file(shift.back_chain) ] + vep_genome + vep_cache_version + vep_cache + case_info // channel: [ val(case_info) ] main: ch_versions = Channel.empty() @@ -59,18 +64,36 @@ workflow ANALYSE_MT { genome_fasta) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) + // STEP 3: MT MERGE AND ANNOTATE VARIANTS + MERGE_ANNOTATE_MT( + ALIGN_AND_CALL_MT.out.vcf, + PICARD_LIFTOVERVCF.out.vcf_lifted, + genome_fasta, + genome_dict, + genome_fai, + vep_genome, + vep_cache_version, + vep_cache, + case_info + ) + ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: - vcf = ALIGN_AND_CALL_MT.out.vcf - tbi = ALIGN_AND_CALL_MT.out.tbi - txt = ALIGN_AND_CALL_MT.out.txt - html = ALIGN_AND_CALL_MT.out.html - vcf_shift = ALIGN_AND_CALL_MT_SHIFT.out.vcf - tbi_shift = ALIGN_AND_CALL_MT_SHIFT.out.tbi - txt_shift = ALIGN_AND_CALL_MT_SHIFT.out.txt - html_shift = ALIGN_AND_CALL_MT_SHIFT.out.html - vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted - vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted + vcf = MERGE_ANNOTATE_MT.out.vcf + tbi = MERGE_ANNOTATE_MT.out.tbi + stats = ALIGN_AND_CALL_MT.out.stats + filt_sats = ALIGN_AND_CALL_MT.out.filt_sats + stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats + filt_sats_sh = ALIGN_AND_CALL_MT_SHIFT.out.filt_sats + haplog = MERGE_ANNOTATE_MT.out.haplog + report = MERGE_ANNOTATE_MT.out.report + txt = ALIGN_AND_CALL_MT.out.txt + html = ALIGN_AND_CALL_MT.out.html +// vcf_shift = ALIGN_AND_CALL_MT_SHIFT.out.vcf +// tbi_shift = ALIGN_AND_CALL_MT_SHIFT.out.tbi + txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt + html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html +// vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted +// vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted versions = ch_versions // channel: [ versions.yml ] - } From af99b0007992b3e8c3040d2276c5171e0b0963a1 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 13:02:53 +0100 Subject: [PATCH 0752/1921] feat adding parameters to analyse_MT --- workflows/raredisease.nf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 43c983b5..5077e361 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -348,7 +348,11 @@ workflow RAREDISEASE { ch_sequence_dictionary_mt_shift, ch_mt_shift_fai, ch_mt_intervals_shift, - ch_mt_backchain_shift + ch_mt_backchain_shift, + params.genome, + params.vep_cache_version, + ch_vep_cache, + CHECK_INPUT.out.case_info ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) From 2878d43cfe40c7a07364440ed13a564aafae0fad Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 13:03:37 +0100 Subject: [PATCH 0753/1921] fix removed extra space --- subworkflows/local/call_snv.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 8af1eb4d..82a0c216 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -13,7 +13,7 @@ workflow CALL_SNV { fai // channel: [genome.fai] known_dbsnp // channel: [ /path/to/known_dbsnp ] known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] - call_interval // channel: [ /path/to/call_intervals ] + call_interval // channel: [ /path/to/call_intervals ] ml_model // channel: [ /path/to/ml_model ] case_info // channel: [ case_id ] From d6bfaeed99bdd2dc95ceebefcc9188b601bf1c6d Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 13:14:02 +0100 Subject: [PATCH 0754/1921] fix changed name of module and added configs for filtermutect --- conf/modules.config | 6 +++++- subworkflows/local/merge_annotate_MT.nf | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 318668f0..9c9fbc6e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -806,6 +806,10 @@ process { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { + ext.prefix = { "${meta.id}_filtered" } + } } // @@ -845,7 +849,7 @@ process { ext.args = '--mitochondria-mode TRUE' } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { ext.prefix = { "${meta.id}_filtered" } } } diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 3851ea4f..7186db6e 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -8,7 +8,7 @@ include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../m include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' 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 { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../modules/local/change_name_vcf' +include { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../modules/local/change_name' include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../modules/nf-core/bcftools/merge/main' include { HMTNOTE as HMTNOTE_MT } from '../../modules/nf-core/hmtnote/main' include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../modules/nf-core/tabix/tabix/main' From 14bd5dcc8322416416ebf00103cd821570355616 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Nov 2022 13:26:27 +0100 Subject: [PATCH 0755/1921] update tiddit --- modules/nf-core/tiddit/cov/main.nf | 6 +++--- modules/nf-core/tiddit/sv/main.nf | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf index 4d7e2827..a0a79523 100644 --- a/modules/nf-core/tiddit/cov/main.nf +++ b/modules/nf-core/tiddit/cov/main.nf @@ -2,10 +2,10 @@ process TIDDIT_COV { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::tiddit=3.0.0" : null) + conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tiddit:3.0.0--py39h59fae87_1' : - 'quay.io/biocontainers/tiddit:3.0.0--py39h59fae87_1' }" + 'https://depot.galaxyproject.org/singularity/tiddit:3.3.2--py310hc2b7f4b_0' : + 'quay.io/biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 2e876ef1..7faefa99 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -2,15 +2,15 @@ process TIDDIT_SV { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::tiddit=3.1.0" : null) + conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tiddit:3.1.0--py39h59fae87_1' : - 'quay.io/biocontainers/tiddit:3.1.0--py39h59fae87_1' }" + 'https://depot.galaxyproject.org/singularity/tiddit:3.3.2--py310hc2b7f4b_0' : + 'quay.io/biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" input: tuple val(meta), path(input), path(input_index) - path fasta - path bwa_index + tuple val(meta2), path(fasta) + tuple val(meta3), path(bwa_index) output: tuple val(meta), path("*.vcf") , emit: vcf From b9ba65b20564f425202cb140e2b7c133c4f7b830 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 13:52:02 +0100 Subject: [PATCH 0756/1921] fix naming output file --- conf/modules.config | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9c9fbc6e..85f0812e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -825,7 +825,7 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged" } + ext.prefix = { "${meta.id}_merged_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { @@ -836,12 +836,12 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates" } + ext.prefix = { "${meta.id}_markduplicates__shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } - ext.prefix = { "${meta.id}_sorted" } + ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { @@ -849,8 +849,14 @@ process { ext.args = '--mitochondria-mode TRUE' } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:HAPLOCHECK_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } + ext.prefix = { "${meta.id}_shifted" } + } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { - ext.prefix = { "${meta.id}_filtered" } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } + ext.prefix = { "${meta.id}_filtered__shifted" } } } From 74476f343c5fe921dfcb293db377ecf51f88a250 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Nov 2022 13:53:17 +0100 Subject: [PATCH 0757/1921] update subworkflows --- subworkflows/nf-core/call_structural_variants.nf | 9 +++++---- subworkflows/nf-core/call_sv_tiddit.nf | 5 ++--- workflows/raredisease.nf | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 6b78d56b..51db5d0e 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -13,7 +13,8 @@ workflow CALL_STRUCTURAL_VARIANTS { bam // channel: [ val(meta), path(bam) ] bai // channel: [ val(meta), path(bai) ] bwa_index // channel: [ val(meta), path(bwa_index)] - fasta // channel: [ path(genome.fasta) ] + fasta_no_meta // channel: [ path(genome.fasta) ] + fasta_meta // channel: [ val(meta), path(genome.fasta) ] fai // channel: [ path(genome.fai) ] case_info // channel: [ val(case_info) ] target_bed // channel: [ path(target.bed) ] @@ -23,7 +24,7 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = Channel.empty() //manta - CALL_SV_MANTA ( bam, bai, fasta, fai, case_info, target_bed ) + CALL_SV_MANTA ( bam, bai, fasta_no_meta, fai, case_info, target_bed ) .diploid_sv_vcf .collect{it[1]} .set{ manta_vcf } @@ -31,14 +32,14 @@ workflow CALL_STRUCTURAL_VARIANTS { //tiddit ch_tiddit_bam = bam.join(bai) - CALL_SV_TIDDIT ( ch_tiddit_bam, fasta, bwa_index, case_info ) + CALL_SV_TIDDIT ( ch_tiddit_bam, fasta_meta, bwa_index, case_info ) .vcf .collect{it[1]} .set { tiddit_vcf } ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) //cnvpytor - CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta, fai) + CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta_no_meta, fai) .candidate_cnvs_vcf .collect{it[1]} .set {cnvpytor_vcf } diff --git a/subworkflows/nf-core/call_sv_tiddit.nf b/subworkflows/nf-core/call_sv_tiddit.nf index f4de6b5b..2dde0c31 100644 --- a/subworkflows/nf-core/call_sv_tiddit.nf +++ b/subworkflows/nf-core/call_sv_tiddit.nf @@ -9,13 +9,12 @@ include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../modules/nf-core/svdb/mer workflow CALL_SV_TIDDIT { take: bam // channel: [ val(meta), path(bam) ] - fasta // path(fasta) + fasta // channel: [ val(meta), path(fasta) ] index // [ val(meta), path(bwa_index)] case_info // channel: [ case_id ] main: - index_for_tiddit = index.map { meta, ind -> ind } - TIDDIT_SV ( bam, fasta, index_for_tiddit ) + TIDDIT_SV ( bam, fasta, index ) ch_versions = TIDDIT_SV.out.versions TIDDIT_SV.out diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7cdc31e5..4d44e0f5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -281,6 +281,7 @@ workflow RAREDISEASE { ch_mapped.marked_bai, ch_bwa_index, ch_genome_fasta_no_meta, + ch_genome_fasta_meta, ch_genome_fai, CHECK_INPUT.out.case_info, ch_target_bed, From 8df1d15c1a6f1e814f918d60f6ddb46c9f1a304a Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 14:03:01 +0100 Subject: [PATCH 0758/1921] fix whitespaces --- conf/modules.config | 6 +++--- modules/local/change_name.nf | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 85f0812e..04b2a148 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -808,8 +808,8 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { - ext.prefix = { "${meta.id}_filtered" } - } + ext.prefix = { "${meta.id}_filtered" } + } } // @@ -857,7 +857,7 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_filtered__shifted" } - } + } } // diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf index ea8b8869..3a194c04 100644 --- a/modules/local/change_name.nf +++ b/modules/local/change_name.nf @@ -19,7 +19,7 @@ process CHANGE_NAME { def args = task.ext.args ?: '' file_type = task.ext.file_type ?: input_file.getExtension() def prefix = task.ext.prefix ?: "${meta.id}" - + """ mv \\ $input_file \\ From a87e169064b587ef5981293cfe136e9e732e1035 Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 14:05:13 +0100 Subject: [PATCH 0759/1921] fix empty line at end --- modules/local/change_name.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf index 3a194c04..63badda9 100644 --- a/modules/local/change_name.nf +++ b/modules/local/change_name.nf @@ -33,4 +33,4 @@ process CHANGE_NAME { """ touch ${prefix}.${file_type} """ -} \ No newline at end of file +} From 0fa526cf3c1a97bc074f1d2cba882153c255bac2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:11:06 +0100 Subject: [PATCH 0760/1921] remove mods --- modules.json | 8 ----- modules/nf-core/tiddit/cov/main.nf | 51 -------------------------- modules/nf-core/tiddit/cov/meta.yml | 52 --------------------------- modules/nf-core/tiddit/sv/main.nf | 55 ----------------------------- modules/nf-core/tiddit/sv/meta.yml | 55 ----------------------------- 5 files changed, 221 deletions(-) delete mode 100644 modules/nf-core/tiddit/cov/main.nf delete mode 100644 modules/nf-core/tiddit/cov/meta.yml delete mode 100644 modules/nf-core/tiddit/sv/main.nf delete mode 100644 modules/nf-core/tiddit/sv/meta.yml diff --git a/modules.json b/modules.json index 281dd436..fb21310b 100644 --- a/modules.json +++ b/modules.json @@ -209,14 +209,6 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, - "tiddit/cov": { - "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" - }, - "tiddit/sv": { - "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" - }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf deleted file mode 100644 index a0a79523..00000000 --- a/modules/nf-core/tiddit/cov/main.nf +++ /dev/null @@ -1,51 +0,0 @@ -process TIDDIT_COV { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) - 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' }" - - input: - tuple val(meta), path(input) - path fasta - - output: - tuple val(meta), path("*.bed"), optional: true, emit: cov - tuple val(meta), path("*.wig"), optional: true, emit: wig - 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 ? "--ref $fasta" : "" - """ - tiddit \\ - --cov \\ - -o $prefix \\ - $args \\ - --bam $input \\ - $reference - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.wig - touch ${prefix}.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml deleted file mode 100644 index 98ea27c2..00000000 --- a/modules/nf-core/tiddit/cov/meta.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: tiddit_cov -description: Computes the coverage of different regions from the bam file. -keywords: - - coverage - - bam - - statistics - - chromosomal rearrangements -tools: - - tiddit: - description: TIDDIT - structural variant calling. - homepage: https://github.com/SciLifeLab/TIDDIT - documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md - doi: "10.12688/f1000research.11168.1" - licence: ["GPL v3"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - fasta: - type: file - description: | - Reference genome file. Only needed when passing in CRAM instead of BAM. - If not using CRAM, please pass an empty file instead. - pattern: "*.fasta" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - cov: - type: file - description: The coverage of different regions. Optional. - pattern: "*.tab" - - wig: - type: file - description: The coverage of different regions in WIG format. Optional. - pattern: "*.wig" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@projectoriented" diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf deleted file mode 100644 index 7faefa99..00000000 --- a/modules/nf-core/tiddit/sv/main.nf +++ /dev/null @@ -1,55 +0,0 @@ -process TIDDIT_SV { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) - 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' }" - - input: - tuple val(meta), path(input), path(input_index) - tuple val(meta2), path(fasta) - tuple val(meta3), path(bwa_index) - - output: - tuple val(meta), path("*.vcf") , emit: vcf - tuple val(meta), path("*.ploidies.tab"), emit: ploidy - 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 bwa_command = bwa_index ? "[[ -d $bwa_index ]] && for i in $bwa_index/*; do [[ -f $fasta && ! \"\$i\" =~ .*\"$fasta\".* ]] && ln -s \$i ${fasta}.\${i##*.} || ln -s \$i .; done" : "" - - """ - $bwa_command - - tiddit \\ - --sv \\ - $args \\ - --bam $input \\ - --ref $fasta \\ - -o $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.vcf - touch ${prefix}.ploidies.tab - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml deleted file mode 100644 index 8b41c69c..00000000 --- a/modules/nf-core/tiddit/sv/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: tiddit_sv -description: Identify chromosomal rearrangements. -keywords: - - structural - - variants - - vcf -tools: - - sv: - description: Search for structural variants. - homepage: https://github.com/SciLifeLab/TIDDIT - documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md - doi: 10.12688/f1000research.11168.1 - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - index: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" - - fasta: - type: file - description: Input FASTA file - pattern: "*.{fasta,fa}" - - bwa_index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: vcf - pattern: "*.{vcf}" - - ploidy: - type: file - description: tab - pattern: "*.{ploidies.tab}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@maxulysse" From 0b5643f7e3f92b2c74c7ef3deec636062e648e6d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:12:01 +0100 Subject: [PATCH 0761/1921] add mods --- modules.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules.json b/modules.json index fb21310b..9ec7ddef 100644 --- a/modules.json +++ b/modules.json @@ -209,6 +209,14 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, + "tiddit/cov": { + "branch": "master", + "git_sha": "3a54013f0790674624b77e9a074ce8d22400d4fa" + }, + "tiddit/sv": { + "branch": "master", + "git_sha": "89f98091ac9e1653657b9e324e394b158d723a4f" + }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" From 9667a760f2ffc051faceaa130f712a4790921bc9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:14:37 +0100 Subject: [PATCH 0762/1921] add tiddit mods --- modules/nf-core/tiddit/cov/main.nf | 51 ++++++++++++++++++++++++++ modules/nf-core/tiddit/cov/meta.yml | 52 +++++++++++++++++++++++++++ modules/nf-core/tiddit/sv/main.nf | 55 +++++++++++++++++++++++++++++ modules/nf-core/tiddit/sv/meta.yml | 55 +++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 modules/nf-core/tiddit/cov/main.nf create mode 100644 modules/nf-core/tiddit/cov/meta.yml create mode 100644 modules/nf-core/tiddit/sv/main.nf create mode 100644 modules/nf-core/tiddit/sv/meta.yml diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf new file mode 100644 index 00000000..a0a79523 --- /dev/null +++ b/modules/nf-core/tiddit/cov/main.nf @@ -0,0 +1,51 @@ +process TIDDIT_COV { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) + 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' }" + + input: + tuple val(meta), path(input) + path fasta + + output: + tuple val(meta), path("*.bed"), optional: true, emit: cov + tuple val(meta), path("*.wig"), optional: true, emit: wig + 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 ? "--ref $fasta" : "" + """ + tiddit \\ + --cov \\ + -o $prefix \\ + $args \\ + --bam $input \\ + $reference + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.wig + touch ${prefix}.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml new file mode 100644 index 00000000..98ea27c2 --- /dev/null +++ b/modules/nf-core/tiddit/cov/meta.yml @@ -0,0 +1,52 @@ +name: tiddit_cov +description: Computes the coverage of different regions from the bam file. +keywords: + - coverage + - bam + - statistics + - chromosomal rearrangements +tools: + - tiddit: + description: TIDDIT - structural variant calling. + homepage: https://github.com/SciLifeLab/TIDDIT + documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md + doi: "10.12688/f1000research.11168.1" + licence: ["GPL v3"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - fasta: + type: file + description: | + Reference genome file. Only needed when passing in CRAM instead of BAM. + If not using CRAM, please pass an empty file instead. + pattern: "*.fasta" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - cov: + type: file + description: The coverage of different regions. Optional. + pattern: "*.tab" + - wig: + type: file + description: The coverage of different regions in WIG format. Optional. + pattern: "*.wig" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@projectoriented" diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf new file mode 100644 index 00000000..7faefa99 --- /dev/null +++ b/modules/nf-core/tiddit/sv/main.nf @@ -0,0 +1,55 @@ +process TIDDIT_SV { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) + 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' }" + + input: + tuple val(meta), path(input), path(input_index) + tuple val(meta2), path(fasta) + tuple val(meta3), path(bwa_index) + + output: + tuple val(meta), path("*.vcf") , emit: vcf + tuple val(meta), path("*.ploidies.tab"), emit: ploidy + 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 bwa_command = bwa_index ? "[[ -d $bwa_index ]] && for i in $bwa_index/*; do [[ -f $fasta && ! \"\$i\" =~ .*\"$fasta\".* ]] && ln -s \$i ${fasta}.\${i##*.} || ln -s \$i .; done" : "" + + """ + $bwa_command + + tiddit \\ + --sv \\ + $args \\ + --bam $input \\ + --ref $fasta \\ + -o $prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf + touch ${prefix}.ploidies.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tiddit: \$(echo \$(tiddit 2>&1) | sed 's/^.*tiddit-//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml new file mode 100644 index 00000000..8b41c69c --- /dev/null +++ b/modules/nf-core/tiddit/sv/meta.yml @@ -0,0 +1,55 @@ +name: tiddit_sv +description: Identify chromosomal rearrangements. +keywords: + - structural + - variants + - vcf +tools: + - sv: + description: Search for structural variants. + homepage: https://github.com/SciLifeLab/TIDDIT + documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md + doi: 10.12688/f1000research.11168.1 + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fasta,fa}" + - bwa_index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: vcf + pattern: "*.{vcf}" + - ploidy: + type: file + description: tab + pattern: "*.{ploidies.tab}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" From c608340e1d19908e8a67c8685cc0cbd4c455d3cb Mon Sep 17 00:00:00 2001 From: lucpen Date: Tue, 1 Nov 2022 14:53:11 +0100 Subject: [PATCH 0763/1921] fix merge_annotate_MT take --- subworkflows/local/merge_annotate_MT.nf | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 7186db6e..85e66d00 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -26,9 +26,6 @@ workflow MERGE_ANNOTATE_MT { vep_cache_version vep_cache case_info // channel: [ val(case_info) ] - vep_genome - vep_cache_version - vep_cache main: ch_versions = Channel.empty() @@ -47,7 +44,7 @@ workflow MERGE_ANNOTATE_MT { GATK4_VARIANTFILTRATION_MT(ch_filt_vcf, genome_fasta, genome_fai, - genome_dict) + genome_dict ) ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) // Spliting multiallelic calls From ecf58854ede454e9dab8b2825becb99fded718e5 Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 09:36:20 +0100 Subject: [PATCH 0764/1921] troubleshooting CI --- modules/nf-core/gatk4/variantfiltration/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index ad269b15..486b9a4b 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -38,7 +38,7 @@ process GATK4_VARIANTFILTRATION { --reference $fasta \\ --tmp-dir . \\ $args - + echo "$(ls -lh)" > /dev/stderr cat <<-END_VERSIONS > versions.yml "${task.process}": gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') From bdf0262ff1cd8215907d16cc3abf0deb2b1e8b7b Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 09:45:42 +0100 Subject: [PATCH 0765/1921] troubleshooting CI --- modules/nf-core/gatk4/variantfiltration/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index 486b9a4b..1770e482 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -38,7 +38,7 @@ process GATK4_VARIANTFILTRATION { --reference $fasta \\ --tmp-dir . \\ $args - echo "$(ls -lh)" > /dev/stderr + "ls -l".execute().text cat <<-END_VERSIONS > versions.yml "${task.process}": gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') From 8d43ec2ad162c9b49516fd5271f7d08ff878930b Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 09:56:43 +0100 Subject: [PATCH 0766/1921] troubleshooting CI --- modules/nf-core/gatk4/variantfiltration/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index 1770e482..c891db6a 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -38,7 +38,7 @@ process GATK4_VARIANTFILTRATION { --reference $fasta \\ --tmp-dir . \\ $args - "ls -l".execute().text + "ls -l".execute().text > /dev/stderr cat <<-END_VERSIONS > versions.yml "${task.process}": gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') From 51acd74ed5e88d5efc0ff9b44318dd90078e9e2d Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 10:14:43 +0100 Subject: [PATCH 0767/1921] troubleshooting CI --- modules/nf-core/gatk4/variantfiltration/main.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index c891db6a..9b121e14 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -32,13 +32,14 @@ process GATK4_VARIANTFILTRATION { avail_mem = task.memory.toGiga() } """ + "ls -l".execute().text > /dev/stderr gatk --java-options "-Xmx${avail_mem}G" VariantFiltration \\ --variant $vcf \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ --tmp-dir . \\ $args - "ls -l".execute().text > /dev/stderr + cat <<-END_VERSIONS > versions.yml "${task.process}": gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') From 5c28035bddd19e384396b37d06a59de3e1bc68a8 Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 10:39:14 +0100 Subject: [PATCH 0768/1921] troubleshooting CI --- modules/nf-core/gatk4/variantfiltration/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index 9b121e14..ad269b15 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -32,7 +32,6 @@ process GATK4_VARIANTFILTRATION { avail_mem = task.memory.toGiga() } """ - "ls -l".execute().text > /dev/stderr gatk --java-options "-Xmx${avail_mem}G" VariantFiltration \\ --variant $vcf \\ --output ${prefix}.vcf.gz \\ From c54a09c97cde18164e2a7b396fd5024a7883f67b Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 11:08:21 +0100 Subject: [PATCH 0769/1921] fix spacing --- subworkflows/local/analyse_MT.nf | 13 +++++------ subworkflows/local/merge_annotate_MT.nf | 30 ++++++++++++------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 2cf672e5..3efac41d 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -24,7 +24,7 @@ workflow ANALYSE_MT { vep_genome vep_cache_version vep_cache - case_info // channel: [ val(case_info) ] + case_info // channel: [ val(case_info) ] main: ch_versions = Channel.empty() @@ -58,10 +58,10 @@ workflow ANALYSE_MT { // STEP 2.3: PICARD_LIFTOVERVCF PICARD_LIFTOVERVCF ( - ALIGN_AND_CALL_MT_SHIFT.out.vcf, - genome_dict, - shift_mt_backchain, - genome_fasta) + ALIGN_AND_CALL_MT_SHIFT.out.vcf, + genome_dict, + shift_mt_backchain, + genome_fasta) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) // STEP 3: MT MERGE AND ANNOTATE VARIANTS @@ -74,8 +74,7 @@ workflow ANALYSE_MT { vep_genome, vep_cache_version, vep_cache, - case_info - ) + case_info) ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 85e66d00..961470a8 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -17,18 +17,18 @@ include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../m workflow MERGE_ANNOTATE_MT { take: - vcf1 // channel: [ val(meta), path('*.vcf.gz') ] - vcf2 // channel: [ val(meta), path('*.vcf.gz') ] - genome_fasta // channel: [ genome.fasta ] - genome_dict // channel: [ genome.dict ] - genome_fai // channel: [ genome.fai ] - vep_genome - vep_cache_version - vep_cache - case_info // channel: [ val(case_info) ] + vcf1 // channel: [ val(meta), path('*.vcf.gz') ] + vcf2 // channel: [ val(meta), path('*.vcf.gz') ] + genome_fasta // channel: [ genome.fasta ] + genome_dict // channel: [ genome.dict ] + genome_fai // channel: [ genome.fai ] + vep_genome + vep_cache_version + vep_cache + case_info // channel: [ val(case_info) ] main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() ch_vcfs = vcf1 .join(vcf2, remainder: true) @@ -51,10 +51,10 @@ workflow MERGE_ANNOTATE_MT { ch_in_split=GATK4_VARIANTFILTRATION_MT.out.vcf.join( GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions) - + TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) ch_in_remdup = SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi) - + // Removing duplicates and merging if there is more than one sample REMOVE_DUPLICATES_MT(ch_in_remdup, genome_fasta) TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) @@ -82,17 +82,17 @@ workflow MERGE_ANNOTATE_MT { multiple: vcf.size() > 1 return [meta, vcf, tbi] }.set { ch_dedup_vcf } - + BCFTOOLS_MERGE_MT( ch_dedup_vcf.multiple, [], genome_fasta, genome_fai) ch_mer_vcf=BCFTOOLS_MERGE_MT.out.merged_variants ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) - + ch_ch_n=CHANGE_NAME_VCF_MT(ch_dedup_vcf.single) ch_in_vep=ch_mer_vcf.mix(ch_dedup_vcf.single) - + // Annotating with Hmtnote //HMTNOTE_MT(ch_in_vep) //ch_versions = ch_versions.mix(HMTNOTE_MT.out.versions.first()) From fc5826c090b5f5796602bd3a2b540c749389149a Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 15:48:10 +0100 Subject: [PATCH 0770/1921] fix adding stub --- modules/nf-core/gatk4/variantfiltration/main.nf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index ad269b15..9365bfa8 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -39,6 +39,17 @@ process GATK4_VARIANTFILTRATION { --tmp-dir . \\ $args + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + cat <<-END_VERSIONS > versions.yml "${task.process}": gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') From f4108dce573a0f4c4dc326a8e9b709daaa7fc745 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Nov 2022 15:52:24 +0100 Subject: [PATCH 0771/1921] turn off cnvpytor --- bin/add_most_severe_consequence.py | 0 bin/add_most_severe_pli.py | 0 conf/genomes.config | 2 + main.nf | 1 + modules/local/add_most_severe_consequence.nf | 13 ++--- modules/local/add_most_severe_pli.nf | 43 +++++++++++++++++ modules/nf-core/svdb/query/main.nf | 47 +++++++++++-------- nextflow_schema.json | 7 +++ subworkflows/local/annotate_consequence.nf | 30 ------------ .../local/annotate_consequence_pli.nf | 29 ++++++++++++ .../local/annotate_structural_variants.nf | 37 +++++---------- workflows/raredisease.nf | 20 ++++---- 12 files changed, 140 insertions(+), 89 deletions(-) mode change 100644 => 100755 bin/add_most_severe_consequence.py mode change 100644 => 100755 bin/add_most_severe_pli.py create mode 100644 modules/local/add_most_severe_pli.nf delete mode 100644 subworkflows/local/annotate_consequence.nf create mode 100644 subworkflows/local/annotate_consequence_pli.nf diff --git a/bin/add_most_severe_consequence.py b/bin/add_most_severe_consequence.py old mode 100644 new mode 100755 diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py old mode 100644 new mode 100755 diff --git a/conf/genomes.config b/conf/genomes.config index 5b11a860..e21a05f8 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -29,6 +29,7 @@ params { mt_intervals = "" mt_intervals_shift = "" mt_sequence_dictionary_shift = "" + pli_per_gene = "" reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" @@ -62,6 +63,7 @@ params { mt_intervals = "${params.local_genomes}/non_control_region.chrM.interval_list" mt_intervals_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" mt_sequence_dictionary_shift = "" + pli_per_gene = "" reduced_penetrance = "" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" diff --git a/main.nf b/main.nf index 7335d481..ad557136 100644 --- a/main.nf +++ b/main.nf @@ -39,6 +39,7 @@ params.mt_fai_shift = WorkflowMain.getGenomeAttribute(params, 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.pli_per_gene = WorkflowMain.getGenomeAttribute(params, 'pli_per_gene') 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/local/add_most_severe_consequence.nf b/modules/local/add_most_severe_consequence.nf index 4d1397fb..ff99b76c 100644 --- a/modules/local/add_most_severe_consequence.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -10,11 +10,9 @@ process ADD_MOST_SEVERE_CSQ { input: tuple val(meta), path(vcf) path (variant_consequences) - path (pli_gene) output: - tuple val(meta), path("*.csq_pli.vcf") , emit: csq_pli_vcf - tuple val(meta), path("*.csq.vcf") , emit: csq_vcf + tuple val(meta), path("*_csq.vcf") , emit: vcf path "versions.yml" , emit: versions when: @@ -24,23 +22,22 @@ process ADD_MOST_SEVERE_CSQ { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - python3 add_most_severe_consequence.py --file_in ${vcf} --file_out ${prefix}.csq.vcf --variant_csq ${variant_consequences} - python3 add_most_severe_pli.py --file_in ${prefix}.csq.vcf --file_out ${prefix}.csq_pli.vcf --pli ${pli} + add_most_severe_consequence.py --file_in ${vcf} --file_out ${prefix}_csq.vcf --variant_csq ${variant_consequences} cat <<-END_VERSIONS > versions.yml "${task.process}": - add_most_severe_consequence_pli: v1.0 + add_most_severe_consequence: v1.0 END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.csq_pli.vcf + touch ${prefix}_csq.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": - add_most_severe_consequence_pli: v1.0 + add_most_severe_consequence: v1.0 END_VERSIONS """ } diff --git a/modules/local/add_most_severe_pli.nf b/modules/local/add_most_severe_pli.nf new file mode 100644 index 00000000..dc7d4a22 --- /dev/null +++ b/modules/local/add_most_severe_pli.nf @@ -0,0 +1,43 @@ +process ADD_MOST_SEVERE_PLI { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.9--1' : + 'quay.io/biocontainers/python:3.9--1' }" + + input: + tuple val(meta), path(vcf) + path (pli_gene) + + output: + tuple val(meta), path("*_pli.vcf") , 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}" + """ + add_most_severe_pli.py --file_in ${vcf} --file_out ${prefix}_pli.vcf --pli ${pli_gene} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + add_most_severe_pli: v1.0 + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_pli.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + add_most_severe_pli: v1.0 + END_VERSIONS + """ +} diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index ac9eead3..dbab5259 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -9,30 +9,39 @@ process SVDB_QUERY { input: tuple val(meta), path(vcf) - tuple val(in_occs), val(in_frqs), val(out_occs), val(out_frqs), path (vcf_dbs) - val(placeholder) + val(in_occs) + val(in_frqs) + val(out_occs) + val(out_frqs) + path (vcf_dbs) output: - tuple val(meta), path("*_query.vcf") , emit: vcf - tuple val(in_occs_rem), val(in_frqs_rem), val(out_occs_rem), val(out_frqs_rem), path (vcf_dbs_rem) , emit: vals - path "versions.yml" , emit: versions + tuple val(meta), path("*_query.vcf"), 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 in_occ = "--in_occ " + in_occs.head() - in_occs_rem = in_occs.tail() - def in_frq = "--in_frq " + in_frqs.head() - in_frqs_rem = in_frqs.tail() - def out_occ = "--out_occ " + out_occs.head() - out_occs_rem = out_occs.tail() - def out_frq = "--out_frq " + out_frqs.head() - out_frqs_rem = out_frqs.tail() - def vcf_db = vcf_dbs.head() - vcf_dbs_rem = vcf_dbs.tail() + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def in_occ = "" + def in_frq = "" + def out_occ = "" + def out_frq = "" + if (in_occs) { + in_occ = "--in_occ ${in_occs.join(',')}" + } + if (in_frqs) { + in_frq = "--in_frq ${in_frqs.join(',')}" + } + if (out_occs) { + out_occ = "--out_occ ${out_occs.join(',')}" + } + if (out_frqs) { + out_frq = "--out_frq ${out_frqs.join(',')}" + } + """ svdb \\ --query \\ @@ -41,9 +50,9 @@ process SVDB_QUERY { $out_occ \\ $out_frq \\ $args \\ - --db $vcf_db \\ + --db ${vcf_dbs.join(',')} \\ --query_vcf $vcf \\ - --prefix ${prefix}_${task.index} + --prefix ${prefix} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow_schema.json b/nextflow_schema.json index 4253f52c..47477439 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -214,6 +214,13 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, + "pli_per_gene": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-chart-bar", + "description": "File with gene ids and their corresponding pli values", + "hidden": true + }, "reduced_penetrance": { "type": "string", "format": "path", diff --git a/subworkflows/local/annotate_consequence.nf b/subworkflows/local/annotate_consequence.nf deleted file mode 100644 index da220c13..00000000 --- a/subworkflows/local/annotate_consequence.nf +++ /dev/null @@ -1,30 +0,0 @@ -// -// A subworkflow to call SNVs by sentieon dnascope with a machine learning model. -// - -include { ADD_MOST_SEVERE_CSQ as ADD_MOST_SEVERE_CSQ_CLIN } from '../../modules/local/add_most_severe_consequence' -include { ADD_MOST_SEVERE_CSQ as ADD_MOST_SEVERE_CSQ_RES } from '../../modules/local/add_most_severe_consequence' - -workflow ANNOTATE_CSQ { - take: - clinical // channel: [ val(meta), vcf ] - research // channel: [ val(meta), vcf ] - variant_consequences // path: consequences.txt - - main: - ch_versions = Channel.empty() - - ADD_MOST_SEVERE_CSQ_CLIN ( - clinical, - variant_consequences - ) - ADD_MOST_SEVERE_CSQ_RES ( - research, - variant_consequences - ) - - emit: - clinical_vcf = ADD_MOST_SEVERE_CSQ_CLIN.out.vcf - research_vcf = ADD_MOST_SEVERE_CSQ_RES.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] -} diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf new file mode 100644 index 00000000..b269a4a6 --- /dev/null +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -0,0 +1,29 @@ +// +// A subworkflow to call SNVs by sentieon dnascope with a machine learning model. +// + +include { ADD_MOST_SEVERE_CSQ } from '../../modules/local/add_most_severe_consequence' +include { ADD_MOST_SEVERE_PLI } from '../../modules/local/add_most_severe_pli' + +workflow ANNOTATE_CSQ_PLI { + take: + vcf // channel: [ val(meta), vcf ] + variant_consequences // path: consequences.txt + pli_gene // path: pli_per_gene.txt + + main: + ch_versions = Channel.empty() + + ADD_MOST_SEVERE_CSQ ( + vcf, + variant_consequences + ) + ADD_MOST_SEVERE_PLI ( + ADD_MOST_SEVERE_CSQ.out.vcf, + pli_gene + ) + + emit: + vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 2a37efdb..8d5c73a4 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -3,7 +3,6 @@ // include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' -include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/tabix/tabix/main' @@ -34,36 +33,26 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { } .set { ch_svdb_dbs } - ch_svdb_dbs.in_occs.toList() - .concat(ch_svdb_dbs.in_frqs.toList(), - ch_svdb_dbs.out_occs.toList(), - ch_svdb_dbs.out_frqs.toList(), - ch_svdb_dbs.vcf_dbs.toList()) - .toList() - .set { ch_dbs_in } - - vcf.collect().set {ch_vcf_in} - SVDB_QUERY - .recurse(ch_vcf_in, ch_dbs_in,[] ) - .until{ it -> it[1][1] == [] } - - SVDB_QUERY.out.vcf.groupTuple().set { ch_merge_in } - + SVDB_QUERY(vcf, + ch_svdb_dbs.in_occs.toList(), + ch_svdb_dbs.in_frqs.toList(), + ch_svdb_dbs.out_occs.toList(), + ch_svdb_dbs.out_frqs.toList(), + ch_svdb_dbs.vcf_dbs.toList() + ) ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) - SVDB_MERGE(ch_merge_in, []) - // PICARD_SORTVCF(SVDB_MERGE.out.vcf, - // fasta, - // seq_dict - // ) + PICARD_SORTVCF(SVDB_QUERY.out.vcf, + fasta, + seq_dict + ) + ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - // PICARD_SORTVCF.out.vcf - SVDB_MERGE.out.vcf + PICARD_SORTVCF.out.vcf .map { meta, vcf -> return [meta,vcf,[]] } .set { ch_sortvcf } - // ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c16ae94c..082dcb58 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -36,6 +36,7 @@ def checkPathParamList = [ params.mt_intervals_shift, params.mt_sequence_dictionary_shift, params.multiqc_config, + params.pli_per_gene, params.reduced_penetrance, params.score_config_snv, params.score_config_sv, @@ -90,8 +91,8 @@ include { MULTIQC } from '../modules/nf-core/multi include { ALIGN } from '../subworkflows/local/align' include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' -include { ANNOTATE_CSQ as ANN_CSQ_SNV } from '../subworkflows/local/annotate_consequence' -include { ANNOTATE_CSQ as ANN_CSQ_SV } from '../subworkflows/local/annotate_consequence' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { CALL_SNV } from '../subworkflows/local/call_snv' @@ -154,6 +155,8 @@ workflow RAREDISEASE { : Channel.value([]) ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() : Channel.value([]) + ch_pli_per_gene = params.pli_per_gene ? Channel.fromPath(params.pli_per_gene).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() @@ -317,8 +320,14 @@ workflow RAREDISEASE { ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) - RANK_VARIANTS_SV ( + ANN_CSQ_PLI_SV ( ch_sv_annotate.vcf_ann, + ch_variant_consequences, + ch_pli_per_gene + ) + + RANK_VARIANTS_SV ( + ANN_CSQ_PLI_SV.out.vcf_ann, MAKE_PED.out.ped, ch_reduced_penetrance, ch_score_config_sv @@ -330,11 +339,6 @@ workflow RAREDISEASE { ch_vep_filters ) - ANN_CSQ_SV ( - FILTER_VEP_SV.out.vcf, - RANK_VARIANTS_SV.out.vcf, - ch_variant_consequences - ) } ANALYSE_MT ( From bc94224448563066f28020dd71bbc28d9b8e4fca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Nov 2022 15:54:57 +0100 Subject: [PATCH 0772/1921] remove recursion --- main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/main.nf b/main.nf index ad557136..ef2c4a3d 100644 --- a/main.nf +++ b/main.nf @@ -11,7 +11,6 @@ */ nextflow.enable.dsl = 2 -nextflow.preview.recursion = true /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 09f30794a072da2ec3e73b66784f46dd56b7a015 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:07:44 +0100 Subject: [PATCH 0773/1921] fix CI errors --- .../nf-core/call_structural_variants.nf | 21 ++++++++++++------- workflows/raredisease.nf | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/nf-core/call_structural_variants.nf index 51db5d0e..3af80827 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/nf-core/call_structural_variants.nf @@ -39,23 +39,30 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) //cnvpytor - CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta_no_meta, fai) - .candidate_cnvs_vcf - .collect{it[1]} - .set {cnvpytor_vcf } - ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) + // CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta_no_meta, fai) + // .candidate_cnvs_vcf + // .collect{it[1]} + // .set {cnvpytor_vcf } + // ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) + + // //merge + // tiddit_vcf + // .combine(manta_vcf) + // .combine(cnvpytor_vcf) + // .toList() + // .set { vcf_list } //merge tiddit_vcf .combine(manta_vcf) - .combine(cnvpytor_vcf) .toList() .set { vcf_list } case_info.combine(vcf_list) .set { merge_input_vcfs } - SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta","cnvpytor"] ) + // SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta","cnvpytor"] ) + SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta"] ) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 082dcb58..95a575c3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -387,7 +387,7 @@ workflow RAREDISEASE { ch_vep_filters ) - ANN_CSQ_SNV ( + ANN_CSQ_PLI_SNV ( FILTER_VEP_SNV.out.vcf, RANK_VARIANTS_SNV.out.vcf, ch_variant_consequences From 71dab8ba61cf5f0d1408751dc965993f098cfffb Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 2 Nov 2022 16:39:36 +0100 Subject: [PATCH 0774/1921] feat added stubs by updating gatk4/variantfiltration --- conf/modules.config | 2 +- modules.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 04b2a148..51b93958 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -886,7 +886,7 @@ process { withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { ext.args = [ - '--plugin LoFtool,cache/Plugins/LoFtool_scores.txt', + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', '--distance 0', '--buffer_size 20000', '--format vcf --max_sv_size 16600', diff --git a/modules.json b/modules.json index b66cbc5a..4358163c 100644 --- a/modules.json +++ b/modules.json @@ -115,7 +115,7 @@ }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "c95bed5b125e90553814b8720875c8c663524619" }, "genmod/annotate": { "branch": "master", From 71afa79a7898eb875ef3c6abefc090070385493f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:47:40 +0100 Subject: [PATCH 0775/1921] Move subworkflows to from nf-core to local --- conf/modules.config | 4 ++-- subworkflows/local/alignment/align_bwamem2.nf | 20 +++++++++---------- subworkflows/local/analyse_MT.nf | 6 +++--- .../call_repeat_expansions.nf | 0 subworkflows/local/call_snv.nf | 4 ++-- .../call_structural_variants.nf | 6 +++--- .../{ => mitochondria}/align_and_call_MT.nf | 16 +++++++-------- .../convert_mt_bam_to_fastq.nf | 6 +++--- subworkflows/local/prepare_references.nf | 20 +++++++++---------- .../local/{ => preprocessing}/prepare_vcf.nf | 8 ++++---- subworkflows/{nf-core => local}/qc_bam.nf | 0 .../genmod.nf => local/rank_variants.nf} | 0 .../variant_calling}/call_cnv_cnvpytor.nf | 10 +++++----- .../variant_calling}/call_snv_deepvariant.nf | 10 +++++----- .../call_snv_sentieon.nf | 4 ++-- .../variant_calling}/call_sv_manta.nf | 2 +- .../variant_calling}/call_sv_tiddit.nf | 5 ++--- workflows/raredisease.nf | 12 +++++------ 18 files changed, 66 insertions(+), 67 deletions(-) rename subworkflows/{nf-core => local}/call_repeat_expansions.nf (100%) rename subworkflows/{nf-core => local}/call_structural_variants.nf (91%) rename subworkflows/local/{ => mitochondria}/align_and_call_MT.nf (85%) rename subworkflows/local/{ => mitochondria}/convert_mt_bam_to_fastq.nf (89%) rename subworkflows/local/{ => preprocessing}/prepare_vcf.nf (91%) rename subworkflows/{nf-core => local}/qc_bam.nf (100%) rename subworkflows/{nf-core/genmod.nf => local/rank_variants.nf} (100%) rename subworkflows/{nf-core => local/variant_calling}/call_cnv_cnvpytor.nf (88%) rename subworkflows/{nf-core => local/variant_calling}/call_snv_deepvariant.nf (91%) rename subworkflows/local/{ => variant_calling}/call_snv_sentieon.nf (86%) rename subworkflows/{nf-core => local/variant_calling}/call_sv_manta.nf (95%) rename subworkflows/{nf-core => local/variant_calling}/call_sv_tiddit.nf (82%) diff --git a/conf/modules.config b/conf/modules.config index bdf494ea..f98dddba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -58,7 +58,7 @@ process { // process { - withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX' { + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, @@ -100,7 +100,7 @@ process { ] } - withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX' { + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { ext.when = {!params.fasta_fai} publishDir = [ path: { "${params.outdir}/references" }, diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 2993a906..9e53e49f 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -2,12 +2,12 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // -include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main' -include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MD } from '../../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_STATS } from '../../../modules/nf-core/samtools/stats/main' -include { SAMTOOLS_MERGE } from '../../../modules/nf-core/samtools/merge/main' -include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' +include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_ALIGN } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MARKDUP } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_STATS } from '../../../modules/nf-core/samtools/stats/main' +include { SAMTOOLS_MERGE } from '../../../modules/nf-core/samtools/merge/main' +include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' workflow ALIGN_BWAMEM2 { @@ -24,11 +24,11 @@ workflow ALIGN_BWAMEM2 { BWAMEM2_MEM ( reads_input, index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions) - SAMTOOLS_INDEX ( BWAMEM2_MEM.out.bam ) + SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) // Join the mapped bam + bai paths by their keys for stats // Get stats for each demultiplexed read pair. - bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX.out.bai) + bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed, [] ) // Merge multiple lane samples and index @@ -52,14 +52,14 @@ workflow ALIGN_BWAMEM2 { // Marking duplicates MARKDUPLICATES ( prepared_bam , fasta, fai ) - SAMTOOLS_INDEX_MD ( MARKDUPLICATES.out.bam ) + SAMTOOLS_INDEX_MARKDUP ( MARKDUPLICATES.out.bam ) ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), [ marked_bam ] ] - marked_bai = SAMTOOLS_INDEX_MD.out.bai // channel: [ val(meta), [ marked_bai ] ] + marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai // channel: [ val(meta), [ marked_bai ] ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index bece2ea4..ca12f290 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -1,9 +1,9 @@ // // Analyse MT // -include { CONVERT_MT_BAM_TO_FASTQ } from './convert_mt_bam_to_fastq' -include { ALIGN_AND_CALL_MT } from './align_and_call_MT' -include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './align_and_call_MT' +include { CONVERT_MT_BAM_TO_FASTQ } from './mitochondria/convert_mt_bam_to_fastq' +include { ALIGN_AND_CALL_MT } from './mitochondria/align_and_call_MT' +include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './mitochondria/align_and_call_MT' include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' workflow ANALYSE_MT { diff --git a/subworkflows/nf-core/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf similarity index 100% rename from subworkflows/nf-core/call_repeat_expansions.nf rename to subworkflows/local/call_repeat_expansions.nf diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 8af1eb4d..096821d0 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -2,8 +2,8 @@ // call Single-nucleotide Varinats // -include { CALL_SNV_DEEPVARIANT } from '../nf-core/call_snv_deepvariant' -include { CALL_SNV_SENTIEON } from './call_snv_sentieon' +include { CALL_SNV_DEEPVARIANT } from './variant_calling/call_snv_deepvariant' +include { CALL_SNV_SENTIEON } from './variant_calling/call_snv_sentieon' workflow CALL_SNV { take: diff --git a/subworkflows/nf-core/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf similarity index 91% rename from subworkflows/nf-core/call_structural_variants.nf rename to subworkflows/local/call_structural_variants.nf index 3af80827..0b457b63 100644 --- a/subworkflows/nf-core/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -2,10 +2,10 @@ // A nested subworkflow to call structural variants. // -include { CALL_SV_MANTA } from './call_sv_manta' -include { CALL_SV_TIDDIT } from './call_sv_tiddit' +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_CNVPYTOR } from './call_cnv_cnvpytor' +include { CALL_CNV_CNVPYTOR } from './variant_calling/call_cnv_cnvpytor' workflow CALL_STRUCTURAL_VARIANTS { diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf similarity index 85% rename from subworkflows/local/align_and_call_MT.nf rename to subworkflows/local/mitochondria/align_and_call_MT.nf index bf0339f2..9244f40d 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -2,14 +2,14 @@ // Align and call MT // -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' -include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../modules/nf-core/gatk4/mutect2/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../../modules/nf-core/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../../modules/nf-core/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../../modules/nf-core/haplocheck/main' +include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../../modules/nf-core/gatk4/mutect2/main' workflow ALIGN_AND_CALL_MT { take: diff --git a/subworkflows/local/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf similarity index 89% rename from subworkflows/local/convert_mt_bam_to_fastq.nf rename to subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index b126a310..60228de8 100644 --- a/subworkflows/local/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -2,9 +2,9 @@ // Prepare bam files for MT allignment // -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../modules/nf-core/samtools/view/main' -include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/gatk4/revertsam/main' -include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/gatk4/samtofastq/main' +include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../../modules/nf-core/samtools/view/main' +include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../../modules/nf-core/gatk4/revertsam/main' +include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../../modules/nf-core/gatk4/samtofastq/main' workflow CONVERT_MT_BAM_TO_FASTQ { take: diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 42ce93b6..ddb3f806 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -3,16 +3,16 @@ // include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' -include { BWAMEM2_INDEX } from '../../modules/nf-core/bwamem2/index/main' +include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_SHIFT_MT } from '../../modules/nf-core/bwamem2/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' -include { CHECK_VCF } from './prepare_vcf' +include { CHECK_VCF } from './preprocessing/prepare_vcf' include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' 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 { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' -include { SAMTOOLS_FAIDX } 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 { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' @@ -42,14 +42,14 @@ workflow PREPARE_REFERENCES { // Genome indices BWA_INDEX(fasta_meta) - BWAMEM2_INDEX(fasta_meta) + BWAMEM2_INDEX_GENOME(fasta_meta) BWAMEM2_INDEX_SHIFT_MT(mt_fasta_shift_meta) SENTIEON_BWAINDEX(fasta_meta) - SAMTOOLS_FAIDX(fasta_meta) + SAMTOOLS_FAIDX_GENOME(fasta_meta) SAMTOOLS_FAIDX_SHIFT_MT(mt_fasta_shift_meta) GATK_SD(fasta_no_meta) GATK_SD_SHIFT_MT(mt_fasta_shift_no_meta) - GET_CHROM_SIZES( SAMTOOLS_FAIDX.out.fai ) + GET_CHROM_SIZES( SAMTOOLS_FAIDX_GENOME.out.fai ) // Vcf, tab and bed indices TABIX_DBSNP(known_dbsnp) @@ -77,10 +77,10 @@ workflow PREPARE_REFERENCES { // Gather versions ch_versions = ch_versions.mix(BWA_INDEX.out.versions) - ch_versions = ch_versions.mix(BWAMEM2_INDEX.out.versions) + ch_versions = ch_versions.mix(BWAMEM2_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_SHIFT_MT.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) - ch_versions = ch_versions.mix(SAMTOOLS_FAIDX.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(GATK_SD.out.versions) ch_versions = ch_versions.mix(GATK_SD_SHIFT_MT.out.versions) @@ -97,10 +97,10 @@ workflow PREPARE_REFERENCES { emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() bwa_index = BWA_INDEX.out.index.collect() ?: SENTIEON_BWAINDEX.out.index.collect() - bwamem2_index = BWAMEM2_INDEX.out.index.collect() + bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() - fasta_fai = SAMTOOLS_FAIDX.out.fai.map{ meta, fai -> [fai] }.collect() + fasta_fai = SAMTOOLS_FAIDX_GENOME.out.fai.map{ meta, fai -> [fai] }.collect() fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] }.collect() gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() gnomad_tbi = CHECK_VCF.out.index.collect() diff --git a/subworkflows/local/prepare_vcf.nf b/subworkflows/local/preprocessing/prepare_vcf.nf similarity index 91% rename from subworkflows/local/prepare_vcf.nf rename to subworkflows/local/preprocessing/prepare_vcf.nf index 97f6a3f3..7716f3f3 100644 --- a/subworkflows/local/prepare_vcf.nf +++ b/subworkflows/local/preprocessing/prepare_vcf.nf @@ -2,10 +2,10 @@ // Prepare reference vcf files // -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../modules/nf-core/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_PV } from '../../modules/nf-core/tabix/tabix/main' -include { CHECK_INPUT_VCF } from '../../modules/local/check_input_vcf' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_PV } from '../../../modules/nf-core/tabix/tabix/main' +include { CHECK_INPUT_VCF } from '../../../modules/local/check_input_vcf' workflow CHECK_VCF { take: diff --git a/subworkflows/nf-core/qc_bam.nf b/subworkflows/local/qc_bam.nf similarity index 100% rename from subworkflows/nf-core/qc_bam.nf rename to subworkflows/local/qc_bam.nf diff --git a/subworkflows/nf-core/genmod.nf b/subworkflows/local/rank_variants.nf similarity index 100% rename from subworkflows/nf-core/genmod.nf rename to subworkflows/local/rank_variants.nf diff --git a/subworkflows/nf-core/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf similarity index 88% rename from subworkflows/nf-core/call_cnv_cnvpytor.nf rename to subworkflows/local/variant_calling/call_cnv_cnvpytor.nf index 262fa2ea..f956799a 100644 --- a/subworkflows/nf-core/call_cnv_cnvpytor.nf +++ b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf @@ -2,11 +2,11 @@ // CNVpytor workflow - Calling CNVs // -include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../modules/nf-core/cnvpytor/importreaddepth/main' -include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../modules/nf-core/cnvpytor/histogram/main' -include { CNVPYTOR_PARTITION as PARTITIONS } from '../../modules/nf-core/cnvpytor/partition/main' -include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../modules/nf-core/cnvpytor/callcnvs/main' -include { CNVPYTOR_VIEW as VIEW } from '../../modules/nf-core/cnvpytor/view/main' +include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../../modules/nf-core/cnvpytor/importreaddepth/main' +include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../../modules/nf-core/cnvpytor/histogram/main' +include { CNVPYTOR_PARTITION as PARTITIONS } from '../../../modules/nf-core/cnvpytor/partition/main' +include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../../modules/nf-core/cnvpytor/callcnvs/main' +include { CNVPYTOR_VIEW as VIEW } from '../../../modules/nf-core/cnvpytor/view/main' workflow CALL_CNV_CNVPYTOR { take: diff --git a/subworkflows/nf-core/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf similarity index 91% rename from subworkflows/nf-core/call_snv_deepvariant.nf rename to subworkflows/local/variant_calling/call_snv_deepvariant.nf index 813dc9a9..a0757835 100644 --- a/subworkflows/nf-core/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -2,11 +2,11 @@ // A variant caller workflow for deepvariant // -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../modules/nf-core/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../modules/nf-core/bcftools/norm/main' -include { DEEPVARIANT } from '../../modules/nf-core/deepvariant/main' -include { GLNEXUS } from '../../modules/nf-core/glnexus/main' -include { TABIX_TABIX as TABIX_GL } from '../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../../modules/nf-core/bcftools/norm/main' +include { DEEPVARIANT } from '../../../modules/nf-core/deepvariant/main' +include { GLNEXUS } from '../../../modules/nf-core/glnexus/main' +include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-core/tabix/tabix/main' workflow CALL_SNV_DEEPVARIANT { take: diff --git a/subworkflows/local/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf similarity index 86% rename from subworkflows/local/call_snv_sentieon.nf rename to subworkflows/local/variant_calling/call_snv_sentieon.nf index f9f2c3cf..52dac412 100644 --- a/subworkflows/local/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -2,8 +2,8 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { SENTIEON_DNASCOPE } from '../../modules/local/sentieon/dnascope' -include { SENTIEON_DNAMODELAPPLY } from '../../modules/local/sentieon/dnamodelapply' +include { SENTIEON_DNASCOPE } from '../../../modules/local/sentieon/dnascope' +include { SENTIEON_DNAMODELAPPLY } from '../../../modules/local/sentieon/dnamodelapply' workflow CALL_SNV_SENTIEON { take: diff --git a/subworkflows/nf-core/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf similarity index 95% rename from subworkflows/nf-core/call_sv_manta.nf rename to subworkflows/local/variant_calling/call_sv_manta.nf index a07251db..59e58ed7 100644 --- a/subworkflows/nf-core/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -2,7 +2,7 @@ // A structural variant caller workflow for manta // -include { MANTA_GERMLINE as MANTA } from '../../modules/nf-core/manta/germline/main' +include { MANTA_GERMLINE as MANTA } from '../../../modules/nf-core/manta/germline/main' workflow CALL_SV_MANTA { take: diff --git a/subworkflows/nf-core/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf similarity index 82% rename from subworkflows/nf-core/call_sv_tiddit.nf rename to subworkflows/local/variant_calling/call_sv_tiddit.nf index 2dde0c31..53303239 100644 --- a/subworkflows/nf-core/call_sv_tiddit.nf +++ b/subworkflows/local/variant_calling/call_sv_tiddit.nf @@ -2,9 +2,8 @@ // A structural variant caller workflow for tiddit // -include { TIDDIT_SV } from '../../modules/nf-core/tiddit/sv/main' - -include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../modules/nf-core/svdb/merge/main' +include { TIDDIT_SV } from '../../../modules/nf-core/tiddit/sv/main' +include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../../modules/nf-core/svdb/merge/main' workflow CALL_SV_TIDDIT { take: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 95a575c3..9b470d3f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -86,7 +86,7 @@ include { FASTQC } from '../modules/nf-core/fastq include { MULTIQC } from '../modules/nf-core/multiqc/main' // -// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules +// SUBWORKFLOWS // include { ALIGN } from '../subworkflows/local/align' @@ -95,20 +95,20 @@ include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/an include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' include { CHECK_INPUT } from '../subworkflows/local/check_input' include { GENS } from '../subworkflows/local/gens' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' +include { QC_BAM } from '../subworkflows/local/qc_bam' +include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' +include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' // // SUBWORKFLOW: Consists entirely of nf-core/modules // -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/nf-core/call_repeat_expansions' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/nf-core/call_structural_variants' -include { QC_BAM } from '../subworkflows/nf-core/qc_bam' -include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/nf-core/genmod' -include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/nf-core/genmod' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From d1ca81f3ab5434d7c606731705f1b5ecf3bf65f9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 4 Nov 2022 11:36:10 +0100 Subject: [PATCH 0776/1921] fix snv subworkflow --- modules/{nf-core => local}/ensemblvep/main.nf | 14 +++++---- .../{nf-core => local}/ensemblvep/meta.yml | 0 modules/local/filter_vep.nf | 8 ++--- modules/nf-core/ensemblvep/Dockerfile | 31 ------------------- modules/nf-core/ensemblvep/build.sh | 28 ----------------- modules/nf-core/ensemblvep/environment.yml | 10 ------ nextflow_schema.json | 2 +- subworkflows/local/annotate_snvs.nf | 28 +++++++++-------- .../local/annotate_structural_variants.nf | 6 +--- workflows/raredisease.nf | 15 ++++----- 10 files changed, 37 insertions(+), 105 deletions(-) rename modules/{nf-core => local}/ensemblvep/main.nf (82%) rename modules/{nf-core => local}/ensemblvep/meta.yml (100%) delete mode 100644 modules/nf-core/ensemblvep/Dockerfile delete mode 100755 modules/nf-core/ensemblvep/build.sh delete mode 100644 modules/nf-core/ensemblvep/environment.yml diff --git a/modules/nf-core/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf similarity index 82% rename from modules/nf-core/ensemblvep/main.nf rename to modules/local/ensemblvep/main.nf index fd2c893a..28e819f2 100644 --- a/modules/nf-core/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -2,10 +2,11 @@ process ENSEMBLVEP { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::ensembl-vep=106.1" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:106.1--pl5321h4a94de4_0' : - 'quay.io/biocontainers/ensembl-vep:106.1--pl5321h4a94de4_0' }" + if (params.enable_conda) { + exit 1, "Conda environments cannot be used with vep at the moment. Please use Docker or Singularity containers." + } + + container "ensemblorg/ensembl-vep:release_107.0" input: tuple val(meta), path(vcf) @@ -23,7 +24,7 @@ process ENSEMBLVEP { tuple val(meta), path("*.ann.vcf.gz") , optional:true, emit: vcf_gz tuple val(meta), path("*.ann.tab.gz") , optional:true, emit: tab_gz tuple val(meta), path("*.ann.json.gz") , optional:true, emit: json_gz - path "*.summary.html" , emit: report + path "*.summary.html" , optional:true, emit: report path "versions.yml" , emit: versions when: @@ -34,6 +35,7 @@ process ENSEMBLVEP { def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json")? 'json' : args.contains("--tab")? 'tab' : 'vcf' def compress_out = args.contains("--compress_output") ? '.gz' : '' def prefix = task.ext.prefix ?: "${meta.id}" + def stats_file = args.contains("--no-stats") ? '' : "--stats_file ${prefix}.summary.html" def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" def reference = fasta ? "--fasta $fasta" : "" @@ -49,7 +51,7 @@ process ENSEMBLVEP { --cache_version $cache_version \\ --dir_cache $dir_cache \\ --fork $task.cpus \\ - --stats_file ${prefix}.summary.html \\ + ${stats_file} cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/ensemblvep/meta.yml b/modules/local/ensemblvep/meta.yml similarity index 100% rename from modules/nf-core/ensemblvep/meta.yml rename to modules/local/ensemblvep/meta.yml diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 7d1fb448..3122b43b 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -2,10 +2,10 @@ process FILTER_VEP { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::ensembl-vep=105.0" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:105.0--pl5321h4a94de4_1' : - 'quay.io/biocontainers/ensembl-vep:105.0--pl5321h4a94de4_1' }" + if (params.enable_conda) { + exit 1, "Conda environments cannot be used with vep at the moment. Please use Docker or Singularity containers." + } + container "ensemblorg/ensembl-vep:release_107.0" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/ensemblvep/Dockerfile b/modules/nf-core/ensemblvep/Dockerfile deleted file mode 100644 index 7d2c99c4..00000000 --- a/modules/nf-core/ensemblvep/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM nfcore/base:1.14 -LABEL \ - author="Maxime Garcia" \ - description="VEP image for nf-core pipelines" \ - maintainer="maxime.garcia@scilifelab.se" - -# Install the conda environment -COPY environment.yml / -RUN conda env create -f /environment.yml && conda clean -a - -# Setup default ARG variables -ARG GENOME=GRCh38 -ARG SPECIES=homo_sapiens -ARG VEP_CACHE_VERSION=106 -ARG VEP_VERSION=106.1 - -# Add conda installation dir to PATH (instead of doing 'conda activate') -ENV PATH /opt/conda/envs/nf-core-vep-${VEP_VERSION}/bin:$PATH - -# Download Genome -RUN vep_install \ - -a c \ - -c .vep \ - -s ${SPECIES} \ - -y ${GENOME} \ - --CACHE_VERSION ${VEP_CACHE_VERSION} \ - --CONVERT \ - --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE - -# Dump the details of the installed packages to a file for posterity -RUN conda env export --name nf-core-vep-${VEP_VERSION} > nf-core-vep-${VEP_VERSION}.yml diff --git a/modules/nf-core/ensemblvep/build.sh b/modules/nf-core/ensemblvep/build.sh deleted file mode 100755 index eaa3ed5b..00000000 --- a/modules/nf-core/ensemblvep/build.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Build and push all containers - -build_push() { - GENOME=$1 - SPECIES=$2 - VEP_CACHE_VERSION=$3 - VEP_VERSION=$4 - - docker build \ - . \ - -t nfcore/vep:${VEP_VERSION}.${GENOME} \ - --build-arg GENOME=${GENOME} \ - --build-arg SPECIES=${SPECIES} \ - --build-arg VEP_CACHE_VERSION=${VEP_CACHE_VERSION} \ - --build-arg VEP_VERSION=${VEP_VERSION} - - docker push nfcore/vep:${VEP_VERSION}.${GENOME} -} - -build_push "GRCh37" "homo_sapiens" "106" "106.1" -build_push "GRCh38" "homo_sapiens" "106" "106.1" -build_push "GRCm38" "mus_musculus" "102" "106.1" -build_push "GRCm39" "mus_musculus" "106" "106.1" -build_push "CanFam3.1" "canis_lupus_familiaris" "104" "106.1" -build_push "WBcel235" "caenorhabditis_elegans" "106" "106.1" diff --git a/modules/nf-core/ensemblvep/environment.yml b/modules/nf-core/ensemblvep/environment.yml deleted file mode 100644 index d378f810..00000000 --- a/modules/nf-core/ensemblvep/environment.yml +++ /dev/null @@ -1,10 +0,0 @@ -# You can use this file to create a conda environment for this module: -# conda env create -f environment.yml -name: nf-core-vep-106.1 -channels: - - conda-forge - - bioconda - - defaults - -dependencies: - - bioconda::ensembl-vep=106.1 diff --git a/nextflow_schema.json b/nextflow_schema.json index 47477439..c0130d67 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -473,7 +473,7 @@ "default": "104", "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": ["104", "105", "106"] + "enum": ["104", "105", "106", "107"] } } }, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 01742abf..d36b5d40 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,11 +2,11 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/vcfanno/main' -include { BCFTOOLS_ROH } from '../../modules/nf-core/bcftools/roh/main' -include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhocall/annotate/main' -include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/nf-core/ensemblvep/main' -include { TABIX_TABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/tabix/tabix/main' +include { VCFANNO } from '../../modules/nf-core/vcfanno/main' +include { BCFTOOLS_ROH } from '../../modules/nf-core/bcftools/roh/main' +include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhocall/annotate/main' +include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' +include { TABIX_BGZIPTABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/tabix/bgziptabix/main' workflow ANNOTATE_SNVS { @@ -26,13 +26,6 @@ workflow ANNOTATE_SNVS { ch_versions = Channel.empty() ch_toml = Channel.fromPath(vcfanno_toml) - // - // annotate vcfanno - // - - VCFANNO (vcf, ch_toml, vcfanno_resource_dir) - ch_versions = ch_versions.mix(VCFANNO.out.versions) - // // annotate rhocall // @@ -67,7 +60,16 @@ workflow ANNOTATE_SNVS { TABIX_SNV_ANNO (RHOCALL_ANNOTATE.out.vcf) ch_versions = ch_versions.mix(TABIX_SNV_ANNO.out.versions) - ENSEMBLVEP_SNV(RHOCALL_ANNOTATE.out.vcf, + // + // annotate vcfanno + // + VCFANNO (TABIX_SNV_ANNO.out.gz_tbi, ch_toml, vcfanno_resource_dir) + ch_versions = ch_versions.mix(VCFANNO.out.versions) + + // + // annotate vep + // + ENSEMBLVEP_SNV(VCFANNO.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 8d5c73a4..0d71639a 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -5,8 +5,7 @@ include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' -include { TABIX_TABIX as TABIX_SV_ANNO } from '../../modules/nf-core/tabix/tabix/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/nf-core/ensemblvep/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -57,9 +56,6 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) - TABIX_SV_ANNO (BCFTOOLS_VIEW.out.vcf) - ch_versions = ch_versions.mix(TABIX_SV_ANNO.out.versions) - ENSEMBLVEP_SV(BCFTOOLS_VIEW.out.vcf, vep_genome, "homo_sapiens", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9b470d3f..64eee078 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -368,14 +368,20 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - ch_genome_fasta_meta, + ch_genome_fasta_no_meta, ch_gnomad_af, CHECK_INPUT.out.samples ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) - RANK_VARIANTS_SNV ( + ANN_CSQ_PLI_SNV ( ch_snv_annotate.vcf_ann, + ch_variant_consequences, + ch_pli_per_gene + ) + + RANK_VARIANTS_SNV ( + ANN_CSQ_PLI_SNV.out.vcf_ann, MAKE_PED.out.ped, ch_reduced_penetrance, ch_score_config_snv @@ -387,11 +393,6 @@ workflow RAREDISEASE { ch_vep_filters ) - ANN_CSQ_PLI_SNV ( - FILTER_VEP_SNV.out.vcf, - RANK_VARIANTS_SNV.out.vcf, - ch_variant_consequences - ) } // From 5a38244b02aa38d37d216d57aa454d502325dba3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 5 Nov 2022 06:23:48 +0100 Subject: [PATCH 0777/1921] include gatk printreads --- conf/modules.config | 10 ++- modules/local/gatk4/printreads/main.nf | 56 ++++++++++++++++ modules/local/gatk4/printreads/meta.yml | 64 +++++++++++++++++++ subworkflows/local/analyse_MT.nf | 11 ++-- .../mitochondria/convert_mt_bam_to_fastq.nf | 13 ++-- workflows/raredisease.nf | 1 + 6 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 modules/local/gatk4/printreads/main.nf create mode 100644 modules/local/gatk4/printreads/meta.yml diff --git a/conf/modules.config b/conf/modules.config index f98dddba..611038a0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -754,10 +754,14 @@ process { // process { - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:SAMTOOLS_VIEW_MT' { + withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { + beforeScript = {"mkdir ./tmp"} ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } - ext.args = { '-h ' } - ext.args2 = { (params.genome == "GRCh37") ? "MT" : "chrM" } + ext.args = [ + params.genome == "GRCh37" ? "-L MT" : "-L chrM", + "--read-filter MateOnSameContigOrNoMappedMateReadFilter", + "--read-filter MateUnmappedAndUnmappedReadFilter" + ].join(" ").trim() } withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { diff --git a/modules/local/gatk4/printreads/main.nf b/modules/local/gatk4/printreads/main.nf new file mode 100644 index 00000000..795def9f --- /dev/null +++ b/modules/local/gatk4/printreads/main.nf @@ -0,0 +1,56 @@ +process GATK4_PRINTREADS { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(bam), path(bai) + tuple val(meta2), path(fasta) + path (fai) + path (dict) + + output: + tuple val(meta), path("*.reads.bam"), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK PrintReads] 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" PrintReads \\ + $args \\ + --reference $fasta \\ + --input $bam \\ + --read-index $bai \\ + --output ${prefix}.reads.bam + + 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}.reads.bam + + 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/printreads/meta.yml b/modules/local/gatk4/printreads/meta.yml new file mode 100644 index 00000000..79050411 --- /dev/null +++ b/modules/local/gatk4/printreads/meta.yml @@ -0,0 +1,64 @@ +name: "gatk4_printreads" +description: Print reads in the SAM/BAM/CRAM file +keywords: + - printreads +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 ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: reference fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: reference fasta index file + pattern: "*.{fai}" + - dict: + type: file + description: reference fasta dictionary 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" + - bam: + type: file + description: Sorted BAM/CRAM file + pattern: "*.{bam,cram}" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index ca12f290..fc7957d8 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -10,7 +10,8 @@ workflow ANALYSE_MT { take: bam // channel: [ val(meta), file(bam), file(bai) ] genome_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] - genome_fasta // channel: [ genome.fasta ] + genome_fasta_no_meta // channel: [ genome.fasta ] + genome_fasta_meta // channel: [ [], genome.fasta ] genome_dict // channel: [ genome.dict ] genome_fai // channel: [ genome.fai ] mt_intervals // channel: [ file(non_control_region.chrM.interval_list) ] @@ -25,15 +26,15 @@ workflow ANALYSE_MT { ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT - CONVERT_MT_BAM_TO_FASTQ ( bam ) + CONVERT_MT_BAM_TO_FASTQ ( bam , genome_fasta_meta, genome_fai, genome_dict, ) ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions)// Outputs bam files - //STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING + //STEP 2.1: MT ALIGNMENT AND VARIANT CALLING ALIGN_AND_CALL_MT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, genome_bwamem2_index, - genome_fasta, + genome_fasta_no_meta, genome_dict, genome_fai, mt_intervals @@ -56,7 +57,7 @@ workflow ANALYSE_MT { ALIGN_AND_CALL_MT_SHIFT.out.vcf, genome_dict, shift_mt_backchain, - genome_fasta) + genome_fasta_no_meta) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index 60228de8..19644b90 100644 --- a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -2,23 +2,26 @@ // Prepare bam files for MT allignment // -include { SAMTOOLS_VIEW as SAMTOOLS_VIEW_MT } from '../../../modules/nf-core/samtools/view/main' +include { GATK4_PRINTREADS as GATK4_PRINTREADS_MT } from '../../../modules/local/gatk4/printreads/main' include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../../modules/nf-core/gatk4/revertsam/main' include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../../modules/nf-core/gatk4/samtofastq/main' workflow CONVERT_MT_BAM_TO_FASTQ { take: - bam // channel: [ val(meta), file(bam), file(bai) ] + bam // channel: [ val(meta), file(bam), file(bai) ] + genome_fasta_meta // channel: [ [], genome.fasta ] + genome_fai // channel: [ genome.fai ] + genome_dict // channel: [ genome.dict ] main: ch_versions = Channel.empty() // Outputs bam containing only MT - SAMTOOLS_VIEW_MT ( bam, [], [] ) - ch_versions = ch_versions.mix(SAMTOOLS_VIEW_MT.out.versions.first()) + GATK4_PRINTREADS_MT ( bam, genome_fasta_meta, genome_fai, genome_dict ) + ch_versions = ch_versions.mix(GATK4_PRINTREADS_MT.out.versions.first()) // Removes alignment information - GATK4_REVERTSAM_MT ( SAMTOOLS_VIEW_MT.out.bam ) + GATK4_REVERTSAM_MT ( GATK4_PRINTREADS_MT.out.bam ) ch_versions = ch_versions.mix(GATK4_REVERTSAM_MT.out.versions.first()) // Outputs fastq files diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 64eee078..ef6238ad 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -345,6 +345,7 @@ workflow RAREDISEASE { ch_mapped.bam_bai, ch_bwamem2_index, ch_genome_fasta_no_meta, + ch_genome_fasta_meta, ch_sequence_dictionary, ch_genome_fai, ch_mt_intervals, From 94edd0397ffb10221c41f6c9b7f54be5b21abaf0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 5 Nov 2022 06:33:39 +0100 Subject: [PATCH 0778/1921] update modules.json --- modules.json | 8 --- modules/nf-core/samtools/view/main.nf | 66 --------------------- modules/nf-core/samtools/view/meta.yml | 79 -------------------------- 3 files changed, 153 deletions(-) delete mode 100644 modules/nf-core/samtools/view/main.nf delete mode 100644 modules/nf-core/samtools/view/meta.yml diff --git a/modules.json b/modules.json index 9ec7ddef..59643d80 100644 --- a/modules.json +++ b/modules.json @@ -61,10 +61,6 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, - "ensemblvep": { - "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" - }, "expansionhunter": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" @@ -185,10 +181,6 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, - "samtools/view": { - "branch": "master", - "git_sha": "202683bfc98ddecdd456ea73268e330bca2e5c5a" - }, "stranger": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf deleted file mode 100644 index b2f5c678..00000000 --- a/modules/nf-core/samtools/view/main.nf +++ /dev/null @@ -1,66 +0,0 @@ -process SAMTOOLS_VIEW { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::samtools=1.15.1" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : - 'quay.io/biocontainers/samtools:1.15.1--h1170115_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 deleted file mode 100644 index a52e4f8d..00000000 --- a/modules/nf-core/samtools/view/meta.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: samtools_view -description: filter/convert SAM/BAM/CRAM file -keywords: - - view - - bam - - sam - - cram -tools: - - samtools: - description: | - SAMtools is a set of utilities for interacting with and post-processing - short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. - These files are generated as output by short read aligners like BWA. - homepage: http://www.htslib.org/ - documentation: hhttp://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/CRAM.CRAI file - pattern: "*.{.bai,.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" From 050147c1d6a255cb3fd449869faffb81ab591893 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 5 Nov 2022 22:58:00 +0100 Subject: [PATCH 0779/1921] fix typo --- modules/local/ensemblvep/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 28e819f2..a893c4d5 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -35,7 +35,7 @@ process ENSEMBLVEP { def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json")? 'json' : args.contains("--tab")? 'tab' : 'vcf' def compress_out = args.contains("--compress_output") ? '.gz' : '' def prefix = task.ext.prefix ?: "${meta.id}" - def stats_file = args.contains("--no-stats") ? '' : "--stats_file ${prefix}.summary.html" + def stats_file = args.contains("--no_stats") ? '' : "--stats_file ${prefix}.summary.html" def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" def reference = fasta ? "--fasta $fasta" : "" From 646ba8049a7d55a8e828351186b7f5feaf2d46ab Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 6 Nov 2022 01:00:31 +0100 Subject: [PATCH 0780/1921] add bcftools view --- conf/modules.config | 9 +++++++++ subworkflows/local/annotate_snvs.nf | 18 +++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f98dddba..a80641c0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -701,6 +701,15 @@ process { ] } + withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index d36b5d40..c8537043 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -4,9 +4,11 @@ include { VCFANNO } from '../../modules/nf-core/vcfanno/main' 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 { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' -include { TABIX_BGZIPTABIX as TABIX_SNV_ANNO } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_BGZIPTABIX as TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_BGZIPTABIX as TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' workflow ANNOTATE_SNVS { @@ -57,19 +59,25 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) - TABIX_SNV_ANNO (RHOCALL_ANNOTATE.out.vcf) - ch_versions = ch_versions.mix(TABIX_SNV_ANNO.out.versions) + TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) + ch_versions = ch_versions.mix(TABIX_ROHCALL.out.versions) // // annotate vcfanno // - VCFANNO (TABIX_SNV_ANNO.out.gz_tbi, ch_toml, vcfanno_resource_dir) + VCFANNO (TABIX_ROHCALL.out.gz_tbi, ch_toml, vcfanno_resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) + TABIX_VCFANNO (VCFANNO.out.vcf) + ch_versions = ch_versions.mix(TABIX_VCFANNO.out.versions) + + BCFTOOLS_VIEW(TABIX_VCFANNO.out.gz_tbi,[],[],[]) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) + // // annotate vep // - ENSEMBLVEP_SNV(VCFANNO.out.vcf, + ENSEMBLVEP_SNV(BCFTOOLS_VIEW.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, From 2ff66b7f9053203ef23963a63c43954061e97812 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 6 Nov 2022 19:27:51 +0100 Subject: [PATCH 0781/1921] update file suffix --- conf/modules.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index a455464a..3c1f31cf 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -621,6 +621,7 @@ process { } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_view" } publishDir = [ enabled: false, ] @@ -702,6 +703,7 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_view" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } publishDir = [ path: { "${params.outdir}/snv_annotation" }, From fa02328e58c9998e0a5f7da8993f2f837ff67741 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 6 Nov 2022 22:37:33 +0100 Subject: [PATCH 0782/1921] add split intervals --- modules.json | 4 ++ modules/local/create_bed_from_fai.nf | 38 +++++++++++++ modules/nf-core/gatk4/splitintervals/main.nf | 48 +++++++++++++++++ modules/nf-core/gatk4/splitintervals/meta.yml | 53 +++++++++++++++++++ subworkflows/local/prepare_references.nf | 1 + subworkflows/local/scatter_genome.nf | 24 +++++++++ workflows/raredisease.nf | 26 ++++++--- 7 files changed, 186 insertions(+), 8 deletions(-) create mode 100644 modules/local/create_bed_from_fai.nf create mode 100644 modules/nf-core/gatk4/splitintervals/main.nf create mode 100644 modules/nf-core/gatk4/splitintervals/meta.yml create mode 100644 subworkflows/local/scatter_genome.nf diff --git a/modules.json b/modules.json index 59643d80..79bb1f15 100644 --- a/modules.json +++ b/modules.json @@ -97,6 +97,10 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/splitintervals": { + "branch": "master", + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + }, "genmod/annotate": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/local/create_bed_from_fai.nf b/modules/local/create_bed_from_fai.nf new file mode 100644 index 00000000..a4b13898 --- /dev/null +++ b/modules/local/create_bed_from_fai.nf @@ -0,0 +1,38 @@ +process BUILD_BED { + tag "$meta.id" + + conda (params.enable_conda ? "anaconda::gawk=5.1.0" : null) + 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' }" + + input: + tuple val(meta), path(fasta_fai) + + output: + tuple val(meta), path("*.bed") , emit: bed + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + awk 'BEGIN {SEP="\t"}; {print \$1 SEP "0" SEP \$2}' ${fasta_fai} > ${fasta_fai.baseName}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gawk: \$(awk -Wversion | sed '1!d; s/.*Awk //; s/,.*//') + END_VERSIONS + """ + + stub: + """ + touch chr.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gawk: \$(awk -Wversion | sed '1!d; s/.*Awk //; s/,.*//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf new file mode 100644 index 00000000..5473ae42 --- /dev/null +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -0,0 +1,48 @@ +process GATK4_SPLITINTERVALS { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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) + + output: + tuple val(meta), path("**.interval_list"), emit: split_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 reference = fasta ? "--reference $fasta" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK SplitIntervals] 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" SplitIntervals \\ + --output ${prefix} \\ + --intervals $intervals \\ + $reference \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/splitintervals/meta.yml b/modules/nf-core/gatk4/splitintervals/meta.yml new file mode 100644 index 00000000..ba557544 --- /dev/null +++ b/modules/nf-core/gatk4/splitintervals/meta.yml @@ -0,0 +1,53 @@ +name: gatk4_splitintervals +keywords: + - interval + - bed +tools: + - gatk4: + description: Genome Analysis Toolkit (GATK4) + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s + tool_dev_url: https://github.com/broadinstitute/gatk + doi: "10.1158/1538-7445.AM2017-3590" + licence: ["BSD-3-clause"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - interval: + type: file + description: Interval list or BED + pattern: "*.{interval,interval_list,bed}" + - fasta: + type: file + description: Reference FASTA + pattern: "*.{fa,fasta}" + - fasta_fai: + type: file + description: Reference FASTA index + pattern: "*.fai" + - dict: + type: file + description: Reference sequence dictionary + pattern: "*.dict" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bed: + type: file + description: A list of scattered interval lists + pattern: "*.interval_list" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@nvnieuwk" diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index ddb3f806..d3186d7f 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -101,6 +101,7 @@ workflow PREPARE_REFERENCES { bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() fasta_fai = SAMTOOLS_FAIDX_GENOME.out.fai.map{ meta, fai -> [fai] }.collect() + fasta_fai_meta = SAMTOOLS_FAIDX_GENOME.out.fai.collect() fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] }.collect() gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() gnomad_tbi = CHECK_VCF.out.index.collect() diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf new file mode 100644 index 00000000..2d8e0217 --- /dev/null +++ b/subworkflows/local/scatter_genome.nf @@ -0,0 +1,24 @@ +include { BUILD_BED } from '../../modules/local/create_bed_from_fai' +include { GATK4_SPLITINTERVALS } from '../../modules/nf-core/gatk4/splitintervals/main' +workflow SCATTER_GENOME { + + take: + dict + fai_meta // channel: [ val(meta), path(vcf) ] + fai_no_meta + fasta_no_meta + + + main: + ch_versions = Channel.empty() + + BUILD_BED (fai_meta) + ch_versions = ch_versions.mix(BUILD_BED.out.versions) + + GATK4_SPLITINTERVALS(BUILD_BED.out.bed, fasta_no_meta, fai_no_meta, dict) + ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) + + emit: + bed = BUILD_BED.out.bed + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ef6238ad..1c06a22b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -104,7 +104,7 @@ include { PREPARE_REFERENCES } from '../subworkflows/local/pr include { QC_BAM } from '../subworkflows/local/qc_bam' include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' - +include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' // // SUBWORKFLOW: Consists entirely of nf-core/modules // @@ -208,8 +208,10 @@ workflow RAREDISEASE { ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() : ( ch_references.bwamem2_index_mt_shift ?: Channel.empty() ) ch_chrom_sizes = ch_references.chrom_sizes - ch_genome_fai = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() + ch_genome_fai_no_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() : ( ch_references.fasta_fai ?: Channel.empty() ) + ch_genome_fai_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : ( ch_references.fasta_fai_meta ?: Channel.empty() ) ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() @@ -230,12 +232,20 @@ workflow RAREDISEASE { : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) + // CREATE CHROMOSOME BED AND INTERVALS + SCATTER_GENOME ( + ch_sequence_dictionary, + ch_genome_fai_meta, + ch_genome_fai_no_meta, + ch_genome_fasta_no_meta + ) + // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( params.aligner, CHECK_INPUT.out.reads, ch_genome_fasta_no_meta, - ch_genome_fai, + ch_genome_fai_no_meta, ch_bwa_index, ch_bwamem2_index, ch_known_dbsnp, @@ -249,7 +259,7 @@ workflow RAREDISEASE { ch_mapped.marked_bam, ch_mapped.marked_bai, ch_genome_fasta_no_meta, - ch_genome_fai, + ch_genome_fai_no_meta, ch_bait_intervals, ch_target_intervals, ch_chrom_sizes @@ -270,7 +280,7 @@ workflow RAREDISEASE { params.variant_caller, ch_mapped.bam_bai, ch_genome_fasta_no_meta, - ch_genome_fai, + ch_genome_fai_no_meta, ch_known_dbsnp, ch_known_dbsnp_tbi, ch_call_interval, @@ -285,7 +295,7 @@ workflow RAREDISEASE { ch_bwa_index, ch_genome_fasta_no_meta, ch_genome_fasta_meta, - ch_genome_fai, + ch_genome_fai_no_meta, CHECK_INPUT.out.case_info, ch_target_bed, params.cnvpytor_binsizes @@ -298,7 +308,7 @@ workflow RAREDISEASE { ch_mapped.bam_bai, CALL_SNV.out.vcf, ch_genome_fasta_meta, - ch_genome_fai, + ch_genome_fai_no_meta, file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), @@ -347,7 +357,7 @@ workflow RAREDISEASE { ch_genome_fasta_no_meta, ch_genome_fasta_meta, ch_sequence_dictionary, - ch_genome_fai, + ch_genome_fai_no_meta, ch_mt_intervals, ch_bwamem2_index_mt_shift, ch_mt_fasta_shift_no_meta, From 8cd1a2c8331985a99408c0c19c475f50a58fa87d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 6 Nov 2022 23:02:08 +0100 Subject: [PATCH 0783/1921] update modules config --- conf/modules.config | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 3c1f31cf..7205540e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -267,6 +267,24 @@ process { } +// +// Create bed and interval files for scatter operations +// + +process { + withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { + ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } + ext.when = { params.annotate_snv_switch } + ext.prefix = { "${meta.id}_genome_intervals" } + publishDir = [ + enabled: params.save_reference, + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + // // Bwamem2 alignment options // From 304b80ae82855103c6429822285025d06b75b6e6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 6 Nov 2022 23:03:52 +0100 Subject: [PATCH 0784/1921] update emit --- subworkflows/local/scatter_genome.nf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 2d8e0217..65315bb9 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -19,6 +19,7 @@ workflow SCATTER_GENOME { ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) emit: - bed = BUILD_BED.out.bed - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + bed = BUILD_BED.out.bed + split_intervals = GATK4_SPLITINTERVALS.out.split_intervals + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 22eda70a9a5af129c11f980d01874aae3a20c55d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 6 Nov 2022 23:05:02 +0100 Subject: [PATCH 0785/1921] add selectvariants --- modules.json | 4 ++ modules/nf-core/gatk4/selectvariants/main.nf | 43 +++++++++++++++ modules/nf-core/gatk4/selectvariants/meta.yml | 55 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 modules/nf-core/gatk4/selectvariants/main.nf create mode 100644 modules/nf-core/gatk4/selectvariants/meta.yml diff --git a/modules.json b/modules.json index 79bb1f15..9b55b923 100644 --- a/modules.json +++ b/modules.json @@ -97,6 +97,10 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/selectvariants": { + "branch": "master", + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + }, "gatk4/splitintervals": { "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf new file mode 100644 index 00000000..ac385f4f --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -0,0 +1,43 @@ +process GATK4_SELECTVARIANTS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf), path(vcf_idx) + + output: + tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf + tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK VariantFiltration] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.toGiga() + } + """ + gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ + --variant $vcf \\ + --output ${prefix}.selectvariants.vcf.gz \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/selectvariants/meta.yml b/modules/nf-core/gatk4/selectvariants/meta.yml new file mode 100644 index 00000000..381af249 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/meta.yml @@ -0,0 +1,55 @@ +name: gatk4_selectvariants +description: Select a subset of variants from a VCF file +keywords: + - gatk + - gatk4 + - selectvariants + - vcf +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: VCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - vcf_idx: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.selectvariants.vcf.gz" + - vcf_tbi: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@mjcipriano" From 68265db604d9e50070692eca833eeaf614d8bbe9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 03:15:12 +0100 Subject: [PATCH 0786/1921] selectvariants --- modules/local/gatk4/selectvariants/main.nf | 57 +++++++++++++++++++++ modules/local/gatk4/selectvariants/meta.yml | 55 ++++++++++++++++++++ subworkflows/local/annotate_snvs.nf | 21 ++++++-- subworkflows/local/scatter_genome.nf | 5 +- workflows/raredisease.nf | 6 ++- 5 files changed, 135 insertions(+), 9 deletions(-) create mode 100644 modules/local/gatk4/selectvariants/main.nf create mode 100644 modules/local/gatk4/selectvariants/meta.yml diff --git a/modules/local/gatk4/selectvariants/main.nf b/modules/local/gatk4/selectvariants/main.nf new file mode 100644 index 00000000..c4364ea4 --- /dev/null +++ b/modules/local/gatk4/selectvariants/main.nf @@ -0,0 +1,57 @@ +process GATK4_SELECTVARIANTS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf), path(vcf_idx) + path (intervals_list) + + output: + tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf + tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals_list ? "--intervals ${intervals_list}" : "" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.toGiga() + } + """ + gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ + --variant $vcf \\ + --output ${prefix}.selectvariants.vcf.gz \\ + $interval \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.selectvariants.vcf.gz + touch ${prefix}.selectvariants.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/gatk4/selectvariants/meta.yml b/modules/local/gatk4/selectvariants/meta.yml new file mode 100644 index 00000000..381af249 --- /dev/null +++ b/modules/local/gatk4/selectvariants/meta.yml @@ -0,0 +1,55 @@ +name: gatk4_selectvariants +description: Select a subset of variants from a VCF file +keywords: + - gatk + - gatk4 + - selectvariants + - vcf +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: VCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - vcf_idx: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.selectvariants.vcf.gz" + - vcf_tbi: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@mjcipriano" diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index c8537043..8ef4fdb0 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -9,7 +9,8 @@ include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhoc include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_BGZIPTABIX as TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' - +include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../modules/nf-core/tabix/tabix/main' +include { GATK4_SELECTVARIANTS } from '../../modules/local/gatk4/selectvariants/main' workflow ANNOTATE_SNVS { @@ -22,11 +23,13 @@ workflow ANNOTATE_SNVS { vep_cache fasta gnomad_af + split_intervals samples main: - ch_versions = Channel.empty() - ch_toml = Channel.fromPath(vcfanno_toml) + ch_versions = Channel.empty() + ch_toml = Channel.fromPath(vcfanno_toml) + ch_vcf_scatter_in = Channel.empty() // // annotate rhocall @@ -74,10 +77,18 @@ workflow ANNOTATE_SNVS { BCFTOOLS_VIEW(TABIX_VCFANNO.out.gz_tbi,[],[],[]) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) + TABIX_BCFTOOLS (BCFTOOLS_VIEW.out.vcf) + ch_versions = ch_versions.mix(TABIX_BCFTOOLS.out.versions) + + BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS.out.tbi).collect().set { ch_vcf_scatter_in } + + GATK4_SELECTVARIANTS (ch_vcf_scatter_in, split_intervals) + ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) + // // annotate vep // - ENSEMBLVEP_SNV(BCFTOOLS_VIEW.out.vcf, + ENSEMBLVEP_SNV(GATK4_SELECTVARIANTS.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, @@ -88,6 +99,6 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) emit: - vcf_ann = ENSEMBLVEP_SNV.out.vcf + vcf_ann = BCFTOOLS_VIEW.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 65315bb9..d60a04fc 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -8,7 +8,6 @@ workflow SCATTER_GENOME { fai_no_meta fasta_no_meta - main: ch_versions = Channel.empty() @@ -19,7 +18,7 @@ workflow SCATTER_GENOME { ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) emit: - bed = BUILD_BED.out.bed - split_intervals = GATK4_SPLITINTERVALS.out.split_intervals + bed = BUILD_BED.out.bed.collect() + split_intervals = GATK4_SPLITINTERVALS.out.split_intervals.map { meta, it -> it }.flatten().collate(1) versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1c06a22b..e0f91b01 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -238,7 +238,10 @@ workflow RAREDISEASE { ch_genome_fai_meta, ch_genome_fai_no_meta, ch_genome_fasta_no_meta - ) + ) + .set { ch_scatter } + + ch_scatter_split_intervals = ch_scatter.split_intervals ?: Channel.empty() // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( @@ -381,6 +384,7 @@ workflow RAREDISEASE { ch_vep_cache, ch_genome_fasta_no_meta, ch_gnomad_af, + ch_scatter_split_intervals, CHECK_INPUT.out.samples ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) From 56a5d025c0de2a16e660261da0facf296bc37c44 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 03:16:43 +0100 Subject: [PATCH 0787/1921] selvar local --- modules.json | 4 -- modules/nf-core/gatk4/selectvariants/main.nf | 43 --------------- modules/nf-core/gatk4/selectvariants/meta.yml | 55 ------------------- 3 files changed, 102 deletions(-) delete mode 100644 modules/nf-core/gatk4/selectvariants/main.nf delete mode 100644 modules/nf-core/gatk4/selectvariants/meta.yml diff --git a/modules.json b/modules.json index 9b55b923..79bb1f15 100644 --- a/modules.json +++ b/modules.json @@ -97,10 +97,6 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, - "gatk4/selectvariants": { - "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" - }, "gatk4/splitintervals": { "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf deleted file mode 100644 index ac385f4f..00000000 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ /dev/null @@ -1,43 +0,0 @@ -process GATK4_SELECTVARIANTS { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) - 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(vcf), path(vcf_idx) - - output: - tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf - tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK VariantFiltration] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.toGiga() - } - """ - gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ - --variant $vcf \\ - --output ${prefix}.selectvariants.vcf.gz \\ - --tmp-dir . \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/gatk4/selectvariants/meta.yml b/modules/nf-core/gatk4/selectvariants/meta.yml deleted file mode 100644 index 381af249..00000000 --- a/modules/nf-core/gatk4/selectvariants/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: gatk4_selectvariants -description: Select a subset of variants from a VCF file -keywords: - - gatk - - gatk4 - - selectvariants - - vcf -tools: - - gatk4: - description: | - Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools - with a primary focus on variant discovery and genotyping. Its powerful processing engine - and high-performance computing features make it capable of taking on projects of any size. - homepage: https://gatk.broadinstitute.org/hc/en-us - documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants - tool_dev_url: https://github.com/broadinstitute/gatk - doi: 10.1158/1538-7445.AM2017-3590 - licence: ["Apache-2.0"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: list - description: VCF(.gz) file - pattern: "*.{vcf,vcf.gz}" - - vcf_idx: - type: list - description: VCF file index - pattern: "*.{idx,tbi}" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.selectvariants.vcf.gz" - - vcf_tbi: - type: list - description: VCF file index - pattern: "*.{idx,tbi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@mjcipriano" From d0bd4e9edcd94382286d1334a70a28e0525182c0 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 7 Nov 2022 10:53:04 +0100 Subject: [PATCH 0788/1921] fix removed commented outputs from emit analyse_MT --- subworkflows/local/analyse_MT.nf | 4 ---- 1 file changed, 4 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 3efac41d..b5ad1762 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -88,11 +88,7 @@ workflow ANALYSE_MT { report = MERGE_ANNOTATE_MT.out.report txt = ALIGN_AND_CALL_MT.out.txt html = ALIGN_AND_CALL_MT.out.html -// vcf_shift = ALIGN_AND_CALL_MT_SHIFT.out.vcf -// tbi_shift = ALIGN_AND_CALL_MT_SHIFT.out.tbi txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html -// vcf_lift = PICARD_LIFTOVERVCF.out.vcf_lifted -// vcf_unlift = PICARD_LIFTOVERVCF.out.vcf_unlifted versions = ch_versions // channel: [ versions.yml ] } From 8ba8b8e33eb0d024d7e7aa93a22f5c6b5f7a278f Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 7 Nov 2022 10:56:02 +0100 Subject: [PATCH 0789/1921] fix clear name for channel in align_and_call_MT --- subworkflows/local/align_and_call_MT.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index db045dc9..5bc81264 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -66,8 +66,8 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) // Filter Mutect2 calls - ch_mutect_tbi = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) - ch_mutect_out = ch_mutect_tbi.join(GATK4_MUTECT2_MT.out.stats, by: [0]) + ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) + ch_mutect_out = ch_mutect_vcf.join(GATK4_MUTECT2_MT.out.stats, by: [0]) ch_to_filt = ch_mutect_out.map { meta, vcf, tbi, stats -> return [meta, vcf, tbi, stats, [], [], [], []]} From 705c680fa62811de253613f3386dd6301efb6394 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 7 Nov 2022 10:57:43 +0100 Subject: [PATCH 0790/1921] Update subworkflows/local/merge_annotate_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/merge_annotate_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 961470a8..446eb4f6 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -48,7 +48,7 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) // Spliting multiallelic calls - ch_in_split=GATK4_VARIANTFILTRATION_MT.out.vcf.join( GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) + ch_in_split = GATK4_VARIANTFILTRATION_MT.out.vcf.join( GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions) From 6922325cd621838f66bf7f37b25b750e31f087f7 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 7 Nov 2022 10:58:09 +0100 Subject: [PATCH 0791/1921] Update subworkflows/local/align_and_call_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/align_and_call_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index db045dc9..4a30fc18 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -66,7 +66,7 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) // Filter Mutect2 calls - ch_mutect_tbi = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) + ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) ch_mutect_out = ch_mutect_tbi.join(GATK4_MUTECT2_MT.out.stats, by: [0]) ch_to_filt = ch_mutect_out.map { meta, vcf, tbi, stats -> From b5bd306575c9a0e0f9823d91e19bbc131c255fd0 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 7 Nov 2022 11:12:10 +0100 Subject: [PATCH 0792/1921] Update subworkflows/local/merge_annotate_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/merge_annotate_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 446eb4f6..3592b9e0 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -87,7 +87,7 @@ workflow MERGE_ANNOTATE_MT { [], genome_fasta, genome_fai) - ch_mer_vcf=BCFTOOLS_MERGE_MT.out.merged_variants + ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) ch_ch_n=CHANGE_NAME_VCF_MT(ch_dedup_vcf.single) From 8a1a95d70f5121926f0306c918fbf7b2b082840c Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 7 Nov 2022 11:12:35 +0100 Subject: [PATCH 0793/1921] Update modules/local/change_name.nf Co-authored-by: Anders Jemt --- modules/local/change_name.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf index 63badda9..080f717c 100644 --- a/modules/local/change_name.nf +++ b/modules/local/change_name.nf @@ -12,6 +12,7 @@ process CHANGE_NAME { output: tuple val(meta), path( "*.${file_type}"), emit: file + when: task.ext.when == null || task.ext.when From 38ba4ad95be31664d0e065d36ce489712c72738d Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 7 Nov 2022 11:12:50 +0100 Subject: [PATCH 0794/1921] Update subworkflows/local/merge_annotate_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/merge_annotate_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 3592b9e0..ec43d5c4 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -90,7 +90,7 @@ workflow MERGE_ANNOTATE_MT { ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) - ch_ch_n=CHANGE_NAME_VCF_MT(ch_dedup_vcf.single) + ch_case_vcf_single = CHANGE_NAME_VCF_MT(ch_dedup_vcf.single) ch_in_vep=ch_mer_vcf.mix(ch_dedup_vcf.single) // Annotating with Hmtnote From 3023af62101bb4a9bf67a49b6ca01c9055d4885c Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 7 Nov 2022 11:14:52 +0100 Subject: [PATCH 0795/1921] fix spacing and naming of channels --- subworkflows/local/merge_annotate_MT.nf | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 961470a8..a8140448 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -63,35 +63,35 @@ workflow MERGE_ANNOTATE_MT { REMOVE_DUPLICATES_MT.out.vcf .collect{it[1]} .toList() - .set { file_list } + .set { file_list_rem_dup } TABIX_TABIX_MT2.out.tbi .collect{it[1]} .toList() - .set { file_list2 } + .set { file_list_tbi } case_info - .combine(file_list) - .combine(file_list2) - .set { ch_br } + .combine(file_list_rem_dup) + .combine(file_list_tbi) + .set { ch_rem_dup_vcf_tbi } - ch_br.branch { + ch_rem_dup_vcf_tbi.branch { meta, vcf, tbi -> single: vcf.size() == 1 return [meta, vcf] multiple: vcf.size() > 1 return [meta, vcf, tbi] - }.set { ch_dedup_vcf } + }.set { ch_case_vcf } - BCFTOOLS_MERGE_MT( ch_dedup_vcf.multiple, + BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, [], genome_fasta, genome_fai) - ch_mer_vcf=BCFTOOLS_MERGE_MT.out.merged_variants + ch_merged_vcf=BCFTOOLS_MERGE_MT.out.merged_variants ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) - ch_ch_n=CHANGE_NAME_VCF_MT(ch_dedup_vcf.single) - ch_in_vep=ch_mer_vcf.mix(ch_dedup_vcf.single) + ch_vcf_changed_name = CHANGE_NAME_VCF_MT( ch_case_vcf.single ) + ch_in_vep = ch_merged_vcf.mix( ch_vcf_changed_name ) // Annotating with Hmtnote //HMTNOTE_MT(ch_in_vep) From 7ce9afdb925735e12f708f9bd2925e0dcc052481 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 7 Nov 2022 11:33:02 +0100 Subject: [PATCH 0796/1921] fix spacing --- subworkflows/local/align_and_call_MT.nf | 4 ++-- subworkflows/local/analyse_MT.nf | 4 ++-- subworkflows/local/merge_annotate_MT.nf | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/subworkflows/local/align_and_call_MT.nf b/subworkflows/local/align_and_call_MT.nf index 5bc81264..9ec66d50 100644 --- a/subworkflows/local/align_and_call_MT.nf +++ b/subworkflows/local/align_and_call_MT.nf @@ -51,8 +51,8 @@ workflow ALIGN_AND_CALL_MT { // Index bam file SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch_sort_index_bam=SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) - ch_sort_index_bam_intervals_mt=ch_sort_index_bam.combine(intervals_mt) + ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) + ch_sort_index_bam_intervals_mt = ch_sort_index_bam.combine(intervals_mt) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) // Calls variants with Mutect2 diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index b5ad1762..3b6446e9 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -30,7 +30,7 @@ workflow ANALYSE_MT { ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT - CONVERT_MT_BAM_TO_FASTQ ( bam ) + CONVERT_MT_BAM_TO_FASTQ(bam) ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions)// Outputs bam files //STEP 2.1: MT ALLIGNMENT AND VARIANT CALLING @@ -90,5 +90,5 @@ workflow ANALYSE_MT { html = ALIGN_AND_CALL_MT.out.html txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/merge_annotate_MT.nf index 28dae997..786c8882 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/merge_annotate_MT.nf @@ -48,7 +48,7 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) // Spliting multiallelic calls - ch_in_split = GATK4_VARIANTFILTRATION_MT.out.vcf.join( GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) + ch_in_split = GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions) @@ -63,7 +63,7 @@ workflow MERGE_ANNOTATE_MT { REMOVE_DUPLICATES_MT.out.vcf .collect{it[1]} .toList() - .set { file_list_rem_dup } + .set { file_list_vcf } TABIX_TABIX_MT2.out.tbi .collect{it[1]} @@ -71,7 +71,7 @@ workflow MERGE_ANNOTATE_MT { .set { file_list_tbi } case_info - .combine(file_list_rem_dup) + .combine(file_list_vcf) .combine(file_list_tbi) .set { ch_rem_dup_vcf_tbi } @@ -87,11 +87,11 @@ workflow MERGE_ANNOTATE_MT { [], genome_fasta, genome_fai) - ch_merged_vcf=BCFTOOLS_MERGE_MT.out.merged_variants + ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) - ch_vcf_changed_name = CHANGE_NAME_VCF_MT( ch_case_vcf.single ) - ch_in_vep = ch_merged_vcf.mix( ch_vcf_changed_name ) + ch_vcf_changed_name = CHANGE_NAME_VCF_MT(ch_case_vcf.single) + ch_in_vep = ch_merged_vcf.mix(ch_vcf_changed_name) // Annotating with Hmtnote //HMTNOTE_MT(ch_in_vep) From dde617a002441611dba9440b10db6b47f6e0680c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:23:22 +0100 Subject: [PATCH 0797/1921] update modules conf --- conf/modules.config | 14 ++++++++++++++ subworkflows/local/annotate_snvs.nf | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 7205540e..2b287030 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -730,7 +730,21 @@ process { ] } + withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { + cpus = 1 + memory = 60.GB + ext.prefix = { "${meta.id}_${intervals_list.simpleName}" } + ext.when = { params.annotate_snv_switch } + publishDir = [ + enabled: params.save_reference, + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { + ext.prefix = { "${vcf.simpleName}_vep" } ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', '--distance 5000', diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 8ef4fdb0..0ff54c43 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -9,6 +9,7 @@ include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhoc include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_BGZIPTABIX as TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_BGZIPTABIX as TABIX_VEP } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../modules/nf-core/tabix/tabix/main' include { GATK4_SELECTVARIANTS } from '../../modules/local/gatk4/selectvariants/main' @@ -98,6 +99,21 @@ workflow ANNOTATE_SNVS { ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) + TABIX_VEP (ENSEMBLVEP_SNV.out.vcf) + ch_versions = ch_versions.mix(TABIX_VEP.out.versions) + + TABIX_VEP.out.gz_tbi + .groupTuple() + .map { meta, vcfs, tbis -> + def sortedvcfs = vcfs.sort() + def sortedtbis = tbis.sort() + return [ meta, sortedvcfs, sortedtbis ] + } + .set { ch_vep_ann } + + ch_vep_ann.view() + + emit: vcf_ann = BCFTOOLS_VIEW.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] From 0393f6092cb284639ea9ac330ef8e1fe0918506a Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 7 Nov 2022 13:30:12 +0100 Subject: [PATCH 0798/1921] feat updated bcftools merge --- modules.json | 2 +- modules/nf-core/bcftools/merge/main.nf | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 4358163c..c851a2f0 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "bcftools/merge": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "d1147c1baa105d01e5e39bd668a101bb213f1c37" }, "bcftools/norm": { "branch": "master", diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index af586cd1..2c9d68fd 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -43,4 +43,20 @@ process BCFTOOLS_MERGE { bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf.gz" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ } From 66bd624eb5da385807980ff909af7bb638873f12 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 7 Nov 2022 13:36:07 +0100 Subject: [PATCH 0799/1921] fix name of file in change_name.nf --- modules/local/change_name.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf index 080f717c..6d1df51b 100644 --- a/modules/local/change_name.nf +++ b/modules/local/change_name.nf @@ -24,7 +24,7 @@ process CHANGE_NAME { """ mv \\ $input_file \\ - ${meta.id}.${file_type} + ${prefix}.${file_type} """ stub: From e26146a0b33d50e7abfd7616f251f8fefb49fdf9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 14:57:03 +0100 Subject: [PATCH 0800/1921] update python script to use pli info in file --- bin/add_most_severe_pli.py | 65 +++++++------------ modules/local/add_most_severe_pli.nf | 3 +- .../local/annotate_consequence_pli.nf | 2 - workflows/raredisease.nf | 3 +- 4 files changed, 26 insertions(+), 47 deletions(-) diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py index 351b5041..eb2d8d29 100755 --- a/bin/add_most_severe_pli.py +++ b/bin/add_most_severe_pli.py @@ -5,35 +5,34 @@ from typing import TextIO -def parse_vep_transcripts(transcripts: list, symbol_ind: int) -> list: +def parse_vep_transcripts(transcripts: list, pli_ind: int) -> list: """ Parse each transcript and return a list of gene symbols. Args: transcripts (list): A list of vep transcript annotation - symbol_ind (int) : Index of the "allele" in the vep annotation record + pli_ind (int) : Index of pli value in the vep annotation record Returns: - gene_ids (list): list of gene ids in the record + pli_values (list): list of pli values in the record """ - gene_ids = [] + pli_values = [] for transcript in transcripts: vep_fields = transcript.strip().split("|") - gene_id = vep_fields[symbol_ind] - gene_ids.append(gene_id) - return gene_ids + pli_value = vep_fields[pli_ind] + pli_values.append(pli_value) + return pli_values -def construct_most_severe_pli_info(line: str, symbol_ind: int, pli_gene: dict) -> list: +def construct_most_severe_pli_info(line: str, pli_ind: int) -> list: """ Parse gene symbols, find the highest pli value of all gene symbols, add most_severe_pli tag to the info field and return a list of modified columns Args: line (str) : Vcf record - symbol_ind (int) : Index of the "SYMBOL" in the vep annotation record - pli_gene (dict): A dict of pli values, where gene symbols are the keys + pli_ind (int) : Index of pli value in the vep annotation record Returns: columns (list): A list of fields in the vcf record with most severe pli added @@ -45,14 +44,13 @@ def construct_most_severe_pli_info(line: str, symbol_ind: int, pli_gene: dict) - for field in info_fields: if field.startswith("CSQ="): transcripts = field.split("CSQ=")[1].split(",") - gene_ids = parse_vep_transcripts(transcripts, symbol_ind) - unique_ids = list(set(gene_ids)) - pli_values = [] - for gene_id in unique_ids: - if gene_id != "" and pli_gene.get(gene_id) is not None: - pli_values.append(pli_gene.get(gene_id)) - if pli_values: - columns[7] += ";most_severe_pli={:.2f}".format(max(pli_values)) + pli_values = parse_vep_transcripts(transcripts, pli_ind) + try: + pli_max = max(pli_values) + except ValueError: + pli_max = "" + if pli_max: + columns[7] += ";most_severe_pli={:.2f}".format(float(pli_max)) return columns @@ -64,26 +62,26 @@ def parse_vep_csq_schema(line: str) -> int: line: INFO line in the vcf header with CSQ information Returns: - symbol_ind (int) : Index of the "SYMBOL" in the vep annotation record + pli_ind (int) : Index of pli value in the vep annotation record """ fields = line.strip().split("Format: ")[1].replace('">', "").split("|") - symbol_ind = fields.index("SYMBOL") + pli_ind = fields.index("pLI_gene_value") - return symbol_ind + return pli_ind -def write_pli_annotated_vcf(file_in: TextIO, file_out: TextIO, var_csq: list): +def write_pli_annotated_vcf(file_in: TextIO, file_out: TextIO): """Add most severe pli field to record, and write the record to a vcf file""" for line in file_in: if line.startswith("#"): file_out.write(line) if line.startswith("##INFO=\n' ) else: - vcf_record = construct_most_severe_pli_info(line, symbol_ind, var_csq) + vcf_record = construct_most_severe_pli_info(line, pli_ind) file_out.write("\t".join(vcf_record) + "\n") @@ -97,7 +95,7 @@ def parse_args(argv=None): "--file_in", metavar="FILE_IN", type=Path, - help="Vcf file annotated with vep.", + help="Vcf file annotated with vep's pli plugin.", ) parser.add_argument( "--file_out", @@ -105,12 +103,6 @@ def parse_args(argv=None): type=Path, help="Vcf with most_severe_pli annotations added to it.", ) - parser.add_argument( - "--pli", - metavar="PLI", - type=Path, - help="Pli", - ) return parser.parse_args(argv) @@ -120,19 +112,10 @@ def main(argv=None): if not args.file_in.is_file(): print(f"The given input file {args.file_in} was not found!") sys.exit(2) - if not args.pli.is_file(): - print(f"The given variant consequence file {args.pli} was not found!") - sys.exit(2) args.file_out.parent.mkdir(parents=True, exist_ok=True) - pli_gene = {} - with open(args.pli) as f: - for line in f: - cols = line.strip().split() - if cols[0] != "gene": - pli_gene[cols[0]] = float(cols[1]) with open(args.file_out, "w") as out_vcf: with open(args.file_in) as in_vcf: - write_pli_annotated_vcf(in_vcf, out_vcf, pli_gene) + write_pli_annotated_vcf(in_vcf, out_vcf) if __name__ == "__main__": diff --git a/modules/local/add_most_severe_pli.nf b/modules/local/add_most_severe_pli.nf index dc7d4a22..53108c87 100644 --- a/modules/local/add_most_severe_pli.nf +++ b/modules/local/add_most_severe_pli.nf @@ -9,7 +9,6 @@ process ADD_MOST_SEVERE_PLI { input: tuple val(meta), path(vcf) - path (pli_gene) output: tuple val(meta), path("*_pli.vcf") , emit: vcf @@ -22,7 +21,7 @@ process ADD_MOST_SEVERE_PLI { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - add_most_severe_pli.py --file_in ${vcf} --file_out ${prefix}_pli.vcf --pli ${pli_gene} + add_most_severe_pli.py --file_in ${vcf} --file_out ${prefix}_pli.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index b269a4a6..dbc1f5cd 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -9,7 +9,6 @@ workflow ANNOTATE_CSQ_PLI { take: vcf // channel: [ val(meta), vcf ] variant_consequences // path: consequences.txt - pli_gene // path: pli_per_gene.txt main: ch_versions = Channel.empty() @@ -20,7 +19,6 @@ workflow ANNOTATE_CSQ_PLI { ) ADD_MOST_SEVERE_PLI ( ADD_MOST_SEVERE_CSQ.out.vcf, - pli_gene ) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 95a575c3..90b665d3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -322,8 +322,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_SV ( ch_sv_annotate.vcf_ann, - ch_variant_consequences, - ch_pli_per_gene + ch_variant_consequences ) RANK_VARIANTS_SV ( From bbfecb3358aaa9afa0063d3d2f54a3d1e11726fe Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:05:57 +0100 Subject: [PATCH 0801/1921] fix CI error --- workflows/raredisease.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 20ab9d9c..419dd821 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -392,7 +392,6 @@ workflow RAREDISEASE { ANN_CSQ_PLI_SNV ( FILTER_VEP_SNV.out.vcf, - RANK_VARIANTS_SNV.out.vcf, ch_variant_consequences ) } From 77f3e9d68bb20050f41018e2eddee60e7295a9b7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 16:49:33 +0100 Subject: [PATCH 0802/1921] remove pli_per_gene refs --- conf/genomes.config | 2 -- main.nf | 1 - nextflow_schema.json | 7 ------- workflows/raredisease.nf | 3 --- 4 files changed, 13 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index e21a05f8..5b11a860 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -29,7 +29,6 @@ params { mt_intervals = "" mt_intervals_shift = "" mt_sequence_dictionary_shift = "" - pli_per_gene = "" reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" @@ -63,7 +62,6 @@ params { mt_intervals = "${params.local_genomes}/non_control_region.chrM.interval_list" mt_intervals_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" mt_sequence_dictionary_shift = "" - pli_per_gene = "" reduced_penetrance = "" score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" diff --git a/main.nf b/main.nf index ef2c4a3d..c2b9c872 100644 --- a/main.nf +++ b/main.nf @@ -38,7 +38,6 @@ params.mt_fai_shift = WorkflowMain.getGenomeAttribute(params, 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.pli_per_gene = WorkflowMain.getGenomeAttribute(params, 'pli_per_gene') 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/nextflow_schema.json b/nextflow_schema.json index 47477439..4253f52c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -214,13 +214,6 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "pli_per_gene": { - "type": "string", - "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "File with gene ids and their corresponding pli values", - "hidden": true - }, "reduced_penetrance": { "type": "string", "format": "path", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 419dd821..773f5d08 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -36,7 +36,6 @@ def checkPathParamList = [ params.mt_intervals_shift, params.mt_sequence_dictionary_shift, params.multiqc_config, - params.pli_per_gene, params.reduced_penetrance, params.score_config_snv, params.score_config_sv, @@ -155,8 +154,6 @@ workflow RAREDISEASE { : Channel.value([]) ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() : Channel.value([]) - ch_pli_per_gene = params.pli_per_gene ? Channel.fromPath(params.pli_per_gene).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() From 7d1bb848536d6105f978c2e28e626e4777bd2dea Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 17:25:53 +0100 Subject: [PATCH 0803/1921] review suggestions --- bin/add_most_severe_pli.py | 2 +- subworkflows/local/annotate_consequence_pli.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py index eb2d8d29..34a58916 100755 --- a/bin/add_most_severe_pli.py +++ b/bin/add_most_severe_pli.py @@ -7,7 +7,7 @@ def parse_vep_transcripts(transcripts: list, pli_ind: int) -> list: """ - Parse each transcript and return a list of gene symbols. + Parse each transcript and return a list of pli values. Args: transcripts (list): A list of vep transcript annotation diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index dbc1f5cd..24410abd 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -1,5 +1,5 @@ // -// A subworkflow to call SNVs by sentieon dnascope with a machine learning model. +// A subworkflow to add most severe consequence and pli to a vep annotated vcf // include { ADD_MOST_SEVERE_CSQ } from '../../modules/local/add_most_severe_consequence' From 75a826168bd8a6b97332cae57b88324f9d0a86e7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 17:28:04 +0100 Subject: [PATCH 0804/1921] update paths --- .../local/mitochondria/align_and_call_MT.nf | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 126a669a..2857c64e 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -2,17 +2,17 @@ // Align and call MT // -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../modules/nf-core/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../modules/nf-core/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../modules/nf-core/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../modules/nf-core/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../modules/nf-core/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../modules/nf-core/haplocheck/main' -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 { PICARD_RENAMESAMPLEINVCF as PICARD_RENAMESAMPLEINVCF_MT } from '../../modules/nf-core/picard/renamesampleinvcf/main' -include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../../modules/nf-core/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../../modules/nf-core/samtools/sort/main' +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../../modules/nf-core/haplocheck/main' +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 { PICARD_RENAMESAMPLEINVCF as PICARD_RENAMESAMPLEINVCF_MT } from '../../../modules/nf-core/picard/renamesampleinvcf/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' workflow ALIGN_AND_CALL_MT { take: From 8663ad16b4da4c285154f1725b32f5b7180abaf8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 17:52:49 +0100 Subject: [PATCH 0805/1921] update paths --- subworkflows/local/analyse_MT.nf | 6 +++--- .../{ => mitochondria}/merge_annotate_MT.nf | 20 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) rename subworkflows/local/{ => mitochondria}/merge_annotate_MT.nf (94%) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 52f50156..c60272bd 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -5,7 +5,7 @@ include { CONVERT_MT_BAM_TO_FASTQ } from './mitochondria/ include { ALIGN_AND_CALL_MT } from './mitochondria/align_and_call_MT' include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './mitochondria/align_and_call_MT' include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' -include { MERGE_ANNOTATE_MT } from './merge_annotate_MT' +include { MERGE_ANNOTATE_MT } from './mitochondria/merge_annotate_MT' workflow ANALYSE_MT { take: @@ -65,8 +65,8 @@ workflow ANALYSE_MT { ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) // STEP 3: MT MERGE AND ANNOTATE VARIANTS - MERGE_ANNOTATE_MT( - ALIGN_AND_CALL_MT.out.vcf, + MERGE_ANNOTATE_MT( + ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, genome_fasta, genome_dict, diff --git a/subworkflows/local/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf similarity index 94% rename from subworkflows/local/merge_annotate_MT.nf rename to subworkflows/local/mitochondria/merge_annotate_MT.nf index 786c8882..410d80ff 100644 --- a/subworkflows/local/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -12,7 +12,7 @@ include { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../m include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../modules/nf-core/bcftools/merge/main' include { HMTNOTE as HMTNOTE_MT } from '../../modules/nf-core/hmtnote/main' include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../modules/nf-core/tabix/tabix/main' -include { ENSEMBLVEP as ENSEMBLVEP_MT } from '../../modules/nf-core/ensemblvep/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' workflow MERGE_ANNOTATE_MT { @@ -29,7 +29,7 @@ workflow MERGE_ANNOTATE_MT { main: ch_versions = Channel.empty() - + ch_vcfs = vcf1 .join(vcf2, remainder: true) .map{ meta, vcf1, vcf2 -> @@ -41,12 +41,12 @@ workflow MERGE_ANNOTATE_MT { // Filtering Variants ch_filt_vcf = GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf.join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, by:[0]) - GATK4_VARIANTFILTRATION_MT(ch_filt_vcf, - genome_fasta, - genome_fai, + GATK4_VARIANTFILTRATION_MT(ch_filt_vcf, + genome_fasta, + genome_fai, genome_dict ) ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) - + // Spliting multiallelic calls ch_in_split = GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) @@ -83,9 +83,9 @@ workflow MERGE_ANNOTATE_MT { return [meta, vcf, tbi] }.set { ch_case_vcf } - BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, - [], - genome_fasta, + BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, + [], + genome_fasta, genome_fai) ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) @@ -118,4 +118,4 @@ workflow MERGE_ANNOTATE_MT { tbi = TABIX_TABIX_MT3.out.tbi report = ENSEMBLVEP_MT.out.report versions = ch_versions // channel: [ versions.yml ] -} \ No newline at end of file +} From b4850cba18c83f8d4b3ed4f10d58b584f5abad67 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 17:56:05 +0100 Subject: [PATCH 0806/1921] udpate module paths --- .../local/mitochondria/merge_annotate_MT.nf | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 410d80ff..659b5f4e 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -2,18 +2,18 @@ // Merge and annotate MT // -include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../modules/nf-core/gatk4/mergevcfs/main' -include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../modules/nf-core/gatk4/variantfiltration/main' -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' -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 { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../modules/local/change_name' -include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../modules/nf-core/bcftools/merge/main' -include { HMTNOTE as HMTNOTE_MT } from '../../modules/nf-core/hmtnote/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 { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' +include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' +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 { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../../modules/local/change_name' +include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../../modules/nf-core/bcftools/merge/main' +include { HMTNOTE as HMTNOTE_MT } from '../../../modules/nf-core/hmtnote/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' workflow MERGE_ANNOTATE_MT { take: From 06931f0288741c87764123baadd0b08b89de1135 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 19:14:40 +0100 Subject: [PATCH 0807/1921] update a function call --- workflows/raredisease.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c90385c1..54f61dda 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -377,8 +377,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_SNV ( ch_snv_annotate.vcf_ann, - ch_variant_consequences, - ch_pli_per_gene + ch_variant_consequences ) RANK_VARIANTS_SNV ( From ce3bbac8878fb533f766d033917a8a8872c77d67 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Nov 2022 23:08:09 +0100 Subject: [PATCH 0808/1921] add bcftools concat --- bin/add_most_severe_consequence.py | 4 +- bin/add_most_severe_pli.py | 4 +- conf/modules.config | 8 ++++ modules.json | 4 ++ modules/nf-core/bcftools/concat/main.nf | 35 +++++++++++++++++ modules/nf-core/bcftools/concat/meta.yml | 48 ++++++++++++++++++++++++ subworkflows/local/annotate_snvs.nf | 7 ++-- 7 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 modules/nf-core/bcftools/concat/main.nf create mode 100644 modules/nf-core/bcftools/concat/meta.yml diff --git a/bin/add_most_severe_consequence.py b/bin/add_most_severe_consequence.py index 0a28c4d6..08d7d66d 100755 --- a/bin/add_most_severe_consequence.py +++ b/bin/add_most_severe_consequence.py @@ -1,5 +1,6 @@ #!/usr/bin/env python import argparse +import gzip import sys from pathlib import Path from typing import Tuple, TextIO @@ -177,8 +178,9 @@ def main(argv=None): args.file_out.parent.mkdir(parents=True, exist_ok=True) with open(args.variant_csq) as f: var_csq = [line.strip() for line in f] + opener = gzip.open if (args.file_in.suffix == ".gz") else open with open(args.file_out, "w") as out_vcf: - with open(args.file_in) as in_vcf: + with opener(args.file_in, "rt") as in_vcf: write_csq_annotated_vcf(in_vcf, out_vcf, var_csq) diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py index 351b5041..22f2c47d 100755 --- a/bin/add_most_severe_pli.py +++ b/bin/add_most_severe_pli.py @@ -1,5 +1,6 @@ #!/usr/bin/env python import argparse +import gzip import sys from pathlib import Path from typing import TextIO @@ -130,8 +131,9 @@ def main(argv=None): cols = line.strip().split() if cols[0] != "gene": pli_gene[cols[0]] = float(cols[1]) + opener = gzip.open if (args.file_in.suffix == ".gz") else open with open(args.file_out, "w") as out_vcf: - with open(args.file_in) as in_vcf: + with opener(args.file_in, "rt") as in_vcf: write_pli_annotated_vcf(in_vcf, out_vcf, pli_gene) diff --git a/conf/modules.config b/conf/modules.config index 2b287030..61fe6b76 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -761,6 +761,14 @@ process { mode: params.publish_dir_mode, ] } + + withName: '.*ANNOTATE_SNVS:TABIX_VEP' { + ext.prefix = { "${input.simpleName}_vep" } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + ] + } } // diff --git a/modules.json b/modules.json index 79bb1f15..22a21064 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,10 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bcftools/concat": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, "bcftools/norm": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf new file mode 100644 index 00000000..d2a58a55 --- /dev/null +++ b/modules/nf-core/bcftools/concat/main.nf @@ -0,0 +1,35 @@ +process BCFTOOLS_CONCAT { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': + 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + + input: + tuple val(meta), path(vcfs), path(tbi) + + output: + tuple val(meta), path("*.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + bcftools concat \\ + --output ${prefix}.vcf.gz \\ + $args \\ + --threads $task.cpus \\ + ${vcfs} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml new file mode 100644 index 00000000..167dbe5a --- /dev/null +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -0,0 +1,48 @@ +name: bcftools_concat +description: Concatenate VCF files +keywords: + - variant calling + - concat + - bcftools + - VCF + +tools: + - concat: + description: | + Concatenate VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: files + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbi: + type: files + description: | + List containing 2 or more index files (optional) + e.g. [ 'file1.tbi', 'file2.tbi' ] +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF concatenated output file + pattern: "*.{vcf.gz}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 0ff54c43..4183ee16 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -3,6 +3,7 @@ // include { VCFANNO } from '../../modules/nf-core/vcfanno/main' +include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bcftools/concat/main' 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' @@ -111,10 +112,10 @@ workflow ANNOTATE_SNVS { } .set { ch_vep_ann } - ch_vep_ann.view() - + BCFTOOLS_CONCAT (ch_vep_ann) + ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) emit: - vcf_ann = BCFTOOLS_VIEW.out.vcf + vcf_ann = BCFTOOLS_CONCAT.out.vcf versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 0f1d44a68c4d61a129effd58883c2403f2f9da93 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 8 Nov 2022 12:02:42 +0100 Subject: [PATCH 0809/1921] fix CI error --- subworkflows/local/analyse_MT.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index fc950fbf..dadc4214 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -59,17 +59,17 @@ workflow ANALYSE_MT { // STEP 2.3: PICARD_LIFTOVERVCF PICARD_LIFTOVERVCF ( - ALIGN_AND_CALL_MT_SHIFT.out.vcf, - genome_dict, - shift_mt_backchain, - genome_fasta_no_meta) + ALIGN_AND_CALL_MT_SHIFT.out.vcf, + genome_dict, + shift_mt_backchain, + genome_fasta_no_meta) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) // STEP 3: MT MERGE AND ANNOTATE VARIANTS MERGE_ANNOTATE_MT( ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, - genome_fasta, + genome_fasta_no_meta, genome_dict, genome_fai, vep_genome, From 212e65ab4fd69e0c6ebe8afebb0ee3ba9a4952df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 8 Nov 2022 13:30:55 +0100 Subject: [PATCH 0810/1921] fix editor config --- modules/local/gatk4/printreads/main.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/gatk4/printreads/main.nf b/modules/local/gatk4/printreads/main.nf index 795def9f..25026cc8 100644 --- a/modules/local/gatk4/printreads/main.nf +++ b/modules/local/gatk4/printreads/main.nf @@ -31,11 +31,11 @@ process GATK4_PRINTREADS { } """ gatk --java-options "-Xmx${avail_mem}g" PrintReads \\ - $args \\ - --reference $fasta \\ - --input $bam \\ - --read-index $bai \\ - --output ${prefix}.reads.bam + $args \\ + --reference $fasta \\ + --input $bam \\ + --read-index $bai \\ + --output ${prefix}.reads.bam cat <<-END_VERSIONS > versions.yml "${task.process}": From 7bde794ab13c1f48bec9944494511152bcdbe436 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 15:37:31 +0100 Subject: [PATCH 0811/1921] update modules --- modules.json | 16 +++- modules/local/gatk4/selectvariants/main.nf | 3 +- modules/nf-core/bcftools/concat/main.nf | 11 +++ modules/nf-core/fastqc/main.nf | 6 +- modules/nf-core/gatk4/printreads/main.nf | 64 ++++++++++++++++ modules/nf-core/gatk4/printreads/meta.yml | 76 +++++++++++++++++++ modules/nf-core/gatk4/selectvariants/main.nf | 56 ++++++++++++++ modules/nf-core/gatk4/selectvariants/meta.yml | 60 +++++++++++++++ modules/nf-core/gatk4/splitintervals/main.nf | 13 ++++ .../picard/addorreplacereadgroups/main.nf | 17 +---- .../picard/addorreplacereadgroups/meta.yml | 6 ++ subworkflows/local/annotate_snvs.nf | 2 +- 12 files changed, 306 insertions(+), 24 deletions(-) create mode 100644 modules/nf-core/gatk4/printreads/main.nf create mode 100644 modules/nf-core/gatk4/printreads/meta.yml create mode 100644 modules/nf-core/gatk4/selectvariants/main.nf create mode 100644 modules/nf-core/gatk4/selectvariants/meta.yml diff --git a/modules.json b/modules.json index a456b8ca..21e7ac69 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "bcftools/concat": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "f60fe628e71a25cbbe303f02a01eff706f4bd87d" }, "bcftools/merge": { "branch": "master", @@ -75,7 +75,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "f6a11408536fbee6cbea1f5977605011873de3ca" + "git_sha": "3dd73937b084b547f9272bc901e0f120a7913fd8" }, "gatk4/bedtointervallist": { "branch": "master", @@ -105,6 +105,10 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/printreads": { + "branch": "master", + "git_sha": "6220bc7d99377159f4cc7f6a421b494f3e2466d6" + }, "gatk4/revertsam": { "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" @@ -113,9 +117,13 @@ "branch": "master", "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" }, + "gatk4/selectvariants": { + "branch": "master", + "git_sha": "9b7ca0f32e122a0cd1f33689fafbad4112407b42" + }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "f6ee593e77fbb9fb88e506b761611cccb0bf51ac" }, "gatk4/variantfiltration": { "branch": "master", @@ -167,7 +175,7 @@ }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5" }, "picard/collecthsmetrics": { "branch": "master", diff --git a/modules/local/gatk4/selectvariants/main.nf b/modules/local/gatk4/selectvariants/main.nf index c4364ea4..348f2eb6 100644 --- a/modules/local/gatk4/selectvariants/main.nf +++ b/modules/local/gatk4/selectvariants/main.nf @@ -8,8 +8,7 @@ process GATK4_SELECTVARIANTS { 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" input: - tuple val(meta), path(vcf), path(vcf_idx) - path (intervals_list) + tuple val(meta), path(vcf), path(vcf_idx), path (intervals_list) output: tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index d2a58a55..b62a55a7 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -32,4 +32,15 @@ process BCFTOOLS_CONCAT { bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') END_VERSIONS """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ } diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 55c50c87..3bebb240 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -8,7 +8,7 @@ process FASTQC { 'quay.io/biocontainers/fastqc:0.11.9--0' }" input: - tuple val(meta), path(reads, stageAs: "?/*") + tuple val(meta), path(reads) output: tuple val(meta), path("*.html"), emit: html @@ -22,8 +22,8 @@ process FASTQC { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - printf "%s\\n" $reads | while read f; do ln -s \$f ${prefix}_\$(basename \$f) ; done - fastqc $args --threads $task.cpus ${prefix}_* + printf "%s\\n" $reads | while read f; do [[ \$f =~ ^${prefix}.* ]] || ln -s \$f ${prefix}_\$f ; done + fastqc $args --threads $task.cpus ${prefix}* cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf new file mode 100644 index 00000000..c7562d9e --- /dev/null +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -0,0 +1,64 @@ +process GATK4_PRINTREADS { + tag "$meta.id" + label 'process_single' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(index) + tuple val(meta2), path(fasta) + path (fai) + path (dict) + + output: + tuple val(meta), path("${prefix}.bam") , emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam") , emit: sam, optional: true + 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 avail_mem = 3 + if (!task.memory) { + log.info '[GATK PrintReads] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + 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}g" PrintReads \\ + $args \\ + --reference $fasta \\ + --input $input \\ + --read-index $index \\ + --output ${prefix}.${input.getExtension()} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.${input.getExtension()} + touch ${prefix}.${input.getExtension()} + touch ${prefix}.${input.getExtension()} + + 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/printreads/meta.yml b/modules/nf-core/gatk4/printreads/meta.yml new file mode 100644 index 00000000..cd48959f --- /dev/null +++ b/modules/nf-core/gatk4/printreads/meta.yml @@ -0,0 +1,76 @@ +name: "gatk4_printreads" +description: Print reads in the SAM/BAM/CRAM file +keywords: + - gatk4 + - bam + - cram + - sam + - printreads +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 ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: reference fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: reference fasta index file + pattern: "*.{fai}" + - dict: + type: file + description: reference fasta dictionary 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" + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - cram: + type: file + description: Sorted CRAM file + pattern: "*.{cram}" + - sam: + type: file + description: Sorted SAM file + pattern: "*.{sam}" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf new file mode 100644 index 00000000..d05bff6f --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -0,0 +1,56 @@ +process GATK4_SELECTVARIANTS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf), path(vcf_idx), path (intervals) + + output: + tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf + tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals ? "--intervals ${intervals}" : "" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.toGiga() + } + """ + gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ + --variant $vcf \\ + --output ${prefix}.selectvariants.vcf.gz \\ + $interval \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.selectvariants.vcf.gz + touch ${prefix}.selectvariants.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/gatk4/selectvariants/meta.yml b/modules/nf-core/gatk4/selectvariants/meta.yml new file mode 100644 index 00000000..46605d15 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/meta.yml @@ -0,0 +1,60 @@ +name: gatk4_selectvariants +description: Select a subset of variants from a VCF file +keywords: + - gatk + - gatk4 + - selectvariants + - vcf +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: VCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - vcf_idx: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - intervals: + type: file + description: One or more genomic intervals over which to operate + pattern: ".intervals" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.selectvariants.vcf.gz" + - vcf_tbi: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@mjcipriano" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index 5473ae42..c642b210 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -45,4 +45,17 @@ process GATK4_SPLITINTERVALS { gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + touch ${prefix}/0000-scattered.interval_list + touch ${prefix}/0001-scattered.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/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index f7f929de..a6debc91 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -12,6 +12,7 @@ process PICARD_ADDORREPLACEREADGROUPS { output: tuple val(meta), path("*.bam"), emit: bam + tuple val(meta), path("*.bai"), emit: bai, optional: true path "versions.yml" , emit: versions when: @@ -20,12 +21,6 @@ process PICARD_ADDORREPLACEREADGROUPS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def ID = task.ext.id ?: "id" - def LIBRARY= task.ext.library ?: "library" - def PLATFORM= task.ext.platform ?: "illumina" - def BARCODE= task.ext.barcode ?: "barcode" - def SAMPLE= task.ext.sample ?: "sample" - def INDEX= task.ext.index ?: "index" def avail_mem = 3 if (!task.memory) { log.info '[Picard AddOrReplaceReadGroups] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -38,17 +33,11 @@ process PICARD_ADDORREPLACEREADGROUPS { AddOrReplaceReadGroups \\ $args \\ --INPUT ${bam} \\ - --OUTPUT ${prefix}.bam \\ - --RGID ${ID} \\ - --RGLB ${LIBRARY} \\ - --RGPL ${PLATFORM} \\ - --RGPU ${BARCODE} \\ - --RGSM ${SAMPLE} \\ - --CREATE_INDEX true + --OUTPUT ${prefix}.bam cat <<-END_VERSIONS > versions.yml "${task.process}": - picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o -E '[[:digit:]]+\\.[[:digit:]]+\\.[[:digit:]]+') END_VERSIONS """ diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml index e013bf4b..28f584c3 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/meta.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -39,8 +39,14 @@ output: type: file description: Output BAM file pattern: "*.{bam}" + - bai: + type: file + description: BAM index file + pattern: "*.{bai}" authors: - "@sateeshperi" - "@mjcipriano" - "@hseabolt" + - "@cmatKhan" + - "@muffato" diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 4183ee16..a9183ebb 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -84,7 +84,7 @@ workflow ANNOTATE_SNVS { BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS.out.tbi).collect().set { ch_vcf_scatter_in } - GATK4_SELECTVARIANTS (ch_vcf_scatter_in, split_intervals) + GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(split_intervals)) ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) // From e3b0f3ec281becbb6721920203f350675dfb3b87 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 16:21:12 +0100 Subject: [PATCH 0812/1921] remove local and update paths --- modules/local/gatk4/printreads/main.nf | 56 ---------------- modules/local/gatk4/printreads/meta.yml | 64 ------------------- modules/local/gatk4/selectvariants/main.nf | 56 ---------------- modules/local/gatk4/selectvariants/meta.yml | 55 ---------------- subworkflows/local/annotate_snvs.nf | 2 +- .../mitochondria/convert_mt_bam_to_fastq.nf | 2 +- 6 files changed, 2 insertions(+), 233 deletions(-) delete mode 100644 modules/local/gatk4/printreads/main.nf delete mode 100644 modules/local/gatk4/printreads/meta.yml delete mode 100644 modules/local/gatk4/selectvariants/main.nf delete mode 100644 modules/local/gatk4/selectvariants/meta.yml diff --git a/modules/local/gatk4/printreads/main.nf b/modules/local/gatk4/printreads/main.nf deleted file mode 100644 index 25026cc8..00000000 --- a/modules/local/gatk4/printreads/main.nf +++ /dev/null @@ -1,56 +0,0 @@ -process GATK4_PRINTREADS { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) - 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(bam), path(bai) - tuple val(meta2), path(fasta) - path (fai) - path (dict) - - output: - tuple val(meta), path("*.reads.bam"), emit: bam - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK PrintReads] 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" PrintReads \\ - $args \\ - --reference $fasta \\ - --input $bam \\ - --read-index $bai \\ - --output ${prefix}.reads.bam - - 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}.reads.bam - - 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/printreads/meta.yml b/modules/local/gatk4/printreads/meta.yml deleted file mode 100644 index 79050411..00000000 --- a/modules/local/gatk4/printreads/meta.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: "gatk4_printreads" -description: Print reads in the SAM/BAM/CRAM file -keywords: - - printreads -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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: reference fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: reference fasta index file - pattern: "*.{fai}" - - dict: - type: file - description: reference fasta dictionary 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" - - bam: - type: file - description: Sorted BAM/CRAM file - pattern: "*.{bam,cram}" - -authors: - - "@ramprasadn" diff --git a/modules/local/gatk4/selectvariants/main.nf b/modules/local/gatk4/selectvariants/main.nf deleted file mode 100644 index 348f2eb6..00000000 --- a/modules/local/gatk4/selectvariants/main.nf +++ /dev/null @@ -1,56 +0,0 @@ -process GATK4_SELECTVARIANTS { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) - 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(vcf), path(vcf_idx), path (intervals_list) - - output: - tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf - tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def interval = intervals_list ? "--intervals ${intervals_list}" : "" - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.toGiga() - } - """ - gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ - --variant $vcf \\ - --output ${prefix}.selectvariants.vcf.gz \\ - $interval \\ - --tmp-dir . \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.selectvariants.vcf.gz - touch ${prefix}.selectvariants.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/gatk4/selectvariants/meta.yml b/modules/local/gatk4/selectvariants/meta.yml deleted file mode 100644 index 381af249..00000000 --- a/modules/local/gatk4/selectvariants/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: gatk4_selectvariants -description: Select a subset of variants from a VCF file -keywords: - - gatk - - gatk4 - - selectvariants - - vcf -tools: - - gatk4: - description: | - Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools - with a primary focus on variant discovery and genotyping. Its powerful processing engine - and high-performance computing features make it capable of taking on projects of any size. - homepage: https://gatk.broadinstitute.org/hc/en-us - documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants - tool_dev_url: https://github.com/broadinstitute/gatk - doi: 10.1158/1538-7445.AM2017-3590 - licence: ["Apache-2.0"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: list - description: VCF(.gz) file - pattern: "*.{vcf,vcf.gz}" - - vcf_idx: - type: list - description: VCF file index - pattern: "*.{idx,tbi}" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.selectvariants.vcf.gz" - - vcf_tbi: - type: list - description: VCF file index - pattern: "*.{idx,tbi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@mjcipriano" diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index a9183ebb..f03466c5 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -12,7 +12,7 @@ include { TABIX_BGZIPTABIX as TABIX_ROHCALL } from '../../modules/nf-core/tabi include { TABIX_BGZIPTABIX as TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as TABIX_VEP } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../modules/nf-core/tabix/tabix/main' -include { GATK4_SELECTVARIANTS } from '../../modules/local/gatk4/selectvariants/main' +include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' workflow ANNOTATE_SNVS { diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index 19644b90..128b1e81 100644 --- a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -2,7 +2,7 @@ // Prepare bam files for MT allignment // -include { GATK4_PRINTREADS as GATK4_PRINTREADS_MT } from '../../../modules/local/gatk4/printreads/main' +include { GATK4_PRINTREADS as GATK4_PRINTREADS_MT } from '../../../modules/nf-core/gatk4/printreads/main' include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../../modules/nf-core/gatk4/revertsam/main' include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../../modules/nf-core/gatk4/samtofastq/main' From 79d2b8a1b8414f5cfe47a460a1f59db56dd519c6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 17:34:51 +0100 Subject: [PATCH 0813/1921] fix addorreplacegroups --- conf/modules.config | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 7bf44b06..bf411170 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -843,7 +843,14 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = {[ + '--VALIDATION_STRINGENCY LENIENT', + "-LB ${meta.id}", + "-PL ILLUMINA", + "-PU ${meta.id}", + "-SM ${meta.id}" + ].join(' ').trim() + } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { From a91e77c04f805652f80436718919f027494174b1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 18:29:24 +0100 Subject: [PATCH 0814/1921] Revert "Merge branch 'dev' of github.com:nf-core/raredisease into feat/scatter_gather" This reverts commit d24ba32615de5893c34f60fa3eb5b64af2f89061, reversing changes made to 66752ece2bc835289808f495c09b3aed58e6260b. --- modules/local/gatk4/printreads/main.nf | 56 ++++++++++++++++++ modules/local/gatk4/printreads/meta.yml | 64 +++++++++++++++++++++ modules/local/gatk4/selectvariants/main.nf | 57 ++++++++++++++++++ modules/local/gatk4/selectvariants/meta.yml | 55 ++++++++++++++++++ subworkflows/local/analyse_MT.nf | 2 +- 5 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 modules/local/gatk4/printreads/main.nf create mode 100644 modules/local/gatk4/printreads/meta.yml create mode 100644 modules/local/gatk4/selectvariants/main.nf create mode 100644 modules/local/gatk4/selectvariants/meta.yml diff --git a/modules/local/gatk4/printreads/main.nf b/modules/local/gatk4/printreads/main.nf new file mode 100644 index 00000000..25026cc8 --- /dev/null +++ b/modules/local/gatk4/printreads/main.nf @@ -0,0 +1,56 @@ +process GATK4_PRINTREADS { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(bam), path(bai) + tuple val(meta2), path(fasta) + path (fai) + path (dict) + + output: + tuple val(meta), path("*.reads.bam"), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK PrintReads] 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" PrintReads \\ + $args \\ + --reference $fasta \\ + --input $bam \\ + --read-index $bai \\ + --output ${prefix}.reads.bam + + 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}.reads.bam + + 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/printreads/meta.yml b/modules/local/gatk4/printreads/meta.yml new file mode 100644 index 00000000..79050411 --- /dev/null +++ b/modules/local/gatk4/printreads/meta.yml @@ -0,0 +1,64 @@ +name: "gatk4_printreads" +description: Print reads in the SAM/BAM/CRAM file +keywords: + - printreads +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 ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: reference fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: reference fasta index file + pattern: "*.{fai}" + - dict: + type: file + description: reference fasta dictionary 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" + - bam: + type: file + description: Sorted BAM/CRAM file + pattern: "*.{bam,cram}" + +authors: + - "@ramprasadn" diff --git a/modules/local/gatk4/selectvariants/main.nf b/modules/local/gatk4/selectvariants/main.nf new file mode 100644 index 00000000..c4364ea4 --- /dev/null +++ b/modules/local/gatk4/selectvariants/main.nf @@ -0,0 +1,57 @@ +process GATK4_SELECTVARIANTS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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(vcf), path(vcf_idx) + path (intervals_list) + + output: + tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf + tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals_list ? "--intervals ${intervals_list}" : "" + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.toGiga() + } + """ + gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ + --variant $vcf \\ + --output ${prefix}.selectvariants.vcf.gz \\ + $interval \\ + --tmp-dir . \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.selectvariants.vcf.gz + touch ${prefix}.selectvariants.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/gatk4/selectvariants/meta.yml b/modules/local/gatk4/selectvariants/meta.yml new file mode 100644 index 00000000..381af249 --- /dev/null +++ b/modules/local/gatk4/selectvariants/meta.yml @@ -0,0 +1,55 @@ +name: gatk4_selectvariants +description: Select a subset of variants from a VCF file +keywords: + - gatk + - gatk4 + - selectvariants + - vcf +tools: + - gatk4: + description: | + Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools + with a primary focus on variant discovery and genotyping. Its powerful processing engine + and high-performance computing features make it capable of taking on projects of any size. + homepage: https://gatk.broadinstitute.org/hc/en-us + documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: VCF(.gz) file + pattern: "*.{vcf,vcf.gz}" + - vcf_idx: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Compressed VCF file + pattern: "*.selectvariants.vcf.gz" + - vcf_tbi: + type: list + description: VCF file index + pattern: "*.{idx,tbi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@mjcipriano" diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index dadc4214..477949db 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -69,7 +69,7 @@ workflow ANALYSE_MT { MERGE_ANNOTATE_MT( ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, - genome_fasta_no_meta, + genome_fasta, genome_dict, genome_fai, vep_genome, From a423578641d0565b4cfc69fa851fe4f50981e3cf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 18:50:41 +0100 Subject: [PATCH 0815/1921] fix addorreplacerd --- modules.json | 2 +- modules/local/gatk4/printreads/main.nf | 56 ---------------- modules/local/gatk4/printreads/meta.yml | 64 ------------------- modules/local/gatk4/selectvariants/main.nf | 57 ----------------- modules/local/gatk4/selectvariants/meta.yml | 55 ---------------- .../picard/addorreplacereadgroups/main.nf | 17 ++++- .../picard/addorreplacereadgroups/meta.yml | 6 -- 7 files changed, 15 insertions(+), 242 deletions(-) delete mode 100644 modules/local/gatk4/printreads/main.nf delete mode 100644 modules/local/gatk4/printreads/meta.yml delete mode 100644 modules/local/gatk4/selectvariants/main.nf delete mode 100644 modules/local/gatk4/selectvariants/meta.yml diff --git a/modules.json b/modules.json index 21e7ac69..cf2998ec 100644 --- a/modules.json +++ b/modules.json @@ -175,7 +175,7 @@ }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, "picard/collecthsmetrics": { "branch": "master", diff --git a/modules/local/gatk4/printreads/main.nf b/modules/local/gatk4/printreads/main.nf deleted file mode 100644 index 25026cc8..00000000 --- a/modules/local/gatk4/printreads/main.nf +++ /dev/null @@ -1,56 +0,0 @@ -process GATK4_PRINTREADS { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) - 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(bam), path(bai) - tuple val(meta2), path(fasta) - path (fai) - path (dict) - - output: - tuple val(meta), path("*.reads.bam"), emit: bam - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK PrintReads] 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" PrintReads \\ - $args \\ - --reference $fasta \\ - --input $bam \\ - --read-index $bai \\ - --output ${prefix}.reads.bam - - 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}.reads.bam - - 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/printreads/meta.yml b/modules/local/gatk4/printreads/meta.yml deleted file mode 100644 index 79050411..00000000 --- a/modules/local/gatk4/printreads/meta.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: "gatk4_printreads" -description: Print reads in the SAM/BAM/CRAM file -keywords: - - printreads -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 ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: reference fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: reference fasta index file - pattern: "*.{fai}" - - dict: - type: file - description: reference fasta dictionary 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" - - bam: - type: file - description: Sorted BAM/CRAM file - pattern: "*.{bam,cram}" - -authors: - - "@ramprasadn" diff --git a/modules/local/gatk4/selectvariants/main.nf b/modules/local/gatk4/selectvariants/main.nf deleted file mode 100644 index c4364ea4..00000000 --- a/modules/local/gatk4/selectvariants/main.nf +++ /dev/null @@ -1,57 +0,0 @@ -process GATK4_SELECTVARIANTS { - tag "$meta.id" - label 'process_medium' - - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) - 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(vcf), path(vcf_idx) - path (intervals_list) - - output: - tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf - tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def interval = intervals_list ? "--intervals ${intervals_list}" : "" - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.toGiga() - } - """ - gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ - --variant $vcf \\ - --output ${prefix}.selectvariants.vcf.gz \\ - $interval \\ - --tmp-dir . \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.selectvariants.vcf.gz - touch ${prefix}.selectvariants.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/gatk4/selectvariants/meta.yml b/modules/local/gatk4/selectvariants/meta.yml deleted file mode 100644 index 381af249..00000000 --- a/modules/local/gatk4/selectvariants/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: gatk4_selectvariants -description: Select a subset of variants from a VCF file -keywords: - - gatk - - gatk4 - - selectvariants - - vcf -tools: - - gatk4: - description: | - Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools - with a primary focus on variant discovery and genotyping. Its powerful processing engine - and high-performance computing features make it capable of taking on projects of any size. - homepage: https://gatk.broadinstitute.org/hc/en-us - documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360036362532-SelectVariants - tool_dev_url: https://github.com/broadinstitute/gatk - doi: 10.1158/1538-7445.AM2017-3590 - licence: ["Apache-2.0"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: list - description: VCF(.gz) file - pattern: "*.{vcf,vcf.gz}" - - vcf_idx: - type: list - description: VCF file index - pattern: "*.{idx,tbi}" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.selectvariants.vcf.gz" - - vcf_tbi: - type: list - description: VCF file index - pattern: "*.{idx,tbi}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@mjcipriano" diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index a6debc91..f7f929de 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -12,7 +12,6 @@ process PICARD_ADDORREPLACEREADGROUPS { output: tuple val(meta), path("*.bam"), emit: bam - tuple val(meta), path("*.bai"), emit: bai, optional: true path "versions.yml" , emit: versions when: @@ -21,6 +20,12 @@ process PICARD_ADDORREPLACEREADGROUPS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def ID = task.ext.id ?: "id" + def LIBRARY= task.ext.library ?: "library" + def PLATFORM= task.ext.platform ?: "illumina" + def BARCODE= task.ext.barcode ?: "barcode" + def SAMPLE= task.ext.sample ?: "sample" + def INDEX= task.ext.index ?: "index" def avail_mem = 3 if (!task.memory) { log.info '[Picard AddOrReplaceReadGroups] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -33,11 +38,17 @@ process PICARD_ADDORREPLACEREADGROUPS { AddOrReplaceReadGroups \\ $args \\ --INPUT ${bam} \\ - --OUTPUT ${prefix}.bam + --OUTPUT ${prefix}.bam \\ + --RGID ${ID} \\ + --RGLB ${LIBRARY} \\ + --RGPL ${PLATFORM} \\ + --RGPU ${BARCODE} \\ + --RGSM ${SAMPLE} \\ + --CREATE_INDEX true cat <<-END_VERSIONS > versions.yml "${task.process}": - picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o -E '[[:digit:]]+\\.[[:digit:]]+\\.[[:digit:]]+') + picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml index 28f584c3..e013bf4b 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/meta.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -39,14 +39,8 @@ output: type: file description: Output BAM file pattern: "*.{bam}" - - bai: - type: file - description: BAM index file - pattern: "*.{bai}" authors: - "@sateeshperi" - "@mjcipriano" - "@hseabolt" - - "@cmatKhan" - - "@muffato" From ced43f9e52bce4e7e497ca00b36ba37452ec9145 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 18:58:54 +0100 Subject: [PATCH 0816/1921] update conf --- conf/modules.config | 10 ++-------- subworkflows/local/analyse_MT.nf | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index bf411170..1393c6b6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -805,6 +805,7 @@ process { process { withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { + memory = 60.GB beforeScript = {"mkdir ./tmp"} ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = [ @@ -843,14 +844,7 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - ext.args = {[ - '--VALIDATION_STRINGENCY LENIENT', - "-LB ${meta.id}", - "-PL ILLUMINA", - "-PU ${meta.id}", - "-SM ${meta.id}" - ].join(' ').trim() - } + ext.args = '--VALIDATION_STRINGENCY LENIENT' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 477949db..dadc4214 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -69,7 +69,7 @@ workflow ANALYSE_MT { MERGE_ANNOTATE_MT( ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, - genome_fasta, + genome_fasta_no_meta, genome_dict, genome_fai, vep_genome, From ecc71a560fe6c48dad5138b06af31e1000f67433 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:03:37 +0100 Subject: [PATCH 0817/1921] revert fastqc --- modules.json | 2 +- modules/nf-core/fastqc/main.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index cf2998ec..3b61dfb1 100644 --- a/modules.json +++ b/modules.json @@ -75,7 +75,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "3dd73937b084b547f9272bc901e0f120a7913fd8" + "git_sha": "f6a11408536fbee6cbea1f5977605011873de3ca" }, "gatk4/bedtointervallist": { "branch": "master", diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 3bebb240..55c50c87 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -8,7 +8,7 @@ process FASTQC { 'quay.io/biocontainers/fastqc:0.11.9--0' }" input: - tuple val(meta), path(reads) + tuple val(meta), path(reads, stageAs: "?/*") output: tuple val(meta), path("*.html"), emit: html @@ -22,8 +22,8 @@ process FASTQC { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - printf "%s\\n" $reads | while read f; do [[ \$f =~ ^${prefix}.* ]] || ln -s \$f ${prefix}_\$f ; done - fastqc $args --threads $task.cpus ${prefix}* + printf "%s\\n" $reads | while read f; do ln -s \$f ${prefix}_\$(basename \$f) ; done + fastqc $args --threads $task.cpus ${prefix}_* cat <<-END_VERSIONS > versions.yml "${task.process}": From 4dfb487eea2449d7e21174af03f00edafba04e5a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:18:21 +0100 Subject: [PATCH 0818/1921] rename aliases --- conf/modules.config | 1 - subworkflows/local/annotate_snvs.nf | 40 ++++++++++++++--------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 1393c6b6..7bf44b06 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -805,7 +805,6 @@ process { process { withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { - memory = 60.GB beforeScript = {"mkdir ./tmp"} ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = [ diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index f03466c5..73f005e9 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,17 +2,17 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/vcfanno/main' -include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bcftools/concat/main' -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 { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' -include { TABIX_BGZIPTABIX as TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' -include { TABIX_BGZIPTABIX as TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' -include { TABIX_BGZIPTABIX as TABIX_VEP } from '../../modules/nf-core/tabix/bgziptabix/main' -include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../modules/nf-core/tabix/tabix/main' -include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' +include { VCFANNO } from '../../modules/nf-core/vcfanno/main' +include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bcftools/concat/main' +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 { 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' +include { TABIX_BGZIPTABIX as ZIP_TABIX_VEP } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../modules/nf-core/tabix/tabix/main' +include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' workflow ANNOTATE_SNVS { @@ -64,19 +64,19 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) - TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) - ch_versions = ch_versions.mix(TABIX_ROHCALL.out.versions) + ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) + ch_versions = ch_versions.mix(ZIP_TABIX_ROHCALL.out.versions) // // annotate vcfanno // - VCFANNO (TABIX_ROHCALL.out.gz_tbi, ch_toml, vcfanno_resource_dir) + VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, ch_toml, vcfanno_resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) - TABIX_VCFANNO (VCFANNO.out.vcf) - ch_versions = ch_versions.mix(TABIX_VCFANNO.out.versions) + ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) + ch_versions = ch_versions.mix(ZIP_TABIX_VCFANNO.out.versions) - BCFTOOLS_VIEW(TABIX_VCFANNO.out.gz_tbi,[],[],[]) + BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi,[],[],[]) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) TABIX_BCFTOOLS (BCFTOOLS_VIEW.out.vcf) @@ -100,10 +100,10 @@ workflow ANNOTATE_SNVS { ) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) - TABIX_VEP (ENSEMBLVEP_SNV.out.vcf) - ch_versions = ch_versions.mix(TABIX_VEP.out.versions) + ZIP_TABIX_VEP (ENSEMBLVEP_SNV.out.vcf) + ch_versions = ch_versions.mix(ZIP_TABIX_VEP.out.versions) - TABIX_VEP.out.gz_tbi + ZIP_TABIX_VEP.out.gz_tbi .groupTuple() .map { meta, vcfs, tbis -> def sortedvcfs = vcfs.sort() From 0da17d91d4ab41f132e6ebaacae57f2c3a62a61b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 11 Nov 2022 01:06:46 +0100 Subject: [PATCH 0819/1921] review suggestions --- conf/modules.config | 10 ++++++---- subworkflows/local/annotate_snvs.nf | 7 ++++--- subworkflows/local/scatter_genome.nf | 5 +++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7bf44b06..620ad944 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -272,9 +272,13 @@ process { // process { + withName: '.*SCATTER_GENOME:BUILD_BED' { + ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} + } + withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } - ext.when = { params.annotate_snv_switch } + ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} ext.prefix = { "${meta.id}_genome_intervals" } publishDir = [ enabled: params.save_reference, @@ -730,10 +734,8 @@ process { } withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { - cpus = 1 - memory = 60.GB ext.prefix = { "${meta.id}_${intervals_list.simpleName}" } - ext.when = { params.annotate_snv_switch } + ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} publishDir = [ enabled: params.save_reference, path: { "${params.outdir}/processed_references" }, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 73f005e9..8f24e350 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -32,6 +32,7 @@ workflow ANNOTATE_SNVS { ch_versions = Channel.empty() ch_toml = Channel.fromPath(vcfanno_toml) ch_vcf_scatter_in = Channel.empty() + ch_vep_in = Channel.empty() // // annotate rhocall @@ -76,7 +77,7 @@ workflow ANNOTATE_SNVS { ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) ch_versions = ch_versions.mix(ZIP_TABIX_VCFANNO.out.versions) - BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi,[],[],[]) + BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi,[],[],[]).vcf.set { ch_vep_in } ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) TABIX_BCFTOOLS (BCFTOOLS_VIEW.out.vcf) @@ -84,13 +85,13 @@ workflow ANNOTATE_SNVS { BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS.out.tbi).collect().set { ch_vcf_scatter_in } - GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(split_intervals)) + GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(split_intervals)).vcf.set { ch_vep_in } ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) // // annotate vep // - ENSEMBLVEP_SNV(GATK4_SELECTVARIANTS.out.vcf, + ENSEMBLVEP_SNV(ch_vep_in, vep_genome, "homo_sapiens", vep_cache_version, diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index d60a04fc..2ae43b03 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -1,5 +1,10 @@ +// +// A subworkflow to create genome interval files necessary for bam/vcf scatter operations. +// + include { BUILD_BED } from '../../modules/local/create_bed_from_fai' include { GATK4_SPLITINTERVALS } from '../../modules/nf-core/gatk4/splitintervals/main' + workflow SCATTER_GENOME { take: From d737c0507f89ac2668845724ce6ba48b1c10aa3e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Nov 2022 12:13:38 +0100 Subject: [PATCH 0820/1921] fix closure type error --- conf/modules.config | 55 +++++++++++++++---- .../local/mitochondria/merge_annotate_MT.nf | 2 + 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 620ad944..d971b2f9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -734,7 +734,7 @@ process { } withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { - ext.prefix = { "${meta.id}_${intervals_list.simpleName}" } + ext.prefix = { "${meta.id}_${intervals.simpleName}" } ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} publishDir = [ enabled: params.save_reference, @@ -763,8 +763,8 @@ process { ] } - withName: '.*ANNOTATE_SNVS:TABIX_VEP' { - ext.prefix = { "${input.simpleName}_vep" } + withName: '.*ANNOTATE_SNVS:ZIP_TABIX_VEP' { + ext.prefix = { "${input.simpleName}" } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, @@ -925,15 +925,31 @@ process { withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_MERGEVCFS_LIFT_UNLIFT_MT' { ext.prefix = { "${meta.id}_merged" } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_VARIANTFILTRATION_MT' { ext.prefix = { "${meta.id}_filt" } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ path: { "${params.outdir}/gatk4" }, mode: params.publish_dir_mode, @@ -941,6 +957,27 @@ process { ] } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT2' { + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:CHANGE_NAME_VCF_MT' { + ext.file_type = 'vcf.gz' + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT3' { + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', @@ -953,23 +990,17 @@ process { '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', '--uniprot' ].join(' ') + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ path: { "${params.outdir}/mt_annotation" }, mode: params.publish_dir_mode, ] } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:CHANGE_NAME_VCF_MT' { - ext.file_type = 'vcf.gz' - } } process { diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 659b5f4e..f61b2724 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -62,11 +62,13 @@ workflow MERGE_ANNOTATE_MT { REMOVE_DUPLICATES_MT.out.vcf .collect{it[1]} + .ifEmpty([]) .toList() .set { file_list_vcf } TABIX_TABIX_MT2.out.tbi .collect{it[1]} + .ifEmpty([]) .toList() .set { file_list_tbi } From 5c6f81114ad1716fba78de6ca4b392a28e8797df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Nov 2022 17:08:47 +0100 Subject: [PATCH 0821/1921] fix default sample name issue --- conf/modules.config | 24 ++++++++++++++----- modules.json | 18 +++++++------- .../picard/addorreplacereadgroups/main.nf | 17 +++---------- .../picard/addorreplacereadgroups/meta.yml | 6 +++++ subworkflows/local/alignment/align_bwamem2.nf | 12 +++++----- 5 files changed, 42 insertions(+), 35 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d971b2f9..ff169409 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -834,7 +834,7 @@ process { process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { @@ -845,7 +845,13 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = { [ + "--VALIDATION_STRINGENCY LENIENT", + "--RGLB lib", + "--RGPL ILLUMINA", + "--RGPU barcode", + "--RGSM ${meta.id}" + ].join(' ' ).trim() } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { @@ -876,7 +882,7 @@ process { process { 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") } - ext.args = { "-M -K 100000000 -R \"@RG\\tID:${meta.id}\\tSM:${meta.sample}\\tLB:${meta.library}\\tPL:illumina\"" } + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { @@ -887,13 +893,19 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = { [ + "--VALIDATION_STRINGENCY LENIENT", + "--RGLB lib", + "--RGPL ILLUMINA", + "--RGPU barcode", + "--RGSM ${meta.id}" + ].join(' ' ).trim() } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates__shifted" } + ext.prefix = { "${meta.id}_markduplicates_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { @@ -913,7 +925,7 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } - ext.prefix = { "${meta.id}_filtered__shifted" } + ext.prefix = { "${meta.id}_filtered_shifted" } } } diff --git a/modules.json b/modules.json index 3b61dfb1..91265bca 100644 --- a/modules.json +++ b/modules.json @@ -7,23 +7,23 @@ "nf-core": { "bcftools/concat": { "branch": "master", - "git_sha": "f60fe628e71a25cbbe303f02a01eff706f4bd87d" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" }, "bcftools/merge": { "branch": "master", - "git_sha": "d1147c1baa105d01e5e39bd668a101bb213f1c37" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" }, "bcftools/norm": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" }, "bcftools/roh": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" }, "bcftools/view": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" }, "bwa/index": { "branch": "master", @@ -35,7 +35,7 @@ }, "bwamem2/mem": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, "cat/cat": { "branch": "master", @@ -67,7 +67,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "6e58487f28429876b7cad237afbf4685e90c7bd4" }, "expansionhunter": { "branch": "master", @@ -75,7 +75,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "f6a11408536fbee6cbea1f5977605011873de3ca" + "git_sha": "3dd73937b084b547f9272bc901e0f120a7913fd8" }, "gatk4/bedtointervallist": { "branch": "master", @@ -175,7 +175,7 @@ }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5" }, "picard/collecthsmetrics": { "branch": "master", diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index f7f929de..a6debc91 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -12,6 +12,7 @@ process PICARD_ADDORREPLACEREADGROUPS { output: tuple val(meta), path("*.bam"), emit: bam + tuple val(meta), path("*.bai"), emit: bai, optional: true path "versions.yml" , emit: versions when: @@ -20,12 +21,6 @@ process PICARD_ADDORREPLACEREADGROUPS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def ID = task.ext.id ?: "id" - def LIBRARY= task.ext.library ?: "library" - def PLATFORM= task.ext.platform ?: "illumina" - def BARCODE= task.ext.barcode ?: "barcode" - def SAMPLE= task.ext.sample ?: "sample" - def INDEX= task.ext.index ?: "index" def avail_mem = 3 if (!task.memory) { log.info '[Picard AddOrReplaceReadGroups] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -38,17 +33,11 @@ process PICARD_ADDORREPLACEREADGROUPS { AddOrReplaceReadGroups \\ $args \\ --INPUT ${bam} \\ - --OUTPUT ${prefix}.bam \\ - --RGID ${ID} \\ - --RGLB ${LIBRARY} \\ - --RGPL ${PLATFORM} \\ - --RGPU ${BARCODE} \\ - --RGSM ${SAMPLE} \\ - --CREATE_INDEX true + --OUTPUT ${prefix}.bam cat <<-END_VERSIONS > versions.yml "${task.process}": - picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o -E '[[:digit:]]+\\.[[:digit:]]+\\.[[:digit:]]+') END_VERSIONS """ diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml index e013bf4b..28f584c3 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/meta.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -39,8 +39,14 @@ output: type: file description: Output BAM file pattern: "*.{bam}" + - bai: + type: file + description: BAM index file + pattern: "*.{bai}" authors: - "@sateeshperi" - "@mjcipriano" - "@hseabolt" + - "@cmatKhan" + - "@muffato" diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 9e53e49f..33d1e47a 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -34,12 +34,12 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index BWAMEM2_MEM.out.bam .map{ meta, bam -> - new_meta = meta.clone() // clone to avoid overriding the global meta - new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename - new_meta.read_group = [] // remove read group from cloned meta to get a single file per sample - [new_meta, bam]} // end the closure to return newly modified channel - .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] - .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list + new_meta = meta.clone() // clone to avoid overriding the global meta + new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta.read_group = "\'@RG\\tID:"+ new_meta.id + "\\tPL:ILLUMINA\\tSM:"+new_meta.id+"\'" + [new_meta, bam]} // end the closure to return newly modified channel + .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] + .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list single: it[1].size() == 1 multiple: it[1].size() > 1 } From f928eb3ef57c46ab559ca5809d8074e7d81fbbcb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Nov 2022 18:02:57 +0100 Subject: [PATCH 0822/1921] update modules --- modules.json | 14 ++--- .../nf-core/picard/renamesampleinvcf/main.nf | 56 ------------------- .../nf-core/picard/renamesampleinvcf/meta.yml | 44 --------------- 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 | 6 +- modules/nf-core/samtools/stats/main.nf | 6 +- .../local/mitochondria/align_and_call_MT.nf | 12 +--- 9 files changed, 22 insertions(+), 134 deletions(-) delete mode 100644 modules/nf-core/picard/renamesampleinvcf/main.nf delete mode 100644 modules/nf-core/picard/renamesampleinvcf/meta.yml diff --git a/modules.json b/modules.json index 91265bca..52e92c27 100644 --- a/modules.json +++ b/modules.json @@ -193,10 +193,6 @@ "branch": "master", "git_sha": "eca65aa4a5e2e192ac44d6962c8f9260f314ffb8" }, - "picard/renamesampleinvcf": { - "branch": "master", - "git_sha": "af53d9fcbc10982ff8fd1b87f9fec60b19eaba3d" - }, "picard/sortvcf": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" @@ -211,23 +207,23 @@ }, "samtools/faidx": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, "samtools/index": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, "samtools/merge": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, "samtools/sort": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, "samtools/stats": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, "stranger": { "branch": "master", diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf deleted file mode 100644 index da492b0d..00000000 --- a/modules/nf-core/picard/renamesampleinvcf/main.nf +++ /dev/null @@ -1,56 +0,0 @@ - -process PICARD_RENAMESAMPLEINVCF { - tag "$meta.id" - label 'process_single' - - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" - - input: - tuple val(meta), path(vcf) - - output: - tuple val(meta), path("*.vcf.gz"), emit: vcf - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def extended_args = args.contains("--NEW_SAMPLE_NAME") ? $args : "${args} --NEW_SAMPLE_NAME ${meta.id}" - def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 - if (!task.memory) { - log.info '[Picard RenameSampleInVcf] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.giga - } - - """ - picard \\ - RenameSampleInVcf \\ - -Xmx${avail_mem}g \\ - --INPUT $vcf \\ - --OUTPUT ${prefix}_renam.vcf.gz \\ - $extended_args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(picard RenameSampleInVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_renam.vcf.gz - cat <<-END_VERSIONS > versions.yml - "${task.process}": - picard: \$(picard RenameSampleInVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) - END_VERSIONS - """ -} diff --git a/modules/nf-core/picard/renamesampleinvcf/meta.yml b/modules/nf-core/picard/renamesampleinvcf/meta.yml deleted file mode 100644 index 8f3ed6b4..00000000 --- a/modules/nf-core/picard/renamesampleinvcf/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: "picard_renamesampleinvcf" -description: changes name of sample in the vcf file -keywords: - - picard - - picard/renamesampleinvcf -tools: - - "picard": - description: | - A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) - data and formats such as SAM/BAM/CRAM and VCF. - homepage: https://broadinstitute.github.io/picard/ - documentation: https://broadinstitute.github.io/picard/ - tool_dev_url: "https://github.com/broadinstitute/picard" - doi: "" - licence: "['MIT']" - -input: - - 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" - - vcf: - type: file - description: VCF file - pattern: "*.{vcf,vcf.gz}" - -authors: - - "@Lucpen" diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index ef940db2..2830963e 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 (params.enable_conda ? "bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : - 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" + '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(fasta) diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index e04e63e8..8577dc9d 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 (params.enable_conda ? "bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : - 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" + '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(input) diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index 91f14116..89dd072a 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 (params.enable_conda ? "bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : - 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" + '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(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index ab7f1cca..ac43e67a 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 (params.enable_conda ? "bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : - 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" + '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(bam) diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 9b0c3867..5d2fd68a 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 (params.enable_conda ? "bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.15.1--h1170115_0' : - 'quay.io/biocontainers/samtools:1.15.1--h1170115_0' }" + '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(input), path(input_index) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 2857c64e..83c065ba 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -11,7 +11,6 @@ include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } fr include { HAPLOCHECK as HAPLOCHECK_MT } from '../../../modules/nf-core/haplocheck/main' 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 { PICARD_RENAMESAMPLEINVCF as PICARD_RENAMESAMPLEINVCF_MT } from '../../../modules/nf-core/picard/renamesampleinvcf/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' workflow ALIGN_AND_CALL_MT { @@ -77,17 +76,10 @@ workflow ALIGN_AND_CALL_MT { genome_dict ) ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) - // Replace within the vcf sample as a sample name with meta.id - PICARD_RENAMESAMPLEINVCF_MT(GATK4_FILTERMUTECTCALLS_MT.out.vcf) - ch_versions = ch_versions.mix(PICARD_RENAMESAMPLEINVCF_MT.out.versions.first()) - - TABIX_TABIX_MT(PICARD_RENAMESAMPLEINVCF_MT.out.vcf) - ch_versions = ch_versions.mix(TABIX_TABIX_MT.out.versions.first()) - emit: - vcf = PICARD_RENAMESAMPLEINVCF_MT.out.vcf - tbi = TABIX_TABIX_MT.out.tbi + vcf = GATK4_FILTERMUTECTCALLS_MT.out.vcf + tbi = GATK4_FILTERMUTECTCALLS_MT.out.tbi stats = GATK4_MUTECT2_MT.out.stats filt_sats = GATK4_FILTERMUTECTCALLS_MT.out.stats txt = HAPLOCHECK_MT.out.txt From 8b93d870251c89b6c6bf68b59cce7532f2e4263c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Nov 2022 19:04:41 +0100 Subject: [PATCH 0823/1921] update modules 2 --- modules/nf-core/bcftools/concat/main.nf | 6 +++--- modules/nf-core/bcftools/merge/main.nf | 6 +++--- modules/nf-core/bcftools/norm/main.nf | 6 +++--- modules/nf-core/bcftools/roh/main.nf | 6 +++--- modules/nf-core/bcftools/view/main.nf | 6 +++--- modules/nf-core/bwamem2/mem/main.nf | 6 +++--- modules/nf-core/deepvariant/main.nf | 2 +- modules/nf-core/fastqc/main.nf | 6 +++--- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index b62a55a7..f933dd13 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 (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': - 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': + 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" input: tuple val(meta), path(vcfs), path(tbi) diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index 2c9d68fd..caf15d36 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 (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': - 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': + 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" 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 96f306bc..a01b339b 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 (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': - 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': + 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf index 83ac4e65..b3cad8ed 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 (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': - 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': + 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" 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 3df08a57..b0458ecd 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 (params.enable_conda ? "bioconda::bcftools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.15.1--h0ea216a_0': - 'quay.io/biocontainers/bcftools:1.15.1--h0ea216a_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': + 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf index 08dc5dfb..f8bad4b9 100644 --- a/modules/nf-core/bwamem2/mem/main.nf +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -2,10 +2,10 @@ process BWAMEM2_MEM { tag "$meta.id" label 'process_high' - conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:38aed4501da19db366dc7c8d52d31d94e760cfaf-0' : - 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:38aed4501da19db366dc7c8d52d31d94e760cfaf-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' : + 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index 344fdb03..de48d9c1 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -7,7 +7,7 @@ process DEEPVARIANT { exit 1, "Conda environments cannot be used with DeepVariant at the moment. Please use Docker or Singularity containers." } - container "google/deepvariant:1.3.0" + container "google/deepvariant:1.4.0" input: tuple val(meta), path(input), path(index), path(intervals) diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 55c50c87..3bebb240 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -8,7 +8,7 @@ process FASTQC { 'quay.io/biocontainers/fastqc:0.11.9--0' }" input: - tuple val(meta), path(reads, stageAs: "?/*") + tuple val(meta), path(reads) output: tuple val(meta), path("*.html"), emit: html @@ -22,8 +22,8 @@ process FASTQC { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - printf "%s\\n" $reads | while read f; do ln -s \$f ${prefix}_\$(basename \$f) ; done - fastqc $args --threads $task.cpus ${prefix}_* + printf "%s\\n" $reads | while read f; do [[ \$f =~ ^${prefix}.* ]] || ln -s \$f ${prefix}_\$f ; done + fastqc $args --threads $task.cpus ${prefix}* cat <<-END_VERSIONS > versions.yml "${task.process}": From a3124e6b633eb01e109256d4e36c1e25f9329b51 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Nov 2022 23:08:59 +0100 Subject: [PATCH 0824/1921] fix some lint warnings --- modules/local/change_name.nf | 12 ++++++++++++ modules/local/check_input_vcf.nf | 19 ++++++++++++++++++- modules/local/create_bed_from_fai.nf | 1 + modules/local/create_pedfile.nf | 19 ++++++++++++++++++- modules/local/get_chrom_sizes.nf | 1 + modules/local/samplesheet_check.nf | 1 + 6 files changed, 51 insertions(+), 2 deletions(-) diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf index 6d1df51b..6770f8bc 100644 --- a/modules/local/change_name.nf +++ b/modules/local/change_name.nf @@ -1,6 +1,7 @@ process CHANGE_NAME { tag "$meta.id" label 'process_low' + label 'process_single' conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -12,6 +13,7 @@ process CHANGE_NAME { output: tuple val(meta), path( "*.${file_type}"), emit: file + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -25,6 +27,11 @@ process CHANGE_NAME { mv \\ $input_file \\ ${prefix}.${file_type} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + change_name: v1.0 + END_VERSIONS """ stub: @@ -33,5 +40,10 @@ process CHANGE_NAME { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.${file_type} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + change_name: v1.0 + END_VERSIONS """ } diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 725197b3..64c0d940 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -1,5 +1,6 @@ process CHECK_INPUT_VCF { tag "check_vcf" + label 'process_single' conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -10,7 +11,8 @@ process CHECK_INPUT_VCF { path vcf output: - path '*.txt' , emit: txt + path '*.txt' , emit: txt + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -39,5 +41,20 @@ process CHECK_INPUT_VCF { else: print("Please compress %s using bgzip" %file_in) CODE + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + change_input_vcf: v1.0 + END_VERSIONS + """ + + stub: + """ + touch checked_vcfs.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + check_input_vcf: v1.0 + END_VERSIONS """ } diff --git a/modules/local/create_bed_from_fai.nf b/modules/local/create_bed_from_fai.nf index a4b13898..c097a00e 100644 --- a/modules/local/create_bed_from_fai.nf +++ b/modules/local/create_bed_from_fai.nf @@ -1,5 +1,6 @@ process BUILD_BED { tag "$meta.id" + label 'process_single' conda (params.enable_conda ? "anaconda::gawk=5.1.0" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index 6acae0d9..64d0d24c 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -1,5 +1,6 @@ process MAKE_PED { tag "make_ped" + label 'process_single' conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -10,7 +11,8 @@ process MAKE_PED { val(samples) output: - path '*.ped' , emit: ped + path '*.ped' , emit: ped + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -29,5 +31,20 @@ process MAKE_PED { } """ echo "$pedinfo" > family.ped + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + create_pedfile: v1.0 + END_VERSIONS + """ + + stub: + """ + touch family.ped + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + check_pedfile: v1.0 + END_VERSIONS """ } diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index d7a2ebf1..7a483ec2 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -1,5 +1,6 @@ process GET_CHROM_SIZES { tag "$fai" + label 'process_single' conda (params.enable_conda ? "conda-forge::coreutils=8.31" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index b114546c..06888cc2 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -1,5 +1,6 @@ process SAMPLESHEET_CHECK { tag "$samplesheet" + label 'process_single' conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? From c0e042ee76f100e58aba01a3892ae58e8e5a9d01 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 15 Nov 2022 19:59:31 +0100 Subject: [PATCH 0825/1921] fix ci error --- modules/local/check_input_vcf.nf | 4 ++-- subworkflows/local/mitochondria/merge_annotate_MT.nf | 5 ++++- subworkflows/local/preprocessing/prepare_vcf.nf | 3 ++- workflows/raredisease.nf | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index 64c0d940..c56e25ed 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -11,7 +11,7 @@ process CHECK_INPUT_VCF { path vcf output: - path '*.txt' , emit: txt + path '*.csv' , emit: csv path "versions.yml" , emit: versions when: @@ -20,7 +20,7 @@ process CHECK_INPUT_VCF { script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ """ export INPUT_FILE=${vcf} - export OUTPUT_FILE="checked_vcfs.txt" + export OUTPUT_FILE="checked_vcfs.csv" python3 < def id = "${row.id}" @@ -30,6 +30,7 @@ workflow CHECK_VCF { return [['id':id],filepath] } .set { ch_vcfs_norm } + ch_versions = ch_versions.mix(CHECK_INPUT_VCF.out.versions) SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_PV.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 96eef2d5..7d8dafed 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -175,6 +175,7 @@ workflow RAREDISEASE { // Generate pedigree file MAKE_PED (CHECK_INPUT.out.samples.toList()) + ch_versions = ch_versions.mix(MAKE_PED.out.versions) // Input QC FASTQC (CHECK_INPUT.out.reads) From d3f64318484641bb0833487d1238b56ad0aa6357 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Nov 2022 13:22:49 +0100 Subject: [PATCH 0826/1921] vep cache version --- nextflow_schema.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f6a0873b..9f091a22 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -462,11 +462,11 @@ "description": "Options used to facilitate the annotation of the variants.", "properties": { "vep_cache_version": { - "type": "string", - "default": "104", + "type": "integer", + "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": ["104", "105", "106", "107"] + "enum": [107] } } }, From 7295357faf4a95951742e3ca1ce95e2eba63a30b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Nov 2022 13:31:23 +0100 Subject: [PATCH 0827/1921] update genome.config --- conf/genomes.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 5b11a860..c2558ee1 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -41,7 +41,7 @@ params { vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = '105' + vep_cache_version = '107' } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -74,7 +74,7 @@ params { vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = '105' + vep_cache_version = '107' } } } From e9cfd84cab6f573c1940e6f6dfec56dd957b7d1b Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Thu, 17 Nov 2022 16:23:33 +0100 Subject: [PATCH 0828/1921] 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 2106b57784613305345da1e9ce5cd4b2fcd2ecdf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 18 Nov 2022 11:32:10 +0100 Subject: [PATCH 0829/1921] add platform parameter --- conf/modules.config | 2 +- nextflow.config | 1 + nextflow_schema.json | 7 +++++++ subworkflows/local/align.nf | 3 ++- subworkflows/local/alignment/align_bwamem2.nf | 15 +++++++++------ workflows/raredisease.nf | 3 ++- 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ff169409..9c762723 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -896,7 +896,7 @@ process { ext.args = { [ "--VALIDATION_STRINGENCY LENIENT", "--RGLB lib", - "--RGPL ILLUMINA", + "--RGPL ${params.platform}", "--RGPU barcode", "--RGSM ${meta.id}" ].join(' ' ).trim() } diff --git a/nextflow.config b/nextflow.config index 97ca5bf7..189df701 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,6 +24,7 @@ params { annotate_snv_switch = true annotate_sv_switch = false gens_switch = false + platform = 'illumina' // Alignment aligner = 'bwamem2' diff --git a/nextflow_schema.json b/nextflow_schema.json index 9f091a22..54bb1213 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -375,6 +375,13 @@ "default": false, "description": "Specifies whether or not to run gens preprocessing subworkflow.", "fa_icon": "fas fa-book" + }, + "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", + "enum": ["illumina"] } } }, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index b9e09eeb..8e3b8c5b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -15,11 +15,12 @@ workflow ALIGN { index_bwamem2 // channel: [ /path/to/bwamem2/index/ ] known_dbsnp // channel: [ /path/to/known_dbsnp ] known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] + platform // string: params.platform main: ch_versions = Channel.empty() - ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai ) + ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai, platform ) ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi ) ch_marked_bam = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bam, ALIGN_SENTIEON.out.marked_bam) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 33d1e47a..c5ae1386 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -16,6 +16,7 @@ workflow ALIGN_BWAMEM2 { index // channel: [ /path/to/bwamem2/index/ ] fasta // channel: [genome.fasta] fai // channel: [genome.fai] + platform // params.platform main: ch_versions = Channel.empty() @@ -34,17 +35,19 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index BWAMEM2_MEM.out.bam .map{ meta, bam -> - new_meta = meta.clone() // clone to avoid overriding the global meta - new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename - new_meta.read_group = "\'@RG\\tID:"+ new_meta.id + "\\tPL:ILLUMINA\\tSM:"+new_meta.id+"\'" - [new_meta, bam]} // end the closure to return newly modified channel - .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] - .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list + new_meta = meta.clone() // clone to avoid overriding the global meta + new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" + [new_meta, bam]} // end the closure to return newly modified channel + .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] + .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list single: it[1].size() == 1 multiple: it[1].size() > 1 } .set{ bams } // create a new multi-channel named bams + bams.multiple.view() + bams.single.view() // If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7d8dafed..8e055bb2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -250,7 +250,8 @@ workflow RAREDISEASE { ch_bwa_index, ch_bwamem2_index, ch_known_dbsnp, - ch_known_dbsnp_tbi + ch_known_dbsnp_tbi, + params.platform ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) From 7df0dd98a7741e402fca8a82d6eeb690b0c3164b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 18 Nov 2022 11:32:45 +0100 Subject: [PATCH 0830/1921] remove view --- subworkflows/local/alignment/align_bwamem2.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index c5ae1386..77a64978 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -46,8 +46,6 @@ workflow ALIGN_BWAMEM2 { } .set{ bams } // create a new multi-channel named bams - bams.multiple.view() - bams.single.view() // If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) From a5cd28325ca2c4bf9141254ab2a855a7584450dd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Nov 2022 03:03:46 +0100 Subject: [PATCH 0831/1921] fix collect version error --- modules/local/create_pedfile.nf | 27 +++++-------------- .../local/annotate_consequence_pli.nf | 2 ++ .../local/mitochondria/merge_annotate_MT.nf | 2 +- workflows/raredisease.nf | 4 +++ 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index 64d0d24c..787222c9 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -17,34 +17,19 @@ process MAKE_PED { when: task.ext.when == null || task.ext.when - script: - def pedinfo = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') + exec: + def pedfile = task.workDir.resolve('family.ped') + pedfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') def samples_list = [] for(int i = 0; i family.ped - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - create_pedfile: v1.0 - END_VERSIONS - """ - - stub: - """ - touch family.ped - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - check_pedfile: v1.0 - END_VERSIONS - """ + def versionfile = task.workDir.resolve('versions.yml') + versionfile.text = '"' + task.process + '"' + '\n create_pedfile: 1.0\n' } diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index 24410abd..1913b1b6 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -20,6 +20,8 @@ workflow ANNOTATE_CSQ_PLI { ADD_MOST_SEVERE_PLI ( ADD_MOST_SEVERE_CSQ.out.vcf, ) + ch_versions = ch_versions.mix(ADD_MOST_SEVERE_CSQ.out.versions) + ch_versions = ch_versions.mix(ADD_MOST_SEVERE_PLI.out.versions) emit: vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 4d95abf5..5a0d4c2f 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -113,7 +113,7 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) // Running haplogrep2 - TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf) + TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8e055bb2..3823a86b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -336,6 +336,7 @@ workflow RAREDISEASE { ch_sv_annotate.vcf_ann, ch_variant_consequences ) + ch_versions = ch_versions.mix(ANN_CSQ_PLI_SV.out.versions) RANK_VARIANTS_SV ( ANN_CSQ_PLI_SV.out.vcf_ann, @@ -349,6 +350,7 @@ workflow RAREDISEASE { RANK_VARIANTS_SV.out.vcf, ch_vep_filters ) + ch_versions = ch_versions.mix(FILTER_VEP_SV.out.versions) } @@ -395,6 +397,7 @@ workflow RAREDISEASE { ch_snv_annotate.vcf_ann, ch_variant_consequences ) + ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) RANK_VARIANTS_SNV ( ANN_CSQ_PLI_SNV.out.vcf_ann, @@ -408,6 +411,7 @@ workflow RAREDISEASE { RANK_VARIANTS_SNV.out.vcf, ch_vep_filters ) + ch_versions = ch_versions.mix(FILTER_VEP_SNV.out.versions) } From 69dce9d2540a021b6916d9a4813f86953774ca23 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Nov 2022 03:05:44 +0100 Subject: [PATCH 0832/1921] update test config --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 74259f35..eb1936fe 100644 --- a/conf/test.config +++ b/conf/test.config @@ -40,6 +40,6 @@ params { mt_backchain_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' genome = 'GRCh38' - vep_cache_version = '105' + vep_cache_version = '107' } From 6b87f9243bd70e187ed4848288da184c2b2758b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Nov 2022 03:08:52 +0100 Subject: [PATCH 0833/1921] update config --- conf/genomes.config | 4 ++-- conf/test.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index c2558ee1..9e456cfc 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -41,7 +41,7 @@ params { vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = '107' + vep_cache_version = 107 } 'GRCh38' { fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" @@ -74,7 +74,7 @@ params { vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = '107' + vep_cache_version = 107 } } } diff --git a/conf/test.config b/conf/test.config index eb1936fe..17834747 100644 --- a/conf/test.config +++ b/conf/test.config @@ -40,6 +40,6 @@ params { mt_backchain_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' genome = 'GRCh38' - vep_cache_version = '107' + vep_cache_version = 107 } From 653683d522fae5ad0b9980e75f02e82895b880e9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Nov 2022 03:25:23 +0100 Subject: [PATCH 0834/1921] fix ci error --- modules/local/create_pedfile.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index 787222c9..0ee1e96c 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -31,5 +31,5 @@ process MAKE_PED { } } def versionfile = task.workDir.resolve('versions.yml') - versionfile.text = '"' + task.process + '"' + '\n create_pedfile: 1.0\n' + versionfile.text = '"' + task.process + '":' + '\n create_pedfile: 1.0\n' } From 529826581c6161a97326f8573641def2a231a496 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Nov 2022 17:03:53 +0100 Subject: [PATCH 0835/1921] unique versions --- subworkflows/local/alignment/align_bwamem2.nf | 9 ++++++--- subworkflows/local/alignment/align_sentieon.nf | 7 +++++-- subworkflows/local/analyse_MT.nf | 2 +- subworkflows/local/call_repeat_expansions.nf | 4 ++-- subworkflows/local/gens.nf | 6 +++--- subworkflows/local/mitochondria/merge_annotate_MT.nf | 4 ++-- subworkflows/local/qc_bam.nf | 11 ++++++----- .../local/variant_calling/call_snv_deepvariant.nf | 2 +- .../local/variant_calling/call_snv_sentieon.nf | 4 ++-- subworkflows/local/variant_calling/call_sv_tiddit.nf | 2 +- workflows/raredisease.nf | 2 +- 11 files changed, 30 insertions(+), 23 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 77a64978..3bb0c5a2 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -23,14 +23,16 @@ workflow ALIGN_BWAMEM2 { // Map, sort, and index BWAMEM2_MEM ( reads_input, index, true ) - ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions) + ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_ALIGN.out.versions.first()) // Join the mapped bam + bai paths by their keys for stats // Get stats for each demultiplexed read pair. bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed, [] ) + ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first()) // Merge multiple lane samples and index BWAMEM2_MEM.out.bam @@ -49,12 +51,13 @@ workflow ALIGN_BWAMEM2 { // If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) - ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions) + ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions.first()) // Marking duplicates MARKDUPLICATES ( prepared_bam , fasta, fai ) SAMTOOLS_INDEX_MARKDUP ( MARKDUPLICATES.out.bam ) - ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions) + ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MARKDUP.out.versions.first()) emit: stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index c498958e..9f48c805 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -24,7 +24,7 @@ workflow ALIGN_SENTIEON { ch_bqsr_csv = Channel.empty() SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) - ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions) + ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions.first()) SENTIEON_BWAMEM.out .bam @@ -32,9 +32,10 @@ workflow ALIGN_SENTIEON { .set { ch_bam_bai } SENTIEON_DATAMETRICS (ch_bam_bai, fasta, fai ) - ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions) + ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions.first()) SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) + ch_versions = ch_versions.mix(SENTIEON_LOCUSCOLLECTOR.out.versions.first()) ch_bam_bai .join(SENTIEON_LOCUSCOLLECTOR.out.score) @@ -42,6 +43,7 @@ workflow ALIGN_SENTIEON { .set { ch_bam_bai_score } SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai ) + ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam @@ -51,6 +53,7 @@ workflow ALIGN_SENTIEON { ch_bqsr_bam = SENTIEON_BQSR.out.bam ch_bqsr_bai = SENTIEON_BQSR.out.bai ch_bqsr_csv = SENTIEON_BQSR.out.recal_csv + ch_versions = ch_versions.mix(SENTIEON_BQSR.out.versions.first()) } emit: diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index dadc4214..1ae3259a 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -63,7 +63,7 @@ workflow ANALYSE_MT { genome_dict, shift_mt_backchain, genome_fasta_no_meta) - ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions) + ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) // STEP 3: MT MERGE AND ANNOTATE VARIANTS MERGE_ANNOTATE_MT( diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 4040a2e0..3c551168 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -15,10 +15,10 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = Channel.empty() EXPANSIONHUNTER( bam, fasta, variant_catalog ) - ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions) + ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions.first()) STRANGER ( EXPANSIONHUNTER.out.vcf, variant_catalog ) - ch_versions = ch_versions.mix(STRANGER.out.versions) + ch_versions = ch_versions.mix(STRANGER.out.versions.first()) emit: vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index f4dd6f3b..222600fb 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -22,13 +22,13 @@ workflow GENS { ch_versions = Channel.empty() COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) - ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions) + ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions.first()) DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) - ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions) + ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions.first()) GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, vcf.map { meta, vcf -> vcf }, gnomad_pos ) - ch_versions = ch_versions.mix(GENS_GENERATE.out.versions) + ch_versions = ch_versions.mix(GENS_GENERATE.out.versions.first()) emit: gens_cov_bed_gz = GENS_GENERATE.out.cov diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 5a0d4c2f..15adaba5 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -50,7 +50,7 @@ workflow MERGE_ANNOTATE_MT { // Spliting multiallelic calls ch_in_split = GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) - ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions.first()) TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) ch_in_remdup = SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi) @@ -58,7 +58,7 @@ workflow MERGE_ANNOTATE_MT { // Removing duplicates and merging if there is more than one sample REMOVE_DUPLICATES_MT(ch_in_remdup, genome_fasta) TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) - ch_versions = ch_versions.mix(REMOVE_DUPLICATES_MT.out.versions) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_MT.out.versions.first()) REMOVE_DUPLICATES_MT.out.vcf .collect{it[1]} diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index e6ad575f..550ed3e8 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -25,26 +25,27 @@ workflow QC_BAM { // COLLECT MULTIPLE METRICS PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta, fai ) - ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions) + ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) // COLLECT HS METRICS PICARD_COLLECTHSMETRICS ( bam, fasta, fai, bait_intervals, target_intervals ) - ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions) + ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) // QUALIMAP BAMQC gff = [] QUALIMAP_BAMQC ( bam, gff ) - ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions) + ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) // TIDDIT COVERAGE TIDDIT_COV ( bam, [] ) // 2nd pos. arg is req. only for cram input UCSC_WIGTOBIGWIG ( TIDDIT_COV.out.wig, chrom_sizes ) - ch_versions = ch_versions.mix(TIDDIT_COV.out.versions) + ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) + ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) // MOSDEPTH mosdepth_input_bams = bam.join(bai, by: [0]) MOSDEPTH (mosdepth_input_bams,[],[]) - ch_versions = ch_versions.mix(MOSDEPTH.out.versions) + ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index a0757835..3fab61b6 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -28,7 +28,7 @@ workflow CALL_SNV_DEEPVARIANT { .collect{it[1]} .toList() .set { file_list } - ch_versions = ch_versions.mix(DEEPVARIANT.out.versions) + ch_versions = ch_versions.mix(DEEPVARIANT.out.versions.first()) case_info .combine(file_list) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 52dac412..3c27e7c4 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -21,7 +21,7 @@ workflow CALL_SNV_SENTIEON { SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, call_interval, ml_model ) ch_vcf = SENTIEON_DNASCOPE.out.vcf ch_index = SENTIEON_DNASCOPE.out.vcf_index - ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions) + ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) if ( ml_model ) { @@ -30,7 +30,7 @@ workflow CALL_SNV_SENTIEON { SENTIEON_DNAMODELAPPLY ( ch_vcf_idx, fasta, fai, ml_model ) ch_vcf = SENTIEON_DNAMODELAPPLY.out.vcf ch_index = SENTIEON_DNAMODELAPPLY.out.vcf_index - ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) + ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) } emit: diff --git a/subworkflows/local/variant_calling/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf index 53303239..99094f1c 100644 --- a/subworkflows/local/variant_calling/call_sv_tiddit.nf +++ b/subworkflows/local/variant_calling/call_sv_tiddit.nf @@ -14,7 +14,7 @@ workflow CALL_SV_TIDDIT { main: TIDDIT_SV ( bam, fasta, index ) - ch_versions = TIDDIT_SV.out.versions + ch_versions = TIDDIT_SV.out.versions.first() TIDDIT_SV.out .vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3823a86b..1c1601e3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -126,6 +126,7 @@ workflow RAREDISEASE { if (params.input) { ch_input = Channel.fromPath(params.input) CHECK_INPUT (ch_input) + ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) } else { exit 1, 'Input samplesheet not specified!' } @@ -179,7 +180,6 @@ workflow RAREDISEASE { // Input QC FASTQC (CHECK_INPUT.out.reads) - ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // Prepare references and indices. From d58b60db31b0b0530cbf28e6fbeaefbaa5cce9d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 22 Nov 2022 16:20:52 +0100 Subject: [PATCH 0836/1921] update modules --- modules.json | 10 +++++----- modules/nf-core/genmod/annotate/main.nf | 4 ++-- modules/nf-core/genmod/compound/main.nf | 4 ++-- modules/nf-core/genmod/models/main.nf | 4 ++-- modules/nf-core/genmod/score/main.nf | 4 ++-- modules/nf-core/haplocheck/main.nf | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/modules.json b/modules.json index 52e92c27..5c871d01 100644 --- a/modules.json +++ b/modules.json @@ -131,19 +131,19 @@ }, "genmod/annotate": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" }, "genmod/compound": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" }, "genmod/models": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" }, "genmod/score": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" }, "glnexus": { "branch": "master", @@ -151,7 +151,7 @@ }, "haplocheck": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" }, "haplogrep2/classify": { "branch": "master", diff --git a/modules/nf-core/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf index b7ecd3fc..9ba2f612 100644 --- a/modules/nf-core/genmod/annotate/main.nf +++ b/modules/nf-core/genmod/annotate/main.nf @@ -29,7 +29,7 @@ process GENMOD_ANNOTATE { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ @@ -40,7 +40,7 @@ process GENMOD_ANNOTATE { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ } diff --git a/modules/nf-core/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf index 4bdff8df..e7d43fea 100644 --- a/modules/nf-core/genmod/compound/main.nf +++ b/modules/nf-core/genmod/compound/main.nf @@ -30,7 +30,7 @@ process GENMOD_COMPOUND { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ @@ -41,7 +41,7 @@ process GENMOD_COMPOUND { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ } diff --git a/modules/nf-core/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf index d786d269..8d73d745 100644 --- a/modules/nf-core/genmod/models/main.nf +++ b/modules/nf-core/genmod/models/main.nf @@ -36,7 +36,7 @@ process GENMOD_MODELS { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ @@ -47,7 +47,7 @@ process GENMOD_MODELS { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ } diff --git a/modules/nf-core/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf index 9b7bd009..e0a0277c 100644 --- a/modules/nf-core/genmod/score/main.nf +++ b/modules/nf-core/genmod/score/main.nf @@ -35,7 +35,7 @@ process GENMOD_SCORE { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ @@ -46,7 +46,7 @@ process GENMOD_SCORE { cat <<-END_VERSIONS > versions.yml "${task.process}": - genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' )) + genmod: \$(echo \$(genmod --version 2>&1) | sed 's/^.*genmod version: //' ) END_VERSIONS """ } diff --git a/modules/nf-core/haplocheck/main.nf b/modules/nf-core/haplocheck/main.nf index 08c1c76b..6e8541f6 100644 --- a/modules/nf-core/haplocheck/main.nf +++ b/modules/nf-core/haplocheck/main.nf @@ -26,7 +26,7 @@ process HAPLOCHECK { cat <<-END_VERSIONS > versions.yml "${task.process}": - haplocheck: \$(echo \$(haplocheck --version 2>&1) | cut -f 2 -d " " ) + haplocheck: \$(echo \$(haplocheck --version 2>&1) | sed 's/.*\\([0-9].[0-9].[0-9]\\).*/\\1/' ) END_VERSIONS """ @@ -38,7 +38,7 @@ process HAPLOCHECK { cat <<-END_VERSIONS > versions.yml "${task.process}": - haplocheck: \$(echo \$(haplocheck --version 2>&1) | cut -f 2 -d " " ) + haplocheck: \$(echo \$(haplocheck --version 2>&1) | sed 's/.*\\([0-9].[0-9].[0-9]\\).*/\\1/' ) END_VERSIONS """ } From dd60c460dd3a20956dd53fa4aa13ae76cd8eccc6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 22 Nov 2022 21:49:07 +0100 Subject: [PATCH 0837/1921] update versions --- subworkflows/local/annotate_snvs.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 8f24e350..4f1bfb6a 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -86,7 +86,7 @@ workflow ANNOTATE_SNVS { BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS.out.tbi).collect().set { ch_vcf_scatter_in } GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(split_intervals)).vcf.set { ch_vep_in } - ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) + ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions.first()) // // annotate vep @@ -99,10 +99,10 @@ workflow ANNOTATE_SNVS { fasta, [] ) - ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions) + ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions.first()) ZIP_TABIX_VEP (ENSEMBLVEP_SNV.out.vcf) - ch_versions = ch_versions.mix(ZIP_TABIX_VEP.out.versions) + ch_versions = ch_versions.mix(ZIP_TABIX_VEP.out.versions.first()) ZIP_TABIX_VEP.out.gz_tbi .groupTuple() From 75c6d42a065a5d38c1fc8b8948d6aff0c29096b3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Nov 2022 01:48:14 +0100 Subject: [PATCH 0838/1921] sentieon merge --- modules/local/sentieon/bqsr.nf | 4 +- modules/local/sentieon/dnascope.nf | 4 +- modules/local/sentieon/readwriter.nf | 54 +++++++++++++++++++ subworkflows/local/align.nf | 2 +- .../local/alignment/align_sentieon.nf | 16 +++++- subworkflows/local/call_snv.nf | 2 +- 6 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 modules/local/sentieon/readwriter.nf diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index 75d7dbac..72ba06b4 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -9,8 +9,8 @@ process SENTIEON_BQSR { tuple val(meta), path(bam), path(bai) path fasta path fai - path known_dbsnp - path known_dbsnp_tbi + tuple val(meta2), path(known_dbsnp) + tuple val(meta3), path(known_dbsnp_tbi) output: tuple val(meta), path('*_recal.bam') , emit: bam diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index c4d7cf14..1d2d1ccc 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -7,8 +7,8 @@ process SENTIEON_DNASCOPE { tuple val(meta), path(bam), path(bai) path fasta path fai - path known_dbsnp - path known_dbsnp_tbi + tuple val(meta2), path(known_dbsnp) + tuple val(meta3), path(known_dbsnp_tbi) path call_interval path ml_model diff --git a/modules/local/sentieon/readwriter.nf b/modules/local/sentieon/readwriter.nf new file mode 100644 index 00000000..3eaf8590 --- /dev/null +++ b/modules/local/sentieon/readwriter.nf @@ -0,0 +1,54 @@ +process SENTIEON_READWRITER { + tag "$meta.id" + label 'process_medium' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path('*merged.bam') , emit: bam + tuple val(meta), path('*merged.bam.bai') , emit: bai + tuple val(meta), path('*merged.bam'), path('*merged.bam.bai') , emit: bam_bai + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + 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" + source sentieon_init.sh SENTIEON_LICENSE_BASE64 + fi + + sentieon \\ + driver \\ + -t $task.cpus \\ + $input \\ + --algo ReadWriter \\ + ${prefix}_merged.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_merged.bam + touch ${prefix}_merged.bam.bai + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 8e3b8c5b..b8f9adc8 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -21,7 +21,7 @@ workflow ALIGN { ch_versions = Channel.empty() ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai, platform ) - ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi ) + ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi, platform ) 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) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index c498958e..956b421d 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -7,6 +7,7 @@ include { SENTIEON_DATAMETRICS } from '../../../modules/local/sentieon/datame include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' +include { SENTIEON_READWRITER } from '../../../modules/local/sentieon/readwriter' workflow ALIGN_SENTIEON { take: @@ -16,6 +17,7 @@ workflow ALIGN_SENTIEON { index // channel: [ /path/to/bwamem2/index/ ] known_dbsnp // path: params.known_dbsnp known_dbsnp_tbi // path: params.known_dbsnp + platform // value: params.platform main: ch_versions = Channel.empty() @@ -29,8 +31,20 @@ workflow ALIGN_SENTIEON { SENTIEON_BWAMEM.out .bam .join(SENTIEON_BWAMEM.out.bai) - .set { ch_bam_bai } + .map{ meta, bam, bai -> + new_meta = meta.clone() // clone to avoid overriding the global meta + new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" + [new_meta, bam, bai]} // end the closure to return newly modified channel + .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] + .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list + single: it[1].size() == 1 + multiple: it[1].size() > 1 + } + .set{ merge_bams_in } + SENTIEON_READWRITER (merge_bams_in.multiple) + ch_bam_bai = merge_bams_in.single.mix(SENTIEON_READWRITER.out.bam_bai) SENTIEON_DATAMETRICS (ch_bam_bai, fasta, fai ) ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index a62662b9..096821d0 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -13,7 +13,7 @@ workflow CALL_SNV { fai // channel: [genome.fai] known_dbsnp // channel: [ /path/to/known_dbsnp ] known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] - call_interval // channel: [ /path/to/call_intervals ] + call_interval // channel: [ /path/to/call_intervals ] ml_model // channel: [ /path/to/ml_model ] case_info // channel: [ case_id ] From bae7a1886d7f1b8efdf76adde6e8a077e227d5d1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Nov 2022 15:34:08 +0100 Subject: [PATCH 0839/1921] connect sentieon to annotation subworkflow --- conf/modules.config | 26 ++++++++++++++ subworkflows/local/call_snv.nf | 2 +- .../variant_calling/call_snv_sentieon.nf | 35 ++++++++++++++++--- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9c762723..be2d2c96 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -421,6 +421,32 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + publishDir = [ + enabled: false + ] + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/sentieon_normvcf" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV_DEEPVARIANT:TABIX_SEN' { + publishDir = [ + path: { "${params.outdir}/sentieon_normvcf" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } // diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 096821d0..4a5a9227 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -27,7 +27,7 @@ workflow CALL_SNV { ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) } else if ( variant_caller == "sentieon" ) { - CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, call_interval, ml_model ) + CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, call_interval, ml_model, case_info ) ch_vcf = CALL_SNV_SENTIEON.out.vcf ch_tabix = CALL_SNV_SENTIEON.out.tabix ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 52dac412..567a0934 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -2,8 +2,12 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { SENTIEON_DNASCOPE } from '../../../modules/local/sentieon/dnascope' -include { SENTIEON_DNAMODELAPPLY } from '../../../modules/local/sentieon/dnamodelapply' +include { SENTIEON_DNASCOPE } from '../../../modules/local/sentieon/dnascope' +include { SENTIEON_DNAMODELAPPLY } from '../../../modules/local/sentieon/dnamodelapply' +include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_SEN } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_SEN } from '../../../modules/nf-core/tabix/tabix/main' workflow CALL_SNV_SENTIEON { take: @@ -14,6 +18,7 @@ workflow CALL_SNV_SENTIEON { dbsnp_index // path: params.known_dbsnp call_interval // path: params.call_interval ml_model // path: params.ml_model + case_info // channel: [ case_id ] main: ch_versions = Channel.empty() @@ -33,8 +38,30 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions) } + ch_vcf.join(ch_index) + .map { meta,vcf,tbi -> return [vcf,tbi] } + .set { ch_vcf_idx } + + case_info + .combine(ch_vcf_idx) + .groupTuple() + .set{ ch_vcf_idx_case } + + BCFTOOLS_MERGE(ch_vcf_idx_case,[],fasta,fai) + + ch_split_multi_in = BCFTOOLS_MERGE.out.merged_variants + .map{meta, bcf -> + return [meta, bcf, []]} + SPLIT_MULTIALLELICS_SEN(ch_split_multi_in, fasta) + + ch_remove_dup_in = SPLIT_MULTIALLELICS_SEN.out.vcf + .map{meta, vcf -> + return [meta, vcf, []]} + REMOVE_DUPLICATES_SEN(ch_remove_dup_in, fasta) + TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) + emit: - vcf = ch_vcf - tabix = ch_index + vcf = REMOVE_DUPLICATES_SEN.out.vcf + tabix = TABIX_SEN.out.tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From d2daf5b86faebd12c36c7f2fd6076ceb14db8433 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Nov 2022 15:46:46 +0100 Subject: [PATCH 0840/1921] fix CI --- subworkflows/local/variant_calling/call_snv_sentieon.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 567a0934..1f21f916 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -4,7 +4,7 @@ include { SENTIEON_DNASCOPE } from '../../../modules/local/sentieon/dnascope' include { SENTIEON_DNAMODELAPPLY } from '../../../modules/local/sentieon/dnamodelapply' -include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge' +include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge/main' include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' include { BCFTOOLS_NORM as REMOVE_DUPLICATES_SEN } from '../../../modules/nf-core/bcftools/norm/main' include { TABIX_TABIX as TABIX_SEN } from '../../../modules/nf-core/tabix/tabix/main' From ab4978733069206218435a26c12e39b016783e06 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Nov 2022 16:25:16 +0100 Subject: [PATCH 0841/1921] string to uppercase --- subworkflows/local/variant_calling/call_sv_manta.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 59e58ed7..6653aa4a 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -27,7 +27,7 @@ workflow CALL_SV_MANTA { return [bed_file, index]} .set { bed_input } - if (params.analysis_type == "WGS") { + if (params.analysis_type.toUpperCase() == "WGS" ) { case_info.combine(bam_file_list) .combine(bai_file_list) .map { it -> it + [ [], [] ] } From 6189e641adf0e9f503c2c58936ca661787330108 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Nov 2022 00:47:35 +0100 Subject: [PATCH 0842/1921] add mt_contig_name_params --- conf/modules.config | 13 ++++++++++++- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ subworkflows/local/call_snv.nf | 19 +++++++++++++------ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9c762723..47cc6796 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -540,6 +540,17 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + + withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { + ext.args = "--exclude-intervals ${params.mt_contig_name}" + ext.prefix = { "${meta.id}_nomito" } + ext.when = { params.annotate_snv_switch } + publishDir = [ + path: { "${params.outdir}/glnexus/no_mito" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } // @@ -810,7 +821,7 @@ process { beforeScript = {"mkdir ./tmp"} ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = [ - params.genome == "GRCh37" ? "-L MT" : "-L chrM", + "-L ${params.mt_contig_name}", "--read-filter MateOnSameContigOrNoMappedMateReadFilter", "--read-filter MateUnmappedAndUnmappedReadFilter" ].join(" ").trim() diff --git a/nextflow.config b/nextflow.config index 189df701..bcc8ef2c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -18,6 +18,7 @@ params { igenomes_ignore = false local_genomes = null save_reference = false + mt_contig_name = 'MT' // Main options analysis_type = 'wgs' diff --git a/nextflow_schema.json b/nextflow_schema.json index 54bb1213..f4688bc8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -127,6 +127,12 @@ "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" }, + "mt_contig_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" + }, "mt_intervals": { "type": "string", "format": "path", diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index a62662b9..1541e940 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -4,6 +4,8 @@ include { CALL_SNV_DEEPVARIANT } from './variant_calling/call_snv_deepvariant' include { CALL_SNV_SENTIEON } from './variant_calling/call_snv_sentieon' +include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' + workflow CALL_SNV { take: @@ -18,22 +20,27 @@ workflow CALL_SNV { case_info // channel: [ case_id ] main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() - if (variant_caller == "deepvariant") { + if (variant_caller == "deepvariant") { CALL_SNV_DEEPVARIANT ( input, fasta, fai, case_info ) ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf ch_tabix = CALL_SNV_DEEPVARIANT.out.tabix ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) - } else if ( variant_caller == "sentieon" ) { + } else if ( variant_caller == "sentieon" ) { CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, call_interval, ml_model ) ch_vcf = CALL_SNV_SENTIEON.out.vcf ch_tabix = CALL_SNV_SENTIEON.out.tabix ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) - } else { - exit 1, 'Please provide a valid variant caller!' - } + } else { + exit 1, 'Please provide a valid variant caller!' + } + + ch_vcf.join(ch_tabix) + .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} + .set { ch_selvar_in} + GATK4_SELECTVARIANTS(ch_selvar_in) emit: vcf = ch_vcf From 283d6c3745852630ecf3942e5d38a5df983c9f13 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Nov 2022 17:04:33 +0100 Subject: [PATCH 0843/1921] combine mt and snv --- conf/modules.config | 12 +++++++++++- subworkflows/local/annotate_snvs.nf | 13 +++++++++---- subworkflows/local/call_snv.nf | 6 +++--- workflows/raredisease.nf | 14 +++++++++++++- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 407f65a4..8091ba0e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -809,6 +809,16 @@ process { } } +// +// Merge mitochondrial and genomic vcfs +// + +process { + withName: 'RAREDISEASE:BCFTOOLS_CONCAT' { + ext.prefix = { "${meta.id}_mito_genome_merged" } + } +} + // // Score and rank SNVs // @@ -1032,7 +1042,7 @@ process { '--plugin LoFtool,vep_cache/LoFtool_scores.txt', '--distance 0', '--buffer_size 20000', - '--format vcf --max_sv_size 16600', + '--format vcf --vcf --max_sv_size 16600', '--appris --biotype --cache --canonical --ccds --compress_output bgzip', '--domains --exclude_predicted --force_overwrite', '--hgvs --humdiv --no_progress --numbers', diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 8f24e350..5d6e455a 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -11,7 +11,8 @@ include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/en 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' include { TABIX_BGZIPTABIX as ZIP_TABIX_VEP } from '../../modules/nf-core/tabix/bgziptabix/main' -include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../modules/nf-core/tabix/tabix/main' +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' workflow ANNOTATE_SNVS { @@ -80,10 +81,10 @@ workflow ANNOTATE_SNVS { BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi,[],[],[]).vcf.set { ch_vep_in } ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) - TABIX_BCFTOOLS (BCFTOOLS_VIEW.out.vcf) - ch_versions = ch_versions.mix(TABIX_BCFTOOLS.out.versions) + TABIX_BCFTOOLS_VIEW (BCFTOOLS_VIEW.out.vcf) + ch_versions = ch_versions.mix(TABIX_BCFTOOLS_VIEW.out.versions) - BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS.out.tbi).collect().set { ch_vcf_scatter_in } + BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS_VIEW.out.tbi).collect().set { ch_vcf_scatter_in } GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(split_intervals)).vcf.set { ch_vep_in } ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) @@ -116,7 +117,11 @@ workflow ANNOTATE_SNVS { BCFTOOLS_CONCAT (ch_vep_ann) ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) + TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) + ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) + emit: vcf_ann = BCFTOOLS_CONCAT.out.vcf + tbi = TABIX_BCFTOOLS_CONCAT.out.tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index a5cc69f9..61d9c1c4 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -39,11 +39,11 @@ workflow CALL_SNV { ch_vcf.join(ch_tabix) .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} - .set { ch_selvar_in} + .set { ch_selvar_in } GATK4_SELECTVARIANTS(ch_selvar_in) emit: - vcf = ch_vcf - tabix = ch_tabix + vcf = GATK4_SELECTVARIANTS.out.vcf + tabix = GATK4_SELECTVARIANTS.out.tbi versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3823a86b..a12021b6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -80,6 +80,7 @@ include { MAKE_PED } from '../modules/local/create_ // MODULE: Installed directly from nf-core/modules // +include { BCFTOOLS_CONCAT } from '../modules/nf-core/bcftools/concat/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' @@ -393,8 +394,19 @@ workflow RAREDISEASE { ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) + ch_snv_annotate.tbi + .concat(ANALYSE_MT.out.tbi) + .groupTuple() + .set { ch_merged_tbi } + ch_snv_annotate.vcf_ann + .concat(ANALYSE_MT.out.vcf) + .groupTuple() + .set { ch_merged_vcf } + + ch_merged_vcf.join(ch_merged_tbi).set {ch_concat_in} + BCFTOOLS_CONCAT (ch_concat_in) ANN_CSQ_PLI_SNV ( - ch_snv_annotate.vcf_ann, + BCFTOOLS_CONCAT.out.vcf, ch_variant_consequences ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) From 886eae05169b4559597fbb2fdcb31e935e949016 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 25 Nov 2022 14:14:09 +0100 Subject: [PATCH 0844/1921] Replaced bed by interval list files --- assets/1-22XYMT_grch37.interval_list | 112 + assets/Y_grch37.interval_list | 88 + ...hr1-chr22chrXchrYchrM_grch38.interval_list | 3392 +++++++++++++++++ assets/chrY_grch38.interval_list | 3368 ++++++++++++++++ 4 files changed, 6960 insertions(+) create mode 100644 assets/1-22XYMT_grch37.interval_list create mode 100644 assets/Y_grch37.interval_list create mode 100644 assets/chr1-chr22chrXchrYchrM_grch38.interval_list create mode 100644 assets/chrY_grch38.interval_list diff --git a/assets/1-22XYMT_grch37.interval_list b/assets/1-22XYMT_grch37.interval_list new file mode 100644 index 00000000..7c884dd6 --- /dev/null +++ b/assets/1-22XYMT_grch37.interval_list @@ -0,0 +1,112 @@ +@HD VN:1.5 SO:coordinate +@SQ SN:1 LN:249250621 M5:1b22b98cdeb4a9304cb5d48026a85128 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:2 LN:243199373 M5:a0d9851da00400dec1098a9255ac712e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:3 LN:198022430 M5:fdfd811849cc2fadebc929bb925902e5 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:4 LN:191154276 M5:23dccd106897542ad87d2765d28a19a1 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:5 LN:180915260 M5:0740173db9ffd264d728f32784845cd7 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:6 LN:171115067 M5:1d3a93a248d92a729ee764823acbbc6b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:7 LN:159138663 M5:618366e953d6aaad97dbe4777c29375e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:8 LN:146364022 M5:96f514a9929e410c6651697bded59aec UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:9 LN:141213431 M5:3e273117f15e0a400f01055d9f393768 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:10 LN:135534747 M5:988c28e000e84c26d552359af1ea2e1d UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:11 LN:135006516 M5:98c59049a2df285c76ffb1c6db8f8b96 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:12 LN:133851895 M5:51851ac0e1a115847ad36449b0015864 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:13 LN:115169878 M5:283f8d7892baa81b510a015719ca7b0b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:14 LN:107349540 M5:98f3cae32b2a2e9524bc19813927542e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:15 LN:102531392 M5:e5645a794a8238215b2cd77acb95a078 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:16 LN:90354753 M5:fc9b1a7b42b97a864f56b348b06095e6 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:17 LN:81195210 M5:351f64d4f4f9ddd45b35336ad97aa6de UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:18 LN:78077248 M5:b15d4b2d29dde9d3e4f93d1d0f2cbc9c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:19 LN:59128983 M5:1aacd71f30db8e561810913e0b72636d UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:20 LN:63025520 M5:0dec9660ec1efaaf33281c0d5ea2560f UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:21 LN:48129895 M5:2979a6085bfe28e3ad6f552f361ed74d UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:22 LN:51304566 M5:a718acaa6135fdca8357d5bfe94211dd UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:X LN:155270560 M5:7e0e2e580297b7764e31dbc80c2540dd UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:Y LN:59373566 M5:1fa3474750af0948bdf97d5a0ee52e51 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:MT LN:16569 M5:c68f52674c9fb33aef52dcf399755519 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000207.1 LN:4262 M5:f3814841f1939d3ca19072d9e89f3fd7 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000226.1 LN:15008 M5:1c1b2cd1fccbc0a99b6a447fa24d1504 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000229.1 LN:19913 M5:d0f40ec87de311d8e715b52e4c7062e1 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000231.1 LN:27386 M5:ba8882ce3a1efa2080e5d29b956568a4 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000210.1 LN:27682 M5:851106a74238044126131ce2a8e5847c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000239.1 LN:33824 M5:99795f15702caec4fa1c4e15f8a29c07 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000235.1 LN:34474 M5:118a25ca210cfbcdfb6c2ebb249f9680 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000201.1 LN:36148 M5:dfb7e7ec60ffdcb85cb359ea28454ee9 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000247.1 LN:36422 M5:7de00226bb7df1c57276ca6baabafd15 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000245.1 LN:36651 M5:89bc61960f37d94abf0df2d481ada0ec UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000197.1 LN:37175 M5:6f5efdd36643a9b8c8ccad6f2f1edc7b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000203.1 LN:37498 M5:96358c325fe0e70bee73436e8bb14dbd UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000246.1 LN:38154 M5:e4afcd31912af9d9c2546acf1cb23af2 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000249.1 LN:38502 M5:1d78abec37c15fe29a275eb08d5af236 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000196.1 LN:38914 M5:d92206d1bb4c3b4019c43c0875c06dc0 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000248.1 LN:39786 M5:5a8e43bec9be36c7b49c84d585107776 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000244.1 LN:39929 M5:0996b4475f353ca98bacb756ac479140 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000238.1 LN:39939 M5:131b1efc3270cc838686b54e7c34b17b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000202.1 LN:40103 M5:06cbf126247d89664a4faebad130fe9c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000234.1 LN:40531 M5:93f998536b61a56fd0ff47322a911d4b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000232.1 LN:40652 M5:3e06b6741061ad93a8587531307057d8 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000206.1 LN:41001 M5:43f69e423533e948bfae5ce1d45bd3f1 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000240.1 LN:41933 M5:445a86173da9f237d7bcf41c6cb8cc62 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000236.1 LN:41934 M5:fdcd739913efa1fdc64b6c0cd7016779 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000241.1 LN:42152 M5:ef4258cdc5a45c206cea8fc3e1d858cf UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000243.1 LN:43341 M5:cc34279a7e353136741c9fce79bc4396 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000242.1 LN:43523 M5:2f8694fc47576bc81b5fe9e7de0ba49e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000230.1 LN:43691 M5:b4eb71ee878d3706246b7c1dbef69299 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000237.1 LN:45867 M5:e0c82e7751df73f4f6d0ed30cdc853c0 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000233.1 LN:45941 M5:7fed60298a8d62ff808b74b6ce820001 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000204.1 LN:81310 M5:efc49c871536fa8d79cb0a06fa739722 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000198.1 LN:90085 M5:868e7784040da90d900d2d1b667a1383 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000208.1 LN:92689 M5:aa81be49bf3fe63a79bdc6a6f279abf6 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000191.1 LN:106433 M5:d75b436f50a8214ee9c2a51d30b2c2cc UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000227.1 LN:128374 M5:a4aead23f8053f2655e468bcc6ecdceb UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000228.1 LN:129120 M5:c5a17c97e2c1a0b6a9cc5a6b064b714f UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000214.1 LN:137718 M5:46c2032c37f2ed899eb41c0473319a69 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000221.1 LN:155397 M5:3238fb74ea87ae857f9c7508d315babb UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000209.1 LN:159169 M5:f40598e2a5a6b26e84a3775e0d1e2c81 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000218.1 LN:161147 M5:1d708b54644c26c7e01c2dad5426d38c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000220.1 LN:161802 M5:fc35de963c57bf7648429e6454f1c9db UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000213.1 LN:164239 M5:9d424fdcc98866650b58f004080a992a UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000211.1 LN:166566 M5:7daaa45c66b288847b9b32b964e623d3 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000199.1 LN:169874 M5:569af3b73522fab4b40995ae4944e78e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000217.1 LN:172149 M5:6d243e18dea1945fb7f2517615b8f52e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000216.1 LN:172294 M5:642a232d91c486ac339263820aef7fe0 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000215.1 LN:172545 M5:5eb3b418480ae67a997957c909375a73 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000205.1 LN:174588 M5:d22441398d99caf673e9afb9a1908ec5 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000219.1 LN:179198 M5:f977edd13bac459cb2ed4a5457dba1b3 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000224.1 LN:179693 M5:d5b2fc04f6b41b212a4198a07f450e20 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000223.1 LN:180455 M5:399dfa03bf32022ab52a846f7ca35b30 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000195.1 LN:182896 M5:5d9ec007868d517e73543b005ba48535 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000212.1 LN:186858 M5:563531689f3dbd691331fd6c5730a88b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000222.1 LN:186861 M5:6fe9abac455169f50470f5a6b01d0f59 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000200.1 LN:187035 M5:75e4c8d17cd4addf3917d1703cacaf25 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000193.1 LN:189789 M5:dbb6e8ece0b5de29da56601613007c2a UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000194.1 LN:191469 M5:6ac8f815bf8e845bb3031b73f812c012 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000225.1 LN:211173 M5:63945c3e6962f28ffd469719a747e73c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000192.1 LN:547496 M5:325ba9e808f669dfeee210fdd7b470ac UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:NC_007605 LN:171823 M5:6743bd63b3ff2b5b8985d8933c53290a UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:hs37d5 LN:35477943 M5:5b6a4b3a81a2d3c134b7d14bf6ad39f1 UR:grch37_homo_sapiens_-d5-.fasta +1 1 249250621 + . +2 1 243199373 + . +3 1 198022430 + . +4 1 191154276 + . +5 1 180915260 + . +6 1 171115067 + . +7 1 159138663 + . +8 1 146364022 + . +9 1 141213431 + . +10 1 135534747 + . +11 1 135006516 + . +12 1 133851895 + . +13 1 115169878 + . +14 1 107349540 + . +15 1 102531392 + . +16 1 90354753 + . +17 1 81195210 + . +18 1 78077248 + . +19 1 59128983 + . +20 1 63025520 + . +21 1 48129895 + . +22 1 51304566 + . +X 1 155270560 + . +Y 1 59373566 + . +MT 1 16569 + . diff --git a/assets/Y_grch37.interval_list b/assets/Y_grch37.interval_list new file mode 100644 index 00000000..f0aefb8e --- /dev/null +++ b/assets/Y_grch37.interval_list @@ -0,0 +1,88 @@ +@HD VN:1.5 SO:coordinate +@SQ SN:1 LN:249250621 M5:1b22b98cdeb4a9304cb5d48026a85128 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:2 LN:243199373 M5:a0d9851da00400dec1098a9255ac712e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:3 LN:198022430 M5:fdfd811849cc2fadebc929bb925902e5 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:4 LN:191154276 M5:23dccd106897542ad87d2765d28a19a1 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:5 LN:180915260 M5:0740173db9ffd264d728f32784845cd7 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:6 LN:171115067 M5:1d3a93a248d92a729ee764823acbbc6b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:7 LN:159138663 M5:618366e953d6aaad97dbe4777c29375e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:8 LN:146364022 M5:96f514a9929e410c6651697bded59aec UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:9 LN:141213431 M5:3e273117f15e0a400f01055d9f393768 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:10 LN:135534747 M5:988c28e000e84c26d552359af1ea2e1d UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:11 LN:135006516 M5:98c59049a2df285c76ffb1c6db8f8b96 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:12 LN:133851895 M5:51851ac0e1a115847ad36449b0015864 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:13 LN:115169878 M5:283f8d7892baa81b510a015719ca7b0b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:14 LN:107349540 M5:98f3cae32b2a2e9524bc19813927542e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:15 LN:102531392 M5:e5645a794a8238215b2cd77acb95a078 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:16 LN:90354753 M5:fc9b1a7b42b97a864f56b348b06095e6 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:17 LN:81195210 M5:351f64d4f4f9ddd45b35336ad97aa6de UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:18 LN:78077248 M5:b15d4b2d29dde9d3e4f93d1d0f2cbc9c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:19 LN:59128983 M5:1aacd71f30db8e561810913e0b72636d UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:20 LN:63025520 M5:0dec9660ec1efaaf33281c0d5ea2560f UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:21 LN:48129895 M5:2979a6085bfe28e3ad6f552f361ed74d UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:22 LN:51304566 M5:a718acaa6135fdca8357d5bfe94211dd UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:X LN:155270560 M5:7e0e2e580297b7764e31dbc80c2540dd UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:Y LN:59373566 M5:1fa3474750af0948bdf97d5a0ee52e51 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:MT LN:16569 M5:c68f52674c9fb33aef52dcf399755519 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000207.1 LN:4262 M5:f3814841f1939d3ca19072d9e89f3fd7 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000226.1 LN:15008 M5:1c1b2cd1fccbc0a99b6a447fa24d1504 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000229.1 LN:19913 M5:d0f40ec87de311d8e715b52e4c7062e1 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000231.1 LN:27386 M5:ba8882ce3a1efa2080e5d29b956568a4 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000210.1 LN:27682 M5:851106a74238044126131ce2a8e5847c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000239.1 LN:33824 M5:99795f15702caec4fa1c4e15f8a29c07 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000235.1 LN:34474 M5:118a25ca210cfbcdfb6c2ebb249f9680 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000201.1 LN:36148 M5:dfb7e7ec60ffdcb85cb359ea28454ee9 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000247.1 LN:36422 M5:7de00226bb7df1c57276ca6baabafd15 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000245.1 LN:36651 M5:89bc61960f37d94abf0df2d481ada0ec UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000197.1 LN:37175 M5:6f5efdd36643a9b8c8ccad6f2f1edc7b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000203.1 LN:37498 M5:96358c325fe0e70bee73436e8bb14dbd UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000246.1 LN:38154 M5:e4afcd31912af9d9c2546acf1cb23af2 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000249.1 LN:38502 M5:1d78abec37c15fe29a275eb08d5af236 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000196.1 LN:38914 M5:d92206d1bb4c3b4019c43c0875c06dc0 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000248.1 LN:39786 M5:5a8e43bec9be36c7b49c84d585107776 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000244.1 LN:39929 M5:0996b4475f353ca98bacb756ac479140 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000238.1 LN:39939 M5:131b1efc3270cc838686b54e7c34b17b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000202.1 LN:40103 M5:06cbf126247d89664a4faebad130fe9c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000234.1 LN:40531 M5:93f998536b61a56fd0ff47322a911d4b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000232.1 LN:40652 M5:3e06b6741061ad93a8587531307057d8 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000206.1 LN:41001 M5:43f69e423533e948bfae5ce1d45bd3f1 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000240.1 LN:41933 M5:445a86173da9f237d7bcf41c6cb8cc62 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000236.1 LN:41934 M5:fdcd739913efa1fdc64b6c0cd7016779 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000241.1 LN:42152 M5:ef4258cdc5a45c206cea8fc3e1d858cf UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000243.1 LN:43341 M5:cc34279a7e353136741c9fce79bc4396 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000242.1 LN:43523 M5:2f8694fc47576bc81b5fe9e7de0ba49e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000230.1 LN:43691 M5:b4eb71ee878d3706246b7c1dbef69299 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000237.1 LN:45867 M5:e0c82e7751df73f4f6d0ed30cdc853c0 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000233.1 LN:45941 M5:7fed60298a8d62ff808b74b6ce820001 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000204.1 LN:81310 M5:efc49c871536fa8d79cb0a06fa739722 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000198.1 LN:90085 M5:868e7784040da90d900d2d1b667a1383 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000208.1 LN:92689 M5:aa81be49bf3fe63a79bdc6a6f279abf6 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000191.1 LN:106433 M5:d75b436f50a8214ee9c2a51d30b2c2cc UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000227.1 LN:128374 M5:a4aead23f8053f2655e468bcc6ecdceb UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000228.1 LN:129120 M5:c5a17c97e2c1a0b6a9cc5a6b064b714f UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000214.1 LN:137718 M5:46c2032c37f2ed899eb41c0473319a69 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000221.1 LN:155397 M5:3238fb74ea87ae857f9c7508d315babb UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000209.1 LN:159169 M5:f40598e2a5a6b26e84a3775e0d1e2c81 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000218.1 LN:161147 M5:1d708b54644c26c7e01c2dad5426d38c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000220.1 LN:161802 M5:fc35de963c57bf7648429e6454f1c9db UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000213.1 LN:164239 M5:9d424fdcc98866650b58f004080a992a UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000211.1 LN:166566 M5:7daaa45c66b288847b9b32b964e623d3 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000199.1 LN:169874 M5:569af3b73522fab4b40995ae4944e78e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000217.1 LN:172149 M5:6d243e18dea1945fb7f2517615b8f52e UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000216.1 LN:172294 M5:642a232d91c486ac339263820aef7fe0 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000215.1 LN:172545 M5:5eb3b418480ae67a997957c909375a73 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000205.1 LN:174588 M5:d22441398d99caf673e9afb9a1908ec5 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000219.1 LN:179198 M5:f977edd13bac459cb2ed4a5457dba1b3 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000224.1 LN:179693 M5:d5b2fc04f6b41b212a4198a07f450e20 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000223.1 LN:180455 M5:399dfa03bf32022ab52a846f7ca35b30 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000195.1 LN:182896 M5:5d9ec007868d517e73543b005ba48535 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000212.1 LN:186858 M5:563531689f3dbd691331fd6c5730a88b UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000222.1 LN:186861 M5:6fe9abac455169f50470f5a6b01d0f59 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000200.1 LN:187035 M5:75e4c8d17cd4addf3917d1703cacaf25 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000193.1 LN:189789 M5:dbb6e8ece0b5de29da56601613007c2a UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000194.1 LN:191469 M5:6ac8f815bf8e845bb3031b73f812c012 UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000225.1 LN:211173 M5:63945c3e6962f28ffd469719a747e73c UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:GL000192.1 LN:547496 M5:325ba9e808f669dfeee210fdd7b470ac UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:NC_007605 LN:171823 M5:6743bd63b3ff2b5b8985d8933c53290a UR:grch37_homo_sapiens_-d5-.fasta +@SQ SN:hs37d5 LN:35477943 M5:5b6a4b3a81a2d3c134b7d14bf6ad39f1 UR:grch37_homo_sapiens_-d5-.fasta +Y 1 59373566 + . diff --git a/assets/chr1-chr22chrXchrYchrM_grch38.interval_list b/assets/chr1-chr22chrXchrYchrM_grch38.interval_list new file mode 100644 index 00000000..ab631387 --- /dev/null +++ b/assets/chr1-chr22chrXchrYchrM_grch38.interval_list @@ -0,0 +1,3392 @@ +@HD VN:1.5 SO:coordinate +@SQ SN:chr1 LN:248956422 M5:6aef897c3d6ff0c78aff06ac189178dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2 LN:242193529 M5:f98db672eb0993dcfdabafe2a882905c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3 LN:198295559 M5:76635a41ea913a405ded820447d067b0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4 LN:190214555 M5:3210fecf1eb92d5489da4346b3fddc6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5 LN:181538259 M5:a811b3dc9fe66af729dc0dddf7fa4f13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6 LN:170805979 M5:5691468a67c7e7a7b5f2a3a683792c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7 LN:159345973 M5:cc044cc2256a1141212660fb07b6171e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8 LN:145138636 M5:c67955b5f7815a9a1edfaa15893d3616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9 LN:138394717 M5:6c198acf68b5af7b9d676dfdd531b5de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10 LN:133797422 M5:c0eeee7acfdaf31b770a509bdaa6e51a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11 LN:135086622 M5:1511375dc2dd1b633af8cf439ae90cec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12 LN:133275309 M5:96e414eace405d8c27a6d35ba19df56f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13 LN:114364328 M5:a5437debe2ef9c9ef8f3ea2874ae1d82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14 LN:107043718 M5:e0f0eecc3bcab6178c62b6211565c807 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15 LN:101991189 M5:f036bd11158407596ca6bf3581454706 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16 LN:90338345 M5:db2d37c8b7d019caaf2dd64ba3a6f33a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17 LN:83257441 M5:f9a0fb01553adb183568e3eb9d8626db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18 LN:80373285 M5:11eeaa801f6b0e2e36a1138616b8ee9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19 LN:58617616 M5:85f9f4fc152c58cb7913c06d6b98573a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20 LN:64444167 M5:b18e6c531b0bd70e949a7fc20859cb01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21 LN:46709983 M5:974dc7aec0b755b19f031418fdedf293 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22 LN:50818468 M5:ac37ec46683600f808cdd41eac1d55cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX LN:156040895 M5:2b3a55ff7f58eb308420c8a9b11cac50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrY LN:57227415 M5:ce3e31103314a704255f3cd90369ecce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrM LN:16569 M5:c68f52674c9fb33aef52dcf399755519 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270706v1_random LN:175055 M5:62def1a794b3e18192863d187af956e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270707v1_random LN:32032 M5:78135804eb15220565483b7cdd02f3be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270708v1_random LN:127682 M5:1e95e047b98ed92148dd84d6c037158c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270709v1_random LN:66860 M5:4e2db2933ea96aee8dab54af60ecb37d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270710v1_random LN:40176 M5:9949f776680c6214512ee738ac5da289 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270711v1_random LN:42210 M5:af383f98cf4492c1f1c4e750c26cbb40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270712v1_random LN:176043 M5:c38a0fecae6a1838a405406f724d6838 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270713v1_random LN:40745 M5:cb78d48cc0adbc58822a1c6fe89e3569 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270714v1_random LN:41717 M5:42f7a452b8b769d051ad738ee9f00631 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270715v1_random LN:161471 M5:b65a8af1d7bbb7f3c77eea85423452bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270716v1_random LN:153799 M5:2828e63b8edc5e845bf48e75fbad2926 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_GL000221v1_random LN:155397 M5:3238fb74ea87ae857f9c7508d315babb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL000008v2_random LN:209709 M5:a999388c587908f80406444cebe80ba3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL000208v1_random LN:92689 M5:aa81be49bf3fe63a79bdc6a6f279abf6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270717v1_random LN:40062 M5:796773a1ee67c988b4de887addbed9e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270718v1_random LN:38054 M5:b0c463c8efa8d64442b48e936368dad5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270719v1_random LN:176845 M5:cd5e932cfc4c74d05bb64e2126873a3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270720v1_random LN:39050 M5:8c2683400a4aeeb40abff96652b9b127 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270721v1_random LN:100316 M5:9654b5d3f36845bb9d19a6dbd15d2f22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_GL000009v2_random LN:201709 M5:862f555045546733591ff7ab15bcecbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_GL000225v1_random LN:211173 M5:63945c3e6962f28ffd469719a747e73c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270722v1_random LN:194050 M5:51f46c9093929e6edc3b4dfd50d803fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_GL000194v1_random LN:191469 M5:6ac8f815bf8e845bb3031b73f812c012 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270723v1_random LN:38115 M5:74a4b480675592095fb0c577c515b5df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270724v1_random LN:39555 M5:c3fcb15dddf45f91ef7d94e2623ce13b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270725v1_random LN:172810 M5:edc6402e58396b90b8738a5e37bf773d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270726v1_random LN:43739 M5:fbe54a3197e2b469ccb2f4b161cfbe86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270727v1_random LN:448248 M5:84fe18a7bf03f3b7fc76cbac8eb583f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270728v1_random LN:1872759 M5:369ff74cf36683b3066a2ca929d9c40d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL000205v2_random LN:185591 M5:458e71cd53dd1df4083dc7983a6c82c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270729v1_random LN:280839 M5:2756f6ee4f5780acce31e995443508b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270730v1_random LN:112551 M5:48f98ede8e28a06d241ab2e946c15e07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270731v1_random LN:150754 M5:8176d9a20401e8d9f01b7ca8b51d9c08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270732v1_random LN:41543 M5:d837bab5e416450df6e1038ae6cd0817 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270733v1_random LN:179772 M5:f1fa05d48bb0c1f87237a28b66f0be0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270734v1_random LN:165050 M5:1d17410ae2569c758e6dd51616412d32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270735v1_random LN:42811 M5:eb6b07b73dd9a47252098ed3d9fb78b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270736v1_random LN:181920 M5:2ff189f33cfa52f321accddf648c5616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270737v1_random LN:103838 M5:2ea8bc113a8193d1d700b584b2c5f42a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270738v1_random LN:99375 M5:854ec525c7b6a79e7268f515b6a9877c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270739v1_random LN:73985 M5:760fbd73515fedcc9f37737c4a722d6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrY_KI270740v1_random LN:37240 M5:69e42252aead509bf56f1ea6fda91405 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270302v1 LN:2274 M5:ee6dff38036f7d03478c70717643196e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270304v1 LN:2165 M5:9423c1b46a48aa6331a77ab5c702ac9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270303v1 LN:1942 M5:2cb746c78e0faa11e628603a4bc9bd58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270305v1 LN:1472 M5:f9acea3395b6992cf3418b6689b98cf9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270322v1 LN:21476 M5:7d459255d1c54369e3b64e719061a5a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270320v1 LN:4416 M5:d898b9c5a0118e76481bf5695272959e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270310v1 LN:1201 M5:af6cb123af7007793bac06485a2a20e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270316v1 LN:1444 M5:6adde7a9fe7bd6918f12d0f0924aa8ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270315v1 LN:2276 M5:ecc43e822dc011fae1fcfd9981c46e9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270312v1 LN:998 M5:26499f2fe4c65621fd8f4ecafbad31d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270311v1 LN:12399 M5:59594f9012d8ce21ed5d1119c051a2ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270317v1 LN:37690 M5:cd4b1fda800f6ec9ea8001994dbf6499 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270412v1 LN:1179 M5:7bb9612f733fb7f098be79499d46350c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270411v1 LN:2646 M5:fc240322d91d43c04f349cc58fda3eca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270414v1 LN:2489 M5:753e02ef3b1c590e0e3376ad2ebb5836 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270419v1 LN:1029 M5:58455e7a788f0dc82034d1fb109f6f5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270418v1 LN:2145 M5:1537ec12b9c58d137a2d4cb9db896bbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270420v1 LN:2321 M5:bac954a897539c91982a7e3985a49910 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270424v1 LN:2140 M5:747c8f94f34d5de4ad289bc604708210 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270417v1 LN:2043 M5:cd26758fda713f9c96e51d541f50c2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270422v1 LN:1445 M5:3fce80eb4c0554376b591699031feb56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270423v1 LN:981 M5:bdf5a85c001731dccfb150db2bfe58ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270425v1 LN:1884 M5:665a46879bbb48294b0cfa87b61e71f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270429v1 LN:1361 M5:ee8962dbef9396884f649e566b78bf06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270442v1 LN:392061 M5:796289c4cda40e358991f9e672490015 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270466v1 LN:1233 M5:530b7033716a5d72dd544213c513fd12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270465v1 LN:1774 M5:bb1b2323414425c46531b3c3d22ae00d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270467v1 LN:3920 M5:db34e0dc109a4afd499b5ec6aaae9754 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270435v1 LN:92983 M5:1655c75415b9c29e143a815f44286d05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270438v1 LN:112505 M5:e765271939b854dd6826aa764e930c87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270468v1 LN:4055 M5:0a603090f06108ed7aff75df0767b822 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270510v1 LN:2415 M5:cd7348b3b5d9d0dfef6aed2af75ce920 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270509v1 LN:2318 M5:1cdeb8c823d839e1d1735b5bc9a14856 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270518v1 LN:2186 M5:3fd898b62ca859f50fb8b83e7706352b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270508v1 LN:1951 M5:7d42a358d472b9cbdfdf30c8742473d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270516v1 LN:1300 M5:1cbaaafbbf016906a5bf5886f5a0ecb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270512v1 LN:22689 M5:ba1021c82d1230af856f59079e2f71b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270519v1 LN:138126 M5:8d754e9c9afd904fba0a2cd577fcc9a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270522v1 LN:5674 M5:070b4678e22501029c2e3297115216bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270511v1 LN:8127 M5:907ca34a4a2a6673632ebaf513a4c1a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270515v1 LN:6361 M5:dd7527ee8e0bdb0a43ca0b2a5456c8c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270507v1 LN:5353 M5:311894d0a815eb07c5cac49da851cb4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270517v1 LN:3253 M5:913440c38d95c618617ca69bb9296170 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270529v1 LN:1899 M5:4caf890f2586daab8e4b2e2db904f05f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270528v1 LN:2983 M5:d75c9235f0b8c449fc4352997c56b086 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270530v1 LN:2168 M5:04549369e1197c626669a10164613635 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270539v1 LN:993 M5:19e3a982e67eafef39c5a3e4163f1e17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270538v1 LN:91309 M5:d60b72221cc7af871f2c757577e4c92a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270544v1 LN:1202 M5:e62a14b14467cdf48b5a236c66918f0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270548v1 LN:1599 M5:866b0db8e9cf66208c2c064bd09ce0a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270583v1 LN:1400 M5:b127e2e6dbe358ff192b271b8c6ee690 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270587v1 LN:2969 M5:36be47659719f47b95caa51744aa8f70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270580v1 LN:1553 M5:1df30dae0f605811d927dcea58e729fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270581v1 LN:7046 M5:9f26945f9f9b3f865c9ebe953cbbc1a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270579v1 LN:31033 M5:fe62fb1964002717cc1b034630e89b1f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270589v1 LN:44474 M5:211c215414693fe0a2399cf82e707e03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270590v1 LN:4685 M5:e8a57f147561b361091791b9010cd28b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270584v1 LN:4513 M5:d93636c9d54abd013cfc0d4c01334032 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270582v1 LN:6504 M5:6fd9804a7478d2e28160fe9f017689cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270588v1 LN:6158 M5:37ffa850e69b342a8f8979bd3ffc77d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270593v1 LN:3041 M5:f4a5bfa203e9e81acb640b18fb11e78e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270591v1 LN:5796 M5:d6af509d69835c9ac25a30086e5a4051 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270330v1 LN:1652 M5:c2c590706a339007b00c59e0b8937e78 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270329v1 LN:1040 M5:f023f927ae84c5cc48dc4dce11ba90f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270334v1 LN:1368 M5:53afe12d1371f250a3d1de655345d374 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270333v1 LN:2699 M5:57baf650c47bba9b3a8b7c6d0fb55ad6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270335v1 LN:1048 M5:eb27188639503b524d2659a23b8262ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270338v1 LN:1428 M5:301ef75a6b2996d745eb3464bd352b57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270340v1 LN:1428 M5:56b462bac20d385cdfcde0155fe4c3a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270336v1 LN:1026 M5:69ad2d85d870c8b0269434581e86e30e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270337v1 LN:1121 M5:16fc8d71a2662a6cfec7bdeec3d810c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270363v1 LN:1803 M5:6edd17a912f391022edbc192d49f2489 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270364v1 LN:2855 M5:6ff66a8e589ca27d93b5bac0e5b13a87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270362v1 LN:3530 M5:bc82401ffd9a5ae711fa0ea34da8d2f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270366v1 LN:8320 M5:44a0b65b7ba6bcff37eca202e7d966ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270378v1 LN:1048 M5:fc13bda7dbd914c92fb7e49489d1350f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270379v1 LN:1045 M5:3218bef25946cd95de585dfc7750f63b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270389v1 LN:1298 M5:2c9b08c57c27e714d4d5259fd91b6983 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270390v1 LN:2387 M5:7a64d89ea14990c16d20f4d6e7283e10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270387v1 LN:1537 M5:22a12462264340c25e912b8485cdfa91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270395v1 LN:1143 M5:7c03ca4756c1620f318fb189214388d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270396v1 LN:1880 M5:9069bed3c2efe7cc87227d619ad5816f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270388v1 LN:1216 M5:76f9f3315fa4b831e93c36cd88196480 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270394v1 LN:970 M5:d5171e863a3d8f832f0559235987b1e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270386v1 LN:1788 M5:b9b1baaa7abf206f6b70cf31654172db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270391v1 LN:1484 M5:1fa5cf03b3eac0f1b4a64948fd09de53 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270383v1 LN:1750 M5:694d75683e4a9554bcc1291edbcaee43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270393v1 LN:1308 M5:3724e1d70677d6b5c4bcf17fd40da111 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270384v1 LN:1658 M5:b06e44ea15d0a57618d6ca7d2e6ac5d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270392v1 LN:971 M5:59b3ca8de65fb171683f8a06d3b4bf0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270381v1 LN:1930 M5:2a9297cfd3b3807195ab9ad07e775d99 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270385v1 LN:990 M5:112a8b1df94ef0498a0bfe2d2ea5cc23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270382v1 LN:4215 M5:e7085cdcee6ad62f359744e13d3209fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270376v1 LN:1136 M5:59e8fc80b78d62325082334b43dffdba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270374v1 LN:2656 M5:dbc92c9a92e558946e58b4909ec95dd5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270372v1 LN:1650 M5:53a9d5e8fd28bce5da5efcfd9114dbf2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270373v1 LN:1451 M5:b174fe53be245a840cd6324e39b88ced AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270375v1 LN:2378 M5:d678250c97e9b94aa390fa46e70a6d83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270371v1 LN:2805 M5:a0af3d778dfeb7963e8e6d84c0c54fba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270448v1 LN:7992 M5:0f40827c265cb813b6e723da6c9b926b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270521v1 LN:7642 M5:af5bef7cefec7bd7efa729ac6c5be088 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000195v1 LN:182896 M5:5d9ec007868d517e73543b005ba48535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000219v1 LN:179198 M5:f977edd13bac459cb2ed4a5457dba1b3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000220v1 LN:161802 M5:fc35de963c57bf7648429e6454f1c9db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000224v1 LN:179693 M5:d5b2fc04f6b41b212a4198a07f450e20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270741v1 LN:157432 M5:86eaea8a15a3950e37442eaaa5c9dc92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000226v1 LN:15008 M5:1c1b2cd1fccbc0a99b6a447fa24d1504 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000213v1 LN:164239 M5:9d424fdcc98866650b58f004080a992a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270743v1 LN:210658 M5:3b62d9d3100f530d509e4efebd98502c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270744v1 LN:168472 M5:e90aee46b947ff8c32291a6843fde3f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270745v1 LN:41891 M5:1386fe3de6f82956f2124e19353ff9c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270746v1 LN:66486 M5:c470486a0a858e14aa21d7866f83cc17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270747v1 LN:198735 M5:62375d812ece679c9fd2f3d08d4e22a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270748v1 LN:93321 M5:4f6c6ab005c852a4352aa33e7cc88ded AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270749v1 LN:158759 M5:c899a7b4e911d371283f3f4058ca08b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270750v1 LN:148850 M5:c022ba92f244b7dc54ea90c4eef4d554 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270751v1 LN:150742 M5:1b758bbdee0e9ca882058d916cba9d29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270752v1 LN:27745 M5:e0880631848337bd58559d9b1519da63 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270753v1 LN:62944 M5:25075fb2a1ecada67c0eb2f1fe0c7ec9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270754v1 LN:40191 M5:fe9e16233cecbc244f06f3acff3d03b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270755v1 LN:36723 M5:4a7da6a658955bd787af8add3ccb5751 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270756v1 LN:79590 M5:2996b120a5a5e15dab6555f0bf92e374 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270757v1 LN:71251 M5:174c73b60b41d8a1ef0fbaa4b3bdf0d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000214v1 LN:137718 M5:46c2032c37f2ed899eb41c0473319a69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270742v1 LN:186739 M5:2f31c013a4a8301deb8ab7ed1ca1cd99 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000216v2 LN:176608 M5:725009a7e3f5b78752b68afa922c090c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000218v1 LN:161147 M5:1d708b54644c26c7e01c2dad5426d38c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270762v1_alt LN:354444 M5:b0397179e5a92bb7a3300b68e45a9f72 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270766v1_alt LN:256271 M5:e3f36479d0e07abbd0d47babdc76e19d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270760v1_alt LN:109528 M5:f2ea4b127c54df13f53a2b2b5a358087 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270765v1_alt LN:185285 M5:628b663499df4f5de7dbdd56943bdb6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_GL383518v1_alt LN:182439 M5:978987018f1a910273ebcc387e038de8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_GL383519v1_alt LN:110268 M5:349e96f115f829409bd1087b5fb684ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_GL383520v2_alt LN:366580 M5:52e97087cc76c9fd73d4815c1e379ee0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270764v1_alt LN:50258 M5:36d9e8a04906213f8c1d4cf81fc4f83f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270763v1_alt LN:911658 M5:2f651e42b9fd434c2310be375fe8645e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270759v1_alt LN:425601 M5:8477794d60329af9bd00cd9277981a59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270761v1_alt LN:165834 M5:3909a76846aa6ed534ba6be66a60cc81 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270770v1_alt LN:136240 M5:38181b04426519779c84cf9a8927cf00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270773v1_alt LN:70887 M5:aa8b8ec2dd7776e643699db29ac85d74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270774v1_alt LN:223625 M5:a6d8be44258a4b8e3b55ffaccbd3b444 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270769v1_alt LN:120616 M5:537f266cfc0ba05dfb532658fb592eb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_GL383521v1_alt LN:143390 M5:8c6f0a214ddbfbd52be574a566e4b21a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270772v1_alt LN:133041 M5:7cc5209d7e796e90bd024204c04a9b7f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270775v1_alt LN:138019 M5:79c3c0ad56276d3eff8cb747b57973a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270771v1_alt LN:110395 M5:3739c7d552cfc62c495704f4f2d61330 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270768v1_alt LN:110099 M5:5f6d54708a2fd0e4592319c2c91850a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_GL582966v2_alt LN:96131 M5:485c442c93fe19514153702f0c84d952 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_GL383522v1_alt LN:123821 M5:df3e809f9a87f792218db18db51f6ad4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270776v1_alt LN:174166 M5:87fe3336a33a4aa9c04ff7991aa78a11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270767v1_alt LN:161578 M5:160c7bb94aa35c1d61c27aadf1727862 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_JH636055v2_alt LN:173151 M5:42f48ed9d46aded55795ef64e4713d55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270783v1_alt LN:109187 M5:3a60aafd707904d4da9c1c090a7cf0ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270780v1_alt LN:224108 M5:2c050e6aeecf29b54469dea8c5631057 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_GL383526v1_alt LN:180671 M5:620913159e2fbd4e931ac120e3c584c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270777v1_alt LN:173649 M5:9673b29322cf16da2d295778229c1772 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270778v1_alt LN:248252 M5:f0053d7b401730af8c34cd7d20dd0a91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270781v1_alt LN:113034 M5:c94ff451868540e0399bf62acb24e1dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270779v1_alt LN:205312 M5:3eec883e9656d4c4d96ea1e6d3c118ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270782v1_alt LN:162429 M5:ceaa7d4ca7d4b80ba9a8d9e48223de2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270784v1_alt LN:184404 M5:35980922a4773cefc710c08134d16772 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270790v1_alt LN:220246 M5:07cf7caef89c4677af575c370a1ebbb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL383528v1_alt LN:376187 M5:2948653361f974fbed3e26a4dfbf332c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270787v1_alt LN:111943 M5:e315d4f96ad548f1af1935d97f2af9df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL000257v2_alt LN:586476 M5:03c6c36060cd6c9f9b4fd0b096ff40e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270788v1_alt LN:158965 M5:463baeb6369579e0d387371989492dc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL383527v1_alt LN:164536 M5:6d728406957c5c7fb158dbdb7efef2b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270785v1_alt LN:119912 M5:4932c3e044a1e3731cd4de290f6492b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270789v1_alt LN:205944 M5:3c9ef00afbe249de4934eeac37d64233 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270786v1_alt LN:244096 M5:107c6b17f17b5d24936663fe8e70cd2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270793v1_alt LN:126136 M5:0c6c632ce75031c86e3054c34d3b9b49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270792v1_alt LN:179043 M5:3677eaca510b7e7c5f30ec8382a09d24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270791v1_alt LN:195710 M5:3a62433e49995583fc44e640241a60bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL383532v1_alt LN:82728 M5:eb61b6b3f9374b05ce68ae4a393cf5ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL949742v1_alt LN:226852 M5:20d5046bbd2a21729fdd64fa94bdd5a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270794v1_alt LN:164558 M5:9808234a2843375d92d4c34e262373b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL339449v2_alt LN:1612928 M5:1b6fa375fdf382778e6645d822d12254 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL383530v1_alt LN:101241 M5:adcb4048e465b6b949990853e436a136 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270796v1_alt LN:172708 M5:6b125232b8842fafd4179203620fa2be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL383531v1_alt LN:173459 M5:9161d10779b02fa44b841136ef9e499c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270795v1_alt LN:131892 M5:6670fafb8f6ceb4f46392f3178f29666 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000250v2_alt LN:4672374 M5:740358c10fbb870c86a7e44226bbdb3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270800v1_alt LN:175808 M5:3ed7e87ce250a8466359176e96d6a6a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270799v1_alt LN:152148 M5:80fd907ae0e4d20ad13960cb92ab6d45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL383533v1_alt LN:124736 M5:7d1a65603558094937299ff10e8714af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270801v1_alt LN:870480 M5:bd0c66e2085cf16906ebc6b130862bd6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270802v1_alt LN:75005 M5:c66357c9b0909ee32c75286796602ce3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KB021644v2_alt LN:185823 M5:332d693d4f2026747d670e52836694ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270797v1_alt LN:197536 M5:2b76b3d07dc4cb2992e7125c19e32594 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270798v1_alt LN:271782 M5:7f074e537d58c543d116ce2c45bb0966 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270804v1_alt LN:157952 M5:9babd3431c32811769c782703f7b8c3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270809v1_alt LN:209586 M5:26d14130d09dc093446dd31e8f0be76c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270806v1_alt LN:158166 M5:b55d6ad642408486735aede89d70c0c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_GL383534v2_alt LN:119183 M5:c6ff49147dedce02366d6ade10580611 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270803v1_alt LN:1111570 M5:986e63220694b8c91bad1d6d990f6c83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270808v1_alt LN:271455 M5:52ce11809c32fe22003c5039e407d3e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270807v1_alt LN:126434 M5:4da184771ac6a8644e6df506bbd8a35e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270805v1_alt LN:209988 M5:d3a95141230a470a930f685fbce90a04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270818v1_alt LN:145606 M5:5f8af0060f092d941cbe9d873ccc1d41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270812v1_alt LN:282736 M5:93b572cdabe748641570fa2ed3391222 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270811v1_alt LN:292436 M5:dacc0b0ef9fae890a1741dca03ba7d5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270821v1_alt LN:985506 M5:bbdee492e8852d313be96b6340fbfb1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270813v1_alt LN:300230 M5:c91599edb1c553cf527c7f3ba754bb20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270822v1_alt LN:624492 M5:2cd6749ad4385747595c0b41440cb41d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270814v1_alt LN:141812 M5:84d9d4bbbac92a40b13809e501ff92fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270810v1_alt LN:374415 M5:369545bbf4f206fd1175a84da12b38fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270819v1_alt LN:133535 M5:29d6d49a19ae259feb012f492ab83ce0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270820v1_alt LN:36640 M5:d3b4609d5f29708fc33023259e4b775a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270817v1_alt LN:158983 M5:d6e6a3ac3c2f5afe16c2cfb2e813b30c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270816v1_alt LN:305841 M5:60bb5379ab4d817058300ef606b9fee6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270815v1_alt LN:132244 M5:8be72bf872ff1edfc3f43cd9b7d0b9b3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383539v1_alt LN:162988 M5:12406aad3f3da31bda9c21a1aa0e16b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383540v1_alt LN:71551 M5:23aea04f46682e2a2be1a5ff3934a9fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383541v1_alt LN:171286 M5:0c787911df2449cbba8609bebf897ecb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383542v1_alt LN:60032 M5:12a3180640a49f33c960eb12ca61a6c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270823v1_alt LN:439082 M5:ad4baa1567e313eda0aad427008e10cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_GL383545v1_alt LN:179254 M5:c27dc6fea378fecf178a44682257c25e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_KI270824v1_alt LN:181496 M5:af40e32c32de290cfe497a110ff3bdfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_GL383546v1_alt LN:309802 M5:ed6fb45e0a25c31903cbb0f78d9d487e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_KI270825v1_alt LN:188315 M5:3119d196965ee9cae7aeda77131076f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270832v1_alt LN:210133 M5:2b63a3f97e490e807587639807d26293 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270830v1_alt LN:177092 M5:dbe0c94a39d4a91469ffa6e509b3f191 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270831v1_alt LN:296895 M5:b0f755388212c03651b6fdc7531c3fd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270829v1_alt LN:204059 M5:6bc1308e442a1662ae27952f126b7c01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_GL383547v1_alt LN:154407 M5:7b556f03729e304a286c8d7ef0f0c10e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_JH159136v1_alt LN:200998 M5:8ac9fb9d942dba38bfd30f8d767f4bba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_JH159137v1_alt LN:191409 M5:b293c854ddcbc316cb1d449bca46fbb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270827v1_alt LN:67707 M5:86017dee76a03e3dc3c8833018101fae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270826v1_alt LN:186169 M5:a903d85efe5aa37dac36160bddeeac87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL877875v1_alt LN:167313 M5:3dd30a7638c3a3c518fc15571546b1be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL877876v1_alt LN:408271 M5:5c3a364520bf7ed46894abdce8f6e032 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270837v1_alt LN:40090 M5:e749a70a94624f09e134600d122c130d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383549v1_alt LN:120804 M5:60a7c1711d7f23fd7311a7e4f96896f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270835v1_alt LN:238139 M5:b163c6fa013f6cb75b01088689f1a67f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383550v2_alt LN:169178 M5:d61d9a153c3fd556b48e1c511a6145e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383552v1_alt LN:138655 M5:c28f12c6ee0dec4cc6995766a710960c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383553v2_alt LN:152874 M5:89b111e38005345de92036b249ab6080 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270834v1_alt LN:119498 M5:3ad1c94c00299533f6acd33ea2f04df1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383551v1_alt LN:184319 M5:d96719c32333013a51c4d6d3261f984f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270833v1_alt LN:76061 M5:8c9988aa66d02708e3e57663902fc664 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270836v1_alt LN:56134 M5:28a69648439a2c02d46750eee929b20d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270840v1_alt LN:191684 M5:d90a653d7ac3171c8fb762d0012249f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270839v1_alt LN:180306 M5:b97ea581776626ac41b69f851a85a456 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270843v1_alt LN:103832 M5:563c8412eb284fc5321af590a4c9ab9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270841v1_alt LN:169134 M5:6ac8a99077817e6bc9be36327b8aa18e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270838v1_alt LN:306913 M5:baf90eafb4ed6330cb151c1d5538f721 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270842v1_alt LN:37287 M5:231dd4484df464129d3120986fe2af73 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270844v1_alt LN:322166 M5:b64acbff6218bd210676141e4e678a82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270847v1_alt LN:1511111 M5:9d380ae26e2edb178ef0121021f7a7ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270845v1_alt LN:180703 M5:51b3fa9f43d11aeb91b3debb33496d22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270846v1_alt LN:1351393 M5:1ee28b84d30d13e03341b382995b05bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270852v1_alt LN:478999 M5:5104fe22193b4bd04166ecb401beb06a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270851v1_alt LN:263054 M5:64217994ed61c2feb5412ecc5a7a37b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270848v1_alt LN:327382 M5:d61e4262335c4884ad97dc5d73782870 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_GL383554v1_alt LN:296527 M5:4a3d54bda53308ca941d6d0e794b05cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270849v1_alt LN:244917 M5:7966604eef1b897ee97e8dce9e79b18e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_GL383555v2_alt LN:388773 M5:c904b1792869ae0565acbbdc19b9522f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270850v1_alt LN:430880 M5:5371d98deea30e91051e3efd20016b76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270854v1_alt LN:134193 M5:0e126949f4b012d27f55aed5f1c4ca84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270856v1_alt LN:63982 M5:515d2b9de600d584473c20bea079f34c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270855v1_alt LN:232857 M5:436afa974458133c013b037d4a2dc1c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270853v1_alt LN:2659700 M5:5e28daf08ffeafb037b6e97ba3c959e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_GL383556v1_alt LN:192462 M5:bed6a2667e8452a176e93e921e0c21f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_GL383557v1_alt LN:89672 M5:0989118882ce9c38635e2809e5bf71c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383563v3_alt LN:375691 M5:fcd64ac83b2ebb57f50931c9d6fc0a31 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270862v1_alt LN:391357 M5:f2efc8dc887a8c0101053fa14491e07f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270861v1_alt LN:196688 M5:808750bf9b346e0a731a1bffac75a01e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270857v1_alt LN:2877074 M5:f5ca1bb91881efefa473c983f9519561 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_JH159146v1_alt LN:278131 M5:384b5b32f0ea2cfd15ac268a2ce07909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_JH159147v1_alt LN:70345 M5:4bf63957bfa1ecdbbab483d4c0ce6682 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383564v2_alt LN:133151 M5:fc2eb07543a6ecb0a27d9fa12cd91cfc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL000258v2_alt LN:1821992 M5:8bd6071029f2dbc5ab9d2d912bf5c953 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383565v1_alt LN:223995 M5:063358c8e7f81361b959efab7b3f15cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270858v1_alt LN:235827 M5:69fbdc82c5ef837f574d0b3c8b9c647f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270859v1_alt LN:108763 M5:8d28bd3b1a63fa9a945051f28e087668 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383566v1_alt LN:90219 M5:a0f25165c6537c9861cc1231f710e99f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270860v1_alt LN:178921 M5:91e560df1ad6c58e7e1739178b8c7209 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270864v1_alt LN:111737 M5:04e6ca7eabe96be35a18eb4c0675071d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383567v1_alt LN:289831 M5:d9015dd9a0916a98ed8ab99fd3cdd012 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383570v1_alt LN:164789 M5:08366c03855961f13b1d5e65920ccf74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383571v1_alt LN:198278 M5:40015159c7da8f06875bb558587e3f07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383568v1_alt LN:104552 M5:e9aba11d18125a2bce2b1e5915e9a904 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383569v1_alt LN:167950 M5:8d13c3e7cbb2b7e1a3225c5a54fe8f44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383572v1_alt LN:159547 M5:8fc7aaa775b43df3d77c9782a140a981 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270863v1_alt LN:167999 M5:2e691a3fc5108cc7decde377ef398fde AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270868v1_alt LN:61734 M5:2dfd26bf8f217b858edc062be1846db5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270865v1_alt LN:52969 M5:b95ce15823c60ab83ec7a984f3dc9ebc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383573v1_alt LN:385657 M5:5404455aab275489bc8e6c9fb3ead5cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383575v2_alt LN:170222 M5:dd8730d9d33765ff135fcfadb8810280 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383576v1_alt LN:188024 M5:8d4496a682182f8273a2fad665fcf4a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383574v1_alt LN:155864 M5:0386df1d3476e6649f919195cc072fc7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270866v1_alt LN:43156 M5:d205b57d55e89546400e0f1e230a8a53 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270867v1_alt LN:233762 M5:3d8464a9e183031ea70e0e12fa231163 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949746v1_alt LN:987716 M5:d76e635e75bc038782fb3d0c195d33fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_GL383577v2_alt LN:128386 M5:f00c218d09df83c8b515a6b5591fe30c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_KI270869v1_alt LN:118774 M5:2b8065d3bdbac6664d7f35c25d049113 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_KI270871v1_alt LN:58661 M5:29e7c064fe54ab6b7fd8accb0363821b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_KI270870v1_alt LN:183433 M5:779f6fd5220eddc54631e80b94bb905a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383578v2_alt LN:63917 M5:d512f47a48fc477e7232d3b46f2bda86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_KI270874v1_alt LN:166743 M5:45c435343bfd1d94c4ff17689faf507d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_KI270873v1_alt LN:143900 M5:22bc49cad0dda4ec9d79ffd619be94d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383579v2_alt LN:201197 M5:631f76952802048256225746f1a14a89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383580v2_alt LN:74653 M5:b0cfe93a0987bda7488445b3c37b2516 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383581v2_alt LN:116689 M5:1c9b893acb0fb6a6d9ff1915ce9004ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_KI270872v1_alt LN:82692 M5:e8daa648582ccb498c469d4f6dcf4140 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270875v1_alt LN:259914 M5:8a27dfcd4c4ae0239e3207b9994d8331 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270878v1_alt LN:186262 M5:07e6bd13f82b45996b0165c0a2c0ebb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270879v1_alt LN:304135 M5:9fb8076a6ca93af66b2878d5cf07ebb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270876v1_alt LN:263666 M5:507bafbc0e637e7e5854acab4d2b7de7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270877v1_alt LN:101331 M5:b6724c024308122f0d19c875771d571e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_GL383583v2_alt LN:96924 M5:03ed78804fcfe33fb202c22d20e1ed05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_GL383582v2_alt LN:162811 M5:1919a95f3ea48fde56ba925295086028 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX_KI270880v1_alt LN:284869 M5:e4ed2d1ef2ee71f00075ed9537aab284 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX_KI270881v1_alt LN:144206 M5:6370851c900248567c9bc5bee75089ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270882v1_alt LN:248807 M5:9a4ca55b5d44458dc5a1682ac6483738 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270883v1_alt LN:170399 M5:79916aa2c6a7669500b59ddd7b4eccec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270884v1_alt LN:157053 M5:28517f9e5682de5e74b42ba7c84a9d41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270885v1_alt LN:171027 M5:b5fc4688af8411394923dbcf6a85b85d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270886v1_alt LN:204239 M5:fae7fb0677c513b24e8027969233140f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270887v1_alt LN:209512 M5:3c672b8b13188d46ed1ea6806fdc9662 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270888v1_alt LN:155532 M5:325a22a47ae227dda0c8704cf4725601 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270889v1_alt LN:170698 M5:680f4977d9743df71085eacbff34769b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270890v1_alt LN:184499 M5:8862bbaae8fc895769859a6e89d19601 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270891v1_alt LN:170680 M5:0b1dd9ea37a3772563fb7298ad1f3857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270892v1_alt LN:162212 M5:24ba517f0feae1b6a95e1c65c21282be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270894v1_alt LN:214158 M5:0bfafe4b4a536ed3e5b77a89408d7534 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270893v1_alt LN:161218 M5:d701ebc3d24a0056dc6b9418ba4e15c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270895v1_alt LN:162896 M5:4d08672ade726bd914e62a36d734da0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270896v1_alt LN:378547 M5:751a447059436d9d5987f8417b2e2bd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270897v1_alt LN:1144418 M5:5a8582c4943187c1a842801cf17d3706 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270898v1_alt LN:130957 M5:9919f71320ac92b1abb42e2aedea84ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000251v2_alt LN:4795265 M5:e51d466e4a702acf3c9c5ffdc1ee0c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270899v1_alt LN:190869 M5:b42d6c28bfd9049414fb9d2617528db4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270901v1_alt LN:136959 M5:3d60ee1215e273e0c0267ad063614015 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270900v1_alt LN:318687 M5:80404f3147bd316898e6b5281f32c073 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270902v1_alt LN:106711 M5:f100803823a7cde3694698028e4c515c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270903v1_alt LN:214625 M5:5ce11ce469afc974c3024b30033dc5d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270904v1_alt LN:572349 M5:6d8ebe7fb3dd3be62e34a1d2982e6f46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270906v1_alt LN:196384 M5:eb8157203f051ef7cfcab1f4647f22c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270905v1_alt LN:5161414 M5:31c97360f2a53ab92bd8d6db1b1a410d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270907v1_alt LN:137721 M5:f5a65eb09de3017536d1b7c0b2237fbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270910v1_alt LN:157099 M5:4eef5dbfe56e13c810780221b0f6426d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270909v1_alt LN:325800 M5:6a46afe4c5e257b556f25c37a09fc024 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_JH159148v1_alt LN:88070 M5:bd147af8e713f365ff05352eb8a4508f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270908v1_alt LN:1423190 M5:ef3f9ebebe7ad9f9690daedeae8a74f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270912v1_alt LN:174061 M5:3a8acbc0c5c751ccad11263a608715fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270911v1_alt LN:157710 M5:930ee72eaddcaf1355220cd39539c326 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949747v2_alt LN:729520 M5:10169e6e86933b2bf74797be020fc857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KB663609v1_alt LN:74013 M5:54abe159678a84e88ceb2d5271027628 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX_KI270913v1_alt LN:274009 M5:a4d4a5e5b5da1e65f007116b2797a4f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270914v1_alt LN:205194 M5:086e17b28e2ac14e602c5dae2c358364 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270915v1_alt LN:170665 M5:a5c43ab0e4289f3951e65fd57419782a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270916v1_alt LN:184516 M5:45199873c7617fab0ba00e85a43ddbeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270917v1_alt LN:190932 M5:1595cb5d2e776d8a505a06db45ea2c04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270918v1_alt LN:123111 M5:e79cb3af945f28de17d744bf24cde080 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270919v1_alt LN:170701 M5:a25ce4a282c7ead76bb2468a9a56d082 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270920v1_alt LN:198005 M5:009fb96b4ee6d64732dac95a1f380f41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270921v1_alt LN:282224 M5:4e9f360581e618964d379d67e3b51f90 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270922v1_alt LN:187935 M5:7b6dc564b92bed8df5de2c1fa8de0986 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270923v1_alt LN:189352 M5:5b0339dbf41b0301512639781d44d546 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270924v1_alt LN:166540 M5:944759f109cad94523d1f3918ac0b382 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270925v1_alt LN:555799 M5:08b3f5ff9beac37e3bbc50767cf3b43b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000252v2_alt LN:4604811 M5:0c2ee784f397289b1713ad133fd93d39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270926v1_alt LN:229282 M5:58a00f9d6216734f0bf36a0f2294c246 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270927v1_alt LN:218612 M5:159fb3a622d456897c41d93f4627d169 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949748v2_alt LN:1064304 M5:21fd288470eea03e7424729134f472f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270928v1_alt LN:176103 M5:efcf7ce77388977478ffe2757b8f8430 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270929v1_alt LN:186203 M5:9f8d51d9c1ec4887cd55a1d0d8e61469 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270930v1_alt LN:200773 M5:2c5abf84ad91658f7262dff7ade3e7b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270931v1_alt LN:170148 M5:36b9336df72c820b6efa95567a5aaf28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270932v1_alt LN:215732 M5:4a92a470a7851edf0c238a74814dece5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270933v1_alt LN:170537 M5:413442cc380f0bb8f15b33bc25149af1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL000209v2_alt LN:177381 M5:0e7a0f548f1f770b4272be1bd8b018fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270934v1_alt LN:163458 M5:43c32fd3aae0eee20305d3d735e7bbb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000253v2_alt LN:4677643 M5:a5cdd062ee0d61ea6b3c5166e79b472e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949749v2_alt LN:1091841 M5:cf8641cadcdb22174c55a5d9d5c46036 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270935v1_alt LN:197351 M5:8175b26fd25c1671efd5af96e8b44835 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000254v2_alt LN:4827813 M5:ad357767de6beef959952d39200522ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949750v2_alt LN:1066390 M5:c48b453696107dc7105bce3857e1cbc6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270936v1_alt LN:164170 M5:64f7f27938eb4c80140f34e3d2aed483 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000255v2_alt LN:4606388 M5:bceeb4190283066a6d0891562b41d164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949751v2_alt LN:1002683 M5:1615d0a6f8a5ff11274ba2e00b9487a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270937v1_alt LN:165607 M5:39b5207a79f67fb863be3b2a5bed0963 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000256v2_alt LN:4929269 M5:a80b1b3c21ac7e7b7acf75178ae3d83c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949752v1_alt LN:987100 M5:7d007a35ff02e56325881c68bb17b565 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270758v1_alt LN:76752 M5:9d0d4a56d72f18d39c7a1094deb177a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949753v2_alt LN:796479 M5:19162055ca3e800f14797b6cd37c1d4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270938v1_alt LN:1066800 M5:9363b56f7b34fb35ab3400b1093f431a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrEBV LN:171823 M5:6743bd63b3ff2b5b8985d8933c53290a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707606v1_decoy LN:2200 M5:20c768ac79ca38077e5012ee0e5f8333 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707607v1_decoy LN:3033 M5:444cb839a910d9af9b5c5f013cb31063 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707608v1_decoy LN:3112 M5:bc263c9aacc51dabcb0ac4987c416a0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707609v1_decoy LN:1642 M5:ec7a95a8f6e3d63152c0b1f46601e2ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707610v1_decoy LN:1393 M5:441a56ef62eccbc2ec6d0384fe40367e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707611v1_decoy LN:1103 M5:a5378db83cbffb5f31da4a549152cf80 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707612v1_decoy LN:1039 M5:4ac166fdb188d87a64b59e346fc040cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707613v1_decoy LN:1619 M5:af5b7705364129a1fdf718e223e8dfb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707614v1_decoy LN:3122 M5:67860fb1c59453dbaf2bc21834f76ff1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707615v1_decoy LN:1934 M5:e8773170190290d21bf5c7bac36c73ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707616v1_decoy LN:3111 M5:9792c2376ee383fa1d0763ff6b391fd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707617v1_decoy LN:2545 M5:7d9f68ca65f2e9029ef8c2d352b6068d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707618v1_decoy LN:2295 M5:dfec4823eafc51fe89a1c8a61a7861a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707619v1_decoy LN:1551 M5:f0f821c64e2f1339f4452cfabcd1a247 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707620v1_decoy LN:2046 M5:9e54f11658064725f046e3ffc7f5166e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707621v1_decoy LN:1222 M5:4053fd7005d4e430ff32b9b0c9dda52d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707622v1_decoy LN:1535 M5:393bc14f66f0af8c20fdd93b1a3dc78c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707623v1_decoy LN:3784 M5:5da25a3d7060acf52ce5d2084d8922cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707624v1_decoy LN:1329 M5:18daae4566bfb62823b548ab88fa894a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707625v1_decoy LN:1238 M5:8a05b8842f52e87406e28162b8fa7249 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707626v1_decoy LN:5623 M5:e6705349b3e2839fcd382596f831045d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707627v1_decoy LN:5821 M5:cafc12fed95e40d4c1b441ad93f0493a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707628v1_decoy LN:2960 M5:1e0a770fe11a74301ab4535bd9be16c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707629v1_decoy LN:1848 M5:5288216fe388c6966e89e6f8a3a5118e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707630v1_decoy LN:2315 M5:1cab33f8538d939c751e2b2d9b01957a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707631v1_decoy LN:1945 M5:099f236a02fe8e80d7f135727589bce1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707632v1_decoy LN:1424 M5:a2e305f020577c5f7806c411f995402c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707633v1_decoy LN:1274 M5:967deda0c966a0bcd27c6e047e18e7f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707634v1_decoy LN:1007 M5:093928d5a51ad63c286ec229982828ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707635v1_decoy LN:1414 M5:270f3e796a1b7c345e83762fa735bfe1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707636v1_decoy LN:1725 M5:f00ca03da369b2dcf101bda70773022b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707637v1_decoy LN:5354 M5:ecf9ac0af0f7009b8b4e5fa639e7fc97 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707638v1_decoy LN:2189 M5:5a928a8e7ad5ec7808ae7dbcc7ba72d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707639v1_decoy LN:1294 M5:692623b127f6621794d92bfc65f198f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707640v1_decoy LN:1831 M5:23d5c8473f768ca2c6a3eed843fc2cf2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707641v1_decoy LN:1647 M5:09778e8253cf377911db86530bec54a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707642v1_decoy LN:2943 M5:6759f7bb4098b6eb0ec14f5c63369661 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707643v1_decoy LN:2857 M5:a6d7044f6c244253ec1e142bbb35d859 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707644v1_decoy LN:1030 M5:e3e8c02e17ebf79c0e90ce41a16ccedb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707645v1_decoy LN:1070 M5:26882fb498a5b281266a48f82726a7c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707646v1_decoy LN:1735 M5:b120aeee1c12ed6986a9743badfcc505 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707647v1_decoy LN:1982 M5:d1d012b49d3cb20db627f6dd65326217 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707648v1_decoy LN:1564 M5:a4fae6ab9f74c3f1b2c0f8352e9a3519 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707649v1_decoy LN:1775 M5:4bcea8af13f18547fe066845bdc1c120 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707650v1_decoy LN:1540 M5:b4256e83f91ba0174562138c3b466a45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707651v1_decoy LN:2013 M5:f7d9c80ab1716aee1a2237dce70b768a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707652v1_decoy LN:1176 M5:4af9bb8c4125407fb9f03e5fc7798528 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707653v1_decoy LN:1890 M5:854efc081d295baa5a1efa0fe1f9bb3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707654v1_decoy LN:3644 M5:5c90649c1bc38e0b333381ac593252bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707655v1_decoy LN:2785 M5:407de1fa7cb87b88317888d98ea56599 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707656v1_decoy LN:1017 M5:f521affa49ef813fea48a8f5b1fa8e13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707657v1_decoy LN:1068 M5:478f244a134bc02c1c51f63009626864 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707658v1_decoy LN:1007 M5:f4ce5e4a861ab83037e05e271e74497b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707659v1_decoy LN:2605 M5:5c8b18731c2eeda273e0caaf2e878654 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707660v1_decoy LN:8410 M5:b581d341cdf7f17875e60e3da33c398b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707661v1_decoy LN:5534 M5:fd57c53936fe1011e42fc08ef3ff65c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707662v1_decoy LN:2173 M5:5ca2d18676a26044b213465e1e6ac206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707663v1_decoy LN:1065 M5:07cb60b1a2ff813eed23c7cc4128baa7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707664v1_decoy LN:8683 M5:ac12df9c6d81003f812323327f937147 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707665v1_decoy LN:2670 M5:366d796fda2fe9f8baadd88deddf9dca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707666v1_decoy LN:2420 M5:b5c696c469b2e831e8a5e8e87c6813e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707667v1_decoy LN:2189 M5:1f055f8a1a1f8c356b45cfcbd6db6713 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707668v1_decoy LN:2093 M5:839cff5bd33068228bd1031bf8be9a64 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707669v1_decoy LN:1184 M5:ad69f6deb582834c638527c565c4de2e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707670v1_decoy LN:1205 M5:aa9070a191ece87a421285b5be2e8b68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707671v1_decoy LN:2786 M5:28c96decb9c1d76b9a76b1ee75e2421d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707672v1_decoy LN:2794 M5:4d547ee98d0678f832df5c46f91604aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707673v1_decoy LN:19544 M5:2d2080522d0d729d94c7d73eda00c62a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707674v1_decoy LN:2848 M5:9182728e5875ee5cfba2c524c997fcbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707675v1_decoy LN:10556 M5:021a0164c68fd77f51bead9e2c4e9cea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707676v1_decoy LN:9066 M5:c8c71f6c1f2612fed812e69c737ca6ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707677v1_decoy LN:7267 M5:0e929202e653306730239e7dbea8a861 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707678v1_decoy LN:2462 M5:21e3c2e28a7980351470a14a0d48160c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707679v1_decoy LN:1774 M5:9f0f7ecdb5b097f83aab97fff76127d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707680v1_decoy LN:1297 M5:3eab486a1f41712d26b8c251ad9dbff1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707681v1_decoy LN:4379 M5:04aec18ad103fe46337c6643d0eaca0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707682v1_decoy LN:4208 M5:b413a0a980c7752db350c74c5f97937b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707683v1_decoy LN:4068 M5:80a8f28af2c872b62345c85f6217dea7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707684v1_decoy LN:2940 M5:774582f989e0cda16927addcf0ece955 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707685v1_decoy LN:3938 M5:cd0020e224ec3edc01ecdfd648f4099d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707686v1_decoy LN:2072 M5:879ef8f0e126b3f557a0170b71459c6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707687v1_decoy LN:1136 M5:69aff37696b0d4542e56fcf9ad9af43c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707688v1_decoy LN:4248 M5:d301756f721c9141f1216e52fa4003da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707689v1_decoy LN:5823 M5:f29516cc0ba82ac48516c65b100b2255 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707690v1_decoy LN:3715 M5:a154584ab9547c044251e469591cfd94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707691v1_decoy LN:4885 M5:ab7f60b71af56c68e4a0f56174c90e4e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707692v1_decoy LN:4813 M5:e8f5365670fcf6e3612d2e77ba943aaf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707693v1_decoy LN:2899 M5:3cf4cd0669a4fc846ef0aa0aac7cb739 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707694v1_decoy LN:1228 M5:38a9e18c0e3208c8b593dc4fdf118a9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707695v1_decoy LN:3119 M5:ba7aa2faa9f2fad7ad94f0acd152e6f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707696v1_decoy LN:3828 M5:4b39179f8d3eefee8f4865bf6d11dd9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707697v1_decoy LN:1186 M5:0b3eecab59c656d96325f01e70a906c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707698v1_decoy LN:1908 M5:708018246fdce7d4b8f47502bfdbc3a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707699v1_decoy LN:2795 M5:001979586db1b719cca6d3dc0e50e71c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707700v1_decoy LN:3703 M5:5c692cc6be5262461fdbba8574e6ff40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707701v1_decoy LN:6722 M5:378424a19c93bf19eb0f565cba923eb1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707702v1_decoy LN:6466 M5:1b5a6efaa31d7974dffe73fc4bb88349 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707703v1_decoy LN:2235 M5:c045d23c4c9497849b45c45423f705ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707704v1_decoy LN:2871 M5:b44844f0650f1953d042b7b0c9740cb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707705v1_decoy LN:4632 M5:6c1d769d4a84500b2eefafe1cf460164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707706v1_decoy LN:4225 M5:d37d4a4d41be60f45aa967ecac1a0c5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707707v1_decoy LN:4339 M5:ffcd631ed0bf56e54cd72ed51c70fa3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707708v1_decoy LN:2305 M5:6ebdd668b564460303637164213d0dff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707709v1_decoy LN:3273 M5:3531b30c5833b2f37585aeabefeafe36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707710v1_decoy LN:5701 M5:943eba7b0fd71418d0ef4ab2bdcc3f14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707711v1_decoy LN:4154 M5:8e6daf77c80fc9e8710c6732e9d72918 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707712v1_decoy LN:1243 M5:65e4a30840d6420ebc8b7681d38ae431 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707713v1_decoy LN:1308 M5:d9aafcd2c4b12f82a113eb5418d120ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707714v1_decoy LN:2922 M5:4904d632dac614c608b8b7e3478dc3f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707715v1_decoy LN:3044 M5:15707c34a9803e1349a621fef2605913 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707716v1_decoy LN:2888 M5:68339f161a66b364c5e9ffed664272f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707717v1_decoy LN:1742 M5:1fd1325fe768dfe31d9199ee60b60206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707718v1_decoy LN:4969 M5:454864584e92f6e195416ac9f9a8ee38 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707719v1_decoy LN:3270 M5:10feb2ed6ea7480290058dfc77385541 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707720v1_decoy LN:6028 M5:ab8f184e44faa3d93d59d9e3beba3acc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707721v1_decoy LN:1105 M5:97e3e0ba281c40270062097594c95b2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707722v1_decoy LN:2884 M5:983f9666298bffa6bb3bc09593f83ab7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707723v1_decoy LN:1124 M5:d1d03191a7579c36409ca1686af957c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707724v1_decoy LN:1454 M5:648298f5e7a06c49b911d520d02036f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707725v1_decoy LN:2565 M5:507d9e32ff14b42ffc67abc3e66f8420 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707726v1_decoy LN:2149 M5:2cc36819133158e39f0ec48e7cadeb08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707727v1_decoy LN:2630 M5:2ce79b6f499673a5546b3b608cc6d262 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707728v1_decoy LN:14625 M5:5c193cc3e52b61477ff6efd7d6bf1168 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707729v1_decoy LN:7431 M5:a6530e653f0ed096c60f6d44f83a5ac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707730v1_decoy LN:5776 M5:8131fcdd109e0c725a9cd0f4dc240efa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707731v1_decoy LN:4820 M5:e86dbde0af3f5ba60b0ca212f4e51b75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707732v1_decoy LN:1227 M5:326c77e23881e6196b8441b3a96fc1d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707733v1_decoy LN:7503 M5:c633c411b0c6959cc08d71120f604c30 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707734v1_decoy LN:9652 M5:97472a33b38a6285aadc3ea8e200a0c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707735v1_decoy LN:1091 M5:8eb7237ab5103bf046f0b4fd8956e506 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707736v1_decoy LN:2467 M5:90141a455f60c4f02dc064d0200707c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707737v1_decoy LN:1270 M5:40c2e03cacd0e24267f2f495997de86f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707738v1_decoy LN:4365 M5:5a1da2ab0c8d8ec4e368ecdcb314a951 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707739v1_decoy LN:4284 M5:62bdd88183d94495bcb948a7c17e045c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707740v1_decoy LN:10282 M5:d20046e860cc9e220ba67181d6317b0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707741v1_decoy LN:5601 M5:8eedf1585943eb4a63b18a14c9d60e08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707742v1_decoy LN:4758 M5:453aaa1ccce2e7bcd76462fc6fb82810 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707743v1_decoy LN:1624 M5:6b23b3de3fd00f6eae35fa84c9f0a1f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707744v1_decoy LN:4024 M5:a5fc63b6fa7d72420c481475f1a9b25b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707745v1_decoy LN:1276 M5:1aa689253b47a87a0497755453cc3064 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707746v1_decoy LN:5083 M5:4df51fadbde93b81c9ce73ae34ad299d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707747v1_decoy LN:2075 M5:b020b9e14b2329811d8020661a1b223b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707748v1_decoy LN:3553 M5:3aae97b73e2f50aa215741927751caf2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707749v1_decoy LN:7010 M5:5f573deb341bf1ebc60148d185f3863b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707750v1_decoy LN:4718 M5:c90f362bf73d35d5b7ecc0df55b8e7f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707751v1_decoy LN:3546 M5:0a4232c675b33b2779a9f54185a01bf8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707752v1_decoy LN:2873 M5:dffaf05b9fdcf311b6631694c9a7f721 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707753v1_decoy LN:2144 M5:f62da5d7fb084c6276e9144911369e38 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707754v1_decoy LN:2243 M5:c01ba9f403c104a17c7a56c2e246402b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707755v1_decoy LN:5343 M5:fc0967e1b54e87ee9e6649ee9e135bfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707756v1_decoy LN:4877 M5:7cddadbee2311357be0a6cbc21b7c3ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707757v1_decoy LN:3034 M5:8bbd8d0206582bdd7ff0d98834c11701 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707758v1_decoy LN:2826 M5:d1fe878facfdb974e00aa366bf3f6574 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707759v1_decoy LN:1221 M5:f538752a6b30c7db1def6888006fdf82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707760v1_decoy LN:1169 M5:45388eebdbbcd5727ecb94a69d2b09dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707761v1_decoy LN:2319 M5:880e2410158ce2b1647e1b9d4e80632e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707762v1_decoy LN:3450 M5:1a94da832f9b0b1e2cf7e642869d2b68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707763v1_decoy LN:2674 M5:98597e188d3ba588151f6808ded88a91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707764v1_decoy LN:3912 M5:5b188ee33158e7afbe044f110d28e434 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707765v1_decoy LN:6020 M5:487d6332ace17c42a8f64aa9adf10de4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707766v1_decoy LN:2303 M5:05f988a4a7180849c6c81602c29279eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707767v1_decoy LN:2552 M5:4f8579ec6353f301ef8362afb14c9e1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707768v1_decoy LN:3656 M5:dd57001db92b45e0677136beb49e978d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707769v1_decoy LN:1591 M5:cae5200b9ceb32d63e9183210ec694c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707770v1_decoy LN:1209 M5:fde0c42984e1da0ba9aada4b168c4913 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707771v1_decoy LN:3176 M5:e48eeb05bf1913704ee94aad24e95e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707772v1_decoy LN:8915 M5:e41a1182f28ef302e03876ec46b7ba76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707773v1_decoy LN:4902 M5:61cb73463b0096ce7f34215a0e9c7d2b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707774v1_decoy LN:3324 M5:d0d739ef87156a3f1b0083d560547169 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707775v1_decoy LN:5997 M5:b23670b667f938d11721f9239ce46676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707776v1_decoy LN:2618 M5:51e373cda128d4d44cf38c8c0057966c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707777v1_decoy LN:10311 M5:c35ba91babc524c1b3270599ece90957 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707778v1_decoy LN:2440 M5:f3bed9c00d53e9777a38a27156dd1659 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707779v1_decoy LN:12444 M5:bf5be5d1c5a27ad4ae37d468d9bf5990 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707780v1_decoy LN:5691 M5:2813badf81db953a968eb7d49bc2882f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707781v1_decoy LN:2717 M5:0a1557b49527e901599bd44d72da8e1b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707782v1_decoy LN:5277 M5:4061182ba5da9755a2a25e68a304ac01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707783v1_decoy LN:4373 M5:3eef41e80ceccdcb21b9dba8a2cbca5a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707784v1_decoy LN:3224 M5:ef2e57d4220e2cf9680eb6cb27022a8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707785v1_decoy LN:2631 M5:3ae2eacb39d96c2b69c8036fa48550e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707786v1_decoy LN:5385 M5:cba39df25869787d7270324f4c2e11be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707787v1_decoy LN:3678 M5:ee5041cbefd1339ffe625fe56a2ad8fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707788v1_decoy LN:1412 M5:cd5878fb701bca2a77f7f0479ada562a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707789v1_decoy LN:1443 M5:098268af4ad1b71ed7dbf4648ea026a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707790v1_decoy LN:1098 M5:437c3cf69fd5e7568ba6cd5302f1b0e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707791v1_decoy LN:3240 M5:b4243a9c38158ab50bf873d91a699467 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707792v1_decoy LN:1915 M5:44e6058f98843778f5708a68a650bd10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707793v1_decoy LN:4667 M5:1664dafd7db46e3d2e9257978a3c0282 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707794v1_decoy LN:7219 M5:69855847368a4c0722753f3097f73427 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707795v1_decoy LN:3277 M5:21882b529bd5fd85dd805de6c51c1d58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707796v1_decoy LN:3473 M5:386834c5cf2dacec8dc5f75898909eb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707797v1_decoy LN:4243 M5:4d8a0b4dee134f88bc4604b841d38ec4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707798v1_decoy LN:17599 M5:6ab64c474c333b7a8e0aaf72d39306a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707799v1_decoy LN:5095 M5:f1c458ebccd70c843cec05e23921bbf6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707800v1_decoy LN:2237 M5:0feef89c01eacd296069717f5c7a7c71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707801v1_decoy LN:2901 M5:27662470b962dfea212da33f14909142 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707802v1_decoy LN:2666 M5:1eb4be22c4e6d37a91facfb3025520b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707803v1_decoy LN:5336 M5:db6d33944d47e02a8df7cda94a1e996c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707804v1_decoy LN:4383 M5:bd1e2dc89c9dd82b43d3787afc9abe47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707805v1_decoy LN:5446 M5:4103eb12b8c3ebec9cd8fe2f49b6d1e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707806v1_decoy LN:6252 M5:9218b0dc97e8ccb069eba3e9d676a995 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707807v1_decoy LN:4616 M5:4d717a57114c8f1b9b4ffb96edcd6615 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707808v1_decoy LN:3021 M5:eaaf056266a70e2a7be4db848d68672d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707809v1_decoy LN:3667 M5:4c8c58d51417cec07e970c76f7b280d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707810v1_decoy LN:4563 M5:4bd16dfab458c175a83a781d1b602d8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707811v1_decoy LN:1120 M5:f63cbec018752a7584fd25ba859e6807 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707812v1_decoy LN:3845 M5:47464e332307f876b9138d74f8726752 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707813v1_decoy LN:2272 M5:c5516af17e36a2e09f21f2f4120377e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707814v1_decoy LN:4764 M5:5d190274f9c28c4642fe1f75b5e3c9f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707815v1_decoy LN:5410 M5:c87029fcb5e0f94edf755e7b6b18f89e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707816v1_decoy LN:7150 M5:e2a7085047a795f4ee89232573d43df7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707817v1_decoy LN:1762 M5:2bf3e07e17fb50802f7da42c78322860 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707818v1_decoy LN:1207 M5:db2fca33bf9e3730c72e754f7e536e79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707819v1_decoy LN:1331 M5:b96ffe2a3a7a75977f2286d021069bc7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707820v1_decoy LN:8307 M5:89d9580408ce4fde62950344c2daa448 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707821v1_decoy LN:2276 M5:2a9fffb25e3ccf46680306388d4c2e6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707822v1_decoy LN:2575 M5:8e5278c0a004efc105d35744a6aed334 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707823v1_decoy LN:3970 M5:ef86294088659e3b6c564f7a2c94abd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707824v1_decoy LN:1352 M5:af1ddf1aad7bb03a0c72d325e8e9a52c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707825v1_decoy LN:3040 M5:673e8681ea9b0fe7b4b74a011c7780e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707826v1_decoy LN:2070 M5:83ff186bce877c493f356e110486b13a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707827v1_decoy LN:2913 M5:156af338c90535ad8ddbebc3cc2b8e06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707828v1_decoy LN:2389 M5:dec17b4db1503252e0d25e88839aef19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707829v1_decoy LN:1835 M5:495cf270e534859f024d452fa5714a83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707830v1_decoy LN:4807 M5:9d8e879d40a82477b244fe7baf4f1603 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707831v1_decoy LN:2201 M5:661353dc86a8b62e524ea43ee3f39c6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707832v1_decoy LN:1265 M5:e33ce5ec06d99813aca09515f057e64e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707833v1_decoy LN:1961 M5:93e5f197aa47e632cdc4f4f9a06504c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707834v1_decoy LN:1064 M5:28a2c878efec380df24a5544738eda91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707835v1_decoy LN:1932 M5:bf3bff12edc1fb4331c341b1b2044e32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707836v1_decoy LN:3213 M5:d47bed4a51e112b3d415b77d354290ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707837v1_decoy LN:1178 M5:2a4f6a9f9df49215bb56bfbe5d6e1990 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707838v1_decoy LN:2926 M5:5f28eba962c1026228afdff4fad6ade4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707839v1_decoy LN:1038 M5:b42a95db827e89510d3dcdeac5fba1c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707840v1_decoy LN:3298 M5:54dc58ad6f4d92475e298f41206a1118 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707841v1_decoy LN:8992 M5:176684391390b0afaccaac0eecdb9560 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707842v1_decoy LN:6698 M5:b309273a9a78c30bcd5a5573742fd06e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707843v1_decoy LN:4880 M5:3ad4a232fe303ab7c09600c91b6c406b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707844v1_decoy LN:1766 M5:85cb4f0b6ab4d7dcec41ef37ca81ead2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707845v1_decoy LN:3532 M5:fa5f7bc4de1539f23d5610c26d69ed49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707846v1_decoy LN:2297 M5:2bda3374523a39aa9c8766059468392e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707847v1_decoy LN:1234 M5:23e58f01c32ab1539dc5738c36b70940 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707848v1_decoy LN:1205 M5:c9b75dbdb9a2d4ee4648ed7fb537fb0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707849v1_decoy LN:2790 M5:20b3eef55d3dad7a5dbcd68268dad36c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707850v1_decoy LN:2006 M5:67d720cd69f97ad773cdcb3ccde8d47e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707851v1_decoy LN:4593 M5:7c836d280ec9794d222476d02e21b416 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707852v1_decoy LN:1579 M5:ab4542b394c8e1133f8eba10d896cb44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707853v1_decoy LN:9597 M5:9d6b74ff3ae40b1134f4b1f1eabe16ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707854v1_decoy LN:10451 M5:ec7353db2ae0657678d29512a5b78b59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707855v1_decoy LN:3219 M5:b522f004eb3c1bdf17fe74e82e23ff88 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707856v1_decoy LN:2300 M5:7a18b1dc033c5a406a5f752e8a7d5a6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707857v1_decoy LN:5985 M5:28c60286011df7faa5b7167d8dc7a5f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707858v1_decoy LN:2959 M5:682104fe067bc0a5e18763b5d0eae010 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707859v1_decoy LN:1340 M5:3b47b99a35fcc0a437518350a37c97c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707860v1_decoy LN:3148 M5:cc961e4253553c5534e478b629b89930 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707861v1_decoy LN:2242 M5:beedf4d2ae00fca7cc2cd7e9d4ce6012 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707862v1_decoy LN:16513 M5:968c6df8aaaaa1015e74f591e4722ed5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707863v1_decoy LN:7821 M5:9c8e1c87e1b58622c67edbf732b7ce9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707864v1_decoy LN:2159 M5:37c9ce7cb170bed17a0deb982f64fefc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707865v1_decoy LN:2114 M5:8b637137aa5f04b43be61da029e5f818 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707866v1_decoy LN:4109 M5:1d5a765b813cd25ff873c52ca2b47f05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707867v1_decoy LN:1544 M5:c2744b7344993ebcf11d21cb098cace1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707868v1_decoy LN:1005 M5:241518a7a0343d82a0d99b1dc00e5d79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707869v1_decoy LN:8632 M5:010737c4caab4d5e629753ad40bee3bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707870v1_decoy LN:1012 M5:88b3e83459db1925338cff6156325503 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707871v1_decoy LN:4728 M5:dcab24555bd79f11062bd6e856a1db4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707872v1_decoy LN:2165 M5:aff31850364e11f37ba76baa5b7164d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707873v1_decoy LN:7591 M5:b034989a9fb62216a2547cd1206f4185 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707874v1_decoy LN:5202 M5:1e514f0c86c918e80fa4b29c206cb8cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707875v1_decoy LN:4241 M5:da66844cc4d4846716264b16f77233a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707876v1_decoy LN:4131 M5:60562638c91c3b3655e2ab9544600425 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707877v1_decoy LN:2272 M5:d672677153fa65839a94ae64d9284d49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707878v1_decoy LN:2085 M5:d1bc85197aa7215a4b0248a74c19b399 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707879v1_decoy LN:4346 M5:1999b7a1b498a212e212e60377adb20d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707880v1_decoy LN:1208 M5:ea9da47963d703e465aaff5693250f76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707881v1_decoy LN:4543 M5:e84492cd2aa22936e00b280fcaca8212 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707882v1_decoy LN:2772 M5:bed5000e1788ade3ad5a8541cf1c1671 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707883v1_decoy LN:2490 M5:3d040ea1d7a17b15bf44f59b8e66c98c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707884v1_decoy LN:4568 M5:bd5a8cfffb4d5bab0900b4fa1fbf9390 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707885v1_decoy LN:1776 M5:f0f2b210ad8e779eec5a4ba478c83ef7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707886v1_decoy LN:2699 M5:91fad31e963c9f7821cf37705e55f40e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707887v1_decoy LN:3534 M5:f6d25106c5942148df4207ebc4a60371 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707888v1_decoy LN:2424 M5:4857413cb43abc01f2f0c2d56e196332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707889v1_decoy LN:1747 M5:e1946468f8d77d4ac72dd72fe8ce04f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707890v1_decoy LN:1088 M5:698423687f8bc007b40065a2658b7360 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707891v1_decoy LN:1143 M5:3dbbd76127230ad72adb348524c250da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707892v1_decoy LN:2530 M5:8909228bbdb37a62a906447c5b24616a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707893v1_decoy LN:8049 M5:a4e81d020fe37025f26c26aa8241f26d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707894v1_decoy LN:1366 M5:69423d07e5d284b7ad365c144aec6f4e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707895v1_decoy LN:4284 M5:da455b511b9da89b4527ee045c5fe231 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707896v1_decoy LN:33125 M5:10522217e43c9d9228b02fc14c418df3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707897v1_decoy LN:2137 M5:962521d05f6b98894c65d3669ba66008 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707898v1_decoy LN:3840 M5:561d50151a7132f385be0617165bcecb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707899v1_decoy LN:3087 M5:46cc4f61d95475ad4c963e9bfeb206fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707900v1_decoy LN:2041 M5:cea01cf71468a810b970138149139764 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707901v1_decoy LN:3344 M5:ef03bb9d9f28ee51bfc7291ee41812e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707902v1_decoy LN:2921 M5:dcc9f313bc6e72cc000ac62e62e975f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707903v1_decoy LN:6581 M5:6346aa1b0e3055e121b9cdccb04a53fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707904v1_decoy LN:3968 M5:ed15d6545609df15a0758922f36c9f87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707905v1_decoy LN:2339 M5:af66f6d8d03e1c43cef4284aef73ed96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707906v1_decoy LN:1243 M5:bec4227b2724132e7ac912e4532bcf8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707907v1_decoy LN:7776 M5:a9e8cc852787e0a7dea34bd16fd28b35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707908v1_decoy LN:19837 M5:63f4cfca34f0fcd66c826ccc8c6d6cbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707909v1_decoy LN:1737 M5:0eb45f3727a363ec209755519593220a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707910v1_decoy LN:1098 M5:bda7161c475d6f7bae40ce030d70fe87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707911v1_decoy LN:1893 M5:80bef2e1b21000a202a974145a551fe4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707912v1_decoy LN:1281 M5:96d1e0d5628111d9566a6da789c6204b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707913v1_decoy LN:1527 M5:ad42dca85dd0540c9229a86997665245 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707914v1_decoy LN:2055 M5:c7f0324e70cef84566fa5453dcb23f5d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707915v1_decoy LN:2527 M5:f7d3cdbc2f96d05bc8ff741d46f2f687 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707916v1_decoy LN:3275 M5:d9702219a1b8982c63cc1d6238368ab2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707917v1_decoy LN:1265 M5:6df0a4af8c86a2528464f45af7cbaccf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707918v1_decoy LN:2623 M5:5c6afdd9afcdaae5399f684978746b65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707919v1_decoy LN:4850 M5:aed47145c2269b8c33a71652002e351f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707920v1_decoy LN:3584 M5:47dcd6ad41f139cfd6b9a02581cad11c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707921v1_decoy LN:2561 M5:33902e088970543e1715ee99abdcf7b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707922v1_decoy LN:3041 M5:313f5e86963d937b91534f4895c3a590 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707923v1_decoy LN:1409 M5:6af5cfeb86bc84ecdcfb91e994b4bdbb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707924v1_decoy LN:4596 M5:3415bc1f3a762bb7077c328b9e9e723c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707925v1_decoy LN:11555 M5:10cf29455a308a0380471d6bce16f4a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707926v1_decoy LN:1266 M5:ed2740c08c55e9dbdd3cf9db469d0df6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707927v1_decoy LN:1079 M5:7d006b7ffa2791321663578e50f456f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707928v1_decoy LN:1087 M5:e6a75cbd458016b1643e76ecc570d33a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707929v1_decoy LN:1226 M5:21256ce4fdadc803045a9b8f60dfe16b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707930v1_decoy LN:1131 M5:2f7c4c54c98b465c14120d32e5d60362 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707931v1_decoy LN:1199 M5:68471da27aefc5565f37a51052c09c8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707932v1_decoy LN:1084 M5:ff5f2aa407bb1f0573a4d815fb69f917 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707933v1_decoy LN:2038 M5:1b9a682cbf0c31fe8f29a4aa0bbef274 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707934v1_decoy LN:1070 M5:f8c939429a099c8eaead4319b5ecd2b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707935v1_decoy LN:1312 M5:00ead3e9dd86f6d5e7d499e285b509b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707936v1_decoy LN:4031 M5:9175dddf96d1e576065b2465c6e2b567 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707937v1_decoy LN:7445 M5:f83991a23f7bca6045f72a0bf34ecf13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707938v1_decoy LN:1770 M5:d7487b3fc5cbe693cdcd5ef883b5f00d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707939v1_decoy LN:5600 M5:5fc39cbf76db7d0c1d56123a313a22c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707940v1_decoy LN:1882 M5:f239e0af7db0be33b82e8e4dc2405165 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707941v1_decoy LN:1170 M5:e7c47b0be4905c7dcf70b8659a334abb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707942v1_decoy LN:1300 M5:1beccd3ea3988863bad1b7614a1db1e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707943v1_decoy LN:5325 M5:54c4ba54e1ad9eebc7832dfb6cf778fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707944v1_decoy LN:2043 M5:669c152c4b3e10d1f61d5afb2cf22bcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707945v1_decoy LN:1072 M5:d9416b21be3f6603426526a22e7e558e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707946v1_decoy LN:2463 M5:ce498b9d34e1447317c0d5d27aa0f911 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707947v1_decoy LN:1010 M5:4183a38dcef3c56b79dcf7eae090e37f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707948v1_decoy LN:1432 M5:c261bf235424d74a7b1d8624bb8d6ec2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707949v1_decoy LN:1162 M5:26aeb5ffbd148e35fa48fee69317843f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707950v1_decoy LN:1095 M5:2c795c49d9b77f2b5c0ef5c97e76ae46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707951v1_decoy LN:1118 M5:a0c0ea97493f7c511c5b0af1e8913e92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707952v1_decoy LN:1383 M5:fcc78a7bf9b47bb52730911e285ad0f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707953v1_decoy LN:2289 M5:ba3eede08e65f36da588370a142cc02a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707954v1_decoy LN:1648 M5:de71b9c9ca48f28bc0c9d13c5139ce68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707955v1_decoy LN:2203 M5:4c9964a811b62ea018169d81ba474499 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707956v1_decoy LN:3270 M5:316a59db52a456d6aa5e140e1b1c8794 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707957v1_decoy LN:11499 M5:cd3bb1a0e33bc1aafb51df407fcf16df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707958v1_decoy LN:2474 M5:5909618b2a56c4db15b017bfff248a13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707959v1_decoy LN:2294 M5:bfd4a30a41e5e647cba935da2e8a63de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707960v1_decoy LN:1238 M5:8025797164ec304ff940e4ad94643c70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707961v1_decoy LN:3410 M5:02a40e206c78446d368b6001622aa540 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707962v1_decoy LN:1523 M5:7f11ba71c0814d0ca2b3839d55de672d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707963v1_decoy LN:62955 M5:d620b771cabe5b2cc4b943ffa6d69a68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707964v1_decoy LN:6282 M5:fc00ea543316aed78deefeac0eaf8727 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707965v1_decoy LN:3836 M5:97e94c098f92403b805a0a60f9475542 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707966v1_decoy LN:6486 M5:a977897a46254d42ed9a60e6ed5d9d20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707967v1_decoy LN:15368 M5:220b351d87053eb9b844bc6e6e5182a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707968v1_decoy LN:9572 M5:060b9bb36bc05042b371bfbfc6618e3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707969v1_decoy LN:6413 M5:b25e652840d89c9eef74c04703958f9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707970v1_decoy LN:4104 M5:d103bed226a1a7b95d98a8d61e39f70d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707971v1_decoy LN:12943 M5:8a88d2df497490f21c8c2b796544f699 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707972v1_decoy LN:4650 M5:93e792bf92036380920f5d06321cafe3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707973v1_decoy LN:3080 M5:127f70f3cf2cf09e8c7a399c471acf75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707974v1_decoy LN:3134 M5:a0447f79285905c6b9f2202fdb83f838 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707975v1_decoy LN:6211 M5:931aa6a0b0412241d93c942acba0c103 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707976v1_decoy LN:1126 M5:c068c96f088fa2ef7cfe6a805c22121a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707977v1_decoy LN:1101 M5:e86b95e84b7662e5e6e509be83db4b41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707978v1_decoy LN:1101 M5:d46f001c034076f4a3687b647a980623 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707979v1_decoy LN:2648 M5:fe4d1437f61ce0406d36a071f4e7293a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707980v1_decoy LN:2973 M5:9c4cb203ab1d6a54a7ed36d116c60853 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707981v1_decoy LN:2520 M5:3ccf197ae78ce07e23eef5e3c31fb576 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707982v1_decoy LN:2318 M5:6e5cf7df1252379ee351fb2386bcc144 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707983v1_decoy LN:2606 M5:64cc9674054ed4f7cdf0701da89de296 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707984v1_decoy LN:2205 M5:e5814756cacf0c02827237dcd24155a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707985v1_decoy LN:2929 M5:6a2895e9dda391590b1db42aea33e330 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707986v1_decoy LN:3869 M5:9640cfef88fffced10f0edaf20dbda2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707987v1_decoy LN:1117 M5:60f8230f4e335416aa92256695cbcf46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707988v1_decoy LN:2960 M5:b0447a959fdacb8b553c3684184cf036 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707989v1_decoy LN:1009 M5:75d4d43433fa532ce2da4a724ee25c42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707990v1_decoy LN:4048 M5:f0720d93745203f7d155f219ab83b618 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707991v1_decoy LN:2193 M5:fede10b713c7d561d4872feb26040c3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707992v1_decoy LN:1830 M5:1bac13a3ad2592a344e18bf8de117574 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000001v1_decoy LN:25139 M5:9b27ee6060931ae7d17e451b7739e547 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000002v1_decoy LN:18532 M5:9955447b0a6444031f1d68c821fcea22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000003v1_decoy LN:15240 M5:b635cbc1fc3962e93bc1427bc678396e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000004v1_decoy LN:13739 M5:7fa6d2a124f7c9bfeb030b859269f78f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000005v1_decoy LN:11297 M5:44c68451b1d90987e31184e887a24455 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000006v1_decoy LN:10074 M5:ddeeb2059f6f27dee5330cb501a11446 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000007v1_decoy LN:9891 M5:30b47b3ef6b82a46ccfec6573b0c6c10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000008v1_decoy LN:9774 M5:f0bed43412c69b6db572994c9d5d9cd4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000009v1_decoy LN:9727 M5:0cab8d3c0896fb15383dc8aaef1a1f9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000010v1_decoy LN:9358 M5:aba5595273a0e4398df3a8323523d10c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000011v1_decoy LN:8920 M5:fc623f57c6ad9441d3750c0f51722a0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000012v1_decoy LN:8479 M5:6dca96b0605fddf041e27a9f4beed770 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000013v1_decoy LN:8312 M5:f34a4b1860ec9fbd1acc736a3a174193 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000014v1_decoy LN:8261 M5:6deaa38e9033c12ed1ad7f62191a3e04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000015v1_decoy LN:8131 M5:c3df1d07395395fb96b81e27ef3dcf61 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000016v1_decoy LN:8051 M5:f732550392ca9c30b42b4c6acd5d9263 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000017v1_decoy LN:7832 M5:03557dc0d8d0509da30549dc16031c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000018v1_decoy LN:7710 M5:942aca2604695877a0a642916aafd2b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000019v1_decoy LN:7702 M5:c6c2453adbb040df0ea58395995ebae1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000020v1_decoy LN:7479 M5:5b348e642370fdd96c7f2a306318869e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000021v1_decoy LN:7368 M5:0693c472fdc0225c133374a15973bec3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000022v1_decoy LN:7162 M5:6629bbc8b7d3fa10074025773e597c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000023v1_decoy LN:7065 M5:6b413d9f61a68a7ce1ea620aebb3be6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000024v1_decoy LN:7019 M5:14f555be268a0666a71794d0515cd6d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000025v1_decoy LN:6997 M5:470d24c11b0ea5dbd4329912231aba50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000026v1_decoy LN:6994 M5:1a45d626e4f7add376267b1e77bcc942 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000027v1_decoy LN:6979 M5:6890d5c807ceff3e680405d80c19b990 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000028v1_decoy LN:6797 M5:6cde21bfadb3f954f76aba8775f5b89f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000029v1_decoy LN:6525 M5:091fdeaa7841b60f964f1a9cedc12bd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000030v1_decoy LN:6246 M5:7c23df0bfe1cc7d18d52be126f396cca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000031v1_decoy LN:5926 M5:5555324457dbc04a20ac656a15cce856 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000032v1_decoy LN:5914 M5:67d2d8955ebee73fe7f8f3764e4158f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000033v1_decoy LN:5898 M5:de8113c2b1586e776f28207cd56cec1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000034v1_decoy LN:5879 M5:1c6aa8f142642d8cf57f4f7029a20061 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000035v1_decoy LN:5834 M5:29c393ec5d6804ee5dc06b435ffc02f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000036v1_decoy LN:5743 M5:2f131c59606d7cb8cf6c6c495ce84aa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000037v1_decoy LN:5577 M5:20bd1281fc32355adf567b4e0ff160a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000038v1_decoy LN:5413 M5:3d2ed60178406278eb02030b7c0cc328 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000039v1_decoy LN:5250 M5:62ebce054cc44d5c32625c44fa1e5ff5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000040v1_decoy LN:5246 M5:7cf464d2ec26fa4cea2bfd25f995969c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000041v1_decoy LN:5118 M5:ad3a1c8041863a52b7fa6d6d56ce0d3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000042v1_decoy LN:5058 M5:bce45aec79ec4861d8442ec3d738761b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000043v1_decoy LN:4959 M5:f653839b5c54df56a1a2fdd7ceb42db8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000044v1_decoy LN:4853 M5:3505d16e35e056be0892167f5a564661 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000045v1_decoy LN:4828 M5:d43e63bb33a6cb65d5cdd1ca31e94c19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000046v1_decoy LN:4819 M5:db9c73fa0d581cecaf0175aab4a0fc7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000047v1_decoy LN:4809 M5:1b157b5c5c208470638b188e23b55a59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000048v1_decoy LN:4710 M5:ad9552980f4f1bf74b72740d14d2f5ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000049v1_decoy LN:4680 M5:5bb4ddca04b26e3afd0bf218f2947a7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000050v1_decoy LN:4645 M5:6a821c450a9bcf89dfccaa62d46212cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000051v1_decoy LN:4514 M5:bab340cdaa58e6d32ad1138612c84e07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000052v1_decoy LN:4439 M5:3cd292c1df3855202250324272a95b5b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000053v1_decoy LN:4416 M5:73c9659871560313e754f9363053d56c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000054v1_decoy LN:4409 M5:8ab5d2ce8c35201fa585fdf6f4ae670c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000055v1_decoy LN:4392 M5:e2b0cc1cca4b7ed60f85199816696690 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000056v1_decoy LN:4359 M5:ad16965c23d8e07c823a47e9b098f162 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000057v1_decoy LN:4319 M5:3bfb10064835da4e9caf7e8deb1857f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000058v1_decoy LN:4290 M5:947253137780def5c1c0db12039bdeca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000059v1_decoy LN:4242 M5:2a6de19fbea3d44dbf76c71f1778b47e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000060v1_decoy LN:4228 M5:8b1e73bd29fd4c77bb54fb586721b1a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000061v1_decoy LN:4222 M5:8576a97cd4f61cd6455b423f14eaed92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000062v1_decoy LN:4216 M5:d885db4b883ae34dd53ed184783c2144 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000063v1_decoy LN:4210 M5:1bfa5c8aecb62137e83c3274991deceb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000064v1_decoy LN:4206 M5:48398977c32247e425a6a85f97026636 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000065v1_decoy LN:4102 M5:f7d638a8f28d1c9842128b1225325947 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000066v1_decoy LN:4101 M5:78254b10a1884b61ecbfc72be3ad38d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000067v1_decoy LN:4083 M5:19683f0eb0d378e403a918d10931eb76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000068v1_decoy LN:3967 M5:2519be1b425e386f50cf02ec88f8f903 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000069v1_decoy LN:3955 M5:7c186eab354093fe3b26a9e757407fca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000070v1_decoy LN:3945 M5:4cf91327091051082a0ff114dd170f21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000071v1_decoy LN:3930 M5:d97123bfd4ea271ec354c170d89d80d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000072v1_decoy LN:3929 M5:147eecc4607f1ae7fd1dff1c0f98ca25 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000073v1_decoy LN:3924 M5:84bdf303142b233c179ecef62ab58b07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000074v1_decoy LN:3919 M5:648c37f3fa6e7d658440858761213e7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000075v1_decoy LN:3908 M5:36f5d13bc1a3b72a21c0a4b68148d469 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000076v1_decoy LN:3892 M5:052f146ade5330135e5381db9c779f75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000077v1_decoy LN:3890 M5:22c368b726169405e1f364115fc2356a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000078v1_decoy LN:3859 M5:85a6fde3123e4ae2ef854e83b790e55d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000079v1_decoy LN:3846 M5:21dfcbee386bf64a6e7639d212fe4ba0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000080v1_decoy LN:3835 M5:7f8ace0d7314cec254a8ff5addedb0f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000081v1_decoy LN:3830 M5:d40bb66c2d194acad4d612db8d34e1b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000082v1_decoy LN:3828 M5:c6c7826a848a366317f63f5db5dabe87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000083v1_decoy LN:3825 M5:632e853a99e258e0ae002c0c03aa7caa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000084v1_decoy LN:3821 M5:67720b3ea8a4c3be301aa0519627e306 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000085v1_decoy LN:3809 M5:8ee2faad62aedf582f3c33635df47f84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000086v1_decoy LN:3801 M5:dbd8292192827196a4c3d545bfb9b67c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000087v1_decoy LN:3799 M5:15066eea555ea13dca8b28620db8ae45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000088v1_decoy LN:3737 M5:83437130e836bac50aba2aa79fa9d80c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000089v1_decoy LN:3701 M5:16d790e451ef2c33018834904a04c177 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000090v1_decoy LN:3698 M5:4045cd2ec9d306542cc3804aab489587 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000091v1_decoy LN:3692 M5:3a1e6d05d94debffbe6070b59627d610 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000092v1_decoy LN:3686 M5:f2bcad40026ed9d729d9c31034159300 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000093v1_decoy LN:3677 M5:50536f98dd2e44e8a77c5f9d289ad87c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000094v1_decoy LN:3664 M5:65fd750160fcf7b7944c8e015e46a443 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000095v1_decoy LN:3613 M5:3257e4358f19507804bfac363c932664 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000096v1_decoy LN:3611 M5:d10add8e30105013e264b6feede833e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000097v1_decoy LN:3606 M5:c78427ed0c2856bbf8131bd73e54c3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000098v1_decoy LN:3584 M5:81a78209d26627e698602af1848e2b03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000099v1_decoy LN:3581 M5:90e3913247adb7b30059e051bbcefe4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000100v1_decoy LN:3543 M5:3dd50a694f9e6011fc694fab191cb759 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000101v1_decoy LN:3528 M5:0eefcbd5209d0d32ccf640f76a69f676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000102v1_decoy LN:3527 M5:0bc37681f399eec3b3b7dcbf22498b37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000103v1_decoy LN:3496 M5:c04b909a1562f77654eceacd0b8a935f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000104v1_decoy LN:3493 M5:fb84ec004fe99371b9b2d74bfb8570ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000105v1_decoy LN:3484 M5:e07ccdf102c986c26b2bda46045943b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000106v1_decoy LN:3435 M5:4be97b9bc8d65dffe17f17ef9f801240 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000107v1_decoy LN:3391 M5:0878850e674ca72172a37319b9321acb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000108v1_decoy LN:3374 M5:5b7dd688c7eafb7b418766bdab494a84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000109v1_decoy LN:3371 M5:fb407b611c6eab3bb1609123cbeb47c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000110v1_decoy LN:3361 M5:4851563bcd9e0f7af3768f20f33bb22a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000111v1_decoy LN:3351 M5:24701a0d266ed39e5bfd3757bbfa218e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000112v1_decoy LN:3340 M5:d10fcebc376b84a0e301d97eff284137 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000113v1_decoy LN:3320 M5:05f2acb99e398b98f272d297727f28d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000114v1_decoy LN:3282 M5:d20adc7c458920890e8c1c56717c60b3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000115v1_decoy LN:3278 M5:9baab7452d6c49d97acd68acc83ab547 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000116v1_decoy LN:3260 M5:b2b6112ec6f9d22a7842f78e37d6a3b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000117v1_decoy LN:3258 M5:edb413acc1f07788b1a55b647c56997c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000118v1_decoy LN:3253 M5:1143d3e269aa80abfae249b7c653814c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000119v1_decoy LN:3247 M5:8d905fa140b8fded3a9560d24a32cfe9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000120v1_decoy LN:3230 M5:8c96125639143835c0e5b29884855e8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000121v1_decoy LN:3224 M5:6314311a75a1832245fb87dd86655de8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000122v1_decoy LN:3216 M5:80770770768ebb238cb4572d674e1579 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000123v1_decoy LN:3212 M5:63a4964026424edcd64a0e174de5c51a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000124v1_decoy LN:3194 M5:c68922465f39c47a5ebcf4767811e41e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000125v1_decoy LN:3189 M5:9e4ae67a2bea0ce8335cfb82e125cc2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000126v1_decoy LN:3177 M5:94806d6a47b3781ed8e5004a2c577255 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000127v1_decoy LN:3176 M5:419d834659cd952516de6d9dcae8c3b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000128v1_decoy LN:3173 M5:050df236c1fa3a63c31f33b73308c168 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000129v1_decoy LN:3170 M5:61f6339992ffab5d3091b4a3b3baead8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000130v1_decoy LN:3166 M5:1fc75a1345ce98d6f25ba4d916b5d7f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000131v1_decoy LN:3163 M5:c262387ff17ca2ee56fb368575275676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000132v1_decoy LN:3143 M5:790557e383cdc852732e3da2c6b6c615 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000133v1_decoy LN:3137 M5:ea2bf77f700236081cf8eb7aa0d9a909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000134v1_decoy LN:3116 M5:a8ae3ccc9f17c0f0edcacc5079219d51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000135v1_decoy LN:3106 M5:89002d8689e45952391a7984d69df23d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000136v1_decoy LN:3093 M5:2dc162e245d6ff81936bc650004ec8cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000137v1_decoy LN:3079 M5:38068261005ed014603a09dac9438db7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000138v1_decoy LN:3053 M5:bb3a8eab3c8ea2aa961e65ec5e1d91da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000139v1_decoy LN:3051 M5:87d0e9b49ecda7ba160f80012ca40de3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000140v1_decoy LN:3015 M5:303ba1d7f1155342056b491810358e6b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000141v1_decoy LN:3012 M5:c7a07f27a9874d99e33c27c2a2280cd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000142v1_decoy LN:3009 M5:d88319790f0a837a02a625cfdb6c1971 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000143v1_decoy LN:2997 M5:2b912adb843e4f2d90726c884ca7ab4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000144v1_decoy LN:2997 M5:f6bf68bca6151666f29be31cb16f1c0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000145v1_decoy LN:2983 M5:3473d9484854e710526e0c7ccc80b5bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000146v1_decoy LN:2979 M5:90d61da24b116c2bacb63747666a326b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000147v1_decoy LN:2967 M5:c84a0386ea78dc84323f55723fc42ef1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000148v1_decoy LN:2967 M5:a2b48635d63117baec9f7dbeae644928 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000149v1_decoy LN:2966 M5:0b15201439291bf53043abb6dcdab743 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000150v1_decoy LN:2954 M5:f36be073b0668fe6c56206c0a9bcf742 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000151v1_decoy LN:2952 M5:0aa12dea5cdf7b9dea2d56a71e233dab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000152v1_decoy LN:2934 M5:70eafae03cdb824f956cc77cc9b342ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000153v1_decoy LN:2918 M5:d7711561e6c2a87e3771c3ce9e28ffaa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000154v1_decoy LN:2895 M5:b40089d10ae6fb3b2a90a260a6469229 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000155v1_decoy LN:2887 M5:9be2679cff5e171c42de84446d6fedfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000156v1_decoy LN:2879 M5:100d6fd294d6998c7928887ba353f441 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000157v1_decoy LN:2878 M5:e081c58ad4b64da9af95ca27932e7ebb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000158v1_decoy LN:2872 M5:0469343a7677dac01c66bf219aa0611d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000159v1_decoy LN:2868 M5:fbc27037c78cd3b3982d7f792147d4ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000160v1_decoy LN:2866 M5:33497edef237132c3e3efe7304d5a685 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000161v1_decoy LN:2865 M5:65371a3805dd2779f5807f1849df8a2f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000162v1_decoy LN:2864 M5:7e9448d377e58534ce56c68cd97278d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000163v1_decoy LN:2859 M5:93dbbd6f23a68673abfe169d241204a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000164v1_decoy LN:2854 M5:c468c0f380889b274a988802cc95f8ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000165v1_decoy LN:2830 M5:bb1fb10e20767215b036dbad18b92018 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000166v1_decoy LN:2828 M5:9f9279b092a64e7648f91091e5112414 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000167v1_decoy LN:2824 M5:774c1242a9fec9c39b231e3a4244c48f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000168v1_decoy LN:2819 M5:5e794be8f02e6190282545c4a587a131 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000169v1_decoy LN:2813 M5:f7e3bb8a09ce56ebcb9638b710cd2ce3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000170v1_decoy LN:2809 M5:8fb1846cc5b62db20428a2bf2bfaded5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000171v1_decoy LN:2802 M5:9bd40f006580d92c066ff544ddc22d8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000172v1_decoy LN:2791 M5:5f91fa423cf6ea436c30cddd27d2f7b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000173v1_decoy LN:2783 M5:698dd6fdb96a0f8653015f1bf3406d29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000174v1_decoy LN:2778 M5:3aae745709a336cef318bd095be7bf93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000175v1_decoy LN:2777 M5:14ba8c26038f60c5a103e430e7fba5e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000176v1_decoy LN:2770 M5:467d903833c580a48fa311a7a15c61c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000177v1_decoy LN:2769 M5:beb768213f5d753b7f6a857687fb1c9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000178v1_decoy LN:2767 M5:2d998199f83204c294ff1e618648e88a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000179v1_decoy LN:2763 M5:9244414120396c3b53b847abfd80bc74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000180v1_decoy LN:2745 M5:8657cb328a0d649107216245ce042ff3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000181v1_decoy LN:2742 M5:9a35552497474ad6e9b35b843c759b60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000182v1_decoy LN:2736 M5:4fdea3271d6795c56d47fc6d54f11972 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000183v1_decoy LN:2729 M5:5da3445ac176ed7cca1131267e6dfb95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000184v1_decoy LN:2726 M5:9cc9d79dd54416be6fc2b500d4ca8223 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000185v1_decoy LN:2719 M5:8d898d7f057764e7d11b7121f8cfb366 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000186v1_decoy LN:2715 M5:0bd839a4a62fe7568bf02c2bdf660047 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000187v1_decoy LN:2708 M5:0bcff7297c716264bc76813a0516ad12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000188v1_decoy LN:2704 M5:0ceefe5f0373922aa642a3180f917c9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000189v1_decoy LN:2692 M5:a1ed1d3ee4d5cc17aae0d9d0fa0775b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000190v1_decoy LN:2691 M5:43df7d9d35f2d15ff844b2f4564338dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000191v1_decoy LN:2690 M5:b7809dc0c98369b8235b36dfbd7e2ae3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000192v1_decoy LN:2687 M5:a61002b74d916bbe06d09eb62cdb9144 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000193v1_decoy LN:2677 M5:02cb7169934dce464116e8644638b22d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000194v1_decoy LN:2668 M5:0e691a59ae468d427df06bdb2e34e315 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000195v1_decoy LN:2668 M5:4e1222dfcb9ce80e3a7544e3af791e70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000196v1_decoy LN:2663 M5:5e4092300f7a24534a4fc2afe6c68b5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000197v1_decoy LN:2655 M5:8bf68a2085f6903253894b5ac2be0d10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000198v1_decoy LN:2644 M5:035eac523101444b286c852a129bb0f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000199v1_decoy LN:2642 M5:518ada0e1f2b63c0a99a0154b584120d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000200v1_decoy LN:2632 M5:40870ec46cc59053e01def95871a68eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000201v1_decoy LN:2632 M5:af03b437e04ad5f5cc86e2a67adee8ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000202v1_decoy LN:2628 M5:fa043c52050897ca77e0b475bc77776f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000203v1_decoy LN:2623 M5:0761598e68213207c0d256d5e7e1bcbb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000204v1_decoy LN:2622 M5:502e3af12800de14f86b2cfd3de9bd2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000205v1_decoy LN:2619 M5:74fb4a710fd8bb14104c1cbde54ee247 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000206v1_decoy LN:2605 M5:73c6a5d1feb99a88b122655b4dcdd742 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000207v1_decoy LN:2603 M5:2d1e488c4ee483df72211d2762b1b7cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000208v1_decoy LN:2601 M5:c72de668308e8c098888b96b543703d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000209v1_decoy LN:2598 M5:33dd6c20ea4712d7d3b200db8f026cbf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000210v1_decoy LN:2597 M5:cd6c72af3776b51a1619b01b5eff8bc8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000211v1_decoy LN:2596 M5:40ba1e4b99e2625ec5a5cc4038fa9a06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000212v1_decoy LN:2594 M5:fe8d3058e4af4e6063be2c2f955b2bfb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000213v1_decoy LN:2586 M5:2ae32263b19fd8541852cb566f82be30 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000214v1_decoy LN:2585 M5:873a6619e50330ccdcebeb56cf56b70a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000215v1_decoy LN:2583 M5:13d7b02826997cd3db01ccfc712000ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000216v1_decoy LN:2578 M5:f891eed2ad267879c435cbc346ebfaec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000217v1_decoy LN:2569 M5:17baf081bd68afecee4fb26591fb7d44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000218v1_decoy LN:2569 M5:b543771b65b36e55866a9191f68deb0e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000219v1_decoy LN:2551 M5:cd59a6042156743484b01e429d67dcb9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000220v1_decoy LN:2548 M5:822737a44cc33c2db164829922cdb96a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000221v1_decoy LN:2548 M5:cfc1c1a98c1e72f1193cf3bdbd7d6e22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000222v1_decoy LN:2546 M5:4b897ac33360cfc5dda50c492edd5264 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000223v1_decoy LN:2545 M5:3e5f015ea4c3e8e3f4aa413fc8e33ff7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000224v1_decoy LN:2534 M5:8a161ea48715e813fd05aa43c1e4524a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000225v1_decoy LN:2533 M5:fb3804f1f8c9b481a5684e24912cdb2e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000226v1_decoy LN:2522 M5:4a6ae65ea92c112f656b5d39d76a7741 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000227v1_decoy LN:2522 M5:4b56d4e6c02a6e93eace0b35a8e81178 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000228v1_decoy LN:2515 M5:38e333d2fbaeea1196ff289ff007b136 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000229v1_decoy LN:2513 M5:6948ea45d0167313b03bb520dece25ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000230v1_decoy LN:2507 M5:ae1256f74ac53ab9f03548cd40e2fe8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000231v1_decoy LN:2504 M5:615e1e7e5b15386539deb06dd4e70457 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000232v1_decoy LN:2497 M5:2601507db41c0111c04735355c122721 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000233v1_decoy LN:2471 M5:204b14540e382d6178cbf75d805ad164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000234v1_decoy LN:2465 M5:8bf3deb57ae47354c0f07b477420f838 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000235v1_decoy LN:2464 M5:ef6b06a889077e9b0c4ae3b5eeaf21cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000236v1_decoy LN:2459 M5:cf22036ebb20e5c07502642f1d926f55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000237v1_decoy LN:2457 M5:64a6bc4d08e4f9e0d6ba8cce58b7f505 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000238v1_decoy LN:2450 M5:e83868519a491203921eb9f7286a5e98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000239v1_decoy LN:2435 M5:8292756d8d376c15256d12d69951d1ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000240v1_decoy LN:2434 M5:e850a25d74b1a7564101247ce3b1fb7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000241v1_decoy LN:2432 M5:b0696db696f0e45c6909f75d3f17ab87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000242v1_decoy LN:2427 M5:4a78bf09eb53eaefba5d6406f424579a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000243v1_decoy LN:2421 M5:6751a1f3f80e5a43badc5b9a986fa49a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000244v1_decoy LN:2420 M5:b8c086bba1ed8bc4eb0ea05e7031664e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000245v1_decoy LN:2414 M5:4ae74a7c8879b7eadc4ff52f6c247436 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000246v1_decoy LN:2404 M5:cd50b4acbe112fb299328b26c243aad7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000247v1_decoy LN:2403 M5:0a7f0ec7ad3711a0173947d4768d9193 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000248v1_decoy LN:2402 M5:cf164664d17746b996c1b51b7a1b2d1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000249v1_decoy LN:2397 M5:d5f7a437c859d40100bf3a757b38ea7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000250v1_decoy LN:2395 M5:fdf94cbe463685fab85e81430541c656 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000251v1_decoy LN:2394 M5:9e100dfb362640d77d73adb06f63c206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000252v1_decoy LN:2388 M5:0f0f93cc335a9faecc119d22738a778e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000253v1_decoy LN:2382 M5:af0841d63c2d4ca67c11f8e2f0c0b42b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000254v1_decoy LN:2381 M5:948e4e6ebbce9d82413e86c3c96d684f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000255v1_decoy LN:2380 M5:46be4a58c4b132b788bd04a3c51f0108 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000256v1_decoy LN:2368 M5:722aeea650c487dc132f37322a5b5eb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000257v1_decoy LN:2364 M5:44995a3c81d834bd8bbceda57ee73d51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000258v1_decoy LN:2363 M5:a71f07406eabc3a412250ac21c446ba3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000259v1_decoy LN:2348 M5:99b15b0bac8cbd7497c5ca04a721c657 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000260v1_decoy LN:2339 M5:0768f34e39c5c97c1639fd42b72fec1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000261v1_decoy LN:2335 M5:974a3d6e7628eaf95db035d99f046379 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000262v1_decoy LN:2332 M5:9a0e708d8a88bfa96a75e98604a273b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000263v1_decoy LN:2331 M5:60412161b03d0c2f2ce5659369ee368e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000264v1_decoy LN:2330 M5:5593063ebd79eae9ac5a5a5ba9095b7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000265v1_decoy LN:2323 M5:6042dc9c77f44643d41e68ea0cda385f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000266v1_decoy LN:2319 M5:ba867aa03d1617be8f801a89c1530937 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000267v1_decoy LN:2314 M5:a29f663eddf36e84b6cb6faff0f62309 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000268v1_decoy LN:2308 M5:659c8649b3dbe0dd672045a5ed7fa3b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000269v1_decoy LN:2306 M5:e10dadf09b67626744c1c39c1fea5fe4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000270v1_decoy LN:2296 M5:81f921a9ec2bd029889721432b22d4d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000271v1_decoy LN:2287 M5:095a5e8a3ae51b66207f518822bf71a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000272v1_decoy LN:2279 M5:47fde7cc81a14c0c6be4ccbfa3312015 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000273v1_decoy LN:2276 M5:35e9863bbef84bef6634eb206bc66c15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000274v1_decoy LN:2273 M5:9e8590286f229ad55bf921bb4d7236f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000275v1_decoy LN:2262 M5:f184b3c6054e080672a50e932da0aafe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000276v1_decoy LN:2254 M5:06e878f736f352fe167cc033f030b492 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000277v1_decoy LN:2252 M5:af9e9099df9fd3abe01d3ab305c9d65b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000278v1_decoy LN:2245 M5:8f7d8cb82a282dc326d4bd286895492d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000279v1_decoy LN:2239 M5:ae67f16bc2c56baec5093246804b3df5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000280v1_decoy LN:2223 M5:bffd2399ce899d9fa674d826311500f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000281v1_decoy LN:2220 M5:926bf451304bc000be7146acb11c393e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000282v1_decoy LN:2218 M5:adcddfbd560a42060c45d80c751787c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000283v1_decoy LN:2215 M5:706580b59cf8322b639309fc6110d094 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000284v1_decoy LN:2213 M5:7145c3c0ac2cc197f7d0fc0fb18d6c1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000285v1_decoy LN:2203 M5:0c6c215de5d00669ece9d0d461b7b5c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000286v1_decoy LN:2200 M5:a724f88e94788f5e1738a038d67d8d7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000287v1_decoy LN:2197 M5:fd0cdd36334762ca58e7b82b6ebf802d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000288v1_decoy LN:2194 M5:441ebd8ba7d0673bebf054e6ce9b405e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000289v1_decoy LN:2183 M5:df57267be3acda36409e42dd3c0da306 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000290v1_decoy LN:2179 M5:8bc6beaec162ccebf341b6c46ebaf3fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000291v1_decoy LN:2177 M5:d0d5b33e946654d9b23402cef3f10822 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000292v1_decoy LN:2177 M5:bc189c463b5d9bae5c71afa304910390 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000293v1_decoy LN:2177 M5:c74d19e91cd80fb55bc91184bdc0eac4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000294v1_decoy LN:2168 M5:c828de6bd73d4226b924cbe268ab5d35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000295v1_decoy LN:2160 M5:33980619d2c675019c4fb26681973f1f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000296v1_decoy LN:2155 M5:40e793695b37b027d9d893448ad20eac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000297v1_decoy LN:2144 M5:55b3946760e337f7fa9358993879d5d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000298v1_decoy LN:2143 M5:5c8fe70b46ce7d299039403820af18c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000299v1_decoy LN:2136 M5:7a28362f930fcd9a245cc239750dd1d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000300v1_decoy LN:2134 M5:285c47826e725f4442c18898156ac4fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000301v1_decoy LN:2129 M5:b4ad7d61b3d8b5b5f03100792231b056 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000302v1_decoy LN:2128 M5:a6fd1741e7a81251829a88549717a433 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000303v1_decoy LN:2125 M5:c95f162916242e94c057ec50e3f666e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000304v1_decoy LN:2125 M5:cf878bbb13f4cb8f6ad2f6134d4152f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000305v1_decoy LN:2122 M5:ffc29d2524335853c556eac4b936ac47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000306v1_decoy LN:2111 M5:13ad53d0306dcdc84cfbe5af890ffa7f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000307v1_decoy LN:2106 M5:2705f017f46d301002f0ccf08933080c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000308v1_decoy LN:2094 M5:dc17db769fee486df656f8334528abba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000309v1_decoy LN:2093 M5:61b8e15e0c011168970bf67fa28a893c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000310v1_decoy LN:2088 M5:4a0f2b01b92451953bcb14f94874625a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000311v1_decoy LN:2086 M5:560b32a4aa380573107a95fe8344fcbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000312v1_decoy LN:2086 M5:f4a368ddba66f5647c78853a2080c7e1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000313v1_decoy LN:2084 M5:90b16478fad5417ff33d03ed3cdb9897 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000314v1_decoy LN:2080 M5:eb02520ddd2b898796bf56257623ff11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000315v1_decoy LN:2079 M5:214af8bfae249648407394750763140c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000316v1_decoy LN:2076 M5:b2439d0b325e4cd30b1869e8e17005f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000317v1_decoy LN:2071 M5:d8e3a93de5b5c8fa58e8785c44e165f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000318v1_decoy LN:2066 M5:03ab659ca0a3d031ed57f5b71c40b7bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000319v1_decoy LN:2061 M5:b7df3a4252d3ed398842dacc1ef5119d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000320v1_decoy LN:2055 M5:3225edb2d4dc98b7b0cfd91afeacdba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000321v1_decoy LN:2053 M5:d0f66764a23cc8c03b6e0b1b8dcd2aec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000322v1_decoy LN:2040 M5:a53241c8700359fdfc69eff381d88829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000323v1_decoy LN:2036 M5:8b83d6b87f9d9045336bfe2d4f2d638f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000324v1_decoy LN:2035 M5:641af824694766c85122b263dc1b3649 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000325v1_decoy LN:2034 M5:7f2f9c9fa94f3acab772792c44b4c167 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000326v1_decoy LN:2032 M5:1f32623318d9221ee867209755a538bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000327v1_decoy LN:2029 M5:053ea4692acbe04aa98a6f331417531f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000328v1_decoy LN:2025 M5:930554d67c2f289a7f2bbcce35c88e75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000329v1_decoy LN:2021 M5:b3cda19a888b02b135de2538d4a74936 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000330v1_decoy LN:2018 M5:abfba957d4a6107fa109f1dd5a572de9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000331v1_decoy LN:2015 M5:0ccdc46d98d147f9b6bb6808f723d28c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000332v1_decoy LN:2009 M5:634f88805091cb15be16b1af5e720775 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000333v1_decoy LN:2007 M5:957b5291471bee32d4771292a611cfa9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000334v1_decoy LN:2005 M5:6d2a28c1dcd5377a19f5768b3fa75ad2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000335v1_decoy LN:2003 M5:7fcaa8fce3cf7cda00a42df29b938b6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000336v1_decoy LN:2001 M5:e28b02249a274e4b98551241e243fcbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000337v1_decoy LN:2001 M5:4718723746d62e7eed277db09d01884a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000338v1_decoy LN:2000 M5:7071be152f29ebf4ec4cfede2d44d70a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000339v1_decoy LN:1996 M5:21924fac8b9023e37be232641581d24c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000340v1_decoy LN:1992 M5:462035d8f8260ac9d68132b5ac63ceea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000341v1_decoy LN:1985 M5:80c971eec06361d4428c1c731da5d2eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000342v1_decoy LN:1981 M5:6f5d885e4d0a0476e309c004c8d7116c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000343v1_decoy LN:1977 M5:07b50b0be202b0e56fae3ff7b729fcf1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000344v1_decoy LN:1971 M5:ec1eccee490917513ffa0844c16cd648 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000345v1_decoy LN:1968 M5:a44124ee81131e9ba181e4d57343b933 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000346v1_decoy LN:1962 M5:a46b7187d8afab3b6711d2b57dbb649e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000347v1_decoy LN:1961 M5:391b9551b7df1ea41abd51c70c6391ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000348v1_decoy LN:1960 M5:2272602c288691975c385900ff1871d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000349v1_decoy LN:1960 M5:92f15826c95eeb01e4b619c7b646a17a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000350v1_decoy LN:1954 M5:98742b24ea14c25494dc15620ed8d346 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000351v1_decoy LN:1952 M5:5d5e3c8f90d84b8f2e912de53d0250a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000352v1_decoy LN:1947 M5:f5e22c20cf8f7956480ff337ad36be24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000353v1_decoy LN:1944 M5:cd921451a9fcf4ec5d06cb74cee21605 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000354v1_decoy LN:1943 M5:eba8670102e02d674c11f1779a39338e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000355v1_decoy LN:1941 M5:79a20867ab6678a0eb6a1bddd2d467f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000356v1_decoy LN:1937 M5:e17159dcd1117f3bb92bebb710740ba2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000357v1_decoy LN:1934 M5:9266a855ef31e94c5f77d277055f2125 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000358v1_decoy LN:1929 M5:11b07e8db80b814bbcd4814bebafc177 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000359v1_decoy LN:1924 M5:e9df9c6169849c4d69eb8a286f274eab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000360v1_decoy LN:1924 M5:5152172dba1a32a5529708855c21201b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000361v1_decoy LN:1923 M5:22f23fe69e62cdfb4304b679a6916bad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000362v1_decoy LN:1921 M5:b5eaf4b290ab9cf157680d65e640a5a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000363v1_decoy LN:1918 M5:9dedcf6b3a849e4c681f05753c2597d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000364v1_decoy LN:1915 M5:a1c06309d5103a00f8c5cf1847f58856 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000365v1_decoy LN:1915 M5:7a8b1fa154de78062577f95bcbf9cd7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000366v1_decoy LN:1914 M5:6db99643422d9ef62392ced193881137 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000367v1_decoy LN:1912 M5:61c61bda79ca84060bd63c678715b83c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000368v1_decoy LN:1910 M5:64edcf78348cea32c4e946329efd3ff9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000369v1_decoy LN:1907 M5:9266a29087762dab9b2c3f0065838122 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000370v1_decoy LN:1904 M5:f753bc41e46a7b0a9a9c63055a0553fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000371v1_decoy LN:1897 M5:df2a02d92f1a99000001bd1979b387b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000372v1_decoy LN:1891 M5:1664892a75f937da1e68f5c28f0be6f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000373v1_decoy LN:1890 M5:ad597d36bffdf82ff75f444e98be4928 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000374v1_decoy LN:1888 M5:570f07c26f0d742b21502cff22b7d2cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000375v1_decoy LN:1888 M5:a85dc5b82df805bdd2ee38b94de6133c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000376v1_decoy LN:1885 M5:d5cfea6c2a90821c0bac19bb1b81c97b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000377v1_decoy LN:1881 M5:cdcde92ccd92dd4531ee3ccae640577b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000378v1_decoy LN:1879 M5:fa3996c5e3cb86b5904ad5ab423f06ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000379v1_decoy LN:1877 M5:4659566201687f420c913a424ff09d62 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000380v1_decoy LN:1876 M5:e619de3bcb3f53147ec25a74324350be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000381v1_decoy LN:1876 M5:7d297256bbb1ec6cdc08e447670e69d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000382v1_decoy LN:1874 M5:bd4b0fff3b0f9b3c27bc270d80d2d91f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000383v1_decoy LN:1872 M5:d337922792c71f4bb3ec1c522519d7cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000384v1_decoy LN:1869 M5:95a4dae294e133dca09afd04559a3d82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000385v1_decoy LN:1866 M5:38b2fbf522a772de9e5971e2c248d773 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000386v1_decoy LN:1865 M5:a2b125ab6d06ffdfbfde0a2899a63d38 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000387v1_decoy LN:1865 M5:eeb193e267c0aad102b5a8c55b899094 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000388v1_decoy LN:1865 M5:a21001e6acebfcf03c2f187db59bca58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000389v1_decoy LN:1862 M5:e1aa83bd329fed4cea1a31c2b26605cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000390v1_decoy LN:1862 M5:e80fe8b2857e4e57c40cff1a604ca905 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000391v1_decoy LN:1859 M5:e85c5d8da9312ccb56a4ecb47e7cb397 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000392v1_decoy LN:1856 M5:d1448f2aeede93e71be4fa57f641c1ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000393v1_decoy LN:1856 M5:dcbc9c61d537f450dd4fae3b11f71d19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000394v1_decoy LN:1854 M5:a427d47a812c6fe6c9d26190b4b83f7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000395v1_decoy LN:1850 M5:876c26621463a5218a5953d9be4d0810 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000396v1_decoy LN:1849 M5:4797d275b03add54ab91c5b8c318a7e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000397v1_decoy LN:1849 M5:707d492cfa678968ded0e2306392504a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000398v1_decoy LN:1847 M5:06eb26d8459f3e43735ded45aa07a2e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000399v1_decoy LN:1839 M5:1ec1c61f264cc1ec9596dab78ea77adc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000400v1_decoy LN:1834 M5:c268a5b922576efd86cb97619df6fb55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000401v1_decoy LN:1821 M5:37647f03de6c012f655cbffbfbe570b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000402v1_decoy LN:1815 M5:edf2017fafb77c03c7f392ec8489ffae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000403v1_decoy LN:1811 M5:60131480b353a90b21d6a47f52a7d1eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000404v1_decoy LN:1808 M5:b4009abb588476a2593dd27cef872705 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000405v1_decoy LN:1808 M5:ef9e792232f15cf2b18c4d4a7ce99253 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000406v1_decoy LN:1807 M5:09de8b5234448cff4c1e3defd30ee794 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000407v1_decoy LN:1807 M5:212f6e4df329ece3ab38c483cdf02535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000408v1_decoy LN:1802 M5:291bcca126e0b971eaa6fde409109815 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000409v1_decoy LN:1801 M5:12ba0451f91998e31fd25003c892102b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000410v1_decoy LN:1800 M5:d47cda8c33b62a63e40f02664d4811d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000411v1_decoy LN:1795 M5:7f941c23c25bebc1937eae96aa5e98d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000412v1_decoy LN:1794 M5:1354d0a5f0d586b01f493802f991dd7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000413v1_decoy LN:1792 M5:7b03b07cb1cf327205fb693d3ace8a42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000414v1_decoy LN:1788 M5:36d568b75f9e3cf031e037043ac02384 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000415v1_decoy LN:1786 M5:393fd0366a1270f611866e1fb5af3cc1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000416v1_decoy LN:1782 M5:2652e35a4315660b304c6b7522e5f7d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000417v1_decoy LN:1782 M5:c7c0bd282280cb9eb969940cc3b68acf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000418v1_decoy LN:1781 M5:5a9a78f89d320fbabd4693bd232704a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000419v1_decoy LN:1781 M5:75304d27b61d40a759bd36190202926a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000420v1_decoy LN:1779 M5:95cf227ee90e6dced27e307b52d240fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000421v1_decoy LN:1777 M5:c1fd358a71fe269cee210b27840c272e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000422v1_decoy LN:1764 M5:5db13804da88f18750e478f6682b83a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000423v1_decoy LN:1762 M5:bcf551251490bd2c7ab5a99232bbbcf0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000424v1_decoy LN:1755 M5:c8de78702f0a0471f26cfe586a8d9263 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000425v1_decoy LN:1749 M5:9c843f2e59ba4aeed3517c0aa36ed8c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000426v1_decoy LN:1747 M5:431f95d76dc16b369e6765e38ae92ee1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000427v1_decoy LN:1746 M5:1641a71638dd63211280e6bef22e6a4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000428v1_decoy LN:1745 M5:98de780057460a078034b25725bad406 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000429v1_decoy LN:1744 M5:16ceb3de9929ccc268d4aeacb8f20439 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000430v1_decoy LN:1742 M5:6c61a88798f9fe78567c879793385c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000431v1_decoy LN:1740 M5:e2ecdbd050ed1413eb2a07f7d9ebc8c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000432v1_decoy LN:1740 M5:7f1d544cca143be6dd353cf3efb80028 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000433v1_decoy LN:1736 M5:18493fcfd6ea161acd237867aa7337cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000434v1_decoy LN:1735 M5:afe0292acad0a1460fbad00971606090 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000435v1_decoy LN:1732 M5:5bba5da58b43755bdc14ab286a8a5cee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000436v1_decoy LN:1732 M5:680818b10726c68c5917f48456528d0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000437v1_decoy LN:1730 M5:836c13c8ad60355227f91a1b5308ea33 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000438v1_decoy LN:1727 M5:f5fb0c58f9b4fa60b1eeccee56f0cd56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000439v1_decoy LN:1722 M5:9a47086cf6334392302ea1713fb68c57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000440v1_decoy LN:1718 M5:dcc0114d2cbd5f165da52b4610aeb6b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000441v1_decoy LN:1716 M5:59cfde6a838acc68c55e5a781f1308fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000442v1_decoy LN:1710 M5:cf384ae5b546344ace5aa4d662c6ac0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000443v1_decoy LN:1708 M5:4df6e9cabebe481359ac95881b277f74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000444v1_decoy LN:1707 M5:971971b7547432d52662e516989b1596 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000445v1_decoy LN:1706 M5:9c926b3b414cdf578a7af119dc3d32bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000446v1_decoy LN:1705 M5:91d17f22298838daf727563421004b33 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000447v1_decoy LN:1704 M5:64c4b3b7b16fb06e268d70c576c18be7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000448v1_decoy LN:1699 M5:e50192f7290b158ee82f04623e78180f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000449v1_decoy LN:1698 M5:938f5fb6e35906afc6601c756e85684e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000450v1_decoy LN:1697 M5:670cd517d0cef208acfe5f83f4f08e40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000451v1_decoy LN:1697 M5:29b287f217fd519ac38852bf9f3b89cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000452v1_decoy LN:1695 M5:42ba5d9b4331876409b5509b694d32f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000453v1_decoy LN:1695 M5:a98d7b845be68d05f42b70b19d87ecbf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000454v1_decoy LN:1693 M5:bda60eb625bdf4d5f8b0cb6ccb975c1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000455v1_decoy LN:1687 M5:27bc09a272621c3414cbe34cd809347d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000456v1_decoy LN:1686 M5:6f0aa7beab754a13ff566057d0641ae0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000457v1_decoy LN:1680 M5:8cba844ac8cc6321dba7652815bbd94d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000458v1_decoy LN:1679 M5:e2f908a05a86ddbda11acd668b7487e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000459v1_decoy LN:1679 M5:5a0c260602a6ab3fa76f49157966cf4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000460v1_decoy LN:1678 M5:54a34fdfb08cb07c1f51c8be679c6339 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000461v1_decoy LN:1674 M5:ced48cb3354e7f24d532fefc85a96319 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000462v1_decoy LN:1674 M5:4467091f25a983fc0f7d9d88bd351993 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000463v1_decoy LN:1671 M5:7cbbe8ba7b64b120b467c953851a7eb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000464v1_decoy LN:1669 M5:a3cdd6c546af035a3c9830a67c0bb056 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000465v1_decoy LN:1665 M5:1e245fa1bc113bab6305d0fc3cad2112 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000466v1_decoy LN:1663 M5:b1a1b5888971729811d7fcf9b06665e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000467v1_decoy LN:1657 M5:8a989e9803993317d80157778c71da54 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000468v1_decoy LN:1653 M5:bc73c770766d2b8deb017d234f5d7387 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000469v1_decoy LN:1652 M5:9559e20eaa71db947eb9645779c2c2e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000470v1_decoy LN:1650 M5:60a6f98d6f706aa9554c7b6ed3de2716 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000471v1_decoy LN:1649 M5:ce3eddf63b3aea572dd8e0b762b90829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000472v1_decoy LN:1649 M5:aeab25a6fcaf97cdcb319dff1550df0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000473v1_decoy LN:1640 M5:7a4f3084ac2ed72ea4f5e60260c77948 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000474v1_decoy LN:1638 M5:5c4753a4d69db9ff02e858c8ddbb8911 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000475v1_decoy LN:1636 M5:8970166c6ade7a2f8106159d5ee5c857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000476v1_decoy LN:1632 M5:67037d44662f2487a2e39e76ea3fef94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000477v1_decoy LN:1631 M5:3455484eacb9d4eaa7ed63b96b087c85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000478v1_decoy LN:1630 M5:c20fcc553e42922058f9f0e839f527ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000479v1_decoy LN:1627 M5:cf02dff4c16e81e47d1cc5ffdbf1b4ae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000480v1_decoy LN:1624 M5:93392bdc58b6376d5da876bae65be9e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000481v1_decoy LN:1617 M5:e8add50c6a06030a1dca84968a89d4b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000482v1_decoy LN:1616 M5:6d496ad94b5cd40c72f5362e446e22c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000483v1_decoy LN:1615 M5:bcc4bc611bdb483f2f925df072d50a41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000484v1_decoy LN:1611 M5:19f0a56814e718041b51733abc55a44c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000485v1_decoy LN:1611 M5:771186a23da9b9c2081773c5a6d73812 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000486v1_decoy LN:1606 M5:f6dc33d2578fb0ce6a560d5ee7b9b5cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000487v1_decoy LN:1605 M5:440c7d94624635647d771ce7f3833416 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000488v1_decoy LN:1605 M5:7e6682db43f2445cfc3b18ddecb786c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000489v1_decoy LN:1600 M5:1b3265b9aa7cae61d843ae0b09e2f3a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000490v1_decoy LN:1598 M5:8ef2cd8ef0749e5d753b552c1f2fc3d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000491v1_decoy LN:1598 M5:9bfcb4215c94e812ae4ead4fc804a63f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000492v1_decoy LN:1597 M5:8c06a1c635581dd76469e431bda358b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000493v1_decoy LN:1596 M5:9880ad7b13fdc3af8d8c81e3adf8ba43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000494v1_decoy LN:1595 M5:ec1ac1310cc7d4432ced7724829cbdba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000495v1_decoy LN:1592 M5:f2d436516525e67ce3aa61ec5273dcb5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000496v1_decoy LN:1589 M5:201a121b6775880be8593d2a9cef12cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000497v1_decoy LN:1585 M5:491aed38b1a89a77be7b2d1d30bd4fa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000498v1_decoy LN:1579 M5:2e63f3a1cf01e023c443b4478459db64 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000499v1_decoy LN:1578 M5:f9223dc0eaf125b8226c386bbca18647 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000500v1_decoy LN:1577 M5:3c9bc60202ddedaa3894d11a96f5429b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000501v1_decoy LN:1577 M5:c367b54edc2b83cb15946ac3c975ccfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000502v1_decoy LN:1577 M5:d7d24f1188f1d67db7215729a5c5b8d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000503v1_decoy LN:1576 M5:229d2aa7ab158e9b4bad158972029e55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000504v1_decoy LN:1575 M5:c8f35742cdde94078de3c3d84c130c42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000505v1_decoy LN:1574 M5:d0367db77d5a6bff49f54d4acd3d01e1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000506v1_decoy LN:1572 M5:06b66d904a7902fb764a3e661b9c8bea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000507v1_decoy LN:1571 M5:e3187302e0771a467d4e7d2b31669e7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000508v1_decoy LN:1563 M5:78aa7cd4461790084af50b1b80e1838b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000509v1_decoy LN:1561 M5:abcdf15d561b447b0bdedb366fb77d72 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000510v1_decoy LN:1561 M5:f9a7e72f7e382fa59a1d2c0c4d6edc53 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000511v1_decoy LN:1560 M5:bbfe4f1e02f2fdcc9d20e65e8d3da35d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000512v1_decoy LN:1560 M5:538f38f8d5e6495a85b6bfecf487ecc6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000513v1_decoy LN:1554 M5:8ae2f8b5f30a6c1762de005819965ec7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000514v1_decoy LN:1552 M5:392885482ea57d0e3f1311c3be95c89b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000515v1_decoy LN:1548 M5:1310bfff4743d36d7f8153b6663f2249 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000516v1_decoy LN:1546 M5:629769b2550c48e2a73115da95946951 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000517v1_decoy LN:1541 M5:76f0c1d1779803feb107f253ea555df7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000518v1_decoy LN:1536 M5:686a5b0fc214ac36df8da7605ffae4ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000519v1_decoy LN:1533 M5:e2bf8fa01d69d0ec7c7e1f6d040912c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000520v1_decoy LN:1532 M5:0c23895ba0df7ad7ea8f2b58313a0cdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000521v1_decoy LN:1532 M5:c9515245780a66ef482674755d38c592 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000522v1_decoy LN:1530 M5:5caa4ec6f260d2f960770b368909d78c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000523v1_decoy LN:1527 M5:b05daa30b4f2c9167aac9fde662de4c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000524v1_decoy LN:1526 M5:cfcd1e358a225fc7c2354b1bad52cccc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000525v1_decoy LN:1524 M5:08ec33c06085eb399a1e56f43d1d222e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000526v1_decoy LN:1523 M5:74f16c21c5a2372050d2f61595d52eea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000527v1_decoy LN:1523 M5:e7cf8c07771c8fa37bf4b6fbca555113 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000528v1_decoy LN:1522 M5:8f754d63b65c3c7a1e9a1ad5e439d2d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000529v1_decoy LN:1522 M5:51530101930cfdb66060d0686c4fed16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000530v1_decoy LN:1519 M5:dced229b77a1ea722aed13b4eb4e5b79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000531v1_decoy LN:1513 M5:dc49162a2d904001541bef4c7f7cd54f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000532v1_decoy LN:1508 M5:c183c701388b1a11f3cbf31ba2d84f41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000533v1_decoy LN:1508 M5:0d9b9c8ca5a3b58a13369e0a097f25cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000534v1_decoy LN:1505 M5:4e806d8438bd8512d22e24a026640d66 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000535v1_decoy LN:1503 M5:0b9c580f3d47c52b031cb00b9741c1a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000536v1_decoy LN:1496 M5:ebce7ee144631f93b7001740bff968ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000537v1_decoy LN:1491 M5:191de45ffda752707ef5b22c780675b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000538v1_decoy LN:1490 M5:2b8af44ac46088badbdffea0c0c3d368 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000539v1_decoy LN:1490 M5:378e070f5556e26fd1e89f1f21e2c35a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000540v1_decoy LN:1487 M5:7c84677ee13bffaac6c5c623f317619f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000541v1_decoy LN:1486 M5:501226e799037a04ea73a3be5bde460b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000542v1_decoy LN:1485 M5:8ec76a3f62b296d50ccff9ce4a9aa072 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000543v1_decoy LN:1484 M5:34e4860b41e4db3fe4ec16fdba4cb85a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000544v1_decoy LN:1483 M5:ca6b3496195a36f5f1a5a1de26bd9655 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000545v1_decoy LN:1479 M5:902f04a9f4b960cef80039434d00e63f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000546v1_decoy LN:1479 M5:16692f78928924e255aeb5b72a97ab21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000547v1_decoy LN:1476 M5:e765f1919b45a51913ed7d2f4c9a7491 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000548v1_decoy LN:1475 M5:fa46ec2fd14b9d99852d4d30568593ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000549v1_decoy LN:1472 M5:d03e8e717a38f0178037af0ca86aafb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000550v1_decoy LN:1469 M5:8ee65cdf657a82a381d7cb6caa4f3f5d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000551v1_decoy LN:1468 M5:bc6f74a7c8ffab037e3eab5ea88037a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000552v1_decoy LN:1467 M5:7d64a0f8c6675f07e9dec9b70a0afdd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000553v1_decoy LN:1465 M5:2e3b43fdc0d1784a2518dfe255384519 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000554v1_decoy LN:1464 M5:df762923ca57a0113032d663d3c97bea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000555v1_decoy LN:1463 M5:11aada1e695fe5177d9540b02a2d432b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000556v1_decoy LN:1463 M5:d3ab1903d41ac470157b0c4d4ed61933 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000557v1_decoy LN:1459 M5:bbadf4ad4f9a1ee8da95612868cfb018 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000558v1_decoy LN:1459 M5:bcd6dabc3d1399c379f3adf1cdeae332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000559v1_decoy LN:1458 M5:1781d0b5245fdca60eb63e40b293194d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000560v1_decoy LN:1458 M5:46a7c1c5c2e823abe406cf459179bfde AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000561v1_decoy LN:1454 M5:a7a571b77c5a922ca842288fc6734696 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000562v1_decoy LN:1449 M5:cc0f411395c55cc332ad0889e75eca80 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000563v1_decoy LN:1449 M5:184e7321ea1fcdc47df967c7c5d879f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000564v1_decoy LN:1448 M5:9cc22c1be7f706f6789fc994e46ddc95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000565v1_decoy LN:1446 M5:2be7af38d4e11bbf45397add5e8b29bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000566v1_decoy LN:1442 M5:7badb67269751abbac8f46b5704299b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000567v1_decoy LN:1441 M5:ee8162f4c41a8b15758b34b01d87e2d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000568v1_decoy LN:1440 M5:d4b0ebe0d4c6d4d270b5a5b7d1a5d7ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000569v1_decoy LN:1439 M5:ec8779a6ca200bbe41de6dd3630da10e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000570v1_decoy LN:1437 M5:3d29e003ab19ba610718173d23d26b37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000571v1_decoy LN:1436 M5:a7261a67e8f0dd3de7bb37e12ed74c3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000572v1_decoy LN:1429 M5:d9b8501a054b0ba4229f7ae1e74bf2c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000573v1_decoy LN:1429 M5:ddc6caafb94fef7d6209cdff64795226 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000574v1_decoy LN:1427 M5:9aca197fbaf212c69feea234780489a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000575v1_decoy LN:1426 M5:1e4c043b8c89e6c193c519db2531e6b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000576v1_decoy LN:1425 M5:846748418b1797e21e540d92fd794495 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000577v1_decoy LN:1424 M5:4fd0c37d4a586150a9301f2009c5c1e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000578v1_decoy LN:1424 M5:54ac14d019ced5f6bfe22948074afa9e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000579v1_decoy LN:1423 M5:3fdf802f805e746ac56f30d6d1a68708 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000580v1_decoy LN:1423 M5:7237c88f6ea636176c0287d0432a9732 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000581v1_decoy LN:1423 M5:e9eaf98ae51879086e24b98bea88df0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000582v1_decoy LN:1414 M5:34272cd5beb57237fb7a193f798cc2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000583v1_decoy LN:1414 M5:9060d1ca5fe447374bc2a1e69f4e3224 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000584v1_decoy LN:1413 M5:3298b158d1b1f933a0e2a292a1529e10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000585v1_decoy LN:1413 M5:59c1a460224d4414afdea6e15bd8b2e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000586v1_decoy LN:1410 M5:64228ed4ae27b3994019d9e0038f55a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000587v1_decoy LN:1409 M5:4d845a6ec097602753d860feddf23e58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000588v1_decoy LN:1409 M5:a000b425fd931ce6015497afb22efd88 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000589v1_decoy LN:1406 M5:0c059afc9f69018ba9da0b23aa8b9b75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000590v1_decoy LN:1405 M5:0c586f3eb4883fc1918171f471f5e5f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000591v1_decoy LN:1405 M5:cd72088875313abb75d2a891e35b7d4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000592v1_decoy LN:1404 M5:abf874737ff5cfa8f718112f32beb985 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000593v1_decoy LN:1404 M5:eb8f0a5cc692b80655ef58e2547a4cec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000594v1_decoy LN:1402 M5:6ee2ff095b70b42cd9c9b4e0efabca4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000595v1_decoy LN:1402 M5:f4d8da8a43b238c8e0646f5f0b52f89c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000596v1_decoy LN:1402 M5:8c7872a37fea0f290dc1bc82d975b894 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000597v1_decoy LN:1402 M5:d0d9fdcbf88b68b1dec6f806c72fed32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000598v1_decoy LN:1400 M5:6634e5294042b88996256c18dfedb84d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000599v1_decoy LN:1398 M5:fd8634e8ef145e4987e4520f150aa3f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000600v1_decoy LN:1396 M5:25350d57a6af0ff5c2c4c9c49b44ce71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000601v1_decoy LN:1395 M5:6aedeed255c7942bf7499cf1627f8cbb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000602v1_decoy LN:1394 M5:535e79d7dc446b1c3d57759eee6e4f79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000603v1_decoy LN:1393 M5:300693e040f4152f622506cde18980f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000604v1_decoy LN:1391 M5:8a946b3527d782026e0dc90559017170 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000605v1_decoy LN:1389 M5:7a9e96381bae2eb52e9e340616f3d40f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000606v1_decoy LN:1389 M5:b6ee1b27e065ac10608cc2a75f23b552 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000607v1_decoy LN:1388 M5:ff5370f5970d37597e705a08fca533b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000608v1_decoy LN:1387 M5:445d8c03bad3cc26e6adeb0047d18078 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000609v1_decoy LN:1384 M5:e885e52d68b2de3b4a858205e3e642ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000610v1_decoy LN:1381 M5:56708189f55fba9d8406fbd9eee51424 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000611v1_decoy LN:1381 M5:c7791c86ba8e059389aaa3919f1ed24b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000612v1_decoy LN:1379 M5:040a6029ad56ae20245dd1757c313f19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000613v1_decoy LN:1377 M5:cc1f3e1b6fbcf7cf33ba399c84ff0fd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000614v1_decoy LN:1376 M5:73782073ee88b30e5184f8c58b162395 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000615v1_decoy LN:1376 M5:b49adf2ce996df0a067aa5afccc4d593 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000616v1_decoy LN:1375 M5:ebef890f7fb5122bf631a5489d6d46a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000617v1_decoy LN:1374 M5:d165c7fd94b756243531a20cd030e7f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000618v1_decoy LN:1372 M5:99bb1f26eea260757df2246652e20ce0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000619v1_decoy LN:1371 M5:fdc45233952efe3a4444e4fc118e9bd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000620v1_decoy LN:1370 M5:023468d3dca8b3726de68eb85c7d2301 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000621v1_decoy LN:1370 M5:fb5072d4c89ac94df7141cacd9701034 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000622v1_decoy LN:1366 M5:5aee91a1f323fd56c65017a1878fae17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000623v1_decoy LN:1363 M5:6b6ecc4a02c37b540c86cd51299d13da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000624v1_decoy LN:1360 M5:06cd979553eb7045f14feac8e6f2e2bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000625v1_decoy LN:1356 M5:d4cf98566c01e8715f3f2d3883ee0960 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000626v1_decoy LN:1355 M5:1dfb4921c6f707d06505f67e59849603 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000627v1_decoy LN:1355 M5:0d374e2ae6601c90f80dad8772daeec6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000628v1_decoy LN:1352 M5:474bb6fe17aa82dbe052602181e2c342 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000629v1_decoy LN:1345 M5:be38a1cda1a6e1ae5e323c69f41169ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000630v1_decoy LN:1344 M5:5f167804d39afced5ca6f11bdfc4e79e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000631v1_decoy LN:1344 M5:a8c1265cc335c37e42363c32f7004283 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000632v1_decoy LN:1342 M5:7aad5f98492b8fca78e060b6be39462a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000633v1_decoy LN:1342 M5:f3ffd07c1b2dd961b6182008cc89dca9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000634v1_decoy LN:1336 M5:64e80f53b6b20fe69e1f570c4bf46bdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000635v1_decoy LN:1334 M5:49441fe73d5a6c1424175db5c183d5f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000636v1_decoy LN:1334 M5:7d75d91acde1b12b627eec4355428b3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000637v1_decoy LN:1333 M5:e4ece619ebb5ab86de6fab33b38d5481 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000638v1_decoy LN:1332 M5:7135701f246e43df19f5aba147d6ffe4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000639v1_decoy LN:1328 M5:fbb7b0f582ebca6f3cef730730d1ba0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000640v1_decoy LN:1328 M5:62be463086e26b1df7d57735080ccdad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000641v1_decoy LN:1328 M5:14eb9b729a7e8e201661d1337b6c986d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000642v1_decoy LN:1327 M5:7758f1665792870c0c087b3c3dfa6f6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000643v1_decoy LN:1325 M5:4e1088e1aa76be60fab929e87bddd522 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000644v1_decoy LN:1322 M5:af3b1f03c49d83adafa3d8f2d6874c24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000645v1_decoy LN:1320 M5:446dcf62ddc2538c64ec6aa731ea150b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000646v1_decoy LN:1319 M5:56748fdfa4712830c7af4c68f4759228 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000647v1_decoy LN:1318 M5:8eaa0a6e0ed839c74aab55d260c6fc46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000648v1_decoy LN:1315 M5:56712d4e2ff952bae0ab0ddd610f253d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000649v1_decoy LN:1314 M5:d3e12fcc460574d688e5bae5d2442b1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000650v1_decoy LN:1313 M5:b547545a4b0358b765cecfc76a24f5c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000651v1_decoy LN:1313 M5:6b644257e459efb9331cbf248eb360a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000652v1_decoy LN:1312 M5:49650bf9d34993f3734ff8be22a21d8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000653v1_decoy LN:1310 M5:a4ce42eeaf93dc12fd2c1d548ecb8ec1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000654v1_decoy LN:1309 M5:b6aa3601c472a96642590f2556fd60f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000655v1_decoy LN:1309 M5:86d4783a9574d129cdf2d96b81899a69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000656v1_decoy LN:1307 M5:f7f361b3f660b392044fad24ffae29fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000657v1_decoy LN:1307 M5:754ff5c46ace6aa00b6225c1395948bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000658v1_decoy LN:1305 M5:93cb281ea84aef36a85cb9950604dd0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000659v1_decoy LN:1304 M5:12d269dc2ce62735236ae94e1f20075b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000660v1_decoy LN:1303 M5:48fbe06e5f32a0378e9bb9f94280b087 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000661v1_decoy LN:1302 M5:21449d3d68824fc9c13706be068c9b2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000662v1_decoy LN:1302 M5:8b61707178e6e8435c171f9af9103412 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000663v1_decoy LN:1301 M5:00401a0950f66bdb8079810e7cd7ea17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000664v1_decoy LN:1301 M5:da9b6adf8123090f1132c9b33c3aa8e1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000665v1_decoy LN:1300 M5:a6e3addcf5e77b6d35b918c3d4b07184 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000666v1_decoy LN:1299 M5:74108c185dba89f41809a3192d33baec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000667v1_decoy LN:1297 M5:4aa3c2f67ac1c8f495575e8560808f7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000668v1_decoy LN:1295 M5:c0e3f662ea9b92faded08da52ec79ba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000669v1_decoy LN:1294 M5:acb9567104820929d7f17199b614c243 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000670v1_decoy LN:1293 M5:d58180a24710ca20cd90857426fba9cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000671v1_decoy LN:1291 M5:0021de79f69c7e6f7be872209251d8a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000672v1_decoy LN:1291 M5:ec57c06e1967b151af9716613687bf06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000673v1_decoy LN:1289 M5:9e48e5eb17a1e58951e1b652dd9f44d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000674v1_decoy LN:1288 M5:93d19765c9dd00919c6cfa7d93347c46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000675v1_decoy LN:1288 M5:71235a1d58334d223edcaa90fefacfdd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000676v1_decoy LN:1287 M5:a76f2f42317a6ab2cb892a72174adb45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000677v1_decoy LN:1287 M5:f334340b46a994fa73de757843dce680 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000678v1_decoy LN:1287 M5:e2d24061f1801ed1293ec0b863363b3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000679v1_decoy LN:1286 M5:23647de37c2ff39cd67aaef8a5580814 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000680v1_decoy LN:1283 M5:1dbcdc4ac713f81604583fa6b6106bb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000681v1_decoy LN:1281 M5:bb3d85c707984bea66a348264a710aa3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000682v1_decoy LN:1277 M5:5c2e53fdc0f5cd26c68ab66f14416b3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000683v1_decoy LN:1274 M5:f1d20984b2bcf2b2b0e005c54fff514a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000684v1_decoy LN:1270 M5:0e776546d49756c788dae25d1787fb00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000685v1_decoy LN:1267 M5:e52038740e15a18dd9b464342630faed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000686v1_decoy LN:1266 M5:9b437657983b2138524382ca0130b93b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000687v1_decoy LN:1260 M5:0a5f065c6de74f1ae3424582269c48da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000688v1_decoy LN:1259 M5:78788ef8ba3807f9a105d4a9a55a3c65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000689v1_decoy LN:1258 M5:4860c125f57848f7afe40d583f7477ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000690v1_decoy LN:1258 M5:2713e855b2f8f1734239f0523b6200ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000691v1_decoy LN:1258 M5:619c058b99f936b291f949550793c9f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000692v1_decoy LN:1256 M5:c21ff94783721fb59f3db81a80c1e0d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000693v1_decoy LN:1255 M5:8c83cfffa25879e35ab28858fa33d70a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000694v1_decoy LN:1254 M5:b0caa977dfdfb73b5e1a58b423ff4a8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000695v1_decoy LN:1254 M5:e2dd86e353ba1cebb9ee6ed4e35b54f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000696v1_decoy LN:1253 M5:5036e5442498d2a7fdb0f573f258cd60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000697v1_decoy LN:1250 M5:a082ce0af37351135354a3448f4e1e21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000698v1_decoy LN:1249 M5:d47b3d78169ea825e882ac16b3117146 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000699v1_decoy LN:1248 M5:208d107183937e7c221f38693342e39d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000700v1_decoy LN:1248 M5:0f92b053b9f7b2d596ce45e73486fe32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000701v1_decoy LN:1247 M5:38be4b2a0f1e5aa9c09b662eee046034 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000702v1_decoy LN:1242 M5:05cde0965d9330b1048d4d3c3d3d700c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000703v1_decoy LN:1242 M5:0861806c0301513ad259fe070d39e0dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000704v1_decoy LN:1241 M5:364bee56428db3836e130cf7a18b713d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000705v1_decoy LN:1241 M5:854cf124e49f41012ddbad98fa6676d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000706v1_decoy LN:1241 M5:1f8ca7e72524d4e37948801d7b5a8afe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000707v1_decoy LN:1239 M5:f24cb34121b984ca68855edd34574629 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000708v1_decoy LN:1238 M5:d209df786f3b1d1ad941874631548588 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000709v1_decoy LN:1237 M5:b4a98205bda995826a33cefc257ca695 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000710v1_decoy LN:1236 M5:e889a8feacb30e59ab4f4b36b7d9c1e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000711v1_decoy LN:1235 M5:1d00a257b98ad31640bb5ba492b84179 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000712v1_decoy LN:1234 M5:33721b9972767397365deed771dbf073 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000713v1_decoy LN:1234 M5:036d24e0ed6b0b50f1cfbd3f587c4cc2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000714v1_decoy LN:1234 M5:a7ddd63607d708a84ae2b88906989e89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000715v1_decoy LN:1233 M5:9eac1d4d910f6c899ce66d778f2f1151 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000716v1_decoy LN:1232 M5:0b8643f1a24c79b3ecdd1a67db0cc86a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000717v1_decoy LN:1232 M5:c5a5a989ac7252d8392936662ea77847 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000718v1_decoy LN:1231 M5:ac3030bfebae64338eb50915e6c8bd90 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000719v1_decoy LN:1230 M5:57901862b298a5add08f5cca114254dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000720v1_decoy LN:1228 M5:425fcf156dc340ca958e76e678b5b1e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000721v1_decoy LN:1227 M5:8202dba5ecf55e01c2eaa23654a65b28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000722v1_decoy LN:1227 M5:84410313c42ed3e74a0db6afd68aea27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000723v1_decoy LN:1226 M5:abbfddc0795df55c6e15788256752132 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000724v1_decoy LN:1224 M5:a62c3a744a6da312ddb499103c0e5dd1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000725v1_decoy LN:1224 M5:8de8180c87074519ebeedefce23a5bd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000726v1_decoy LN:1220 M5:f04fd8bfac48f74f1ba90d5f1730840b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000727v1_decoy LN:1220 M5:f0dfe089c3f7b049c98dc63e934ff352 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000728v1_decoy LN:1219 M5:e7c7be67e8022eceeb1748e1bc896244 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000729v1_decoy LN:1217 M5:d54b84b201adc65a8f6c321c0a9b82b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000730v1_decoy LN:1216 M5:2a49da07788e874c277958962ecb0df3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000731v1_decoy LN:1215 M5:c382bd37421a81163d88288a6f7cde1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000732v1_decoy LN:1214 M5:2987b50923434c160ee2c370f1a0665f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000733v1_decoy LN:1214 M5:2cef32c11c190dec442c6760ce3b95d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000734v1_decoy LN:1214 M5:3320cf99748892c60e02c948326286eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000735v1_decoy LN:1213 M5:ed1d21ad71609ae43a9b6bcebb49639f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000736v1_decoy LN:1212 M5:b586f3157d6a08d059ff88c2a8b09110 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000737v1_decoy LN:1209 M5:7ba7bce4d6531a5524c73a86b5bedbb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000738v1_decoy LN:1208 M5:04bd45b790033b8311ed85dea3015e01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000739v1_decoy LN:1207 M5:347ce8f1f6a746892189ab8494e8aaa8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000740v1_decoy LN:1207 M5:707de4a5497ea34c4e4f0bc0c85de3fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000741v1_decoy LN:1207 M5:be1fcf2149a75c654ccdcd7bdf0f6fbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000742v1_decoy LN:1206 M5:4e1effd0109053a328e58366f9f97082 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000743v1_decoy LN:1206 M5:9f9dfe453260eb10828d18745f7f5dcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000744v1_decoy LN:1205 M5:855e900b59e0654686ce1a3d9955d650 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000745v1_decoy LN:1205 M5:137e80b53681aa0957f4489dc3bebca5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000746v1_decoy LN:1204 M5:d5ccfc0afa0a8ffeb39566a3edbd5831 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000747v1_decoy LN:1204 M5:2d8e3051fce1f6364064a61a1015f902 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000748v1_decoy LN:1204 M5:4ae1aece0937c17d93e0b54aab43444f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000749v1_decoy LN:1203 M5:108a33f55fef0274c3265bbadc509de9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000750v1_decoy LN:1201 M5:6ca12ea72ce31843c3a72b1519b0f252 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000751v1_decoy LN:1201 M5:85e6c0c98d00cefe52487084168379f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000752v1_decoy LN:1200 M5:6db13990bde5be0862c8524915fea770 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000753v1_decoy LN:1200 M5:e2708863bd36e41c2e8ea5a6b3ec5110 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000754v1_decoy LN:1199 M5:beae786e8598f79032fc8c16208aeb00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000755v1_decoy LN:1198 M5:0a56caad49417b3587e394dcf70fb6f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000756v1_decoy LN:1197 M5:7f43dc6c55686b78a0ca14bb83eaf8c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000757v1_decoy LN:1196 M5:ed9e0446d6bb51755db408158805d507 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000758v1_decoy LN:1195 M5:cbb14c85e5696a49ce697e346634e422 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000759v1_decoy LN:1194 M5:af5aad17aff7705f0fd96e58a32a59d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000760v1_decoy LN:1194 M5:b1a7eab6e2cc0e62933274443fed0a24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000761v1_decoy LN:1191 M5:23fae8306c0b4a5bf7d0941294736058 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000762v1_decoy LN:1189 M5:5b7ba9e9888da831b0aa4565b412bcc6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000763v1_decoy LN:1186 M5:b39edd9fdfea3b1d9644fa805f33a2b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000764v1_decoy LN:1186 M5:ad284b4b4daf92a4456309e77375468a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000765v1_decoy LN:1184 M5:98516b9021a46bcc79d7386ac6dc34c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000766v1_decoy LN:1183 M5:64d3e55e37f2e86e15c96ef1d879bba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000767v1_decoy LN:1183 M5:bb4656c8fbc2436252c45a1da9ec9583 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000768v1_decoy LN:1182 M5:fef2856f46d2c7724e666eafdd402ebc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000769v1_decoy LN:1181 M5:987931dd2bf6bac95e341d207f146623 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000770v1_decoy LN:1181 M5:eac4c9bfba221a54e6f9e50cbda276fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000771v1_decoy LN:1181 M5:cf5eee43e4ec7820ecca7ad7864f52ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000772v1_decoy LN:1181 M5:0b58fd78215049a25bf9904c8d82de05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000773v1_decoy LN:1179 M5:bbff47313bf9094c388338d41292f0da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000774v1_decoy LN:1178 M5:0e47d0853364f93c33da6738f79bd494 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000775v1_decoy LN:1178 M5:f12f849bba7e72b4f1f60d7aad6a21a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000776v1_decoy LN:1177 M5:1b10327e63ec134bcc76d1d55f9e78d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000777v1_decoy LN:1177 M5:c87caf65afb409c1775c034ed6b2c791 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000778v1_decoy LN:1171 M5:d25c5de51ec9619b03cce2f95298e8a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000779v1_decoy LN:1171 M5:3e4f5e7a0753a3239b3bc0d49eeaf461 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000780v1_decoy LN:1171 M5:b988438edbb2bbad2f8c1dd32c116f59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000781v1_decoy LN:1170 M5:41b5e67b7143e5bf81dbb61b81a230a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000782v1_decoy LN:1170 M5:ac3de3666d0730b5fb7f44a84f9c4d1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000783v1_decoy LN:1167 M5:7187d1e3ed138db9f1610a9c4dbefeb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000784v1_decoy LN:1167 M5:a1f7192900c80cfabbb39df8dc8d3c48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000785v1_decoy LN:1167 M5:80ff0c82d9a5bc156c3c0bf340bd68ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000786v1_decoy LN:1165 M5:688f5bf8eb90c874eda7108fcf283889 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000787v1_decoy LN:1165 M5:f768117d9e7c2526c123ea228e2cafe9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000788v1_decoy LN:1162 M5:039765c983a107557b8c3ec0a025e44c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000789v1_decoy LN:1157 M5:220dbbeab5a5d61415cdfde9f50b5766 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000790v1_decoy LN:1156 M5:23d66ea0a7a7d160c9413d93f5ad0162 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000791v1_decoy LN:1156 M5:5cb979a509d0b6052c6e0a55be36cc00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000792v1_decoy LN:1154 M5:b0ee554cec6a7fca1a6556932643d8a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000793v1_decoy LN:1154 M5:0370a3a0105a0683cbd802403418f170 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000794v1_decoy LN:1151 M5:8e0e1ffe5b02de8878bd4d564bb6323c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000795v1_decoy LN:1151 M5:7bd0473f38ad03caa52a001a9fbb7354 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000796v1_decoy LN:1150 M5:5a37e3660ee2c75c170b2b5b40e9fb6b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000797v1_decoy LN:1150 M5:490b01f6455790bd5df9ffc337520f37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000798v1_decoy LN:1147 M5:20582882471f3bed3cd0120b82323ac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000799v1_decoy LN:1147 M5:0e5917e383190727d973a070137a2fbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000800v1_decoy LN:1146 M5:4bd3ad205dd76c8fb5e52879cad2ae96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000801v1_decoy LN:1144 M5:b97e8d5a835434eb2a718b9e61b8108e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000802v1_decoy LN:1144 M5:2df1004e75f2e124d3578d82432b9495 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000803v1_decoy LN:1143 M5:f38f2b568b969edfffe4cb768ffbf1f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000804v1_decoy LN:1142 M5:9aab8eca5e4d310eded1b7375ddc7cf6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000805v1_decoy LN:1141 M5:9d60d12e15605e5bdc4e95d5507c5fbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000806v1_decoy LN:1141 M5:ed137b8aa6491c9545e9486d7412e617 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000807v1_decoy LN:1140 M5:153c981d613562052e1fb0b115c4534f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000808v1_decoy LN:1138 M5:0338a9928d761051eb989aba5a478df1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000809v1_decoy LN:1134 M5:58756cfdfe491443b22624377976b379 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000810v1_decoy LN:1134 M5:684bc9fdb4e26e632a8183d8802beedf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000811v1_decoy LN:1132 M5:cbe47496e2df2406ca4e66332ba1ec10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000812v1_decoy LN:1131 M5:4408dcacff9d3e25b64da0a9935a7bc3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000813v1_decoy LN:1131 M5:58cc2832c5530babe80d72360b82afcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000814v1_decoy LN:1130 M5:c537aaab4d2fffc792fff332ba26df17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000815v1_decoy LN:1127 M5:c10ad449537826ed9790a8e7a91cc9f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000816v1_decoy LN:1126 M5:43067a55481ed1a3a07a02ad65eaa2df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000817v1_decoy LN:1124 M5:68a35e6dd8db1522069b2a5cee954207 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000818v1_decoy LN:1122 M5:488cfcbe81f47dcfda704c5c28ebbe03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000819v1_decoy LN:1122 M5:de91661f937117bf675c5f21a54ab668 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000820v1_decoy LN:1121 M5:5e6a5620500506981d3ab73624f63d9e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000821v1_decoy LN:1119 M5:fb748af1360cb775a390f0e931dd02b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000822v1_decoy LN:1119 M5:6b4f3cf5f29db2ef1bddb02c5828ce30 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000823v1_decoy LN:1119 M5:90f491e70c191edb78a37852f165ac39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000824v1_decoy LN:1119 M5:53358ae1c3833697bd5f0eb0f8ac79d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000825v1_decoy LN:1118 M5:e36d0f228ae617024efb91c918776dbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000826v1_decoy LN:1116 M5:28d254c1b706d0bf3b10df07746930cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000827v1_decoy LN:1116 M5:08d17cf8bbbea61863d1111ebec35b21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000828v1_decoy LN:1115 M5:6ab6da5d7d22274a6ed522846b55ebc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000829v1_decoy LN:1115 M5:798a4b9e0b964f40d8c23e5cc3336db7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000830v1_decoy LN:1115 M5:9cbd8613556330a85d27a64185ea84cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000831v1_decoy LN:1114 M5:83cc1a5967022f8e841c81fe75d58ffd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000832v1_decoy LN:1113 M5:01c1108b447f8fc1ac66a83a185cf320 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000833v1_decoy LN:1113 M5:7f89f5d60ad86ff56b75b22948d678c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000834v1_decoy LN:1110 M5:5a70b2a58e433469ccb66822189128d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000835v1_decoy LN:1110 M5:1e38e29d6d62fd249bf64655d6f81862 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000836v1_decoy LN:1109 M5:96a1d9adc17f059b56e67cfb6937a345 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000837v1_decoy LN:1108 M5:45ea81c798eb106c5436246caa66b2ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000838v1_decoy LN:1107 M5:1814f68b7f841bfe03b315aa32382c00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000839v1_decoy LN:1107 M5:48441754ca4953c7e3a4a0c8d47ee1e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000840v1_decoy LN:1107 M5:7f28434a41e01b99a0d611c226b8dae7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000841v1_decoy LN:1107 M5:d18ae976cb8e092b2164fb5cf8e96c57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000842v1_decoy LN:1106 M5:7d6bf428559a5a4c3e493b755ebe5524 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000843v1_decoy LN:1103 M5:c32717ad22315f9c16c5ec2cc21c930d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000844v1_decoy LN:1103 M5:a1754553d128a5a63a67e63de2fd3738 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000845v1_decoy LN:1103 M5:39f91ddc96023a6c28b74bce8ab2612c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000846v1_decoy LN:1100 M5:82964c295c4313b285a6149d3c1566a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000847v1_decoy LN:1099 M5:b6ad0bd8376da6c84aad8cf5fe7bc6d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000848v1_decoy LN:1098 M5:e14ec564d8038b588e7bbcc8b2ec0a9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000849v1_decoy LN:1097 M5:7307c9a55c6540dd0e2d41858ae31cbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000850v1_decoy LN:1096 M5:a2998a406a8123e41e824e2ede54ed2b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000851v1_decoy LN:1096 M5:e62b4e85fecea83baffc447a08ca6785 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000852v1_decoy LN:1094 M5:6e5c8b4b68744e944eab55ecb8fb5844 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000853v1_decoy LN:1093 M5:24331159404d19f94c9138da50577e51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000854v1_decoy LN:1090 M5:2929cff1249a75eefb4cfffd96d62464 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000855v1_decoy LN:1088 M5:fbb037cbafc5f686b9ab73e07f0ffcfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000856v1_decoy LN:1087 M5:211034f9737003efb857df7e977d5277 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000857v1_decoy LN:1086 M5:368e68935f97965228ac78bb2aae203c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000858v1_decoy LN:1085 M5:ce2ac36f0b0097282b1bff60c135f74e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000859v1_decoy LN:1084 M5:3418f70e7ae002b97228bff0e077080b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000860v1_decoy LN:1084 M5:b8e4715e539923de16e145b5eac6191e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000861v1_decoy LN:1084 M5:fc5500f691a93bcad35796e610743159 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000862v1_decoy LN:1084 M5:e59c0bee43efc00f925e98deafcb1339 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000863v1_decoy LN:1083 M5:3f45413c28190577d1c4837a73d4a27a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000864v1_decoy LN:1083 M5:5e5b283ed71b787f5a90e2a85cae8fcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000865v1_decoy LN:1082 M5:50f12f0b974f354351bb88c197b21126 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000866v1_decoy LN:1082 M5:d678f152fcc7e46daafe921a0a41337d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000867v1_decoy LN:1081 M5:b861e354b7da07ac9ff8f421b6caf341 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000868v1_decoy LN:1081 M5:0eb25de463e630b62cb8c32bb42f6ad5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000869v1_decoy LN:1079 M5:47743f7eabd8f065bf223bf5327dc730 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000870v1_decoy LN:1076 M5:43ee859a8e75e455f0f1bdbfb155b6c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000871v1_decoy LN:1074 M5:8de0f0af578c623d46ac53461a51a3cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000872v1_decoy LN:1073 M5:788f48af377f20246f7f9a21e90b0e0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000873v1_decoy LN:1073 M5:45c2f5e2b5413134f6030f49be58ba4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000874v1_decoy LN:1071 M5:86a4e6ad2956475caac9b348e6e7f8b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000875v1_decoy LN:1069 M5:22ee1b95d0dcca48ee2f77ec8135e0d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000876v1_decoy LN:1067 M5:3f76ce94efafe5dd1634e6d51aa6d1d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000877v1_decoy LN:1067 M5:5bc259606f224eb610c64d5e5d55321b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000878v1_decoy LN:1067 M5:9449555579bbe1f92046e6c9b1d6eb4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000879v1_decoy LN:1066 M5:2777151312e10fd89af514515090fcca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000880v1_decoy LN:1065 M5:ae8283b9a8386e65951be3f19e3b7006 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000881v1_decoy LN:1065 M5:79e7ca97d9a943a065f8d902b9b01244 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000882v1_decoy LN:1065 M5:0991862c1ee6015ab6ba1008ec3ff69d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000883v1_decoy LN:1065 M5:d68bf7942659eebe8f4973154fd1da22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000884v1_decoy LN:1065 M5:dd08ea8e4c5ee4d1f942b2dce2296cbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000885v1_decoy LN:1064 M5:a5179394ece1fe9e2392cac1241bcacf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000886v1_decoy LN:1064 M5:5ad23055bdc140edb211af99bf7d76e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000887v1_decoy LN:1064 M5:5fb9770dcbf52d1a7f41c9d235a9ceeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000888v1_decoy LN:1063 M5:68844d1f612bcae36302b17758f78e86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000889v1_decoy LN:1062 M5:844d181d05473e9b6d06b5defabf50d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000890v1_decoy LN:1062 M5:224848a8b0947ecc656065423b7862ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000891v1_decoy LN:1062 M5:de33c1fe76fea17846a96ea7bc9e91f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000892v1_decoy LN:1061 M5:919160e2c6fec7a7c92d823d76b66027 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000893v1_decoy LN:1060 M5:f79c0acfc167625b085df24f5058e8f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000894v1_decoy LN:1057 M5:6cae16f687b6453bea4343f3a72ea5d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000895v1_decoy LN:1057 M5:7b95591d319231c96c2db2ab196e568c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000896v1_decoy LN:1056 M5:59477a60f18aa435be9cd8e8cb8958fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000897v1_decoy LN:1055 M5:ef9e2ac86b6dc21510af5a157ffdd9a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000898v1_decoy LN:1055 M5:8a426cfbaa95d3a4ff9de0b8cc401ed0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000899v1_decoy LN:1055 M5:071ea5ccf103c1e5bc64476b69297cae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000900v1_decoy LN:1055 M5:a0183c0c525e9830c2487ba397d48984 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000901v1_decoy LN:1054 M5:fbc0b340afbabfc63b03b8ec4caf77ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000902v1_decoy LN:1051 M5:5f5a077b53495abe7fc001c49c8b9306 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000903v1_decoy LN:1050 M5:69420a1791c126a89681a6620ca82d48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000904v1_decoy LN:1050 M5:9c4f6e5286d911f86ede7780174ee24a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000905v1_decoy LN:1049 M5:0940c85e47df41bd6052ec8f8ca76da3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000906v1_decoy LN:1048 M5:d1bb56cbbe04f366cb8b9e00e16c0292 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000907v1_decoy LN:1047 M5:b1bfe8c8a961d7d57914f4d7c4244100 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000908v1_decoy LN:1046 M5:e48424ce325e8f78e32af41d56e93243 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000909v1_decoy LN:1046 M5:2b08cbae6f429b208c980cf721fc1a43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000910v1_decoy LN:1046 M5:43dfe59c93ea059ca8557bb58d0d3e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000911v1_decoy LN:1045 M5:4a62b434c567f91554aba4fe9d29bee5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000912v1_decoy LN:1045 M5:9dda9f1dca0f324d3ec28a2f95399b6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000913v1_decoy LN:1045 M5:f7d06c828a959e093ca5c4fefcaed79d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000914v1_decoy LN:1044 M5:9565e8a0c6d2b4911f44a2dec3319fec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000915v1_decoy LN:1042 M5:63910bd693964213823ca9ff1e270883 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000916v1_decoy LN:1041 M5:9350358a6726a178c8e3c5c038a58b5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000917v1_decoy LN:1039 M5:1c73f73eb55cd6290be7beede9ad10f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000918v1_decoy LN:1039 M5:95035075514c5d5ad7852ba2c1b2b649 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000919v1_decoy LN:1038 M5:f8b064906cddf6b316b6aee040120925 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000920v1_decoy LN:1036 M5:510d0277b9afc44d0f3a07b3327a111d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000921v1_decoy LN:1036 M5:d7a9e2e36d916e57d735f657035a9829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000922v1_decoy LN:1035 M5:318ac9befd9a2449cae3c371dec8e628 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000923v1_decoy LN:1035 M5:6af821ff48f6593ccd322ce697bdc253 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000924v1_decoy LN:1033 M5:bdd1f96a69f748c2a2fc4b21e31c2f06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000925v1_decoy LN:1032 M5:5b23ae1b5786a5a5eadc92b69bd836c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000926v1_decoy LN:1031 M5:b06aa5a4fb487a467429373242a18923 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000927v1_decoy LN:1031 M5:6fd21c6cec0c8086aa77d26c6d200aeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000928v1_decoy LN:1031 M5:196c591c8593f2c090224ae6cec80358 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000929v1_decoy LN:1027 M5:b7eb33328daf9d0ae316619a61384cec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000930v1_decoy LN:1027 M5:a1112db1101bde90d172ceb0b455adc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000931v1_decoy LN:1026 M5:42be32c5547cde39b2ccc77ac8e41c3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000932v1_decoy LN:1026 M5:62f5a154eeb5e3613de4f255efe75565 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000933v1_decoy LN:1024 M5:69e6c66e0db5f669e7762df739c9bba6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000934v1_decoy LN:1024 M5:f2b5de034be298d37051f37061d1748a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000935v1_decoy LN:1022 M5:d81ab37920ea303d70fec80162569190 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000936v1_decoy LN:1022 M5:08f1fd0b0e3cb4204a68c0bd7c5c57a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000937v1_decoy LN:1021 M5:4c13817a5ba74eee0c03aada914a0243 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000938v1_decoy LN:1020 M5:e4ef90447f68425ac775770584c2ac6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000939v1_decoy LN:1019 M5:d7d108b06883f65ce1ec9f6a55b4842e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000940v1_decoy LN:1018 M5:3e1e177644a21aa70ff44fba9753313c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000941v1_decoy LN:1018 M5:6bff6cc8151a99c46a864ea703c2f8b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000942v1_decoy LN:1018 M5:e7f0466b453823ed7d075d4a2ede4a7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000943v1_decoy LN:1016 M5:3d62e68db3dcf0e169c55174dcbd79c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000944v1_decoy LN:1010 M5:7b808bb60e41db8c1149f10d7bd5465e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000945v1_decoy LN:1010 M5:8f606e0943101b0656668a2ae35e055f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000946v1_decoy LN:1009 M5:5af16ec72873d3cf402dd411e1bbaafa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000947v1_decoy LN:1008 M5:ccfac7e6bd5f5a5fb98e773922be5b3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000948v1_decoy LN:1007 M5:d5e4ec92647dc97d7ca5c479effc5698 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000949v1_decoy LN:1006 M5:53c640d8a27c49f44643fa6cff64c7bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000950v1_decoy LN:1005 M5:4f20464a0e34b4c139f58567dac67a9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000951v1_decoy LN:1005 M5:47b4982ddfd84f1b626e9ea7b0859169 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000952v1_decoy LN:1004 M5:77403eb0765e6a6422307122ee3a0544 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000953v1_decoy LN:1004 M5:74caf00415bd1b5764ea6082c0945b27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000954v1_decoy LN:1003 M5:811dd1c7e02a779772cb0adcd330822d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000955v1_decoy LN:1003 M5:b217fa3505a5024cd26ddcf42d514a4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000956v1_decoy LN:1003 M5:c90b2e71160e8f5cd6d23a740a17841b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000957v1_decoy LN:1003 M5:3bf126803f3335d9227e753cb43060dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000958v1_decoy LN:1002 M5:3904df1efaf5438d8e060141cf4dd6a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000959v1_decoy LN:1002 M5:ab5ef802456142b25705723663909e35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000960v1_decoy LN:1000 M5:ff514a3d2ae42b584daf88b9a9a8751d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000961v1_decoy LN:1000 M5:eb02c1a37ede0d1a737a6c8c984eb06e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000962v1_decoy LN:8358 M5:567a758298b590bb1f4a159d81b84283 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000963v1_decoy LN:7932 M5:fd0a26e270577d3a6cc4cb9256e21cc2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000964v1_decoy LN:6846 M5:4fd9f0f9e88fcd125702c11dfc2c4efc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000965v1_decoy LN:4591 M5:31483ec110747cfcac4dc1e36e8758ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000966v1_decoy LN:4041 M5:f4f7ba029902c50fa77ed2b9966eb1a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000967v1_decoy LN:3841 M5:00a9379bf89f4556f66988ab0193b4c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000968v1_decoy LN:3754 M5:bb2217ed56094a266a3fb1b82e6c6a23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000969v1_decoy LN:3743 M5:5332a570edd08ee710cafaec398e0156 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000970v1_decoy LN:3702 M5:2b25e772f95c73582eacc01e9a048d9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000971v1_decoy LN:3625 M5:44cc5ae081c41e1c77f2043b88c70e0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000972v1_decoy LN:3529 M5:9c1927ed8f09b5ddff51f2f25450a4a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000973v1_decoy LN:3508 M5:04e36a548c184b404c00b7841ba45394 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000974v1_decoy LN:3359 M5:43e1fbfc042ef8b79879bd53c3b27521 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000975v1_decoy LN:3320 M5:4c9cce705cc18e643a96d433b0f0d80d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000976v1_decoy LN:3231 M5:090a5929ce6079dacc5408a9a7212f91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000977v1_decoy LN:3220 M5:b353222bd8f3e04b305911608d5b8b16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000978v1_decoy LN:3212 M5:d21eaa3001500aa078c0457aa0ecb160 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000979v1_decoy LN:3192 M5:87ce752d8b9611f39e6371d84b00dd68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000980v1_decoy LN:3092 M5:51fba58b7e482359134618d7115ef0b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000981v1_decoy LN:3087 M5:86e1c20fe0c0fc2ee5a4627c9dc91dde AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000982v1_decoy LN:3048 M5:0f4f9a676207d67aa7b835ec767daa3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000983v1_decoy LN:3005 M5:8cf60855c69aaa947ecffc2d85f7b836 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000984v1_decoy LN:3004 M5:1fe6d0e0f45dd1c103c83d965f4d065f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000985v1_decoy LN:2959 M5:5734404ace148ab496a0589c177d68d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000986v1_decoy LN:2934 M5:6091b4163a2558a3b376861ba46e49b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000987v1_decoy LN:2933 M5:867d88d0d6a7b4576b5f40df8aee32a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000988v1_decoy LN:2827 M5:fc01429a43e70e9f45d2e9b183f1cbb5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000989v1_decoy LN:2794 M5:8c97ce716667af6e7bf7b16598a2d1a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000990v1_decoy LN:2749 M5:460d8510eb2de1d5521b6303183eca65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000991v1_decoy LN:2745 M5:bcb193217c039f3d327b106f7bbb1eb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000992v1_decoy LN:2733 M5:38d3109378fc051e0d6d30c9c768c361 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000993v1_decoy LN:2698 M5:7909dcbf170e075fd5ae77f2de6658bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000994v1_decoy LN:2665 M5:90d637dd87631542f98b8a2fb31e45d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000995v1_decoy LN:2634 M5:a5125437bf818a2f4ece1a2cb7ad4e5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000996v1_decoy LN:2492 M5:82de7c0346b508963d47eaef107ba2ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000997v1_decoy LN:2489 M5:904eab4180cdf8accc4e926f65892e16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000998v1_decoy LN:2468 M5:5a16ed756cd3e8451225c0c89c299ac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000999v1_decoy LN:2414 M5:a7f82c5206197f2b60bf6e21e8406ff1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001000v1_decoy LN:2395 M5:fa87a3decbc163bd5c4be47f26ce4c72 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001001v1_decoy LN:2356 M5:c1764faa777d0cb7e6d10ff41a7f4d46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001002v1_decoy LN:2339 M5:a71335121d2395b90f88701d0d395b28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001003v1_decoy LN:2310 M5:e7727f2a6ea39391478a70b270b9a4c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001004v1_decoy LN:2288 M5:27c3653c8e9470329db519a7e855887b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001005v1_decoy LN:2285 M5:07a062d63e1175496ade57cb4924ac86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001006v1_decoy LN:2269 M5:da22a2b66c30d77f9c75ac5543b82df4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001007v1_decoy LN:2253 M5:521007d0a98d89311d4fef1f850e5c3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001008v1_decoy LN:2203 M5:efd830cbd9f13d6f2e59621b80df1cc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001009v1_decoy LN:2176 M5:35223579474d332cd9c25530d391cb37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001010v1_decoy LN:2159 M5:c6451a9867c60bb9414b9f531733227b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001011v1_decoy LN:2155 M5:c9a15197997fcc229a4ba16daaef7ab9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001012v1_decoy LN:2149 M5:8fc79f00adb9b9876fc0c760212279a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001013v1_decoy LN:2129 M5:e0053f5c6a91ee7561e587740719a89a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001014v1_decoy LN:2116 M5:c4594c9954ddda6bf892d1221deb1f5a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001015v1_decoy LN:2113 M5:a604e6df460c882c18dd0b761e7da09a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001016v1_decoy LN:2098 M5:1e7f643633169955a530300b89b41499 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001017v1_decoy LN:2066 M5:95e88f3c4f847fe97ff528408aee9885 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001018v1_decoy LN:2066 M5:50eb710c12d63d96710eead27936dbd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001019v1_decoy LN:2059 M5:80e50b65d76c95f06a65b213d6e22e3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001020v1_decoy LN:2047 M5:1e5494b45601a7dacb84814da24724db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001021v1_decoy LN:2040 M5:0fd285ea19d36ac7fbfeb49f98d0e3fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001022v1_decoy LN:2030 M5:4d3b39f0ab2f0f051d917cc94faeae9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001023v1_decoy LN:2024 M5:a4cef27d7ccd380794cbff4dd6eb41e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001024v1_decoy LN:2001 M5:e6821e55e6dbf96dd5ab53b59be17ce5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001025v1_decoy LN:1992 M5:dda157c4b492e3c1a4e277e1dab4aa7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001026v1_decoy LN:1981 M5:4166a173f0411e5579f9d3ed8aacd959 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001027v1_decoy LN:1979 M5:88e1e86ee00ad030c8e1f25e49ad569a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001028v1_decoy LN:1957 M5:26727871d8918ce12f1e7fa8f5914c7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001029v1_decoy LN:1953 M5:9b38c1ef5a1efb5065c9f3dc102ff199 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001030v1_decoy LN:1944 M5:85264a3258514a27228a82bcec9ea08d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001031v1_decoy LN:1936 M5:a7347a7344187fa04690bfdffc33512e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001032v1_decoy LN:1932 M5:4030d4f8fc378be7ab110a327a3a7f7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001033v1_decoy LN:1882 M5:ca4279d8b8d3f3b766ec81b34c402aa0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001034v1_decoy LN:1878 M5:e5d3efe3296f7f5ffb2193bd5be2aead AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001035v1_decoy LN:1870 M5:1c898a94d86446ff18aeae6c9836d2cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001036v1_decoy LN:1821 M5:8f2121509d8a9d3e95e78ceeaca8db95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001037v1_decoy LN:1813 M5:1111c9f5ecffa495ea2a9408094b8fb6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001038v1_decoy LN:1809 M5:0ef16d8e23134785f99146b8b3cada3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001039v1_decoy LN:1804 M5:11e7f4e8d60fef86d7fbefca0fabf5df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001040v1_decoy LN:1797 M5:42437cf6fa6210fd9b127e7487d14e4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001041v1_decoy LN:1791 M5:1b98bd8020f173b5205948481dd39658 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001042v1_decoy LN:1781 M5:7460d29d17ba264f4358d5876a383fac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001043v1_decoy LN:1766 M5:1599e276d124e4a9aa2f66a6300f8a3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001044v1_decoy LN:1764 M5:fba6f4c5474d22767649a8328d8f3670 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001045v1_decoy LN:1743 M5:8b83d468225e1a45cb1846dc726f2562 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001046v1_decoy LN:1741 M5:8adc2f7bd9e61fde6e9824026c0a2430 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001047v1_decoy LN:1709 M5:7363ff9bc2e506ad5041f70fc083e7fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001048v1_decoy LN:1706 M5:ef2492257bbf08783a4db0aecad49550 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001049v1_decoy LN:1701 M5:9c322f81502c32f0c8f405ee752a4f44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001050v1_decoy LN:1689 M5:5fe371c4096ae41150f76981d68dacd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001051v1_decoy LN:1646 M5:ed85a7af0713ab3b3bcdf61bafeedea5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001052v1_decoy LN:1641 M5:97b84c347da74fc7614b6363ba4f28e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001053v1_decoy LN:1639 M5:dc79cb73595caf151cffe0be4286ce1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001054v1_decoy LN:1636 M5:221da4dd1119306af9f8fa1bc567f6fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001055v1_decoy LN:1632 M5:6f572e5698e138bf1e7b1edba75588f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001056v1_decoy LN:1629 M5:fd6f43c6fc2542ce63298bdd465a38a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001057v1_decoy LN:1623 M5:4a44475e85813d0b54e2afdd3aa8315b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001058v1_decoy LN:1622 M5:d30e3342b06bd2428d574ef50226a9b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001059v1_decoy LN:1622 M5:0e6aaefcfab75455e8f59e751c8d44a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001060v1_decoy LN:1619 M5:e91e56fee1ae99144354eba8e5ec571c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001061v1_decoy LN:1606 M5:e266b715eded02faa272225186a213dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001062v1_decoy LN:1593 M5:74d3a9f8a38387de10a759100154372c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001063v1_decoy LN:1592 M5:efcf64c62b2233135f5794d7b9e2f4cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001064v1_decoy LN:1558 M5:bbc8fdfa71746e3e396e745a1fc9d63d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001065v1_decoy LN:1545 M5:fc836522e323b4779fcc5b16f2d28505 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001066v1_decoy LN:1542 M5:6fe808dc84087dc7d8418eced9744173 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001067v1_decoy LN:1540 M5:9c582e02bbde278105b2764116a44ef6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001068v1_decoy LN:1529 M5:9f25be63cbf7cc5da1d1bc6fe23db799 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001069v1_decoy LN:1518 M5:772df05b40eabe6b084af8cac402aef4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001070v1_decoy LN:1515 M5:bda033712d93ab6c918ec5b0fa58f343 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001071v1_decoy LN:1513 M5:faf46f2a8ea7b8d1d0282aaf9e10141b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001072v1_decoy LN:1507 M5:12e6bce1a4e70c91a764227eafe6d229 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001073v1_decoy LN:1504 M5:c757ce71d69487d184714bb6bf879036 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001074v1_decoy LN:1499 M5:d6645febc4c0e7fef261124c74ecff8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001075v1_decoy LN:1495 M5:adf3668dcf991b59a38c281c3d7b5647 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001076v1_decoy LN:1495 M5:2edd8f2a644a90e4ca21826bb31402dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001077v1_decoy LN:1492 M5:3dc6cc3ffd2a9b7966ca3e8ea12dc81f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001078v1_decoy LN:1492 M5:308ce742886a73a84ab8cb90370451ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001079v1_decoy LN:1489 M5:39d5f26be15da228d1d38b408e0a392c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001080v1_decoy LN:1485 M5:2a52bf85b6a45c79c92a6c6027abf122 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001081v1_decoy LN:1483 M5:d22840c21eb279736a5a8262ec8a66b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001082v1_decoy LN:1473 M5:d6b57113fdeadd16b92fed725a02d12d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001083v1_decoy LN:1470 M5:5b5ff1a6c8fff55ac6ebd1d9bda4fd80 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001084v1_decoy LN:1463 M5:80030f88512ee394cc4e9a81b032e17a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001085v1_decoy LN:1460 M5:2587132a077227d0b8742ec9439f95b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001086v1_decoy LN:1458 M5:5366ad05ba9fe3bdfbc51dee8759c348 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001087v1_decoy LN:1456 M5:1d39f2ea075eca983ca23f12efc47f22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001088v1_decoy LN:1453 M5:020a82dc938b6e53e904f477268c7d5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001089v1_decoy LN:1443 M5:541cab251db4f8356953dfc20e8cb327 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001090v1_decoy LN:1441 M5:a563ca647fc20b65ba7baf52e3eb4648 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001091v1_decoy LN:1426 M5:d096cb367c98d6804b4a1b205054c9ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001092v1_decoy LN:1425 M5:4c1a5daffb2303c754e4383ec3bff31f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001093v1_decoy LN:1418 M5:5305c46f4221a62f8001b24ced994801 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001094v1_decoy LN:1413 M5:8d8667fd137515e7c5d31b0b942a7525 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001095v1_decoy LN:1413 M5:e38f0eb475fa6f2aee1b51ea785af3f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001096v1_decoy LN:1412 M5:88ee82e753efc8d4fbd5f1e02ddff9e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001097v1_decoy LN:1407 M5:732666474ada2d4fe1316edd249b2f5d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001098v1_decoy LN:1406 M5:f63dbabd25745821024183fe0082257b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001099v1_decoy LN:1396 M5:0102bc3c8078cc16bddfa125f005370a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001100v1_decoy LN:1390 M5:181bb8fe5095e667506c66e213f3b51d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001101v1_decoy LN:1382 M5:545aae1204533fcf75e6c622471d3061 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001102v1_decoy LN:1376 M5:a69102cf73d82bc4298048ee7eb0aa85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001103v1_decoy LN:1375 M5:61f67b4a0c7573bf583ae5a051e7aaf3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001104v1_decoy LN:1371 M5:4b33e5f1a51a79cdc62fd070cf874f91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001105v1_decoy LN:1367 M5:4286f9ebcff872815a9246b3a2596781 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001106v1_decoy LN:1364 M5:9a3f9b88cf1926d9c75b673647ff46c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001107v1_decoy LN:1356 M5:b54b34217f1c3efb1ba9d4477a0f2045 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001108v1_decoy LN:1355 M5:c49fb7670582bf2f81413071056f61ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001109v1_decoy LN:1352 M5:32abeff50bcab272795c72f7b7edd46e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001110v1_decoy LN:1350 M5:9660451ad55da2148a00b49a126176d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001111v1_decoy LN:1346 M5:c6722a471b0e8cb1384d59ff72cc732a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001112v1_decoy LN:1345 M5:6ffb665540f55661d5ccf40795cebd35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001113v1_decoy LN:1340 M5:e0ba11f5404075a40b0072d19c2bced2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001114v1_decoy LN:1330 M5:ccb7f39ff649bf360b5b4186cf18c01f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001115v1_decoy LN:1329 M5:c52f3a9196ca3b03d2a02680f15419e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001116v1_decoy LN:1324 M5:f07d0c07c8951023331599b2df20380d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001117v1_decoy LN:1316 M5:8195f619c45e8d571a25264aa6e7a65c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001118v1_decoy LN:1307 M5:49f9986c45cac526b89e5520a9baa4dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001119v1_decoy LN:1304 M5:fdbf4160ba84788b20bd855b64cea30f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001120v1_decoy LN:1304 M5:edc34fe61ae9a3b15bc5a4ad8d291271 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001121v1_decoy LN:1303 M5:6aea0ad92108bcebca7f7886b75bf9b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001122v1_decoy LN:1301 M5:ccf0d28aa2b30e1d8e7ef2eafe01e849 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001123v1_decoy LN:1300 M5:8bce51ab0470cf3f210d3b25582c2297 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001124v1_decoy LN:1297 M5:01e9ba63de5b8b6e1a07efb0b1179f20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001125v1_decoy LN:1296 M5:dd2148d2b631c1a7e61a18155b56698f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001126v1_decoy LN:1290 M5:9e7639e4c222198ef6503cc2e1c7577d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001127v1_decoy LN:1284 M5:1ed6768a3d0449e96d3939d08102f424 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001128v1_decoy LN:1282 M5:a8d94de0900b31bf20f7c16fa5eb29c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001129v1_decoy LN:1281 M5:30eded62211ca354db518348aab06f6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001130v1_decoy LN:1280 M5:35b60389b57134465f6d190d5955cf46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001131v1_decoy LN:1279 M5:448c65a5e874d8959bde564141823daa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001132v1_decoy LN:1272 M5:aeacf07664f294565febc34b1f8f640b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001133v1_decoy LN:1267 M5:df7730fbbc24afefb2749741f708f001 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001134v1_decoy LN:1267 M5:eb717a13171c7390c1c2e91a50473c32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001135v1_decoy LN:1266 M5:76896544c6b4b9c8bc2be23ce31fbe4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001136v1_decoy LN:1264 M5:f3195b89752559a8a693e50e17a9d0c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001137v1_decoy LN:1264 M5:73ff474a35189bec700ddd7f25a140a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001138v1_decoy LN:1264 M5:b090d99b3c28f2a84a801018d5843220 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001139v1_decoy LN:1263 M5:a0baed3aa07a676a4fded91fd8edca4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001140v1_decoy LN:1249 M5:0e81abee1c989a0f1ceebfa48b5eacee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001141v1_decoy LN:1240 M5:ddced69f19f82a08186fb39c0354eff3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001142v1_decoy LN:1239 M5:43ea2140da380099332cf0cb0490293d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001143v1_decoy LN:1235 M5:fe6e8b59583fb141e7b203df304e688e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001144v1_decoy LN:1235 M5:7051b4e9e0386119d27af1cbe5a2c633 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001145v1_decoy LN:1233 M5:703871732eddddd1c5ade422c3a7e105 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001146v1_decoy LN:1232 M5:a281258df9fd861e7ca6bdb869fd27d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001147v1_decoy LN:1230 M5:d0939ee2b936624fd9dc5f0bb2a0cff5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001148v1_decoy LN:1226 M5:21f414046e47b5e9c13d47b9b073c6cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001149v1_decoy LN:1223 M5:6e73b42728119fe2041f6c920248ed9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001150v1_decoy LN:1214 M5:44865e67b99f28cb3bf0d5d89d259a99 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001151v1_decoy LN:1213 M5:062e3bbeb41213d0e68f944e1911f058 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001152v1_decoy LN:1211 M5:75ee5d3d8230d6db22a735709fd78e40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001153v1_decoy LN:1209 M5:8ea8e29581777bdb7e7e2435b43a9123 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001154v1_decoy LN:1202 M5:5e4321979f4ad7f0e0630deaf3292360 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001155v1_decoy LN:1199 M5:de05fbc3c15237ca2c8d5c37f3f66dad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001156v1_decoy LN:1197 M5:81532092e3b56c94488f88b7b40525f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001157v1_decoy LN:1193 M5:ebc3be993ac1b9ab8acddc283066d160 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001158v1_decoy LN:1191 M5:9bb2ea3006a7f808a16cf62efac3d39c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001159v1_decoy LN:1187 M5:c5586dfb4606cba7d04c9bdb9b970ca3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001160v1_decoy LN:1186 M5:8ac59cbe50a76ddb4315fa75de02a202 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001161v1_decoy LN:1184 M5:1acac09b845dc4ff431c33916e819c87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001162v1_decoy LN:1184 M5:b3d7d809b498912a66c53542f6164aa9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001163v1_decoy LN:1182 M5:a06ad4e450a32bf31e43fa9794e6c635 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001164v1_decoy LN:1179 M5:2fa76b3fa2caedda0d3aa46b0071fd03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001165v1_decoy LN:1173 M5:ba3aca12cb0c76e77a2ab28a3366cc21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001166v1_decoy LN:1169 M5:7eaa353b323f8eadf6cafe90fce641bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001167v1_decoy LN:1167 M5:61d674b4fcb995535cf94aa7ee127946 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001168v1_decoy LN:1166 M5:38aa98ae17ee349012bee80c9828adfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001169v1_decoy LN:1165 M5:bbd8f8056d59712fd77f6bbaddca57b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001170v1_decoy LN:1164 M5:807bdf141f9ae4103c56e43d949f531e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001171v1_decoy LN:1163 M5:cd8efaef0aa61647e740aa2b0e22ecd4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001172v1_decoy LN:1158 M5:3e53721e66305f3f2b4da98d998268d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001173v1_decoy LN:1158 M5:8ba71ae4bcbf61a48eabeee68296f62e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001174v1_decoy LN:1157 M5:b99ae11f6934e857cb9399ae6c41824f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001175v1_decoy LN:1157 M5:bbc9020c1846bb053b237d5b0478531d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001176v1_decoy LN:1157 M5:52700c360bd82baf97d7bc5fd70a9825 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001177v1_decoy LN:1155 M5:8e366717b85c08e01d0acc612724c6b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001178v1_decoy LN:1154 M5:53cfcde178b82cf94450e6ecc610ef24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001179v1_decoy LN:1149 M5:857f173eae9d86a6ed33b462c9607c5e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001180v1_decoy LN:1148 M5:ea231418525b44371f390a8a2a11af78 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001181v1_decoy LN:1148 M5:5a71efd43a930d44ebcb3574bb9cc031 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001182v1_decoy LN:1146 M5:c8f128dd7893d4ec3036e468d8bd6522 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001183v1_decoy LN:1144 M5:3cc0de0dd79e700a3369cf024230bc41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001184v1_decoy LN:1140 M5:fe4503df1d12b851a419140fa4b4173f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001185v1_decoy LN:1136 M5:224b91af2e2925de5d844cccabcf05ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001186v1_decoy LN:1134 M5:cfbd851609b789f2899a3be61d9127c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001187v1_decoy LN:1133 M5:463b232f53f888f5d3bf049f131ebba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001188v1_decoy LN:1129 M5:1e9b1998943db973b5af6f8d3f8cc934 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001189v1_decoy LN:1127 M5:e780622b257020939988b4785d91218a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001190v1_decoy LN:1127 M5:7efc9fb11679f19ad35fe9371a9dbb1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001191v1_decoy LN:1118 M5:911cf50162dfce9f1bec2ae5f5ffcd74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001192v1_decoy LN:1110 M5:e8f80a36c02331c337e0b327ff8faf9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001193v1_decoy LN:1104 M5:807ca6abca6229d97d8e363a0d01228f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001194v1_decoy LN:1104 M5:0f010a7025fef93df6efa5c5bf5a0f20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001195v1_decoy LN:1101 M5:1c2dc8ff99f4cc1ff11ad3d16b9f272a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001196v1_decoy LN:1098 M5:cb8ee97689963848f0ab08fab52ac3a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001197v1_decoy LN:1096 M5:0724eae831018e8ab18798c02eaa4f1a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001198v1_decoy LN:1094 M5:fefb3d4308c57ce507d9c50c88eaae9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001199v1_decoy LN:1091 M5:a86fb31cc351320639079ba611824352 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001200v1_decoy LN:1089 M5:b75ffa24b8714c207a1d8de82e0812f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001201v1_decoy LN:1086 M5:0fcd8b558e0ab2ccf0b0d8bc3db23d07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001202v1_decoy LN:1085 M5:9e3b81bef0ba768284fd5cdc7b7ccf13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001203v1_decoy LN:1084 M5:35268d23224ae41608aa13bd7fdc7fdd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001204v1_decoy LN:1083 M5:a74077cc79c0fe324530f49b263b3307 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001205v1_decoy LN:1083 M5:cc88bb09f7a6ad37d5d5bf95400fc329 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001206v1_decoy LN:1079 M5:35f5a907b81ef8dbf77ec725790583dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001207v1_decoy LN:1076 M5:de787959b71e3c620c8ef7e41f6bf5b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001208v1_decoy LN:1069 M5:062313b0d5e67fee9d60100c7938397d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001209v1_decoy LN:1068 M5:93480c74c7540c0e7af8c2576e2b9dac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001210v1_decoy LN:1067 M5:8f8b744585f712f3e0f83707464cf886 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001211v1_decoy LN:1067 M5:929d9dd00e1ad8454c70511ea362a4e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001212v1_decoy LN:1067 M5:24aa3c508b845b2b1048334ce78332c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001213v1_decoy LN:1063 M5:29f3cd44f918aff7d3164e28bfddb98c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001214v1_decoy LN:1062 M5:12f432068dd357613e770c93cafe0452 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001215v1_decoy LN:1059 M5:47cb3f694ffe2d6ce654ed3b6cb5e3f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001216v1_decoy LN:1058 M5:f49ebea87cb9479f2d50f484c3217850 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001217v1_decoy LN:1058 M5:4828d8055dbb4bfe4f703bb55a2ba1f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001218v1_decoy LN:1055 M5:6feebb18b6b36dd7c31078b901101e23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001219v1_decoy LN:1054 M5:bbd43557ef56c3c1b056aa213470e130 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001220v1_decoy LN:1054 M5:135c9383230d02f4fa50cd9ef42c51d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001221v1_decoy LN:1053 M5:bf3402855155585fef154c6f26c2f42f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001222v1_decoy LN:1053 M5:55f5597ffafbca066600c886b78932ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001223v1_decoy LN:1052 M5:777b4dde14fe0e0c5aff39ba12f25d7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001224v1_decoy LN:1051 M5:f46bdaf70049d1b5dcdcf4d9bb8bb616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001225v1_decoy LN:1049 M5:a1ecf64987c3a271019ca2bcf6dfb797 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001226v1_decoy LN:1047 M5:c2548a36b128c6216d1689299d9bc6e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001227v1_decoy LN:1044 M5:57aaa99e04236628ee2e2c48688a28e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001228v1_decoy LN:1043 M5:8ab15ca1a985afa87ec7a9cf048505ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001229v1_decoy LN:1043 M5:ad851f750b29642813387f1b00a09791 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001230v1_decoy LN:1042 M5:794f6bbb5ddfaa81ad10c9f97e460d93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001231v1_decoy LN:1042 M5:a88fd0ab44445757ce49b2886b3483dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001232v1_decoy LN:1041 M5:16cfe1e6b786b55e14e1c23b0010abd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001233v1_decoy LN:1040 M5:03f3627a2f7242721c8ba740808d67d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001234v1_decoy LN:1039 M5:2bd140282d454fa86b3d845400c68456 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001235v1_decoy LN:1038 M5:44928251b94a7ba7b6d78cfdc7b74903 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001236v1_decoy LN:1037 M5:0021932312a252327115aef207a22260 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001237v1_decoy LN:1037 M5:7ff32784d45f4a2b9d90d895152d8586 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001238v1_decoy LN:1035 M5:cafb9e327ae844419f531cc74ad34c2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001239v1_decoy LN:1027 M5:87b6d1b7895e0e98849ddb847f85e535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001240v1_decoy LN:1021 M5:9f34ec8f23890b5c5ec129f3aa55fb28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001241v1_decoy LN:1021 M5:52f88af4a5a6b8a7171df7143c99cec1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001242v1_decoy LN:1019 M5:093ab05e7ea2f698daf568af4a5f9314 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001243v1_decoy LN:1019 M5:322f96479243e771eb980526832e662f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001244v1_decoy LN:1016 M5:cf6212ddc0a137e657fec0764722dcad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001245v1_decoy LN:1014 M5:21eab5ad8f971f8753d0aee1004c1335 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001246v1_decoy LN:1013 M5:3c7ad60ac9394211fb081912b61e0f03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001247v1_decoy LN:1009 M5:09f86dc178eeb4ecffafd9734a2afd5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001248v1_decoy LN:1008 M5:43929eb34efd2bbaf9f730d06a1e4799 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001249v1_decoy LN:1007 M5:494ad809a7d99f4147c2398821be92a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001250v1_decoy LN:1004 M5:589a72200353f7537edc3a9acccfe913 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001251v1_decoy LN:1004 M5:183d62e7208aff9604bbbf27702052f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001252v1_decoy LN:1003 M5:8f62a1d759dfd3a68b63b88c50e5fa85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001253v1_decoy LN:1001 M5:0bae6492e6a77abd67b50475fa94a80d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001254v1_decoy LN:1000 M5:6c3e8a079341eb05dd337a0413754070 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001255v1_decoy LN:1000 M5:39444bfd408b4e184afe6e0476041965 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001256v1_decoy LN:1000 M5:44d266b549830722a7a161606171afd9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001257v1_decoy LN:17929 M5:329d6c2a67aaff331fd020d0c9627310 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001258v1_decoy LN:9749 M5:446c5fb7d2e7af681df8773fae61fb27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001259v1_decoy LN:8053 M5:83998e69640a5925a4a86054bce5f2ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001260v1_decoy LN:7826 M5:30c34924be761a9b459c27c08f1f85e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001261v1_decoy LN:7768 M5:32d54ea636150f497c9484a714b37b8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001262v1_decoy LN:5691 M5:ed6cb5bb44a3cfa13f40e14e70bd5fda AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001263v1_decoy LN:5444 M5:40da5cd1840a6368532eaf7e9e4dbe8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001264v1_decoy LN:5077 M5:ea25764cf81ce3030520b86de80c9758 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001265v1_decoy LN:4990 M5:be003e2c8206a15f2159483f284c898a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001266v1_decoy LN:4545 M5:f2f37f70dde8161d632cee33ff5ba435 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001267v1_decoy LN:4544 M5:2b0987b0fb64b16ed454eaff1b74be84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001268v1_decoy LN:4202 M5:78643a9f481cc635295ad076fe1e82bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001269v1_decoy LN:4195 M5:eb3537b9b9d637c74f1d3b43e5fd06c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001270v1_decoy LN:3807 M5:dc3d4eca4636d838ee52fe920bbffbfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001271v1_decoy LN:3741 M5:dc2e137e3cac9a5093030c34fa68c2ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001272v1_decoy LN:3699 M5:db44a6f6dcd56edde16009cdfc186ccb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001273v1_decoy LN:3640 M5:5bda6902f082f2b4a6823836d5d0b48c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001274v1_decoy LN:3531 M5:2740aeab0828fa2d4f2789d353a40b8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001275v1_decoy LN:3455 M5:03cdb0fa6bc0f56dc7266334229fca85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001276v1_decoy LN:3411 M5:2127857d57a589d739a30316547e9447 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001277v1_decoy LN:3387 M5:6b2e8c2f953822e034c233e94c710473 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001278v1_decoy LN:3358 M5:61be95906f76f332c029bcaaca590c79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001279v1_decoy LN:3285 M5:3c9976ca87f24507e195746c96cd0b4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001280v1_decoy LN:3273 M5:8e25e50d38f8fb4cbe34cb3c83f14fc5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001281v1_decoy LN:3262 M5:c1e6634aa95f817084fc1e1eced2abad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001282v1_decoy LN:3259 M5:eded84ead1eb3b92edb6b77f27f8c4f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001283v1_decoy LN:3222 M5:08c79b1d017ddd4136c42b4cb8c16e5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001284v1_decoy LN:3127 M5:78f9666a13abcf03877f434199528e58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001285v1_decoy LN:3110 M5:19e028e80d77e35d088ea23eb52c9f68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001286v1_decoy LN:3104 M5:7f7ac2759ee408d0324f4841b60eb208 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001287v1_decoy LN:3071 M5:cea9d8679bb3eacfb8b04f6ebbf1d4da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001288v1_decoy LN:3063 M5:52b2d8ce5acdb6c47cd5cf7924b1bc24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001289v1_decoy LN:3059 M5:8f356c7dd57f009b249e5147f708ff1a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001290v1_decoy LN:2990 M5:5ef88696d7bd42f40685d222c13e3750 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001291v1_decoy LN:2986 M5:5e39db2cc6d246fa9083dae9ffacda96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001292v1_decoy LN:2928 M5:09a5226cdb11c4ba418a8bdf844de126 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001293v1_decoy LN:2922 M5:0b5455a2f20844d83c853abef966cffa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001294v1_decoy LN:2875 M5:82e9fdbdba365f9449c25c473beabbcd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001295v1_decoy LN:2859 M5:f0957c602b216d5ed18be6c38733aaf1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001296v1_decoy LN:2850 M5:183158b1e867bb90712701171e344b1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001297v1_decoy LN:2813 M5:cad265dba180a6379fe3ff72f3874c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001298v1_decoy LN:2785 M5:b2dea38e300ff000f19f2ed7c17637ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001299v1_decoy LN:2736 M5:75d2dcbfc2388d15030e0f3414952222 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001300v1_decoy LN:2688 M5:0a109d9d73d2f16494f280419a294b45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001301v1_decoy LN:2658 M5:3d83558c586ec81407c8717d1bcf07f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001302v1_decoy LN:2643 M5:c91faf6dba1b10dadf69cfb999d96386 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001303v1_decoy LN:2618 M5:10b7e187737a04307d41acec7960dffe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001304v1_decoy LN:2605 M5:3385ffd5cef2e207dd33adbc369436c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001305v1_decoy LN:2583 M5:4906d3167051868d21d54e95faccf81d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001306v1_decoy LN:2534 M5:b315ca81b05ca7fa9b615787a3b18066 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001307v1_decoy LN:2512 M5:fa1111a29692e4566683516ee2cb9829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001308v1_decoy LN:2500 M5:51a81bda9467ea2f1691f1136a69d3a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001309v1_decoy LN:2481 M5:66e34aaf92c2486bd4c11db6543995e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001310v1_decoy LN:2478 M5:c4ac4ca4a4312da763c265a008380d31 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001311v1_decoy LN:2473 M5:464b136e01802236f8fcd38d3f548eb8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001312v1_decoy LN:2467 M5:b4c84cee8bcb72c5b5260d702510937f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001313v1_decoy LN:2442 M5:9d63b837b16220bf689f455bdc1d96c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001314v1_decoy LN:2430 M5:56acbbe636fd49946581fc122c6688d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001315v1_decoy LN:2417 M5:8082a8e6410572af77ebb845f8c1df94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001316v1_decoy LN:2408 M5:9a55c9ad04d332fd58a9914422f7d836 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001317v1_decoy LN:2395 M5:c6c6115fb6941b48dc5a0abc409f5eac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001318v1_decoy LN:2352 M5:755f704f0ecbfcbbfd31d8f375c83c5b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001319v1_decoy LN:2337 M5:666a5906da91f80774c953543fb9c2c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001320v1_decoy LN:2322 M5:0f19d9949679348751b92e237ed27888 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001321v1_decoy LN:2307 M5:439c6600d966bee934ed52a2139c4687 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001322v1_decoy LN:2306 M5:27db03ab4ca9e14af33b697876aaa754 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001323v1_decoy LN:2292 M5:5fe69547ba8f4b03aaa8e71c2608fe14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001324v1_decoy LN:2271 M5:69ed4113a87f0c964d9f7515adb0dfeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001325v1_decoy LN:2265 M5:78e3664d88395ed413c3de96d0b6aa0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001326v1_decoy LN:2260 M5:ccac0591cbfd65e9a8d51f8e05d34f2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001327v1_decoy LN:2240 M5:bc9efb2dbf8706ae63a9da56f74a5940 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001328v1_decoy LN:2238 M5:a0265d5b1e9532d8f124c363fe675206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001329v1_decoy LN:2228 M5:422f2cb811b961c3513bb155a4a0fed0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001330v1_decoy LN:2215 M5:0d7e0facbdb02ac5cbe36bcb3f1683a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001331v1_decoy LN:2205 M5:8aeb5e1e49ad042e60fd97cbe3bd36b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001332v1_decoy LN:2191 M5:bc35b989cffe895e99e6a2fc45b7f65e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001333v1_decoy LN:2191 M5:b1ccfad8f6bde8d9d40c0b7199e30cc5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001334v1_decoy LN:2190 M5:0ae32cfb78573ddb9929745e2e7a0313 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001335v1_decoy LN:2184 M5:08a18a9ad801c228f5de34b35b58ce5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001336v1_decoy LN:2166 M5:95badad6f81c843868ebb07d1f2d7911 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001337v1_decoy LN:2165 M5:e10a87e41dccb3ec25e99df332d5a560 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001338v1_decoy LN:2162 M5:7973da1851b09e72b47bf83450c468dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001339v1_decoy LN:2146 M5:e8939fd820d746a8792b356c04e54cce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001340v1_decoy LN:2116 M5:b67c09bdf1ed2f6a0ddd972711b36104 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001341v1_decoy LN:2112 M5:90340b9fb118df304042bb73e83ec202 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001342v1_decoy LN:2108 M5:465277293cdb0bf1897d5a17e266d354 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001343v1_decoy LN:2106 M5:ddc350523aba6f1c4b90f820904cd233 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001344v1_decoy LN:2106 M5:8c726624d2d1347ec079d4a89d25759e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001345v1_decoy LN:2106 M5:4b1887bbf69131a205c5cc1a4303c860 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001346v1_decoy LN:2097 M5:6dc99a12532b35dedef60dc2cfae35b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001347v1_decoy LN:2081 M5:12316554f4811e33853508ac262465d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001348v1_decoy LN:2058 M5:b1935843fbea95bed6588d9d700d9936 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001349v1_decoy LN:2055 M5:b013f57c784235eb32f6871dd01e5e13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001350v1_decoy LN:2054 M5:c6835412045762a4c54200ada23f30b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001351v1_decoy LN:2037 M5:50c1358c2b24fd59d5a286bbaa57818b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001352v1_decoy LN:2032 M5:45ee3ea9d4de3859645f9b51f0ca2c67 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001353v1_decoy LN:2032 M5:924e5cc3295232068cf32022f5f7e779 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001354v1_decoy LN:2020 M5:70660abb35fad19ab75c06b301d4163a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001355v1_decoy LN:2018 M5:9126be7c6d2612a65885a2fec496e2a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001356v1_decoy LN:2014 M5:847a7ff01c6682c63ad35fae4dd6f947 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001357v1_decoy LN:2001 M5:71668bc6a710ff919fd32549ee63f1f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001358v1_decoy LN:2001 M5:3288f97535eb71395eaf3b088578bc3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001359v1_decoy LN:1991 M5:b29d731dd150421c4e201d1adc92bd3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001360v1_decoy LN:1990 M5:7e91b8bc1cf2c754f8af12a28921575f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001361v1_decoy LN:1983 M5:71f21061b64aff6e62b116e9384a099a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001362v1_decoy LN:1981 M5:87dba9523601c5cfc29630be31297114 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001363v1_decoy LN:1981 M5:2a3b4956ecd118211708b9d7c428818f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001364v1_decoy LN:1979 M5:eb8501b5022cd696a32a2bff2acbbb3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001365v1_decoy LN:1963 M5:87a0635cbf78d7359208e0d29a3b9596 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001366v1_decoy LN:1932 M5:42a66b3579061c6333cfeec8e7bc7b0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001367v1_decoy LN:1929 M5:95db3317d465876b900ca9167ec31b73 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001368v1_decoy LN:1881 M5:31fb7324b8669148c367ef667ff3c928 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001369v1_decoy LN:1874 M5:bb9c6a2d6ec56835ea520c45a854e8eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001370v1_decoy LN:1849 M5:8f83bc8528784a67dd64f10d89331d81 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001371v1_decoy LN:1849 M5:aadeed33b6077b0febbd1f61c186805c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001372v1_decoy LN:1833 M5:155c69774a39a66871981c66bb0f0535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001373v1_decoy LN:1832 M5:2677f37d4424e092deaaf6c2371defb9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001374v1_decoy LN:1826 M5:4dbca21467f25692d20f062b08c3238d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001375v1_decoy LN:1814 M5:208039e11c53bf03a11d83b417fe5920 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001376v1_decoy LN:1814 M5:8ef785587310c1f2d2226b740e7e4553 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001377v1_decoy LN:1791 M5:ab8270aa2cc7626669c77a954b338953 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001378v1_decoy LN:1789 M5:3ac762e7071f807dda31f5513d9624cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001379v1_decoy LN:1786 M5:9149be02831b6a76a57da93d45460920 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001380v1_decoy LN:1778 M5:a17c5b0d2e1771a62091b6705cfbf5a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001381v1_decoy LN:1776 M5:2ebb9adddc8d21f56ed91c6fbc97cfe1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001382v1_decoy LN:1762 M5:686009ce9e6490069ba0845173cf2c16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001383v1_decoy LN:1758 M5:34dc7958ca4e0be1690c80cce1f048de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001384v1_decoy LN:1757 M5:af98ed1ffd7c4a0166ed1d3bb789d039 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001385v1_decoy LN:1754 M5:80b9896356b85bbe70c7ed49afb616a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001386v1_decoy LN:1752 M5:a7c233ed3f050d44d75a9138231b5384 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001387v1_decoy LN:1751 M5:6e2fe9e7a9951deedb4a39fd837721a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001388v1_decoy LN:1749 M5:5d5cf3896254f422f70ace465b0f820d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001389v1_decoy LN:1738 M5:f8265cae7fb03630effc0fede6811b3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001390v1_decoy LN:1729 M5:48fe4b417655ad69a29770ec6e412fdb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001391v1_decoy LN:1726 M5:01bbe99249b489660daa17fa9f958d10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001392v1_decoy LN:1716 M5:bd9a3ab49b9960e88c2490efe5d8c749 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001393v1_decoy LN:1712 M5:f05c2bfa07a617b06e6a8ebc4efc5022 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001394v1_decoy LN:1711 M5:0f06abd7c321228fa763fb3815140af5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001395v1_decoy LN:1703 M5:09b91ffc2209fd9adc0e0fbac86de4bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001396v1_decoy LN:1702 M5:ff652624b7319ee60f8946d8f751cf16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001397v1_decoy LN:1699 M5:2a71713d93ad2a6a8edc736ddc02907d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001398v1_decoy LN:1686 M5:3bfbf7d5273c5ec692b1907c7c3ff2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001399v1_decoy LN:1684 M5:6d040733a43c01650e5c098e00d46a62 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001400v1_decoy LN:1680 M5:c353280f0d833806daec83385e95e393 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001401v1_decoy LN:1678 M5:c2edb1379f817a8378d4eb089dcdfc0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001402v1_decoy LN:1678 M5:740b37d2e6785fc699776f93cc872e86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001403v1_decoy LN:1677 M5:6d4b39914847504188d3b9feaf3348fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001404v1_decoy LN:1676 M5:31845da6d4ed6000f50d5122bdef15cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001405v1_decoy LN:1672 M5:0630c8622e65da828a153d66ab29b298 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001406v1_decoy LN:1669 M5:e7d237d72fb65c19aac7bcaca3d86d95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001407v1_decoy LN:1668 M5:86c9c0f792de2f54f69278df5e3246cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001408v1_decoy LN:1663 M5:481fc7b87114d19302cdde760018a39c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001409v1_decoy LN:1660 M5:ca249c982b9bc0cae8d02ae5a7e497cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001410v1_decoy LN:1660 M5:9a4adc64cf2fd32db34af21df269bfe0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001411v1_decoy LN:1658 M5:9e0ca112ba9edd83dd02ee0a1b977682 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001412v1_decoy LN:1656 M5:30ba767a8335a19ffbb875f109afcac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001413v1_decoy LN:1656 M5:e77633b957a375847ad25f9b01d08580 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001414v1_decoy LN:1652 M5:33a7cad76ee390036b7d61b167e2b351 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001415v1_decoy LN:1647 M5:904ad5deeeb540a10728c9fabf9e5909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001416v1_decoy LN:1645 M5:378193508f34a25cf912974a4c531bb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001417v1_decoy LN:1641 M5:fe667f1d920a30b730d27903d4de3610 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001418v1_decoy LN:1638 M5:dd1f1f8b342e987caf5e43ffa4b193ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001419v1_decoy LN:1633 M5:775a347b6935f9e170d809222897833a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001420v1_decoy LN:1626 M5:44b1b569182bce231346586fe77f0651 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001421v1_decoy LN:1614 M5:04a70773f36888dde7766a58c3a92de1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001422v1_decoy LN:1612 M5:0f0f7a8906ae3367b908acc806579e87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001423v1_decoy LN:1605 M5:345b541ac9d588f32be39d15d00f6305 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001424v1_decoy LN:1603 M5:dd25e42a5806fade892f5be6c5517133 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001425v1_decoy LN:1599 M5:42c61caf5957d89e892870d7abb0086a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001426v1_decoy LN:1589 M5:ff1c151f692dba0e79005392390f2639 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001427v1_decoy LN:1588 M5:d409b0b1699f38489ac9b78c9e547b12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001428v1_decoy LN:1585 M5:549a7c1ad8b79d31a311204a8ce078c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001429v1_decoy LN:1584 M5:21ac82f5d3944ac17a667861fe4eb50c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001430v1_decoy LN:1584 M5:d717e9b20496c0e3cf6f096572904e94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001431v1_decoy LN:1580 M5:4cef86e6f0c85a15667ecccf0ec2e509 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001432v1_decoy LN:1572 M5:83a76ba3b28ab176a0fe0c3932129c1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001433v1_decoy LN:1570 M5:eefbc920c0c274a05ccd03672089bd6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001434v1_decoy LN:1569 M5:e84f6544b2757c3d68e8333237c05b9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001435v1_decoy LN:1568 M5:085a737d9ac2ce5ad615c127373713e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001436v1_decoy LN:1567 M5:d0cc61096796d51c565e73784c3df91e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001437v1_decoy LN:1565 M5:963645d93472e0f55f70cf30e5541dcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001438v1_decoy LN:1559 M5:6cd647a043602392b10b564ef25b9bfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001439v1_decoy LN:1559 M5:41e3d96f1e4d9a77d4314fb0c550ddc8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001440v1_decoy LN:1556 M5:f95112abd208efc5ebe4d5529e2537a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001441v1_decoy LN:1554 M5:ff55b1b730eb936e0ffca09b8fff9a89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001442v1_decoy LN:1549 M5:df38873f39fd89b3782d53eb4bd35345 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001443v1_decoy LN:1542 M5:66b6405dd4c7537d3119eeb1dfa81795 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001444v1_decoy LN:1541 M5:ce00bd7a73eab91b6d81729240662ea1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001445v1_decoy LN:1538 M5:96e6001e127eea7213d8378afb6f24d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001446v1_decoy LN:1537 M5:4a49340b952f5a6e1fbcfbe271cbee49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001447v1_decoy LN:1535 M5:9d30511ff7644e5e501c629d82f97441 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001448v1_decoy LN:1530 M5:ed3d23f4c537a88a36a4a6964bf2d332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001449v1_decoy LN:1528 M5:e2f85fa47e8361a098aacb0ddfe058e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001450v1_decoy LN:1522 M5:525443cf312658767f3ffb263b1ab40a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001451v1_decoy LN:1514 M5:d378e3b3268d04ee2ed255d9b671404b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001452v1_decoy LN:1509 M5:434a0e69d1dfb2f439fd8c4c6efee812 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001453v1_decoy LN:1507 M5:1c60f6588a6a6fdf49ba74bd4d8844ae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001454v1_decoy LN:1500 M5:4a8517743aa87c3edd4556e876facf8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001455v1_decoy LN:1499 M5:3787c00e3019dc0bd4b019ac8bd677e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001456v1_decoy LN:1499 M5:93e8bbddc43d5e902eaac3b1569c191d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001457v1_decoy LN:1497 M5:cedf6613fedd7bcfb6cf4822d6133393 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001458v1_decoy LN:1496 M5:c6421744963f5f5ef7d06349345f8c11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001459v1_decoy LN:1488 M5:c3d6f0be5c1768c3f4ab357b40330c07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001460v1_decoy LN:1486 M5:cfa272f94abe2b6ea6b8fff9bc2743a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001461v1_decoy LN:1485 M5:73b05431178ff099c7143b2c3310a8d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001462v1_decoy LN:1481 M5:815cd718fd3524c82596f553bc50c030 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001463v1_decoy LN:1479 M5:3be54176b83f28ddb8402da62d8368c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001464v1_decoy LN:1472 M5:a3d5a1d61c0377010cab585d8f86782b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001465v1_decoy LN:1472 M5:54ed54ed3b16b9482b8bb7a42358e3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001466v1_decoy LN:1470 M5:957a8cadb7ce3ea0f910acb49b0d28f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001467v1_decoy LN:1466 M5:5f1e18ba047f8e50f57be2e0ec9d7ee0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001468v1_decoy LN:1465 M5:1371b580bc13e98f593106d0c6cc7055 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001469v1_decoy LN:1461 M5:a1e27c8891fb421149591b6254008534 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001470v1_decoy LN:1458 M5:0a299df79227b0b8f9d01b64c1091040 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001471v1_decoy LN:1457 M5:fb81cfbfe3dcf83480d1566dbfb35cdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001472v1_decoy LN:1448 M5:5ccf4c226bbe31dec446e5f2cfb754aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001473v1_decoy LN:1447 M5:d4e733a5240b77f6521178683ef92f11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001474v1_decoy LN:1444 M5:266aac36179cb1faca5c4a0102fc8ace AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001475v1_decoy LN:1443 M5:6153fa9f83b2dca77912302a435e6783 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001476v1_decoy LN:1443 M5:eadd62062090a328419de772556bec04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001477v1_decoy LN:1438 M5:808b663863cc7b8062a075d60a932ee0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001478v1_decoy LN:1432 M5:3d320a29f829d8b30da651831563b8fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001479v1_decoy LN:1430 M5:d406932c6d2e5cda5d40bd5282612ec8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001480v1_decoy LN:1430 M5:1b514b0604012b9c3bf96dc729d5b570 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001481v1_decoy LN:1429 M5:bba1c32000bf8515723b23e91e3d73d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001482v1_decoy LN:1429 M5:469a525eaccd114705d3876e6497d24c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001483v1_decoy LN:1429 M5:1cab4c8d35aa87cfadcc67327c0cde05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001484v1_decoy LN:1426 M5:7f0b3e31f88382eb1a9d667b4fa5ae8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001485v1_decoy LN:1426 M5:600029364a5faff2a6121c791c26f3b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001486v1_decoy LN:1420 M5:bd2635b8f37ae8d36555126a2efda82f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001487v1_decoy LN:1416 M5:1feda0b1dfda8eb29e804bb83d191350 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001488v1_decoy LN:1416 M5:381713228fbc436ef15eb3fc5ce95526 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001489v1_decoy LN:1415 M5:c7b5a3592ce2955180a8bf93340ce7a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001490v1_decoy LN:1415 M5:8a9071712ed09640282279375c1aab9e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001491v1_decoy LN:1414 M5:ad3849a6c284e0371da519c83c3efd56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001492v1_decoy LN:1413 M5:1897ebbd3ccc3ed5dfd33e64df6cee2e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001493v1_decoy LN:1410 M5:bbae6ade32694ea4d23d50d382e589ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001494v1_decoy LN:1405 M5:60eac2719276e2c8aed1dd8879086460 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001495v1_decoy LN:1402 M5:560d0b9e5abc45feb134351a94cda358 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001496v1_decoy LN:1398 M5:c87eb09186b0ed776438697cefe49c34 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001497v1_decoy LN:1397 M5:17bdfaf46a6963ba97861fcb9ff9d4ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001498v1_decoy LN:1395 M5:14942812a5a15869999430aa17472a47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001499v1_decoy LN:1392 M5:14d8c0e42dbe62d45491f288a844c263 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001500v1_decoy LN:1388 M5:3535c9f286c4bc12e2fdab3ebd0e4cbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001501v1_decoy LN:1386 M5:3ed31b85ef3e34d8e053031462c9cc64 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001502v1_decoy LN:1382 M5:370ef584d4cfe29bba430512c01c2d92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001503v1_decoy LN:1381 M5:0d6317f9e8c37b0d588aaf5c404621d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001504v1_decoy LN:1379 M5:15b371e04aee1e2cd7a2c3ad778615cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001505v1_decoy LN:1376 M5:9e5d443eae0beb889e93d9fec1df500f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001506v1_decoy LN:1374 M5:19e75c42356ec21ffffd6ead1147246d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001507v1_decoy LN:1374 M5:d047841fe73e626cbad1d1a075cc1179 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001508v1_decoy LN:1373 M5:9af5c2bfca12c6e109d87d15a001f382 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001509v1_decoy LN:1373 M5:26c1cdc503f21321bdbbf7184681fd57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001510v1_decoy LN:1372 M5:c08f8502b7b9423df1c4988d25d4e1e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001511v1_decoy LN:1370 M5:51b5c0febc1d93a3ae056b562f29febe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001512v1_decoy LN:1367 M5:84cb97f5fa89889026682a6ddb4e17ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001513v1_decoy LN:1365 M5:9b35f302f4d7104621ee94c9466fcf05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001514v1_decoy LN:1364 M5:d26988a458e184ce67dfdf1494cce818 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001515v1_decoy LN:1361 M5:2be502a9c104f048b5faab19bf6b0c94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001516v1_decoy LN:1361 M5:a66a14b66c130258ed0f9a2e60b977a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001517v1_decoy LN:1355 M5:f8520c48ea6b728718603ce85ba18832 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001518v1_decoy LN:1355 M5:d16784b4fc04cab4570de94e9753760e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001519v1_decoy LN:1354 M5:226153c1ffcb6ca5cb3a64d124c3b9fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001520v1_decoy LN:1353 M5:36898b58e8fec2ff86a3db37bffcfe2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001521v1_decoy LN:1349 M5:919f3dc576e969ebb845489e155befd1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001522v1_decoy LN:1345 M5:e1f3dc21c137a83319e95d8cd641953b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001523v1_decoy LN:1344 M5:c7cc4c4587e7e5f69d3afcaca3f62ef6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001524v1_decoy LN:1343 M5:12b492bc7285ab647a13d8ac1efecc61 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001525v1_decoy LN:1338 M5:8d831cbc5a7d72f9a5c05360b502005d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001526v1_decoy LN:1338 M5:89ce2ba0c1414088ff5f502a0908059f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001527v1_decoy LN:1338 M5:ed5c2d0150ddb784f059ca25eb3b32c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001528v1_decoy LN:1336 M5:1dbe3107f4bae73b01853e98084f8f47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001529v1_decoy LN:1333 M5:1d1e9eb7e4182425f8718dc456a8e9bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001530v1_decoy LN:1333 M5:d77e50f1375e757aefd872040ee290b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001531v1_decoy LN:1332 M5:93546f6ce6b44646b5a2d20190054dcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001532v1_decoy LN:1324 M5:bcb215dd97bfb4682fe3d17f99605c5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001533v1_decoy LN:1323 M5:0c68586edd47761d55b6a127af21b958 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001534v1_decoy LN:1323 M5:8290481e03f0efd3da641df90d6a09f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001535v1_decoy LN:1320 M5:06b5a586c070a38af486a0ae25dac08e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001536v1_decoy LN:1320 M5:aa7f4ccf5b8955783f201e89c6b8b61b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001537v1_decoy LN:1317 M5:5f5c4304240e41a75cdf79d590705a7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001538v1_decoy LN:1316 M5:2b2e47e474a04b2c5d7538dee74a4520 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001539v1_decoy LN:1304 M5:70b1f3865cf28cf8c3cb6ca89e299e75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001540v1_decoy LN:1304 M5:801a2a35c0eb1ddde4f339fae91bdd02 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001541v1_decoy LN:1303 M5:0013745a3b7f3937b3f0d58b8fb8b96d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001542v1_decoy LN:1302 M5:2e708be5a88bc87556f10487d43af5f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001543v1_decoy LN:1301 M5:9b421120b8e61665a80c2202f9742b11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001544v1_decoy LN:1300 M5:7b6b985d4c9b335dde3369fc8ae75a4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001545v1_decoy LN:1298 M5:c2c9f5a874990de1d53e53efca362cd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001546v1_decoy LN:1297 M5:8849c9f185b5ae8ed6d60d3b99c6591c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001547v1_decoy LN:1295 M5:134596128a40e4a4c8f40d310152fe2f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001548v1_decoy LN:1284 M5:c943fc593d7c12a3edad870f24db083c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001549v1_decoy LN:1283 M5:de6680db4756a0d685d2f2405be073be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001550v1_decoy LN:1283 M5:a86669f9a78babae5db999b036d712b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001551v1_decoy LN:1279 M5:48d3b7e152913253a1c7749be4542da0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001552v1_decoy LN:1278 M5:6f732db21b1679f66b34145d0d179a57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001553v1_decoy LN:1271 M5:18a0c55016d63414e1a7c9a868d2167b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001554v1_decoy LN:1271 M5:fbb66e8da3ee67360e823061c517c47b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001555v1_decoy LN:1268 M5:668bc50dfcee6830bfd6b8b193cf9aab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001556v1_decoy LN:1264 M5:512e1b52aa8bc91a79e98a21f48fd69a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001557v1_decoy LN:1263 M5:a280a5ddd14400e7a21e262dacba0878 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001558v1_decoy LN:1262 M5:074796c17da27a3ae23b3ab43837eff9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001559v1_decoy LN:1261 M5:f75ff3300dbd75160e935cd46e4511c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001560v1_decoy LN:1260 M5:67884b5403ffc61f67795ef0fcc3b616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001561v1_decoy LN:1259 M5:778ef716a17f44127ce4648ca3d01437 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001562v1_decoy LN:1259 M5:79561487702e7f87d4c1babb97cbf910 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001563v1_decoy LN:1258 M5:05c2d3d1fe5c9569c6f982e7978b0d6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001564v1_decoy LN:1256 M5:443af4844c7fe05604fbf14d61807faf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001565v1_decoy LN:1253 M5:3ab1b0cbc9dfe5e1b97cc5bbee6ba5d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001566v1_decoy LN:1248 M5:6ca9712ce96adea0a2a178a885e6c403 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001567v1_decoy LN:1248 M5:a9815826b47ba4c29bb0b6f427c91f9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001568v1_decoy LN:1246 M5:847154b1d516e188b5d8b9b6932658a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001569v1_decoy LN:1246 M5:cc8ad8f95e7d72b075ce88fc9fd93560 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001570v1_decoy LN:1244 M5:3df737516c175d1baf5cb57874761a06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001571v1_decoy LN:1238 M5:350c62d6852c839c79bb94399823a7c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001572v1_decoy LN:1238 M5:cf4520e99994e5810535b8e92f1f4764 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001573v1_decoy LN:1236 M5:27e61fe700513169fa02b0a6b9224fb6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001574v1_decoy LN:1234 M5:6af09c7c1feeb50a156ab599d39314f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001575v1_decoy LN:1234 M5:1b1c2b7e28c781322697a77df6b717c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001576v1_decoy LN:1231 M5:24168a14a8a7b0626a75964a5ffa4c06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001577v1_decoy LN:1231 M5:7b5c30f4c44dc17f05a6022490a1b06b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001578v1_decoy LN:1230 M5:7dd3d8aa3ad6ae0467cbb5729a65b7fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001579v1_decoy LN:1230 M5:9838f95ca9d84335f580003e43e0e909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001580v1_decoy LN:1228 M5:40d2f9b81666f0aeaadf3b60d6f00326 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001581v1_decoy LN:1227 M5:b603baea2a6d239b5a0e0482be39ebae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001582v1_decoy LN:1222 M5:592ec40093cfd07fe7ae22531e7ff948 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001583v1_decoy LN:1222 M5:45d2796dafa85ef3ebb8d378ab5c4fe2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001584v1_decoy LN:1221 M5:7171fedcff845d9bf0eed62d8de65582 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001585v1_decoy LN:1221 M5:1919b7c47b361c4925ba7f89f672c639 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001586v1_decoy LN:1220 M5:9b6bee47fab2e16188e112fd219cb63b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001587v1_decoy LN:1218 M5:403153f244f25427f95b761c7e7643f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001588v1_decoy LN:1218 M5:4bdec42af039130bb647f35a1587442e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001589v1_decoy LN:1216 M5:5eb119c85dbdbac20fd9b54ca19e3bb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001590v1_decoy LN:1216 M5:30be84f72824c6a73cb46db0880fca34 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001591v1_decoy LN:1212 M5:a3990c8502d89fd44d2744a7c3b5ec27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001592v1_decoy LN:1210 M5:812ecd7a45c18a1ca8e07d380fa9c7fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001593v1_decoy LN:1209 M5:f3658490a61b9678c62147607e15dd39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001594v1_decoy LN:1208 M5:6ad7956bf60e17b114d96c186021ba22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001595v1_decoy LN:1208 M5:07b45f43574a98e35df01f1b02658afa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001596v1_decoy LN:1206 M5:7ad1a707f9ee83f188f836b84f0ee5de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001597v1_decoy LN:1205 M5:c5fe9e310df6cae87f2d597153392ce3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001598v1_decoy LN:1205 M5:3253a26afa899ec2cde4d0fe80a95557 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001599v1_decoy LN:1202 M5:7eba2ca9a5450bf7c6febae054f41555 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001600v1_decoy LN:1200 M5:00f180d0f4f2be5d3a79232ebf1f4150 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001601v1_decoy LN:1199 M5:06c81b1f3014d187114393c990dbb3d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001602v1_decoy LN:1198 M5:04ad661ad55cf80b26d65b537fa28426 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001603v1_decoy LN:1198 M5:10cec3a4b27c1a9e83dba32c764db1a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001604v1_decoy LN:1198 M5:ca938a555284768f7de4aa5bc45030af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001605v1_decoy LN:1195 M5:6352f3ee72fc500fb234cefdc58d230c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001606v1_decoy LN:1194 M5:7761a04b81c344864c4196c9fa348529 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001607v1_decoy LN:1191 M5:6f495eb0c24a06b146428c8e15145289 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001608v1_decoy LN:1189 M5:7cdef7e7fe5039c26f91054002844a08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001609v1_decoy LN:1188 M5:8fb25530ab0d6cc405ed3820a00a19b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001610v1_decoy LN:1180 M5:baa36ab5e7d359dcf38de58e0578aa06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001611v1_decoy LN:1180 M5:fbf128a1dc1f9852e12d0f7cc819e220 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001612v1_decoy LN:1179 M5:cb72123adfc2996fb4f8c8023e656377 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001613v1_decoy LN:1172 M5:9a828a68ee9904074c07ecb9b4a66d85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001614v1_decoy LN:1168 M5:47f21c445bb5e0f2901a60313a4b54fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001615v1_decoy LN:1166 M5:6640bdaa008c2b633f8732710aea42e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001616v1_decoy LN:1157 M5:548cacc169d84926fc794c75c8fe890a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001617v1_decoy LN:1156 M5:ed240ec48dfc49536a05c15b0cf84b32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001618v1_decoy LN:1156 M5:4cf17295af5ac519eeb5b60d65d8d630 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001619v1_decoy LN:1155 M5:7535ed3093386510b39164d7d8c0e75d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001620v1_decoy LN:1154 M5:942a2c1ebc2dcdc44aca71c7998704e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001621v1_decoy LN:1154 M5:172266936a16cb96c0fa51a30de2f617 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001622v1_decoy LN:1149 M5:904c6976a4151582f6e20888f8882b1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001623v1_decoy LN:1143 M5:e146ce9a62548893f8042eb31c9eb73a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001624v1_decoy LN:1143 M5:226937ae596ef9af068232903d42c1f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001625v1_decoy LN:1140 M5:9f8924f0407c98c271d938a89ce0651a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001626v1_decoy LN:1137 M5:e6dc97de94f6ebca61e2afaa11081a24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001627v1_decoy LN:1135 M5:ddc4671e6fc9af479ecc987b65228b89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001628v1_decoy LN:1135 M5:156395c17267dbc279afab948e04d7eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001629v1_decoy LN:1135 M5:b51c39a7e5a4d0f3a185dfe0405d28be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001630v1_decoy LN:1127 M5:eee6cec0d44e913c8909412bdc06fa14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001631v1_decoy LN:1127 M5:e614e251417f03894a86d226643c44b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001632v1_decoy LN:1126 M5:e3d6bcc05df478652842790b2163c80e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001633v1_decoy LN:1123 M5:62a0c3d0311f689e83c69aca70ff1d7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001634v1_decoy LN:1123 M5:4c25a0253e0d7c0aa032a2af4dc159a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001635v1_decoy LN:1123 M5:77f17c8bda201de22cb683529469d159 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001636v1_decoy LN:1122 M5:4716e9809cd6983cc872a801adcfcc46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001637v1_decoy LN:1122 M5:e854813fe411b829feb5122630115359 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001638v1_decoy LN:1121 M5:9ee360ada2996f37f05bc35f51af2274 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001639v1_decoy LN:1121 M5:e9eacf65a91b75a7484d73c0960d1f14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001640v1_decoy LN:1119 M5:115a5a8bf67d2676b18db1fa2cf1fb41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001641v1_decoy LN:1119 M5:8c12171780de61fb413546e612810679 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001642v1_decoy LN:1119 M5:d36511233c4008330a6ea48f39a48c8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001643v1_decoy LN:1118 M5:49d64211fa0e9269ff0335c106fadf0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001644v1_decoy LN:1115 M5:d3b2472895f28b7fa60956f7b18c525d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001645v1_decoy LN:1106 M5:14d31945977d0566bc15d63216affa59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001646v1_decoy LN:1106 M5:954d5725f47430e77ac7a65db6252cb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001647v1_decoy LN:1104 M5:afc20c7775696bfe6b465aa9d8d5a2cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001648v1_decoy LN:1102 M5:1a699dde289aa62b55f6ac11bb7947e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001649v1_decoy LN:1101 M5:97d8bdd4c01947f81c47b798baa7b71e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001650v1_decoy LN:1098 M5:81be16ab671a23dae662d52a90f53d45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001651v1_decoy LN:1098 M5:849d2fca45af7dd15c549778da256bd5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001652v1_decoy LN:1096 M5:85135079f59c18f32cab3330238996f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001653v1_decoy LN:1096 M5:eeee606c5ce1877c2c17f3c35cee97c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001654v1_decoy LN:1095 M5:a67b439018f9500bd22116207fa78bb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001655v1_decoy LN:1093 M5:45193d6dc28c575afe0a816a04981a13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001656v1_decoy LN:1090 M5:9e9a3deb3fbb62096e9267cf17b4538e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001657v1_decoy LN:1089 M5:2fcd006deec28bc7b3e2ed1c81f6bd69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001658v1_decoy LN:1087 M5:b5ff50152c9932bd5f5c8f6d8f085250 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001659v1_decoy LN:1087 M5:8dc8692a004984e174cae1a798c308ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001660v1_decoy LN:1085 M5:a26ef2777b049efc475e9f983166c858 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001661v1_decoy LN:1085 M5:1d1b538881461819bddec7da548477d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001662v1_decoy LN:1085 M5:a02c26203237d3ab0fdeec3b2226e415 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001663v1_decoy LN:1083 M5:97595ecd8251d05c23a9a1f24c4fc331 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001664v1_decoy LN:1080 M5:bb065f6218181f056b36deb6d5ea3fcf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001665v1_decoy LN:1080 M5:242177401fdbd05a55373745dd7678ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001666v1_decoy LN:1079 M5:aee38ae173783e327db2c83e4636269b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001667v1_decoy LN:1079 M5:eb281bc766d87e3e887aff0c1f473bb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001668v1_decoy LN:1079 M5:b15b982e045772eb4fae4cf61eff32f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001669v1_decoy LN:1075 M5:a0fe4aa8f27e7528a49b7fc241413bcd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001670v1_decoy LN:1074 M5:5a9ee12d6200281af569684e9eb6c44d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001671v1_decoy LN:1073 M5:58e3e1c01c24005c1bf6ecc4081328af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001672v1_decoy LN:1070 M5:6b4eaaed019b55c1445f856fa75748c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001673v1_decoy LN:1068 M5:962507e31477075a1ec295c7f3e4f370 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001674v1_decoy LN:1067 M5:246916ebbed387cdb53894261342b334 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001675v1_decoy LN:1066 M5:45ef97be51801b68eddaf9d903c6569e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001676v1_decoy LN:1066 M5:a1e2a77d7c51fc62c3f1261d96788416 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001677v1_decoy LN:1066 M5:a72df1625ec9a3676769041db2b5db74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001678v1_decoy LN:1063 M5:63c3ca073be59c038fca2ce8cf57b58f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001679v1_decoy LN:1063 M5:3b4176334e519bf0fc0ea90b5c450256 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001680v1_decoy LN:1063 M5:e0c561be692e2103d216fec5f81a004f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001681v1_decoy LN:1062 M5:a87bd7c0b225c0db2cc82df0e92fd34d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001682v1_decoy LN:1058 M5:bd1fa296d60d2c1447479727889fd06d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001683v1_decoy LN:1056 M5:ec709ad9663274dc4b8d9c95637e6231 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001684v1_decoy LN:1052 M5:4c92b0e2cf0179f74e829358fdd4fd7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001685v1_decoy LN:1051 M5:d301a97b1b34b2cbcd690824430ef873 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001686v1_decoy LN:1051 M5:bbc47709fbd21b2776773a149cc0338a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001687v1_decoy LN:1050 M5:a01a1af5e1a2b7e924af29af696e561c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001688v1_decoy LN:1048 M5:71b188e0ec08d62bcf1e70c1ad5dece1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001689v1_decoy LN:1046 M5:6a0e08e5268e2e656a415ba75e6fd9bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001690v1_decoy LN:1046 M5:59e6b5101b057b8b61117d4e775da1a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001691v1_decoy LN:1045 M5:f09e7737756f026981c00c9f4e4a0fcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001692v1_decoy LN:1043 M5:90cc154008842d098dcd3bfcb288fad9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001693v1_decoy LN:1038 M5:760fd011482ffc7b2972fff26ede08ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001694v1_decoy LN:1036 M5:403a116827eda12cce96c83a442432ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001695v1_decoy LN:1035 M5:aa903a22959e0e71bf9b65e184c98664 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001696v1_decoy LN:1035 M5:c7b013db629c9e53bcc9e5ef6b45ea86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001697v1_decoy LN:1035 M5:b124dac1b39002796762805b01e70939 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001698v1_decoy LN:1033 M5:973b579d06cff1e48883e0c933a40ace AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001699v1_decoy LN:1032 M5:d91e5694037129aa77037d5c631b2c89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001700v1_decoy LN:1031 M5:26f0a1a25d70795beec266b79ee9872a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001701v1_decoy LN:1026 M5:d895a2e531136b85f91cae9c41bac3eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001702v1_decoy LN:1026 M5:eeaed2987f143706ea90f593db2ee43c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001703v1_decoy LN:1026 M5:201ae22e581315eb83bf1b2a90a376ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001704v1_decoy LN:1023 M5:676723aca3cbe94f5e6fa6e3e677382e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001705v1_decoy LN:1022 M5:079f24ae7a37258e2dcd3e45c2a82dc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001706v1_decoy LN:1020 M5:0c6c76de07c4a66f7b7c1625990fe97c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001707v1_decoy LN:1020 M5:23b7cef7e53c021320be37e395337a6b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001708v1_decoy LN:1020 M5:442bbaf4d63d7243f581f2a4f3c8713e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001709v1_decoy LN:1019 M5:ead84759fc3d0742886397aa847a8c43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001710v1_decoy LN:1018 M5:30842e0e30b9626a2db87c8abee99c69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001711v1_decoy LN:1018 M5:85cd9b0b4ac27a135417acad1b49f347 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001712v1_decoy LN:1017 M5:cf02f8f140f6cabc6edaa85f110e6a45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001713v1_decoy LN:1015 M5:a1b077bd6e18faf0ce248051997e87b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001714v1_decoy LN:1015 M5:c108897419126d2b77335084625f756f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001715v1_decoy LN:1015 M5:887e1695f416731637dc46a35b2a9548 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001716v1_decoy LN:1014 M5:f4c888663c13ab55190b9228c5b46bb8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001717v1_decoy LN:1014 M5:be3c4d0d37c5c1c8c88889dede5ba4b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001718v1_decoy LN:1013 M5:2d3c3dfc692750b9b4c716debe8451a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001719v1_decoy LN:1013 M5:c1212f7ba1d00f6f6553fc075e858e42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001720v1_decoy LN:1013 M5:6e854869ecc63cf6e45e7f0fc6eeb9c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001721v1_decoy LN:1012 M5:05b1945756fa1adf0d4547bcd12f01ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001722v1_decoy LN:1011 M5:0ef4eb4aa59e9725d43ed27a2f67d8d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001723v1_decoy LN:1011 M5:b4080ef5ca76b971d7eea5438484ce22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001724v1_decoy LN:1009 M5:34953db0af28061b89bb32262121af7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001725v1_decoy LN:1008 M5:b05c20cc6394423a0e1aef1bac72d0b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001726v1_decoy LN:1008 M5:f2301601e3a88c6be9c38500a9d29685 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001727v1_decoy LN:1007 M5:2ff7ac77e3568eeb2e7772e932dfa819 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001728v1_decoy LN:1007 M5:04fd5dc748b4e7815316b0cccea3cba0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001729v1_decoy LN:1007 M5:957456ba0e3f879860817f3ae6bfca78 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001730v1_decoy LN:1006 M5:8381668c661d255ffbd7498d663acff2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001731v1_decoy LN:1005 M5:92a03e55b43fc40c9c010df225cc650c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001732v1_decoy LN:1003 M5:bc99a37cda9c755b77763c0873a3435d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001733v1_decoy LN:1001 M5:6a123c9c76f9d1c0a35ba3666f861ddd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001734v1_decoy LN:1000 M5:31048d43d8cae8a2c51fe5fcfbfa2462 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001735v1_decoy LN:19311 M5:110c68ef04650368b85e76c55d599fcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001736v1_decoy LN:11713 M5:392799b68e6e2c6e288f07bc44a3a6b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001737v1_decoy LN:11263 M5:091c74a89bf6767adbc92c7cfd9ab6bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001738v1_decoy LN:9779 M5:fdbeb36b87e966517a30478e8fd55631 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001739v1_decoy LN:9568 M5:3562fa1ff9f4f23377f715895ecd504e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001740v1_decoy LN:9344 M5:7c7fa5c413301e5c71020ee588c0c1cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001741v1_decoy LN:9188 M5:ec88b5a808b4c20414719ba271b7b641 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001742v1_decoy LN:9100 M5:bad4d9e7865b7ef45b00609846739bda AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001743v1_decoy LN:8771 M5:56e67b8b7db6db977411d3485186a095 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001744v1_decoy LN:8690 M5:f01b9132254ca4074ba5ddc5b74c3d1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001745v1_decoy LN:8566 M5:d96c00c236c6c63764d62b50443c448a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001746v1_decoy LN:8058 M5:14979af859f72ff6efa1b0230cb0bbd9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001747v1_decoy LN:7759 M5:57af8f9f3fb38d3eb268e3d82b21e918 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001748v1_decoy LN:7585 M5:332f1fac3f4964c85f80b068cd91e49f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001749v1_decoy LN:7471 M5:a2a4f2f140a6703cfaa11c1a6ca07380 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001750v1_decoy LN:7461 M5:ec2b8f7282528afa2de49ece1a8d3daa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001751v1_decoy LN:7342 M5:328d2146da22838f30adcf361c5a9165 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001752v1_decoy LN:7223 M5:b0e8a99c193409a71f86d373159d576c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001753v1_decoy LN:7064 M5:3c4648b387bc44aaabddf795d6678ca1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001754v1_decoy LN:6916 M5:c57ae49f10014609feff4fe84c91b31c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001755v1_decoy LN:6897 M5:0bd737852eeaf5c723587cbbd74005d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001756v1_decoy LN:6880 M5:e3d30ef79c4983f0fb99ecf9ac1ca7fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001757v1_decoy LN:6857 M5:cfd001bcac96f459ceac7a135a59cb04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001758v1_decoy LN:6840 M5:6757a710758275b58b95545211e06526 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001759v1_decoy LN:6728 M5:4d8b4b254f60864202e63aa9dba42086 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001760v1_decoy LN:6688 M5:9e056067d1281622858dfe9830f147f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001761v1_decoy LN:6553 M5:9182e4b1d32ec558a3bd3c94a5254ecc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001762v1_decoy LN:6396 M5:23b91febfc6ba054d109596479f66f8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001763v1_decoy LN:6345 M5:f038e6215610b387550c3b50dddd49a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001764v1_decoy LN:6295 M5:d0f7f5b63499d6efd4d901a757b1cd7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001765v1_decoy LN:6266 M5:95b3fdc4315475b9c0408bc1f1f49202 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001766v1_decoy LN:6173 M5:4db332a6222e767873f0d9c5051b83f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001767v1_decoy LN:6171 M5:399db4ef3a58b54f82a07da4f0d264af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001768v1_decoy LN:6120 M5:399aa8c3cb106b5c685092b0de9313fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001769v1_decoy LN:6105 M5:4990624c065870871ce2bfff6bbd26e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001770v1_decoy LN:6099 M5:2e817dafcd97d49c6dfa1eef14a5e32e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001771v1_decoy LN:5893 M5:c8155a905ca8708a397ff91ea578e41f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001772v1_decoy LN:5829 M5:85146edd3b2fab18762262a7455e00c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001773v1_decoy LN:5793 M5:b72258377a1fd9ccb2a374de66066126 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001774v1_decoy LN:5776 M5:51cdb4aa5438f8b50fb21eb9c0959839 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001775v1_decoy LN:5759 M5:f30e892168c0f735365a13e51c8d0af3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001776v1_decoy LN:5716 M5:c03eea2b4a0bc45e1e7df084b89340ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001777v1_decoy LN:5708 M5:5aba75f216a07e87387db64ea61a7c17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001778v1_decoy LN:5590 M5:09a93eafef7f433e1d2b0d7f3e4c2857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001779v1_decoy LN:5566 M5:173109c0f5077facb133a124c11fe44f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001780v1_decoy LN:5558 M5:c7f1155230324ea1ff2ec21957290278 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001781v1_decoy LN:5418 M5:8de9a43d5de5e0bd3fbdc3a8ba79bb3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001782v1_decoy LN:5375 M5:2d96ecf69a27a8876ecd20073def54b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001783v1_decoy LN:5300 M5:07550b4953f67bec7ce4f4a04c493553 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001784v1_decoy LN:5255 M5:5c4536fdcf9b0c8f69b6c13e9c535eb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001785v1_decoy LN:5157 M5:af427140b151e2e892fc9a95aec694f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001786v1_decoy LN:5130 M5:254488c203afc62f6965ed57e0644916 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001787v1_decoy LN:4978 M5:a0d7d65d0e93baf75fd6d6d38c774828 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001788v1_decoy LN:4957 M5:6acbb899137257944298b46317165e69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001789v1_decoy LN:4947 M5:cec51f8ad5909dd8e0d3b01e25acbfd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001790v1_decoy LN:4897 M5:a8c98d6ff4dfa416c2dc12f726057ac0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001791v1_decoy LN:4867 M5:8ad543666fcb2e40d2ce2c0bcb95a150 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001792v1_decoy LN:4845 M5:a4cb8d08b6f399bd75e5d3edc40320f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001793v1_decoy LN:4678 M5:02de644cfd20b00dbf3730793f839102 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001794v1_decoy LN:4641 M5:5326e7bd1418a6bd8475fc0cf9383333 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001795v1_decoy LN:4592 M5:bd9741fa5a5eaf10cb939a6822ac9473 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001796v1_decoy LN:4543 M5:465f55fb7df07a219d9cb52c8d369e8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001797v1_decoy LN:4532 M5:4956e33b08cf6f8939a8053da18b8b4e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001798v1_decoy LN:4503 M5:1fe8c217b537b8ff77877f684728af90 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001799v1_decoy LN:4495 M5:317fc278049d65e36b6b4ac9ea865e2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001800v1_decoy LN:4444 M5:1815e62f1fb46ebe5a8f20ca027f5e3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001801v1_decoy LN:4414 M5:7911ec2b81df531fe586719cf18f339f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001802v1_decoy LN:4409 M5:65257f0e3c59604d1b9d1534d2e05cc2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001803v1_decoy LN:4302 M5:dd3519a759d8fb2773d3ce4e05d2e0c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001804v1_decoy LN:4300 M5:1baabb53ab93bc883f297c4fd3313726 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001805v1_decoy LN:4277 M5:a93c3da31dbc626ca07c7a5bb2ae1fce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001806v1_decoy LN:4173 M5:ad4dbde798fb8814acca378a14f36ef4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001807v1_decoy LN:4169 M5:5e7896feb74a66cdf343257968e26128 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001808v1_decoy LN:4136 M5:bb27f7b565373b54a90878f371ecb315 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001809v1_decoy LN:4101 M5:cc0696dc2c3a1cf86aa2bcf3be4fea1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001810v1_decoy LN:4089 M5:84d4249370d2ab227a405c59d78a49e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001811v1_decoy LN:4015 M5:13a4dd160518b12fd8900d058ae24627 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001812v1_decoy LN:4000 M5:0d5607a998bac1719a3842db4b2ac324 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001813v1_decoy LN:3973 M5:c54b9de7f485ab7729a4b35a122e5676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001814v1_decoy LN:3732 M5:0b810e5685d52453ea3c4c3c15f4ab46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001815v1_decoy LN:3709 M5:41dc92336fe91882541594fefae1b397 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001816v1_decoy LN:3686 M5:23342688bf37b8caa294e20464135302 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001817v1_decoy LN:3676 M5:9d214925d90fe222b09cbc3b862d4be5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001818v1_decoy LN:3673 M5:c4bbe25da86730cc4e55c74636296210 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001819v1_decoy LN:3672 M5:3365257914847acb537ffb644b32f6fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001820v1_decoy LN:3633 M5:9af0a5d44c112d976299f598083354bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001821v1_decoy LN:3633 M5:276e5a73fe80f25706975973fca81151 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001822v1_decoy LN:3613 M5:96044e09be5ba69252a13d71123ac546 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001823v1_decoy LN:3605 M5:2402d86c44cceab83a438a4af0e24939 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001824v1_decoy LN:3592 M5:8e4cc1d20a97fbddc8d430158ab2f8a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001825v1_decoy LN:3586 M5:b0cc5444bffc7aec1c01a855b52ec3a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001826v1_decoy LN:3584 M5:9b94b86d924e51adbe1fa241e9eb4980 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001827v1_decoy LN:3577 M5:2ed768998d7e36315f9b21917eff299e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001828v1_decoy LN:3537 M5:b9fb044a6692c6bc7dfdca8fcb811f79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001829v1_decoy LN:3510 M5:27176699c6daad8aa9991c140bb4dceb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001830v1_decoy LN:3509 M5:dab9d17bab4efaf2e54273afe4017807 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001831v1_decoy LN:3488 M5:cc824ab2de05f959425033f7d1b34c54 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001832v1_decoy LN:3473 M5:05d718c7b92a89c2a4b961ee6c0b008c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001833v1_decoy LN:3445 M5:c374915181a1f43da7688151fad2c609 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001834v1_decoy LN:3427 M5:fea3edb105a855523da01bbac633b515 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001835v1_decoy LN:3395 M5:9323a036098595da4ac07b2de10ef332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001836v1_decoy LN:3367 M5:19070dba7b35a5d94fffb7a4c9bc41d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001837v1_decoy LN:3337 M5:21d6bebf3b38b8e623684b9e0e707909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001838v1_decoy LN:3324 M5:445cf21cdd79290b7e69a748db3691c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001839v1_decoy LN:3315 M5:f1f38a814378ad3f53ab744d03c6faec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001840v1_decoy LN:3313 M5:943531134a853079b30be3d92c9a37ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001841v1_decoy LN:3283 M5:aa33f6f89273b5d970d09f46c4acffc4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001842v1_decoy LN:3250 M5:6c7e5a0af5d65078902e7369e77c3eca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001843v1_decoy LN:3247 M5:a40dde4dacd9b3af8d1346af020f3826 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001844v1_decoy LN:3237 M5:19c321a618697df2f90bf2623e39e09a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001845v1_decoy LN:3235 M5:858d4ef2c5182eec9a3af185040447c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001846v1_decoy LN:3200 M5:5198826fed1230b23329839aa0fe293b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001847v1_decoy LN:3195 M5:bc41aa22979bdd3975774235ac080c4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001848v1_decoy LN:3175 M5:e3cf116e22c63b9ca8f5f83ef00c9227 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001849v1_decoy LN:3158 M5:2c546de8c11c8b020271c0a602c8e914 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001850v1_decoy LN:3143 M5:b114278cb76d8a47cd1ea131b6b01c46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001851v1_decoy LN:3139 M5:836cf9f277e7abe51f821eea4e72f9da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001852v1_decoy LN:3138 M5:99ec6bed7ebdeb700737347dbb987feb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001853v1_decoy LN:3136 M5:3ce9684d466895b5b1ebc7b730c1a22d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001854v1_decoy LN:3132 M5:4133dd5a44f06f0676fd2c8f8f2e532a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001855v1_decoy LN:3132 M5:1d73546845d822a91cbc6d9f4e78688c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001856v1_decoy LN:3095 M5:318534fba07d7da9181de4e227a5ddf1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001857v1_decoy LN:3094 M5:bb93d34eb9f7a80b575056a9785171f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001858v1_decoy LN:3093 M5:b4c67202f6c2cd5231bdf62ec60bf138 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001859v1_decoy LN:3059 M5:80bd25131b27cbfb7222fb139cdc03f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001860v1_decoy LN:2985 M5:3b138424ffa05470fbaf4e81e0b11722 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001861v1_decoy LN:2975 M5:128ceb0f1b4c41d3107868af22cbd590 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001862v1_decoy LN:2967 M5:f0bd303b1446335f781e0c2f74d28de3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001863v1_decoy LN:2961 M5:562fe7159c1f06d7750af9ef9c3d3e6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001864v1_decoy LN:2955 M5:8028d9a1447473820a8c0b0e88325ffb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001865v1_decoy LN:2935 M5:2fb53f3d6f706d8f5738f63429c8de36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001866v1_decoy LN:2933 M5:a22cdeb6c078d85e19e089f7f9efb045 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001867v1_decoy LN:2909 M5:1fd7abd65c5be9c9dc924daa280f43be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001868v1_decoy LN:2904 M5:5e863959002b0c580d4820a7cebdbf48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001869v1_decoy LN:2892 M5:662acc47cf615cef44478309a902b41b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001870v1_decoy LN:2886 M5:b83662f3f83e28d70a9133675fbe1b1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001871v1_decoy LN:2885 M5:0734ed3f7e1aed9828f22b347664e98e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001872v1_decoy LN:2878 M5:2246626d2530d2260b223f28a96a624a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001873v1_decoy LN:2875 M5:a306eed4bf0048509612220ddfca4dca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001874v1_decoy LN:2861 M5:45f856116b6642c701e0671967fb8bfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001875v1_decoy LN:2856 M5:a35e380dc9bcacbbc7a29692f039feb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001876v1_decoy LN:2838 M5:e010e81c2ae154a12105872faac2d033 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001877v1_decoy LN:2801 M5:c830abeee2c0527ca00ee4004e2f26f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001878v1_decoy LN:2797 M5:9f0b46d448ffe81f55a61311b72408d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001879v1_decoy LN:2788 M5:ff37de9e839a483b85b9978f165e2aa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001880v1_decoy LN:2773 M5:45df0f07d5235217631f54d4decf8ce9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001881v1_decoy LN:2755 M5:22fbad6b463ff553fbe7482783018f9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001882v1_decoy LN:2754 M5:f5751d68ef59013dd8a924405b61c766 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001883v1_decoy LN:2743 M5:68564eee42e550492f0bf366f22345f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001884v1_decoy LN:2725 M5:c4477959c12bb115614ea504cf712579 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001885v1_decoy LN:2722 M5:d221c4dd4b764a3cf767ae2f408cd855 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001886v1_decoy LN:2682 M5:6a91b1b63b686c713c6daaa9a5b28c48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001887v1_decoy LN:2669 M5:176039ee6f1d1ae8eaf240056ad7e1ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001888v1_decoy LN:2663 M5:ac2fb1176f2733ad7fcdd03cc15e919d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001889v1_decoy LN:2652 M5:f14b36f702c6db220606dd6696067369 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001890v1_decoy LN:2647 M5:82b5cfe2b5ccc5d14445809aefc4acee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001891v1_decoy LN:2635 M5:fa2959b22afb179b2e6b195f5bba68bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001892v1_decoy LN:2633 M5:62d8ae1cef408d715d22ae3ba3dfb9c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001893v1_decoy LN:2629 M5:cb667e2bdb9486da5a227dbd50803c45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001894v1_decoy LN:2612 M5:923dfb32d8271c70d8e8cd9288621481 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001895v1_decoy LN:2599 M5:691f294fc31908fd910ca9dac0cd4362 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001896v1_decoy LN:2566 M5:9cce036b1dc05a82d7a2bd677688b7a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001897v1_decoy LN:2556 M5:975e1058290d80f4ab2cf207313135aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001898v1_decoy LN:2551 M5:e52be60ead1084c5dbd6851964b3d575 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001899v1_decoy LN:2551 M5:71028cef766fc1dc75684dc127ec3f73 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001900v1_decoy LN:2538 M5:e180467b2632a688c6d3b1e58b17892d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001901v1_decoy LN:2538 M5:bcaea2754972af50dff62993504801c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001902v1_decoy LN:2525 M5:647f59f3a4ad408b803a4c971db5651a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001903v1_decoy LN:2498 M5:80be471faeb22fb67458b7bb8e00ea3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001904v1_decoy LN:2496 M5:be7e3722d3c1a45b98f79cf89cfc235f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001905v1_decoy LN:2483 M5:609856bcc6aeb799c0a57773bccc7598 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001906v1_decoy LN:2475 M5:e64a6fb38d225decae7e079ea7b9732b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001907v1_decoy LN:2469 M5:e2b450a085ac14eec02539b8c1bd6bed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001908v1_decoy LN:2455 M5:0b0b3b8bce8db6dc091b3429802919bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001909v1_decoy LN:2444 M5:6a091545fa77d96dc253bedeaccb6692 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001910v1_decoy LN:2437 M5:ad77fbca3fa49f1c970e8c64b58391d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001911v1_decoy LN:2435 M5:233e3f635c3bd0fae9ed04c155c799a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001912v1_decoy LN:2427 M5:e22283fea810c2cc4c92cc5ac5ead914 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001913v1_decoy LN:2419 M5:ea7d2ed4522c0ecea6389a3b9fb7bcfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001914v1_decoy LN:2413 M5:953de10ba34733832f5bbcb37e12c5fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001915v1_decoy LN:2412 M5:ea8ef9ae0476686a6cbd488a0202b2bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001916v1_decoy LN:2400 M5:0198ad2dfad702357fb849a43500deaa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001917v1_decoy LN:2399 M5:d566d3ebbd937aa7ba415298188a1c93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001918v1_decoy LN:2396 M5:536fac7c509791bd524e9da425d7fd93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001919v1_decoy LN:2393 M5:522e11044a40018a2f755d9d4fd8103b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001920v1_decoy LN:2386 M5:aa9e69c6d5f6d04b4030be6b3226964c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001921v1_decoy LN:2384 M5:b4d05aabf35963906d1861ef966a4709 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001922v1_decoy LN:2382 M5:97749df462ddf825702a260f9aa2f021 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001923v1_decoy LN:2382 M5:3c0d3376e16a20d57497a815d2475873 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001924v1_decoy LN:2367 M5:e76216aa8c58c6949a9c04cfa9b95995 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001925v1_decoy LN:2366 M5:4b4ae46d37a4f45b63c4b8c3cb63294c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001926v1_decoy LN:2362 M5:589965b553dd53d631ae9970b0c65403 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001927v1_decoy LN:2361 M5:aaac326f62cef7cc31b28e60534d0a3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001928v1_decoy LN:2353 M5:2c60f763bb39af3328df40c97b8e4f0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001929v1_decoy LN:2349 M5:5e3aee054d3451ec9e4e18ee277b5efb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001930v1_decoy LN:2348 M5:c885bcc19373dca31580a65ec6fc7e48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001931v1_decoy LN:2340 M5:b36f2e5330d409cd8ba0973000358c52 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001932v1_decoy LN:2339 M5:63104b56d2278c3cb82c3d6f23d8977c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001933v1_decoy LN:2336 M5:2c7518f9e4ed0d994be4698762511cf3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001934v1_decoy LN:2333 M5:308cac07c79336f8162a8c2e855f7762 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001935v1_decoy LN:2330 M5:bb4702fc9e6227387e8ce3498109d998 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001936v1_decoy LN:2327 M5:ddad50424c1114dd98bc0202ac1cd9fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001937v1_decoy LN:2318 M5:28804e3d50bf7764ac6b1897b1128790 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001938v1_decoy LN:2293 M5:2aa344c0d737b4d9042325fb5a858bee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001939v1_decoy LN:2292 M5:22b000d9737a411cb3844951ebc17b87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001940v1_decoy LN:2287 M5:44ec350c3d506da4df5a5c6c60683796 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001941v1_decoy LN:2274 M5:c2d8c7fed619477a490f674da302b98c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001942v1_decoy LN:2274 M5:bae016f221de9bcae9788e26dee71d3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001943v1_decoy LN:2267 M5:88696dc559363af860e8828eed45eb07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001944v1_decoy LN:2260 M5:be18f9c08c02b23d6bc3e38f71843b69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001945v1_decoy LN:2257 M5:bc65d96f85bac2cf76e5db2847c7c723 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001946v1_decoy LN:2240 M5:98c67c23fdf01dd3a05e1213470d56d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001947v1_decoy LN:2239 M5:0ec5d58555d46a257ce56425c730f4d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001948v1_decoy LN:2232 M5:b8901c5291103859cc240e5d6c96c4ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001949v1_decoy LN:2230 M5:976e267cf6d42bc3c67a345bb56e707f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001950v1_decoy LN:2230 M5:f179f9db12db687102c9a63bacaf36ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001951v1_decoy LN:2222 M5:f5a5058d6f869ae64c9a4b69439d4114 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001952v1_decoy LN:2216 M5:63f1d3d20deaabfeeb68d11879debd0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001953v1_decoy LN:2214 M5:b09d559a9d44f7eb887d75fd192524ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001954v1_decoy LN:2210 M5:7d0a884bf7fd09ebc9175286c058635f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001955v1_decoy LN:2203 M5:6005c464e19405b659d2d2e09778b06b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001956v1_decoy LN:2197 M5:a15768dc613354cb73ec09a4c5c814ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001957v1_decoy LN:2196 M5:cd06502f93b8e17fd05511c84cf6c523 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001958v1_decoy LN:2196 M5:c315413cc7a46460c67bde0cd8e78b71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001959v1_decoy LN:2179 M5:708d5a6db13c3ac37d5e90e0cc2a8c32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001960v1_decoy LN:2178 M5:e217486e375bc7a5925ec6cc7fa9e003 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001961v1_decoy LN:2178 M5:dd793d59199c7f60817d549e0c149b15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001962v1_decoy LN:2172 M5:aff6ab00ffade197cf1c12f043e2cbe5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001963v1_decoy LN:2170 M5:2cf0f6c81889758a8dadc195f7928b09 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001964v1_decoy LN:2167 M5:c20e5ca2be0e106f7d0694f9e67a3ea2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001965v1_decoy LN:2167 M5:df1f17762d17818e216feee97299c37b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001966v1_decoy LN:2157 M5:071891675e2ba4476534e0035ef13cef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001967v1_decoy LN:2153 M5:59ad2443710d81ac651620a8f216e7c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001968v1_decoy LN:2151 M5:2c5f2ad4a6812000584bf131c918c3f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001969v1_decoy LN:2147 M5:e6458e552c51be648c8cc8ca7c01ac98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001970v1_decoy LN:2145 M5:408a6d5ea59519609696b4228f0cbf97 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001971v1_decoy LN:2142 M5:90b747485a6b12433a92fb55202869fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001972v1_decoy LN:2142 M5:7de080d8181d8066e63905fc22a7ee14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001973v1_decoy LN:2136 M5:b611d1ca78ef211201bfc0b6a68e74df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001974v1_decoy LN:2130 M5:5f1f983972aaf38be9f2fd9fbcef8a9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001975v1_decoy LN:2128 M5:0323f4f5194c96dc1bcb919f06960a20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001976v1_decoy LN:2126 M5:c142de1e2c1924e545f116a373abafc1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001977v1_decoy LN:2126 M5:6ec3293375949e50d082d3f5639ba434 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001978v1_decoy LN:2119 M5:e1eeff28afd215be837a02bfe59d8294 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001979v1_decoy LN:2107 M5:eee07feaf8a44d69317e6b46e8eee089 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001980v1_decoy LN:2091 M5:ea5e9165f2f579567e1addc7de1a7a6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001981v1_decoy LN:2087 M5:635626092c6f01e77135d2798172beb8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001982v1_decoy LN:2086 M5:269d34f32d02129323bbc21d6336cc6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001983v1_decoy LN:2083 M5:5aadd7636d45bda287185de4cefac8d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001984v1_decoy LN:2075 M5:ae2d128f1ba2ba34942dffebf4b7905f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001985v1_decoy LN:2075 M5:0f195e7dde4153887f4f0615cbd730e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001986v1_decoy LN:2072 M5:b236a0d4a67c91d699b3cdf5adc47a71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001987v1_decoy LN:2068 M5:2e34944b2779f309285d9db7a20b69ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001988v1_decoy LN:2067 M5:233b964d4a2e5bab26b7b996dc46d4b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001989v1_decoy LN:2055 M5:795ffd63a0e2d97ac00ca57cdab045eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001990v1_decoy LN:2051 M5:5e69880a7e6f7bf744cf4b305624a7e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001991v1_decoy LN:2050 M5:abba4241716dcac69b95e887f8358859 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001992v1_decoy LN:2033 M5:096ca0754d9f8f4cf7a582f57c5fc083 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001993v1_decoy LN:2024 M5:288495a36e0f4b1fc8e90cff6d4734eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001994v1_decoy LN:2016 M5:96d95a271cf5d103433921842ead9915 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001995v1_decoy LN:2011 M5:cb8560d292475a0fd481b0e794ed0186 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001996v1_decoy LN:2009 M5:a6503ea36c1b69162d3eda87c4f33922 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001997v1_decoy LN:2003 M5:d3a1bed41244634725882235662d11a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001998v1_decoy LN:2001 M5:35916d4135a2a9db7bc0749955d7161a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:01:01:01 LN:3503 M5:01cd0df602495b044b2c214d69a60aa2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:01:01:02N LN:3291 M5:743d9f66c77fc21b964a681e0c6de2ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:01:38L LN:3374 M5:dd27b7fe617e92bb77eea00fede6fd15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:02 LN:3374 M5:3ba47a11a8a5b47ccb855308e26a2f4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:03 LN:3503 M5:554d43de8f2a97cae068169fe3d8462e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:04N LN:3136 M5:072ea3e53c79f3d00e1f1a7b492b0a8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:09 LN:3105 M5:68176666a98582ea361a9181d69679af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:11N LN:3374 M5:b9ad3338cc73e2a99888a36e04c29f75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:14 LN:3095 M5:0385be87eb49df4c59d7487495e3b1b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:16N LN:2985 M5:10150ad21301a29f92e1521530fdd3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:20 LN:3105 M5:05dc0384da2f751afe549a9bfdbc3037 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:01 LN:3517 M5:174a8ac24d2e6625c1e7589219d6fb84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:02L LN:3287 M5:96a6b1f55c41a7da24857ab8844a7a22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:03 LN:3023 M5:0ac19a55ed1a22389a2d667c42ba1218 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:04 LN:3516 M5:f6a0bed71d059f8387d9d22e2b0c46b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:02:01 LN:2917 M5:a99f213073198aa5a532f950135f6d1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:03:01 LN:3517 M5:8a795bfd81ee3440e8d0fa3e5d09cd35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:03:03 LN:3148 M5:6ec792b8a5944a6edb0c1acc18ee1418 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:05:01 LN:3517 M5:dbb2cf4bd26ccd1d7c17327d2cbc119f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:06:01 LN:3517 M5:00a663d257ac9d4d6eabae95f6fb6d8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:07:01 LN:3517 M5:2833baebca84548dd4e37d79642db779 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:10 LN:3517 M5:61bf8d00643229eaec4eb8def24f1a98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:251 LN:3517 M5:d39aa010841e51a5fc857e82a3378d96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:259 LN:2978 M5:fcedee868a44319f80c453cf7b833abc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:264 LN:3002 M5:6cc807b0948af0b655ad0265629b7906 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:265 LN:3148 M5:5e00ac7ffc401cd5f866e17cd6b7d76b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:266 LN:3084 M5:fe25829d3992130e1ca423e98507b843 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:269 LN:3101 M5:724d76a112c0b557ae52e35dcc2973dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:279 LN:3103 M5:0aef01822ccf2bada1e9a2ce8c771711 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:32N LN:3517 M5:02ae1b32f6268509dbfab828c8339a36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:376 LN:3104 M5:79dba7660c7fa948d23f2703e80eab7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:43N LN:3218 M5:68aa8847e8ec55dce252be3812b03bac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:455 LN:3118 M5:6903220f41d0f8754d6cc3ff6fb3fbba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:48 LN:3517 M5:2947ea9bc4c28b64abba44002460a38f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:51 LN:3109 M5:84c0d488e0a5f95cb3587efd6c84b00c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:533 LN:3217 M5:34bc003a99760f4ec928572b3a747094 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:53N LN:3305 M5:108696b83e605fa59b435cfb8406edf4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:57 LN:3054 M5:bc22083129551a34dbbdfd07e36f763b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:60:01 LN:3112 M5:b58aed6de00585e7f185bf3eb573cb45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:65 LN:3387 M5:03702f960713a7c42469b033b7ef05ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:68 LN:3109 M5:74777150832f351162301c7d04a64d48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:77 LN:3371 M5:9e5ec638d0de688fc20aaf00b74b5a9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:81 LN:3309 M5:2cbf6e9f368ea4387632204bbdcba76f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:89 LN:3371 M5:782c923ac311a590d29e9e85b6a6b5e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:95 LN:3388 M5:36b421cc1baeb1cc37291f98566cc5f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:01:01:01 LN:3502 M5:bc204fec41a0219e8044aae1c5a3a6ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:01:01:02N LN:3373 M5:c9d431f34db1cf123c6dec89ae7075f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:01:01:03 LN:3094 M5:4744e9f0617b3715ed23779866c2e1ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:02:01 LN:3502 M5:d54cdfb5d7a25804bc3b5a3711d1e42c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:11N LN:3404 M5:fb87c0184303005cf961e7e6bc65a3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:21N LN:3095 M5:665152840dba04b1bdbfefaf3d4913ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:36N LN:3142 M5:c5889d985a6d5ac0f86ee9a5f1449762 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:01:01 LN:3503 M5:1b32d51d3415a99c68971d21b686744a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:01:18 LN:3503 M5:3283d7a24c7ad61f9024a8f7d76d5bd6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:02:01 LN:3503 M5:fd13f748ca0c574e318250f8dc0f147e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:05 LN:3373 M5:78f70065b11cbfb3f502af9802ae3b7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:110 LN:2903 M5:ca7ce57dc961032a37af87fc26cb626e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:25 LN:3073 M5:e1ba0819b77d173c0a9c6697f76f3e50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:50Q LN:3362 M5:ec1d5f53ad6427e623c41a11393bc518 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:60 LN:3241 M5:6815ddd990a7231bc8dc40a414cba309 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:69N LN:3500 M5:dd8ce51ba7bb514b56ffcb5d7566dcae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:74 LN:3227 M5:057f5c85ad1f09e82b0f04bbc54f9283 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:75 LN:3184 M5:9975bcb416ee87f54025f71692bbc1ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:77 LN:3233 M5:615353e3ceac5a04cb381339a800ad9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*23:01:01 LN:3502 M5:edf8a55a69faad1aab25516e1126b0c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*23:09 LN:3104 M5:fbcac94109d55d95b94b869fd6e42705 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*23:38N LN:3020 M5:83381147ae6889a0af532bcb7af83e6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:01:01 LN:3502 M5:95495e041aa53313d12032c49baa1b1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:01:02L LN:3502 M5:d91ba7d36f6472faec4c54d1f476c9f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:01:03 LN:3075 M5:a89ed5d11db1d882965e052a6a049217 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:03Q LN:3247 M5:d55685eded22f07791df08b502ad3872 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:10 LN:3356 M5:739b4ee3c4a555c2b699fa358ad07744 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:03:01 LN:3502 M5:d866111fbc6e2ea2cf086915b28442b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:07:01 LN:3502 M5:872c7be9ec525309cd91d949580a87e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:08 LN:3502 M5:f0bbd52535d5ef86e21c4486e1761207 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:09N LN:3502 M5:9d122834f5117a876ff9ef768a61672e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:10:01 LN:3502 M5:035534e6b4f7a7b2b20506a41290b8de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:11N LN:3503 M5:bb7085dbbd00c565896a17505dbd06c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:152 LN:3176 M5:6d81297ebe64b08f9ec9e8adedcde902 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:20 LN:3502 M5:eb4b55e730512095c889a1c36a7fb51d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:215 LN:3116 M5:f6c6ec83d1c70ef4bdc483abf45a141c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:61 LN:3043 M5:8ae770b761bfdf718a8cf382b54fc71a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:86N LN:3415 M5:0e1108b26db8b22f177b460c8a34c017 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*25:01:01 LN:2917 M5:2e22cd0725822e29d3f0df6844339714 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:01:01 LN:3517 M5:51cabb4c3149d169568609c1906d969a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:11N LN:3091 M5:112419eeaa846213785eadd7380308a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:15 LN:3217 M5:2a2c8f5ba64eb0110f2de0d8b74a5d98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:50 LN:3141 M5:9a1a6cdedaef2a3c66ca98f77622fe50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:01:01:01 LN:3518 M5:6a6e4c826d8743d5f327d8906a311270 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:01:01:02N LN:3303 M5:497a11cff2fde28a5c500d529581c57b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:02:01:01 LN:3518 M5:77d1ca0d5ea97ccf052d85d9515117ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:02:01:02 LN:3518 M5:53bad80334b21427430686d44dbda04d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:46 LN:3310 M5:b4635ec707263c634b27769afb46323a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:01:01 LN:3503 M5:c6b537ed485b72a6b78cf527493d8ca4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:02:01:01 LN:2903 M5:65d618ee20ba439ef5ae408a182e25df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:02:01:02 LN:3374 M5:4031b0ca00a39d4d076dcdc2808f590d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:04:01 LN:3503 M5:21f4d62eb6e85f6257661e4c94b68aa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:89 LN:2903 M5:694bc9c1c804f437646697ba9d968bc5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:01:02 LN:3518 M5:6e24e36ceae5a9c0dfa1cbe4520b4425 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:01:23 LN:2918 M5:61060b6e397e85fd905668b5876d8c50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:04 LN:2918 M5:2d4a59604c2d3d795f3647a186685ad9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:14N LN:3090 M5:afc943d7553ef55e21a855f5e266c8a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:46 LN:3075 M5:ae87be36c211dbf040022ade7713d2c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*32:01:01 LN:3518 M5:d3a7f1fb642659538a431ee2c1d8113e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*32:06 LN:3389 M5:06c6aff700dd7ddd935fd83f2def16e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*33:01:01 LN:3518 M5:f1f4a4e1fd2e774e4003c4f94c67b36a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*33:03:01 LN:3518 M5:4e7abd41072e8f3c62c49c683497d39c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*33:07 LN:3389 M5:4ed7b17c57b32199660f285b9e53bdd8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*34:01:01 LN:3517 M5:c79f20a6bd41e2e41b6e067222b4af42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*34:02:01 LN:3096 M5:a3a26d9b6292599851c207c193d92b23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*36:01 LN:2903 M5:a923a3fb762fa22c7956888b6634dbcf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*43:01 LN:3388 M5:a5e6a04ac5537f379e03956d57cefe3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*66:01:01 LN:3517 M5:787d6cacbda41669a942dc4b54c4f7e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*66:17 LN:3075 M5:5f0734606934302fccb508a2f5d3b915 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:01:01 LN:2930 M5:93bb5b64ccd0bab2bc0478d6bd0e8854 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:01:02 LN:3517 M5:957d09385dbaaadcf87f85227a2a43d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:02:01 LN:3517 M5:0e43acd52311b6485d4542edf7c6d286 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:02:02 LN:3388 M5:fbfbf3067287661249f797a0701cbb58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:01:01 LN:3517 M5:21b71bd572d6dda388a4d60211edba0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:01:02 LN:3506 M5:00fd36e8b22143b0adfbe025e2d5d2b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:01:03 LN:2909 M5:df913a8914cc697da83538a7b8e1898e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:02 LN:2916 M5:a34e21e7b4de5c05f67281bf68bdeb66 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:03:01 LN:2917 M5:9eaaf636f6b7bcb8557a2b843eda3b60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:08:01 LN:3120 M5:c2e72d05d212b232f180c5020ad652ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:113 LN:3070 M5:474b432629b8d4cc0486021e71e3dabd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:17 LN:3134 M5:f44b78e8df335a94b8ba2ee62214ed82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:18N LN:3237 M5:250389f8d56a86c0037d9e10ce88aad4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:22 LN:3119 M5:5a8b2633f1fb32860f4d5df30e8677ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:71 LN:3198 M5:dd6320e01a52a1aaa9224cd4c39807e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*69:01 LN:2917 M5:02bd84b3d7b9d16ec8546efc41b4d0c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*74:01 LN:2918 M5:948aa5c51d96d4ecbe3fc862f0214a3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*74:02:01:01 LN:2918 M5:4b972360085a8e764c52f0a30ff47673 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*74:02:01:02 LN:3518 M5:97a7f1d63575aaadaff78b53c7bdd231 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*80:01:01:01 LN:3263 M5:5405ef04524037ea84ce1fc83dc9ac20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*80:01:01:02 LN:3055 M5:5cc77fd13bd6123b7300d6da19ae5c13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:02:01 LN:3323 M5:5eba87e3d51a0b86a498f97022e5714a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:05:01 LN:2676 M5:d41a7c05ac284e89b86b658d33564b3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:06 LN:2676 M5:a5d7749f86004926ffe9fc104b1e99c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:156 LN:2967 M5:8cc8227691836b87823ff2228f9b25a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:33:01 LN:3239 M5:6ab184ee1fa9167f8857a4d6a7b33da6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:41 LN:3266 M5:9b52773dd0c042b641ea254944e932d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:44 LN:3270 M5:03ee83997251cdeeec6269f547238122 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:50 LN:3323 M5:e369192a36b773e819b37507a823343d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:01:01 LN:3322 M5:4ed3fc74f9934e922cc8345b00459784 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:08N LN:3035 M5:3d8eb010a8cb9c3da8d4eb759dee63f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:132 LN:2675 M5:a863b21bd08f28404b8b991486beec56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:134 LN:2959 M5:cd3c81892d9127631465bd4454169e3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:19N LN:3322 M5:c64401d837f2f4eb51a6f89375d02401 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:20 LN:3322 M5:87e42f5c7d6c6b2f1990fb2477271f14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:33 LN:3322 M5:704bdddcfc1c52e4181d4c12a4e25e54 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:79 LN:2676 M5:f08c9b4724eaaedae63d87b79af851de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:01:01 LN:3324 M5:6a8fa9ecf6d7b7a57c77b21c908740b0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:02:01 LN:3324 M5:120d59fa894b11fe23dce75e3f4869f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:02:03 LN:3323 M5:d52345523e7897e545fffd4718dcccf4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:02:09 LN:2919 M5:ef118f2b15e542e80c1b9c162ad69345 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:08 LN:3324 M5:11f30cc59a8a4b6d4b43144c294440c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:15 LN:3323 M5:0684fd43ee5428bc529561b33db2f2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:25 LN:2689 M5:dbbc5af54a1289ade5eb273e2f7aee7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*14:01:01 LN:3312 M5:3764a48b755f8e31055b0e861e4c74e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*14:02:01 LN:3312 M5:26b567e4c01ece594ca1d0f0b18ae0c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*14:07N LN:3255 M5:74dd725f56e8dad2652028bd0b496125 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:01:01:01 LN:3336 M5:b00240fd0143d1f67ee96b53a30adcfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:01:01:02N LN:1208 M5:1c5acd964349055939ac8654093dde0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:01:01:03 LN:3026 M5:dcd416dc1f3d5d91d7374096d09a68ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:02:01 LN:3335 M5:25973b11c58535f98da0dae1d36e1ce7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:03:01 LN:2689 M5:bc488eabb3f7519b04b6a795acdf81c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:04:01 LN:3052 M5:6ccb4f7a3eeb9e8ed44236b5092c2bd9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:07:01 LN:3336 M5:7630abd7e06b6d17b3542a0efdb6c780 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:108 LN:3283 M5:80b9c94caa804a2bd7f2447b9d24cf82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:10:01 LN:2689 M5:c0699fd2bce33c66fbad3066177f17db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:11:01 LN:3336 M5:c3971913c6e6b41e2f1bbb56026c60b0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:13:01 LN:2688 M5:a5d9251e2d32c20001b7845134141a39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:16:01 LN:2688 M5:fc7d48526274847fbb255137159d9d47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:17:01:01 LN:3051 M5:fbfa24d81ff319e1c9a77eb23a5c5af6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:17:01:02 LN:3051 M5:547e0689ef02b1b497deaa785f374c32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:18:01 LN:3336 M5:79c954404a5e1b10f46264fbb3c6b32a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:220 LN:2878 M5:a87213c0fe840a0cac742fc92c4a203c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:25:01 LN:3335 M5:316c1666b4ee7ffb47f4922157d121c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:27:01 LN:2689 M5:e01a2e586f79a078cc425bfca6367182 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:32:01 LN:3336 M5:4411f20a66f0e08032144115799b7530 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:42 LN:3333 M5:e6b197d6c9397d8de0ea8de14a814b05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:58 LN:3336 M5:1c0d71c98a79449eabd99e163692bd6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:66 LN:2902 M5:a5186448b35a7b3923ccdae5bdf4bd8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:77 LN:3336 M5:a4984835f8285fd5518e523394749864 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:83 LN:3337 M5:322d07dc63950f70a35cd4a6cb9ba2ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:01:01:01 LN:3323 M5:b0017c6a0823ba043caa28c260a41b12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:01:01:02 LN:3323 M5:a51373cbff28c2af5ebec8fac8e33cca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:02 LN:2686 M5:ba01be9495db45e331f731023378e599 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:03 LN:3323 M5:207b298dc49c700b8a16865a72eb7c7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:17N LN:2979 M5:01b001b48d8d89f7671231f8cd45ca05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:26 LN:3323 M5:655b4f8cf9b575997c39e45df3664c8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:94N LN:2970 M5:67c613fbd0339031dc79fc91e294348a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:04:01 LN:3325 M5:4380eeb25545f28b8d6a8bf602e7c2f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:05:02 LN:3325 M5:f60437ab7a86bf431ed0854fd2641cdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:05:18 LN:3321 M5:ff2e5f34be64b46f1e15d1091ea54645 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:06 LN:3325 M5:4c3f65501973406722a9c66c6f129061 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:07:01 LN:2677 M5:61c1b2092f60d8b21a413b8e6846c58d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:131 LN:3325 M5:08dcdc60c6c29f52d100af9900b30e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:24 LN:2677 M5:c0e3b858ba702a5959d35e51b8b75406 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:25 LN:2677 M5:f1a1a745dc082e0c0a91813d3f12e52d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:32 LN:3325 M5:ef9b650861b7081940788ef1618a074c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:01:01:01 LN:3327 M5:72eabdc1286e5f8faec021e4c3fbd212 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:01:01:02 LN:3327 M5:8d6dd73094fd1458c95866fab0bccfb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:01:22 LN:2806 M5:198a61b3d4b83cfed1fa018f0b5313e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:02:01 LN:3327 M5:69e50f2988b92d745c93ebc9877eace7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:03:01 LN:2689 M5:866f05a4324734d3cca067f98354488e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:05:01 LN:2690 M5:c6cc89ecf3130ee79cefb981dd362f0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:08:01 LN:2689 M5:6baeeca7110354530934af4af0cccd8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:14:02 LN:3327 M5:99db27c20c358808c9e75b090eb54d06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:241 LN:3042 M5:9fd1849b96ef49c7b705acfdfb430e8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:41 LN:3327 M5:8526562f5800fb5180e418bdf4b6e56b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*37:01:01 LN:3324 M5:8e4396d6b7c04761713fc800437312bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*37:01:05 LN:2687 M5:c4312bfb5ca6f84d1c4b2c444107b844 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*38:01:01 LN:3312 M5:205bcc2884f405305b551c58c25d7232 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*38:02:01 LN:3312 M5:501fd25edfcd87eeda45de0caa78e1de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*38:14 LN:2738 M5:7639a6e735e55ac574403a7970e113b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:01:01 LN:3155 M5:eee292da1356cc9c3bf1b333e89661d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:01:02L LN:3153 M5:cd343572a20faec9ea375660b4b08feb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:01:03 LN:3312 M5:e3fff974f234f099f66e0fe53a93ef2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:03 LN:3155 M5:2e520e3148dcdf7d8fc7763872d61957 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:16 LN:3155 M5:cb333cf3f06cf66b86f11654c941690f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:21 LN:3312 M5:6e1fb83beab576ba8c39ff0237d40277 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:05:01 LN:2675 M5:bf2d7c62a16bf00c2559565daeb0538d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:06:02 LN:2674 M5:77758f231bef5ff95e5a4be58d38dde1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:10:01 LN:3027 M5:fb13d6eeb084ecb4d241e45485ef36e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:13:02 LN:3255 M5:5836ea0fc7935bd208b6caa597934b98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:14 LN:2765 M5:76c31f2b103685de65a25008bf484f11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:34 LN:3254 M5:840ee3b914f83a21f98cde71f89d77d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:38Q LN:2675 M5:55571273ba2d1a50d1f87b47ae59d9aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:01:01 LN:2676 M5:afc20b1efd5b1b479db2e62fb8b88337 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:01:02 LN:3323 M5:e80885c2e036b557e2bd1ca6c2b6667f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:02:01 LN:3258 M5:e6e0e85a0fab0b1e17686742e0ace0e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:03 LN:2677 M5:a4f89215e2d83f162c338ac822bfb46e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:06:01:01 LN:3325 M5:9a238e4bba71b906acf8c46254a9bc31 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:06:01:02 LN:3299 M5:ee4804e6a27f57a5c37e372dc6daa312 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:10:01 LN:3304 M5:5d4db1b120369dcee6c52764f69bfb3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:150 LN:2800 M5:f889007857633aee1ffcdf1fc924ca96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:40 LN:2677 M5:549008522cb77878ea5c2cf5bd048064 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:72:01 LN:3283 M5:7d61179ccd5e3f1fe4b4976456960d02 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:79 LN:3257 M5:521e3a50ed37f445b431b465b0d4ed77 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*41:01:01 LN:3322 M5:17390ad33a3efae3617d3a175671902c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*41:02:01 LN:3322 M5:c886279897cd7e75a357ac3218a1be5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*42:01:01 LN:3322 M5:154e1df41ca09b47ebd7e365545f6e6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*42:02 LN:2675 M5:59d27bea1d07ea5695101e714f65812c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*42:08 LN:3165 M5:d860761be3a99c6724146e606a28aac9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:01:01 LN:3323 M5:477ac3a92e88828aa579f38ac0fc39d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:01:02S LN:3152 M5:05fc8de1a02c971099db853c790d3fca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:01:03 LN:3152 M5:2202501e60f1d3e547cfe4e814c7f877 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:17 LN:3323 M5:3af3bf43df87b594bc20bc5f791785b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:27 LN:2872 M5:6ca96787a367bd1ce0838f941140cb81 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:03:01 LN:3323 M5:83f22de8d085ea321aad42dbf25a571a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:03:02 LN:2676 M5:9fcac4fbbe8fd92d125550cd06db12c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:04 LN:3239 M5:9b24c6a9a01dea4a6bcdb76824470e3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:09 LN:3317 M5:5ed7833ec37da80387b4a86c6b2a2040 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:138Q LN:3043 M5:1088ef8207c18405bc0b180f0226dab0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:150 LN:2676 M5:0290d7c3b24a19eefc6a89bc41146c39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:23N LN:3323 M5:f1ec2e8fa319def50d20ce89e0b80d5a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:26 LN:2804 M5:174005655892f2cff1ad41bb64927506 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:46 LN:3323 M5:4b352ce812b6c8a65a2e45741d805d7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:49 LN:3039 M5:cb75887e3f845944c90cdf5315369b16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:56N LN:2676 M5:4da8a161653ca5951070a765b2070b3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*45:01:01 LN:3338 M5:86f5f0263cbccdf31fc646079fce98d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*45:04 LN:3339 M5:bba751b5e3727ad2af0a8cb343a94d57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*46:01:01 LN:3336 M5:7ab2f1273efeb3a770ca80b5d0d078b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*46:01:05 LN:2891 M5:314e19fc403d8ea017669e53723aead0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*47:01:01:01 LN:3041 M5:3107f208d002db7e36cf098ebbb8516c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*47:01:01:02 LN:3041 M5:9f6a5f1290f5f00afcc6b1e732a37b14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:01:01 LN:3323 M5:105f81689cb818d76fe1effd3d150157 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:03:01 LN:2676 M5:874fcca35339a027ede1021bb682c5b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:04 LN:2676 M5:77accce2b51d36c34cfae7d7f77a0644 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:08 LN:3323 M5:f6f1a40b586aa5025bb2ed56a890ac8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*49:01:01 LN:3340 M5:7da4db3c2933e38871dde7de2cdf0131 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*49:32 LN:3340 M5:1a762b6501a216624feb498212c99a07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*50:01:01 LN:3340 M5:9d8a8957807527e6413e745a8fd4e068 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:01:01 LN:3327 M5:263006da7f87d352df017a5efcc6a2ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:01:02 LN:3043 M5:d0a5d20ecc047c9db286860c217ffe57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:02:01 LN:3327 M5:0f09e1d79fda822bb499e29d59e7dfb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:07:01 LN:3327 M5:63b4b6ba9c4049e98e44399a1b1ad03c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:42 LN:2962 M5:8253b5b1e485378dfeedfa598e677579 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:01:01 LN:3327 M5:bb94101c60541202c4b844e21b640a92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:01:02 LN:3327 M5:ff0ebc333c63692ac07e7b95c6febbd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:01:03 LN:3327 M5:9e6abe5b1d3205aed3a8b62d580f5c6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:02 LN:3327 M5:d7fde559163710e8a22f5497902dee7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*53:01:01 LN:3327 M5:0e08f9e5e5ee052f077c388fe43ed672 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*53:11 LN:3274 M5:9d84a07be4be471551bc6c8cd89ddfa0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*54:01:01 LN:3332 M5:7621d4b27eef76b4b57df91eee3bd38c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*54:18 LN:2813 M5:ecf8408d4379ee7e2467c784e51ea2bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:01:01 LN:3332 M5:b19860ce7d3e3feec3da15d850ffaf83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:01:03 LN:3332 M5:17fe5fcacdc35ec18448d04e206578e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:02:01 LN:3333 M5:fe9cf4bfff80e738fa573a1e4336621c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:12 LN:3332 M5:570fdcabb0ff55d30de3a319b09b2da2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:24 LN:3332 M5:0194f66b5128ba6d3eb9fec43ee985c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:48 LN:2980 M5:b8cd7ebdabaea8025fe0b0308b1c500f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*56:01:01 LN:2688 M5:8ea679a7f814ff4b104970fc3363591c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*56:03 LN:2688 M5:13a5b854a9c6cf607e0758dd8977a136 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*56:04 LN:2688 M5:52674e8d83e65bf23b0b36f2cee3b279 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:01:01 LN:3337 M5:435c90dcaa816e70a0a07c23d2f363b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:03:01 LN:2689 M5:b412ccacf520ef015be9010e88d13fd6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:06 LN:3284 M5:14711544ed455ec1aa9a55bae251514e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:11 LN:3306 M5:66b4e723563c1e4a79cc9233cbc2d5fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:29 LN:3337 M5:ae6a6681ba3a2ed0efeceafc6ac41fb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*58:01:01 LN:3336 M5:89112836a876c731a21d3e2357e297d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*58:31N LN:3004 M5:8507d0acf3a65b125d7ff5bd6c4d1e8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*59:01:01:01 LN:3333 M5:23fda5090f014267db805d001c7c3add AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*59:01:01:02 LN:3332 M5:c4602c638fb61927261e08d529f2898f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*67:01:01 LN:3312 M5:87814da89393ae312125f9b36af8bb77 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*67:01:02 LN:2675 M5:390a5500664173ba6708dbeed0e360dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*67:02 LN:3307 M5:ca5872a8e8c8fe4b920ba96e1542cf58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*73:01 LN:3323 M5:0136d8cfbbe9fd393a1e699753f7f7a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*78:01:01 LN:3327 M5:81fbcef3edbbc1e8df879a12d817a9b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*81:01 LN:2676 M5:06b880357cb8d04e7715100462e6e58d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*82:02:01 LN:3050 M5:7f0f011b72e32064bdeab6fc9d15df0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:01 LN:3349 M5:0071e65ee429afd318ef699ad315c4b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:11 LN:3057 M5:b9f8c9b73140b44e888ca0d3cb97a51a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:29 LN:3349 M5:daaad7b0fa23883b6f6a74c29b218154 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:30 LN:3333 M5:f72ada7c617959035065509827004c55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:03 LN:3349 M5:1dfba36de6a84343e0f1bc21f4290dd1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:06 LN:2895 M5:707a109a70808774faabaa9f20fc9c2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:08 LN:3349 M5:d84d29f8412f7bc25c6faa02ce1e8027 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:14 LN:2895 M5:6184a7ce778825a8d3dbbdca08425352 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:21 LN:2895 M5:7c3c33a8a09cf7ab14dfb252dbb028be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:30 LN:3349 M5:e7dc7b0b79ca3fba89e46935c2f6f53a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:40 LN:2968 M5:1f1ff8df1d52ca176768c131fa0dfd1b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:02:02:01 LN:3347 M5:7d432e207af5901819172d943367ab85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:02:02:02 LN:3347 M5:3b927e5396f09d7b73cebc3cf7894022 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:10 LN:2893 M5:bc3caf3cb6c08beee025921ea8ab2c2b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:11 LN:3320 M5:86a83cd46a667da7f75c104e6964997a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:16:02 LN:3029 M5:117c55e59cdf735f8e4600c677295e86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:69 LN:2933 M5:8fb20dc7ab2383635eb05c7b6aa75585 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:85 LN:3347 M5:19bc16298211d1df9285935c0e74349e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:86 LN:3347 M5:1a839f0d783dd916f4c4d85314fb33d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:87 LN:3064 M5:efb30bed21ab99dd6db7b5aec573702f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:01 LN:2894 M5:df3f967e88fe534c02bfad024b8c887a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:02:01 LN:3348 M5:7ca03d45f7f1fd27eac518520148daa3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:02:02 LN:2896 M5:6d6e1775bedec2a59fa4d0bd7c94f4c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:02:03 LN:3348 M5:22fe2d580ec4460d1b085eba87d9aac0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:03:01 LN:3348 M5:4e9e631972020eda52a012a3bcce4cd5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:01:01 LN:3348 M5:df0eaa78940580a0f21395f9387cc32d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:01:02 LN:3348 M5:d13c9657f578e20631d54771581b5204 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:02 LN:2877 M5:be42038dd5348757a9c683918b1db4f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:04 LN:2966 M5:deeefe05be47eaf45bb483add4913ffc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:05 LN:2894 M5:bb0c05e7fd6c15d9d6593a4f3bbe783f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:06 LN:2894 M5:21c18b0c0ff10700610d7f1a50b1c899 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:100 LN:3034 M5:99e13ee46eceaa60fe5084f320894a2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:13:01 LN:3065 M5:3981907aafcbb510b01423d7f323477c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:20N LN:3321 M5:b3a7cb20db02d1256c2106d420e765fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:219 LN:3070 M5:2f9e694079fd1378d796e05baa51889c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:261 LN:3348 M5:3248cc886e5d3793ba099f0ab1a05d66 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:40:01 LN:2894 M5:93c62f86d2dfc6633dbd2c975908da1a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:41:02 LN:3328 M5:f5752e34d19b00f37d306621c38909a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:46 LN:2997 M5:0ea8327e0b67ad6f90e5a44c1629c7d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:61 LN:2894 M5:6d712f749acb251535e2ae8c3c617413 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:01 LN:3349 M5:3efce3936c70251730ad6b287f7d110e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:02 LN:3349 M5:5d4e1f36ad16f12cbf6447e60f24081c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:03 LN:3349 M5:9e9f6956c08e23d56266b6fa217efd7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:04 LN:3012 M5:2579591d3a321b72379ecd8a51d7edd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:05 LN:2931 M5:64ad58c15cabe00bc7528c32341c0878 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:62 LN:3329 M5:43792d77155a7b8f48cd4c57e217997e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:03:01 LN:3349 M5:0ccb8d21235af6c2aff22aa6afbc6732 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:06 LN:3349 M5:63b57fd97300edc439359a50449974db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:09N LN:2991 M5:0fbbbf7cb8fddeb130cf9e967404f973 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:128 LN:3086 M5:e6d5cc6672b9d7e2050ce659e5ed35b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:161 LN:3237 M5:5bf40c2edbc86b4e13300af3d685dc1b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:177 LN:3349 M5:8547dcf17572b7586eec8ec28cbb8792 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:70 LN:3058 M5:5f1c7d679cd5c3f3110db5fe628cd613 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:71 LN:3086 M5:02b46fcce463bf80c626c51f5d36bab3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:01:01:01 LN:3349 M5:c6d922fe90d58a4380b338ce33a098db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:01:01:02 LN:3349 M5:a7b54d490750d2723ab72f5eab4de589 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:08 LN:3059 M5:1560938f348bbf8027a77fe08ce4b46f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:09:01 LN:3322 M5:bb8835a101a1bd226ba1cf04e30c8298 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:93 LN:2946 M5:8163cb61a36ebacb034b44d4537e3ccd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:02:01:01 LN:3349 M5:e2d2d51306ffa6a15072abc9e218afa3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:02:01:02 LN:3349 M5:289ade2a84e2a669f4950d905de18ef3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:02:01:03 LN:3349 M5:541d1cf5b93596d04882fdcea98fdb24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:23 LN:3349 M5:f90da72a0371a17e345090ee35ced67e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:24 LN:3349 M5:8416842ec1691954a14211e9b178951b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:46N LN:2987 M5:1276d9ecb257086ba85fb1dff231b2d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:01:01 LN:3354 M5:718bc83515052da25d2aa2cf1017aa8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:01:02 LN:3093 M5:e45eed48ec341cc12ae10b917381d885 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:02 LN:3352 M5:d7dd73d1eb5b9a25c83e84ef950dd44b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:19 LN:3354 M5:db13dc42d8ac6f58daa4d04dd21e0296 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:27 LN:3195 M5:53fc59605c057f246aa7cb06caa3523c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:45 LN:3354 M5:7b104b85dc1b908764ff4904a903c90a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:01 LN:3354 M5:00b5a7cce8e5acc98b508e4d39091f15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:02 LN:3074 M5:152f1c93813d70470aa3a116478c5a69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:03 LN:3354 M5:b854cfa857b40775c2ad6e6ded4b848a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:04 LN:3353 M5:7de039797ea7911c70f4fa82c658366e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:05 LN:3354 M5:00709b8f2f15aa3aa482a992d1d87b60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:05 LN:2903 M5:c7cbc76d1fb0114a55ee635afdb0cd15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:06 LN:3354 M5:1d0e73f11030eece15f033cab7216c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:64 LN:3354 M5:7f780958705ae801a5814f2471cb59f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:04:01 LN:3354 M5:7aa1a4c1a413aca4e232a2e7dce8ee4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:04:02 LN:3343 M5:b44a66a5ff9ba711c465dc629d4336e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:06 LN:3354 M5:3ac9135bdf1975f31d5f501cb5b62c98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:149 LN:3098 M5:df315cb1e89fca70587836e750b11737 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:18 LN:3353 M5:fa6f988acdf9509ba3790814e29ef79c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:19 LN:3222 M5:2597c84fe3afb1831211a4c9ad6427ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:26 LN:3069 M5:705cb7c1e6112114a894aab34b391fdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:30 LN:2903 M5:e5947b700176aabf378cf29e78c17084 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:32N LN:3334 M5:fe7d565923067a8248624f41f45c79df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:384 LN:3349 M5:90a8a5267a890ccd78717e88de59232d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:385 LN:3354 M5:20b5d8a093d1e81d1e6b9e56b6d4ad17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:386 LN:3183 M5:b5524ee2cc10b5a45e99af42e190f5f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:391 LN:3354 M5:de98c716203e1ca551130af6affe2199 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:392 LN:3354 M5:1a509719976de84a60b59343364e4b51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:49 LN:2935 M5:45a4d818fffa2d2428658489af9e98b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:56:02 LN:3354 M5:e4c99b9226de6adbf587934d835048d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:66 LN:3354 M5:a822c754dee47e720af532f5f5bb1ef4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:67 LN:3354 M5:2ba41a6538775c77f84b648069196d70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:01:01 LN:3349 M5:96d5d92a1f9a605bb014f058b767ecfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:01:03 LN:2998 M5:585c1deb75a38ddadc48575546be3772 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:02:01:01 LN:3349 M5:734e931f1481380f2d0bf98c7925ee2f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:02:01:02 LN:3349 M5:8f2c108d077649a22ae5df5fb42fe265 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:03:01 LN:3349 M5:633f446c1fba5006f49dd2bbddb3ce5e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:04:01 LN:2895 M5:0d4f700e3c6bb58e12ab10c1c85f1bcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:112 LN:3178 M5:ad581d3ae2ddf7d3895c8bda459221c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:20 LN:3349 M5:de321b1690b9ce4e07c6f6f1c838ba7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:21 LN:3349 M5:574d8b3a969397fe0d6168a851acac10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:22 LN:3349 M5:c4fc4ff7544492d91fc221e274b790a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:24 LN:2895 M5:9cc0d743f4c6cea3a61dd94cf81e8782 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:27 LN:3349 M5:3ab94e3b0cb8b613e8cc644c6dc715d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:36N LN:3097 M5:5e4997d79367c75ea3301d1222f70938 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:40 LN:2978 M5:e8013eaab611499b1827191279b34223 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:41 LN:3019 M5:bf7ecc6786f26c3740e9291e7fdd990e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:62 LN:3086 M5:a3f951c6e67ba7b5d43b4678504ceb8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:02:02 LN:3349 M5:6f12358794b5c624b6948b27722c0d4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:03:01:01 LN:3349 M5:a5f9f1324e2a617a08c5bcbc275608b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:03:01:02 LN:3348 M5:ff3c56a68534ef6adbf0622ea691498c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:08 LN:3066 M5:5800471074ab27c8bea70d68c5e225d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:13 LN:3058 M5:807b94f9d89314085415b5578b24a778 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:19 LN:3349 M5:3f11cc62c9ed887231ac88ad834d72c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:22 LN:2895 M5:9ba9eb10b465c567357944d23d28cb83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:99 LN:3349 M5:6bc65113a76be4e417061df97ec9323e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:02:01 LN:3349 M5:8707b7806173ec4a4c61b1d405f1aae3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:03 LN:3349 M5:833afc09e1ba23f97925580cbd67b077 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:21N LN:3099 M5:360ab26c5e5b147d6195bcdff0c92871 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:23 LN:2976 M5:e5e65cbe62521c667b3ed587aaa762e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:02:01 LN:3349 M5:95c60c535112b121a9e6ee900399d619 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:05:01 LN:3349 M5:d59cc60db3e774256fafc8cb4e13702e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:05:02 LN:3349 M5:e4ecf0c60d3ee668e494d70c54964c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:13 LN:2895 M5:a7312985b9c4182c9232eb0ffdc57ed0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:16 LN:3066 M5:35043b5832829f2204f9418cc925e19b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:17 LN:3349 M5:82cd4aaf3336e9d3414b28f0d7286e9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:96Q LN:3349 M5:42133cdaef4b18738bc26fa5695f8f65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*16:01:01 LN:3349 M5:0c9b3216f1f00e1a3201ea90fb49bd61 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*16:02:01 LN:2895 M5:cf1da0837be9b9302b0fb7158fc5396d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*16:04:01 LN:3349 M5:aefc6289675459afe38397002b7451c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:01:01:01 LN:3368 M5:aafe636c5bfce4449d6eed73eefa3a9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:01:01:02 LN:3368 M5:d3cbf8067c1957eaeb80c6a399477245 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:01:01:03 LN:3368 M5:f2cc1e59a91a4f102f9ab5fdf4d3c1ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:03 LN:3197 M5:a94688722b11045bbf7ef13dfc7d34a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*18:01 LN:3346 M5:d53dd9ee731f0437bbbffc584867b0b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:01:02 LN:6489 M5:d0d728fb8e62a0b0366517669b0e4164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:01 LN:6484 M5:823632b556203973124fe9c35cb13a3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:02 LN:6485 M5:6d2b0b5b4de67207756f9a9ca9132232 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:03 LN:6485 M5:df8eab835a0677224be043db0196865c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:04 LN:6492 M5:1e79553d8e925c6243368db955220c7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:03:01:01 LN:6485 M5:705ec2d75d9d349a7e4d1b2df73073d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:03:01:02 LN:6492 M5:dc4b199889931d13d1522358a9a01f3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:04:01:01 LN:6484 M5:f9a28fc80725b04a807c1a7fa37786bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:04:01:02 LN:6485 M5:da201e2fb04103e9cfa1eaecab78b098 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:05:01 LN:6485 M5:a13023aaec38d48c163c5fe5996596d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:07 LN:5959 M5:1af58658f072dc6319086af52c3d5f6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:10 LN:5790 M5:52685ee8463a30a3909841a38e4b9d8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:11 LN:5926 M5:18894dd38987f5ffd32b9896a4a7f732 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*02:01 LN:6403 M5:14bb0fb46e443150199a75018f001115 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*03:01:01 LN:6437 M5:75b42b5c4fb93885ab4fdb6a312d690f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*03:02 LN:6437 M5:caaf9e4318294ebd0c262db0018d88fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*03:03:01 LN:6437 M5:c0908bb87356f6cad982be1acb618dcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*04:01:02:01 LN:5853 M5:dc7c3223c9df7e828a1c8f22c4cc89c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*04:01:02:02 LN:5666 M5:6548c257283705fae841fe89148efc1f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*04:02 LN:6210 M5:6d9b8e4e332e7e398b831c81a6179e76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:01:01:01 LN:5806 M5:72dbcba71cbed79962e1fcb9efa94824 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:01:01:02 LN:6529 M5:b129bfcbf4b80c10ffab12eb652ba5a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:03 LN:6121 M5:38e52c5a505ee662100c0789cfe884a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:05:01:01 LN:6593 M5:f4020b6d26ac50eed22026f28371f610 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:05:01:02 LN:6597 M5:456ddd5aaccb336023a80f2ae5abbbdd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:05:01:03 LN:6393 M5:39e340eb675634315a0f9aa27e8fdb32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:11 LN:6589 M5:a47aa87bace1ec4da327ee121bceac36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*06:01:01 LN:5878 M5:cd02d6c8bd4c86f9abb999bab52820cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*02:01:01 LN:7480 M5:0b0031da03392e56acd208fc67ae6e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*02:02:01 LN:7471 M5:69337da3c9bd0a6048d1a1144aabbdb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:01:01:01 LN:7231 M5:78802163e98cdc6f909438b62e0cfab4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:01:01:02 LN:7230 M5:e8f01ef987d6dd2a878f94e6d97be1f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:01:01:03 LN:7231 M5:2423aebb09fea4369cab41a1ea47afc8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:02:01 LN:7126 M5:2218c10eeaa7f39f94ed3f0309605510 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:03:02:01 LN:7126 M5:ffa1cdc44c405e284e6f51859e1c2b36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:03:02:02 LN:7126 M5:739f0c7c0c72cf31a975aebe2109f11c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:03:02:03 LN:6800 M5:2dd9cf67abbc473a663d6d559694616b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:05:01 LN:6934 M5:0de7b3ac9974b084f8db58e416c25eb5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:01:01:01 LN:7090 M5:38570713e3fcfe831cc045e479f65e9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:01:01:02 LN:7090 M5:0f304adf7acf3bd4b7c54c1394c85a4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:03:01:01 LN:7089 M5:618b80618d0a6750a82d9caf5b2b01ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:03:01:02 LN:7089 M5:198d06518fff03b2dafc0bb113efc008 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:01:01 LN:7111 M5:231c9c7d1321a266933777181a2761a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:02:01 LN:7102 M5:739d56a7e8c44823d1a11bd4ff13f465 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:03:01 LN:7103 M5:1bfde4e12c5bac5e9e5e7e6b84582b0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:09:01 LN:7102 M5:805267e877e03b8ec95319888e38c5dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*01:01:01 LN:10741 M5:91618decb1b3933c623070b2ccbe52a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*01:02:01 LN:11229 M5:9efa1a8356e55f6be83b4ddb84833e4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*03:01:01:01 LN:13908 M5:411919f8128149a1f5099cdd22d276ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*03:01:01:02 LN:13426 M5:869ae29cc3f279d7fc43e27249a53e8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*04:03:01 LN:15246 M5:ce0de8afd561fb1fb0d3acce94386a27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*07:01:01:01 LN:16110 M5:4063054a8189fbc81248b0f37b8273fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*07:01:01:02 LN:16120 M5:a4b1a49cfe8fb2c98c178c02b6c64ed4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*08:03:02 LN:13562 M5:dc6eb484555ba796b15b9b91aa1a9ec6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*09:21 LN:16039 M5:cad793cbc22699d1cca3101b5a55437d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*10:01:01 LN:13501 M5:91dcd8c149b00a3edb1afa43a1cc6346 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*11:01:01 LN:13921 M5:07cefc23572c21731a2804c5d44fcf55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*11:01:02 LN:13931 M5:f47cd478ee5be3ff048069adbbb5c101 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*11:04:01 LN:13919 M5:fc86714e3d7b9503d74e40d92f08cd7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*12:01:01 LN:13404 M5:31f08980f62b68be96334f3cafc3e7c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*12:17 LN:11260 M5:b0b7bea536479c8e61164e1475203038 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*13:01:01 LN:13935 M5:937994edc4b4760eb13cbf451c3f3bbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*13:02:01 LN:13941 M5:6a124566ab0a103d525d2fcf1292ce15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*14:05:01 LN:13933 M5:10890137f738be0861b6ba128cfb953d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*14:54:01 LN:13936 M5:2b67be4ed005b3f3040e3c72bfc65c0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:01 LN:11080 M5:d22cd7f323b0e51abb025a4dec827aa5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:02 LN:11571 M5:5e3280587aa6f38dd9a282e9bf21287e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:03 LN:11056 M5:d548f5e5798e09c869571ea8c660c983 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:04 LN:11056 M5:3bb2753595aaf099a490a7ce1e042fce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:02:01 LN:10313 M5:2deab6035ce8cc2e09db20698cf1f117 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:03:01:01 LN:11567 M5:e6a26b767a62b282e0db211bbc9a7363 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:03:01:02 LN:11569 M5:4e0d459b9bd15bff8645de84334e3d25 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*16:02:01 LN:11005 M5:4a972df76bd3ee2857b87bd5be5ea00a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +chr1 1 248956422 + . +chr2 1 242193529 + . +chr3 1 198295559 + . +chr4 1 190214555 + . +chr5 1 181538259 + . +chr6 1 170805979 + . +chr7 1 159345973 + . +chr8 1 145138636 + . +chr9 1 138394717 + . +chr10 1 133797422 + . +chr11 1 135086622 + . +chr12 1 133275309 + . +chr13 1 114364328 + . +chr14 1 107043718 + . +chr15 1 101991189 + . +chr16 1 90338345 + . +chr17 1 83257441 + . +chr18 1 80373285 + . +chr19 1 58617616 + . +chr20 1 64444167 + . +chr21 1 46709983 + . +chr22 1 50818468 + . +chrX 1 156040895 + . +chrY 1 57227415 + . +chrM 1 16569 + . diff --git a/assets/chrY_grch38.interval_list b/assets/chrY_grch38.interval_list new file mode 100644 index 00000000..ef58ff66 --- /dev/null +++ b/assets/chrY_grch38.interval_list @@ -0,0 +1,3368 @@ +@HD VN:1.5 SO:coordinate +@SQ SN:chr1 LN:248956422 M5:6aef897c3d6ff0c78aff06ac189178dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2 LN:242193529 M5:f98db672eb0993dcfdabafe2a882905c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3 LN:198295559 M5:76635a41ea913a405ded820447d067b0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4 LN:190214555 M5:3210fecf1eb92d5489da4346b3fddc6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5 LN:181538259 M5:a811b3dc9fe66af729dc0dddf7fa4f13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6 LN:170805979 M5:5691468a67c7e7a7b5f2a3a683792c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7 LN:159345973 M5:cc044cc2256a1141212660fb07b6171e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8 LN:145138636 M5:c67955b5f7815a9a1edfaa15893d3616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9 LN:138394717 M5:6c198acf68b5af7b9d676dfdd531b5de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10 LN:133797422 M5:c0eeee7acfdaf31b770a509bdaa6e51a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11 LN:135086622 M5:1511375dc2dd1b633af8cf439ae90cec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12 LN:133275309 M5:96e414eace405d8c27a6d35ba19df56f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13 LN:114364328 M5:a5437debe2ef9c9ef8f3ea2874ae1d82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14 LN:107043718 M5:e0f0eecc3bcab6178c62b6211565c807 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15 LN:101991189 M5:f036bd11158407596ca6bf3581454706 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16 LN:90338345 M5:db2d37c8b7d019caaf2dd64ba3a6f33a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17 LN:83257441 M5:f9a0fb01553adb183568e3eb9d8626db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18 LN:80373285 M5:11eeaa801f6b0e2e36a1138616b8ee9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19 LN:58617616 M5:85f9f4fc152c58cb7913c06d6b98573a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20 LN:64444167 M5:b18e6c531b0bd70e949a7fc20859cb01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21 LN:46709983 M5:974dc7aec0b755b19f031418fdedf293 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22 LN:50818468 M5:ac37ec46683600f808cdd41eac1d55cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX LN:156040895 M5:2b3a55ff7f58eb308420c8a9b11cac50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrY LN:57227415 M5:ce3e31103314a704255f3cd90369ecce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrM LN:16569 M5:c68f52674c9fb33aef52dcf399755519 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270706v1_random LN:175055 M5:62def1a794b3e18192863d187af956e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270707v1_random LN:32032 M5:78135804eb15220565483b7cdd02f3be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270708v1_random LN:127682 M5:1e95e047b98ed92148dd84d6c037158c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270709v1_random LN:66860 M5:4e2db2933ea96aee8dab54af60ecb37d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270710v1_random LN:40176 M5:9949f776680c6214512ee738ac5da289 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270711v1_random LN:42210 M5:af383f98cf4492c1f1c4e750c26cbb40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270712v1_random LN:176043 M5:c38a0fecae6a1838a405406f724d6838 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270713v1_random LN:40745 M5:cb78d48cc0adbc58822a1c6fe89e3569 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270714v1_random LN:41717 M5:42f7a452b8b769d051ad738ee9f00631 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270715v1_random LN:161471 M5:b65a8af1d7bbb7f3c77eea85423452bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270716v1_random LN:153799 M5:2828e63b8edc5e845bf48e75fbad2926 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_GL000221v1_random LN:155397 M5:3238fb74ea87ae857f9c7508d315babb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL000008v2_random LN:209709 M5:a999388c587908f80406444cebe80ba3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL000208v1_random LN:92689 M5:aa81be49bf3fe63a79bdc6a6f279abf6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270717v1_random LN:40062 M5:796773a1ee67c988b4de887addbed9e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270718v1_random LN:38054 M5:b0c463c8efa8d64442b48e936368dad5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270719v1_random LN:176845 M5:cd5e932cfc4c74d05bb64e2126873a3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270720v1_random LN:39050 M5:8c2683400a4aeeb40abff96652b9b127 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270721v1_random LN:100316 M5:9654b5d3f36845bb9d19a6dbd15d2f22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_GL000009v2_random LN:201709 M5:862f555045546733591ff7ab15bcecbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_GL000225v1_random LN:211173 M5:63945c3e6962f28ffd469719a747e73c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270722v1_random LN:194050 M5:51f46c9093929e6edc3b4dfd50d803fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_GL000194v1_random LN:191469 M5:6ac8f815bf8e845bb3031b73f812c012 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270723v1_random LN:38115 M5:74a4b480675592095fb0c577c515b5df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270724v1_random LN:39555 M5:c3fcb15dddf45f91ef7d94e2623ce13b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270725v1_random LN:172810 M5:edc6402e58396b90b8738a5e37bf773d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270726v1_random LN:43739 M5:fbe54a3197e2b469ccb2f4b161cfbe86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270727v1_random LN:448248 M5:84fe18a7bf03f3b7fc76cbac8eb583f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270728v1_random LN:1872759 M5:369ff74cf36683b3066a2ca929d9c40d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL000205v2_random LN:185591 M5:458e71cd53dd1df4083dc7983a6c82c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270729v1_random LN:280839 M5:2756f6ee4f5780acce31e995443508b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270730v1_random LN:112551 M5:48f98ede8e28a06d241ab2e946c15e07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270731v1_random LN:150754 M5:8176d9a20401e8d9f01b7ca8b51d9c08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270732v1_random LN:41543 M5:d837bab5e416450df6e1038ae6cd0817 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270733v1_random LN:179772 M5:f1fa05d48bb0c1f87237a28b66f0be0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270734v1_random LN:165050 M5:1d17410ae2569c758e6dd51616412d32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270735v1_random LN:42811 M5:eb6b07b73dd9a47252098ed3d9fb78b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270736v1_random LN:181920 M5:2ff189f33cfa52f321accddf648c5616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270737v1_random LN:103838 M5:2ea8bc113a8193d1d700b584b2c5f42a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270738v1_random LN:99375 M5:854ec525c7b6a79e7268f515b6a9877c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270739v1_random LN:73985 M5:760fbd73515fedcc9f37737c4a722d6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrY_KI270740v1_random LN:37240 M5:69e42252aead509bf56f1ea6fda91405 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270302v1 LN:2274 M5:ee6dff38036f7d03478c70717643196e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270304v1 LN:2165 M5:9423c1b46a48aa6331a77ab5c702ac9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270303v1 LN:1942 M5:2cb746c78e0faa11e628603a4bc9bd58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270305v1 LN:1472 M5:f9acea3395b6992cf3418b6689b98cf9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270322v1 LN:21476 M5:7d459255d1c54369e3b64e719061a5a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270320v1 LN:4416 M5:d898b9c5a0118e76481bf5695272959e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270310v1 LN:1201 M5:af6cb123af7007793bac06485a2a20e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270316v1 LN:1444 M5:6adde7a9fe7bd6918f12d0f0924aa8ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270315v1 LN:2276 M5:ecc43e822dc011fae1fcfd9981c46e9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270312v1 LN:998 M5:26499f2fe4c65621fd8f4ecafbad31d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270311v1 LN:12399 M5:59594f9012d8ce21ed5d1119c051a2ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270317v1 LN:37690 M5:cd4b1fda800f6ec9ea8001994dbf6499 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270412v1 LN:1179 M5:7bb9612f733fb7f098be79499d46350c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270411v1 LN:2646 M5:fc240322d91d43c04f349cc58fda3eca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270414v1 LN:2489 M5:753e02ef3b1c590e0e3376ad2ebb5836 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270419v1 LN:1029 M5:58455e7a788f0dc82034d1fb109f6f5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270418v1 LN:2145 M5:1537ec12b9c58d137a2d4cb9db896bbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270420v1 LN:2321 M5:bac954a897539c91982a7e3985a49910 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270424v1 LN:2140 M5:747c8f94f34d5de4ad289bc604708210 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270417v1 LN:2043 M5:cd26758fda713f9c96e51d541f50c2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270422v1 LN:1445 M5:3fce80eb4c0554376b591699031feb56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270423v1 LN:981 M5:bdf5a85c001731dccfb150db2bfe58ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270425v1 LN:1884 M5:665a46879bbb48294b0cfa87b61e71f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270429v1 LN:1361 M5:ee8962dbef9396884f649e566b78bf06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270442v1 LN:392061 M5:796289c4cda40e358991f9e672490015 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270466v1 LN:1233 M5:530b7033716a5d72dd544213c513fd12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270465v1 LN:1774 M5:bb1b2323414425c46531b3c3d22ae00d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270467v1 LN:3920 M5:db34e0dc109a4afd499b5ec6aaae9754 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270435v1 LN:92983 M5:1655c75415b9c29e143a815f44286d05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270438v1 LN:112505 M5:e765271939b854dd6826aa764e930c87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270468v1 LN:4055 M5:0a603090f06108ed7aff75df0767b822 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270510v1 LN:2415 M5:cd7348b3b5d9d0dfef6aed2af75ce920 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270509v1 LN:2318 M5:1cdeb8c823d839e1d1735b5bc9a14856 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270518v1 LN:2186 M5:3fd898b62ca859f50fb8b83e7706352b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270508v1 LN:1951 M5:7d42a358d472b9cbdfdf30c8742473d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270516v1 LN:1300 M5:1cbaaafbbf016906a5bf5886f5a0ecb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270512v1 LN:22689 M5:ba1021c82d1230af856f59079e2f71b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270519v1 LN:138126 M5:8d754e9c9afd904fba0a2cd577fcc9a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270522v1 LN:5674 M5:070b4678e22501029c2e3297115216bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270511v1 LN:8127 M5:907ca34a4a2a6673632ebaf513a4c1a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270515v1 LN:6361 M5:dd7527ee8e0bdb0a43ca0b2a5456c8c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270507v1 LN:5353 M5:311894d0a815eb07c5cac49da851cb4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270517v1 LN:3253 M5:913440c38d95c618617ca69bb9296170 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270529v1 LN:1899 M5:4caf890f2586daab8e4b2e2db904f05f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270528v1 LN:2983 M5:d75c9235f0b8c449fc4352997c56b086 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270530v1 LN:2168 M5:04549369e1197c626669a10164613635 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270539v1 LN:993 M5:19e3a982e67eafef39c5a3e4163f1e17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270538v1 LN:91309 M5:d60b72221cc7af871f2c757577e4c92a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270544v1 LN:1202 M5:e62a14b14467cdf48b5a236c66918f0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270548v1 LN:1599 M5:866b0db8e9cf66208c2c064bd09ce0a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270583v1 LN:1400 M5:b127e2e6dbe358ff192b271b8c6ee690 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270587v1 LN:2969 M5:36be47659719f47b95caa51744aa8f70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270580v1 LN:1553 M5:1df30dae0f605811d927dcea58e729fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270581v1 LN:7046 M5:9f26945f9f9b3f865c9ebe953cbbc1a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270579v1 LN:31033 M5:fe62fb1964002717cc1b034630e89b1f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270589v1 LN:44474 M5:211c215414693fe0a2399cf82e707e03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270590v1 LN:4685 M5:e8a57f147561b361091791b9010cd28b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270584v1 LN:4513 M5:d93636c9d54abd013cfc0d4c01334032 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270582v1 LN:6504 M5:6fd9804a7478d2e28160fe9f017689cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270588v1 LN:6158 M5:37ffa850e69b342a8f8979bd3ffc77d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270593v1 LN:3041 M5:f4a5bfa203e9e81acb640b18fb11e78e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270591v1 LN:5796 M5:d6af509d69835c9ac25a30086e5a4051 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270330v1 LN:1652 M5:c2c590706a339007b00c59e0b8937e78 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270329v1 LN:1040 M5:f023f927ae84c5cc48dc4dce11ba90f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270334v1 LN:1368 M5:53afe12d1371f250a3d1de655345d374 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270333v1 LN:2699 M5:57baf650c47bba9b3a8b7c6d0fb55ad6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270335v1 LN:1048 M5:eb27188639503b524d2659a23b8262ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270338v1 LN:1428 M5:301ef75a6b2996d745eb3464bd352b57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270340v1 LN:1428 M5:56b462bac20d385cdfcde0155fe4c3a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270336v1 LN:1026 M5:69ad2d85d870c8b0269434581e86e30e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270337v1 LN:1121 M5:16fc8d71a2662a6cfec7bdeec3d810c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270363v1 LN:1803 M5:6edd17a912f391022edbc192d49f2489 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270364v1 LN:2855 M5:6ff66a8e589ca27d93b5bac0e5b13a87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270362v1 LN:3530 M5:bc82401ffd9a5ae711fa0ea34da8d2f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270366v1 LN:8320 M5:44a0b65b7ba6bcff37eca202e7d966ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270378v1 LN:1048 M5:fc13bda7dbd914c92fb7e49489d1350f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270379v1 LN:1045 M5:3218bef25946cd95de585dfc7750f63b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270389v1 LN:1298 M5:2c9b08c57c27e714d4d5259fd91b6983 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270390v1 LN:2387 M5:7a64d89ea14990c16d20f4d6e7283e10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270387v1 LN:1537 M5:22a12462264340c25e912b8485cdfa91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270395v1 LN:1143 M5:7c03ca4756c1620f318fb189214388d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270396v1 LN:1880 M5:9069bed3c2efe7cc87227d619ad5816f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270388v1 LN:1216 M5:76f9f3315fa4b831e93c36cd88196480 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270394v1 LN:970 M5:d5171e863a3d8f832f0559235987b1e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270386v1 LN:1788 M5:b9b1baaa7abf206f6b70cf31654172db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270391v1 LN:1484 M5:1fa5cf03b3eac0f1b4a64948fd09de53 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270383v1 LN:1750 M5:694d75683e4a9554bcc1291edbcaee43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270393v1 LN:1308 M5:3724e1d70677d6b5c4bcf17fd40da111 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270384v1 LN:1658 M5:b06e44ea15d0a57618d6ca7d2e6ac5d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270392v1 LN:971 M5:59b3ca8de65fb171683f8a06d3b4bf0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270381v1 LN:1930 M5:2a9297cfd3b3807195ab9ad07e775d99 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270385v1 LN:990 M5:112a8b1df94ef0498a0bfe2d2ea5cc23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270382v1 LN:4215 M5:e7085cdcee6ad62f359744e13d3209fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270376v1 LN:1136 M5:59e8fc80b78d62325082334b43dffdba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270374v1 LN:2656 M5:dbc92c9a92e558946e58b4909ec95dd5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270372v1 LN:1650 M5:53a9d5e8fd28bce5da5efcfd9114dbf2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270373v1 LN:1451 M5:b174fe53be245a840cd6324e39b88ced AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270375v1 LN:2378 M5:d678250c97e9b94aa390fa46e70a6d83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270371v1 LN:2805 M5:a0af3d778dfeb7963e8e6d84c0c54fba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270448v1 LN:7992 M5:0f40827c265cb813b6e723da6c9b926b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270521v1 LN:7642 M5:af5bef7cefec7bd7efa729ac6c5be088 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000195v1 LN:182896 M5:5d9ec007868d517e73543b005ba48535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000219v1 LN:179198 M5:f977edd13bac459cb2ed4a5457dba1b3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000220v1 LN:161802 M5:fc35de963c57bf7648429e6454f1c9db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000224v1 LN:179693 M5:d5b2fc04f6b41b212a4198a07f450e20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270741v1 LN:157432 M5:86eaea8a15a3950e37442eaaa5c9dc92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000226v1 LN:15008 M5:1c1b2cd1fccbc0a99b6a447fa24d1504 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000213v1 LN:164239 M5:9d424fdcc98866650b58f004080a992a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270743v1 LN:210658 M5:3b62d9d3100f530d509e4efebd98502c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270744v1 LN:168472 M5:e90aee46b947ff8c32291a6843fde3f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270745v1 LN:41891 M5:1386fe3de6f82956f2124e19353ff9c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270746v1 LN:66486 M5:c470486a0a858e14aa21d7866f83cc17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270747v1 LN:198735 M5:62375d812ece679c9fd2f3d08d4e22a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270748v1 LN:93321 M5:4f6c6ab005c852a4352aa33e7cc88ded AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270749v1 LN:158759 M5:c899a7b4e911d371283f3f4058ca08b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270750v1 LN:148850 M5:c022ba92f244b7dc54ea90c4eef4d554 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270751v1 LN:150742 M5:1b758bbdee0e9ca882058d916cba9d29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270752v1 LN:27745 M5:e0880631848337bd58559d9b1519da63 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270753v1 LN:62944 M5:25075fb2a1ecada67c0eb2f1fe0c7ec9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270754v1 LN:40191 M5:fe9e16233cecbc244f06f3acff3d03b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270755v1 LN:36723 M5:4a7da6a658955bd787af8add3ccb5751 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270756v1 LN:79590 M5:2996b120a5a5e15dab6555f0bf92e374 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270757v1 LN:71251 M5:174c73b60b41d8a1ef0fbaa4b3bdf0d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000214v1 LN:137718 M5:46c2032c37f2ed899eb41c0473319a69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KI270742v1 LN:186739 M5:2f31c013a4a8301deb8ab7ed1ca1cd99 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000216v2 LN:176608 M5:725009a7e3f5b78752b68afa922c090c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_GL000218v1 LN:161147 M5:1d708b54644c26c7e01c2dad5426d38c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270762v1_alt LN:354444 M5:b0397179e5a92bb7a3300b68e45a9f72 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270766v1_alt LN:256271 M5:e3f36479d0e07abbd0d47babdc76e19d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270760v1_alt LN:109528 M5:f2ea4b127c54df13f53a2b2b5a358087 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270765v1_alt LN:185285 M5:628b663499df4f5de7dbdd56943bdb6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_GL383518v1_alt LN:182439 M5:978987018f1a910273ebcc387e038de8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_GL383519v1_alt LN:110268 M5:349e96f115f829409bd1087b5fb684ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_GL383520v2_alt LN:366580 M5:52e97087cc76c9fd73d4815c1e379ee0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270764v1_alt LN:50258 M5:36d9e8a04906213f8c1d4cf81fc4f83f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270763v1_alt LN:911658 M5:2f651e42b9fd434c2310be375fe8645e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270759v1_alt LN:425601 M5:8477794d60329af9bd00cd9277981a59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270761v1_alt LN:165834 M5:3909a76846aa6ed534ba6be66a60cc81 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270770v1_alt LN:136240 M5:38181b04426519779c84cf9a8927cf00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270773v1_alt LN:70887 M5:aa8b8ec2dd7776e643699db29ac85d74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270774v1_alt LN:223625 M5:a6d8be44258a4b8e3b55ffaccbd3b444 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270769v1_alt LN:120616 M5:537f266cfc0ba05dfb532658fb592eb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_GL383521v1_alt LN:143390 M5:8c6f0a214ddbfbd52be574a566e4b21a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270772v1_alt LN:133041 M5:7cc5209d7e796e90bd024204c04a9b7f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270775v1_alt LN:138019 M5:79c3c0ad56276d3eff8cb747b57973a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270771v1_alt LN:110395 M5:3739c7d552cfc62c495704f4f2d61330 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270768v1_alt LN:110099 M5:5f6d54708a2fd0e4592319c2c91850a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_GL582966v2_alt LN:96131 M5:485c442c93fe19514153702f0c84d952 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_GL383522v1_alt LN:123821 M5:df3e809f9a87f792218db18db51f6ad4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270776v1_alt LN:174166 M5:87fe3336a33a4aa9c04ff7991aa78a11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270767v1_alt LN:161578 M5:160c7bb94aa35c1d61c27aadf1727862 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_JH636055v2_alt LN:173151 M5:42f48ed9d46aded55795ef64e4713d55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270783v1_alt LN:109187 M5:3a60aafd707904d4da9c1c090a7cf0ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270780v1_alt LN:224108 M5:2c050e6aeecf29b54469dea8c5631057 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_GL383526v1_alt LN:180671 M5:620913159e2fbd4e931ac120e3c584c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270777v1_alt LN:173649 M5:9673b29322cf16da2d295778229c1772 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270778v1_alt LN:248252 M5:f0053d7b401730af8c34cd7d20dd0a91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270781v1_alt LN:113034 M5:c94ff451868540e0399bf62acb24e1dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270779v1_alt LN:205312 M5:3eec883e9656d4c4d96ea1e6d3c118ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270782v1_alt LN:162429 M5:ceaa7d4ca7d4b80ba9a8d9e48223de2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270784v1_alt LN:184404 M5:35980922a4773cefc710c08134d16772 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270790v1_alt LN:220246 M5:07cf7caef89c4677af575c370a1ebbb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL383528v1_alt LN:376187 M5:2948653361f974fbed3e26a4dfbf332c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270787v1_alt LN:111943 M5:e315d4f96ad548f1af1935d97f2af9df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL000257v2_alt LN:586476 M5:03c6c36060cd6c9f9b4fd0b096ff40e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270788v1_alt LN:158965 M5:463baeb6369579e0d387371989492dc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_GL383527v1_alt LN:164536 M5:6d728406957c5c7fb158dbdb7efef2b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270785v1_alt LN:119912 M5:4932c3e044a1e3731cd4de290f6492b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270789v1_alt LN:205944 M5:3c9ef00afbe249de4934eeac37d64233 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270786v1_alt LN:244096 M5:107c6b17f17b5d24936663fe8e70cd2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270793v1_alt LN:126136 M5:0c6c632ce75031c86e3054c34d3b9b49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270792v1_alt LN:179043 M5:3677eaca510b7e7c5f30ec8382a09d24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270791v1_alt LN:195710 M5:3a62433e49995583fc44e640241a60bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL383532v1_alt LN:82728 M5:eb61b6b3f9374b05ce68ae4a393cf5ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL949742v1_alt LN:226852 M5:20d5046bbd2a21729fdd64fa94bdd5a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270794v1_alt LN:164558 M5:9808234a2843375d92d4c34e262373b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL339449v2_alt LN:1612928 M5:1b6fa375fdf382778e6645d822d12254 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL383530v1_alt LN:101241 M5:adcb4048e465b6b949990853e436a136 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270796v1_alt LN:172708 M5:6b125232b8842fafd4179203620fa2be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_GL383531v1_alt LN:173459 M5:9161d10779b02fa44b841136ef9e499c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270795v1_alt LN:131892 M5:6670fafb8f6ceb4f46392f3178f29666 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000250v2_alt LN:4672374 M5:740358c10fbb870c86a7e44226bbdb3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270800v1_alt LN:175808 M5:3ed7e87ce250a8466359176e96d6a6a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270799v1_alt LN:152148 M5:80fd907ae0e4d20ad13960cb92ab6d45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL383533v1_alt LN:124736 M5:7d1a65603558094937299ff10e8714af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270801v1_alt LN:870480 M5:bd0c66e2085cf16906ebc6b130862bd6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270802v1_alt LN:75005 M5:c66357c9b0909ee32c75286796602ce3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KB021644v2_alt LN:185823 M5:332d693d4f2026747d670e52836694ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270797v1_alt LN:197536 M5:2b76b3d07dc4cb2992e7125c19e32594 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270798v1_alt LN:271782 M5:7f074e537d58c543d116ce2c45bb0966 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270804v1_alt LN:157952 M5:9babd3431c32811769c782703f7b8c3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270809v1_alt LN:209586 M5:26d14130d09dc093446dd31e8f0be76c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270806v1_alt LN:158166 M5:b55d6ad642408486735aede89d70c0c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_GL383534v2_alt LN:119183 M5:c6ff49147dedce02366d6ade10580611 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270803v1_alt LN:1111570 M5:986e63220694b8c91bad1d6d990f6c83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270808v1_alt LN:271455 M5:52ce11809c32fe22003c5039e407d3e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270807v1_alt LN:126434 M5:4da184771ac6a8644e6df506bbd8a35e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270805v1_alt LN:209988 M5:d3a95141230a470a930f685fbce90a04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270818v1_alt LN:145606 M5:5f8af0060f092d941cbe9d873ccc1d41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270812v1_alt LN:282736 M5:93b572cdabe748641570fa2ed3391222 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270811v1_alt LN:292436 M5:dacc0b0ef9fae890a1741dca03ba7d5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270821v1_alt LN:985506 M5:bbdee492e8852d313be96b6340fbfb1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270813v1_alt LN:300230 M5:c91599edb1c553cf527c7f3ba754bb20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270822v1_alt LN:624492 M5:2cd6749ad4385747595c0b41440cb41d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270814v1_alt LN:141812 M5:84d9d4bbbac92a40b13809e501ff92fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270810v1_alt LN:374415 M5:369545bbf4f206fd1175a84da12b38fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270819v1_alt LN:133535 M5:29d6d49a19ae259feb012f492ab83ce0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270820v1_alt LN:36640 M5:d3b4609d5f29708fc33023259e4b775a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270817v1_alt LN:158983 M5:d6e6a3ac3c2f5afe16c2cfb2e813b30c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270816v1_alt LN:305841 M5:60bb5379ab4d817058300ef606b9fee6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270815v1_alt LN:132244 M5:8be72bf872ff1edfc3f43cd9b7d0b9b3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383539v1_alt LN:162988 M5:12406aad3f3da31bda9c21a1aa0e16b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383540v1_alt LN:71551 M5:23aea04f46682e2a2be1a5ff3934a9fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383541v1_alt LN:171286 M5:0c787911df2449cbba8609bebf897ecb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_GL383542v1_alt LN:60032 M5:12a3180640a49f33c960eb12ca61a6c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr9_KI270823v1_alt LN:439082 M5:ad4baa1567e313eda0aad427008e10cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_GL383545v1_alt LN:179254 M5:c27dc6fea378fecf178a44682257c25e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_KI270824v1_alt LN:181496 M5:af40e32c32de290cfe497a110ff3bdfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_GL383546v1_alt LN:309802 M5:ed6fb45e0a25c31903cbb0f78d9d487e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr10_KI270825v1_alt LN:188315 M5:3119d196965ee9cae7aeda77131076f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270832v1_alt LN:210133 M5:2b63a3f97e490e807587639807d26293 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270830v1_alt LN:177092 M5:dbe0c94a39d4a91469ffa6e509b3f191 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270831v1_alt LN:296895 M5:b0f755388212c03651b6fdc7531c3fd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270829v1_alt LN:204059 M5:6bc1308e442a1662ae27952f126b7c01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_GL383547v1_alt LN:154407 M5:7b556f03729e304a286c8d7ef0f0c10e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_JH159136v1_alt LN:200998 M5:8ac9fb9d942dba38bfd30f8d767f4bba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_JH159137v1_alt LN:191409 M5:b293c854ddcbc316cb1d449bca46fbb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270827v1_alt LN:67707 M5:86017dee76a03e3dc3c8833018101fae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270826v1_alt LN:186169 M5:a903d85efe5aa37dac36160bddeeac87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL877875v1_alt LN:167313 M5:3dd30a7638c3a3c518fc15571546b1be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL877876v1_alt LN:408271 M5:5c3a364520bf7ed46894abdce8f6e032 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270837v1_alt LN:40090 M5:e749a70a94624f09e134600d122c130d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383549v1_alt LN:120804 M5:60a7c1711d7f23fd7311a7e4f96896f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270835v1_alt LN:238139 M5:b163c6fa013f6cb75b01088689f1a67f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383550v2_alt LN:169178 M5:d61d9a153c3fd556b48e1c511a6145e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383552v1_alt LN:138655 M5:c28f12c6ee0dec4cc6995766a710960c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383553v2_alt LN:152874 M5:89b111e38005345de92036b249ab6080 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270834v1_alt LN:119498 M5:3ad1c94c00299533f6acd33ea2f04df1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_GL383551v1_alt LN:184319 M5:d96719c32333013a51c4d6d3261f984f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270833v1_alt LN:76061 M5:8c9988aa66d02708e3e57663902fc664 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270836v1_alt LN:56134 M5:28a69648439a2c02d46750eee929b20d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270840v1_alt LN:191684 M5:d90a653d7ac3171c8fb762d0012249f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270839v1_alt LN:180306 M5:b97ea581776626ac41b69f851a85a456 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270843v1_alt LN:103832 M5:563c8412eb284fc5321af590a4c9ab9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270841v1_alt LN:169134 M5:6ac8a99077817e6bc9be36327b8aa18e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270838v1_alt LN:306913 M5:baf90eafb4ed6330cb151c1d5538f721 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr13_KI270842v1_alt LN:37287 M5:231dd4484df464129d3120986fe2af73 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270844v1_alt LN:322166 M5:b64acbff6218bd210676141e4e678a82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270847v1_alt LN:1511111 M5:9d380ae26e2edb178ef0121021f7a7ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270845v1_alt LN:180703 M5:51b3fa9f43d11aeb91b3debb33496d22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr14_KI270846v1_alt LN:1351393 M5:1ee28b84d30d13e03341b382995b05bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270852v1_alt LN:478999 M5:5104fe22193b4bd04166ecb401beb06a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270851v1_alt LN:263054 M5:64217994ed61c2feb5412ecc5a7a37b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270848v1_alt LN:327382 M5:d61e4262335c4884ad97dc5d73782870 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_GL383554v1_alt LN:296527 M5:4a3d54bda53308ca941d6d0e794b05cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270849v1_alt LN:244917 M5:7966604eef1b897ee97e8dce9e79b18e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_GL383555v2_alt LN:388773 M5:c904b1792869ae0565acbbdc19b9522f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270850v1_alt LN:430880 M5:5371d98deea30e91051e3efd20016b76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270854v1_alt LN:134193 M5:0e126949f4b012d27f55aed5f1c4ca84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270856v1_alt LN:63982 M5:515d2b9de600d584473c20bea079f34c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270855v1_alt LN:232857 M5:436afa974458133c013b037d4a2dc1c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_KI270853v1_alt LN:2659700 M5:5e28daf08ffeafb037b6e97ba3c959e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_GL383556v1_alt LN:192462 M5:bed6a2667e8452a176e93e921e0c21f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr16_GL383557v1_alt LN:89672 M5:0989118882ce9c38635e2809e5bf71c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383563v3_alt LN:375691 M5:fcd64ac83b2ebb57f50931c9d6fc0a31 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270862v1_alt LN:391357 M5:f2efc8dc887a8c0101053fa14491e07f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270861v1_alt LN:196688 M5:808750bf9b346e0a731a1bffac75a01e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270857v1_alt LN:2877074 M5:f5ca1bb91881efefa473c983f9519561 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_JH159146v1_alt LN:278131 M5:384b5b32f0ea2cfd15ac268a2ce07909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_JH159147v1_alt LN:70345 M5:4bf63957bfa1ecdbbab483d4c0ce6682 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383564v2_alt LN:133151 M5:fc2eb07543a6ecb0a27d9fa12cd91cfc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL000258v2_alt LN:1821992 M5:8bd6071029f2dbc5ab9d2d912bf5c953 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383565v1_alt LN:223995 M5:063358c8e7f81361b959efab7b3f15cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270858v1_alt LN:235827 M5:69fbdc82c5ef837f574d0b3c8b9c647f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270859v1_alt LN:108763 M5:8d28bd3b1a63fa9a945051f28e087668 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_GL383566v1_alt LN:90219 M5:a0f25165c6537c9861cc1231f710e99f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270860v1_alt LN:178921 M5:91e560df1ad6c58e7e1739178b8c7209 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270864v1_alt LN:111737 M5:04e6ca7eabe96be35a18eb4c0675071d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383567v1_alt LN:289831 M5:d9015dd9a0916a98ed8ab99fd3cdd012 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383570v1_alt LN:164789 M5:08366c03855961f13b1d5e65920ccf74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383571v1_alt LN:198278 M5:40015159c7da8f06875bb558587e3f07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383568v1_alt LN:104552 M5:e9aba11d18125a2bce2b1e5915e9a904 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383569v1_alt LN:167950 M5:8d13c3e7cbb2b7e1a3225c5a54fe8f44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_GL383572v1_alt LN:159547 M5:8fc7aaa775b43df3d77c9782a140a981 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270863v1_alt LN:167999 M5:2e691a3fc5108cc7decde377ef398fde AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270868v1_alt LN:61734 M5:2dfd26bf8f217b858edc062be1846db5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270865v1_alt LN:52969 M5:b95ce15823c60ab83ec7a984f3dc9ebc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383573v1_alt LN:385657 M5:5404455aab275489bc8e6c9fb3ead5cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383575v2_alt LN:170222 M5:dd8730d9d33765ff135fcfadb8810280 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383576v1_alt LN:188024 M5:8d4496a682182f8273a2fad665fcf4a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL383574v1_alt LN:155864 M5:0386df1d3476e6649f919195cc072fc7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270866v1_alt LN:43156 M5:d205b57d55e89546400e0f1e230a8a53 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270867v1_alt LN:233762 M5:3d8464a9e183031ea70e0e12fa231163 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949746v1_alt LN:987716 M5:d76e635e75bc038782fb3d0c195d33fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_GL383577v2_alt LN:128386 M5:f00c218d09df83c8b515a6b5591fe30c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_KI270869v1_alt LN:118774 M5:2b8065d3bdbac6664d7f35c25d049113 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_KI270871v1_alt LN:58661 M5:29e7c064fe54ab6b7fd8accb0363821b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr20_KI270870v1_alt LN:183433 M5:779f6fd5220eddc54631e80b94bb905a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383578v2_alt LN:63917 M5:d512f47a48fc477e7232d3b46f2bda86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_KI270874v1_alt LN:166743 M5:45c435343bfd1d94c4ff17689faf507d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_KI270873v1_alt LN:143900 M5:22bc49cad0dda4ec9d79ffd619be94d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383579v2_alt LN:201197 M5:631f76952802048256225746f1a14a89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383580v2_alt LN:74653 M5:b0cfe93a0987bda7488445b3c37b2516 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_GL383581v2_alt LN:116689 M5:1c9b893acb0fb6a6d9ff1915ce9004ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr21_KI270872v1_alt LN:82692 M5:e8daa648582ccb498c469d4f6dcf4140 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270875v1_alt LN:259914 M5:8a27dfcd4c4ae0239e3207b9994d8331 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270878v1_alt LN:186262 M5:07e6bd13f82b45996b0165c0a2c0ebb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270879v1_alt LN:304135 M5:9fb8076a6ca93af66b2878d5cf07ebb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270876v1_alt LN:263666 M5:507bafbc0e637e7e5854acab4d2b7de7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270877v1_alt LN:101331 M5:b6724c024308122f0d19c875771d571e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_GL383583v2_alt LN:96924 M5:03ed78804fcfe33fb202c22d20e1ed05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_GL383582v2_alt LN:162811 M5:1919a95f3ea48fde56ba925295086028 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX_KI270880v1_alt LN:284869 M5:e4ed2d1ef2ee71f00075ed9537aab284 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX_KI270881v1_alt LN:144206 M5:6370851c900248567c9bc5bee75089ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270882v1_alt LN:248807 M5:9a4ca55b5d44458dc5a1682ac6483738 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270883v1_alt LN:170399 M5:79916aa2c6a7669500b59ddd7b4eccec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270884v1_alt LN:157053 M5:28517f9e5682de5e74b42ba7c84a9d41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270885v1_alt LN:171027 M5:b5fc4688af8411394923dbcf6a85b85d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270886v1_alt LN:204239 M5:fae7fb0677c513b24e8027969233140f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270887v1_alt LN:209512 M5:3c672b8b13188d46ed1ea6806fdc9662 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270888v1_alt LN:155532 M5:325a22a47ae227dda0c8704cf4725601 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270889v1_alt LN:170698 M5:680f4977d9743df71085eacbff34769b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270890v1_alt LN:184499 M5:8862bbaae8fc895769859a6e89d19601 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270891v1_alt LN:170680 M5:0b1dd9ea37a3772563fb7298ad1f3857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr1_KI270892v1_alt LN:162212 M5:24ba517f0feae1b6a95e1c65c21282be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270894v1_alt LN:214158 M5:0bfafe4b4a536ed3e5b77a89408d7534 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr2_KI270893v1_alt LN:161218 M5:d701ebc3d24a0056dc6b9418ba4e15c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270895v1_alt LN:162896 M5:4d08672ade726bd914e62a36d734da0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270896v1_alt LN:378547 M5:751a447059436d9d5987f8417b2e2bd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270897v1_alt LN:1144418 M5:5a8582c4943187c1a842801cf17d3706 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr5_KI270898v1_alt LN:130957 M5:9919f71320ac92b1abb42e2aedea84ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000251v2_alt LN:4795265 M5:e51d466e4a702acf3c9c5ffdc1ee0c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr7_KI270899v1_alt LN:190869 M5:b42d6c28bfd9049414fb9d2617528db4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270901v1_alt LN:136959 M5:3d60ee1215e273e0c0267ad063614015 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270900v1_alt LN:318687 M5:80404f3147bd316898e6b5281f32c073 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270902v1_alt LN:106711 M5:f100803823a7cde3694698028e4c515c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270903v1_alt LN:214625 M5:5ce11ce469afc974c3024b30033dc5d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr12_KI270904v1_alt LN:572349 M5:6d8ebe7fb3dd3be62e34a1d2982e6f46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270906v1_alt LN:196384 M5:eb8157203f051ef7cfcab1f4647f22c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr15_KI270905v1_alt LN:5161414 M5:31c97360f2a53ab92bd8d6db1b1a410d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270907v1_alt LN:137721 M5:f5a65eb09de3017536d1b7c0b2237fbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270910v1_alt LN:157099 M5:4eef5dbfe56e13c810780221b0f6426d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270909v1_alt LN:325800 M5:6a46afe4c5e257b556f25c37a09fc024 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_JH159148v1_alt LN:88070 M5:bd147af8e713f365ff05352eb8a4508f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr17_KI270908v1_alt LN:1423190 M5:ef3f9ebebe7ad9f9690daedeae8a74f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270912v1_alt LN:174061 M5:3a8acbc0c5c751ccad11263a608715fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr18_KI270911v1_alt LN:157710 M5:930ee72eaddcaf1355220cd39539c326 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949747v2_alt LN:729520 M5:10169e6e86933b2bf74797be020fc857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KB663609v1_alt LN:74013 M5:54abe159678a84e88ceb2d5271027628 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrX_KI270913v1_alt LN:274009 M5:a4d4a5e5b5da1e65f007116b2797a4f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270914v1_alt LN:205194 M5:086e17b28e2ac14e602c5dae2c358364 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270915v1_alt LN:170665 M5:a5c43ab0e4289f3951e65fd57419782a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270916v1_alt LN:184516 M5:45199873c7617fab0ba00e85a43ddbeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270917v1_alt LN:190932 M5:1595cb5d2e776d8a505a06db45ea2c04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270918v1_alt LN:123111 M5:e79cb3af945f28de17d744bf24cde080 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270919v1_alt LN:170701 M5:a25ce4a282c7ead76bb2468a9a56d082 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270920v1_alt LN:198005 M5:009fb96b4ee6d64732dac95a1f380f41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270921v1_alt LN:282224 M5:4e9f360581e618964d379d67e3b51f90 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270922v1_alt LN:187935 M5:7b6dc564b92bed8df5de2c1fa8de0986 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270923v1_alt LN:189352 M5:5b0339dbf41b0301512639781d44d546 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270924v1_alt LN:166540 M5:944759f109cad94523d1f3918ac0b382 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr4_KI270925v1_alt LN:555799 M5:08b3f5ff9beac37e3bbc50767cf3b43b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000252v2_alt LN:4604811 M5:0c2ee784f397289b1713ad133fd93d39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr8_KI270926v1_alt LN:229282 M5:58a00f9d6216734f0bf36a0f2294c246 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr11_KI270927v1_alt LN:218612 M5:159fb3a622d456897c41d93f4627d169 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949748v2_alt LN:1064304 M5:21fd288470eea03e7424729134f472f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr22_KI270928v1_alt LN:176103 M5:efcf7ce77388977478ffe2757b8f8430 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270929v1_alt LN:186203 M5:9f8d51d9c1ec4887cd55a1d0d8e61469 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270930v1_alt LN:200773 M5:2c5abf84ad91658f7262dff7ade3e7b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270931v1_alt LN:170148 M5:36b9336df72c820b6efa95567a5aaf28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270932v1_alt LN:215732 M5:4a92a470a7851edf0c238a74814dece5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270933v1_alt LN:170537 M5:413442cc380f0bb8f15b33bc25149af1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL000209v2_alt LN:177381 M5:0e7a0f548f1f770b4272be1bd8b018fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270934v1_alt LN:163458 M5:43c32fd3aae0eee20305d3d735e7bbb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000253v2_alt LN:4677643 M5:a5cdd062ee0d61ea6b3c5166e79b472e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949749v2_alt LN:1091841 M5:cf8641cadcdb22174c55a5d9d5c46036 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270935v1_alt LN:197351 M5:8175b26fd25c1671efd5af96e8b44835 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000254v2_alt LN:4827813 M5:ad357767de6beef959952d39200522ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949750v2_alt LN:1066390 M5:c48b453696107dc7105bce3857e1cbc6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270936v1_alt LN:164170 M5:64f7f27938eb4c80140f34e3d2aed483 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000255v2_alt LN:4606388 M5:bceeb4190283066a6d0891562b41d164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949751v2_alt LN:1002683 M5:1615d0a6f8a5ff11274ba2e00b9487a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr3_KI270937v1_alt LN:165607 M5:39b5207a79f67fb863be3b2a5bed0963 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_GL000256v2_alt LN:4929269 M5:a80b1b3c21ac7e7b7acf75178ae3d83c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949752v1_alt LN:987100 M5:7d007a35ff02e56325881c68bb17b565 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr6_KI270758v1_alt LN:76752 M5:9d0d4a56d72f18d39c7a1094deb177a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_GL949753v2_alt LN:796479 M5:19162055ca3e800f14797b6cd37c1d4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chr19_KI270938v1_alt LN:1066800 M5:9363b56f7b34fb35ab3400b1093f431a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrEBV LN:171823 M5:6743bd63b3ff2b5b8985d8933c53290a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707606v1_decoy LN:2200 M5:20c768ac79ca38077e5012ee0e5f8333 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707607v1_decoy LN:3033 M5:444cb839a910d9af9b5c5f013cb31063 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707608v1_decoy LN:3112 M5:bc263c9aacc51dabcb0ac4987c416a0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707609v1_decoy LN:1642 M5:ec7a95a8f6e3d63152c0b1f46601e2ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707610v1_decoy LN:1393 M5:441a56ef62eccbc2ec6d0384fe40367e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707611v1_decoy LN:1103 M5:a5378db83cbffb5f31da4a549152cf80 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707612v1_decoy LN:1039 M5:4ac166fdb188d87a64b59e346fc040cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707613v1_decoy LN:1619 M5:af5b7705364129a1fdf718e223e8dfb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707614v1_decoy LN:3122 M5:67860fb1c59453dbaf2bc21834f76ff1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707615v1_decoy LN:1934 M5:e8773170190290d21bf5c7bac36c73ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707616v1_decoy LN:3111 M5:9792c2376ee383fa1d0763ff6b391fd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707617v1_decoy LN:2545 M5:7d9f68ca65f2e9029ef8c2d352b6068d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707618v1_decoy LN:2295 M5:dfec4823eafc51fe89a1c8a61a7861a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707619v1_decoy LN:1551 M5:f0f821c64e2f1339f4452cfabcd1a247 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707620v1_decoy LN:2046 M5:9e54f11658064725f046e3ffc7f5166e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707621v1_decoy LN:1222 M5:4053fd7005d4e430ff32b9b0c9dda52d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707622v1_decoy LN:1535 M5:393bc14f66f0af8c20fdd93b1a3dc78c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707623v1_decoy LN:3784 M5:5da25a3d7060acf52ce5d2084d8922cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707624v1_decoy LN:1329 M5:18daae4566bfb62823b548ab88fa894a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707625v1_decoy LN:1238 M5:8a05b8842f52e87406e28162b8fa7249 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707626v1_decoy LN:5623 M5:e6705349b3e2839fcd382596f831045d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707627v1_decoy LN:5821 M5:cafc12fed95e40d4c1b441ad93f0493a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707628v1_decoy LN:2960 M5:1e0a770fe11a74301ab4535bd9be16c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707629v1_decoy LN:1848 M5:5288216fe388c6966e89e6f8a3a5118e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707630v1_decoy LN:2315 M5:1cab33f8538d939c751e2b2d9b01957a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707631v1_decoy LN:1945 M5:099f236a02fe8e80d7f135727589bce1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707632v1_decoy LN:1424 M5:a2e305f020577c5f7806c411f995402c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707633v1_decoy LN:1274 M5:967deda0c966a0bcd27c6e047e18e7f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707634v1_decoy LN:1007 M5:093928d5a51ad63c286ec229982828ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707635v1_decoy LN:1414 M5:270f3e796a1b7c345e83762fa735bfe1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707636v1_decoy LN:1725 M5:f00ca03da369b2dcf101bda70773022b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707637v1_decoy LN:5354 M5:ecf9ac0af0f7009b8b4e5fa639e7fc97 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707638v1_decoy LN:2189 M5:5a928a8e7ad5ec7808ae7dbcc7ba72d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707639v1_decoy LN:1294 M5:692623b127f6621794d92bfc65f198f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707640v1_decoy LN:1831 M5:23d5c8473f768ca2c6a3eed843fc2cf2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707641v1_decoy LN:1647 M5:09778e8253cf377911db86530bec54a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707642v1_decoy LN:2943 M5:6759f7bb4098b6eb0ec14f5c63369661 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707643v1_decoy LN:2857 M5:a6d7044f6c244253ec1e142bbb35d859 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707644v1_decoy LN:1030 M5:e3e8c02e17ebf79c0e90ce41a16ccedb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707645v1_decoy LN:1070 M5:26882fb498a5b281266a48f82726a7c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707646v1_decoy LN:1735 M5:b120aeee1c12ed6986a9743badfcc505 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707647v1_decoy LN:1982 M5:d1d012b49d3cb20db627f6dd65326217 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707648v1_decoy LN:1564 M5:a4fae6ab9f74c3f1b2c0f8352e9a3519 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707649v1_decoy LN:1775 M5:4bcea8af13f18547fe066845bdc1c120 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707650v1_decoy LN:1540 M5:b4256e83f91ba0174562138c3b466a45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707651v1_decoy LN:2013 M5:f7d9c80ab1716aee1a2237dce70b768a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707652v1_decoy LN:1176 M5:4af9bb8c4125407fb9f03e5fc7798528 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707653v1_decoy LN:1890 M5:854efc081d295baa5a1efa0fe1f9bb3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707654v1_decoy LN:3644 M5:5c90649c1bc38e0b333381ac593252bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707655v1_decoy LN:2785 M5:407de1fa7cb87b88317888d98ea56599 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707656v1_decoy LN:1017 M5:f521affa49ef813fea48a8f5b1fa8e13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707657v1_decoy LN:1068 M5:478f244a134bc02c1c51f63009626864 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707658v1_decoy LN:1007 M5:f4ce5e4a861ab83037e05e271e74497b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707659v1_decoy LN:2605 M5:5c8b18731c2eeda273e0caaf2e878654 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707660v1_decoy LN:8410 M5:b581d341cdf7f17875e60e3da33c398b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707661v1_decoy LN:5534 M5:fd57c53936fe1011e42fc08ef3ff65c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707662v1_decoy LN:2173 M5:5ca2d18676a26044b213465e1e6ac206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707663v1_decoy LN:1065 M5:07cb60b1a2ff813eed23c7cc4128baa7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707664v1_decoy LN:8683 M5:ac12df9c6d81003f812323327f937147 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707665v1_decoy LN:2670 M5:366d796fda2fe9f8baadd88deddf9dca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707666v1_decoy LN:2420 M5:b5c696c469b2e831e8a5e8e87c6813e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707667v1_decoy LN:2189 M5:1f055f8a1a1f8c356b45cfcbd6db6713 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707668v1_decoy LN:2093 M5:839cff5bd33068228bd1031bf8be9a64 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707669v1_decoy LN:1184 M5:ad69f6deb582834c638527c565c4de2e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707670v1_decoy LN:1205 M5:aa9070a191ece87a421285b5be2e8b68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707671v1_decoy LN:2786 M5:28c96decb9c1d76b9a76b1ee75e2421d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707672v1_decoy LN:2794 M5:4d547ee98d0678f832df5c46f91604aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707673v1_decoy LN:19544 M5:2d2080522d0d729d94c7d73eda00c62a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707674v1_decoy LN:2848 M5:9182728e5875ee5cfba2c524c997fcbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707675v1_decoy LN:10556 M5:021a0164c68fd77f51bead9e2c4e9cea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707676v1_decoy LN:9066 M5:c8c71f6c1f2612fed812e69c737ca6ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707677v1_decoy LN:7267 M5:0e929202e653306730239e7dbea8a861 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707678v1_decoy LN:2462 M5:21e3c2e28a7980351470a14a0d48160c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707679v1_decoy LN:1774 M5:9f0f7ecdb5b097f83aab97fff76127d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707680v1_decoy LN:1297 M5:3eab486a1f41712d26b8c251ad9dbff1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707681v1_decoy LN:4379 M5:04aec18ad103fe46337c6643d0eaca0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707682v1_decoy LN:4208 M5:b413a0a980c7752db350c74c5f97937b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707683v1_decoy LN:4068 M5:80a8f28af2c872b62345c85f6217dea7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707684v1_decoy LN:2940 M5:774582f989e0cda16927addcf0ece955 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707685v1_decoy LN:3938 M5:cd0020e224ec3edc01ecdfd648f4099d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707686v1_decoy LN:2072 M5:879ef8f0e126b3f557a0170b71459c6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707687v1_decoy LN:1136 M5:69aff37696b0d4542e56fcf9ad9af43c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707688v1_decoy LN:4248 M5:d301756f721c9141f1216e52fa4003da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707689v1_decoy LN:5823 M5:f29516cc0ba82ac48516c65b100b2255 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707690v1_decoy LN:3715 M5:a154584ab9547c044251e469591cfd94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707691v1_decoy LN:4885 M5:ab7f60b71af56c68e4a0f56174c90e4e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707692v1_decoy LN:4813 M5:e8f5365670fcf6e3612d2e77ba943aaf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707693v1_decoy LN:2899 M5:3cf4cd0669a4fc846ef0aa0aac7cb739 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707694v1_decoy LN:1228 M5:38a9e18c0e3208c8b593dc4fdf118a9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707695v1_decoy LN:3119 M5:ba7aa2faa9f2fad7ad94f0acd152e6f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707696v1_decoy LN:3828 M5:4b39179f8d3eefee8f4865bf6d11dd9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707697v1_decoy LN:1186 M5:0b3eecab59c656d96325f01e70a906c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707698v1_decoy LN:1908 M5:708018246fdce7d4b8f47502bfdbc3a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707699v1_decoy LN:2795 M5:001979586db1b719cca6d3dc0e50e71c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707700v1_decoy LN:3703 M5:5c692cc6be5262461fdbba8574e6ff40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707701v1_decoy LN:6722 M5:378424a19c93bf19eb0f565cba923eb1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707702v1_decoy LN:6466 M5:1b5a6efaa31d7974dffe73fc4bb88349 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707703v1_decoy LN:2235 M5:c045d23c4c9497849b45c45423f705ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707704v1_decoy LN:2871 M5:b44844f0650f1953d042b7b0c9740cb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707705v1_decoy LN:4632 M5:6c1d769d4a84500b2eefafe1cf460164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707706v1_decoy LN:4225 M5:d37d4a4d41be60f45aa967ecac1a0c5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707707v1_decoy LN:4339 M5:ffcd631ed0bf56e54cd72ed51c70fa3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707708v1_decoy LN:2305 M5:6ebdd668b564460303637164213d0dff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707709v1_decoy LN:3273 M5:3531b30c5833b2f37585aeabefeafe36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707710v1_decoy LN:5701 M5:943eba7b0fd71418d0ef4ab2bdcc3f14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707711v1_decoy LN:4154 M5:8e6daf77c80fc9e8710c6732e9d72918 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707712v1_decoy LN:1243 M5:65e4a30840d6420ebc8b7681d38ae431 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707713v1_decoy LN:1308 M5:d9aafcd2c4b12f82a113eb5418d120ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707714v1_decoy LN:2922 M5:4904d632dac614c608b8b7e3478dc3f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707715v1_decoy LN:3044 M5:15707c34a9803e1349a621fef2605913 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707716v1_decoy LN:2888 M5:68339f161a66b364c5e9ffed664272f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707717v1_decoy LN:1742 M5:1fd1325fe768dfe31d9199ee60b60206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707718v1_decoy LN:4969 M5:454864584e92f6e195416ac9f9a8ee38 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707719v1_decoy LN:3270 M5:10feb2ed6ea7480290058dfc77385541 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707720v1_decoy LN:6028 M5:ab8f184e44faa3d93d59d9e3beba3acc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707721v1_decoy LN:1105 M5:97e3e0ba281c40270062097594c95b2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707722v1_decoy LN:2884 M5:983f9666298bffa6bb3bc09593f83ab7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707723v1_decoy LN:1124 M5:d1d03191a7579c36409ca1686af957c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707724v1_decoy LN:1454 M5:648298f5e7a06c49b911d520d02036f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707725v1_decoy LN:2565 M5:507d9e32ff14b42ffc67abc3e66f8420 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707726v1_decoy LN:2149 M5:2cc36819133158e39f0ec48e7cadeb08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707727v1_decoy LN:2630 M5:2ce79b6f499673a5546b3b608cc6d262 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707728v1_decoy LN:14625 M5:5c193cc3e52b61477ff6efd7d6bf1168 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707729v1_decoy LN:7431 M5:a6530e653f0ed096c60f6d44f83a5ac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707730v1_decoy LN:5776 M5:8131fcdd109e0c725a9cd0f4dc240efa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707731v1_decoy LN:4820 M5:e86dbde0af3f5ba60b0ca212f4e51b75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707732v1_decoy LN:1227 M5:326c77e23881e6196b8441b3a96fc1d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707733v1_decoy LN:7503 M5:c633c411b0c6959cc08d71120f604c30 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707734v1_decoy LN:9652 M5:97472a33b38a6285aadc3ea8e200a0c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707735v1_decoy LN:1091 M5:8eb7237ab5103bf046f0b4fd8956e506 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707736v1_decoy LN:2467 M5:90141a455f60c4f02dc064d0200707c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707737v1_decoy LN:1270 M5:40c2e03cacd0e24267f2f495997de86f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707738v1_decoy LN:4365 M5:5a1da2ab0c8d8ec4e368ecdcb314a951 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707739v1_decoy LN:4284 M5:62bdd88183d94495bcb948a7c17e045c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707740v1_decoy LN:10282 M5:d20046e860cc9e220ba67181d6317b0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707741v1_decoy LN:5601 M5:8eedf1585943eb4a63b18a14c9d60e08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707742v1_decoy LN:4758 M5:453aaa1ccce2e7bcd76462fc6fb82810 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707743v1_decoy LN:1624 M5:6b23b3de3fd00f6eae35fa84c9f0a1f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707744v1_decoy LN:4024 M5:a5fc63b6fa7d72420c481475f1a9b25b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707745v1_decoy LN:1276 M5:1aa689253b47a87a0497755453cc3064 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707746v1_decoy LN:5083 M5:4df51fadbde93b81c9ce73ae34ad299d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707747v1_decoy LN:2075 M5:b020b9e14b2329811d8020661a1b223b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707748v1_decoy LN:3553 M5:3aae97b73e2f50aa215741927751caf2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707749v1_decoy LN:7010 M5:5f573deb341bf1ebc60148d185f3863b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707750v1_decoy LN:4718 M5:c90f362bf73d35d5b7ecc0df55b8e7f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707751v1_decoy LN:3546 M5:0a4232c675b33b2779a9f54185a01bf8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707752v1_decoy LN:2873 M5:dffaf05b9fdcf311b6631694c9a7f721 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707753v1_decoy LN:2144 M5:f62da5d7fb084c6276e9144911369e38 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707754v1_decoy LN:2243 M5:c01ba9f403c104a17c7a56c2e246402b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707755v1_decoy LN:5343 M5:fc0967e1b54e87ee9e6649ee9e135bfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707756v1_decoy LN:4877 M5:7cddadbee2311357be0a6cbc21b7c3ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707757v1_decoy LN:3034 M5:8bbd8d0206582bdd7ff0d98834c11701 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707758v1_decoy LN:2826 M5:d1fe878facfdb974e00aa366bf3f6574 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707759v1_decoy LN:1221 M5:f538752a6b30c7db1def6888006fdf82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707760v1_decoy LN:1169 M5:45388eebdbbcd5727ecb94a69d2b09dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707761v1_decoy LN:2319 M5:880e2410158ce2b1647e1b9d4e80632e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707762v1_decoy LN:3450 M5:1a94da832f9b0b1e2cf7e642869d2b68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707763v1_decoy LN:2674 M5:98597e188d3ba588151f6808ded88a91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707764v1_decoy LN:3912 M5:5b188ee33158e7afbe044f110d28e434 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707765v1_decoy LN:6020 M5:487d6332ace17c42a8f64aa9adf10de4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707766v1_decoy LN:2303 M5:05f988a4a7180849c6c81602c29279eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707767v1_decoy LN:2552 M5:4f8579ec6353f301ef8362afb14c9e1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707768v1_decoy LN:3656 M5:dd57001db92b45e0677136beb49e978d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707769v1_decoy LN:1591 M5:cae5200b9ceb32d63e9183210ec694c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707770v1_decoy LN:1209 M5:fde0c42984e1da0ba9aada4b168c4913 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707771v1_decoy LN:3176 M5:e48eeb05bf1913704ee94aad24e95e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707772v1_decoy LN:8915 M5:e41a1182f28ef302e03876ec46b7ba76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707773v1_decoy LN:4902 M5:61cb73463b0096ce7f34215a0e9c7d2b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707774v1_decoy LN:3324 M5:d0d739ef87156a3f1b0083d560547169 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707775v1_decoy LN:5997 M5:b23670b667f938d11721f9239ce46676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707776v1_decoy LN:2618 M5:51e373cda128d4d44cf38c8c0057966c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707777v1_decoy LN:10311 M5:c35ba91babc524c1b3270599ece90957 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707778v1_decoy LN:2440 M5:f3bed9c00d53e9777a38a27156dd1659 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707779v1_decoy LN:12444 M5:bf5be5d1c5a27ad4ae37d468d9bf5990 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707780v1_decoy LN:5691 M5:2813badf81db953a968eb7d49bc2882f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707781v1_decoy LN:2717 M5:0a1557b49527e901599bd44d72da8e1b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707782v1_decoy LN:5277 M5:4061182ba5da9755a2a25e68a304ac01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707783v1_decoy LN:4373 M5:3eef41e80ceccdcb21b9dba8a2cbca5a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707784v1_decoy LN:3224 M5:ef2e57d4220e2cf9680eb6cb27022a8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707785v1_decoy LN:2631 M5:3ae2eacb39d96c2b69c8036fa48550e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707786v1_decoy LN:5385 M5:cba39df25869787d7270324f4c2e11be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707787v1_decoy LN:3678 M5:ee5041cbefd1339ffe625fe56a2ad8fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707788v1_decoy LN:1412 M5:cd5878fb701bca2a77f7f0479ada562a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707789v1_decoy LN:1443 M5:098268af4ad1b71ed7dbf4648ea026a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707790v1_decoy LN:1098 M5:437c3cf69fd5e7568ba6cd5302f1b0e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707791v1_decoy LN:3240 M5:b4243a9c38158ab50bf873d91a699467 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707792v1_decoy LN:1915 M5:44e6058f98843778f5708a68a650bd10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707793v1_decoy LN:4667 M5:1664dafd7db46e3d2e9257978a3c0282 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707794v1_decoy LN:7219 M5:69855847368a4c0722753f3097f73427 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707795v1_decoy LN:3277 M5:21882b529bd5fd85dd805de6c51c1d58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707796v1_decoy LN:3473 M5:386834c5cf2dacec8dc5f75898909eb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707797v1_decoy LN:4243 M5:4d8a0b4dee134f88bc4604b841d38ec4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707798v1_decoy LN:17599 M5:6ab64c474c333b7a8e0aaf72d39306a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707799v1_decoy LN:5095 M5:f1c458ebccd70c843cec05e23921bbf6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707800v1_decoy LN:2237 M5:0feef89c01eacd296069717f5c7a7c71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707801v1_decoy LN:2901 M5:27662470b962dfea212da33f14909142 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707802v1_decoy LN:2666 M5:1eb4be22c4e6d37a91facfb3025520b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707803v1_decoy LN:5336 M5:db6d33944d47e02a8df7cda94a1e996c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707804v1_decoy LN:4383 M5:bd1e2dc89c9dd82b43d3787afc9abe47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707805v1_decoy LN:5446 M5:4103eb12b8c3ebec9cd8fe2f49b6d1e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707806v1_decoy LN:6252 M5:9218b0dc97e8ccb069eba3e9d676a995 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707807v1_decoy LN:4616 M5:4d717a57114c8f1b9b4ffb96edcd6615 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707808v1_decoy LN:3021 M5:eaaf056266a70e2a7be4db848d68672d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707809v1_decoy LN:3667 M5:4c8c58d51417cec07e970c76f7b280d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707810v1_decoy LN:4563 M5:4bd16dfab458c175a83a781d1b602d8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707811v1_decoy LN:1120 M5:f63cbec018752a7584fd25ba859e6807 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707812v1_decoy LN:3845 M5:47464e332307f876b9138d74f8726752 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707813v1_decoy LN:2272 M5:c5516af17e36a2e09f21f2f4120377e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707814v1_decoy LN:4764 M5:5d190274f9c28c4642fe1f75b5e3c9f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707815v1_decoy LN:5410 M5:c87029fcb5e0f94edf755e7b6b18f89e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707816v1_decoy LN:7150 M5:e2a7085047a795f4ee89232573d43df7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707817v1_decoy LN:1762 M5:2bf3e07e17fb50802f7da42c78322860 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707818v1_decoy LN:1207 M5:db2fca33bf9e3730c72e754f7e536e79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707819v1_decoy LN:1331 M5:b96ffe2a3a7a75977f2286d021069bc7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707820v1_decoy LN:8307 M5:89d9580408ce4fde62950344c2daa448 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707821v1_decoy LN:2276 M5:2a9fffb25e3ccf46680306388d4c2e6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707822v1_decoy LN:2575 M5:8e5278c0a004efc105d35744a6aed334 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707823v1_decoy LN:3970 M5:ef86294088659e3b6c564f7a2c94abd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707824v1_decoy LN:1352 M5:af1ddf1aad7bb03a0c72d325e8e9a52c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707825v1_decoy LN:3040 M5:673e8681ea9b0fe7b4b74a011c7780e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707826v1_decoy LN:2070 M5:83ff186bce877c493f356e110486b13a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707827v1_decoy LN:2913 M5:156af338c90535ad8ddbebc3cc2b8e06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707828v1_decoy LN:2389 M5:dec17b4db1503252e0d25e88839aef19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707829v1_decoy LN:1835 M5:495cf270e534859f024d452fa5714a83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707830v1_decoy LN:4807 M5:9d8e879d40a82477b244fe7baf4f1603 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707831v1_decoy LN:2201 M5:661353dc86a8b62e524ea43ee3f39c6e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707832v1_decoy LN:1265 M5:e33ce5ec06d99813aca09515f057e64e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707833v1_decoy LN:1961 M5:93e5f197aa47e632cdc4f4f9a06504c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707834v1_decoy LN:1064 M5:28a2c878efec380df24a5544738eda91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707835v1_decoy LN:1932 M5:bf3bff12edc1fb4331c341b1b2044e32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707836v1_decoy LN:3213 M5:d47bed4a51e112b3d415b77d354290ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707837v1_decoy LN:1178 M5:2a4f6a9f9df49215bb56bfbe5d6e1990 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707838v1_decoy LN:2926 M5:5f28eba962c1026228afdff4fad6ade4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707839v1_decoy LN:1038 M5:b42a95db827e89510d3dcdeac5fba1c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707840v1_decoy LN:3298 M5:54dc58ad6f4d92475e298f41206a1118 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707841v1_decoy LN:8992 M5:176684391390b0afaccaac0eecdb9560 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707842v1_decoy LN:6698 M5:b309273a9a78c30bcd5a5573742fd06e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707843v1_decoy LN:4880 M5:3ad4a232fe303ab7c09600c91b6c406b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707844v1_decoy LN:1766 M5:85cb4f0b6ab4d7dcec41ef37ca81ead2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707845v1_decoy LN:3532 M5:fa5f7bc4de1539f23d5610c26d69ed49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707846v1_decoy LN:2297 M5:2bda3374523a39aa9c8766059468392e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707847v1_decoy LN:1234 M5:23e58f01c32ab1539dc5738c36b70940 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707848v1_decoy LN:1205 M5:c9b75dbdb9a2d4ee4648ed7fb537fb0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707849v1_decoy LN:2790 M5:20b3eef55d3dad7a5dbcd68268dad36c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707850v1_decoy LN:2006 M5:67d720cd69f97ad773cdcb3ccde8d47e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707851v1_decoy LN:4593 M5:7c836d280ec9794d222476d02e21b416 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707852v1_decoy LN:1579 M5:ab4542b394c8e1133f8eba10d896cb44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707853v1_decoy LN:9597 M5:9d6b74ff3ae40b1134f4b1f1eabe16ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707854v1_decoy LN:10451 M5:ec7353db2ae0657678d29512a5b78b59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707855v1_decoy LN:3219 M5:b522f004eb3c1bdf17fe74e82e23ff88 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707856v1_decoy LN:2300 M5:7a18b1dc033c5a406a5f752e8a7d5a6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707857v1_decoy LN:5985 M5:28c60286011df7faa5b7167d8dc7a5f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707858v1_decoy LN:2959 M5:682104fe067bc0a5e18763b5d0eae010 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707859v1_decoy LN:1340 M5:3b47b99a35fcc0a437518350a37c97c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707860v1_decoy LN:3148 M5:cc961e4253553c5534e478b629b89930 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707861v1_decoy LN:2242 M5:beedf4d2ae00fca7cc2cd7e9d4ce6012 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707862v1_decoy LN:16513 M5:968c6df8aaaaa1015e74f591e4722ed5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707863v1_decoy LN:7821 M5:9c8e1c87e1b58622c67edbf732b7ce9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707864v1_decoy LN:2159 M5:37c9ce7cb170bed17a0deb982f64fefc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707865v1_decoy LN:2114 M5:8b637137aa5f04b43be61da029e5f818 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707866v1_decoy LN:4109 M5:1d5a765b813cd25ff873c52ca2b47f05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707867v1_decoy LN:1544 M5:c2744b7344993ebcf11d21cb098cace1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707868v1_decoy LN:1005 M5:241518a7a0343d82a0d99b1dc00e5d79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707869v1_decoy LN:8632 M5:010737c4caab4d5e629753ad40bee3bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707870v1_decoy LN:1012 M5:88b3e83459db1925338cff6156325503 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707871v1_decoy LN:4728 M5:dcab24555bd79f11062bd6e856a1db4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707872v1_decoy LN:2165 M5:aff31850364e11f37ba76baa5b7164d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707873v1_decoy LN:7591 M5:b034989a9fb62216a2547cd1206f4185 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707874v1_decoy LN:5202 M5:1e514f0c86c918e80fa4b29c206cb8cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707875v1_decoy LN:4241 M5:da66844cc4d4846716264b16f77233a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707876v1_decoy LN:4131 M5:60562638c91c3b3655e2ab9544600425 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707877v1_decoy LN:2272 M5:d672677153fa65839a94ae64d9284d49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707878v1_decoy LN:2085 M5:d1bc85197aa7215a4b0248a74c19b399 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707879v1_decoy LN:4346 M5:1999b7a1b498a212e212e60377adb20d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707880v1_decoy LN:1208 M5:ea9da47963d703e465aaff5693250f76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707881v1_decoy LN:4543 M5:e84492cd2aa22936e00b280fcaca8212 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707882v1_decoy LN:2772 M5:bed5000e1788ade3ad5a8541cf1c1671 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707883v1_decoy LN:2490 M5:3d040ea1d7a17b15bf44f59b8e66c98c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707884v1_decoy LN:4568 M5:bd5a8cfffb4d5bab0900b4fa1fbf9390 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707885v1_decoy LN:1776 M5:f0f2b210ad8e779eec5a4ba478c83ef7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707886v1_decoy LN:2699 M5:91fad31e963c9f7821cf37705e55f40e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707887v1_decoy LN:3534 M5:f6d25106c5942148df4207ebc4a60371 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707888v1_decoy LN:2424 M5:4857413cb43abc01f2f0c2d56e196332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707889v1_decoy LN:1747 M5:e1946468f8d77d4ac72dd72fe8ce04f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707890v1_decoy LN:1088 M5:698423687f8bc007b40065a2658b7360 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707891v1_decoy LN:1143 M5:3dbbd76127230ad72adb348524c250da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707892v1_decoy LN:2530 M5:8909228bbdb37a62a906447c5b24616a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707893v1_decoy LN:8049 M5:a4e81d020fe37025f26c26aa8241f26d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707894v1_decoy LN:1366 M5:69423d07e5d284b7ad365c144aec6f4e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707895v1_decoy LN:4284 M5:da455b511b9da89b4527ee045c5fe231 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707896v1_decoy LN:33125 M5:10522217e43c9d9228b02fc14c418df3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707897v1_decoy LN:2137 M5:962521d05f6b98894c65d3669ba66008 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707898v1_decoy LN:3840 M5:561d50151a7132f385be0617165bcecb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707899v1_decoy LN:3087 M5:46cc4f61d95475ad4c963e9bfeb206fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707900v1_decoy LN:2041 M5:cea01cf71468a810b970138149139764 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707901v1_decoy LN:3344 M5:ef03bb9d9f28ee51bfc7291ee41812e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707902v1_decoy LN:2921 M5:dcc9f313bc6e72cc000ac62e62e975f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707903v1_decoy LN:6581 M5:6346aa1b0e3055e121b9cdccb04a53fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707904v1_decoy LN:3968 M5:ed15d6545609df15a0758922f36c9f87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707905v1_decoy LN:2339 M5:af66f6d8d03e1c43cef4284aef73ed96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707906v1_decoy LN:1243 M5:bec4227b2724132e7ac912e4532bcf8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707907v1_decoy LN:7776 M5:a9e8cc852787e0a7dea34bd16fd28b35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707908v1_decoy LN:19837 M5:63f4cfca34f0fcd66c826ccc8c6d6cbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707909v1_decoy LN:1737 M5:0eb45f3727a363ec209755519593220a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707910v1_decoy LN:1098 M5:bda7161c475d6f7bae40ce030d70fe87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707911v1_decoy LN:1893 M5:80bef2e1b21000a202a974145a551fe4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707912v1_decoy LN:1281 M5:96d1e0d5628111d9566a6da789c6204b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707913v1_decoy LN:1527 M5:ad42dca85dd0540c9229a86997665245 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707914v1_decoy LN:2055 M5:c7f0324e70cef84566fa5453dcb23f5d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707915v1_decoy LN:2527 M5:f7d3cdbc2f96d05bc8ff741d46f2f687 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707916v1_decoy LN:3275 M5:d9702219a1b8982c63cc1d6238368ab2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707917v1_decoy LN:1265 M5:6df0a4af8c86a2528464f45af7cbaccf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707918v1_decoy LN:2623 M5:5c6afdd9afcdaae5399f684978746b65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707919v1_decoy LN:4850 M5:aed47145c2269b8c33a71652002e351f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707920v1_decoy LN:3584 M5:47dcd6ad41f139cfd6b9a02581cad11c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707921v1_decoy LN:2561 M5:33902e088970543e1715ee99abdcf7b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707922v1_decoy LN:3041 M5:313f5e86963d937b91534f4895c3a590 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707923v1_decoy LN:1409 M5:6af5cfeb86bc84ecdcfb91e994b4bdbb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707924v1_decoy LN:4596 M5:3415bc1f3a762bb7077c328b9e9e723c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707925v1_decoy LN:11555 M5:10cf29455a308a0380471d6bce16f4a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707926v1_decoy LN:1266 M5:ed2740c08c55e9dbdd3cf9db469d0df6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707927v1_decoy LN:1079 M5:7d006b7ffa2791321663578e50f456f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707928v1_decoy LN:1087 M5:e6a75cbd458016b1643e76ecc570d33a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707929v1_decoy LN:1226 M5:21256ce4fdadc803045a9b8f60dfe16b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707930v1_decoy LN:1131 M5:2f7c4c54c98b465c14120d32e5d60362 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707931v1_decoy LN:1199 M5:68471da27aefc5565f37a51052c09c8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707932v1_decoy LN:1084 M5:ff5f2aa407bb1f0573a4d815fb69f917 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707933v1_decoy LN:2038 M5:1b9a682cbf0c31fe8f29a4aa0bbef274 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707934v1_decoy LN:1070 M5:f8c939429a099c8eaead4319b5ecd2b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707935v1_decoy LN:1312 M5:00ead3e9dd86f6d5e7d499e285b509b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707936v1_decoy LN:4031 M5:9175dddf96d1e576065b2465c6e2b567 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707937v1_decoy LN:7445 M5:f83991a23f7bca6045f72a0bf34ecf13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707938v1_decoy LN:1770 M5:d7487b3fc5cbe693cdcd5ef883b5f00d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707939v1_decoy LN:5600 M5:5fc39cbf76db7d0c1d56123a313a22c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707940v1_decoy LN:1882 M5:f239e0af7db0be33b82e8e4dc2405165 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707941v1_decoy LN:1170 M5:e7c47b0be4905c7dcf70b8659a334abb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707942v1_decoy LN:1300 M5:1beccd3ea3988863bad1b7614a1db1e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707943v1_decoy LN:5325 M5:54c4ba54e1ad9eebc7832dfb6cf778fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707944v1_decoy LN:2043 M5:669c152c4b3e10d1f61d5afb2cf22bcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707945v1_decoy LN:1072 M5:d9416b21be3f6603426526a22e7e558e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707946v1_decoy LN:2463 M5:ce498b9d34e1447317c0d5d27aa0f911 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707947v1_decoy LN:1010 M5:4183a38dcef3c56b79dcf7eae090e37f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707948v1_decoy LN:1432 M5:c261bf235424d74a7b1d8624bb8d6ec2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707949v1_decoy LN:1162 M5:26aeb5ffbd148e35fa48fee69317843f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707950v1_decoy LN:1095 M5:2c795c49d9b77f2b5c0ef5c97e76ae46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707951v1_decoy LN:1118 M5:a0c0ea97493f7c511c5b0af1e8913e92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707952v1_decoy LN:1383 M5:fcc78a7bf9b47bb52730911e285ad0f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707953v1_decoy LN:2289 M5:ba3eede08e65f36da588370a142cc02a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707954v1_decoy LN:1648 M5:de71b9c9ca48f28bc0c9d13c5139ce68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707955v1_decoy LN:2203 M5:4c9964a811b62ea018169d81ba474499 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707956v1_decoy LN:3270 M5:316a59db52a456d6aa5e140e1b1c8794 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707957v1_decoy LN:11499 M5:cd3bb1a0e33bc1aafb51df407fcf16df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707958v1_decoy LN:2474 M5:5909618b2a56c4db15b017bfff248a13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707959v1_decoy LN:2294 M5:bfd4a30a41e5e647cba935da2e8a63de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707960v1_decoy LN:1238 M5:8025797164ec304ff940e4ad94643c70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707961v1_decoy LN:3410 M5:02a40e206c78446d368b6001622aa540 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707962v1_decoy LN:1523 M5:7f11ba71c0814d0ca2b3839d55de672d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707963v1_decoy LN:62955 M5:d620b771cabe5b2cc4b943ffa6d69a68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707964v1_decoy LN:6282 M5:fc00ea543316aed78deefeac0eaf8727 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707965v1_decoy LN:3836 M5:97e94c098f92403b805a0a60f9475542 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707966v1_decoy LN:6486 M5:a977897a46254d42ed9a60e6ed5d9d20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707967v1_decoy LN:15368 M5:220b351d87053eb9b844bc6e6e5182a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707968v1_decoy LN:9572 M5:060b9bb36bc05042b371bfbfc6618e3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707969v1_decoy LN:6413 M5:b25e652840d89c9eef74c04703958f9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707970v1_decoy LN:4104 M5:d103bed226a1a7b95d98a8d61e39f70d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707971v1_decoy LN:12943 M5:8a88d2df497490f21c8c2b796544f699 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707972v1_decoy LN:4650 M5:93e792bf92036380920f5d06321cafe3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707973v1_decoy LN:3080 M5:127f70f3cf2cf09e8c7a399c471acf75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707974v1_decoy LN:3134 M5:a0447f79285905c6b9f2202fdb83f838 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707975v1_decoy LN:6211 M5:931aa6a0b0412241d93c942acba0c103 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707976v1_decoy LN:1126 M5:c068c96f088fa2ef7cfe6a805c22121a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707977v1_decoy LN:1101 M5:e86b95e84b7662e5e6e509be83db4b41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707978v1_decoy LN:1101 M5:d46f001c034076f4a3687b647a980623 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707979v1_decoy LN:2648 M5:fe4d1437f61ce0406d36a071f4e7293a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707980v1_decoy LN:2973 M5:9c4cb203ab1d6a54a7ed36d116c60853 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707981v1_decoy LN:2520 M5:3ccf197ae78ce07e23eef5e3c31fb576 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707982v1_decoy LN:2318 M5:6e5cf7df1252379ee351fb2386bcc144 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707983v1_decoy LN:2606 M5:64cc9674054ed4f7cdf0701da89de296 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707984v1_decoy LN:2205 M5:e5814756cacf0c02827237dcd24155a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707985v1_decoy LN:2929 M5:6a2895e9dda391590b1db42aea33e330 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707986v1_decoy LN:3869 M5:9640cfef88fffced10f0edaf20dbda2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707987v1_decoy LN:1117 M5:60f8230f4e335416aa92256695cbcf46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707988v1_decoy LN:2960 M5:b0447a959fdacb8b553c3684184cf036 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707989v1_decoy LN:1009 M5:75d4d43433fa532ce2da4a724ee25c42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707990v1_decoy LN:4048 M5:f0720d93745203f7d155f219ab83b618 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707991v1_decoy LN:2193 M5:fede10b713c7d561d4872feb26040c3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_KN707992v1_decoy LN:1830 M5:1bac13a3ad2592a344e18bf8de117574 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000001v1_decoy LN:25139 M5:9b27ee6060931ae7d17e451b7739e547 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000002v1_decoy LN:18532 M5:9955447b0a6444031f1d68c821fcea22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000003v1_decoy LN:15240 M5:b635cbc1fc3962e93bc1427bc678396e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000004v1_decoy LN:13739 M5:7fa6d2a124f7c9bfeb030b859269f78f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000005v1_decoy LN:11297 M5:44c68451b1d90987e31184e887a24455 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000006v1_decoy LN:10074 M5:ddeeb2059f6f27dee5330cb501a11446 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000007v1_decoy LN:9891 M5:30b47b3ef6b82a46ccfec6573b0c6c10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000008v1_decoy LN:9774 M5:f0bed43412c69b6db572994c9d5d9cd4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000009v1_decoy LN:9727 M5:0cab8d3c0896fb15383dc8aaef1a1f9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000010v1_decoy LN:9358 M5:aba5595273a0e4398df3a8323523d10c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000011v1_decoy LN:8920 M5:fc623f57c6ad9441d3750c0f51722a0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000012v1_decoy LN:8479 M5:6dca96b0605fddf041e27a9f4beed770 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000013v1_decoy LN:8312 M5:f34a4b1860ec9fbd1acc736a3a174193 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000014v1_decoy LN:8261 M5:6deaa38e9033c12ed1ad7f62191a3e04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000015v1_decoy LN:8131 M5:c3df1d07395395fb96b81e27ef3dcf61 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000016v1_decoy LN:8051 M5:f732550392ca9c30b42b4c6acd5d9263 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000017v1_decoy LN:7832 M5:03557dc0d8d0509da30549dc16031c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000018v1_decoy LN:7710 M5:942aca2604695877a0a642916aafd2b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000019v1_decoy LN:7702 M5:c6c2453adbb040df0ea58395995ebae1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000020v1_decoy LN:7479 M5:5b348e642370fdd96c7f2a306318869e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000021v1_decoy LN:7368 M5:0693c472fdc0225c133374a15973bec3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000022v1_decoy LN:7162 M5:6629bbc8b7d3fa10074025773e597c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000023v1_decoy LN:7065 M5:6b413d9f61a68a7ce1ea620aebb3be6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000024v1_decoy LN:7019 M5:14f555be268a0666a71794d0515cd6d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000025v1_decoy LN:6997 M5:470d24c11b0ea5dbd4329912231aba50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000026v1_decoy LN:6994 M5:1a45d626e4f7add376267b1e77bcc942 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000027v1_decoy LN:6979 M5:6890d5c807ceff3e680405d80c19b990 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000028v1_decoy LN:6797 M5:6cde21bfadb3f954f76aba8775f5b89f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000029v1_decoy LN:6525 M5:091fdeaa7841b60f964f1a9cedc12bd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000030v1_decoy LN:6246 M5:7c23df0bfe1cc7d18d52be126f396cca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000031v1_decoy LN:5926 M5:5555324457dbc04a20ac656a15cce856 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000032v1_decoy LN:5914 M5:67d2d8955ebee73fe7f8f3764e4158f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000033v1_decoy LN:5898 M5:de8113c2b1586e776f28207cd56cec1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000034v1_decoy LN:5879 M5:1c6aa8f142642d8cf57f4f7029a20061 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000035v1_decoy LN:5834 M5:29c393ec5d6804ee5dc06b435ffc02f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000036v1_decoy LN:5743 M5:2f131c59606d7cb8cf6c6c495ce84aa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000037v1_decoy LN:5577 M5:20bd1281fc32355adf567b4e0ff160a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000038v1_decoy LN:5413 M5:3d2ed60178406278eb02030b7c0cc328 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000039v1_decoy LN:5250 M5:62ebce054cc44d5c32625c44fa1e5ff5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000040v1_decoy LN:5246 M5:7cf464d2ec26fa4cea2bfd25f995969c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000041v1_decoy LN:5118 M5:ad3a1c8041863a52b7fa6d6d56ce0d3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000042v1_decoy LN:5058 M5:bce45aec79ec4861d8442ec3d738761b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000043v1_decoy LN:4959 M5:f653839b5c54df56a1a2fdd7ceb42db8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000044v1_decoy LN:4853 M5:3505d16e35e056be0892167f5a564661 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000045v1_decoy LN:4828 M5:d43e63bb33a6cb65d5cdd1ca31e94c19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000046v1_decoy LN:4819 M5:db9c73fa0d581cecaf0175aab4a0fc7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000047v1_decoy LN:4809 M5:1b157b5c5c208470638b188e23b55a59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000048v1_decoy LN:4710 M5:ad9552980f4f1bf74b72740d14d2f5ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000049v1_decoy LN:4680 M5:5bb4ddca04b26e3afd0bf218f2947a7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000050v1_decoy LN:4645 M5:6a821c450a9bcf89dfccaa62d46212cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000051v1_decoy LN:4514 M5:bab340cdaa58e6d32ad1138612c84e07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000052v1_decoy LN:4439 M5:3cd292c1df3855202250324272a95b5b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000053v1_decoy LN:4416 M5:73c9659871560313e754f9363053d56c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000054v1_decoy LN:4409 M5:8ab5d2ce8c35201fa585fdf6f4ae670c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000055v1_decoy LN:4392 M5:e2b0cc1cca4b7ed60f85199816696690 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000056v1_decoy LN:4359 M5:ad16965c23d8e07c823a47e9b098f162 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000057v1_decoy LN:4319 M5:3bfb10064835da4e9caf7e8deb1857f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000058v1_decoy LN:4290 M5:947253137780def5c1c0db12039bdeca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000059v1_decoy LN:4242 M5:2a6de19fbea3d44dbf76c71f1778b47e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000060v1_decoy LN:4228 M5:8b1e73bd29fd4c77bb54fb586721b1a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000061v1_decoy LN:4222 M5:8576a97cd4f61cd6455b423f14eaed92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000062v1_decoy LN:4216 M5:d885db4b883ae34dd53ed184783c2144 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000063v1_decoy LN:4210 M5:1bfa5c8aecb62137e83c3274991deceb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000064v1_decoy LN:4206 M5:48398977c32247e425a6a85f97026636 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000065v1_decoy LN:4102 M5:f7d638a8f28d1c9842128b1225325947 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000066v1_decoy LN:4101 M5:78254b10a1884b61ecbfc72be3ad38d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000067v1_decoy LN:4083 M5:19683f0eb0d378e403a918d10931eb76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000068v1_decoy LN:3967 M5:2519be1b425e386f50cf02ec88f8f903 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000069v1_decoy LN:3955 M5:7c186eab354093fe3b26a9e757407fca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000070v1_decoy LN:3945 M5:4cf91327091051082a0ff114dd170f21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000071v1_decoy LN:3930 M5:d97123bfd4ea271ec354c170d89d80d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000072v1_decoy LN:3929 M5:147eecc4607f1ae7fd1dff1c0f98ca25 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000073v1_decoy LN:3924 M5:84bdf303142b233c179ecef62ab58b07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000074v1_decoy LN:3919 M5:648c37f3fa6e7d658440858761213e7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000075v1_decoy LN:3908 M5:36f5d13bc1a3b72a21c0a4b68148d469 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000076v1_decoy LN:3892 M5:052f146ade5330135e5381db9c779f75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000077v1_decoy LN:3890 M5:22c368b726169405e1f364115fc2356a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000078v1_decoy LN:3859 M5:85a6fde3123e4ae2ef854e83b790e55d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000079v1_decoy LN:3846 M5:21dfcbee386bf64a6e7639d212fe4ba0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000080v1_decoy LN:3835 M5:7f8ace0d7314cec254a8ff5addedb0f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000081v1_decoy LN:3830 M5:d40bb66c2d194acad4d612db8d34e1b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000082v1_decoy LN:3828 M5:c6c7826a848a366317f63f5db5dabe87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000083v1_decoy LN:3825 M5:632e853a99e258e0ae002c0c03aa7caa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000084v1_decoy LN:3821 M5:67720b3ea8a4c3be301aa0519627e306 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000085v1_decoy LN:3809 M5:8ee2faad62aedf582f3c33635df47f84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000086v1_decoy LN:3801 M5:dbd8292192827196a4c3d545bfb9b67c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000087v1_decoy LN:3799 M5:15066eea555ea13dca8b28620db8ae45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000088v1_decoy LN:3737 M5:83437130e836bac50aba2aa79fa9d80c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000089v1_decoy LN:3701 M5:16d790e451ef2c33018834904a04c177 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000090v1_decoy LN:3698 M5:4045cd2ec9d306542cc3804aab489587 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000091v1_decoy LN:3692 M5:3a1e6d05d94debffbe6070b59627d610 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000092v1_decoy LN:3686 M5:f2bcad40026ed9d729d9c31034159300 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000093v1_decoy LN:3677 M5:50536f98dd2e44e8a77c5f9d289ad87c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000094v1_decoy LN:3664 M5:65fd750160fcf7b7944c8e015e46a443 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000095v1_decoy LN:3613 M5:3257e4358f19507804bfac363c932664 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000096v1_decoy LN:3611 M5:d10add8e30105013e264b6feede833e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000097v1_decoy LN:3606 M5:c78427ed0c2856bbf8131bd73e54c3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000098v1_decoy LN:3584 M5:81a78209d26627e698602af1848e2b03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000099v1_decoy LN:3581 M5:90e3913247adb7b30059e051bbcefe4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000100v1_decoy LN:3543 M5:3dd50a694f9e6011fc694fab191cb759 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000101v1_decoy LN:3528 M5:0eefcbd5209d0d32ccf640f76a69f676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000102v1_decoy LN:3527 M5:0bc37681f399eec3b3b7dcbf22498b37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000103v1_decoy LN:3496 M5:c04b909a1562f77654eceacd0b8a935f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000104v1_decoy LN:3493 M5:fb84ec004fe99371b9b2d74bfb8570ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000105v1_decoy LN:3484 M5:e07ccdf102c986c26b2bda46045943b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000106v1_decoy LN:3435 M5:4be97b9bc8d65dffe17f17ef9f801240 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000107v1_decoy LN:3391 M5:0878850e674ca72172a37319b9321acb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000108v1_decoy LN:3374 M5:5b7dd688c7eafb7b418766bdab494a84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000109v1_decoy LN:3371 M5:fb407b611c6eab3bb1609123cbeb47c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000110v1_decoy LN:3361 M5:4851563bcd9e0f7af3768f20f33bb22a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000111v1_decoy LN:3351 M5:24701a0d266ed39e5bfd3757bbfa218e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000112v1_decoy LN:3340 M5:d10fcebc376b84a0e301d97eff284137 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000113v1_decoy LN:3320 M5:05f2acb99e398b98f272d297727f28d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000114v1_decoy LN:3282 M5:d20adc7c458920890e8c1c56717c60b3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000115v1_decoy LN:3278 M5:9baab7452d6c49d97acd68acc83ab547 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000116v1_decoy LN:3260 M5:b2b6112ec6f9d22a7842f78e37d6a3b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000117v1_decoy LN:3258 M5:edb413acc1f07788b1a55b647c56997c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000118v1_decoy LN:3253 M5:1143d3e269aa80abfae249b7c653814c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000119v1_decoy LN:3247 M5:8d905fa140b8fded3a9560d24a32cfe9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000120v1_decoy LN:3230 M5:8c96125639143835c0e5b29884855e8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000121v1_decoy LN:3224 M5:6314311a75a1832245fb87dd86655de8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000122v1_decoy LN:3216 M5:80770770768ebb238cb4572d674e1579 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000123v1_decoy LN:3212 M5:63a4964026424edcd64a0e174de5c51a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000124v1_decoy LN:3194 M5:c68922465f39c47a5ebcf4767811e41e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000125v1_decoy LN:3189 M5:9e4ae67a2bea0ce8335cfb82e125cc2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000126v1_decoy LN:3177 M5:94806d6a47b3781ed8e5004a2c577255 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000127v1_decoy LN:3176 M5:419d834659cd952516de6d9dcae8c3b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000128v1_decoy LN:3173 M5:050df236c1fa3a63c31f33b73308c168 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000129v1_decoy LN:3170 M5:61f6339992ffab5d3091b4a3b3baead8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000130v1_decoy LN:3166 M5:1fc75a1345ce98d6f25ba4d916b5d7f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000131v1_decoy LN:3163 M5:c262387ff17ca2ee56fb368575275676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000132v1_decoy LN:3143 M5:790557e383cdc852732e3da2c6b6c615 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000133v1_decoy LN:3137 M5:ea2bf77f700236081cf8eb7aa0d9a909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000134v1_decoy LN:3116 M5:a8ae3ccc9f17c0f0edcacc5079219d51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000135v1_decoy LN:3106 M5:89002d8689e45952391a7984d69df23d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000136v1_decoy LN:3093 M5:2dc162e245d6ff81936bc650004ec8cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000137v1_decoy LN:3079 M5:38068261005ed014603a09dac9438db7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000138v1_decoy LN:3053 M5:bb3a8eab3c8ea2aa961e65ec5e1d91da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000139v1_decoy LN:3051 M5:87d0e9b49ecda7ba160f80012ca40de3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000140v1_decoy LN:3015 M5:303ba1d7f1155342056b491810358e6b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000141v1_decoy LN:3012 M5:c7a07f27a9874d99e33c27c2a2280cd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000142v1_decoy LN:3009 M5:d88319790f0a837a02a625cfdb6c1971 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000143v1_decoy LN:2997 M5:2b912adb843e4f2d90726c884ca7ab4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000144v1_decoy LN:2997 M5:f6bf68bca6151666f29be31cb16f1c0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000145v1_decoy LN:2983 M5:3473d9484854e710526e0c7ccc80b5bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000146v1_decoy LN:2979 M5:90d61da24b116c2bacb63747666a326b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000147v1_decoy LN:2967 M5:c84a0386ea78dc84323f55723fc42ef1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000148v1_decoy LN:2967 M5:a2b48635d63117baec9f7dbeae644928 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000149v1_decoy LN:2966 M5:0b15201439291bf53043abb6dcdab743 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000150v1_decoy LN:2954 M5:f36be073b0668fe6c56206c0a9bcf742 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000151v1_decoy LN:2952 M5:0aa12dea5cdf7b9dea2d56a71e233dab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000152v1_decoy LN:2934 M5:70eafae03cdb824f956cc77cc9b342ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000153v1_decoy LN:2918 M5:d7711561e6c2a87e3771c3ce9e28ffaa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000154v1_decoy LN:2895 M5:b40089d10ae6fb3b2a90a260a6469229 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000155v1_decoy LN:2887 M5:9be2679cff5e171c42de84446d6fedfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000156v1_decoy LN:2879 M5:100d6fd294d6998c7928887ba353f441 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000157v1_decoy LN:2878 M5:e081c58ad4b64da9af95ca27932e7ebb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000158v1_decoy LN:2872 M5:0469343a7677dac01c66bf219aa0611d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000159v1_decoy LN:2868 M5:fbc27037c78cd3b3982d7f792147d4ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000160v1_decoy LN:2866 M5:33497edef237132c3e3efe7304d5a685 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000161v1_decoy LN:2865 M5:65371a3805dd2779f5807f1849df8a2f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000162v1_decoy LN:2864 M5:7e9448d377e58534ce56c68cd97278d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000163v1_decoy LN:2859 M5:93dbbd6f23a68673abfe169d241204a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000164v1_decoy LN:2854 M5:c468c0f380889b274a988802cc95f8ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000165v1_decoy LN:2830 M5:bb1fb10e20767215b036dbad18b92018 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000166v1_decoy LN:2828 M5:9f9279b092a64e7648f91091e5112414 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000167v1_decoy LN:2824 M5:774c1242a9fec9c39b231e3a4244c48f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000168v1_decoy LN:2819 M5:5e794be8f02e6190282545c4a587a131 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000169v1_decoy LN:2813 M5:f7e3bb8a09ce56ebcb9638b710cd2ce3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000170v1_decoy LN:2809 M5:8fb1846cc5b62db20428a2bf2bfaded5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000171v1_decoy LN:2802 M5:9bd40f006580d92c066ff544ddc22d8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000172v1_decoy LN:2791 M5:5f91fa423cf6ea436c30cddd27d2f7b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000173v1_decoy LN:2783 M5:698dd6fdb96a0f8653015f1bf3406d29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000174v1_decoy LN:2778 M5:3aae745709a336cef318bd095be7bf93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000175v1_decoy LN:2777 M5:14ba8c26038f60c5a103e430e7fba5e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000176v1_decoy LN:2770 M5:467d903833c580a48fa311a7a15c61c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000177v1_decoy LN:2769 M5:beb768213f5d753b7f6a857687fb1c9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000178v1_decoy LN:2767 M5:2d998199f83204c294ff1e618648e88a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000179v1_decoy LN:2763 M5:9244414120396c3b53b847abfd80bc74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000180v1_decoy LN:2745 M5:8657cb328a0d649107216245ce042ff3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000181v1_decoy LN:2742 M5:9a35552497474ad6e9b35b843c759b60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000182v1_decoy LN:2736 M5:4fdea3271d6795c56d47fc6d54f11972 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000183v1_decoy LN:2729 M5:5da3445ac176ed7cca1131267e6dfb95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000184v1_decoy LN:2726 M5:9cc9d79dd54416be6fc2b500d4ca8223 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000185v1_decoy LN:2719 M5:8d898d7f057764e7d11b7121f8cfb366 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000186v1_decoy LN:2715 M5:0bd839a4a62fe7568bf02c2bdf660047 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000187v1_decoy LN:2708 M5:0bcff7297c716264bc76813a0516ad12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000188v1_decoy LN:2704 M5:0ceefe5f0373922aa642a3180f917c9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000189v1_decoy LN:2692 M5:a1ed1d3ee4d5cc17aae0d9d0fa0775b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000190v1_decoy LN:2691 M5:43df7d9d35f2d15ff844b2f4564338dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000191v1_decoy LN:2690 M5:b7809dc0c98369b8235b36dfbd7e2ae3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000192v1_decoy LN:2687 M5:a61002b74d916bbe06d09eb62cdb9144 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000193v1_decoy LN:2677 M5:02cb7169934dce464116e8644638b22d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000194v1_decoy LN:2668 M5:0e691a59ae468d427df06bdb2e34e315 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000195v1_decoy LN:2668 M5:4e1222dfcb9ce80e3a7544e3af791e70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000196v1_decoy LN:2663 M5:5e4092300f7a24534a4fc2afe6c68b5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000197v1_decoy LN:2655 M5:8bf68a2085f6903253894b5ac2be0d10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000198v1_decoy LN:2644 M5:035eac523101444b286c852a129bb0f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000199v1_decoy LN:2642 M5:518ada0e1f2b63c0a99a0154b584120d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000200v1_decoy LN:2632 M5:40870ec46cc59053e01def95871a68eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000201v1_decoy LN:2632 M5:af03b437e04ad5f5cc86e2a67adee8ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000202v1_decoy LN:2628 M5:fa043c52050897ca77e0b475bc77776f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000203v1_decoy LN:2623 M5:0761598e68213207c0d256d5e7e1bcbb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000204v1_decoy LN:2622 M5:502e3af12800de14f86b2cfd3de9bd2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000205v1_decoy LN:2619 M5:74fb4a710fd8bb14104c1cbde54ee247 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000206v1_decoy LN:2605 M5:73c6a5d1feb99a88b122655b4dcdd742 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000207v1_decoy LN:2603 M5:2d1e488c4ee483df72211d2762b1b7cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000208v1_decoy LN:2601 M5:c72de668308e8c098888b96b543703d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000209v1_decoy LN:2598 M5:33dd6c20ea4712d7d3b200db8f026cbf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000210v1_decoy LN:2597 M5:cd6c72af3776b51a1619b01b5eff8bc8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000211v1_decoy LN:2596 M5:40ba1e4b99e2625ec5a5cc4038fa9a06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000212v1_decoy LN:2594 M5:fe8d3058e4af4e6063be2c2f955b2bfb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000213v1_decoy LN:2586 M5:2ae32263b19fd8541852cb566f82be30 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000214v1_decoy LN:2585 M5:873a6619e50330ccdcebeb56cf56b70a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000215v1_decoy LN:2583 M5:13d7b02826997cd3db01ccfc712000ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000216v1_decoy LN:2578 M5:f891eed2ad267879c435cbc346ebfaec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000217v1_decoy LN:2569 M5:17baf081bd68afecee4fb26591fb7d44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000218v1_decoy LN:2569 M5:b543771b65b36e55866a9191f68deb0e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000219v1_decoy LN:2551 M5:cd59a6042156743484b01e429d67dcb9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000220v1_decoy LN:2548 M5:822737a44cc33c2db164829922cdb96a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000221v1_decoy LN:2548 M5:cfc1c1a98c1e72f1193cf3bdbd7d6e22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000222v1_decoy LN:2546 M5:4b897ac33360cfc5dda50c492edd5264 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000223v1_decoy LN:2545 M5:3e5f015ea4c3e8e3f4aa413fc8e33ff7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000224v1_decoy LN:2534 M5:8a161ea48715e813fd05aa43c1e4524a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000225v1_decoy LN:2533 M5:fb3804f1f8c9b481a5684e24912cdb2e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000226v1_decoy LN:2522 M5:4a6ae65ea92c112f656b5d39d76a7741 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000227v1_decoy LN:2522 M5:4b56d4e6c02a6e93eace0b35a8e81178 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000228v1_decoy LN:2515 M5:38e333d2fbaeea1196ff289ff007b136 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000229v1_decoy LN:2513 M5:6948ea45d0167313b03bb520dece25ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000230v1_decoy LN:2507 M5:ae1256f74ac53ab9f03548cd40e2fe8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000231v1_decoy LN:2504 M5:615e1e7e5b15386539deb06dd4e70457 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000232v1_decoy LN:2497 M5:2601507db41c0111c04735355c122721 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000233v1_decoy LN:2471 M5:204b14540e382d6178cbf75d805ad164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000234v1_decoy LN:2465 M5:8bf3deb57ae47354c0f07b477420f838 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000235v1_decoy LN:2464 M5:ef6b06a889077e9b0c4ae3b5eeaf21cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000236v1_decoy LN:2459 M5:cf22036ebb20e5c07502642f1d926f55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000237v1_decoy LN:2457 M5:64a6bc4d08e4f9e0d6ba8cce58b7f505 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000238v1_decoy LN:2450 M5:e83868519a491203921eb9f7286a5e98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000239v1_decoy LN:2435 M5:8292756d8d376c15256d12d69951d1ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000240v1_decoy LN:2434 M5:e850a25d74b1a7564101247ce3b1fb7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000241v1_decoy LN:2432 M5:b0696db696f0e45c6909f75d3f17ab87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000242v1_decoy LN:2427 M5:4a78bf09eb53eaefba5d6406f424579a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000243v1_decoy LN:2421 M5:6751a1f3f80e5a43badc5b9a986fa49a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000244v1_decoy LN:2420 M5:b8c086bba1ed8bc4eb0ea05e7031664e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000245v1_decoy LN:2414 M5:4ae74a7c8879b7eadc4ff52f6c247436 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000246v1_decoy LN:2404 M5:cd50b4acbe112fb299328b26c243aad7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000247v1_decoy LN:2403 M5:0a7f0ec7ad3711a0173947d4768d9193 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000248v1_decoy LN:2402 M5:cf164664d17746b996c1b51b7a1b2d1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000249v1_decoy LN:2397 M5:d5f7a437c859d40100bf3a757b38ea7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000250v1_decoy LN:2395 M5:fdf94cbe463685fab85e81430541c656 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000251v1_decoy LN:2394 M5:9e100dfb362640d77d73adb06f63c206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000252v1_decoy LN:2388 M5:0f0f93cc335a9faecc119d22738a778e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000253v1_decoy LN:2382 M5:af0841d63c2d4ca67c11f8e2f0c0b42b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000254v1_decoy LN:2381 M5:948e4e6ebbce9d82413e86c3c96d684f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000255v1_decoy LN:2380 M5:46be4a58c4b132b788bd04a3c51f0108 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000256v1_decoy LN:2368 M5:722aeea650c487dc132f37322a5b5eb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000257v1_decoy LN:2364 M5:44995a3c81d834bd8bbceda57ee73d51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000258v1_decoy LN:2363 M5:a71f07406eabc3a412250ac21c446ba3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000259v1_decoy LN:2348 M5:99b15b0bac8cbd7497c5ca04a721c657 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000260v1_decoy LN:2339 M5:0768f34e39c5c97c1639fd42b72fec1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000261v1_decoy LN:2335 M5:974a3d6e7628eaf95db035d99f046379 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000262v1_decoy LN:2332 M5:9a0e708d8a88bfa96a75e98604a273b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000263v1_decoy LN:2331 M5:60412161b03d0c2f2ce5659369ee368e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000264v1_decoy LN:2330 M5:5593063ebd79eae9ac5a5a5ba9095b7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000265v1_decoy LN:2323 M5:6042dc9c77f44643d41e68ea0cda385f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000266v1_decoy LN:2319 M5:ba867aa03d1617be8f801a89c1530937 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000267v1_decoy LN:2314 M5:a29f663eddf36e84b6cb6faff0f62309 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000268v1_decoy LN:2308 M5:659c8649b3dbe0dd672045a5ed7fa3b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000269v1_decoy LN:2306 M5:e10dadf09b67626744c1c39c1fea5fe4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000270v1_decoy LN:2296 M5:81f921a9ec2bd029889721432b22d4d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000271v1_decoy LN:2287 M5:095a5e8a3ae51b66207f518822bf71a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000272v1_decoy LN:2279 M5:47fde7cc81a14c0c6be4ccbfa3312015 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000273v1_decoy LN:2276 M5:35e9863bbef84bef6634eb206bc66c15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000274v1_decoy LN:2273 M5:9e8590286f229ad55bf921bb4d7236f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000275v1_decoy LN:2262 M5:f184b3c6054e080672a50e932da0aafe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000276v1_decoy LN:2254 M5:06e878f736f352fe167cc033f030b492 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000277v1_decoy LN:2252 M5:af9e9099df9fd3abe01d3ab305c9d65b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000278v1_decoy LN:2245 M5:8f7d8cb82a282dc326d4bd286895492d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000279v1_decoy LN:2239 M5:ae67f16bc2c56baec5093246804b3df5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000280v1_decoy LN:2223 M5:bffd2399ce899d9fa674d826311500f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000281v1_decoy LN:2220 M5:926bf451304bc000be7146acb11c393e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000282v1_decoy LN:2218 M5:adcddfbd560a42060c45d80c751787c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000283v1_decoy LN:2215 M5:706580b59cf8322b639309fc6110d094 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000284v1_decoy LN:2213 M5:7145c3c0ac2cc197f7d0fc0fb18d6c1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000285v1_decoy LN:2203 M5:0c6c215de5d00669ece9d0d461b7b5c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000286v1_decoy LN:2200 M5:a724f88e94788f5e1738a038d67d8d7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000287v1_decoy LN:2197 M5:fd0cdd36334762ca58e7b82b6ebf802d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000288v1_decoy LN:2194 M5:441ebd8ba7d0673bebf054e6ce9b405e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000289v1_decoy LN:2183 M5:df57267be3acda36409e42dd3c0da306 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000290v1_decoy LN:2179 M5:8bc6beaec162ccebf341b6c46ebaf3fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000291v1_decoy LN:2177 M5:d0d5b33e946654d9b23402cef3f10822 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000292v1_decoy LN:2177 M5:bc189c463b5d9bae5c71afa304910390 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000293v1_decoy LN:2177 M5:c74d19e91cd80fb55bc91184bdc0eac4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000294v1_decoy LN:2168 M5:c828de6bd73d4226b924cbe268ab5d35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000295v1_decoy LN:2160 M5:33980619d2c675019c4fb26681973f1f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000296v1_decoy LN:2155 M5:40e793695b37b027d9d893448ad20eac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000297v1_decoy LN:2144 M5:55b3946760e337f7fa9358993879d5d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000298v1_decoy LN:2143 M5:5c8fe70b46ce7d299039403820af18c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000299v1_decoy LN:2136 M5:7a28362f930fcd9a245cc239750dd1d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000300v1_decoy LN:2134 M5:285c47826e725f4442c18898156ac4fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000301v1_decoy LN:2129 M5:b4ad7d61b3d8b5b5f03100792231b056 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000302v1_decoy LN:2128 M5:a6fd1741e7a81251829a88549717a433 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000303v1_decoy LN:2125 M5:c95f162916242e94c057ec50e3f666e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000304v1_decoy LN:2125 M5:cf878bbb13f4cb8f6ad2f6134d4152f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000305v1_decoy LN:2122 M5:ffc29d2524335853c556eac4b936ac47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000306v1_decoy LN:2111 M5:13ad53d0306dcdc84cfbe5af890ffa7f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000307v1_decoy LN:2106 M5:2705f017f46d301002f0ccf08933080c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000308v1_decoy LN:2094 M5:dc17db769fee486df656f8334528abba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000309v1_decoy LN:2093 M5:61b8e15e0c011168970bf67fa28a893c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000310v1_decoy LN:2088 M5:4a0f2b01b92451953bcb14f94874625a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000311v1_decoy LN:2086 M5:560b32a4aa380573107a95fe8344fcbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000312v1_decoy LN:2086 M5:f4a368ddba66f5647c78853a2080c7e1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000313v1_decoy LN:2084 M5:90b16478fad5417ff33d03ed3cdb9897 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000314v1_decoy LN:2080 M5:eb02520ddd2b898796bf56257623ff11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000315v1_decoy LN:2079 M5:214af8bfae249648407394750763140c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000316v1_decoy LN:2076 M5:b2439d0b325e4cd30b1869e8e17005f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000317v1_decoy LN:2071 M5:d8e3a93de5b5c8fa58e8785c44e165f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000318v1_decoy LN:2066 M5:03ab659ca0a3d031ed57f5b71c40b7bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000319v1_decoy LN:2061 M5:b7df3a4252d3ed398842dacc1ef5119d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000320v1_decoy LN:2055 M5:3225edb2d4dc98b7b0cfd91afeacdba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000321v1_decoy LN:2053 M5:d0f66764a23cc8c03b6e0b1b8dcd2aec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000322v1_decoy LN:2040 M5:a53241c8700359fdfc69eff381d88829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000323v1_decoy LN:2036 M5:8b83d6b87f9d9045336bfe2d4f2d638f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000324v1_decoy LN:2035 M5:641af824694766c85122b263dc1b3649 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000325v1_decoy LN:2034 M5:7f2f9c9fa94f3acab772792c44b4c167 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000326v1_decoy LN:2032 M5:1f32623318d9221ee867209755a538bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000327v1_decoy LN:2029 M5:053ea4692acbe04aa98a6f331417531f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000328v1_decoy LN:2025 M5:930554d67c2f289a7f2bbcce35c88e75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000329v1_decoy LN:2021 M5:b3cda19a888b02b135de2538d4a74936 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000330v1_decoy LN:2018 M5:abfba957d4a6107fa109f1dd5a572de9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000331v1_decoy LN:2015 M5:0ccdc46d98d147f9b6bb6808f723d28c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000332v1_decoy LN:2009 M5:634f88805091cb15be16b1af5e720775 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000333v1_decoy LN:2007 M5:957b5291471bee32d4771292a611cfa9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000334v1_decoy LN:2005 M5:6d2a28c1dcd5377a19f5768b3fa75ad2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000335v1_decoy LN:2003 M5:7fcaa8fce3cf7cda00a42df29b938b6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000336v1_decoy LN:2001 M5:e28b02249a274e4b98551241e243fcbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000337v1_decoy LN:2001 M5:4718723746d62e7eed277db09d01884a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000338v1_decoy LN:2000 M5:7071be152f29ebf4ec4cfede2d44d70a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000339v1_decoy LN:1996 M5:21924fac8b9023e37be232641581d24c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000340v1_decoy LN:1992 M5:462035d8f8260ac9d68132b5ac63ceea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000341v1_decoy LN:1985 M5:80c971eec06361d4428c1c731da5d2eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000342v1_decoy LN:1981 M5:6f5d885e4d0a0476e309c004c8d7116c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000343v1_decoy LN:1977 M5:07b50b0be202b0e56fae3ff7b729fcf1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000344v1_decoy LN:1971 M5:ec1eccee490917513ffa0844c16cd648 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000345v1_decoy LN:1968 M5:a44124ee81131e9ba181e4d57343b933 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000346v1_decoy LN:1962 M5:a46b7187d8afab3b6711d2b57dbb649e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000347v1_decoy LN:1961 M5:391b9551b7df1ea41abd51c70c6391ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000348v1_decoy LN:1960 M5:2272602c288691975c385900ff1871d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000349v1_decoy LN:1960 M5:92f15826c95eeb01e4b619c7b646a17a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000350v1_decoy LN:1954 M5:98742b24ea14c25494dc15620ed8d346 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000351v1_decoy LN:1952 M5:5d5e3c8f90d84b8f2e912de53d0250a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000352v1_decoy LN:1947 M5:f5e22c20cf8f7956480ff337ad36be24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000353v1_decoy LN:1944 M5:cd921451a9fcf4ec5d06cb74cee21605 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000354v1_decoy LN:1943 M5:eba8670102e02d674c11f1779a39338e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000355v1_decoy LN:1941 M5:79a20867ab6678a0eb6a1bddd2d467f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000356v1_decoy LN:1937 M5:e17159dcd1117f3bb92bebb710740ba2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000357v1_decoy LN:1934 M5:9266a855ef31e94c5f77d277055f2125 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000358v1_decoy LN:1929 M5:11b07e8db80b814bbcd4814bebafc177 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000359v1_decoy LN:1924 M5:e9df9c6169849c4d69eb8a286f274eab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000360v1_decoy LN:1924 M5:5152172dba1a32a5529708855c21201b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000361v1_decoy LN:1923 M5:22f23fe69e62cdfb4304b679a6916bad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000362v1_decoy LN:1921 M5:b5eaf4b290ab9cf157680d65e640a5a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000363v1_decoy LN:1918 M5:9dedcf6b3a849e4c681f05753c2597d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000364v1_decoy LN:1915 M5:a1c06309d5103a00f8c5cf1847f58856 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000365v1_decoy LN:1915 M5:7a8b1fa154de78062577f95bcbf9cd7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000366v1_decoy LN:1914 M5:6db99643422d9ef62392ced193881137 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000367v1_decoy LN:1912 M5:61c61bda79ca84060bd63c678715b83c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000368v1_decoy LN:1910 M5:64edcf78348cea32c4e946329efd3ff9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000369v1_decoy LN:1907 M5:9266a29087762dab9b2c3f0065838122 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000370v1_decoy LN:1904 M5:f753bc41e46a7b0a9a9c63055a0553fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000371v1_decoy LN:1897 M5:df2a02d92f1a99000001bd1979b387b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000372v1_decoy LN:1891 M5:1664892a75f937da1e68f5c28f0be6f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000373v1_decoy LN:1890 M5:ad597d36bffdf82ff75f444e98be4928 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000374v1_decoy LN:1888 M5:570f07c26f0d742b21502cff22b7d2cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000375v1_decoy LN:1888 M5:a85dc5b82df805bdd2ee38b94de6133c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000376v1_decoy LN:1885 M5:d5cfea6c2a90821c0bac19bb1b81c97b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000377v1_decoy LN:1881 M5:cdcde92ccd92dd4531ee3ccae640577b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000378v1_decoy LN:1879 M5:fa3996c5e3cb86b5904ad5ab423f06ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000379v1_decoy LN:1877 M5:4659566201687f420c913a424ff09d62 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000380v1_decoy LN:1876 M5:e619de3bcb3f53147ec25a74324350be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000381v1_decoy LN:1876 M5:7d297256bbb1ec6cdc08e447670e69d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000382v1_decoy LN:1874 M5:bd4b0fff3b0f9b3c27bc270d80d2d91f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000383v1_decoy LN:1872 M5:d337922792c71f4bb3ec1c522519d7cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000384v1_decoy LN:1869 M5:95a4dae294e133dca09afd04559a3d82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000385v1_decoy LN:1866 M5:38b2fbf522a772de9e5971e2c248d773 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000386v1_decoy LN:1865 M5:a2b125ab6d06ffdfbfde0a2899a63d38 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000387v1_decoy LN:1865 M5:eeb193e267c0aad102b5a8c55b899094 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000388v1_decoy LN:1865 M5:a21001e6acebfcf03c2f187db59bca58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000389v1_decoy LN:1862 M5:e1aa83bd329fed4cea1a31c2b26605cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000390v1_decoy LN:1862 M5:e80fe8b2857e4e57c40cff1a604ca905 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000391v1_decoy LN:1859 M5:e85c5d8da9312ccb56a4ecb47e7cb397 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000392v1_decoy LN:1856 M5:d1448f2aeede93e71be4fa57f641c1ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000393v1_decoy LN:1856 M5:dcbc9c61d537f450dd4fae3b11f71d19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000394v1_decoy LN:1854 M5:a427d47a812c6fe6c9d26190b4b83f7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000395v1_decoy LN:1850 M5:876c26621463a5218a5953d9be4d0810 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000396v1_decoy LN:1849 M5:4797d275b03add54ab91c5b8c318a7e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000397v1_decoy LN:1849 M5:707d492cfa678968ded0e2306392504a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000398v1_decoy LN:1847 M5:06eb26d8459f3e43735ded45aa07a2e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000399v1_decoy LN:1839 M5:1ec1c61f264cc1ec9596dab78ea77adc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000400v1_decoy LN:1834 M5:c268a5b922576efd86cb97619df6fb55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000401v1_decoy LN:1821 M5:37647f03de6c012f655cbffbfbe570b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000402v1_decoy LN:1815 M5:edf2017fafb77c03c7f392ec8489ffae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000403v1_decoy LN:1811 M5:60131480b353a90b21d6a47f52a7d1eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000404v1_decoy LN:1808 M5:b4009abb588476a2593dd27cef872705 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000405v1_decoy LN:1808 M5:ef9e792232f15cf2b18c4d4a7ce99253 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000406v1_decoy LN:1807 M5:09de8b5234448cff4c1e3defd30ee794 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000407v1_decoy LN:1807 M5:212f6e4df329ece3ab38c483cdf02535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000408v1_decoy LN:1802 M5:291bcca126e0b971eaa6fde409109815 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000409v1_decoy LN:1801 M5:12ba0451f91998e31fd25003c892102b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000410v1_decoy LN:1800 M5:d47cda8c33b62a63e40f02664d4811d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000411v1_decoy LN:1795 M5:7f941c23c25bebc1937eae96aa5e98d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000412v1_decoy LN:1794 M5:1354d0a5f0d586b01f493802f991dd7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000413v1_decoy LN:1792 M5:7b03b07cb1cf327205fb693d3ace8a42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000414v1_decoy LN:1788 M5:36d568b75f9e3cf031e037043ac02384 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000415v1_decoy LN:1786 M5:393fd0366a1270f611866e1fb5af3cc1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000416v1_decoy LN:1782 M5:2652e35a4315660b304c6b7522e5f7d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000417v1_decoy LN:1782 M5:c7c0bd282280cb9eb969940cc3b68acf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000418v1_decoy LN:1781 M5:5a9a78f89d320fbabd4693bd232704a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000419v1_decoy LN:1781 M5:75304d27b61d40a759bd36190202926a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000420v1_decoy LN:1779 M5:95cf227ee90e6dced27e307b52d240fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000421v1_decoy LN:1777 M5:c1fd358a71fe269cee210b27840c272e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000422v1_decoy LN:1764 M5:5db13804da88f18750e478f6682b83a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000423v1_decoy LN:1762 M5:bcf551251490bd2c7ab5a99232bbbcf0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000424v1_decoy LN:1755 M5:c8de78702f0a0471f26cfe586a8d9263 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000425v1_decoy LN:1749 M5:9c843f2e59ba4aeed3517c0aa36ed8c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000426v1_decoy LN:1747 M5:431f95d76dc16b369e6765e38ae92ee1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000427v1_decoy LN:1746 M5:1641a71638dd63211280e6bef22e6a4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000428v1_decoy LN:1745 M5:98de780057460a078034b25725bad406 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000429v1_decoy LN:1744 M5:16ceb3de9929ccc268d4aeacb8f20439 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000430v1_decoy LN:1742 M5:6c61a88798f9fe78567c879793385c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000431v1_decoy LN:1740 M5:e2ecdbd050ed1413eb2a07f7d9ebc8c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000432v1_decoy LN:1740 M5:7f1d544cca143be6dd353cf3efb80028 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000433v1_decoy LN:1736 M5:18493fcfd6ea161acd237867aa7337cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000434v1_decoy LN:1735 M5:afe0292acad0a1460fbad00971606090 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000435v1_decoy LN:1732 M5:5bba5da58b43755bdc14ab286a8a5cee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000436v1_decoy LN:1732 M5:680818b10726c68c5917f48456528d0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000437v1_decoy LN:1730 M5:836c13c8ad60355227f91a1b5308ea33 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000438v1_decoy LN:1727 M5:f5fb0c58f9b4fa60b1eeccee56f0cd56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000439v1_decoy LN:1722 M5:9a47086cf6334392302ea1713fb68c57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000440v1_decoy LN:1718 M5:dcc0114d2cbd5f165da52b4610aeb6b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000441v1_decoy LN:1716 M5:59cfde6a838acc68c55e5a781f1308fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000442v1_decoy LN:1710 M5:cf384ae5b546344ace5aa4d662c6ac0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000443v1_decoy LN:1708 M5:4df6e9cabebe481359ac95881b277f74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000444v1_decoy LN:1707 M5:971971b7547432d52662e516989b1596 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000445v1_decoy LN:1706 M5:9c926b3b414cdf578a7af119dc3d32bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000446v1_decoy LN:1705 M5:91d17f22298838daf727563421004b33 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000447v1_decoy LN:1704 M5:64c4b3b7b16fb06e268d70c576c18be7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000448v1_decoy LN:1699 M5:e50192f7290b158ee82f04623e78180f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000449v1_decoy LN:1698 M5:938f5fb6e35906afc6601c756e85684e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000450v1_decoy LN:1697 M5:670cd517d0cef208acfe5f83f4f08e40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000451v1_decoy LN:1697 M5:29b287f217fd519ac38852bf9f3b89cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000452v1_decoy LN:1695 M5:42ba5d9b4331876409b5509b694d32f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000453v1_decoy LN:1695 M5:a98d7b845be68d05f42b70b19d87ecbf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000454v1_decoy LN:1693 M5:bda60eb625bdf4d5f8b0cb6ccb975c1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000455v1_decoy LN:1687 M5:27bc09a272621c3414cbe34cd809347d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000456v1_decoy LN:1686 M5:6f0aa7beab754a13ff566057d0641ae0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000457v1_decoy LN:1680 M5:8cba844ac8cc6321dba7652815bbd94d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000458v1_decoy LN:1679 M5:e2f908a05a86ddbda11acd668b7487e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000459v1_decoy LN:1679 M5:5a0c260602a6ab3fa76f49157966cf4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000460v1_decoy LN:1678 M5:54a34fdfb08cb07c1f51c8be679c6339 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000461v1_decoy LN:1674 M5:ced48cb3354e7f24d532fefc85a96319 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000462v1_decoy LN:1674 M5:4467091f25a983fc0f7d9d88bd351993 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000463v1_decoy LN:1671 M5:7cbbe8ba7b64b120b467c953851a7eb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000464v1_decoy LN:1669 M5:a3cdd6c546af035a3c9830a67c0bb056 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000465v1_decoy LN:1665 M5:1e245fa1bc113bab6305d0fc3cad2112 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000466v1_decoy LN:1663 M5:b1a1b5888971729811d7fcf9b06665e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000467v1_decoy LN:1657 M5:8a989e9803993317d80157778c71da54 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000468v1_decoy LN:1653 M5:bc73c770766d2b8deb017d234f5d7387 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000469v1_decoy LN:1652 M5:9559e20eaa71db947eb9645779c2c2e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000470v1_decoy LN:1650 M5:60a6f98d6f706aa9554c7b6ed3de2716 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000471v1_decoy LN:1649 M5:ce3eddf63b3aea572dd8e0b762b90829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000472v1_decoy LN:1649 M5:aeab25a6fcaf97cdcb319dff1550df0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000473v1_decoy LN:1640 M5:7a4f3084ac2ed72ea4f5e60260c77948 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000474v1_decoy LN:1638 M5:5c4753a4d69db9ff02e858c8ddbb8911 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000475v1_decoy LN:1636 M5:8970166c6ade7a2f8106159d5ee5c857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000476v1_decoy LN:1632 M5:67037d44662f2487a2e39e76ea3fef94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000477v1_decoy LN:1631 M5:3455484eacb9d4eaa7ed63b96b087c85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000478v1_decoy LN:1630 M5:c20fcc553e42922058f9f0e839f527ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000479v1_decoy LN:1627 M5:cf02dff4c16e81e47d1cc5ffdbf1b4ae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000480v1_decoy LN:1624 M5:93392bdc58b6376d5da876bae65be9e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000481v1_decoy LN:1617 M5:e8add50c6a06030a1dca84968a89d4b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000482v1_decoy LN:1616 M5:6d496ad94b5cd40c72f5362e446e22c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000483v1_decoy LN:1615 M5:bcc4bc611bdb483f2f925df072d50a41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000484v1_decoy LN:1611 M5:19f0a56814e718041b51733abc55a44c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000485v1_decoy LN:1611 M5:771186a23da9b9c2081773c5a6d73812 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000486v1_decoy LN:1606 M5:f6dc33d2578fb0ce6a560d5ee7b9b5cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000487v1_decoy LN:1605 M5:440c7d94624635647d771ce7f3833416 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000488v1_decoy LN:1605 M5:7e6682db43f2445cfc3b18ddecb786c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000489v1_decoy LN:1600 M5:1b3265b9aa7cae61d843ae0b09e2f3a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000490v1_decoy LN:1598 M5:8ef2cd8ef0749e5d753b552c1f2fc3d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000491v1_decoy LN:1598 M5:9bfcb4215c94e812ae4ead4fc804a63f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000492v1_decoy LN:1597 M5:8c06a1c635581dd76469e431bda358b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000493v1_decoy LN:1596 M5:9880ad7b13fdc3af8d8c81e3adf8ba43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000494v1_decoy LN:1595 M5:ec1ac1310cc7d4432ced7724829cbdba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000495v1_decoy LN:1592 M5:f2d436516525e67ce3aa61ec5273dcb5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000496v1_decoy LN:1589 M5:201a121b6775880be8593d2a9cef12cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000497v1_decoy LN:1585 M5:491aed38b1a89a77be7b2d1d30bd4fa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000498v1_decoy LN:1579 M5:2e63f3a1cf01e023c443b4478459db64 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000499v1_decoy LN:1578 M5:f9223dc0eaf125b8226c386bbca18647 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000500v1_decoy LN:1577 M5:3c9bc60202ddedaa3894d11a96f5429b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000501v1_decoy LN:1577 M5:c367b54edc2b83cb15946ac3c975ccfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000502v1_decoy LN:1577 M5:d7d24f1188f1d67db7215729a5c5b8d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000503v1_decoy LN:1576 M5:229d2aa7ab158e9b4bad158972029e55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000504v1_decoy LN:1575 M5:c8f35742cdde94078de3c3d84c130c42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000505v1_decoy LN:1574 M5:d0367db77d5a6bff49f54d4acd3d01e1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000506v1_decoy LN:1572 M5:06b66d904a7902fb764a3e661b9c8bea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000507v1_decoy LN:1571 M5:e3187302e0771a467d4e7d2b31669e7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000508v1_decoy LN:1563 M5:78aa7cd4461790084af50b1b80e1838b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000509v1_decoy LN:1561 M5:abcdf15d561b447b0bdedb366fb77d72 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000510v1_decoy LN:1561 M5:f9a7e72f7e382fa59a1d2c0c4d6edc53 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000511v1_decoy LN:1560 M5:bbfe4f1e02f2fdcc9d20e65e8d3da35d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000512v1_decoy LN:1560 M5:538f38f8d5e6495a85b6bfecf487ecc6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000513v1_decoy LN:1554 M5:8ae2f8b5f30a6c1762de005819965ec7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000514v1_decoy LN:1552 M5:392885482ea57d0e3f1311c3be95c89b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000515v1_decoy LN:1548 M5:1310bfff4743d36d7f8153b6663f2249 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000516v1_decoy LN:1546 M5:629769b2550c48e2a73115da95946951 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000517v1_decoy LN:1541 M5:76f0c1d1779803feb107f253ea555df7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000518v1_decoy LN:1536 M5:686a5b0fc214ac36df8da7605ffae4ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000519v1_decoy LN:1533 M5:e2bf8fa01d69d0ec7c7e1f6d040912c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000520v1_decoy LN:1532 M5:0c23895ba0df7ad7ea8f2b58313a0cdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000521v1_decoy LN:1532 M5:c9515245780a66ef482674755d38c592 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000522v1_decoy LN:1530 M5:5caa4ec6f260d2f960770b368909d78c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000523v1_decoy LN:1527 M5:b05daa30b4f2c9167aac9fde662de4c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000524v1_decoy LN:1526 M5:cfcd1e358a225fc7c2354b1bad52cccc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000525v1_decoy LN:1524 M5:08ec33c06085eb399a1e56f43d1d222e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000526v1_decoy LN:1523 M5:74f16c21c5a2372050d2f61595d52eea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000527v1_decoy LN:1523 M5:e7cf8c07771c8fa37bf4b6fbca555113 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000528v1_decoy LN:1522 M5:8f754d63b65c3c7a1e9a1ad5e439d2d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000529v1_decoy LN:1522 M5:51530101930cfdb66060d0686c4fed16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000530v1_decoy LN:1519 M5:dced229b77a1ea722aed13b4eb4e5b79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000531v1_decoy LN:1513 M5:dc49162a2d904001541bef4c7f7cd54f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000532v1_decoy LN:1508 M5:c183c701388b1a11f3cbf31ba2d84f41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000533v1_decoy LN:1508 M5:0d9b9c8ca5a3b58a13369e0a097f25cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000534v1_decoy LN:1505 M5:4e806d8438bd8512d22e24a026640d66 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000535v1_decoy LN:1503 M5:0b9c580f3d47c52b031cb00b9741c1a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000536v1_decoy LN:1496 M5:ebce7ee144631f93b7001740bff968ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000537v1_decoy LN:1491 M5:191de45ffda752707ef5b22c780675b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000538v1_decoy LN:1490 M5:2b8af44ac46088badbdffea0c0c3d368 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000539v1_decoy LN:1490 M5:378e070f5556e26fd1e89f1f21e2c35a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000540v1_decoy LN:1487 M5:7c84677ee13bffaac6c5c623f317619f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000541v1_decoy LN:1486 M5:501226e799037a04ea73a3be5bde460b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000542v1_decoy LN:1485 M5:8ec76a3f62b296d50ccff9ce4a9aa072 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000543v1_decoy LN:1484 M5:34e4860b41e4db3fe4ec16fdba4cb85a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000544v1_decoy LN:1483 M5:ca6b3496195a36f5f1a5a1de26bd9655 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000545v1_decoy LN:1479 M5:902f04a9f4b960cef80039434d00e63f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000546v1_decoy LN:1479 M5:16692f78928924e255aeb5b72a97ab21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000547v1_decoy LN:1476 M5:e765f1919b45a51913ed7d2f4c9a7491 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000548v1_decoy LN:1475 M5:fa46ec2fd14b9d99852d4d30568593ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000549v1_decoy LN:1472 M5:d03e8e717a38f0178037af0ca86aafb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000550v1_decoy LN:1469 M5:8ee65cdf657a82a381d7cb6caa4f3f5d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000551v1_decoy LN:1468 M5:bc6f74a7c8ffab037e3eab5ea88037a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000552v1_decoy LN:1467 M5:7d64a0f8c6675f07e9dec9b70a0afdd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000553v1_decoy LN:1465 M5:2e3b43fdc0d1784a2518dfe255384519 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000554v1_decoy LN:1464 M5:df762923ca57a0113032d663d3c97bea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000555v1_decoy LN:1463 M5:11aada1e695fe5177d9540b02a2d432b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000556v1_decoy LN:1463 M5:d3ab1903d41ac470157b0c4d4ed61933 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000557v1_decoy LN:1459 M5:bbadf4ad4f9a1ee8da95612868cfb018 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000558v1_decoy LN:1459 M5:bcd6dabc3d1399c379f3adf1cdeae332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000559v1_decoy LN:1458 M5:1781d0b5245fdca60eb63e40b293194d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000560v1_decoy LN:1458 M5:46a7c1c5c2e823abe406cf459179bfde AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000561v1_decoy LN:1454 M5:a7a571b77c5a922ca842288fc6734696 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000562v1_decoy LN:1449 M5:cc0f411395c55cc332ad0889e75eca80 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000563v1_decoy LN:1449 M5:184e7321ea1fcdc47df967c7c5d879f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000564v1_decoy LN:1448 M5:9cc22c1be7f706f6789fc994e46ddc95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000565v1_decoy LN:1446 M5:2be7af38d4e11bbf45397add5e8b29bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000566v1_decoy LN:1442 M5:7badb67269751abbac8f46b5704299b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000567v1_decoy LN:1441 M5:ee8162f4c41a8b15758b34b01d87e2d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000568v1_decoy LN:1440 M5:d4b0ebe0d4c6d4d270b5a5b7d1a5d7ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000569v1_decoy LN:1439 M5:ec8779a6ca200bbe41de6dd3630da10e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000570v1_decoy LN:1437 M5:3d29e003ab19ba610718173d23d26b37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000571v1_decoy LN:1436 M5:a7261a67e8f0dd3de7bb37e12ed74c3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000572v1_decoy LN:1429 M5:d9b8501a054b0ba4229f7ae1e74bf2c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000573v1_decoy LN:1429 M5:ddc6caafb94fef7d6209cdff64795226 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000574v1_decoy LN:1427 M5:9aca197fbaf212c69feea234780489a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000575v1_decoy LN:1426 M5:1e4c043b8c89e6c193c519db2531e6b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000576v1_decoy LN:1425 M5:846748418b1797e21e540d92fd794495 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000577v1_decoy LN:1424 M5:4fd0c37d4a586150a9301f2009c5c1e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000578v1_decoy LN:1424 M5:54ac14d019ced5f6bfe22948074afa9e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000579v1_decoy LN:1423 M5:3fdf802f805e746ac56f30d6d1a68708 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000580v1_decoy LN:1423 M5:7237c88f6ea636176c0287d0432a9732 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000581v1_decoy LN:1423 M5:e9eaf98ae51879086e24b98bea88df0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000582v1_decoy LN:1414 M5:34272cd5beb57237fb7a193f798cc2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000583v1_decoy LN:1414 M5:9060d1ca5fe447374bc2a1e69f4e3224 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000584v1_decoy LN:1413 M5:3298b158d1b1f933a0e2a292a1529e10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000585v1_decoy LN:1413 M5:59c1a460224d4414afdea6e15bd8b2e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000586v1_decoy LN:1410 M5:64228ed4ae27b3994019d9e0038f55a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000587v1_decoy LN:1409 M5:4d845a6ec097602753d860feddf23e58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000588v1_decoy LN:1409 M5:a000b425fd931ce6015497afb22efd88 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000589v1_decoy LN:1406 M5:0c059afc9f69018ba9da0b23aa8b9b75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000590v1_decoy LN:1405 M5:0c586f3eb4883fc1918171f471f5e5f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000591v1_decoy LN:1405 M5:cd72088875313abb75d2a891e35b7d4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000592v1_decoy LN:1404 M5:abf874737ff5cfa8f718112f32beb985 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000593v1_decoy LN:1404 M5:eb8f0a5cc692b80655ef58e2547a4cec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000594v1_decoy LN:1402 M5:6ee2ff095b70b42cd9c9b4e0efabca4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000595v1_decoy LN:1402 M5:f4d8da8a43b238c8e0646f5f0b52f89c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000596v1_decoy LN:1402 M5:8c7872a37fea0f290dc1bc82d975b894 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000597v1_decoy LN:1402 M5:d0d9fdcbf88b68b1dec6f806c72fed32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000598v1_decoy LN:1400 M5:6634e5294042b88996256c18dfedb84d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000599v1_decoy LN:1398 M5:fd8634e8ef145e4987e4520f150aa3f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000600v1_decoy LN:1396 M5:25350d57a6af0ff5c2c4c9c49b44ce71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000601v1_decoy LN:1395 M5:6aedeed255c7942bf7499cf1627f8cbb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000602v1_decoy LN:1394 M5:535e79d7dc446b1c3d57759eee6e4f79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000603v1_decoy LN:1393 M5:300693e040f4152f622506cde18980f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000604v1_decoy LN:1391 M5:8a946b3527d782026e0dc90559017170 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000605v1_decoy LN:1389 M5:7a9e96381bae2eb52e9e340616f3d40f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000606v1_decoy LN:1389 M5:b6ee1b27e065ac10608cc2a75f23b552 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000607v1_decoy LN:1388 M5:ff5370f5970d37597e705a08fca533b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000608v1_decoy LN:1387 M5:445d8c03bad3cc26e6adeb0047d18078 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000609v1_decoy LN:1384 M5:e885e52d68b2de3b4a858205e3e642ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000610v1_decoy LN:1381 M5:56708189f55fba9d8406fbd9eee51424 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000611v1_decoy LN:1381 M5:c7791c86ba8e059389aaa3919f1ed24b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000612v1_decoy LN:1379 M5:040a6029ad56ae20245dd1757c313f19 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000613v1_decoy LN:1377 M5:cc1f3e1b6fbcf7cf33ba399c84ff0fd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000614v1_decoy LN:1376 M5:73782073ee88b30e5184f8c58b162395 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000615v1_decoy LN:1376 M5:b49adf2ce996df0a067aa5afccc4d593 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000616v1_decoy LN:1375 M5:ebef890f7fb5122bf631a5489d6d46a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000617v1_decoy LN:1374 M5:d165c7fd94b756243531a20cd030e7f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000618v1_decoy LN:1372 M5:99bb1f26eea260757df2246652e20ce0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000619v1_decoy LN:1371 M5:fdc45233952efe3a4444e4fc118e9bd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000620v1_decoy LN:1370 M5:023468d3dca8b3726de68eb85c7d2301 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000621v1_decoy LN:1370 M5:fb5072d4c89ac94df7141cacd9701034 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000622v1_decoy LN:1366 M5:5aee91a1f323fd56c65017a1878fae17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000623v1_decoy LN:1363 M5:6b6ecc4a02c37b540c86cd51299d13da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000624v1_decoy LN:1360 M5:06cd979553eb7045f14feac8e6f2e2bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000625v1_decoy LN:1356 M5:d4cf98566c01e8715f3f2d3883ee0960 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000626v1_decoy LN:1355 M5:1dfb4921c6f707d06505f67e59849603 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000627v1_decoy LN:1355 M5:0d374e2ae6601c90f80dad8772daeec6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000628v1_decoy LN:1352 M5:474bb6fe17aa82dbe052602181e2c342 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000629v1_decoy LN:1345 M5:be38a1cda1a6e1ae5e323c69f41169ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000630v1_decoy LN:1344 M5:5f167804d39afced5ca6f11bdfc4e79e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000631v1_decoy LN:1344 M5:a8c1265cc335c37e42363c32f7004283 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000632v1_decoy LN:1342 M5:7aad5f98492b8fca78e060b6be39462a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000633v1_decoy LN:1342 M5:f3ffd07c1b2dd961b6182008cc89dca9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000634v1_decoy LN:1336 M5:64e80f53b6b20fe69e1f570c4bf46bdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000635v1_decoy LN:1334 M5:49441fe73d5a6c1424175db5c183d5f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000636v1_decoy LN:1334 M5:7d75d91acde1b12b627eec4355428b3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000637v1_decoy LN:1333 M5:e4ece619ebb5ab86de6fab33b38d5481 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000638v1_decoy LN:1332 M5:7135701f246e43df19f5aba147d6ffe4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000639v1_decoy LN:1328 M5:fbb7b0f582ebca6f3cef730730d1ba0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000640v1_decoy LN:1328 M5:62be463086e26b1df7d57735080ccdad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000641v1_decoy LN:1328 M5:14eb9b729a7e8e201661d1337b6c986d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000642v1_decoy LN:1327 M5:7758f1665792870c0c087b3c3dfa6f6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000643v1_decoy LN:1325 M5:4e1088e1aa76be60fab929e87bddd522 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000644v1_decoy LN:1322 M5:af3b1f03c49d83adafa3d8f2d6874c24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000645v1_decoy LN:1320 M5:446dcf62ddc2538c64ec6aa731ea150b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000646v1_decoy LN:1319 M5:56748fdfa4712830c7af4c68f4759228 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000647v1_decoy LN:1318 M5:8eaa0a6e0ed839c74aab55d260c6fc46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000648v1_decoy LN:1315 M5:56712d4e2ff952bae0ab0ddd610f253d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000649v1_decoy LN:1314 M5:d3e12fcc460574d688e5bae5d2442b1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000650v1_decoy LN:1313 M5:b547545a4b0358b765cecfc76a24f5c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000651v1_decoy LN:1313 M5:6b644257e459efb9331cbf248eb360a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000652v1_decoy LN:1312 M5:49650bf9d34993f3734ff8be22a21d8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000653v1_decoy LN:1310 M5:a4ce42eeaf93dc12fd2c1d548ecb8ec1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000654v1_decoy LN:1309 M5:b6aa3601c472a96642590f2556fd60f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000655v1_decoy LN:1309 M5:86d4783a9574d129cdf2d96b81899a69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000656v1_decoy LN:1307 M5:f7f361b3f660b392044fad24ffae29fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000657v1_decoy LN:1307 M5:754ff5c46ace6aa00b6225c1395948bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000658v1_decoy LN:1305 M5:93cb281ea84aef36a85cb9950604dd0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000659v1_decoy LN:1304 M5:12d269dc2ce62735236ae94e1f20075b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000660v1_decoy LN:1303 M5:48fbe06e5f32a0378e9bb9f94280b087 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000661v1_decoy LN:1302 M5:21449d3d68824fc9c13706be068c9b2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000662v1_decoy LN:1302 M5:8b61707178e6e8435c171f9af9103412 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000663v1_decoy LN:1301 M5:00401a0950f66bdb8079810e7cd7ea17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000664v1_decoy LN:1301 M5:da9b6adf8123090f1132c9b33c3aa8e1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000665v1_decoy LN:1300 M5:a6e3addcf5e77b6d35b918c3d4b07184 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000666v1_decoy LN:1299 M5:74108c185dba89f41809a3192d33baec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000667v1_decoy LN:1297 M5:4aa3c2f67ac1c8f495575e8560808f7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000668v1_decoy LN:1295 M5:c0e3f662ea9b92faded08da52ec79ba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000669v1_decoy LN:1294 M5:acb9567104820929d7f17199b614c243 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000670v1_decoy LN:1293 M5:d58180a24710ca20cd90857426fba9cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000671v1_decoy LN:1291 M5:0021de79f69c7e6f7be872209251d8a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000672v1_decoy LN:1291 M5:ec57c06e1967b151af9716613687bf06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000673v1_decoy LN:1289 M5:9e48e5eb17a1e58951e1b652dd9f44d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000674v1_decoy LN:1288 M5:93d19765c9dd00919c6cfa7d93347c46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000675v1_decoy LN:1288 M5:71235a1d58334d223edcaa90fefacfdd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000676v1_decoy LN:1287 M5:a76f2f42317a6ab2cb892a72174adb45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000677v1_decoy LN:1287 M5:f334340b46a994fa73de757843dce680 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000678v1_decoy LN:1287 M5:e2d24061f1801ed1293ec0b863363b3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000679v1_decoy LN:1286 M5:23647de37c2ff39cd67aaef8a5580814 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000680v1_decoy LN:1283 M5:1dbcdc4ac713f81604583fa6b6106bb4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000681v1_decoy LN:1281 M5:bb3d85c707984bea66a348264a710aa3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000682v1_decoy LN:1277 M5:5c2e53fdc0f5cd26c68ab66f14416b3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000683v1_decoy LN:1274 M5:f1d20984b2bcf2b2b0e005c54fff514a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000684v1_decoy LN:1270 M5:0e776546d49756c788dae25d1787fb00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000685v1_decoy LN:1267 M5:e52038740e15a18dd9b464342630faed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000686v1_decoy LN:1266 M5:9b437657983b2138524382ca0130b93b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000687v1_decoy LN:1260 M5:0a5f065c6de74f1ae3424582269c48da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000688v1_decoy LN:1259 M5:78788ef8ba3807f9a105d4a9a55a3c65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000689v1_decoy LN:1258 M5:4860c125f57848f7afe40d583f7477ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000690v1_decoy LN:1258 M5:2713e855b2f8f1734239f0523b6200ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000691v1_decoy LN:1258 M5:619c058b99f936b291f949550793c9f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000692v1_decoy LN:1256 M5:c21ff94783721fb59f3db81a80c1e0d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000693v1_decoy LN:1255 M5:8c83cfffa25879e35ab28858fa33d70a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000694v1_decoy LN:1254 M5:b0caa977dfdfb73b5e1a58b423ff4a8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000695v1_decoy LN:1254 M5:e2dd86e353ba1cebb9ee6ed4e35b54f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000696v1_decoy LN:1253 M5:5036e5442498d2a7fdb0f573f258cd60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000697v1_decoy LN:1250 M5:a082ce0af37351135354a3448f4e1e21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000698v1_decoy LN:1249 M5:d47b3d78169ea825e882ac16b3117146 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000699v1_decoy LN:1248 M5:208d107183937e7c221f38693342e39d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000700v1_decoy LN:1248 M5:0f92b053b9f7b2d596ce45e73486fe32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000701v1_decoy LN:1247 M5:38be4b2a0f1e5aa9c09b662eee046034 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000702v1_decoy LN:1242 M5:05cde0965d9330b1048d4d3c3d3d700c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000703v1_decoy LN:1242 M5:0861806c0301513ad259fe070d39e0dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000704v1_decoy LN:1241 M5:364bee56428db3836e130cf7a18b713d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000705v1_decoy LN:1241 M5:854cf124e49f41012ddbad98fa6676d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000706v1_decoy LN:1241 M5:1f8ca7e72524d4e37948801d7b5a8afe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000707v1_decoy LN:1239 M5:f24cb34121b984ca68855edd34574629 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000708v1_decoy LN:1238 M5:d209df786f3b1d1ad941874631548588 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000709v1_decoy LN:1237 M5:b4a98205bda995826a33cefc257ca695 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000710v1_decoy LN:1236 M5:e889a8feacb30e59ab4f4b36b7d9c1e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000711v1_decoy LN:1235 M5:1d00a257b98ad31640bb5ba492b84179 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000712v1_decoy LN:1234 M5:33721b9972767397365deed771dbf073 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000713v1_decoy LN:1234 M5:036d24e0ed6b0b50f1cfbd3f587c4cc2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000714v1_decoy LN:1234 M5:a7ddd63607d708a84ae2b88906989e89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000715v1_decoy LN:1233 M5:9eac1d4d910f6c899ce66d778f2f1151 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000716v1_decoy LN:1232 M5:0b8643f1a24c79b3ecdd1a67db0cc86a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000717v1_decoy LN:1232 M5:c5a5a989ac7252d8392936662ea77847 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000718v1_decoy LN:1231 M5:ac3030bfebae64338eb50915e6c8bd90 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000719v1_decoy LN:1230 M5:57901862b298a5add08f5cca114254dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000720v1_decoy LN:1228 M5:425fcf156dc340ca958e76e678b5b1e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000721v1_decoy LN:1227 M5:8202dba5ecf55e01c2eaa23654a65b28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000722v1_decoy LN:1227 M5:84410313c42ed3e74a0db6afd68aea27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000723v1_decoy LN:1226 M5:abbfddc0795df55c6e15788256752132 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000724v1_decoy LN:1224 M5:a62c3a744a6da312ddb499103c0e5dd1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000725v1_decoy LN:1224 M5:8de8180c87074519ebeedefce23a5bd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000726v1_decoy LN:1220 M5:f04fd8bfac48f74f1ba90d5f1730840b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000727v1_decoy LN:1220 M5:f0dfe089c3f7b049c98dc63e934ff352 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000728v1_decoy LN:1219 M5:e7c7be67e8022eceeb1748e1bc896244 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000729v1_decoy LN:1217 M5:d54b84b201adc65a8f6c321c0a9b82b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000730v1_decoy LN:1216 M5:2a49da07788e874c277958962ecb0df3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000731v1_decoy LN:1215 M5:c382bd37421a81163d88288a6f7cde1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000732v1_decoy LN:1214 M5:2987b50923434c160ee2c370f1a0665f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000733v1_decoy LN:1214 M5:2cef32c11c190dec442c6760ce3b95d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000734v1_decoy LN:1214 M5:3320cf99748892c60e02c948326286eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000735v1_decoy LN:1213 M5:ed1d21ad71609ae43a9b6bcebb49639f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000736v1_decoy LN:1212 M5:b586f3157d6a08d059ff88c2a8b09110 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000737v1_decoy LN:1209 M5:7ba7bce4d6531a5524c73a86b5bedbb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000738v1_decoy LN:1208 M5:04bd45b790033b8311ed85dea3015e01 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000739v1_decoy LN:1207 M5:347ce8f1f6a746892189ab8494e8aaa8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000740v1_decoy LN:1207 M5:707de4a5497ea34c4e4f0bc0c85de3fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000741v1_decoy LN:1207 M5:be1fcf2149a75c654ccdcd7bdf0f6fbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000742v1_decoy LN:1206 M5:4e1effd0109053a328e58366f9f97082 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000743v1_decoy LN:1206 M5:9f9dfe453260eb10828d18745f7f5dcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000744v1_decoy LN:1205 M5:855e900b59e0654686ce1a3d9955d650 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000745v1_decoy LN:1205 M5:137e80b53681aa0957f4489dc3bebca5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000746v1_decoy LN:1204 M5:d5ccfc0afa0a8ffeb39566a3edbd5831 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000747v1_decoy LN:1204 M5:2d8e3051fce1f6364064a61a1015f902 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000748v1_decoy LN:1204 M5:4ae1aece0937c17d93e0b54aab43444f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000749v1_decoy LN:1203 M5:108a33f55fef0274c3265bbadc509de9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000750v1_decoy LN:1201 M5:6ca12ea72ce31843c3a72b1519b0f252 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000751v1_decoy LN:1201 M5:85e6c0c98d00cefe52487084168379f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000752v1_decoy LN:1200 M5:6db13990bde5be0862c8524915fea770 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000753v1_decoy LN:1200 M5:e2708863bd36e41c2e8ea5a6b3ec5110 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000754v1_decoy LN:1199 M5:beae786e8598f79032fc8c16208aeb00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000755v1_decoy LN:1198 M5:0a56caad49417b3587e394dcf70fb6f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000756v1_decoy LN:1197 M5:7f43dc6c55686b78a0ca14bb83eaf8c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000757v1_decoy LN:1196 M5:ed9e0446d6bb51755db408158805d507 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000758v1_decoy LN:1195 M5:cbb14c85e5696a49ce697e346634e422 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000759v1_decoy LN:1194 M5:af5aad17aff7705f0fd96e58a32a59d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000760v1_decoy LN:1194 M5:b1a7eab6e2cc0e62933274443fed0a24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000761v1_decoy LN:1191 M5:23fae8306c0b4a5bf7d0941294736058 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000762v1_decoy LN:1189 M5:5b7ba9e9888da831b0aa4565b412bcc6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000763v1_decoy LN:1186 M5:b39edd9fdfea3b1d9644fa805f33a2b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000764v1_decoy LN:1186 M5:ad284b4b4daf92a4456309e77375468a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000765v1_decoy LN:1184 M5:98516b9021a46bcc79d7386ac6dc34c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000766v1_decoy LN:1183 M5:64d3e55e37f2e86e15c96ef1d879bba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000767v1_decoy LN:1183 M5:bb4656c8fbc2436252c45a1da9ec9583 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000768v1_decoy LN:1182 M5:fef2856f46d2c7724e666eafdd402ebc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000769v1_decoy LN:1181 M5:987931dd2bf6bac95e341d207f146623 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000770v1_decoy LN:1181 M5:eac4c9bfba221a54e6f9e50cbda276fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000771v1_decoy LN:1181 M5:cf5eee43e4ec7820ecca7ad7864f52ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000772v1_decoy LN:1181 M5:0b58fd78215049a25bf9904c8d82de05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000773v1_decoy LN:1179 M5:bbff47313bf9094c388338d41292f0da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000774v1_decoy LN:1178 M5:0e47d0853364f93c33da6738f79bd494 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000775v1_decoy LN:1178 M5:f12f849bba7e72b4f1f60d7aad6a21a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000776v1_decoy LN:1177 M5:1b10327e63ec134bcc76d1d55f9e78d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000777v1_decoy LN:1177 M5:c87caf65afb409c1775c034ed6b2c791 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000778v1_decoy LN:1171 M5:d25c5de51ec9619b03cce2f95298e8a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000779v1_decoy LN:1171 M5:3e4f5e7a0753a3239b3bc0d49eeaf461 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000780v1_decoy LN:1171 M5:b988438edbb2bbad2f8c1dd32c116f59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000781v1_decoy LN:1170 M5:41b5e67b7143e5bf81dbb61b81a230a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000782v1_decoy LN:1170 M5:ac3de3666d0730b5fb7f44a84f9c4d1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000783v1_decoy LN:1167 M5:7187d1e3ed138db9f1610a9c4dbefeb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000784v1_decoy LN:1167 M5:a1f7192900c80cfabbb39df8dc8d3c48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000785v1_decoy LN:1167 M5:80ff0c82d9a5bc156c3c0bf340bd68ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000786v1_decoy LN:1165 M5:688f5bf8eb90c874eda7108fcf283889 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000787v1_decoy LN:1165 M5:f768117d9e7c2526c123ea228e2cafe9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000788v1_decoy LN:1162 M5:039765c983a107557b8c3ec0a025e44c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000789v1_decoy LN:1157 M5:220dbbeab5a5d61415cdfde9f50b5766 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000790v1_decoy LN:1156 M5:23d66ea0a7a7d160c9413d93f5ad0162 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000791v1_decoy LN:1156 M5:5cb979a509d0b6052c6e0a55be36cc00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000792v1_decoy LN:1154 M5:b0ee554cec6a7fca1a6556932643d8a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000793v1_decoy LN:1154 M5:0370a3a0105a0683cbd802403418f170 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000794v1_decoy LN:1151 M5:8e0e1ffe5b02de8878bd4d564bb6323c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000795v1_decoy LN:1151 M5:7bd0473f38ad03caa52a001a9fbb7354 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000796v1_decoy LN:1150 M5:5a37e3660ee2c75c170b2b5b40e9fb6b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000797v1_decoy LN:1150 M5:490b01f6455790bd5df9ffc337520f37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000798v1_decoy LN:1147 M5:20582882471f3bed3cd0120b82323ac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000799v1_decoy LN:1147 M5:0e5917e383190727d973a070137a2fbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000800v1_decoy LN:1146 M5:4bd3ad205dd76c8fb5e52879cad2ae96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000801v1_decoy LN:1144 M5:b97e8d5a835434eb2a718b9e61b8108e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000802v1_decoy LN:1144 M5:2df1004e75f2e124d3578d82432b9495 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000803v1_decoy LN:1143 M5:f38f2b568b969edfffe4cb768ffbf1f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000804v1_decoy LN:1142 M5:9aab8eca5e4d310eded1b7375ddc7cf6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000805v1_decoy LN:1141 M5:9d60d12e15605e5bdc4e95d5507c5fbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000806v1_decoy LN:1141 M5:ed137b8aa6491c9545e9486d7412e617 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000807v1_decoy LN:1140 M5:153c981d613562052e1fb0b115c4534f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000808v1_decoy LN:1138 M5:0338a9928d761051eb989aba5a478df1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000809v1_decoy LN:1134 M5:58756cfdfe491443b22624377976b379 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000810v1_decoy LN:1134 M5:684bc9fdb4e26e632a8183d8802beedf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000811v1_decoy LN:1132 M5:cbe47496e2df2406ca4e66332ba1ec10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000812v1_decoy LN:1131 M5:4408dcacff9d3e25b64da0a9935a7bc3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000813v1_decoy LN:1131 M5:58cc2832c5530babe80d72360b82afcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000814v1_decoy LN:1130 M5:c537aaab4d2fffc792fff332ba26df17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000815v1_decoy LN:1127 M5:c10ad449537826ed9790a8e7a91cc9f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000816v1_decoy LN:1126 M5:43067a55481ed1a3a07a02ad65eaa2df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000817v1_decoy LN:1124 M5:68a35e6dd8db1522069b2a5cee954207 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000818v1_decoy LN:1122 M5:488cfcbe81f47dcfda704c5c28ebbe03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000819v1_decoy LN:1122 M5:de91661f937117bf675c5f21a54ab668 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000820v1_decoy LN:1121 M5:5e6a5620500506981d3ab73624f63d9e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000821v1_decoy LN:1119 M5:fb748af1360cb775a390f0e931dd02b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000822v1_decoy LN:1119 M5:6b4f3cf5f29db2ef1bddb02c5828ce30 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000823v1_decoy LN:1119 M5:90f491e70c191edb78a37852f165ac39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000824v1_decoy LN:1119 M5:53358ae1c3833697bd5f0eb0f8ac79d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000825v1_decoy LN:1118 M5:e36d0f228ae617024efb91c918776dbc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000826v1_decoy LN:1116 M5:28d254c1b706d0bf3b10df07746930cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000827v1_decoy LN:1116 M5:08d17cf8bbbea61863d1111ebec35b21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000828v1_decoy LN:1115 M5:6ab6da5d7d22274a6ed522846b55ebc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000829v1_decoy LN:1115 M5:798a4b9e0b964f40d8c23e5cc3336db7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000830v1_decoy LN:1115 M5:9cbd8613556330a85d27a64185ea84cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000831v1_decoy LN:1114 M5:83cc1a5967022f8e841c81fe75d58ffd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000832v1_decoy LN:1113 M5:01c1108b447f8fc1ac66a83a185cf320 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000833v1_decoy LN:1113 M5:7f89f5d60ad86ff56b75b22948d678c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000834v1_decoy LN:1110 M5:5a70b2a58e433469ccb66822189128d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000835v1_decoy LN:1110 M5:1e38e29d6d62fd249bf64655d6f81862 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000836v1_decoy LN:1109 M5:96a1d9adc17f059b56e67cfb6937a345 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000837v1_decoy LN:1108 M5:45ea81c798eb106c5436246caa66b2ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000838v1_decoy LN:1107 M5:1814f68b7f841bfe03b315aa32382c00 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000839v1_decoy LN:1107 M5:48441754ca4953c7e3a4a0c8d47ee1e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000840v1_decoy LN:1107 M5:7f28434a41e01b99a0d611c226b8dae7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000841v1_decoy LN:1107 M5:d18ae976cb8e092b2164fb5cf8e96c57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000842v1_decoy LN:1106 M5:7d6bf428559a5a4c3e493b755ebe5524 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000843v1_decoy LN:1103 M5:c32717ad22315f9c16c5ec2cc21c930d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000844v1_decoy LN:1103 M5:a1754553d128a5a63a67e63de2fd3738 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000845v1_decoy LN:1103 M5:39f91ddc96023a6c28b74bce8ab2612c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000846v1_decoy LN:1100 M5:82964c295c4313b285a6149d3c1566a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000847v1_decoy LN:1099 M5:b6ad0bd8376da6c84aad8cf5fe7bc6d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000848v1_decoy LN:1098 M5:e14ec564d8038b588e7bbcc8b2ec0a9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000849v1_decoy LN:1097 M5:7307c9a55c6540dd0e2d41858ae31cbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000850v1_decoy LN:1096 M5:a2998a406a8123e41e824e2ede54ed2b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000851v1_decoy LN:1096 M5:e62b4e85fecea83baffc447a08ca6785 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000852v1_decoy LN:1094 M5:6e5c8b4b68744e944eab55ecb8fb5844 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000853v1_decoy LN:1093 M5:24331159404d19f94c9138da50577e51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000854v1_decoy LN:1090 M5:2929cff1249a75eefb4cfffd96d62464 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000855v1_decoy LN:1088 M5:fbb037cbafc5f686b9ab73e07f0ffcfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000856v1_decoy LN:1087 M5:211034f9737003efb857df7e977d5277 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000857v1_decoy LN:1086 M5:368e68935f97965228ac78bb2aae203c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000858v1_decoy LN:1085 M5:ce2ac36f0b0097282b1bff60c135f74e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000859v1_decoy LN:1084 M5:3418f70e7ae002b97228bff0e077080b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000860v1_decoy LN:1084 M5:b8e4715e539923de16e145b5eac6191e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000861v1_decoy LN:1084 M5:fc5500f691a93bcad35796e610743159 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000862v1_decoy LN:1084 M5:e59c0bee43efc00f925e98deafcb1339 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000863v1_decoy LN:1083 M5:3f45413c28190577d1c4837a73d4a27a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000864v1_decoy LN:1083 M5:5e5b283ed71b787f5a90e2a85cae8fcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000865v1_decoy LN:1082 M5:50f12f0b974f354351bb88c197b21126 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000866v1_decoy LN:1082 M5:d678f152fcc7e46daafe921a0a41337d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000867v1_decoy LN:1081 M5:b861e354b7da07ac9ff8f421b6caf341 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000868v1_decoy LN:1081 M5:0eb25de463e630b62cb8c32bb42f6ad5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000869v1_decoy LN:1079 M5:47743f7eabd8f065bf223bf5327dc730 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000870v1_decoy LN:1076 M5:43ee859a8e75e455f0f1bdbfb155b6c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000871v1_decoy LN:1074 M5:8de0f0af578c623d46ac53461a51a3cc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000872v1_decoy LN:1073 M5:788f48af377f20246f7f9a21e90b0e0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000873v1_decoy LN:1073 M5:45c2f5e2b5413134f6030f49be58ba4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000874v1_decoy LN:1071 M5:86a4e6ad2956475caac9b348e6e7f8b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000875v1_decoy LN:1069 M5:22ee1b95d0dcca48ee2f77ec8135e0d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000876v1_decoy LN:1067 M5:3f76ce94efafe5dd1634e6d51aa6d1d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000877v1_decoy LN:1067 M5:5bc259606f224eb610c64d5e5d55321b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000878v1_decoy LN:1067 M5:9449555579bbe1f92046e6c9b1d6eb4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000879v1_decoy LN:1066 M5:2777151312e10fd89af514515090fcca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000880v1_decoy LN:1065 M5:ae8283b9a8386e65951be3f19e3b7006 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000881v1_decoy LN:1065 M5:79e7ca97d9a943a065f8d902b9b01244 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000882v1_decoy LN:1065 M5:0991862c1ee6015ab6ba1008ec3ff69d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000883v1_decoy LN:1065 M5:d68bf7942659eebe8f4973154fd1da22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000884v1_decoy LN:1065 M5:dd08ea8e4c5ee4d1f942b2dce2296cbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000885v1_decoy LN:1064 M5:a5179394ece1fe9e2392cac1241bcacf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000886v1_decoy LN:1064 M5:5ad23055bdc140edb211af99bf7d76e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000887v1_decoy LN:1064 M5:5fb9770dcbf52d1a7f41c9d235a9ceeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000888v1_decoy LN:1063 M5:68844d1f612bcae36302b17758f78e86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000889v1_decoy LN:1062 M5:844d181d05473e9b6d06b5defabf50d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000890v1_decoy LN:1062 M5:224848a8b0947ecc656065423b7862ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000891v1_decoy LN:1062 M5:de33c1fe76fea17846a96ea7bc9e91f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000892v1_decoy LN:1061 M5:919160e2c6fec7a7c92d823d76b66027 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000893v1_decoy LN:1060 M5:f79c0acfc167625b085df24f5058e8f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000894v1_decoy LN:1057 M5:6cae16f687b6453bea4343f3a72ea5d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000895v1_decoy LN:1057 M5:7b95591d319231c96c2db2ab196e568c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000896v1_decoy LN:1056 M5:59477a60f18aa435be9cd8e8cb8958fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000897v1_decoy LN:1055 M5:ef9e2ac86b6dc21510af5a157ffdd9a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000898v1_decoy LN:1055 M5:8a426cfbaa95d3a4ff9de0b8cc401ed0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000899v1_decoy LN:1055 M5:071ea5ccf103c1e5bc64476b69297cae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000900v1_decoy LN:1055 M5:a0183c0c525e9830c2487ba397d48984 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000901v1_decoy LN:1054 M5:fbc0b340afbabfc63b03b8ec4caf77ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000902v1_decoy LN:1051 M5:5f5a077b53495abe7fc001c49c8b9306 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000903v1_decoy LN:1050 M5:69420a1791c126a89681a6620ca82d48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000904v1_decoy LN:1050 M5:9c4f6e5286d911f86ede7780174ee24a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000905v1_decoy LN:1049 M5:0940c85e47df41bd6052ec8f8ca76da3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000906v1_decoy LN:1048 M5:d1bb56cbbe04f366cb8b9e00e16c0292 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000907v1_decoy LN:1047 M5:b1bfe8c8a961d7d57914f4d7c4244100 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000908v1_decoy LN:1046 M5:e48424ce325e8f78e32af41d56e93243 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000909v1_decoy LN:1046 M5:2b08cbae6f429b208c980cf721fc1a43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000910v1_decoy LN:1046 M5:43dfe59c93ea059ca8557bb58d0d3e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000911v1_decoy LN:1045 M5:4a62b434c567f91554aba4fe9d29bee5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000912v1_decoy LN:1045 M5:9dda9f1dca0f324d3ec28a2f95399b6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000913v1_decoy LN:1045 M5:f7d06c828a959e093ca5c4fefcaed79d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000914v1_decoy LN:1044 M5:9565e8a0c6d2b4911f44a2dec3319fec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000915v1_decoy LN:1042 M5:63910bd693964213823ca9ff1e270883 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000916v1_decoy LN:1041 M5:9350358a6726a178c8e3c5c038a58b5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000917v1_decoy LN:1039 M5:1c73f73eb55cd6290be7beede9ad10f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000918v1_decoy LN:1039 M5:95035075514c5d5ad7852ba2c1b2b649 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000919v1_decoy LN:1038 M5:f8b064906cddf6b316b6aee040120925 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000920v1_decoy LN:1036 M5:510d0277b9afc44d0f3a07b3327a111d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000921v1_decoy LN:1036 M5:d7a9e2e36d916e57d735f657035a9829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000922v1_decoy LN:1035 M5:318ac9befd9a2449cae3c371dec8e628 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000923v1_decoy LN:1035 M5:6af821ff48f6593ccd322ce697bdc253 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000924v1_decoy LN:1033 M5:bdd1f96a69f748c2a2fc4b21e31c2f06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000925v1_decoy LN:1032 M5:5b23ae1b5786a5a5eadc92b69bd836c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000926v1_decoy LN:1031 M5:b06aa5a4fb487a467429373242a18923 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000927v1_decoy LN:1031 M5:6fd21c6cec0c8086aa77d26c6d200aeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000928v1_decoy LN:1031 M5:196c591c8593f2c090224ae6cec80358 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000929v1_decoy LN:1027 M5:b7eb33328daf9d0ae316619a61384cec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000930v1_decoy LN:1027 M5:a1112db1101bde90d172ceb0b455adc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000931v1_decoy LN:1026 M5:42be32c5547cde39b2ccc77ac8e41c3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000932v1_decoy LN:1026 M5:62f5a154eeb5e3613de4f255efe75565 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000933v1_decoy LN:1024 M5:69e6c66e0db5f669e7762df739c9bba6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000934v1_decoy LN:1024 M5:f2b5de034be298d37051f37061d1748a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000935v1_decoy LN:1022 M5:d81ab37920ea303d70fec80162569190 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000936v1_decoy LN:1022 M5:08f1fd0b0e3cb4204a68c0bd7c5c57a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000937v1_decoy LN:1021 M5:4c13817a5ba74eee0c03aada914a0243 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000938v1_decoy LN:1020 M5:e4ef90447f68425ac775770584c2ac6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000939v1_decoy LN:1019 M5:d7d108b06883f65ce1ec9f6a55b4842e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000940v1_decoy LN:1018 M5:3e1e177644a21aa70ff44fba9753313c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000941v1_decoy LN:1018 M5:6bff6cc8151a99c46a864ea703c2f8b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000942v1_decoy LN:1018 M5:e7f0466b453823ed7d075d4a2ede4a7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000943v1_decoy LN:1016 M5:3d62e68db3dcf0e169c55174dcbd79c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000944v1_decoy LN:1010 M5:7b808bb60e41db8c1149f10d7bd5465e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000945v1_decoy LN:1010 M5:8f606e0943101b0656668a2ae35e055f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000946v1_decoy LN:1009 M5:5af16ec72873d3cf402dd411e1bbaafa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000947v1_decoy LN:1008 M5:ccfac7e6bd5f5a5fb98e773922be5b3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000948v1_decoy LN:1007 M5:d5e4ec92647dc97d7ca5c479effc5698 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000949v1_decoy LN:1006 M5:53c640d8a27c49f44643fa6cff64c7bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000950v1_decoy LN:1005 M5:4f20464a0e34b4c139f58567dac67a9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000951v1_decoy LN:1005 M5:47b4982ddfd84f1b626e9ea7b0859169 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000952v1_decoy LN:1004 M5:77403eb0765e6a6422307122ee3a0544 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000953v1_decoy LN:1004 M5:74caf00415bd1b5764ea6082c0945b27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000954v1_decoy LN:1003 M5:811dd1c7e02a779772cb0adcd330822d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000955v1_decoy LN:1003 M5:b217fa3505a5024cd26ddcf42d514a4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000956v1_decoy LN:1003 M5:c90b2e71160e8f5cd6d23a740a17841b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000957v1_decoy LN:1003 M5:3bf126803f3335d9227e753cb43060dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000958v1_decoy LN:1002 M5:3904df1efaf5438d8e060141cf4dd6a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000959v1_decoy LN:1002 M5:ab5ef802456142b25705723663909e35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000960v1_decoy LN:1000 M5:ff514a3d2ae42b584daf88b9a9a8751d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000961v1_decoy LN:1000 M5:eb02c1a37ede0d1a737a6c8c984eb06e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000962v1_decoy LN:8358 M5:567a758298b590bb1f4a159d81b84283 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000963v1_decoy LN:7932 M5:fd0a26e270577d3a6cc4cb9256e21cc2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000964v1_decoy LN:6846 M5:4fd9f0f9e88fcd125702c11dfc2c4efc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000965v1_decoy LN:4591 M5:31483ec110747cfcac4dc1e36e8758ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000966v1_decoy LN:4041 M5:f4f7ba029902c50fa77ed2b9966eb1a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000967v1_decoy LN:3841 M5:00a9379bf89f4556f66988ab0193b4c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000968v1_decoy LN:3754 M5:bb2217ed56094a266a3fb1b82e6c6a23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000969v1_decoy LN:3743 M5:5332a570edd08ee710cafaec398e0156 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000970v1_decoy LN:3702 M5:2b25e772f95c73582eacc01e9a048d9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000971v1_decoy LN:3625 M5:44cc5ae081c41e1c77f2043b88c70e0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000972v1_decoy LN:3529 M5:9c1927ed8f09b5ddff51f2f25450a4a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000973v1_decoy LN:3508 M5:04e36a548c184b404c00b7841ba45394 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000974v1_decoy LN:3359 M5:43e1fbfc042ef8b79879bd53c3b27521 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000975v1_decoy LN:3320 M5:4c9cce705cc18e643a96d433b0f0d80d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000976v1_decoy LN:3231 M5:090a5929ce6079dacc5408a9a7212f91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000977v1_decoy LN:3220 M5:b353222bd8f3e04b305911608d5b8b16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000978v1_decoy LN:3212 M5:d21eaa3001500aa078c0457aa0ecb160 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000979v1_decoy LN:3192 M5:87ce752d8b9611f39e6371d84b00dd68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000980v1_decoy LN:3092 M5:51fba58b7e482359134618d7115ef0b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000981v1_decoy LN:3087 M5:86e1c20fe0c0fc2ee5a4627c9dc91dde AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000982v1_decoy LN:3048 M5:0f4f9a676207d67aa7b835ec767daa3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000983v1_decoy LN:3005 M5:8cf60855c69aaa947ecffc2d85f7b836 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000984v1_decoy LN:3004 M5:1fe6d0e0f45dd1c103c83d965f4d065f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000985v1_decoy LN:2959 M5:5734404ace148ab496a0589c177d68d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000986v1_decoy LN:2934 M5:6091b4163a2558a3b376861ba46e49b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000987v1_decoy LN:2933 M5:867d88d0d6a7b4576b5f40df8aee32a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000988v1_decoy LN:2827 M5:fc01429a43e70e9f45d2e9b183f1cbb5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000989v1_decoy LN:2794 M5:8c97ce716667af6e7bf7b16598a2d1a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000990v1_decoy LN:2749 M5:460d8510eb2de1d5521b6303183eca65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000991v1_decoy LN:2745 M5:bcb193217c039f3d327b106f7bbb1eb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000992v1_decoy LN:2733 M5:38d3109378fc051e0d6d30c9c768c361 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000993v1_decoy LN:2698 M5:7909dcbf170e075fd5ae77f2de6658bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000994v1_decoy LN:2665 M5:90d637dd87631542f98b8a2fb31e45d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000995v1_decoy LN:2634 M5:a5125437bf818a2f4ece1a2cb7ad4e5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000996v1_decoy LN:2492 M5:82de7c0346b508963d47eaef107ba2ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000997v1_decoy LN:2489 M5:904eab4180cdf8accc4e926f65892e16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000998v1_decoy LN:2468 M5:5a16ed756cd3e8451225c0c89c299ac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01000999v1_decoy LN:2414 M5:a7f82c5206197f2b60bf6e21e8406ff1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001000v1_decoy LN:2395 M5:fa87a3decbc163bd5c4be47f26ce4c72 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001001v1_decoy LN:2356 M5:c1764faa777d0cb7e6d10ff41a7f4d46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001002v1_decoy LN:2339 M5:a71335121d2395b90f88701d0d395b28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001003v1_decoy LN:2310 M5:e7727f2a6ea39391478a70b270b9a4c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001004v1_decoy LN:2288 M5:27c3653c8e9470329db519a7e855887b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001005v1_decoy LN:2285 M5:07a062d63e1175496ade57cb4924ac86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001006v1_decoy LN:2269 M5:da22a2b66c30d77f9c75ac5543b82df4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001007v1_decoy LN:2253 M5:521007d0a98d89311d4fef1f850e5c3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001008v1_decoy LN:2203 M5:efd830cbd9f13d6f2e59621b80df1cc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001009v1_decoy LN:2176 M5:35223579474d332cd9c25530d391cb37 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001010v1_decoy LN:2159 M5:c6451a9867c60bb9414b9f531733227b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001011v1_decoy LN:2155 M5:c9a15197997fcc229a4ba16daaef7ab9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001012v1_decoy LN:2149 M5:8fc79f00adb9b9876fc0c760212279a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001013v1_decoy LN:2129 M5:e0053f5c6a91ee7561e587740719a89a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001014v1_decoy LN:2116 M5:c4594c9954ddda6bf892d1221deb1f5a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001015v1_decoy LN:2113 M5:a604e6df460c882c18dd0b761e7da09a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001016v1_decoy LN:2098 M5:1e7f643633169955a530300b89b41499 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001017v1_decoy LN:2066 M5:95e88f3c4f847fe97ff528408aee9885 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001018v1_decoy LN:2066 M5:50eb710c12d63d96710eead27936dbd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001019v1_decoy LN:2059 M5:80e50b65d76c95f06a65b213d6e22e3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001020v1_decoy LN:2047 M5:1e5494b45601a7dacb84814da24724db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001021v1_decoy LN:2040 M5:0fd285ea19d36ac7fbfeb49f98d0e3fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001022v1_decoy LN:2030 M5:4d3b39f0ab2f0f051d917cc94faeae9d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001023v1_decoy LN:2024 M5:a4cef27d7ccd380794cbff4dd6eb41e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001024v1_decoy LN:2001 M5:e6821e55e6dbf96dd5ab53b59be17ce5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001025v1_decoy LN:1992 M5:dda157c4b492e3c1a4e277e1dab4aa7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001026v1_decoy LN:1981 M5:4166a173f0411e5579f9d3ed8aacd959 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001027v1_decoy LN:1979 M5:88e1e86ee00ad030c8e1f25e49ad569a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001028v1_decoy LN:1957 M5:26727871d8918ce12f1e7fa8f5914c7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001029v1_decoy LN:1953 M5:9b38c1ef5a1efb5065c9f3dc102ff199 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001030v1_decoy LN:1944 M5:85264a3258514a27228a82bcec9ea08d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001031v1_decoy LN:1936 M5:a7347a7344187fa04690bfdffc33512e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001032v1_decoy LN:1932 M5:4030d4f8fc378be7ab110a327a3a7f7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001033v1_decoy LN:1882 M5:ca4279d8b8d3f3b766ec81b34c402aa0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001034v1_decoy LN:1878 M5:e5d3efe3296f7f5ffb2193bd5be2aead AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001035v1_decoy LN:1870 M5:1c898a94d86446ff18aeae6c9836d2cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001036v1_decoy LN:1821 M5:8f2121509d8a9d3e95e78ceeaca8db95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001037v1_decoy LN:1813 M5:1111c9f5ecffa495ea2a9408094b8fb6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001038v1_decoy LN:1809 M5:0ef16d8e23134785f99146b8b3cada3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001039v1_decoy LN:1804 M5:11e7f4e8d60fef86d7fbefca0fabf5df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001040v1_decoy LN:1797 M5:42437cf6fa6210fd9b127e7487d14e4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001041v1_decoy LN:1791 M5:1b98bd8020f173b5205948481dd39658 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001042v1_decoy LN:1781 M5:7460d29d17ba264f4358d5876a383fac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001043v1_decoy LN:1766 M5:1599e276d124e4a9aa2f66a6300f8a3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001044v1_decoy LN:1764 M5:fba6f4c5474d22767649a8328d8f3670 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001045v1_decoy LN:1743 M5:8b83d468225e1a45cb1846dc726f2562 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001046v1_decoy LN:1741 M5:8adc2f7bd9e61fde6e9824026c0a2430 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001047v1_decoy LN:1709 M5:7363ff9bc2e506ad5041f70fc083e7fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001048v1_decoy LN:1706 M5:ef2492257bbf08783a4db0aecad49550 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001049v1_decoy LN:1701 M5:9c322f81502c32f0c8f405ee752a4f44 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001050v1_decoy LN:1689 M5:5fe371c4096ae41150f76981d68dacd2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001051v1_decoy LN:1646 M5:ed85a7af0713ab3b3bcdf61bafeedea5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001052v1_decoy LN:1641 M5:97b84c347da74fc7614b6363ba4f28e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001053v1_decoy LN:1639 M5:dc79cb73595caf151cffe0be4286ce1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001054v1_decoy LN:1636 M5:221da4dd1119306af9f8fa1bc567f6fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001055v1_decoy LN:1632 M5:6f572e5698e138bf1e7b1edba75588f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001056v1_decoy LN:1629 M5:fd6f43c6fc2542ce63298bdd465a38a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001057v1_decoy LN:1623 M5:4a44475e85813d0b54e2afdd3aa8315b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001058v1_decoy LN:1622 M5:d30e3342b06bd2428d574ef50226a9b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001059v1_decoy LN:1622 M5:0e6aaefcfab75455e8f59e751c8d44a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001060v1_decoy LN:1619 M5:e91e56fee1ae99144354eba8e5ec571c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001061v1_decoy LN:1606 M5:e266b715eded02faa272225186a213dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001062v1_decoy LN:1593 M5:74d3a9f8a38387de10a759100154372c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001063v1_decoy LN:1592 M5:efcf64c62b2233135f5794d7b9e2f4cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001064v1_decoy LN:1558 M5:bbc8fdfa71746e3e396e745a1fc9d63d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001065v1_decoy LN:1545 M5:fc836522e323b4779fcc5b16f2d28505 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001066v1_decoy LN:1542 M5:6fe808dc84087dc7d8418eced9744173 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001067v1_decoy LN:1540 M5:9c582e02bbde278105b2764116a44ef6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001068v1_decoy LN:1529 M5:9f25be63cbf7cc5da1d1bc6fe23db799 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001069v1_decoy LN:1518 M5:772df05b40eabe6b084af8cac402aef4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001070v1_decoy LN:1515 M5:bda033712d93ab6c918ec5b0fa58f343 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001071v1_decoy LN:1513 M5:faf46f2a8ea7b8d1d0282aaf9e10141b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001072v1_decoy LN:1507 M5:12e6bce1a4e70c91a764227eafe6d229 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001073v1_decoy LN:1504 M5:c757ce71d69487d184714bb6bf879036 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001074v1_decoy LN:1499 M5:d6645febc4c0e7fef261124c74ecff8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001075v1_decoy LN:1495 M5:adf3668dcf991b59a38c281c3d7b5647 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001076v1_decoy LN:1495 M5:2edd8f2a644a90e4ca21826bb31402dd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001077v1_decoy LN:1492 M5:3dc6cc3ffd2a9b7966ca3e8ea12dc81f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001078v1_decoy LN:1492 M5:308ce742886a73a84ab8cb90370451ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001079v1_decoy LN:1489 M5:39d5f26be15da228d1d38b408e0a392c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001080v1_decoy LN:1485 M5:2a52bf85b6a45c79c92a6c6027abf122 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001081v1_decoy LN:1483 M5:d22840c21eb279736a5a8262ec8a66b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001082v1_decoy LN:1473 M5:d6b57113fdeadd16b92fed725a02d12d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001083v1_decoy LN:1470 M5:5b5ff1a6c8fff55ac6ebd1d9bda4fd80 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001084v1_decoy LN:1463 M5:80030f88512ee394cc4e9a81b032e17a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001085v1_decoy LN:1460 M5:2587132a077227d0b8742ec9439f95b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001086v1_decoy LN:1458 M5:5366ad05ba9fe3bdfbc51dee8759c348 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001087v1_decoy LN:1456 M5:1d39f2ea075eca983ca23f12efc47f22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001088v1_decoy LN:1453 M5:020a82dc938b6e53e904f477268c7d5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001089v1_decoy LN:1443 M5:541cab251db4f8356953dfc20e8cb327 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001090v1_decoy LN:1441 M5:a563ca647fc20b65ba7baf52e3eb4648 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001091v1_decoy LN:1426 M5:d096cb367c98d6804b4a1b205054c9ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001092v1_decoy LN:1425 M5:4c1a5daffb2303c754e4383ec3bff31f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001093v1_decoy LN:1418 M5:5305c46f4221a62f8001b24ced994801 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001094v1_decoy LN:1413 M5:8d8667fd137515e7c5d31b0b942a7525 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001095v1_decoy LN:1413 M5:e38f0eb475fa6f2aee1b51ea785af3f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001096v1_decoy LN:1412 M5:88ee82e753efc8d4fbd5f1e02ddff9e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001097v1_decoy LN:1407 M5:732666474ada2d4fe1316edd249b2f5d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001098v1_decoy LN:1406 M5:f63dbabd25745821024183fe0082257b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001099v1_decoy LN:1396 M5:0102bc3c8078cc16bddfa125f005370a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001100v1_decoy LN:1390 M5:181bb8fe5095e667506c66e213f3b51d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001101v1_decoy LN:1382 M5:545aae1204533fcf75e6c622471d3061 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001102v1_decoy LN:1376 M5:a69102cf73d82bc4298048ee7eb0aa85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001103v1_decoy LN:1375 M5:61f67b4a0c7573bf583ae5a051e7aaf3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001104v1_decoy LN:1371 M5:4b33e5f1a51a79cdc62fd070cf874f91 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001105v1_decoy LN:1367 M5:4286f9ebcff872815a9246b3a2596781 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001106v1_decoy LN:1364 M5:9a3f9b88cf1926d9c75b673647ff46c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001107v1_decoy LN:1356 M5:b54b34217f1c3efb1ba9d4477a0f2045 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001108v1_decoy LN:1355 M5:c49fb7670582bf2f81413071056f61ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001109v1_decoy LN:1352 M5:32abeff50bcab272795c72f7b7edd46e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001110v1_decoy LN:1350 M5:9660451ad55da2148a00b49a126176d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001111v1_decoy LN:1346 M5:c6722a471b0e8cb1384d59ff72cc732a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001112v1_decoy LN:1345 M5:6ffb665540f55661d5ccf40795cebd35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001113v1_decoy LN:1340 M5:e0ba11f5404075a40b0072d19c2bced2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001114v1_decoy LN:1330 M5:ccb7f39ff649bf360b5b4186cf18c01f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001115v1_decoy LN:1329 M5:c52f3a9196ca3b03d2a02680f15419e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001116v1_decoy LN:1324 M5:f07d0c07c8951023331599b2df20380d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001117v1_decoy LN:1316 M5:8195f619c45e8d571a25264aa6e7a65c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001118v1_decoy LN:1307 M5:49f9986c45cac526b89e5520a9baa4dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001119v1_decoy LN:1304 M5:fdbf4160ba84788b20bd855b64cea30f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001120v1_decoy LN:1304 M5:edc34fe61ae9a3b15bc5a4ad8d291271 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001121v1_decoy LN:1303 M5:6aea0ad92108bcebca7f7886b75bf9b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001122v1_decoy LN:1301 M5:ccf0d28aa2b30e1d8e7ef2eafe01e849 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001123v1_decoy LN:1300 M5:8bce51ab0470cf3f210d3b25582c2297 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001124v1_decoy LN:1297 M5:01e9ba63de5b8b6e1a07efb0b1179f20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001125v1_decoy LN:1296 M5:dd2148d2b631c1a7e61a18155b56698f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001126v1_decoy LN:1290 M5:9e7639e4c222198ef6503cc2e1c7577d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001127v1_decoy LN:1284 M5:1ed6768a3d0449e96d3939d08102f424 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001128v1_decoy LN:1282 M5:a8d94de0900b31bf20f7c16fa5eb29c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001129v1_decoy LN:1281 M5:30eded62211ca354db518348aab06f6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001130v1_decoy LN:1280 M5:35b60389b57134465f6d190d5955cf46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001131v1_decoy LN:1279 M5:448c65a5e874d8959bde564141823daa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001132v1_decoy LN:1272 M5:aeacf07664f294565febc34b1f8f640b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001133v1_decoy LN:1267 M5:df7730fbbc24afefb2749741f708f001 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001134v1_decoy LN:1267 M5:eb717a13171c7390c1c2e91a50473c32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001135v1_decoy LN:1266 M5:76896544c6b4b9c8bc2be23ce31fbe4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001136v1_decoy LN:1264 M5:f3195b89752559a8a693e50e17a9d0c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001137v1_decoy LN:1264 M5:73ff474a35189bec700ddd7f25a140a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001138v1_decoy LN:1264 M5:b090d99b3c28f2a84a801018d5843220 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001139v1_decoy LN:1263 M5:a0baed3aa07a676a4fded91fd8edca4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001140v1_decoy LN:1249 M5:0e81abee1c989a0f1ceebfa48b5eacee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001141v1_decoy LN:1240 M5:ddced69f19f82a08186fb39c0354eff3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001142v1_decoy LN:1239 M5:43ea2140da380099332cf0cb0490293d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001143v1_decoy LN:1235 M5:fe6e8b59583fb141e7b203df304e688e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001144v1_decoy LN:1235 M5:7051b4e9e0386119d27af1cbe5a2c633 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001145v1_decoy LN:1233 M5:703871732eddddd1c5ade422c3a7e105 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001146v1_decoy LN:1232 M5:a281258df9fd861e7ca6bdb869fd27d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001147v1_decoy LN:1230 M5:d0939ee2b936624fd9dc5f0bb2a0cff5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001148v1_decoy LN:1226 M5:21f414046e47b5e9c13d47b9b073c6cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001149v1_decoy LN:1223 M5:6e73b42728119fe2041f6c920248ed9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001150v1_decoy LN:1214 M5:44865e67b99f28cb3bf0d5d89d259a99 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001151v1_decoy LN:1213 M5:062e3bbeb41213d0e68f944e1911f058 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001152v1_decoy LN:1211 M5:75ee5d3d8230d6db22a735709fd78e40 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001153v1_decoy LN:1209 M5:8ea8e29581777bdb7e7e2435b43a9123 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001154v1_decoy LN:1202 M5:5e4321979f4ad7f0e0630deaf3292360 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001155v1_decoy LN:1199 M5:de05fbc3c15237ca2c8d5c37f3f66dad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001156v1_decoy LN:1197 M5:81532092e3b56c94488f88b7b40525f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001157v1_decoy LN:1193 M5:ebc3be993ac1b9ab8acddc283066d160 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001158v1_decoy LN:1191 M5:9bb2ea3006a7f808a16cf62efac3d39c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001159v1_decoy LN:1187 M5:c5586dfb4606cba7d04c9bdb9b970ca3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001160v1_decoy LN:1186 M5:8ac59cbe50a76ddb4315fa75de02a202 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001161v1_decoy LN:1184 M5:1acac09b845dc4ff431c33916e819c87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001162v1_decoy LN:1184 M5:b3d7d809b498912a66c53542f6164aa9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001163v1_decoy LN:1182 M5:a06ad4e450a32bf31e43fa9794e6c635 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001164v1_decoy LN:1179 M5:2fa76b3fa2caedda0d3aa46b0071fd03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001165v1_decoy LN:1173 M5:ba3aca12cb0c76e77a2ab28a3366cc21 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001166v1_decoy LN:1169 M5:7eaa353b323f8eadf6cafe90fce641bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001167v1_decoy LN:1167 M5:61d674b4fcb995535cf94aa7ee127946 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001168v1_decoy LN:1166 M5:38aa98ae17ee349012bee80c9828adfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001169v1_decoy LN:1165 M5:bbd8f8056d59712fd77f6bbaddca57b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001170v1_decoy LN:1164 M5:807bdf141f9ae4103c56e43d949f531e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001171v1_decoy LN:1163 M5:cd8efaef0aa61647e740aa2b0e22ecd4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001172v1_decoy LN:1158 M5:3e53721e66305f3f2b4da98d998268d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001173v1_decoy LN:1158 M5:8ba71ae4bcbf61a48eabeee68296f62e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001174v1_decoy LN:1157 M5:b99ae11f6934e857cb9399ae6c41824f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001175v1_decoy LN:1157 M5:bbc9020c1846bb053b237d5b0478531d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001176v1_decoy LN:1157 M5:52700c360bd82baf97d7bc5fd70a9825 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001177v1_decoy LN:1155 M5:8e366717b85c08e01d0acc612724c6b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001178v1_decoy LN:1154 M5:53cfcde178b82cf94450e6ecc610ef24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001179v1_decoy LN:1149 M5:857f173eae9d86a6ed33b462c9607c5e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001180v1_decoy LN:1148 M5:ea231418525b44371f390a8a2a11af78 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001181v1_decoy LN:1148 M5:5a71efd43a930d44ebcb3574bb9cc031 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001182v1_decoy LN:1146 M5:c8f128dd7893d4ec3036e468d8bd6522 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001183v1_decoy LN:1144 M5:3cc0de0dd79e700a3369cf024230bc41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001184v1_decoy LN:1140 M5:fe4503df1d12b851a419140fa4b4173f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001185v1_decoy LN:1136 M5:224b91af2e2925de5d844cccabcf05ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001186v1_decoy LN:1134 M5:cfbd851609b789f2899a3be61d9127c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001187v1_decoy LN:1133 M5:463b232f53f888f5d3bf049f131ebba1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001188v1_decoy LN:1129 M5:1e9b1998943db973b5af6f8d3f8cc934 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001189v1_decoy LN:1127 M5:e780622b257020939988b4785d91218a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001190v1_decoy LN:1127 M5:7efc9fb11679f19ad35fe9371a9dbb1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001191v1_decoy LN:1118 M5:911cf50162dfce9f1bec2ae5f5ffcd74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001192v1_decoy LN:1110 M5:e8f80a36c02331c337e0b327ff8faf9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001193v1_decoy LN:1104 M5:807ca6abca6229d97d8e363a0d01228f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001194v1_decoy LN:1104 M5:0f010a7025fef93df6efa5c5bf5a0f20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001195v1_decoy LN:1101 M5:1c2dc8ff99f4cc1ff11ad3d16b9f272a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001196v1_decoy LN:1098 M5:cb8ee97689963848f0ab08fab52ac3a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001197v1_decoy LN:1096 M5:0724eae831018e8ab18798c02eaa4f1a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001198v1_decoy LN:1094 M5:fefb3d4308c57ce507d9c50c88eaae9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001199v1_decoy LN:1091 M5:a86fb31cc351320639079ba611824352 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001200v1_decoy LN:1089 M5:b75ffa24b8714c207a1d8de82e0812f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001201v1_decoy LN:1086 M5:0fcd8b558e0ab2ccf0b0d8bc3db23d07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001202v1_decoy LN:1085 M5:9e3b81bef0ba768284fd5cdc7b7ccf13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001203v1_decoy LN:1084 M5:35268d23224ae41608aa13bd7fdc7fdd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001204v1_decoy LN:1083 M5:a74077cc79c0fe324530f49b263b3307 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001205v1_decoy LN:1083 M5:cc88bb09f7a6ad37d5d5bf95400fc329 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001206v1_decoy LN:1079 M5:35f5a907b81ef8dbf77ec725790583dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001207v1_decoy LN:1076 M5:de787959b71e3c620c8ef7e41f6bf5b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001208v1_decoy LN:1069 M5:062313b0d5e67fee9d60100c7938397d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001209v1_decoy LN:1068 M5:93480c74c7540c0e7af8c2576e2b9dac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001210v1_decoy LN:1067 M5:8f8b744585f712f3e0f83707464cf886 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001211v1_decoy LN:1067 M5:929d9dd00e1ad8454c70511ea362a4e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001212v1_decoy LN:1067 M5:24aa3c508b845b2b1048334ce78332c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001213v1_decoy LN:1063 M5:29f3cd44f918aff7d3164e28bfddb98c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001214v1_decoy LN:1062 M5:12f432068dd357613e770c93cafe0452 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001215v1_decoy LN:1059 M5:47cb3f694ffe2d6ce654ed3b6cb5e3f7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001216v1_decoy LN:1058 M5:f49ebea87cb9479f2d50f484c3217850 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001217v1_decoy LN:1058 M5:4828d8055dbb4bfe4f703bb55a2ba1f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001218v1_decoy LN:1055 M5:6feebb18b6b36dd7c31078b901101e23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001219v1_decoy LN:1054 M5:bbd43557ef56c3c1b056aa213470e130 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001220v1_decoy LN:1054 M5:135c9383230d02f4fa50cd9ef42c51d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001221v1_decoy LN:1053 M5:bf3402855155585fef154c6f26c2f42f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001222v1_decoy LN:1053 M5:55f5597ffafbca066600c886b78932ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001223v1_decoy LN:1052 M5:777b4dde14fe0e0c5aff39ba12f25d7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001224v1_decoy LN:1051 M5:f46bdaf70049d1b5dcdcf4d9bb8bb616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001225v1_decoy LN:1049 M5:a1ecf64987c3a271019ca2bcf6dfb797 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001226v1_decoy LN:1047 M5:c2548a36b128c6216d1689299d9bc6e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001227v1_decoy LN:1044 M5:57aaa99e04236628ee2e2c48688a28e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001228v1_decoy LN:1043 M5:8ab15ca1a985afa87ec7a9cf048505ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001229v1_decoy LN:1043 M5:ad851f750b29642813387f1b00a09791 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001230v1_decoy LN:1042 M5:794f6bbb5ddfaa81ad10c9f97e460d93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001231v1_decoy LN:1042 M5:a88fd0ab44445757ce49b2886b3483dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001232v1_decoy LN:1041 M5:16cfe1e6b786b55e14e1c23b0010abd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001233v1_decoy LN:1040 M5:03f3627a2f7242721c8ba740808d67d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001234v1_decoy LN:1039 M5:2bd140282d454fa86b3d845400c68456 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001235v1_decoy LN:1038 M5:44928251b94a7ba7b6d78cfdc7b74903 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001236v1_decoy LN:1037 M5:0021932312a252327115aef207a22260 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001237v1_decoy LN:1037 M5:7ff32784d45f4a2b9d90d895152d8586 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001238v1_decoy LN:1035 M5:cafb9e327ae844419f531cc74ad34c2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001239v1_decoy LN:1027 M5:87b6d1b7895e0e98849ddb847f85e535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001240v1_decoy LN:1021 M5:9f34ec8f23890b5c5ec129f3aa55fb28 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001241v1_decoy LN:1021 M5:52f88af4a5a6b8a7171df7143c99cec1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001242v1_decoy LN:1019 M5:093ab05e7ea2f698daf568af4a5f9314 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001243v1_decoy LN:1019 M5:322f96479243e771eb980526832e662f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001244v1_decoy LN:1016 M5:cf6212ddc0a137e657fec0764722dcad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001245v1_decoy LN:1014 M5:21eab5ad8f971f8753d0aee1004c1335 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001246v1_decoy LN:1013 M5:3c7ad60ac9394211fb081912b61e0f03 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001247v1_decoy LN:1009 M5:09f86dc178eeb4ecffafd9734a2afd5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001248v1_decoy LN:1008 M5:43929eb34efd2bbaf9f730d06a1e4799 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001249v1_decoy LN:1007 M5:494ad809a7d99f4147c2398821be92a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001250v1_decoy LN:1004 M5:589a72200353f7537edc3a9acccfe913 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001251v1_decoy LN:1004 M5:183d62e7208aff9604bbbf27702052f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001252v1_decoy LN:1003 M5:8f62a1d759dfd3a68b63b88c50e5fa85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001253v1_decoy LN:1001 M5:0bae6492e6a77abd67b50475fa94a80d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001254v1_decoy LN:1000 M5:6c3e8a079341eb05dd337a0413754070 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001255v1_decoy LN:1000 M5:39444bfd408b4e184afe6e0476041965 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001256v1_decoy LN:1000 M5:44d266b549830722a7a161606171afd9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001257v1_decoy LN:17929 M5:329d6c2a67aaff331fd020d0c9627310 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001258v1_decoy LN:9749 M5:446c5fb7d2e7af681df8773fae61fb27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001259v1_decoy LN:8053 M5:83998e69640a5925a4a86054bce5f2ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001260v1_decoy LN:7826 M5:30c34924be761a9b459c27c08f1f85e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001261v1_decoy LN:7768 M5:32d54ea636150f497c9484a714b37b8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001262v1_decoy LN:5691 M5:ed6cb5bb44a3cfa13f40e14e70bd5fda AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001263v1_decoy LN:5444 M5:40da5cd1840a6368532eaf7e9e4dbe8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001264v1_decoy LN:5077 M5:ea25764cf81ce3030520b86de80c9758 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001265v1_decoy LN:4990 M5:be003e2c8206a15f2159483f284c898a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001266v1_decoy LN:4545 M5:f2f37f70dde8161d632cee33ff5ba435 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001267v1_decoy LN:4544 M5:2b0987b0fb64b16ed454eaff1b74be84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001268v1_decoy LN:4202 M5:78643a9f481cc635295ad076fe1e82bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001269v1_decoy LN:4195 M5:eb3537b9b9d637c74f1d3b43e5fd06c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001270v1_decoy LN:3807 M5:dc3d4eca4636d838ee52fe920bbffbfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001271v1_decoy LN:3741 M5:dc2e137e3cac9a5093030c34fa68c2ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001272v1_decoy LN:3699 M5:db44a6f6dcd56edde16009cdfc186ccb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001273v1_decoy LN:3640 M5:5bda6902f082f2b4a6823836d5d0b48c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001274v1_decoy LN:3531 M5:2740aeab0828fa2d4f2789d353a40b8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001275v1_decoy LN:3455 M5:03cdb0fa6bc0f56dc7266334229fca85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001276v1_decoy LN:3411 M5:2127857d57a589d739a30316547e9447 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001277v1_decoy LN:3387 M5:6b2e8c2f953822e034c233e94c710473 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001278v1_decoy LN:3358 M5:61be95906f76f332c029bcaaca590c79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001279v1_decoy LN:3285 M5:3c9976ca87f24507e195746c96cd0b4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001280v1_decoy LN:3273 M5:8e25e50d38f8fb4cbe34cb3c83f14fc5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001281v1_decoy LN:3262 M5:c1e6634aa95f817084fc1e1eced2abad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001282v1_decoy LN:3259 M5:eded84ead1eb3b92edb6b77f27f8c4f6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001283v1_decoy LN:3222 M5:08c79b1d017ddd4136c42b4cb8c16e5c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001284v1_decoy LN:3127 M5:78f9666a13abcf03877f434199528e58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001285v1_decoy LN:3110 M5:19e028e80d77e35d088ea23eb52c9f68 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001286v1_decoy LN:3104 M5:7f7ac2759ee408d0324f4841b60eb208 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001287v1_decoy LN:3071 M5:cea9d8679bb3eacfb8b04f6ebbf1d4da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001288v1_decoy LN:3063 M5:52b2d8ce5acdb6c47cd5cf7924b1bc24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001289v1_decoy LN:3059 M5:8f356c7dd57f009b249e5147f708ff1a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001290v1_decoy LN:2990 M5:5ef88696d7bd42f40685d222c13e3750 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001291v1_decoy LN:2986 M5:5e39db2cc6d246fa9083dae9ffacda96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001292v1_decoy LN:2928 M5:09a5226cdb11c4ba418a8bdf844de126 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001293v1_decoy LN:2922 M5:0b5455a2f20844d83c853abef966cffa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001294v1_decoy LN:2875 M5:82e9fdbdba365f9449c25c473beabbcd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001295v1_decoy LN:2859 M5:f0957c602b216d5ed18be6c38733aaf1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001296v1_decoy LN:2850 M5:183158b1e867bb90712701171e344b1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001297v1_decoy LN:2813 M5:cad265dba180a6379fe3ff72f3874c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001298v1_decoy LN:2785 M5:b2dea38e300ff000f19f2ed7c17637ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001299v1_decoy LN:2736 M5:75d2dcbfc2388d15030e0f3414952222 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001300v1_decoy LN:2688 M5:0a109d9d73d2f16494f280419a294b45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001301v1_decoy LN:2658 M5:3d83558c586ec81407c8717d1bcf07f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001302v1_decoy LN:2643 M5:c91faf6dba1b10dadf69cfb999d96386 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001303v1_decoy LN:2618 M5:10b7e187737a04307d41acec7960dffe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001304v1_decoy LN:2605 M5:3385ffd5cef2e207dd33adbc369436c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001305v1_decoy LN:2583 M5:4906d3167051868d21d54e95faccf81d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001306v1_decoy LN:2534 M5:b315ca81b05ca7fa9b615787a3b18066 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001307v1_decoy LN:2512 M5:fa1111a29692e4566683516ee2cb9829 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001308v1_decoy LN:2500 M5:51a81bda9467ea2f1691f1136a69d3a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001309v1_decoy LN:2481 M5:66e34aaf92c2486bd4c11db6543995e6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001310v1_decoy LN:2478 M5:c4ac4ca4a4312da763c265a008380d31 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001311v1_decoy LN:2473 M5:464b136e01802236f8fcd38d3f548eb8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001312v1_decoy LN:2467 M5:b4c84cee8bcb72c5b5260d702510937f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001313v1_decoy LN:2442 M5:9d63b837b16220bf689f455bdc1d96c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001314v1_decoy LN:2430 M5:56acbbe636fd49946581fc122c6688d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001315v1_decoy LN:2417 M5:8082a8e6410572af77ebb845f8c1df94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001316v1_decoy LN:2408 M5:9a55c9ad04d332fd58a9914422f7d836 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001317v1_decoy LN:2395 M5:c6c6115fb6941b48dc5a0abc409f5eac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001318v1_decoy LN:2352 M5:755f704f0ecbfcbbfd31d8f375c83c5b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001319v1_decoy LN:2337 M5:666a5906da91f80774c953543fb9c2c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001320v1_decoy LN:2322 M5:0f19d9949679348751b92e237ed27888 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001321v1_decoy LN:2307 M5:439c6600d966bee934ed52a2139c4687 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001322v1_decoy LN:2306 M5:27db03ab4ca9e14af33b697876aaa754 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001323v1_decoy LN:2292 M5:5fe69547ba8f4b03aaa8e71c2608fe14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001324v1_decoy LN:2271 M5:69ed4113a87f0c964d9f7515adb0dfeb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001325v1_decoy LN:2265 M5:78e3664d88395ed413c3de96d0b6aa0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001326v1_decoy LN:2260 M5:ccac0591cbfd65e9a8d51f8e05d34f2a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001327v1_decoy LN:2240 M5:bc9efb2dbf8706ae63a9da56f74a5940 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001328v1_decoy LN:2238 M5:a0265d5b1e9532d8f124c363fe675206 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001329v1_decoy LN:2228 M5:422f2cb811b961c3513bb155a4a0fed0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001330v1_decoy LN:2215 M5:0d7e0facbdb02ac5cbe36bcb3f1683a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001331v1_decoy LN:2205 M5:8aeb5e1e49ad042e60fd97cbe3bd36b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001332v1_decoy LN:2191 M5:bc35b989cffe895e99e6a2fc45b7f65e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001333v1_decoy LN:2191 M5:b1ccfad8f6bde8d9d40c0b7199e30cc5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001334v1_decoy LN:2190 M5:0ae32cfb78573ddb9929745e2e7a0313 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001335v1_decoy LN:2184 M5:08a18a9ad801c228f5de34b35b58ce5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001336v1_decoy LN:2166 M5:95badad6f81c843868ebb07d1f2d7911 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001337v1_decoy LN:2165 M5:e10a87e41dccb3ec25e99df332d5a560 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001338v1_decoy LN:2162 M5:7973da1851b09e72b47bf83450c468dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001339v1_decoy LN:2146 M5:e8939fd820d746a8792b356c04e54cce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001340v1_decoy LN:2116 M5:b67c09bdf1ed2f6a0ddd972711b36104 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001341v1_decoy LN:2112 M5:90340b9fb118df304042bb73e83ec202 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001342v1_decoy LN:2108 M5:465277293cdb0bf1897d5a17e266d354 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001343v1_decoy LN:2106 M5:ddc350523aba6f1c4b90f820904cd233 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001344v1_decoy LN:2106 M5:8c726624d2d1347ec079d4a89d25759e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001345v1_decoy LN:2106 M5:4b1887bbf69131a205c5cc1a4303c860 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001346v1_decoy LN:2097 M5:6dc99a12532b35dedef60dc2cfae35b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001347v1_decoy LN:2081 M5:12316554f4811e33853508ac262465d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001348v1_decoy LN:2058 M5:b1935843fbea95bed6588d9d700d9936 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001349v1_decoy LN:2055 M5:b013f57c784235eb32f6871dd01e5e13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001350v1_decoy LN:2054 M5:c6835412045762a4c54200ada23f30b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001351v1_decoy LN:2037 M5:50c1358c2b24fd59d5a286bbaa57818b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001352v1_decoy LN:2032 M5:45ee3ea9d4de3859645f9b51f0ca2c67 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001353v1_decoy LN:2032 M5:924e5cc3295232068cf32022f5f7e779 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001354v1_decoy LN:2020 M5:70660abb35fad19ab75c06b301d4163a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001355v1_decoy LN:2018 M5:9126be7c6d2612a65885a2fec496e2a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001356v1_decoy LN:2014 M5:847a7ff01c6682c63ad35fae4dd6f947 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001357v1_decoy LN:2001 M5:71668bc6a710ff919fd32549ee63f1f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001358v1_decoy LN:2001 M5:3288f97535eb71395eaf3b088578bc3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001359v1_decoy LN:1991 M5:b29d731dd150421c4e201d1adc92bd3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001360v1_decoy LN:1990 M5:7e91b8bc1cf2c754f8af12a28921575f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001361v1_decoy LN:1983 M5:71f21061b64aff6e62b116e9384a099a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001362v1_decoy LN:1981 M5:87dba9523601c5cfc29630be31297114 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001363v1_decoy LN:1981 M5:2a3b4956ecd118211708b9d7c428818f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001364v1_decoy LN:1979 M5:eb8501b5022cd696a32a2bff2acbbb3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001365v1_decoy LN:1963 M5:87a0635cbf78d7359208e0d29a3b9596 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001366v1_decoy LN:1932 M5:42a66b3579061c6333cfeec8e7bc7b0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001367v1_decoy LN:1929 M5:95db3317d465876b900ca9167ec31b73 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001368v1_decoy LN:1881 M5:31fb7324b8669148c367ef667ff3c928 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001369v1_decoy LN:1874 M5:bb9c6a2d6ec56835ea520c45a854e8eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001370v1_decoy LN:1849 M5:8f83bc8528784a67dd64f10d89331d81 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001371v1_decoy LN:1849 M5:aadeed33b6077b0febbd1f61c186805c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001372v1_decoy LN:1833 M5:155c69774a39a66871981c66bb0f0535 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001373v1_decoy LN:1832 M5:2677f37d4424e092deaaf6c2371defb9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001374v1_decoy LN:1826 M5:4dbca21467f25692d20f062b08c3238d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001375v1_decoy LN:1814 M5:208039e11c53bf03a11d83b417fe5920 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001376v1_decoy LN:1814 M5:8ef785587310c1f2d2226b740e7e4553 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001377v1_decoy LN:1791 M5:ab8270aa2cc7626669c77a954b338953 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001378v1_decoy LN:1789 M5:3ac762e7071f807dda31f5513d9624cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001379v1_decoy LN:1786 M5:9149be02831b6a76a57da93d45460920 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001380v1_decoy LN:1778 M5:a17c5b0d2e1771a62091b6705cfbf5a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001381v1_decoy LN:1776 M5:2ebb9adddc8d21f56ed91c6fbc97cfe1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001382v1_decoy LN:1762 M5:686009ce9e6490069ba0845173cf2c16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001383v1_decoy LN:1758 M5:34dc7958ca4e0be1690c80cce1f048de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001384v1_decoy LN:1757 M5:af98ed1ffd7c4a0166ed1d3bb789d039 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001385v1_decoy LN:1754 M5:80b9896356b85bbe70c7ed49afb616a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001386v1_decoy LN:1752 M5:a7c233ed3f050d44d75a9138231b5384 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001387v1_decoy LN:1751 M5:6e2fe9e7a9951deedb4a39fd837721a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001388v1_decoy LN:1749 M5:5d5cf3896254f422f70ace465b0f820d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001389v1_decoy LN:1738 M5:f8265cae7fb03630effc0fede6811b3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001390v1_decoy LN:1729 M5:48fe4b417655ad69a29770ec6e412fdb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001391v1_decoy LN:1726 M5:01bbe99249b489660daa17fa9f958d10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001392v1_decoy LN:1716 M5:bd9a3ab49b9960e88c2490efe5d8c749 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001393v1_decoy LN:1712 M5:f05c2bfa07a617b06e6a8ebc4efc5022 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001394v1_decoy LN:1711 M5:0f06abd7c321228fa763fb3815140af5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001395v1_decoy LN:1703 M5:09b91ffc2209fd9adc0e0fbac86de4bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001396v1_decoy LN:1702 M5:ff652624b7319ee60f8946d8f751cf16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001397v1_decoy LN:1699 M5:2a71713d93ad2a6a8edc736ddc02907d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001398v1_decoy LN:1686 M5:3bfbf7d5273c5ec692b1907c7c3ff2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001399v1_decoy LN:1684 M5:6d040733a43c01650e5c098e00d46a62 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001400v1_decoy LN:1680 M5:c353280f0d833806daec83385e95e393 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001401v1_decoy LN:1678 M5:c2edb1379f817a8378d4eb089dcdfc0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001402v1_decoy LN:1678 M5:740b37d2e6785fc699776f93cc872e86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001403v1_decoy LN:1677 M5:6d4b39914847504188d3b9feaf3348fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001404v1_decoy LN:1676 M5:31845da6d4ed6000f50d5122bdef15cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001405v1_decoy LN:1672 M5:0630c8622e65da828a153d66ab29b298 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001406v1_decoy LN:1669 M5:e7d237d72fb65c19aac7bcaca3d86d95 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001407v1_decoy LN:1668 M5:86c9c0f792de2f54f69278df5e3246cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001408v1_decoy LN:1663 M5:481fc7b87114d19302cdde760018a39c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001409v1_decoy LN:1660 M5:ca249c982b9bc0cae8d02ae5a7e497cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001410v1_decoy LN:1660 M5:9a4adc64cf2fd32db34af21df269bfe0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001411v1_decoy LN:1658 M5:9e0ca112ba9edd83dd02ee0a1b977682 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001412v1_decoy LN:1656 M5:30ba767a8335a19ffbb875f109afcac3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001413v1_decoy LN:1656 M5:e77633b957a375847ad25f9b01d08580 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001414v1_decoy LN:1652 M5:33a7cad76ee390036b7d61b167e2b351 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001415v1_decoy LN:1647 M5:904ad5deeeb540a10728c9fabf9e5909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001416v1_decoy LN:1645 M5:378193508f34a25cf912974a4c531bb2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001417v1_decoy LN:1641 M5:fe667f1d920a30b730d27903d4de3610 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001418v1_decoy LN:1638 M5:dd1f1f8b342e987caf5e43ffa4b193ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001419v1_decoy LN:1633 M5:775a347b6935f9e170d809222897833a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001420v1_decoy LN:1626 M5:44b1b569182bce231346586fe77f0651 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001421v1_decoy LN:1614 M5:04a70773f36888dde7766a58c3a92de1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001422v1_decoy LN:1612 M5:0f0f7a8906ae3367b908acc806579e87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001423v1_decoy LN:1605 M5:345b541ac9d588f32be39d15d00f6305 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001424v1_decoy LN:1603 M5:dd25e42a5806fade892f5be6c5517133 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001425v1_decoy LN:1599 M5:42c61caf5957d89e892870d7abb0086a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001426v1_decoy LN:1589 M5:ff1c151f692dba0e79005392390f2639 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001427v1_decoy LN:1588 M5:d409b0b1699f38489ac9b78c9e547b12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001428v1_decoy LN:1585 M5:549a7c1ad8b79d31a311204a8ce078c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001429v1_decoy LN:1584 M5:21ac82f5d3944ac17a667861fe4eb50c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001430v1_decoy LN:1584 M5:d717e9b20496c0e3cf6f096572904e94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001431v1_decoy LN:1580 M5:4cef86e6f0c85a15667ecccf0ec2e509 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001432v1_decoy LN:1572 M5:83a76ba3b28ab176a0fe0c3932129c1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001433v1_decoy LN:1570 M5:eefbc920c0c274a05ccd03672089bd6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001434v1_decoy LN:1569 M5:e84f6544b2757c3d68e8333237c05b9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001435v1_decoy LN:1568 M5:085a737d9ac2ce5ad615c127373713e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001436v1_decoy LN:1567 M5:d0cc61096796d51c565e73784c3df91e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001437v1_decoy LN:1565 M5:963645d93472e0f55f70cf30e5541dcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001438v1_decoy LN:1559 M5:6cd647a043602392b10b564ef25b9bfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001439v1_decoy LN:1559 M5:41e3d96f1e4d9a77d4314fb0c550ddc8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001440v1_decoy LN:1556 M5:f95112abd208efc5ebe4d5529e2537a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001441v1_decoy LN:1554 M5:ff55b1b730eb936e0ffca09b8fff9a89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001442v1_decoy LN:1549 M5:df38873f39fd89b3782d53eb4bd35345 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001443v1_decoy LN:1542 M5:66b6405dd4c7537d3119eeb1dfa81795 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001444v1_decoy LN:1541 M5:ce00bd7a73eab91b6d81729240662ea1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001445v1_decoy LN:1538 M5:96e6001e127eea7213d8378afb6f24d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001446v1_decoy LN:1537 M5:4a49340b952f5a6e1fbcfbe271cbee49 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001447v1_decoy LN:1535 M5:9d30511ff7644e5e501c629d82f97441 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001448v1_decoy LN:1530 M5:ed3d23f4c537a88a36a4a6964bf2d332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001449v1_decoy LN:1528 M5:e2f85fa47e8361a098aacb0ddfe058e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001450v1_decoy LN:1522 M5:525443cf312658767f3ffb263b1ab40a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001451v1_decoy LN:1514 M5:d378e3b3268d04ee2ed255d9b671404b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001452v1_decoy LN:1509 M5:434a0e69d1dfb2f439fd8c4c6efee812 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001453v1_decoy LN:1507 M5:1c60f6588a6a6fdf49ba74bd4d8844ae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001454v1_decoy LN:1500 M5:4a8517743aa87c3edd4556e876facf8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001455v1_decoy LN:1499 M5:3787c00e3019dc0bd4b019ac8bd677e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001456v1_decoy LN:1499 M5:93e8bbddc43d5e902eaac3b1569c191d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001457v1_decoy LN:1497 M5:cedf6613fedd7bcfb6cf4822d6133393 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001458v1_decoy LN:1496 M5:c6421744963f5f5ef7d06349345f8c11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001459v1_decoy LN:1488 M5:c3d6f0be5c1768c3f4ab357b40330c07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001460v1_decoy LN:1486 M5:cfa272f94abe2b6ea6b8fff9bc2743a0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001461v1_decoy LN:1485 M5:73b05431178ff099c7143b2c3310a8d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001462v1_decoy LN:1481 M5:815cd718fd3524c82596f553bc50c030 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001463v1_decoy LN:1479 M5:3be54176b83f28ddb8402da62d8368c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001464v1_decoy LN:1472 M5:a3d5a1d61c0377010cab585d8f86782b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001465v1_decoy LN:1472 M5:54ed54ed3b16b9482b8bb7a42358e3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001466v1_decoy LN:1470 M5:957a8cadb7ce3ea0f910acb49b0d28f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001467v1_decoy LN:1466 M5:5f1e18ba047f8e50f57be2e0ec9d7ee0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001468v1_decoy LN:1465 M5:1371b580bc13e98f593106d0c6cc7055 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001469v1_decoy LN:1461 M5:a1e27c8891fb421149591b6254008534 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001470v1_decoy LN:1458 M5:0a299df79227b0b8f9d01b64c1091040 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001471v1_decoy LN:1457 M5:fb81cfbfe3dcf83480d1566dbfb35cdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001472v1_decoy LN:1448 M5:5ccf4c226bbe31dec446e5f2cfb754aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001473v1_decoy LN:1447 M5:d4e733a5240b77f6521178683ef92f11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001474v1_decoy LN:1444 M5:266aac36179cb1faca5c4a0102fc8ace AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001475v1_decoy LN:1443 M5:6153fa9f83b2dca77912302a435e6783 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001476v1_decoy LN:1443 M5:eadd62062090a328419de772556bec04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001477v1_decoy LN:1438 M5:808b663863cc7b8062a075d60a932ee0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001478v1_decoy LN:1432 M5:3d320a29f829d8b30da651831563b8fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001479v1_decoy LN:1430 M5:d406932c6d2e5cda5d40bd5282612ec8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001480v1_decoy LN:1430 M5:1b514b0604012b9c3bf96dc729d5b570 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001481v1_decoy LN:1429 M5:bba1c32000bf8515723b23e91e3d73d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001482v1_decoy LN:1429 M5:469a525eaccd114705d3876e6497d24c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001483v1_decoy LN:1429 M5:1cab4c8d35aa87cfadcc67327c0cde05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001484v1_decoy LN:1426 M5:7f0b3e31f88382eb1a9d667b4fa5ae8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001485v1_decoy LN:1426 M5:600029364a5faff2a6121c791c26f3b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001486v1_decoy LN:1420 M5:bd2635b8f37ae8d36555126a2efda82f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001487v1_decoy LN:1416 M5:1feda0b1dfda8eb29e804bb83d191350 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001488v1_decoy LN:1416 M5:381713228fbc436ef15eb3fc5ce95526 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001489v1_decoy LN:1415 M5:c7b5a3592ce2955180a8bf93340ce7a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001490v1_decoy LN:1415 M5:8a9071712ed09640282279375c1aab9e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001491v1_decoy LN:1414 M5:ad3849a6c284e0371da519c83c3efd56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001492v1_decoy LN:1413 M5:1897ebbd3ccc3ed5dfd33e64df6cee2e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001493v1_decoy LN:1410 M5:bbae6ade32694ea4d23d50d382e589ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001494v1_decoy LN:1405 M5:60eac2719276e2c8aed1dd8879086460 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001495v1_decoy LN:1402 M5:560d0b9e5abc45feb134351a94cda358 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001496v1_decoy LN:1398 M5:c87eb09186b0ed776438697cefe49c34 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001497v1_decoy LN:1397 M5:17bdfaf46a6963ba97861fcb9ff9d4ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001498v1_decoy LN:1395 M5:14942812a5a15869999430aa17472a47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001499v1_decoy LN:1392 M5:14d8c0e42dbe62d45491f288a844c263 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001500v1_decoy LN:1388 M5:3535c9f286c4bc12e2fdab3ebd0e4cbd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001501v1_decoy LN:1386 M5:3ed31b85ef3e34d8e053031462c9cc64 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001502v1_decoy LN:1382 M5:370ef584d4cfe29bba430512c01c2d92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001503v1_decoy LN:1381 M5:0d6317f9e8c37b0d588aaf5c404621d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001504v1_decoy LN:1379 M5:15b371e04aee1e2cd7a2c3ad778615cd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001505v1_decoy LN:1376 M5:9e5d443eae0beb889e93d9fec1df500f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001506v1_decoy LN:1374 M5:19e75c42356ec21ffffd6ead1147246d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001507v1_decoy LN:1374 M5:d047841fe73e626cbad1d1a075cc1179 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001508v1_decoy LN:1373 M5:9af5c2bfca12c6e109d87d15a001f382 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001509v1_decoy LN:1373 M5:26c1cdc503f21321bdbbf7184681fd57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001510v1_decoy LN:1372 M5:c08f8502b7b9423df1c4988d25d4e1e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001511v1_decoy LN:1370 M5:51b5c0febc1d93a3ae056b562f29febe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001512v1_decoy LN:1367 M5:84cb97f5fa89889026682a6ddb4e17ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001513v1_decoy LN:1365 M5:9b35f302f4d7104621ee94c9466fcf05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001514v1_decoy LN:1364 M5:d26988a458e184ce67dfdf1494cce818 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001515v1_decoy LN:1361 M5:2be502a9c104f048b5faab19bf6b0c94 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001516v1_decoy LN:1361 M5:a66a14b66c130258ed0f9a2e60b977a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001517v1_decoy LN:1355 M5:f8520c48ea6b728718603ce85ba18832 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001518v1_decoy LN:1355 M5:d16784b4fc04cab4570de94e9753760e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001519v1_decoy LN:1354 M5:226153c1ffcb6ca5cb3a64d124c3b9fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001520v1_decoy LN:1353 M5:36898b58e8fec2ff86a3db37bffcfe2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001521v1_decoy LN:1349 M5:919f3dc576e969ebb845489e155befd1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001522v1_decoy LN:1345 M5:e1f3dc21c137a83319e95d8cd641953b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001523v1_decoy LN:1344 M5:c7cc4c4587e7e5f69d3afcaca3f62ef6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001524v1_decoy LN:1343 M5:12b492bc7285ab647a13d8ac1efecc61 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001525v1_decoy LN:1338 M5:8d831cbc5a7d72f9a5c05360b502005d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001526v1_decoy LN:1338 M5:89ce2ba0c1414088ff5f502a0908059f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001527v1_decoy LN:1338 M5:ed5c2d0150ddb784f059ca25eb3b32c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001528v1_decoy LN:1336 M5:1dbe3107f4bae73b01853e98084f8f47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001529v1_decoy LN:1333 M5:1d1e9eb7e4182425f8718dc456a8e9bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001530v1_decoy LN:1333 M5:d77e50f1375e757aefd872040ee290b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001531v1_decoy LN:1332 M5:93546f6ce6b44646b5a2d20190054dcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001532v1_decoy LN:1324 M5:bcb215dd97bfb4682fe3d17f99605c5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001533v1_decoy LN:1323 M5:0c68586edd47761d55b6a127af21b958 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001534v1_decoy LN:1323 M5:8290481e03f0efd3da641df90d6a09f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001535v1_decoy LN:1320 M5:06b5a586c070a38af486a0ae25dac08e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001536v1_decoy LN:1320 M5:aa7f4ccf5b8955783f201e89c6b8b61b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001537v1_decoy LN:1317 M5:5f5c4304240e41a75cdf79d590705a7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001538v1_decoy LN:1316 M5:2b2e47e474a04b2c5d7538dee74a4520 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001539v1_decoy LN:1304 M5:70b1f3865cf28cf8c3cb6ca89e299e75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001540v1_decoy LN:1304 M5:801a2a35c0eb1ddde4f339fae91bdd02 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001541v1_decoy LN:1303 M5:0013745a3b7f3937b3f0d58b8fb8b96d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001542v1_decoy LN:1302 M5:2e708be5a88bc87556f10487d43af5f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001543v1_decoy LN:1301 M5:9b421120b8e61665a80c2202f9742b11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001544v1_decoy LN:1300 M5:7b6b985d4c9b335dde3369fc8ae75a4f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001545v1_decoy LN:1298 M5:c2c9f5a874990de1d53e53efca362cd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001546v1_decoy LN:1297 M5:8849c9f185b5ae8ed6d60d3b99c6591c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001547v1_decoy LN:1295 M5:134596128a40e4a4c8f40d310152fe2f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001548v1_decoy LN:1284 M5:c943fc593d7c12a3edad870f24db083c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001549v1_decoy LN:1283 M5:de6680db4756a0d685d2f2405be073be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001550v1_decoy LN:1283 M5:a86669f9a78babae5db999b036d712b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001551v1_decoy LN:1279 M5:48d3b7e152913253a1c7749be4542da0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001552v1_decoy LN:1278 M5:6f732db21b1679f66b34145d0d179a57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001553v1_decoy LN:1271 M5:18a0c55016d63414e1a7c9a868d2167b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001554v1_decoy LN:1271 M5:fbb66e8da3ee67360e823061c517c47b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001555v1_decoy LN:1268 M5:668bc50dfcee6830bfd6b8b193cf9aab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001556v1_decoy LN:1264 M5:512e1b52aa8bc91a79e98a21f48fd69a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001557v1_decoy LN:1263 M5:a280a5ddd14400e7a21e262dacba0878 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001558v1_decoy LN:1262 M5:074796c17da27a3ae23b3ab43837eff9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001559v1_decoy LN:1261 M5:f75ff3300dbd75160e935cd46e4511c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001560v1_decoy LN:1260 M5:67884b5403ffc61f67795ef0fcc3b616 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001561v1_decoy LN:1259 M5:778ef716a17f44127ce4648ca3d01437 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001562v1_decoy LN:1259 M5:79561487702e7f87d4c1babb97cbf910 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001563v1_decoy LN:1258 M5:05c2d3d1fe5c9569c6f982e7978b0d6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001564v1_decoy LN:1256 M5:443af4844c7fe05604fbf14d61807faf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001565v1_decoy LN:1253 M5:3ab1b0cbc9dfe5e1b97cc5bbee6ba5d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001566v1_decoy LN:1248 M5:6ca9712ce96adea0a2a178a885e6c403 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001567v1_decoy LN:1248 M5:a9815826b47ba4c29bb0b6f427c91f9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001568v1_decoy LN:1246 M5:847154b1d516e188b5d8b9b6932658a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001569v1_decoy LN:1246 M5:cc8ad8f95e7d72b075ce88fc9fd93560 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001570v1_decoy LN:1244 M5:3df737516c175d1baf5cb57874761a06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001571v1_decoy LN:1238 M5:350c62d6852c839c79bb94399823a7c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001572v1_decoy LN:1238 M5:cf4520e99994e5810535b8e92f1f4764 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001573v1_decoy LN:1236 M5:27e61fe700513169fa02b0a6b9224fb6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001574v1_decoy LN:1234 M5:6af09c7c1feeb50a156ab599d39314f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001575v1_decoy LN:1234 M5:1b1c2b7e28c781322697a77df6b717c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001576v1_decoy LN:1231 M5:24168a14a8a7b0626a75964a5ffa4c06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001577v1_decoy LN:1231 M5:7b5c30f4c44dc17f05a6022490a1b06b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001578v1_decoy LN:1230 M5:7dd3d8aa3ad6ae0467cbb5729a65b7fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001579v1_decoy LN:1230 M5:9838f95ca9d84335f580003e43e0e909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001580v1_decoy LN:1228 M5:40d2f9b81666f0aeaadf3b60d6f00326 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001581v1_decoy LN:1227 M5:b603baea2a6d239b5a0e0482be39ebae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001582v1_decoy LN:1222 M5:592ec40093cfd07fe7ae22531e7ff948 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001583v1_decoy LN:1222 M5:45d2796dafa85ef3ebb8d378ab5c4fe2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001584v1_decoy LN:1221 M5:7171fedcff845d9bf0eed62d8de65582 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001585v1_decoy LN:1221 M5:1919b7c47b361c4925ba7f89f672c639 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001586v1_decoy LN:1220 M5:9b6bee47fab2e16188e112fd219cb63b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001587v1_decoy LN:1218 M5:403153f244f25427f95b761c7e7643f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001588v1_decoy LN:1218 M5:4bdec42af039130bb647f35a1587442e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001589v1_decoy LN:1216 M5:5eb119c85dbdbac20fd9b54ca19e3bb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001590v1_decoy LN:1216 M5:30be84f72824c6a73cb46db0880fca34 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001591v1_decoy LN:1212 M5:a3990c8502d89fd44d2744a7c3b5ec27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001592v1_decoy LN:1210 M5:812ecd7a45c18a1ca8e07d380fa9c7fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001593v1_decoy LN:1209 M5:f3658490a61b9678c62147607e15dd39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001594v1_decoy LN:1208 M5:6ad7956bf60e17b114d96c186021ba22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001595v1_decoy LN:1208 M5:07b45f43574a98e35df01f1b02658afa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001596v1_decoy LN:1206 M5:7ad1a707f9ee83f188f836b84f0ee5de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001597v1_decoy LN:1205 M5:c5fe9e310df6cae87f2d597153392ce3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001598v1_decoy LN:1205 M5:3253a26afa899ec2cde4d0fe80a95557 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001599v1_decoy LN:1202 M5:7eba2ca9a5450bf7c6febae054f41555 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001600v1_decoy LN:1200 M5:00f180d0f4f2be5d3a79232ebf1f4150 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001601v1_decoy LN:1199 M5:06c81b1f3014d187114393c990dbb3d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001602v1_decoy LN:1198 M5:04ad661ad55cf80b26d65b537fa28426 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001603v1_decoy LN:1198 M5:10cec3a4b27c1a9e83dba32c764db1a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001604v1_decoy LN:1198 M5:ca938a555284768f7de4aa5bc45030af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001605v1_decoy LN:1195 M5:6352f3ee72fc500fb234cefdc58d230c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001606v1_decoy LN:1194 M5:7761a04b81c344864c4196c9fa348529 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001607v1_decoy LN:1191 M5:6f495eb0c24a06b146428c8e15145289 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001608v1_decoy LN:1189 M5:7cdef7e7fe5039c26f91054002844a08 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001609v1_decoy LN:1188 M5:8fb25530ab0d6cc405ed3820a00a19b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001610v1_decoy LN:1180 M5:baa36ab5e7d359dcf38de58e0578aa06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001611v1_decoy LN:1180 M5:fbf128a1dc1f9852e12d0f7cc819e220 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001612v1_decoy LN:1179 M5:cb72123adfc2996fb4f8c8023e656377 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001613v1_decoy LN:1172 M5:9a828a68ee9904074c07ecb9b4a66d85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001614v1_decoy LN:1168 M5:47f21c445bb5e0f2901a60313a4b54fe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001615v1_decoy LN:1166 M5:6640bdaa008c2b633f8732710aea42e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001616v1_decoy LN:1157 M5:548cacc169d84926fc794c75c8fe890a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001617v1_decoy LN:1156 M5:ed240ec48dfc49536a05c15b0cf84b32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001618v1_decoy LN:1156 M5:4cf17295af5ac519eeb5b60d65d8d630 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001619v1_decoy LN:1155 M5:7535ed3093386510b39164d7d8c0e75d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001620v1_decoy LN:1154 M5:942a2c1ebc2dcdc44aca71c7998704e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001621v1_decoy LN:1154 M5:172266936a16cb96c0fa51a30de2f617 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001622v1_decoy LN:1149 M5:904c6976a4151582f6e20888f8882b1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001623v1_decoy LN:1143 M5:e146ce9a62548893f8042eb31c9eb73a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001624v1_decoy LN:1143 M5:226937ae596ef9af068232903d42c1f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001625v1_decoy LN:1140 M5:9f8924f0407c98c271d938a89ce0651a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001626v1_decoy LN:1137 M5:e6dc97de94f6ebca61e2afaa11081a24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001627v1_decoy LN:1135 M5:ddc4671e6fc9af479ecc987b65228b89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001628v1_decoy LN:1135 M5:156395c17267dbc279afab948e04d7eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001629v1_decoy LN:1135 M5:b51c39a7e5a4d0f3a185dfe0405d28be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001630v1_decoy LN:1127 M5:eee6cec0d44e913c8909412bdc06fa14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001631v1_decoy LN:1127 M5:e614e251417f03894a86d226643c44b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001632v1_decoy LN:1126 M5:e3d6bcc05df478652842790b2163c80e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001633v1_decoy LN:1123 M5:62a0c3d0311f689e83c69aca70ff1d7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001634v1_decoy LN:1123 M5:4c25a0253e0d7c0aa032a2af4dc159a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001635v1_decoy LN:1123 M5:77f17c8bda201de22cb683529469d159 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001636v1_decoy LN:1122 M5:4716e9809cd6983cc872a801adcfcc46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001637v1_decoy LN:1122 M5:e854813fe411b829feb5122630115359 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001638v1_decoy LN:1121 M5:9ee360ada2996f37f05bc35f51af2274 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001639v1_decoy LN:1121 M5:e9eacf65a91b75a7484d73c0960d1f14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001640v1_decoy LN:1119 M5:115a5a8bf67d2676b18db1fa2cf1fb41 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001641v1_decoy LN:1119 M5:8c12171780de61fb413546e612810679 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001642v1_decoy LN:1119 M5:d36511233c4008330a6ea48f39a48c8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001643v1_decoy LN:1118 M5:49d64211fa0e9269ff0335c106fadf0a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001644v1_decoy LN:1115 M5:d3b2472895f28b7fa60956f7b18c525d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001645v1_decoy LN:1106 M5:14d31945977d0566bc15d63216affa59 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001646v1_decoy LN:1106 M5:954d5725f47430e77ac7a65db6252cb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001647v1_decoy LN:1104 M5:afc20c7775696bfe6b465aa9d8d5a2cb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001648v1_decoy LN:1102 M5:1a699dde289aa62b55f6ac11bb7947e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001649v1_decoy LN:1101 M5:97d8bdd4c01947f81c47b798baa7b71e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001650v1_decoy LN:1098 M5:81be16ab671a23dae662d52a90f53d45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001651v1_decoy LN:1098 M5:849d2fca45af7dd15c549778da256bd5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001652v1_decoy LN:1096 M5:85135079f59c18f32cab3330238996f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001653v1_decoy LN:1096 M5:eeee606c5ce1877c2c17f3c35cee97c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001654v1_decoy LN:1095 M5:a67b439018f9500bd22116207fa78bb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001655v1_decoy LN:1093 M5:45193d6dc28c575afe0a816a04981a13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001656v1_decoy LN:1090 M5:9e9a3deb3fbb62096e9267cf17b4538e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001657v1_decoy LN:1089 M5:2fcd006deec28bc7b3e2ed1c81f6bd69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001658v1_decoy LN:1087 M5:b5ff50152c9932bd5f5c8f6d8f085250 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001659v1_decoy LN:1087 M5:8dc8692a004984e174cae1a798c308ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001660v1_decoy LN:1085 M5:a26ef2777b049efc475e9f983166c858 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001661v1_decoy LN:1085 M5:1d1b538881461819bddec7da548477d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001662v1_decoy LN:1085 M5:a02c26203237d3ab0fdeec3b2226e415 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001663v1_decoy LN:1083 M5:97595ecd8251d05c23a9a1f24c4fc331 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001664v1_decoy LN:1080 M5:bb065f6218181f056b36deb6d5ea3fcf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001665v1_decoy LN:1080 M5:242177401fdbd05a55373745dd7678ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001666v1_decoy LN:1079 M5:aee38ae173783e327db2c83e4636269b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001667v1_decoy LN:1079 M5:eb281bc766d87e3e887aff0c1f473bb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001668v1_decoy LN:1079 M5:b15b982e045772eb4fae4cf61eff32f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001669v1_decoy LN:1075 M5:a0fe4aa8f27e7528a49b7fc241413bcd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001670v1_decoy LN:1074 M5:5a9ee12d6200281af569684e9eb6c44d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001671v1_decoy LN:1073 M5:58e3e1c01c24005c1bf6ecc4081328af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001672v1_decoy LN:1070 M5:6b4eaaed019b55c1445f856fa75748c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001673v1_decoy LN:1068 M5:962507e31477075a1ec295c7f3e4f370 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001674v1_decoy LN:1067 M5:246916ebbed387cdb53894261342b334 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001675v1_decoy LN:1066 M5:45ef97be51801b68eddaf9d903c6569e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001676v1_decoy LN:1066 M5:a1e2a77d7c51fc62c3f1261d96788416 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001677v1_decoy LN:1066 M5:a72df1625ec9a3676769041db2b5db74 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001678v1_decoy LN:1063 M5:63c3ca073be59c038fca2ce8cf57b58f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001679v1_decoy LN:1063 M5:3b4176334e519bf0fc0ea90b5c450256 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001680v1_decoy LN:1063 M5:e0c561be692e2103d216fec5f81a004f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001681v1_decoy LN:1062 M5:a87bd7c0b225c0db2cc82df0e92fd34d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001682v1_decoy LN:1058 M5:bd1fa296d60d2c1447479727889fd06d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001683v1_decoy LN:1056 M5:ec709ad9663274dc4b8d9c95637e6231 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001684v1_decoy LN:1052 M5:4c92b0e2cf0179f74e829358fdd4fd7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001685v1_decoy LN:1051 M5:d301a97b1b34b2cbcd690824430ef873 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001686v1_decoy LN:1051 M5:bbc47709fbd21b2776773a149cc0338a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001687v1_decoy LN:1050 M5:a01a1af5e1a2b7e924af29af696e561c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001688v1_decoy LN:1048 M5:71b188e0ec08d62bcf1e70c1ad5dece1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001689v1_decoy LN:1046 M5:6a0e08e5268e2e656a415ba75e6fd9bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001690v1_decoy LN:1046 M5:59e6b5101b057b8b61117d4e775da1a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001691v1_decoy LN:1045 M5:f09e7737756f026981c00c9f4e4a0fcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001692v1_decoy LN:1043 M5:90cc154008842d098dcd3bfcb288fad9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001693v1_decoy LN:1038 M5:760fd011482ffc7b2972fff26ede08ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001694v1_decoy LN:1036 M5:403a116827eda12cce96c83a442432ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001695v1_decoy LN:1035 M5:aa903a22959e0e71bf9b65e184c98664 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001696v1_decoy LN:1035 M5:c7b013db629c9e53bcc9e5ef6b45ea86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001697v1_decoy LN:1035 M5:b124dac1b39002796762805b01e70939 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001698v1_decoy LN:1033 M5:973b579d06cff1e48883e0c933a40ace AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001699v1_decoy LN:1032 M5:d91e5694037129aa77037d5c631b2c89 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001700v1_decoy LN:1031 M5:26f0a1a25d70795beec266b79ee9872a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001701v1_decoy LN:1026 M5:d895a2e531136b85f91cae9c41bac3eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001702v1_decoy LN:1026 M5:eeaed2987f143706ea90f593db2ee43c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001703v1_decoy LN:1026 M5:201ae22e581315eb83bf1b2a90a376ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001704v1_decoy LN:1023 M5:676723aca3cbe94f5e6fa6e3e677382e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001705v1_decoy LN:1022 M5:079f24ae7a37258e2dcd3e45c2a82dc0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001706v1_decoy LN:1020 M5:0c6c76de07c4a66f7b7c1625990fe97c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001707v1_decoy LN:1020 M5:23b7cef7e53c021320be37e395337a6b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001708v1_decoy LN:1020 M5:442bbaf4d63d7243f581f2a4f3c8713e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001709v1_decoy LN:1019 M5:ead84759fc3d0742886397aa847a8c43 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001710v1_decoy LN:1018 M5:30842e0e30b9626a2db87c8abee99c69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001711v1_decoy LN:1018 M5:85cd9b0b4ac27a135417acad1b49f347 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001712v1_decoy LN:1017 M5:cf02f8f140f6cabc6edaa85f110e6a45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001713v1_decoy LN:1015 M5:a1b077bd6e18faf0ce248051997e87b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001714v1_decoy LN:1015 M5:c108897419126d2b77335084625f756f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001715v1_decoy LN:1015 M5:887e1695f416731637dc46a35b2a9548 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001716v1_decoy LN:1014 M5:f4c888663c13ab55190b9228c5b46bb8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001717v1_decoy LN:1014 M5:be3c4d0d37c5c1c8c88889dede5ba4b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001718v1_decoy LN:1013 M5:2d3c3dfc692750b9b4c716debe8451a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001719v1_decoy LN:1013 M5:c1212f7ba1d00f6f6553fc075e858e42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001720v1_decoy LN:1013 M5:6e854869ecc63cf6e45e7f0fc6eeb9c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001721v1_decoy LN:1012 M5:05b1945756fa1adf0d4547bcd12f01ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001722v1_decoy LN:1011 M5:0ef4eb4aa59e9725d43ed27a2f67d8d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001723v1_decoy LN:1011 M5:b4080ef5ca76b971d7eea5438484ce22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001724v1_decoy LN:1009 M5:34953db0af28061b89bb32262121af7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001725v1_decoy LN:1008 M5:b05c20cc6394423a0e1aef1bac72d0b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001726v1_decoy LN:1008 M5:f2301601e3a88c6be9c38500a9d29685 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001727v1_decoy LN:1007 M5:2ff7ac77e3568eeb2e7772e932dfa819 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001728v1_decoy LN:1007 M5:04fd5dc748b4e7815316b0cccea3cba0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001729v1_decoy LN:1007 M5:957456ba0e3f879860817f3ae6bfca78 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001730v1_decoy LN:1006 M5:8381668c661d255ffbd7498d663acff2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001731v1_decoy LN:1005 M5:92a03e55b43fc40c9c010df225cc650c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001732v1_decoy LN:1003 M5:bc99a37cda9c755b77763c0873a3435d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001733v1_decoy LN:1001 M5:6a123c9c76f9d1c0a35ba3666f861ddd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001734v1_decoy LN:1000 M5:31048d43d8cae8a2c51fe5fcfbfa2462 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001735v1_decoy LN:19311 M5:110c68ef04650368b85e76c55d599fcb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001736v1_decoy LN:11713 M5:392799b68e6e2c6e288f07bc44a3a6b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001737v1_decoy LN:11263 M5:091c74a89bf6767adbc92c7cfd9ab6bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001738v1_decoy LN:9779 M5:fdbeb36b87e966517a30478e8fd55631 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001739v1_decoy LN:9568 M5:3562fa1ff9f4f23377f715895ecd504e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001740v1_decoy LN:9344 M5:7c7fa5c413301e5c71020ee588c0c1cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001741v1_decoy LN:9188 M5:ec88b5a808b4c20414719ba271b7b641 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001742v1_decoy LN:9100 M5:bad4d9e7865b7ef45b00609846739bda AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001743v1_decoy LN:8771 M5:56e67b8b7db6db977411d3485186a095 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001744v1_decoy LN:8690 M5:f01b9132254ca4074ba5ddc5b74c3d1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001745v1_decoy LN:8566 M5:d96c00c236c6c63764d62b50443c448a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001746v1_decoy LN:8058 M5:14979af859f72ff6efa1b0230cb0bbd9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001747v1_decoy LN:7759 M5:57af8f9f3fb38d3eb268e3d82b21e918 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001748v1_decoy LN:7585 M5:332f1fac3f4964c85f80b068cd91e49f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001749v1_decoy LN:7471 M5:a2a4f2f140a6703cfaa11c1a6ca07380 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001750v1_decoy LN:7461 M5:ec2b8f7282528afa2de49ece1a8d3daa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001751v1_decoy LN:7342 M5:328d2146da22838f30adcf361c5a9165 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001752v1_decoy LN:7223 M5:b0e8a99c193409a71f86d373159d576c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001753v1_decoy LN:7064 M5:3c4648b387bc44aaabddf795d6678ca1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001754v1_decoy LN:6916 M5:c57ae49f10014609feff4fe84c91b31c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001755v1_decoy LN:6897 M5:0bd737852eeaf5c723587cbbd74005d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001756v1_decoy LN:6880 M5:e3d30ef79c4983f0fb99ecf9ac1ca7fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001757v1_decoy LN:6857 M5:cfd001bcac96f459ceac7a135a59cb04 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001758v1_decoy LN:6840 M5:6757a710758275b58b95545211e06526 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001759v1_decoy LN:6728 M5:4d8b4b254f60864202e63aa9dba42086 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001760v1_decoy LN:6688 M5:9e056067d1281622858dfe9830f147f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001761v1_decoy LN:6553 M5:9182e4b1d32ec558a3bd3c94a5254ecc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001762v1_decoy LN:6396 M5:23b91febfc6ba054d109596479f66f8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001763v1_decoy LN:6345 M5:f038e6215610b387550c3b50dddd49a5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001764v1_decoy LN:6295 M5:d0f7f5b63499d6efd4d901a757b1cd7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001765v1_decoy LN:6266 M5:95b3fdc4315475b9c0408bc1f1f49202 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001766v1_decoy LN:6173 M5:4db332a6222e767873f0d9c5051b83f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001767v1_decoy LN:6171 M5:399db4ef3a58b54f82a07da4f0d264af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001768v1_decoy LN:6120 M5:399aa8c3cb106b5c685092b0de9313fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001769v1_decoy LN:6105 M5:4990624c065870871ce2bfff6bbd26e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001770v1_decoy LN:6099 M5:2e817dafcd97d49c6dfa1eef14a5e32e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001771v1_decoy LN:5893 M5:c8155a905ca8708a397ff91ea578e41f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001772v1_decoy LN:5829 M5:85146edd3b2fab18762262a7455e00c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001773v1_decoy LN:5793 M5:b72258377a1fd9ccb2a374de66066126 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001774v1_decoy LN:5776 M5:51cdb4aa5438f8b50fb21eb9c0959839 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001775v1_decoy LN:5759 M5:f30e892168c0f735365a13e51c8d0af3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001776v1_decoy LN:5716 M5:c03eea2b4a0bc45e1e7df084b89340ef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001777v1_decoy LN:5708 M5:5aba75f216a07e87387db64ea61a7c17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001778v1_decoy LN:5590 M5:09a93eafef7f433e1d2b0d7f3e4c2857 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001779v1_decoy LN:5566 M5:173109c0f5077facb133a124c11fe44f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001780v1_decoy LN:5558 M5:c7f1155230324ea1ff2ec21957290278 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001781v1_decoy LN:5418 M5:8de9a43d5de5e0bd3fbdc3a8ba79bb3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001782v1_decoy LN:5375 M5:2d96ecf69a27a8876ecd20073def54b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001783v1_decoy LN:5300 M5:07550b4953f67bec7ce4f4a04c493553 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001784v1_decoy LN:5255 M5:5c4536fdcf9b0c8f69b6c13e9c535eb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001785v1_decoy LN:5157 M5:af427140b151e2e892fc9a95aec694f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001786v1_decoy LN:5130 M5:254488c203afc62f6965ed57e0644916 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001787v1_decoy LN:4978 M5:a0d7d65d0e93baf75fd6d6d38c774828 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001788v1_decoy LN:4957 M5:6acbb899137257944298b46317165e69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001789v1_decoy LN:4947 M5:cec51f8ad5909dd8e0d3b01e25acbfd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001790v1_decoy LN:4897 M5:a8c98d6ff4dfa416c2dc12f726057ac0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001791v1_decoy LN:4867 M5:8ad543666fcb2e40d2ce2c0bcb95a150 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001792v1_decoy LN:4845 M5:a4cb8d08b6f399bd75e5d3edc40320f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001793v1_decoy LN:4678 M5:02de644cfd20b00dbf3730793f839102 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001794v1_decoy LN:4641 M5:5326e7bd1418a6bd8475fc0cf9383333 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001795v1_decoy LN:4592 M5:bd9741fa5a5eaf10cb939a6822ac9473 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001796v1_decoy LN:4543 M5:465f55fb7df07a219d9cb52c8d369e8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001797v1_decoy LN:4532 M5:4956e33b08cf6f8939a8053da18b8b4e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001798v1_decoy LN:4503 M5:1fe8c217b537b8ff77877f684728af90 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001799v1_decoy LN:4495 M5:317fc278049d65e36b6b4ac9ea865e2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001800v1_decoy LN:4444 M5:1815e62f1fb46ebe5a8f20ca027f5e3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001801v1_decoy LN:4414 M5:7911ec2b81df531fe586719cf18f339f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001802v1_decoy LN:4409 M5:65257f0e3c59604d1b9d1534d2e05cc2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001803v1_decoy LN:4302 M5:dd3519a759d8fb2773d3ce4e05d2e0c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001804v1_decoy LN:4300 M5:1baabb53ab93bc883f297c4fd3313726 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001805v1_decoy LN:4277 M5:a93c3da31dbc626ca07c7a5bb2ae1fce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001806v1_decoy LN:4173 M5:ad4dbde798fb8814acca378a14f36ef4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001807v1_decoy LN:4169 M5:5e7896feb74a66cdf343257968e26128 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001808v1_decoy LN:4136 M5:bb27f7b565373b54a90878f371ecb315 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001809v1_decoy LN:4101 M5:cc0696dc2c3a1cf86aa2bcf3be4fea1c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001810v1_decoy LN:4089 M5:84d4249370d2ab227a405c59d78a49e5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001811v1_decoy LN:4015 M5:13a4dd160518b12fd8900d058ae24627 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001812v1_decoy LN:4000 M5:0d5607a998bac1719a3842db4b2ac324 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001813v1_decoy LN:3973 M5:c54b9de7f485ab7729a4b35a122e5676 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001814v1_decoy LN:3732 M5:0b810e5685d52453ea3c4c3c15f4ab46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001815v1_decoy LN:3709 M5:41dc92336fe91882541594fefae1b397 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001816v1_decoy LN:3686 M5:23342688bf37b8caa294e20464135302 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001817v1_decoy LN:3676 M5:9d214925d90fe222b09cbc3b862d4be5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001818v1_decoy LN:3673 M5:c4bbe25da86730cc4e55c74636296210 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001819v1_decoy LN:3672 M5:3365257914847acb537ffb644b32f6fc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001820v1_decoy LN:3633 M5:9af0a5d44c112d976299f598083354bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001821v1_decoy LN:3633 M5:276e5a73fe80f25706975973fca81151 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001822v1_decoy LN:3613 M5:96044e09be5ba69252a13d71123ac546 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001823v1_decoy LN:3605 M5:2402d86c44cceab83a438a4af0e24939 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001824v1_decoy LN:3592 M5:8e4cc1d20a97fbddc8d430158ab2f8a9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001825v1_decoy LN:3586 M5:b0cc5444bffc7aec1c01a855b52ec3a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001826v1_decoy LN:3584 M5:9b94b86d924e51adbe1fa241e9eb4980 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001827v1_decoy LN:3577 M5:2ed768998d7e36315f9b21917eff299e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001828v1_decoy LN:3537 M5:b9fb044a6692c6bc7dfdca8fcb811f79 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001829v1_decoy LN:3510 M5:27176699c6daad8aa9991c140bb4dceb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001830v1_decoy LN:3509 M5:dab9d17bab4efaf2e54273afe4017807 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001831v1_decoy LN:3488 M5:cc824ab2de05f959425033f7d1b34c54 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001832v1_decoy LN:3473 M5:05d718c7b92a89c2a4b961ee6c0b008c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001833v1_decoy LN:3445 M5:c374915181a1f43da7688151fad2c609 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001834v1_decoy LN:3427 M5:fea3edb105a855523da01bbac633b515 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001835v1_decoy LN:3395 M5:9323a036098595da4ac07b2de10ef332 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001836v1_decoy LN:3367 M5:19070dba7b35a5d94fffb7a4c9bc41d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001837v1_decoy LN:3337 M5:21d6bebf3b38b8e623684b9e0e707909 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001838v1_decoy LN:3324 M5:445cf21cdd79290b7e69a748db3691c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001839v1_decoy LN:3315 M5:f1f38a814378ad3f53ab744d03c6faec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001840v1_decoy LN:3313 M5:943531134a853079b30be3d92c9a37ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001841v1_decoy LN:3283 M5:aa33f6f89273b5d970d09f46c4acffc4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001842v1_decoy LN:3250 M5:6c7e5a0af5d65078902e7369e77c3eca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001843v1_decoy LN:3247 M5:a40dde4dacd9b3af8d1346af020f3826 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001844v1_decoy LN:3237 M5:19c321a618697df2f90bf2623e39e09a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001845v1_decoy LN:3235 M5:858d4ef2c5182eec9a3af185040447c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001846v1_decoy LN:3200 M5:5198826fed1230b23329839aa0fe293b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001847v1_decoy LN:3195 M5:bc41aa22979bdd3975774235ac080c4c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001848v1_decoy LN:3175 M5:e3cf116e22c63b9ca8f5f83ef00c9227 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001849v1_decoy LN:3158 M5:2c546de8c11c8b020271c0a602c8e914 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001850v1_decoy LN:3143 M5:b114278cb76d8a47cd1ea131b6b01c46 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001851v1_decoy LN:3139 M5:836cf9f277e7abe51f821eea4e72f9da AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001852v1_decoy LN:3138 M5:99ec6bed7ebdeb700737347dbb987feb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001853v1_decoy LN:3136 M5:3ce9684d466895b5b1ebc7b730c1a22d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001854v1_decoy LN:3132 M5:4133dd5a44f06f0676fd2c8f8f2e532a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001855v1_decoy LN:3132 M5:1d73546845d822a91cbc6d9f4e78688c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001856v1_decoy LN:3095 M5:318534fba07d7da9181de4e227a5ddf1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001857v1_decoy LN:3094 M5:bb93d34eb9f7a80b575056a9785171f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001858v1_decoy LN:3093 M5:b4c67202f6c2cd5231bdf62ec60bf138 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001859v1_decoy LN:3059 M5:80bd25131b27cbfb7222fb139cdc03f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001860v1_decoy LN:2985 M5:3b138424ffa05470fbaf4e81e0b11722 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001861v1_decoy LN:2975 M5:128ceb0f1b4c41d3107868af22cbd590 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001862v1_decoy LN:2967 M5:f0bd303b1446335f781e0c2f74d28de3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001863v1_decoy LN:2961 M5:562fe7159c1f06d7750af9ef9c3d3e6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001864v1_decoy LN:2955 M5:8028d9a1447473820a8c0b0e88325ffb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001865v1_decoy LN:2935 M5:2fb53f3d6f706d8f5738f63429c8de36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001866v1_decoy LN:2933 M5:a22cdeb6c078d85e19e089f7f9efb045 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001867v1_decoy LN:2909 M5:1fd7abd65c5be9c9dc924daa280f43be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001868v1_decoy LN:2904 M5:5e863959002b0c580d4820a7cebdbf48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001869v1_decoy LN:2892 M5:662acc47cf615cef44478309a902b41b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001870v1_decoy LN:2886 M5:b83662f3f83e28d70a9133675fbe1b1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001871v1_decoy LN:2885 M5:0734ed3f7e1aed9828f22b347664e98e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001872v1_decoy LN:2878 M5:2246626d2530d2260b223f28a96a624a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001873v1_decoy LN:2875 M5:a306eed4bf0048509612220ddfca4dca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001874v1_decoy LN:2861 M5:45f856116b6642c701e0671967fb8bfe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001875v1_decoy LN:2856 M5:a35e380dc9bcacbbc7a29692f039feb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001876v1_decoy LN:2838 M5:e010e81c2ae154a12105872faac2d033 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001877v1_decoy LN:2801 M5:c830abeee2c0527ca00ee4004e2f26f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001878v1_decoy LN:2797 M5:9f0b46d448ffe81f55a61311b72408d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001879v1_decoy LN:2788 M5:ff37de9e839a483b85b9978f165e2aa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001880v1_decoy LN:2773 M5:45df0f07d5235217631f54d4decf8ce9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001881v1_decoy LN:2755 M5:22fbad6b463ff553fbe7482783018f9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001882v1_decoy LN:2754 M5:f5751d68ef59013dd8a924405b61c766 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001883v1_decoy LN:2743 M5:68564eee42e550492f0bf366f22345f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001884v1_decoy LN:2725 M5:c4477959c12bb115614ea504cf712579 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001885v1_decoy LN:2722 M5:d221c4dd4b764a3cf767ae2f408cd855 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001886v1_decoy LN:2682 M5:6a91b1b63b686c713c6daaa9a5b28c48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001887v1_decoy LN:2669 M5:176039ee6f1d1ae8eaf240056ad7e1ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001888v1_decoy LN:2663 M5:ac2fb1176f2733ad7fcdd03cc15e919d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001889v1_decoy LN:2652 M5:f14b36f702c6db220606dd6696067369 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001890v1_decoy LN:2647 M5:82b5cfe2b5ccc5d14445809aefc4acee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001891v1_decoy LN:2635 M5:fa2959b22afb179b2e6b195f5bba68bc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001892v1_decoy LN:2633 M5:62d8ae1cef408d715d22ae3ba3dfb9c6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001893v1_decoy LN:2629 M5:cb667e2bdb9486da5a227dbd50803c45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001894v1_decoy LN:2612 M5:923dfb32d8271c70d8e8cd9288621481 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001895v1_decoy LN:2599 M5:691f294fc31908fd910ca9dac0cd4362 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001896v1_decoy LN:2566 M5:9cce036b1dc05a82d7a2bd677688b7a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001897v1_decoy LN:2556 M5:975e1058290d80f4ab2cf207313135aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001898v1_decoy LN:2551 M5:e52be60ead1084c5dbd6851964b3d575 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001899v1_decoy LN:2551 M5:71028cef766fc1dc75684dc127ec3f73 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001900v1_decoy LN:2538 M5:e180467b2632a688c6d3b1e58b17892d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001901v1_decoy LN:2538 M5:bcaea2754972af50dff62993504801c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001902v1_decoy LN:2525 M5:647f59f3a4ad408b803a4c971db5651a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001903v1_decoy LN:2498 M5:80be471faeb22fb67458b7bb8e00ea3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001904v1_decoy LN:2496 M5:be7e3722d3c1a45b98f79cf89cfc235f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001905v1_decoy LN:2483 M5:609856bcc6aeb799c0a57773bccc7598 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001906v1_decoy LN:2475 M5:e64a6fb38d225decae7e079ea7b9732b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001907v1_decoy LN:2469 M5:e2b450a085ac14eec02539b8c1bd6bed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001908v1_decoy LN:2455 M5:0b0b3b8bce8db6dc091b3429802919bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001909v1_decoy LN:2444 M5:6a091545fa77d96dc253bedeaccb6692 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001910v1_decoy LN:2437 M5:ad77fbca3fa49f1c970e8c64b58391d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001911v1_decoy LN:2435 M5:233e3f635c3bd0fae9ed04c155c799a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001912v1_decoy LN:2427 M5:e22283fea810c2cc4c92cc5ac5ead914 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001913v1_decoy LN:2419 M5:ea7d2ed4522c0ecea6389a3b9fb7bcfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001914v1_decoy LN:2413 M5:953de10ba34733832f5bbcb37e12c5fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001915v1_decoy LN:2412 M5:ea8ef9ae0476686a6cbd488a0202b2bd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001916v1_decoy LN:2400 M5:0198ad2dfad702357fb849a43500deaa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001917v1_decoy LN:2399 M5:d566d3ebbd937aa7ba415298188a1c93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001918v1_decoy LN:2396 M5:536fac7c509791bd524e9da425d7fd93 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001919v1_decoy LN:2393 M5:522e11044a40018a2f755d9d4fd8103b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001920v1_decoy LN:2386 M5:aa9e69c6d5f6d04b4030be6b3226964c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001921v1_decoy LN:2384 M5:b4d05aabf35963906d1861ef966a4709 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001922v1_decoy LN:2382 M5:97749df462ddf825702a260f9aa2f021 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001923v1_decoy LN:2382 M5:3c0d3376e16a20d57497a815d2475873 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001924v1_decoy LN:2367 M5:e76216aa8c58c6949a9c04cfa9b95995 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001925v1_decoy LN:2366 M5:4b4ae46d37a4f45b63c4b8c3cb63294c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001926v1_decoy LN:2362 M5:589965b553dd53d631ae9970b0c65403 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001927v1_decoy LN:2361 M5:aaac326f62cef7cc31b28e60534d0a3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001928v1_decoy LN:2353 M5:2c60f763bb39af3328df40c97b8e4f0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001929v1_decoy LN:2349 M5:5e3aee054d3451ec9e4e18ee277b5efb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001930v1_decoy LN:2348 M5:c885bcc19373dca31580a65ec6fc7e48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001931v1_decoy LN:2340 M5:b36f2e5330d409cd8ba0973000358c52 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001932v1_decoy LN:2339 M5:63104b56d2278c3cb82c3d6f23d8977c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001933v1_decoy LN:2336 M5:2c7518f9e4ed0d994be4698762511cf3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001934v1_decoy LN:2333 M5:308cac07c79336f8162a8c2e855f7762 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001935v1_decoy LN:2330 M5:bb4702fc9e6227387e8ce3498109d998 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001936v1_decoy LN:2327 M5:ddad50424c1114dd98bc0202ac1cd9fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001937v1_decoy LN:2318 M5:28804e3d50bf7764ac6b1897b1128790 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001938v1_decoy LN:2293 M5:2aa344c0d737b4d9042325fb5a858bee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001939v1_decoy LN:2292 M5:22b000d9737a411cb3844951ebc17b87 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001940v1_decoy LN:2287 M5:44ec350c3d506da4df5a5c6c60683796 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001941v1_decoy LN:2274 M5:c2d8c7fed619477a490f674da302b98c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001942v1_decoy LN:2274 M5:bae016f221de9bcae9788e26dee71d3a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001943v1_decoy LN:2267 M5:88696dc559363af860e8828eed45eb07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001944v1_decoy LN:2260 M5:be18f9c08c02b23d6bc3e38f71843b69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001945v1_decoy LN:2257 M5:bc65d96f85bac2cf76e5db2847c7c723 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001946v1_decoy LN:2240 M5:98c67c23fdf01dd3a05e1213470d56d5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001947v1_decoy LN:2239 M5:0ec5d58555d46a257ce56425c730f4d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001948v1_decoy LN:2232 M5:b8901c5291103859cc240e5d6c96c4ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001949v1_decoy LN:2230 M5:976e267cf6d42bc3c67a345bb56e707f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001950v1_decoy LN:2230 M5:f179f9db12db687102c9a63bacaf36ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001951v1_decoy LN:2222 M5:f5a5058d6f869ae64c9a4b69439d4114 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001952v1_decoy LN:2216 M5:63f1d3d20deaabfeeb68d11879debd0d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001953v1_decoy LN:2214 M5:b09d559a9d44f7eb887d75fd192524ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001954v1_decoy LN:2210 M5:7d0a884bf7fd09ebc9175286c058635f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001955v1_decoy LN:2203 M5:6005c464e19405b659d2d2e09778b06b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001956v1_decoy LN:2197 M5:a15768dc613354cb73ec09a4c5c814ee AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001957v1_decoy LN:2196 M5:cd06502f93b8e17fd05511c84cf6c523 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001958v1_decoy LN:2196 M5:c315413cc7a46460c67bde0cd8e78b71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001959v1_decoy LN:2179 M5:708d5a6db13c3ac37d5e90e0cc2a8c32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001960v1_decoy LN:2178 M5:e217486e375bc7a5925ec6cc7fa9e003 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001961v1_decoy LN:2178 M5:dd793d59199c7f60817d549e0c149b15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001962v1_decoy LN:2172 M5:aff6ab00ffade197cf1c12f043e2cbe5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001963v1_decoy LN:2170 M5:2cf0f6c81889758a8dadc195f7928b09 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001964v1_decoy LN:2167 M5:c20e5ca2be0e106f7d0694f9e67a3ea2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001965v1_decoy LN:2167 M5:df1f17762d17818e216feee97299c37b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001966v1_decoy LN:2157 M5:071891675e2ba4476534e0035ef13cef AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001967v1_decoy LN:2153 M5:59ad2443710d81ac651620a8f216e7c0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001968v1_decoy LN:2151 M5:2c5f2ad4a6812000584bf131c918c3f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001969v1_decoy LN:2147 M5:e6458e552c51be648c8cc8ca7c01ac98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001970v1_decoy LN:2145 M5:408a6d5ea59519609696b4228f0cbf97 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001971v1_decoy LN:2142 M5:90b747485a6b12433a92fb55202869fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001972v1_decoy LN:2142 M5:7de080d8181d8066e63905fc22a7ee14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001973v1_decoy LN:2136 M5:b611d1ca78ef211201bfc0b6a68e74df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001974v1_decoy LN:2130 M5:5f1f983972aaf38be9f2fd9fbcef8a9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001975v1_decoy LN:2128 M5:0323f4f5194c96dc1bcb919f06960a20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001976v1_decoy LN:2126 M5:c142de1e2c1924e545f116a373abafc1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001977v1_decoy LN:2126 M5:6ec3293375949e50d082d3f5639ba434 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001978v1_decoy LN:2119 M5:e1eeff28afd215be837a02bfe59d8294 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001979v1_decoy LN:2107 M5:eee07feaf8a44d69317e6b46e8eee089 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001980v1_decoy LN:2091 M5:ea5e9165f2f579567e1addc7de1a7a6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001981v1_decoy LN:2087 M5:635626092c6f01e77135d2798172beb8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001982v1_decoy LN:2086 M5:269d34f32d02129323bbc21d6336cc6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001983v1_decoy LN:2083 M5:5aadd7636d45bda287185de4cefac8d9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001984v1_decoy LN:2075 M5:ae2d128f1ba2ba34942dffebf4b7905f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001985v1_decoy LN:2075 M5:0f195e7dde4153887f4f0615cbd730e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001986v1_decoy LN:2072 M5:b236a0d4a67c91d699b3cdf5adc47a71 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001987v1_decoy LN:2068 M5:2e34944b2779f309285d9db7a20b69ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001988v1_decoy LN:2067 M5:233b964d4a2e5bab26b7b996dc46d4b8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001989v1_decoy LN:2055 M5:795ffd63a0e2d97ac00ca57cdab045eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001990v1_decoy LN:2051 M5:5e69880a7e6f7bf744cf4b305624a7e7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001991v1_decoy LN:2050 M5:abba4241716dcac69b95e887f8358859 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001992v1_decoy LN:2033 M5:096ca0754d9f8f4cf7a582f57c5fc083 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001993v1_decoy LN:2024 M5:288495a36e0f4b1fc8e90cff6d4734eb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001994v1_decoy LN:2016 M5:96d95a271cf5d103433921842ead9915 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001995v1_decoy LN:2011 M5:cb8560d292475a0fd481b0e794ed0186 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001996v1_decoy LN:2009 M5:a6503ea36c1b69162d3eda87c4f33922 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001997v1_decoy LN:2003 M5:d3a1bed41244634725882235662d11a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:chrUn_JTFH01001998v1_decoy LN:2001 M5:35916d4135a2a9db7bc0749955d7161a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:01:01:01 LN:3503 M5:01cd0df602495b044b2c214d69a60aa2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:01:01:02N LN:3291 M5:743d9f66c77fc21b964a681e0c6de2ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:01:38L LN:3374 M5:dd27b7fe617e92bb77eea00fede6fd15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:02 LN:3374 M5:3ba47a11a8a5b47ccb855308e26a2f4a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:03 LN:3503 M5:554d43de8f2a97cae068169fe3d8462e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:04N LN:3136 M5:072ea3e53c79f3d00e1f1a7b492b0a8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:09 LN:3105 M5:68176666a98582ea361a9181d69679af AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:11N LN:3374 M5:b9ad3338cc73e2a99888a36e04c29f75 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:14 LN:3095 M5:0385be87eb49df4c59d7487495e3b1b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:16N LN:2985 M5:10150ad21301a29f92e1521530fdd3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*01:20 LN:3105 M5:05dc0384da2f751afe549a9bfdbc3037 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:01 LN:3517 M5:174a8ac24d2e6625c1e7589219d6fb84 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:02L LN:3287 M5:96a6b1f55c41a7da24857ab8844a7a22 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:03 LN:3023 M5:0ac19a55ed1a22389a2d667c42ba1218 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:01:01:04 LN:3516 M5:f6a0bed71d059f8387d9d22e2b0c46b2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:02:01 LN:2917 M5:a99f213073198aa5a532f950135f6d1d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:03:01 LN:3517 M5:8a795bfd81ee3440e8d0fa3e5d09cd35 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:03:03 LN:3148 M5:6ec792b8a5944a6edb0c1acc18ee1418 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:05:01 LN:3517 M5:dbb2cf4bd26ccd1d7c17327d2cbc119f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:06:01 LN:3517 M5:00a663d257ac9d4d6eabae95f6fb6d8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:07:01 LN:3517 M5:2833baebca84548dd4e37d79642db779 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:10 LN:3517 M5:61bf8d00643229eaec4eb8def24f1a98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:251 LN:3517 M5:d39aa010841e51a5fc857e82a3378d96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:259 LN:2978 M5:fcedee868a44319f80c453cf7b833abc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:264 LN:3002 M5:6cc807b0948af0b655ad0265629b7906 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:265 LN:3148 M5:5e00ac7ffc401cd5f866e17cd6b7d76b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:266 LN:3084 M5:fe25829d3992130e1ca423e98507b843 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:269 LN:3101 M5:724d76a112c0b557ae52e35dcc2973dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:279 LN:3103 M5:0aef01822ccf2bada1e9a2ce8c771711 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:32N LN:3517 M5:02ae1b32f6268509dbfab828c8339a36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:376 LN:3104 M5:79dba7660c7fa948d23f2703e80eab7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:43N LN:3218 M5:68aa8847e8ec55dce252be3812b03bac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:455 LN:3118 M5:6903220f41d0f8754d6cc3ff6fb3fbba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:48 LN:3517 M5:2947ea9bc4c28b64abba44002460a38f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:51 LN:3109 M5:84c0d488e0a5f95cb3587efd6c84b00c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:533 LN:3217 M5:34bc003a99760f4ec928572b3a747094 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:53N LN:3305 M5:108696b83e605fa59b435cfb8406edf4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:57 LN:3054 M5:bc22083129551a34dbbdfd07e36f763b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:60:01 LN:3112 M5:b58aed6de00585e7f185bf3eb573cb45 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:65 LN:3387 M5:03702f960713a7c42469b033b7ef05ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:68 LN:3109 M5:74777150832f351162301c7d04a64d48 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:77 LN:3371 M5:9e5ec638d0de688fc20aaf00b74b5a9c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:81 LN:3309 M5:2cbf6e9f368ea4387632204bbdcba76f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:89 LN:3371 M5:782c923ac311a590d29e9e85b6a6b5e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*02:95 LN:3388 M5:36b421cc1baeb1cc37291f98566cc5f9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:01:01:01 LN:3502 M5:bc204fec41a0219e8044aae1c5a3a6ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:01:01:02N LN:3373 M5:c9d431f34db1cf123c6dec89ae7075f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:01:01:03 LN:3094 M5:4744e9f0617b3715ed23779866c2e1ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:02:01 LN:3502 M5:d54cdfb5d7a25804bc3b5a3711d1e42c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:11N LN:3404 M5:fb87c0184303005cf961e7e6bc65a3f5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:21N LN:3095 M5:665152840dba04b1bdbfefaf3d4913ac AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*03:36N LN:3142 M5:c5889d985a6d5ac0f86ee9a5f1449762 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:01:01 LN:3503 M5:1b32d51d3415a99c68971d21b686744a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:01:18 LN:3503 M5:3283d7a24c7ad61f9024a8f7d76d5bd6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:02:01 LN:3503 M5:fd13f748ca0c574e318250f8dc0f147e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:05 LN:3373 M5:78f70065b11cbfb3f502af9802ae3b7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:110 LN:2903 M5:ca7ce57dc961032a37af87fc26cb626e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:25 LN:3073 M5:e1ba0819b77d173c0a9c6697f76f3e50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:50Q LN:3362 M5:ec1d5f53ad6427e623c41a11393bc518 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:60 LN:3241 M5:6815ddd990a7231bc8dc40a414cba309 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:69N LN:3500 M5:dd8ce51ba7bb514b56ffcb5d7566dcae AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:74 LN:3227 M5:057f5c85ad1f09e82b0f04bbc54f9283 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:75 LN:3184 M5:9975bcb416ee87f54025f71692bbc1ce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*11:77 LN:3233 M5:615353e3ceac5a04cb381339a800ad9a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*23:01:01 LN:3502 M5:edf8a55a69faad1aab25516e1126b0c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*23:09 LN:3104 M5:fbcac94109d55d95b94b869fd6e42705 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*23:38N LN:3020 M5:83381147ae6889a0af532bcb7af83e6a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:01:01 LN:3502 M5:95495e041aa53313d12032c49baa1b1e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:01:02L LN:3502 M5:d91ba7d36f6472faec4c54d1f476c9f8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:01:03 LN:3075 M5:a89ed5d11db1d882965e052a6a049217 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:03Q LN:3247 M5:d55685eded22f07791df08b502ad3872 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:02:10 LN:3356 M5:739b4ee3c4a555c2b699fa358ad07744 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:03:01 LN:3502 M5:d866111fbc6e2ea2cf086915b28442b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:07:01 LN:3502 M5:872c7be9ec525309cd91d949580a87e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:08 LN:3502 M5:f0bbd52535d5ef86e21c4486e1761207 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:09N LN:3502 M5:9d122834f5117a876ff9ef768a61672e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:10:01 LN:3502 M5:035534e6b4f7a7b2b20506a41290b8de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:11N LN:3503 M5:bb7085dbbd00c565896a17505dbd06c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:152 LN:3176 M5:6d81297ebe64b08f9ec9e8adedcde902 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:20 LN:3502 M5:eb4b55e730512095c889a1c36a7fb51d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:215 LN:3116 M5:f6c6ec83d1c70ef4bdc483abf45a141c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:61 LN:3043 M5:8ae770b761bfdf718a8cf382b54fc71a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*24:86N LN:3415 M5:0e1108b26db8b22f177b460c8a34c017 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*25:01:01 LN:2917 M5:2e22cd0725822e29d3f0df6844339714 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:01:01 LN:3517 M5:51cabb4c3149d169568609c1906d969a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:11N LN:3091 M5:112419eeaa846213785eadd7380308a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:15 LN:3217 M5:2a2c8f5ba64eb0110f2de0d8b74a5d98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*26:50 LN:3141 M5:9a1a6cdedaef2a3c66ca98f77622fe50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:01:01:01 LN:3518 M5:6a6e4c826d8743d5f327d8906a311270 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:01:01:02N LN:3303 M5:497a11cff2fde28a5c500d529581c57b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:02:01:01 LN:3518 M5:77d1ca0d5ea97ccf052d85d9515117ed AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:02:01:02 LN:3518 M5:53bad80334b21427430686d44dbda04d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*29:46 LN:3310 M5:b4635ec707263c634b27769afb46323a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:01:01 LN:3503 M5:c6b537ed485b72a6b78cf527493d8ca4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:02:01:01 LN:2903 M5:65d618ee20ba439ef5ae408a182e25df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:02:01:02 LN:3374 M5:4031b0ca00a39d4d076dcdc2808f590d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:04:01 LN:3503 M5:21f4d62eb6e85f6257661e4c94b68aa4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*30:89 LN:2903 M5:694bc9c1c804f437646697ba9d968bc5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:01:02 LN:3518 M5:6e24e36ceae5a9c0dfa1cbe4520b4425 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:01:23 LN:2918 M5:61060b6e397e85fd905668b5876d8c50 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:04 LN:2918 M5:2d4a59604c2d3d795f3647a186685ad9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:14N LN:3090 M5:afc943d7553ef55e21a855f5e266c8a8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*31:46 LN:3075 M5:ae87be36c211dbf040022ade7713d2c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*32:01:01 LN:3518 M5:d3a7f1fb642659538a431ee2c1d8113e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*32:06 LN:3389 M5:06c6aff700dd7ddd935fd83f2def16e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*33:01:01 LN:3518 M5:f1f4a4e1fd2e774e4003c4f94c67b36a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*33:03:01 LN:3518 M5:4e7abd41072e8f3c62c49c683497d39c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*33:07 LN:3389 M5:4ed7b17c57b32199660f285b9e53bdd8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*34:01:01 LN:3517 M5:c79f20a6bd41e2e41b6e067222b4af42 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*34:02:01 LN:3096 M5:a3a26d9b6292599851c207c193d92b23 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*36:01 LN:2903 M5:a923a3fb762fa22c7956888b6634dbcf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*43:01 LN:3388 M5:a5e6a04ac5537f379e03956d57cefe3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*66:01:01 LN:3517 M5:787d6cacbda41669a942dc4b54c4f7e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*66:17 LN:3075 M5:5f0734606934302fccb508a2f5d3b915 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:01:01 LN:2930 M5:93bb5b64ccd0bab2bc0478d6bd0e8854 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:01:02 LN:3517 M5:957d09385dbaaadcf87f85227a2a43d2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:02:01 LN:3517 M5:0e43acd52311b6485d4542edf7c6d286 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:01:02:02 LN:3388 M5:fbfbf3067287661249f797a0701cbb58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:01:01 LN:3517 M5:21b71bd572d6dda388a4d60211edba0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:01:02 LN:3506 M5:00fd36e8b22143b0adfbe025e2d5d2b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:01:03 LN:2909 M5:df913a8914cc697da83538a7b8e1898e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:02:02 LN:2916 M5:a34e21e7b4de5c05f67281bf68bdeb66 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:03:01 LN:2917 M5:9eaaf636f6b7bcb8557a2b843eda3b60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:08:01 LN:3120 M5:c2e72d05d212b232f180c5020ad652ba AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:113 LN:3070 M5:474b432629b8d4cc0486021e71e3dabd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:17 LN:3134 M5:f44b78e8df335a94b8ba2ee62214ed82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:18N LN:3237 M5:250389f8d56a86c0037d9e10ce88aad4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:22 LN:3119 M5:5a8b2633f1fb32860f4d5df30e8677ca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*68:71 LN:3198 M5:dd6320e01a52a1aaa9224cd4c39807e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*69:01 LN:2917 M5:02bd84b3d7b9d16ec8546efc41b4d0c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*74:01 LN:2918 M5:948aa5c51d96d4ecbe3fc862f0214a3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*74:02:01:01 LN:2918 M5:4b972360085a8e764c52f0a30ff47673 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*74:02:01:02 LN:3518 M5:97a7f1d63575aaadaff78b53c7bdd231 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*80:01:01:01 LN:3263 M5:5405ef04524037ea84ce1fc83dc9ac20 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-A*80:01:01:02 LN:3055 M5:5cc77fd13bd6123b7300d6da19ae5c13 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:02:01 LN:3323 M5:5eba87e3d51a0b86a498f97022e5714a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:05:01 LN:2676 M5:d41a7c05ac284e89b86b658d33564b3d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:06 LN:2676 M5:a5d7749f86004926ffe9fc104b1e99c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:156 LN:2967 M5:8cc8227691836b87823ff2228f9b25a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:33:01 LN:3239 M5:6ab184ee1fa9167f8857a4d6a7b33da6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:41 LN:3266 M5:9b52773dd0c042b641ea254944e932d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:44 LN:3270 M5:03ee83997251cdeeec6269f547238122 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*07:50 LN:3323 M5:e369192a36b773e819b37507a823343d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:01:01 LN:3322 M5:4ed3fc74f9934e922cc8345b00459784 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:08N LN:3035 M5:3d8eb010a8cb9c3da8d4eb759dee63f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:132 LN:2675 M5:a863b21bd08f28404b8b991486beec56 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:134 LN:2959 M5:cd3c81892d9127631465bd4454169e3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:19N LN:3322 M5:c64401d837f2f4eb51a6f89375d02401 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:20 LN:3322 M5:87e42f5c7d6c6b2f1990fb2477271f14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:33 LN:3322 M5:704bdddcfc1c52e4181d4c12a4e25e54 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*08:79 LN:2676 M5:f08c9b4724eaaedae63d87b79af851de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:01:01 LN:3324 M5:6a8fa9ecf6d7b7a57c77b21c908740b0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:02:01 LN:3324 M5:120d59fa894b11fe23dce75e3f4869f2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:02:03 LN:3323 M5:d52345523e7897e545fffd4718dcccf4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:02:09 LN:2919 M5:ef118f2b15e542e80c1b9c162ad69345 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:08 LN:3324 M5:11f30cc59a8a4b6d4b43144c294440c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:15 LN:3323 M5:0684fd43ee5428bc529561b33db2f2d0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*13:25 LN:2689 M5:dbbc5af54a1289ade5eb273e2f7aee7e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*14:01:01 LN:3312 M5:3764a48b755f8e31055b0e861e4c74e3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*14:02:01 LN:3312 M5:26b567e4c01ece594ca1d0f0b18ae0c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*14:07N LN:3255 M5:74dd725f56e8dad2652028bd0b496125 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:01:01:01 LN:3336 M5:b00240fd0143d1f67ee96b53a30adcfa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:01:01:02N LN:1208 M5:1c5acd964349055939ac8654093dde0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:01:01:03 LN:3026 M5:dcd416dc1f3d5d91d7374096d09a68ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:02:01 LN:3335 M5:25973b11c58535f98da0dae1d36e1ce7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:03:01 LN:2689 M5:bc488eabb3f7519b04b6a795acdf81c8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:04:01 LN:3052 M5:6ccb4f7a3eeb9e8ed44236b5092c2bd9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:07:01 LN:3336 M5:7630abd7e06b6d17b3542a0efdb6c780 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:108 LN:3283 M5:80b9c94caa804a2bd7f2447b9d24cf82 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:10:01 LN:2689 M5:c0699fd2bce33c66fbad3066177f17db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:11:01 LN:3336 M5:c3971913c6e6b41e2f1bbb56026c60b0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:13:01 LN:2688 M5:a5d9251e2d32c20001b7845134141a39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:16:01 LN:2688 M5:fc7d48526274847fbb255137159d9d47 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:17:01:01 LN:3051 M5:fbfa24d81ff319e1c9a77eb23a5c5af6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:17:01:02 LN:3051 M5:547e0689ef02b1b497deaa785f374c32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:18:01 LN:3336 M5:79c954404a5e1b10f46264fbb3c6b32a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:220 LN:2878 M5:a87213c0fe840a0cac742fc92c4a203c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:25:01 LN:3335 M5:316c1666b4ee7ffb47f4922157d121c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:27:01 LN:2689 M5:e01a2e586f79a078cc425bfca6367182 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:32:01 LN:3336 M5:4411f20a66f0e08032144115799b7530 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:42 LN:3333 M5:e6b197d6c9397d8de0ea8de14a814b05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:58 LN:3336 M5:1c0d71c98a79449eabd99e163692bd6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:66 LN:2902 M5:a5186448b35a7b3923ccdae5bdf4bd8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:77 LN:3336 M5:a4984835f8285fd5518e523394749864 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*15:83 LN:3337 M5:322d07dc63950f70a35cd4a6cb9ba2ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:01:01:01 LN:3323 M5:b0017c6a0823ba043caa28c260a41b12 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:01:01:02 LN:3323 M5:a51373cbff28c2af5ebec8fac8e33cca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:02 LN:2686 M5:ba01be9495db45e331f731023378e599 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:03 LN:3323 M5:207b298dc49c700b8a16865a72eb7c7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:17N LN:2979 M5:01b001b48d8d89f7671231f8cd45ca05 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:26 LN:3323 M5:655b4f8cf9b575997c39e45df3664c8e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*18:94N LN:2970 M5:67c613fbd0339031dc79fc91e294348a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:04:01 LN:3325 M5:4380eeb25545f28b8d6a8bf602e7c2f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:05:02 LN:3325 M5:f60437ab7a86bf431ed0854fd2641cdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:05:18 LN:3321 M5:ff2e5f34be64b46f1e15d1091ea54645 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:06 LN:3325 M5:4c3f65501973406722a9c66c6f129061 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:07:01 LN:2677 M5:61c1b2092f60d8b21a413b8e6846c58d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:131 LN:3325 M5:08dcdc60c6c29f52d100af9900b30e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:24 LN:2677 M5:c0e3b858ba702a5959d35e51b8b75406 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:25 LN:2677 M5:f1a1a745dc082e0c0a91813d3f12e52d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*27:32 LN:3325 M5:ef9b650861b7081940788ef1618a074c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:01:01:01 LN:3327 M5:72eabdc1286e5f8faec021e4c3fbd212 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:01:01:02 LN:3327 M5:8d6dd73094fd1458c95866fab0bccfb3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:01:22 LN:2806 M5:198a61b3d4b83cfed1fa018f0b5313e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:02:01 LN:3327 M5:69e50f2988b92d745c93ebc9877eace7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:03:01 LN:2689 M5:866f05a4324734d3cca067f98354488e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:05:01 LN:2690 M5:c6cc89ecf3130ee79cefb981dd362f0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:08:01 LN:2689 M5:6baeeca7110354530934af4af0cccd8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:14:02 LN:3327 M5:99db27c20c358808c9e75b090eb54d06 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:241 LN:3042 M5:9fd1849b96ef49c7b705acfdfb430e8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*35:41 LN:3327 M5:8526562f5800fb5180e418bdf4b6e56b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*37:01:01 LN:3324 M5:8e4396d6b7c04761713fc800437312bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*37:01:05 LN:2687 M5:c4312bfb5ca6f84d1c4b2c444107b844 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*38:01:01 LN:3312 M5:205bcc2884f405305b551c58c25d7232 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*38:02:01 LN:3312 M5:501fd25edfcd87eeda45de0caa78e1de AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*38:14 LN:2738 M5:7639a6e735e55ac574403a7970e113b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:01:01 LN:3155 M5:eee292da1356cc9c3bf1b333e89661d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:01:02L LN:3153 M5:cd343572a20faec9ea375660b4b08feb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:01:03 LN:3312 M5:e3fff974f234f099f66e0fe53a93ef2c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:03 LN:3155 M5:2e520e3148dcdf7d8fc7763872d61957 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:16 LN:3155 M5:cb333cf3f06cf66b86f11654c941690f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:01:21 LN:3312 M5:6e1fb83beab576ba8c39ff0237d40277 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:05:01 LN:2675 M5:bf2d7c62a16bf00c2559565daeb0538d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:06:02 LN:2674 M5:77758f231bef5ff95e5a4be58d38dde1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:10:01 LN:3027 M5:fb13d6eeb084ecb4d241e45485ef36e8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:13:02 LN:3255 M5:5836ea0fc7935bd208b6caa597934b98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:14 LN:2765 M5:76c31f2b103685de65a25008bf484f11 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:34 LN:3254 M5:840ee3b914f83a21f98cde71f89d77d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*39:38Q LN:2675 M5:55571273ba2d1a50d1f87b47ae59d9aa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:01:01 LN:2676 M5:afc20b1efd5b1b479db2e62fb8b88337 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:01:02 LN:3323 M5:e80885c2e036b557e2bd1ca6c2b6667f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:02:01 LN:3258 M5:e6e0e85a0fab0b1e17686742e0ace0e4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:03 LN:2677 M5:a4f89215e2d83f162c338ac822bfb46e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:06:01:01 LN:3325 M5:9a238e4bba71b906acf8c46254a9bc31 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:06:01:02 LN:3299 M5:ee4804e6a27f57a5c37e372dc6daa312 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:10:01 LN:3304 M5:5d4db1b120369dcee6c52764f69bfb3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:150 LN:2800 M5:f889007857633aee1ffcdf1fc924ca96 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:40 LN:2677 M5:549008522cb77878ea5c2cf5bd048064 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:72:01 LN:3283 M5:7d61179ccd5e3f1fe4b4976456960d02 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*40:79 LN:3257 M5:521e3a50ed37f445b431b465b0d4ed77 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*41:01:01 LN:3322 M5:17390ad33a3efae3617d3a175671902c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*41:02:01 LN:3322 M5:c886279897cd7e75a357ac3218a1be5f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*42:01:01 LN:3322 M5:154e1df41ca09b47ebd7e365545f6e6d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*42:02 LN:2675 M5:59d27bea1d07ea5695101e714f65812c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*42:08 LN:3165 M5:d860761be3a99c6724146e606a28aac9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:01:01 LN:3323 M5:477ac3a92e88828aa579f38ac0fc39d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:01:02S LN:3152 M5:05fc8de1a02c971099db853c790d3fca AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:01:03 LN:3152 M5:2202501e60f1d3e547cfe4e814c7f877 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:17 LN:3323 M5:3af3bf43df87b594bc20bc5f791785b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:02:27 LN:2872 M5:6ca96787a367bd1ce0838f941140cb81 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:03:01 LN:3323 M5:83f22de8d085ea321aad42dbf25a571a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:03:02 LN:2676 M5:9fcac4fbbe8fd92d125550cd06db12c1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:04 LN:3239 M5:9b24c6a9a01dea4a6bcdb76824470e3e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:09 LN:3317 M5:5ed7833ec37da80387b4a86c6b2a2040 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:138Q LN:3043 M5:1088ef8207c18405bc0b180f0226dab0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:150 LN:2676 M5:0290d7c3b24a19eefc6a89bc41146c39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:23N LN:3323 M5:f1ec2e8fa319def50d20ce89e0b80d5a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:26 LN:2804 M5:174005655892f2cff1ad41bb64927506 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:46 LN:3323 M5:4b352ce812b6c8a65a2e45741d805d7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:49 LN:3039 M5:cb75887e3f845944c90cdf5315369b16 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*44:56N LN:2676 M5:4da8a161653ca5951070a765b2070b3f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*45:01:01 LN:3338 M5:86f5f0263cbccdf31fc646079fce98d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*45:04 LN:3339 M5:bba751b5e3727ad2af0a8cb343a94d57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*46:01:01 LN:3336 M5:7ab2f1273efeb3a770ca80b5d0d078b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*46:01:05 LN:2891 M5:314e19fc403d8ea017669e53723aead0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*47:01:01:01 LN:3041 M5:3107f208d002db7e36cf098ebbb8516c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*47:01:01:02 LN:3041 M5:9f6a5f1290f5f00afcc6b1e732a37b14 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:01:01 LN:3323 M5:105f81689cb818d76fe1effd3d150157 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:03:01 LN:2676 M5:874fcca35339a027ede1021bb682c5b9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:04 LN:2676 M5:77accce2b51d36c34cfae7d7f77a0644 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*48:08 LN:3323 M5:f6f1a40b586aa5025bb2ed56a890ac8c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*49:01:01 LN:3340 M5:7da4db3c2933e38871dde7de2cdf0131 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*49:32 LN:3340 M5:1a762b6501a216624feb498212c99a07 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*50:01:01 LN:3340 M5:9d8a8957807527e6413e745a8fd4e068 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:01:01 LN:3327 M5:263006da7f87d352df017a5efcc6a2ad AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:01:02 LN:3043 M5:d0a5d20ecc047c9db286860c217ffe57 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:02:01 LN:3327 M5:0f09e1d79fda822bb499e29d59e7dfb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:07:01 LN:3327 M5:63b4b6ba9c4049e98e44399a1b1ad03c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*51:42 LN:2962 M5:8253b5b1e485378dfeedfa598e677579 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:01:01 LN:3327 M5:bb94101c60541202c4b844e21b640a92 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:01:02 LN:3327 M5:ff0ebc333c63692ac07e7b95c6febbd0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:01:03 LN:3327 M5:9e6abe5b1d3205aed3a8b62d580f5c6c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*52:01:02 LN:3327 M5:d7fde559163710e8a22f5497902dee7b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*53:01:01 LN:3327 M5:0e08f9e5e5ee052f077c388fe43ed672 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*53:11 LN:3274 M5:9d84a07be4be471551bc6c8cd89ddfa0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*54:01:01 LN:3332 M5:7621d4b27eef76b4b57df91eee3bd38c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*54:18 LN:2813 M5:ecf8408d4379ee7e2467c784e51ea2bb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:01:01 LN:3332 M5:b19860ce7d3e3feec3da15d850ffaf83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:01:03 LN:3332 M5:17fe5fcacdc35ec18448d04e206578e2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:02:01 LN:3333 M5:fe9cf4bfff80e738fa573a1e4336621c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:12 LN:3332 M5:570fdcabb0ff55d30de3a319b09b2da2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:24 LN:3332 M5:0194f66b5128ba6d3eb9fec43ee985c7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*55:48 LN:2980 M5:b8cd7ebdabaea8025fe0b0308b1c500f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*56:01:01 LN:2688 M5:8ea679a7f814ff4b104970fc3363591c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*56:03 LN:2688 M5:13a5b854a9c6cf607e0758dd8977a136 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*56:04 LN:2688 M5:52674e8d83e65bf23b0b36f2cee3b279 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:01:01 LN:3337 M5:435c90dcaa816e70a0a07c23d2f363b7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:03:01 LN:2689 M5:b412ccacf520ef015be9010e88d13fd6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:06 LN:3284 M5:14711544ed455ec1aa9a55bae251514e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:11 LN:3306 M5:66b4e723563c1e4a79cc9233cbc2d5fb AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*57:29 LN:3337 M5:ae6a6681ba3a2ed0efeceafc6ac41fb7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*58:01:01 LN:3336 M5:89112836a876c731a21d3e2357e297d6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*58:31N LN:3004 M5:8507d0acf3a65b125d7ff5bd6c4d1e8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*59:01:01:01 LN:3333 M5:23fda5090f014267db805d001c7c3add AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*59:01:01:02 LN:3332 M5:c4602c638fb61927261e08d529f2898f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*67:01:01 LN:3312 M5:87814da89393ae312125f9b36af8bb77 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*67:01:02 LN:2675 M5:390a5500664173ba6708dbeed0e360dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*67:02 LN:3307 M5:ca5872a8e8c8fe4b920ba96e1542cf58 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*73:01 LN:3323 M5:0136d8cfbbe9fd393a1e699753f7f7a3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*78:01:01 LN:3327 M5:81fbcef3edbbc1e8df879a12d817a9b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*81:01 LN:2676 M5:06b880357cb8d04e7715100462e6e58d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-B*82:02:01 LN:3050 M5:7f0f011b72e32064bdeab6fc9d15df0f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:01 LN:3349 M5:0071e65ee429afd318ef699ad315c4b4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:11 LN:3057 M5:b9f8c9b73140b44e888ca0d3cb97a51a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:29 LN:3349 M5:daaad7b0fa23883b6f6a74c29b218154 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:02:30 LN:3333 M5:f72ada7c617959035065509827004c55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:03 LN:3349 M5:1dfba36de6a84343e0f1bc21f4290dd1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:06 LN:2895 M5:707a109a70808774faabaa9f20fc9c2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:08 LN:3349 M5:d84d29f8412f7bc25c6faa02ce1e8027 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:14 LN:2895 M5:6184a7ce778825a8d3dbbdca08425352 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:21 LN:2895 M5:7c3c33a8a09cf7ab14dfb252dbb028be AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:30 LN:3349 M5:e7dc7b0b79ca3fba89e46935c2f6f53a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*01:40 LN:2968 M5:1f1ff8df1d52ca176768c131fa0dfd1b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:02:02:01 LN:3347 M5:7d432e207af5901819172d943367ab85 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:02:02:02 LN:3347 M5:3b927e5396f09d7b73cebc3cf7894022 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:10 LN:2893 M5:bc3caf3cb6c08beee025921ea8ab2c2b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:11 LN:3320 M5:86a83cd46a667da7f75c104e6964997a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:16:02 LN:3029 M5:117c55e59cdf735f8e4600c677295e86 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:69 LN:2933 M5:8fb20dc7ab2383635eb05c7b6aa75585 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:85 LN:3347 M5:19bc16298211d1df9285935c0e74349e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:86 LN:3347 M5:1a839f0d783dd916f4c4d85314fb33d3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*02:87 LN:3064 M5:efb30bed21ab99dd6db7b5aec573702f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:01 LN:2894 M5:df3f967e88fe534c02bfad024b8c887a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:02:01 LN:3348 M5:7ca03d45f7f1fd27eac518520148daa3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:02:02 LN:2896 M5:6d6e1775bedec2a59fa4d0bd7c94f4c5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:02:02:03 LN:3348 M5:22fe2d580ec4460d1b085eba87d9aac0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:03:01 LN:3348 M5:4e9e631972020eda52a012a3bcce4cd5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:01:01 LN:3348 M5:df0eaa78940580a0f21395f9387cc32d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:01:02 LN:3348 M5:d13c9657f578e20631d54771581b5204 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:02 LN:2877 M5:be42038dd5348757a9c683918b1db4f0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:04:04 LN:2966 M5:deeefe05be47eaf45bb483add4913ffc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:05 LN:2894 M5:bb0c05e7fd6c15d9d6593a4f3bbe783f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:06 LN:2894 M5:21c18b0c0ff10700610d7f1a50b1c899 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:100 LN:3034 M5:99e13ee46eceaa60fe5084f320894a2d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:13:01 LN:3065 M5:3981907aafcbb510b01423d7f323477c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:20N LN:3321 M5:b3a7cb20db02d1256c2106d420e765fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:219 LN:3070 M5:2f9e694079fd1378d796e05baa51889c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:261 LN:3348 M5:3248cc886e5d3793ba099f0ab1a05d66 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:40:01 LN:2894 M5:93c62f86d2dfc6633dbd2c975908da1a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:41:02 LN:3328 M5:f5752e34d19b00f37d306621c38909a2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:46 LN:2997 M5:0ea8327e0b67ad6f90e5a44c1629c7d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*03:61 LN:2894 M5:6d712f749acb251535e2ae8c3c617413 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:01 LN:3349 M5:3efce3936c70251730ad6b287f7d110e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:02 LN:3349 M5:5d4e1f36ad16f12cbf6447e60f24081c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:03 LN:3349 M5:9e9f6956c08e23d56266b6fa217efd7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:04 LN:3012 M5:2579591d3a321b72379ecd8a51d7edd7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:01:05 LN:2931 M5:64ad58c15cabe00bc7528c32341c0878 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:01:62 LN:3329 M5:43792d77155a7b8f48cd4c57e217997e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:03:01 LN:3349 M5:0ccb8d21235af6c2aff22aa6afbc6732 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:06 LN:3349 M5:63b57fd97300edc439359a50449974db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:09N LN:2991 M5:0fbbbf7cb8fddeb130cf9e967404f973 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:128 LN:3086 M5:e6d5cc6672b9d7e2050ce659e5ed35b6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:161 LN:3237 M5:5bf40c2edbc86b4e13300af3d685dc1b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:177 LN:3349 M5:8547dcf17572b7586eec8ec28cbb8792 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:70 LN:3058 M5:5f1c7d679cd5c3f3110db5fe628cd613 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*04:71 LN:3086 M5:02b46fcce463bf80c626c51f5d36bab3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:01:01:01 LN:3349 M5:c6d922fe90d58a4380b338ce33a098db AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:01:01:02 LN:3349 M5:a7b54d490750d2723ab72f5eab4de589 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:08 LN:3059 M5:1560938f348bbf8027a77fe08ce4b46f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:09:01 LN:3322 M5:bb8835a101a1bd226ba1cf04e30c8298 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*05:93 LN:2946 M5:8163cb61a36ebacb034b44d4537e3ccd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:02:01:01 LN:3349 M5:e2d2d51306ffa6a15072abc9e218afa3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:02:01:02 LN:3349 M5:289ade2a84e2a669f4950d905de18ef3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:02:01:03 LN:3349 M5:541d1cf5b93596d04882fdcea98fdb24 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:23 LN:3349 M5:f90da72a0371a17e345090ee35ced67e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:24 LN:3349 M5:8416842ec1691954a14211e9b178951b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*06:46N LN:2987 M5:1276d9ecb257086ba85fb1dff231b2d1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:01:01 LN:3354 M5:718bc83515052da25d2aa2cf1017aa8d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:01:02 LN:3093 M5:e45eed48ec341cc12ae10b917381d885 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:02 LN:3352 M5:d7dd73d1eb5b9a25c83e84ef950dd44b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:19 LN:3354 M5:db13dc42d8ac6f58daa4d04dd21e0296 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:27 LN:3195 M5:53fc59605c057f246aa7cb06caa3523c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:01:45 LN:3354 M5:7b104b85dc1b908764ff4904a903c90a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:01 LN:3354 M5:00b5a7cce8e5acc98b508e4d39091f15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:02 LN:3074 M5:152f1c93813d70470aa3a116478c5a69 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:03 LN:3354 M5:b854cfa857b40775c2ad6e6ded4b848a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:04 LN:3353 M5:7de039797ea7911c70f4fa82c658366e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:01:05 LN:3354 M5:00709b8f2f15aa3aa482a992d1d87b60 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:05 LN:2903 M5:c7cbc76d1fb0114a55ee635afdb0cd15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:06 LN:3354 M5:1d0e73f11030eece15f033cab7216c51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:02:64 LN:3354 M5:7f780958705ae801a5814f2471cb59f4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:04:01 LN:3354 M5:7aa1a4c1a413aca4e232a2e7dce8ee4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:04:02 LN:3343 M5:b44a66a5ff9ba711c465dc629d4336e9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:06 LN:3354 M5:3ac9135bdf1975f31d5f501cb5b62c98 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:149 LN:3098 M5:df315cb1e89fca70587836e750b11737 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:18 LN:3353 M5:fa6f988acdf9509ba3790814e29ef79c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:19 LN:3222 M5:2597c84fe3afb1831211a4c9ad6427ec AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:26 LN:3069 M5:705cb7c1e6112114a894aab34b391fdf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:30 LN:2903 M5:e5947b700176aabf378cf29e78c17084 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:32N LN:3334 M5:fe7d565923067a8248624f41f45c79df AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:384 LN:3349 M5:90a8a5267a890ccd78717e88de59232d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:385 LN:3354 M5:20b5d8a093d1e81d1e6b9e56b6d4ad17 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:386 LN:3183 M5:b5524ee2cc10b5a45e99af42e190f5f3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:391 LN:3354 M5:de98c716203e1ca551130af6affe2199 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:392 LN:3354 M5:1a509719976de84a60b59343364e4b51 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:49 LN:2935 M5:45a4d818fffa2d2428658489af9e98b1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:56:02 LN:3354 M5:e4c99b9226de6adbf587934d835048d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:66 LN:3354 M5:a822c754dee47e720af532f5f5bb1ef4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*07:67 LN:3354 M5:2ba41a6538775c77f84b648069196d70 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:01:01 LN:3349 M5:96d5d92a1f9a605bb014f058b767ecfd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:01:03 LN:2998 M5:585c1deb75a38ddadc48575546be3772 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:02:01:01 LN:3349 M5:734e931f1481380f2d0bf98c7925ee2f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:02:01:02 LN:3349 M5:8f2c108d077649a22ae5df5fb42fe265 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:03:01 LN:3349 M5:633f446c1fba5006f49dd2bbddb3ce5e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:04:01 LN:2895 M5:0d4f700e3c6bb58e12ab10c1c85f1bcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:112 LN:3178 M5:ad581d3ae2ddf7d3895c8bda459221c3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:20 LN:3349 M5:de321b1690b9ce4e07c6f6f1c838ba7c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:21 LN:3349 M5:574d8b3a969397fe0d6168a851acac10 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:22 LN:3349 M5:c4fc4ff7544492d91fc221e274b790a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:24 LN:2895 M5:9cc0d743f4c6cea3a61dd94cf81e8782 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:27 LN:3349 M5:3ab94e3b0cb8b613e8cc644c6dc715d4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:36N LN:3097 M5:5e4997d79367c75ea3301d1222f70938 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:40 LN:2978 M5:e8013eaab611499b1827191279b34223 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:41 LN:3019 M5:bf7ecc6786f26c3740e9291e7fdd990e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*08:62 LN:3086 M5:a3f951c6e67ba7b5d43b4678504ceb8f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:02:02 LN:3349 M5:6f12358794b5c624b6948b27722c0d4d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:03:01:01 LN:3349 M5:a5f9f1324e2a617a08c5bcbc275608b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:03:01:02 LN:3348 M5:ff3c56a68534ef6adbf0622ea691498c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:08 LN:3066 M5:5800471074ab27c8bea70d68c5e225d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:13 LN:3058 M5:807b94f9d89314085415b5578b24a778 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:19 LN:3349 M5:3f11cc62c9ed887231ac88ad834d72c9 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:22 LN:2895 M5:9ba9eb10b465c567357944d23d28cb83 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*12:99 LN:3349 M5:6bc65113a76be4e417061df97ec9323e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:02:01 LN:3349 M5:8707b7806173ec4a4c61b1d405f1aae3 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:03 LN:3349 M5:833afc09e1ba23f97925580cbd67b077 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:21N LN:3099 M5:360ab26c5e5b147d6195bcdff0c92871 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*14:23 LN:2976 M5:e5e65cbe62521c667b3ed587aaa762e0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:02:01 LN:3349 M5:95c60c535112b121a9e6ee900399d619 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:05:01 LN:3349 M5:d59cc60db3e774256fafc8cb4e13702e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:05:02 LN:3349 M5:e4ecf0c60d3ee668e494d70c54964c29 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:13 LN:2895 M5:a7312985b9c4182c9232eb0ffdc57ed0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:16 LN:3066 M5:35043b5832829f2204f9418cc925e19b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:17 LN:3349 M5:82cd4aaf3336e9d3414b28f0d7286e9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*15:96Q LN:3349 M5:42133cdaef4b18738bc26fa5695f8f65 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*16:01:01 LN:3349 M5:0c9b3216f1f00e1a3201ea90fb49bd61 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*16:02:01 LN:2895 M5:cf1da0837be9b9302b0fb7158fc5396d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*16:04:01 LN:3349 M5:aefc6289675459afe38397002b7451c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:01:01:01 LN:3368 M5:aafe636c5bfce4449d6eed73eefa3a9f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:01:01:02 LN:3368 M5:d3cbf8067c1957eaeb80c6a399477245 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:01:01:03 LN:3368 M5:f2cc1e59a91a4f102f9ab5fdf4d3c1ff AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*17:03 LN:3197 M5:a94688722b11045bbf7ef13dfc7d34a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-C*18:01 LN:3346 M5:d53dd9ee731f0437bbbffc584867b0b5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:01:02 LN:6489 M5:d0d728fb8e62a0b0366517669b0e4164 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:01 LN:6484 M5:823632b556203973124fe9c35cb13a3b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:02 LN:6485 M5:6d2b0b5b4de67207756f9a9ca9132232 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:03 LN:6485 M5:df8eab835a0677224be043db0196865c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:02:01:04 LN:6492 M5:1e79553d8e925c6243368db955220c7d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:03:01:01 LN:6485 M5:705ec2d75d9d349a7e4d1b2df73073d7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:03:01:02 LN:6492 M5:dc4b199889931d13d1522358a9a01f3c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:04:01:01 LN:6484 M5:f9a28fc80725b04a807c1a7fa37786bf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:04:01:02 LN:6485 M5:da201e2fb04103e9cfa1eaecab78b098 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:05:01 LN:6485 M5:a13023aaec38d48c163c5fe5996596d8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:07 LN:5959 M5:1af58658f072dc6319086af52c3d5f6f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:10 LN:5790 M5:52685ee8463a30a3909841a38e4b9d8b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*01:11 LN:5926 M5:18894dd38987f5ffd32b9896a4a7f732 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*02:01 LN:6403 M5:14bb0fb46e443150199a75018f001115 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*03:01:01 LN:6437 M5:75b42b5c4fb93885ab4fdb6a312d690f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*03:02 LN:6437 M5:caaf9e4318294ebd0c262db0018d88fa AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*03:03:01 LN:6437 M5:c0908bb87356f6cad982be1acb618dcc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*04:01:02:01 LN:5853 M5:dc7c3223c9df7e828a1c8f22c4cc89c4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*04:01:02:02 LN:5666 M5:6548c257283705fae841fe89148efc1f AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*04:02 LN:6210 M5:6d9b8e4e332e7e398b831c81a6179e76 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:01:01:01 LN:5806 M5:72dbcba71cbed79962e1fcb9efa94824 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:01:01:02 LN:6529 M5:b129bfcbf4b80c10ffab12eb652ba5a1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:03 LN:6121 M5:38e52c5a505ee662100c0789cfe884a7 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:05:01:01 LN:6593 M5:f4020b6d26ac50eed22026f28371f610 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:05:01:02 LN:6597 M5:456ddd5aaccb336023a80f2ae5abbbdd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:05:01:03 LN:6393 M5:39e340eb675634315a0f9aa27e8fdb32 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*05:11 LN:6589 M5:a47aa87bace1ec4da327ee121bceac36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQA1*06:01:01 LN:5878 M5:cd02d6c8bd4c86f9abb999bab52820cf AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*02:01:01 LN:7480 M5:0b0031da03392e56acd208fc67ae6e39 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*02:02:01 LN:7471 M5:69337da3c9bd0a6048d1a1144aabbdb0 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:01:01:01 LN:7231 M5:78802163e98cdc6f909438b62e0cfab4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:01:01:02 LN:7230 M5:e8f01ef987d6dd2a878f94e6d97be1f1 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:01:01:03 LN:7231 M5:2423aebb09fea4369cab41a1ea47afc8 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:02:01 LN:7126 M5:2218c10eeaa7f39f94ed3f0309605510 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:03:02:01 LN:7126 M5:ffa1cdc44c405e284e6f51859e1c2b36 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:03:02:02 LN:7126 M5:739f0c7c0c72cf31a975aebe2109f11c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:03:02:03 LN:6800 M5:2dd9cf67abbc473a663d6d559694616b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*03:05:01 LN:6934 M5:0de7b3ac9974b084f8db58e416c25eb5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:01:01:01 LN:7090 M5:38570713e3fcfe831cc045e479f65e9b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:01:01:02 LN:7090 M5:0f304adf7acf3bd4b7c54c1394c85a4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:03:01:01 LN:7089 M5:618b80618d0a6750a82d9caf5b2b01ea AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*05:03:01:02 LN:7089 M5:198d06518fff03b2dafc0bb113efc008 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:01:01 LN:7111 M5:231c9c7d1321a266933777181a2761a4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:02:01 LN:7102 M5:739d56a7e8c44823d1a11bd4ff13f465 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:03:01 LN:7103 M5:1bfde4e12c5bac5e9e5e7e6b84582b0b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DQB1*06:09:01 LN:7102 M5:805267e877e03b8ec95319888e38c5dc AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*01:01:01 LN:10741 M5:91618decb1b3933c623070b2ccbe52a6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*01:02:01 LN:11229 M5:9efa1a8356e55f6be83b4ddb84833e4b AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*03:01:01:01 LN:13908 M5:411919f8128149a1f5099cdd22d276ab AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*03:01:01:02 LN:13426 M5:869ae29cc3f279d7fc43e27249a53e8a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*04:03:01 LN:15246 M5:ce0de8afd561fb1fb0d3acce94386a27 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*07:01:01:01 LN:16110 M5:4063054a8189fbc81248b0f37b8273fd AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*07:01:01:02 LN:16120 M5:a4b1a49cfe8fb2c98c178c02b6c64ed4 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*08:03:02 LN:13562 M5:dc6eb484555ba796b15b9b91aa1a9ec6 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*09:21 LN:16039 M5:cad793cbc22699d1cca3101b5a55437d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*10:01:01 LN:13501 M5:91dcd8c149b00a3edb1afa43a1cc6346 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*11:01:01 LN:13921 M5:07cefc23572c21731a2804c5d44fcf55 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*11:01:02 LN:13931 M5:f47cd478ee5be3ff048069adbbb5c101 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*11:04:01 LN:13919 M5:fc86714e3d7b9503d74e40d92f08cd7a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*12:01:01 LN:13404 M5:31f08980f62b68be96334f3cafc3e7c2 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*12:17 LN:11260 M5:b0b7bea536479c8e61164e1475203038 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*13:01:01 LN:13935 M5:937994edc4b4760eb13cbf451c3f3bbe AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*13:02:01 LN:13941 M5:6a124566ab0a103d525d2fcf1292ce15 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*14:05:01 LN:13933 M5:10890137f738be0861b6ba128cfb953d AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*14:54:01 LN:13936 M5:2b67be4ed005b3f3040e3c72bfc65c0c AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:01 LN:11080 M5:d22cd7f323b0e51abb025a4dec827aa5 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:02 LN:11571 M5:5e3280587aa6f38dd9a282e9bf21287e AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:03 LN:11056 M5:d548f5e5798e09c869571ea8c660c983 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:01:01:04 LN:11056 M5:3bb2753595aaf099a490a7ce1e042fce AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:02:01 LN:10313 M5:2deab6035ce8cc2e09db20698cf1f117 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:03:01:01 LN:11567 M5:e6a26b767a62b282e0db211bbc9a7363 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*15:03:01:02 LN:11569 M5:4e0d459b9bd15bff8645de84334e3d25 AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +@SQ SN:HLA-DRB1*16:02:01 LN:11005 M5:4a972df76bd3ee2857b87bd5be5ea00a AS:20 UR:/seq/references/kendrix/v0/kendrix.fasta SP:Homo sapiens +chrY 1 57227415 + . From 4c392efdc7fe57c25f7fa659f2cfea4cb503d626 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 25 Nov 2022 14:19:56 +0100 Subject: [PATCH 0845/1921] Added interval list files --- conf/genomes.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/genomes.config b/conf/genomes.config index 9e456cfc..96eac4c5 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -19,6 +19,8 @@ params { gnomad_vcf = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" gnomad_af = "" gnomad_af_idx = "" + intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" + intervals_y = "${projectDir}/assets/Y_grch37.interval_list" known_dbsnp = "" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" @@ -52,6 +54,8 @@ params { gnomad_vcf = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" gnomad_af_idx = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" + intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" + intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" known_dbsnp_tbi = "" ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" From 6dab3f4d69f765fa539a3920323ba7d7918188f3 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 25 Nov 2022 14:24:20 +0100 Subject: [PATCH 0846/1921] Save output from wgsmetrics --- conf/modules.config | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 9c762723..196e045f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -469,6 +469,37 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + + withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { + path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } } // From 86166bc99a9bf85962a12edaab4a079a2425b62b Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 25 Nov 2022 14:33:39 +0100 Subject: [PATCH 0847/1921] Added wgsmetrics --- subworkflows/local/qc_bam.nf | 40 ++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 550ed3e8..75b213a9 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -2,12 +2,16 @@ // A quality check subworkflow for processed bams. // -include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/picard/collectmultiplemetrics/main' -include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/picard/collecthsmetrics/main' -include { QUALIMAP_BAMQC } from '../../modules/nf-core/qualimap/bamqc/main' -include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' -include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' -include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' +include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/picard/collectmultiplemetrics/main' +include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/picard/collecthsmetrics/main' +include { QUALIMAP_BAMQC } from '../../modules/nf-core/qualimap/bamqc/main' +include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' +include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' +include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' +include { PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/modules/picard/collectwgsmetrics/main' +include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/modules/picard/collectwgsmetrics/main' +include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS } from '../../modules/local/sentieon/wgsmetricsalgo' +include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../modules/local/sentieon/wgsmetricsalgo' workflow QC_BAM { @@ -19,6 +23,9 @@ workflow QC_BAM { bait_intervals // path: bait.intervals_list target_intervals // path: target.intervals_list chrom_sizes // path: chrom.sizes + intervals_wgs // path: genome.intervals_wgs + intervals_y // path: genome.intervals_y + aligner // string: params.aligner main: ch_versions = Channel.empty() @@ -47,6 +54,25 @@ workflow QC_BAM { MOSDEPTH (mosdepth_input_bams,[],[]) ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) + // COLLECT WGS METRICS + if ( aligner == "bwamem2" ) { + PICARD_COLLECTWGSMETRICS ( bam, fasta, intervals_wgs ) + ch_cov = PICARD_COLLECTWGSMETRICS.out.metrics + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions) + PICARD_COLLECTWGSMETRICS_Y ( bam, fasta, intervals_y ) + ch_cov_y = PICARD_COLLECTWGSMETRICS_Y.out.metrics + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) + } else if ( aligner == "sentieon" ) { + SENTIEON_WGSMETRICS ( bam, fasta ) + ch_cov = SENTIEON_WGSMETRICS.out.metrics + ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS.out.versions) + SENTIEON_WGSMETRICS_Y ( bam, fasta ) + ch_cov_y = SENTIEON_WGSMETRICS_Y.out.metrics + ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS_Y.out.versions) + } else { + exit 1, 'Please provide a valid aligner!' + } + emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] @@ -54,6 +80,8 @@ workflow QC_BAM { tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(*.d4) ] + cov = ch_cov // channel: [ val(meta), path(metrics) ] + cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From c188c5600e94215bb65f76d407a899f595706200 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 25 Nov 2022 14:35:16 +0100 Subject: [PATCH 0848/1921] Added intervals for Sentieon wgsmetricsalgo --- conf/modules.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 196e045f..149079f7 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -486,6 +486,7 @@ process { } withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { + ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics" }, mode: params.publish_dir_mode, @@ -494,6 +495,7 @@ process { } withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { + ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics" }, mode: params.publish_dir_mode, From 7417b168fdfe1c8dcb2555df70db77f5430f3bce Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 25 Nov 2022 16:10:19 +0100 Subject: [PATCH 0849/1921] Add collectwgsmetrics module --- modules.json | 4 ++ .../nf-core/picard/collectwgsmetrics/main.nf | 56 +++++++++++++++++++ .../nf-core/picard/collectwgsmetrics/meta.yml | 47 ++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 modules/nf-core/picard/collectwgsmetrics/main.nf create mode 100644 modules/nf-core/picard/collectwgsmetrics/meta.yml diff --git a/modules.json b/modules.json index 5c871d01..b96d476b 100644 --- a/modules.json +++ b/modules.json @@ -185,6 +185,10 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, + "picard/collectwgsmetrics": { + "branch": "master", + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + }, "picard/liftovervcf": { "branch": "master", "git_sha": "3d5d18db1b39e1133505ae2fa2a062b0073c8a6a" diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf new file mode 100644 index 00000000..2b0aeefe --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -0,0 +1,56 @@ +process PICARD_COLLECTWGSMETRICS { + tag "$meta.id" + label 'process_medium' + + conda (params.enable_conda ? "bioconda::picard=2.27.4 r::r-base" : null) + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + + input: + tuple val(meta), path(bam) + path fasta + + output: + tuple val(meta), path("*_metrics"), emit: metrics + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard CollectWgsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + CollectWgsMetrics \\ + $args \\ + --INPUT $bam \\ + --OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\ + --REFERENCE_SEQUENCE ${fasta} + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard CollectWgsMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.CollectWgsMetrics.coverage_metrics + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard CollectWgsMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml new file mode 100644 index 00000000..d6c3d012 --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -0,0 +1,47 @@ +name: picard_collectwgsmetrics +description: Collect metrics about coverage and performance of whole genome sequencing (WGS) experiments. +keywords: + - alignment + - metrics + - statistics + - quality + - bam +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - fasta: + type: file + description: Genome fasta file +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - metrics: + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@flowuenne" + - "@lassefolkersen" From ed7d06a33ecfe7c06fb5ebfb403cf2e980ad5cc2 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Mon, 28 Nov 2022 13:31:17 +0100 Subject: [PATCH 0850/1921] Updated collectwgsmetrics module --- modules.json | 2 +- modules/nf-core/picard/collectwgsmetrics/main.nf | 9 ++++++--- modules/nf-core/picard/collectwgsmetrics/meta.yml | 3 +++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index b96d476b..888da1e7 100644 --- a/modules.json +++ b/modules.json @@ -187,7 +187,7 @@ }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "9c92f40092d7a9112953b7571f7021f65740bf7f" }, "picard/liftovervcf": { "branch": "master", diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 2b0aeefe..62074d40 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -10,6 +10,7 @@ process PICARD_COLLECTWGSMETRICS { input: tuple val(meta), path(bam) path fasta + path intervallist output: tuple val(meta), path("*_metrics"), emit: metrics @@ -19,9 +20,10 @@ process PICARD_COLLECTWGSMETRICS { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def avail_mem = 3 + def interval = intervallist ? "--INTERVALS ${intervallist}" : '' if (!task.memory) { log.info '[Picard CollectWgsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { @@ -34,7 +36,8 @@ process PICARD_COLLECTWGSMETRICS { $args \\ --INPUT $bam \\ --OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\ - --REFERENCE_SEQUENCE ${fasta} + --REFERENCE_SEQUENCE ${fasta} \\ + $interval cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index d6c3d012..b9dc37af 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -27,6 +27,9 @@ input: - fasta: type: file description: Genome fasta file + - intervallist: + type: file + description: Picard Interval List. Defines which contigs to include. Can be generated from a BED file with GATK BedToIntervalList. output: - meta: type: map From ded88590bbcf03c9c9248ecc44d1de644eee42a6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 28 Nov 2022 14:53:30 +0100 Subject: [PATCH 0851/1921] update config --- conf/modules.config | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 9c762723..3675ee6e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -484,7 +484,7 @@ process { ] } - withName: STRANGER { + withName: '.*CALL_REPEAT_EXPANSIONS:STRANGER' { publishDir = [ path: { "${params.outdir}/stranger" }, mode: params.publish_dir_mode, @@ -500,6 +500,7 @@ process { process { withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { + ext.when = { params.variant_caller.equals("deepvariant") } ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } ext.prefix = { "${meta.id}_deepvar" } publishDir = [ @@ -510,6 +511,7 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:GLNEXUS' { + ext.when = { params.variant_caller.equals("deepvariant") } ext.args = '--config DeepVariant_unfiltered' publishDir = [ enabled: false @@ -517,6 +519,7 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:SPLIT_MULTIALLELICS_GL' { + ext.when = { params.variant_caller.equals("deepvariant") } ext.args = '--output-type z --multiallelics -both' publishDir = [ enabled: false @@ -524,6 +527,7 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { + ext.when = { params.variant_caller.equals("deepvariant") } ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ @@ -534,6 +538,7 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { + ext.when = { params.variant_caller.equals("deepvariant") } publishDir = [ path: { "${params.outdir}/glnexus" }, mode: params.publish_dir_mode, @@ -631,18 +636,21 @@ process { process { withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { + ext.when = { params.annotate_sv_switch } publishDir = [ enabled: false, ] } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { + ext.when = { params.annotate_sv_switch } publishDir = [ enabled: false, ] } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { + ext.when = { params.annotate_sv_switch } ext.prefix = { "${meta.id}_view" } publishDir = [ enabled: false, @@ -650,6 +658,7 @@ process { } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { + ext.when = { params.annotate_sv_switch } ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', '--distance 5000', @@ -674,16 +683,19 @@ process { process { withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { + ext.when = { params.annotate_sv_switch } ext.args = { (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' } } withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + ext.when = { params.annotate_sv_switch } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { + ext.when = { params.annotate_sv_switch } publishDir = [ path: { "${params.outdir}/genmod" }, mode: params.publish_dir_mode, @@ -698,6 +710,7 @@ process { process { withName: '.*ANNOTATE_SNVS:VCFANNO' { + ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, @@ -706,6 +719,7 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { + ext.when = { params.annotate_snv_switch } ext.args = { "--samples ${meta.id} --skip-indels " } publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -715,6 +729,7 @@ process { } withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { + ext.when = { params.annotate_snv_switch } ext.args = { "--v14 " } publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -724,6 +739,7 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } publishDir = [ @@ -734,6 +750,7 @@ process { } withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { + ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_${intervals.simpleName}" } ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} publishDir = [ @@ -745,6 +762,7 @@ process { } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { + ext.when = { params.annotate_snv_switch } ext.prefix = { "${vcf.simpleName}_vep" } ext.args = [ '--plugin LoFtool,vep_cache/LoFtool_scores.txt', @@ -764,6 +782,7 @@ process { } withName: '.*ANNOTATE_SNVS:ZIP_TABIX_VEP' { + ext.when = { params.annotate_snv_switch } ext.prefix = { "${input.simpleName}" } publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -778,20 +797,24 @@ process { process { withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { + ext.when = { params.annotate_snv_switch } ext.args = { (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' } } withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.when = { params.annotate_snv_switch } ext.args = " --whole_gene " } withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { + ext.when = { params.annotate_snv_switch } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { + ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/genmod" }, mode: params.publish_dir_mode, From a2bc096c817426509c5b5a72b099f0e707066b1e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 30 Nov 2022 17:13:20 +0100 Subject: [PATCH 0852/1921] update svdb --- modules.json | 14 +++++++------- modules/nf-core/svdb/merge/main.nf | 6 +++--- modules/nf-core/svdb/query/main.nf | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/modules.json b/modules.json index 5c871d01..218f9c2b 100644 --- a/modules.json +++ b/modules.json @@ -35,7 +35,7 @@ }, "bwamem2/mem": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "653588be2a4aadab487b530643dbc9baf7a485c4" }, "cat/cat": { "branch": "master", @@ -75,7 +75,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "3dd73937b084b547f9272bc901e0f120a7913fd8" + "git_sha": "810e8f2603ec38401d49a4aaed06f6d058745552" }, "gatk4/bedtointervallist": { "branch": "master", @@ -99,7 +99,7 @@ }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "c25943553f62be5f907e3c12c42eaf0a1b40746d" }, "gatk4/mutect2": { "branch": "master", @@ -179,11 +179,11 @@ }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2" }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2" }, "picard/liftovervcf": { "branch": "master", @@ -231,11 +231,11 @@ }, "svdb/merge": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7" }, "svdb/query": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7" }, "tabix/bgziptabix": { "branch": "master", diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 477dbb0d..7dd92653 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -1,10 +1,10 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.1 bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::svdb=2.8.1 bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:56d0a468970fbb474d92f0591abcf677757fb370-0': - 'quay.io/biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:56d0a468970fbb474d92f0591abcf677757fb370-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0': + 'quay.io/biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0' }" input: tuple val(meta), path(vcfs) diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index dbab5259..aee9aad1 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -2,10 +2,10 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) + conda (params.enable_conda ? "bioconda::svdb=2.8.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.8.1--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.8.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcf) @@ -16,7 +16,7 @@ process SVDB_QUERY { path (vcf_dbs) output: - tuple val(meta), path("*_query.vcf"), emit: vcf + tuple val(meta), path("*_query.vcf") , emit: vcf path "versions.yml" , emit: versions when: From efe969468a4fce61602c6288de78e4c1e954ca96 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 00:01:05 +0100 Subject: [PATCH 0853/1921] update modules --- main.nf | 1 + modules.json | 16 ++++++------ modules/nf-core/bwamem2/mem/main.nf | 2 +- modules/nf-core/fastqc/main.nf | 10 ++++++-- modules/nf-core/gatk4/mergevcfs/main.nf | 2 +- modules/nf-core/gatk4/mergevcfs/meta.yml | 9 ++++--- .../nf-core/picard/collecthsmetrics/main.nf | 6 ++--- .../nf-core/picard/collecthsmetrics/meta.yml | 20 ++++++++++++--- .../picard/collectmultiplemetrics/main.nf | 6 ++--- .../picard/collectmultiplemetrics/meta.yml | 18 +++++++++++-- modules/nf-core/svdb/merge/main.nf | 6 ++--- modules/nf-core/svdb/query/main.nf | 8 +++--- modules/nf-core/vcfanno/main.nf | 13 +++++----- modules/nf-core/vcfanno/meta.yml | 16 ++++++------ nextflow_schema.json | 8 ++++++ subworkflows/local/analyse_MT.nf | 14 ++++++----- subworkflows/local/annotate_snvs.nf | 4 ++- .../local/mitochondria/merge_annotate_MT.nf | 17 +++++++------ subworkflows/local/prepare_references.nf | 1 + subworkflows/local/qc_bam.nf | 5 ++-- workflows/raredisease.nf | 25 ++++++++++++------- 21 files changed, 135 insertions(+), 72 deletions(-) diff --git a/main.nf b/main.nf index c2b9c872..5143e530 100644 --- a/main.nf +++ b/main.nf @@ -48,6 +48,7 @@ params.variant_catalog = WorkflowMain.getGenomeAttribute(params, params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filters') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') +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') diff --git a/modules.json b/modules.json index 5c871d01..90dd0004 100644 --- a/modules.json +++ b/modules.json @@ -35,7 +35,7 @@ }, "bwamem2/mem": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "653588be2a4aadab487b530643dbc9baf7a485c4" }, "cat/cat": { "branch": "master", @@ -75,7 +75,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "3dd73937b084b547f9272bc901e0f120a7913fd8" + "git_sha": "810e8f2603ec38401d49a4aaed06f6d058745552" }, "gatk4/bedtointervallist": { "branch": "master", @@ -99,7 +99,7 @@ }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "c25943553f62be5f907e3c12c42eaf0a1b40746d" }, "gatk4/mutect2": { "branch": "master", @@ -179,11 +179,11 @@ }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2" }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2" }, "picard/liftovervcf": { "branch": "master", @@ -231,11 +231,11 @@ }, "svdb/merge": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7" }, "svdb/query": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7" }, "tabix/bgziptabix": { "branch": "master", @@ -263,7 +263,7 @@ }, "vcfanno": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "3a15c72f700eacc8f2cdb3b85e8b5311420437bd" } } } diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf index f8bad4b9..84b99dfa 100644 --- a/modules/nf-core/bwamem2/mem/main.nf +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -25,7 +25,7 @@ process BWAMEM2_MEM { def prefix = task.ext.prefix ?: "${meta.id}" def samtools_command = sort_bam ? 'sort' : 'view' """ - INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` bwa-mem2 \\ mem \\ diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 3bebb240..47fd0e58 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -21,9 +21,15 @@ process FASTQC { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + // Make list of old name and new name pairs to use for renaming in the bash while loop + def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] } + def rename_to = old_new_pairs*.join(' ').join(' ') + def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') """ - printf "%s\\n" $reads | while read f; do [[ \$f =~ ^${prefix}.* ]] || ln -s \$f ${prefix}_\$f ; done - fastqc $args --threads $task.cpus ${prefix}* + 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 cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf index 0b065b5b..08fb3969 100644 --- a/modules/nf-core/gatk4/mergevcfs/main.nf +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -9,7 +9,7 @@ process GATK4_MERGEVCFS { input: tuple val(meta), path(vcf) - path dict + tuple val(meta2), path(dict) output: tuple val(meta), path('*.vcf.gz'), emit: vcf diff --git a/modules/nf-core/gatk4/mergevcfs/meta.yml b/modules/nf-core/gatk4/mergevcfs/meta.yml index 3ebce0b9..db8c4cb0 100644 --- a/modules/nf-core/gatk4/mergevcfs/meta.yml +++ b/modules/nf-core/gatk4/mergevcfs/meta.yml @@ -23,13 +23,16 @@ input: type: list description: Two or more VCF files pattern: "*.{vcf,vcf.gz}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] - ref_dict: type: file description: Optional Sequence Dictionary as input pattern: "*.dict" - - use_ref_dict: - type: boolean - description: Specify whether or not to use a given reference dictionary + output: - vcf: type: file diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index 6cc04dbf..d2414cc6 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -8,9 +8,9 @@ process PICARD_COLLECTHSMETRICS { 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: - tuple val(meta), path(bam) - path fasta - path fai + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) path bait_intervals path target_intervals diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml index dc9d647a..7e045c05 100644 --- a/modules/nf-core/picard/collecthsmetrics/meta.yml +++ b/modules/nf-core/picard/collecthsmetrics/meta.yml @@ -26,14 +26,28 @@ input: e.g. [ id:'test', single_end:false ] - bam: type: file - description: An aligned BAM/SAM file - pattern: "*.{bam,sam}" + description: An aligned BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Optional aligned BAM/CRAM/SAM file index + pattern: "*.{bai,crai,sai}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: | A reference file to calculate dropout metrics measuring reduced representation of reads. Optional input. - pattern: "*.fasta" + pattern: "*.{fa,fasta,fna}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Index of FASTA file. Only needed when fasta is supplied. diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 63f4e872..6f5e6f1e 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -8,9 +8,9 @@ process PICARD_COLLECTMULTIPLEMETRICS { 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: - tuple val(meta), path(bam) - path fasta - path fai + tuple val(meta) , path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*_metrics"), emit: metrics diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml index c11b02cf..22656080 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml @@ -23,11 +23,25 @@ input: e.g. [ id:'test', single_end:false ] - bam: type: file - description: BAM file - pattern: "*.{bam}" + description: SAM/BAM/CRAM file + pattern: "*.{sam,bam,cram}" + - bai: + type: file + description: Optional SAM/BAM/CRAM file index + pattern: "*.{sai,bai,crai}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] - fasta: type: file description: Genome fasta file + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] - fai: type: file description: Index of FASTA file. Only needed when fasta is supplied. diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 477dbb0d..7dd92653 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -1,10 +1,10 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.1 bioconda::samtools=1.15.1" : null) + conda (params.enable_conda ? "bioconda::svdb=2.8.1 bioconda::samtools=1.16.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:56d0a468970fbb474d92f0591abcf677757fb370-0': - 'quay.io/biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:56d0a468970fbb474d92f0591abcf677757fb370-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0': + 'quay.io/biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0' }" input: tuple val(meta), path(vcfs) diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index dbab5259..aee9aad1 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -2,10 +2,10 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.6.1" : null) + conda (params.enable_conda ? "bioconda::svdb=2.8.1" : null) container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/svdb:2.6.1--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.6.1--py39h5371cbf_0' }" + 'https://depot.galaxyproject.org/singularity/svdb:2.8.1--py39h5371cbf_0': + 'quay.io/biocontainers/svdb:2.8.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcf) @@ -16,7 +16,7 @@ process SVDB_QUERY { path (vcf_dbs) output: - tuple val(meta), path("*_query.vcf"), emit: vcf + tuple val(meta), path("*_query.vcf") , emit: vcf path "versions.yml" , emit: versions when: diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index 6f264af2..72a96490 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -10,10 +10,11 @@ process VCFANNO { input: tuple val(meta), path(vcf), path(tbi) path toml - path resource_dir + path lua + path resources output: - tuple val(meta), path("*_annotated.vcf"), emit: vcf + tuple val(meta), path("*.vcf"), emit: vcf path "versions.yml" , emit: versions when: @@ -22,15 +23,15 @@ process VCFANNO { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def lua_cmd = lua ? "--lua ${lua}" : "" """ - ln -sf $resource_dir/* \$(pwd) - vcfanno \\ -p $task.cpus \\ $args \\ + $lua \\ $toml \\ $vcf \\ - > ${prefix}_annotated.vcf + > ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -41,7 +42,7 @@ process VCFANNO { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_annotated.vcf + touch ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/vcfanno/meta.yml b/modules/nf-core/vcfanno/meta.yml index 1c6893ea..ea4dacce 100644 --- a/modules/nf-core/vcfanno/meta.yml +++ b/modules/nf-core/vcfanno/meta.yml @@ -14,7 +14,7 @@ tools: documentation: https://github.com/brentp/vcfanno#vcfanno tool_dev_url: https://github.com/brentp/vcfanno doi: "10.1186/s13059-016-0973-5" - licence: ["MIT"] + license: ["MIT"] input: - meta: @@ -32,14 +32,15 @@ input: pattern: "*.vcf.gz.tbi" - toml: type: file - description: configuration file + description: configuration file with reference file basenames pattern: "*.toml" - - resource_dir: + - lua: type: file - description: | - This directory contains referenced files in the TOML config, - and the corresponding indicies e.g. exac.vcf.gz + exac.vcf.gz.tbi, - with exception to the lua file. + description: Lua file for custom annotations + pattern: "*.lua" + - resources: + type: list + description: List of reference files defined in toml config, must also include indices. output: - meta: @@ -58,3 +59,4 @@ output: authors: - "@projectoriented" + - "@matthdsm" diff --git a/nextflow_schema.json b/nextflow_schema.json index 54bb1213..27efb54c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -297,6 +297,14 @@ "fa_icon": "fas fa-file-csv", "hidden": true }, + "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 + }, "vep_cache": { "type": "string", "description": "Path to vep's cache directory.", diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 1ae3259a..ad1d0c3c 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -11,9 +11,10 @@ workflow ANALYSE_MT { take: bam // channel: [ val(meta), file(bam), file(bai) ] genome_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] - genome_fasta_no_meta // channel: [ genome.fasta ] genome_fasta_meta // channel: [ [], genome.fasta ] - genome_dict // channel: [ genome.dict ] + genome_fasta_no_meta // channel: [ genome.fasta ] + genome_dict_meta // channel: [ genome.dict ] + genome_dict_no_meta // channel: [ genome.dict ] genome_fai // channel: [ genome.fai ] mt_intervals // channel: [ file(non_control_region.chrM.interval_list) ] shift_mt_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] @@ -31,7 +32,7 @@ workflow ANALYSE_MT { ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT - CONVERT_MT_BAM_TO_FASTQ ( bam , genome_fasta_meta, genome_fai, genome_dict, ) + CONVERT_MT_BAM_TO_FASTQ ( bam , genome_fasta_meta, genome_fai, genome_dict_no_meta, ) ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions)// Outputs bam files //STEP 2.1: MT ALIGNMENT AND VARIANT CALLING @@ -40,7 +41,7 @@ workflow ANALYSE_MT { CONVERT_MT_BAM_TO_FASTQ.out.bam, genome_bwamem2_index, genome_fasta_no_meta, - genome_dict, + genome_dict_no_meta, genome_fai, mt_intervals ) @@ -60,7 +61,7 @@ workflow ANALYSE_MT { // STEP 2.3: PICARD_LIFTOVERVCF PICARD_LIFTOVERVCF ( ALIGN_AND_CALL_MT_SHIFT.out.vcf, - genome_dict, + genome_dict_no_meta, shift_mt_backchain, genome_fasta_no_meta) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) @@ -70,7 +71,8 @@ workflow ANALYSE_MT { ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, genome_fasta_no_meta, - genome_dict, + genome_dict_meta, + genome_dict_no_meta, genome_fai, vep_genome, vep_cache_version, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 4f1bfb6a..52fd683d 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -19,6 +19,7 @@ workflow ANNOTATE_SNVS { take: vcf vcfanno_resource_dir + vcfanno_lua vcfanno_toml vep_genome vep_cache_version @@ -31,6 +32,7 @@ workflow ANNOTATE_SNVS { main: ch_versions = Channel.empty() ch_toml = Channel.fromPath(vcfanno_toml) + ch_lua = Channel.fromPath(vcfanno_lua) ch_vcf_scatter_in = Channel.empty() ch_vep_in = Channel.empty() @@ -71,7 +73,7 @@ workflow ANNOTATE_SNVS { // // annotate vcfanno // - VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, ch_toml, vcfanno_resource_dir) + VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, ch_toml, ch_lua, vcfanno_resource_dir) ch_versions = ch_versions.mix(VCFANNO.out.versions) 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 15adaba5..7946f681 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -17,15 +17,16 @@ include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../. workflow MERGE_ANNOTATE_MT { take: - vcf1 // channel: [ val(meta), path('*.vcf.gz') ] - vcf2 // channel: [ val(meta), path('*.vcf.gz') ] - genome_fasta // channel: [ genome.fasta ] - genome_dict // channel: [ genome.dict ] - genome_fai // channel: [ genome.fai ] + vcf1 // channel: [ val(meta), path('*.vcf.gz') ] + vcf2 // channel: [ val(meta), path('*.vcf.gz') ] + genome_fasta // channel: [ genome.fasta ] + genome_dict_meta // channel: [ genome.dict ] + genome_dict_no_meta // channel: [ genome.dict ] + genome_fai // channel: [ genome.fai ] vep_genome vep_cache_version vep_cache - case_info // channel: [ val(case_info) ] + case_info // channel: [ val(case_info) ] main: ch_versions = Channel.empty() @@ -36,7 +37,7 @@ workflow MERGE_ANNOTATE_MT { [meta, [vcf1, vcf2]] } - GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, genome_dict) + GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, genome_dict_meta) ch_versions = ch_versions.mix(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.versions.first()) // Filtering Variants @@ -44,7 +45,7 @@ workflow MERGE_ANNOTATE_MT { GATK4_VARIANTFILTRATION_MT(ch_filt_vcf, genome_fasta, genome_fai, - genome_dict ) + genome_dict_no_meta ) ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) // Spliting multiallelic calls diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index d3186d7f..e998e750 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -108,6 +108,7 @@ workflow PREPARE_REFERENCES { gnomad_vcf = CHECK_VCF.out.vcf.collect() known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() sequence_dict = GATK_SD.out.dict.collect() + sequence_dict_meta = GATK_SD.out.dict.map {it -> [[id:it[0].simpleName], it]}.collect() sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() target_intervals = GATK_BILT.out.interval_list.collect{it[1]}.collect() diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 550ed3e8..f19ff111 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -14,6 +14,7 @@ workflow QC_BAM { take: bam // channel: [ val(meta), path(bam) ] bai // channel: [ val(meta), path(bai) ] + bam_bai fasta // path: genome.fasta fai // path: genome.fasta.fai bait_intervals // path: bait.intervals_list @@ -24,11 +25,11 @@ workflow QC_BAM { ch_versions = Channel.empty() // COLLECT MULTIPLE METRICS - PICARD_COLLECTMULTIPLEMETRICS ( bam, fasta, fai ) + PICARD_COLLECTMULTIPLEMETRICS ( bam_bai, fasta, fai ) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) // COLLECT HS METRICS - PICARD_COLLECTHSMETRICS ( bam, fasta, fai, bait_intervals, target_intervals ) + PICARD_COLLECTHSMETRICS ( bam_bai, fasta, fai, bait_intervals, target_intervals ) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) // QUALIMAP BAMQC diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1c1601e3..74d43281 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -44,6 +44,7 @@ def checkPathParamList = [ params.svdb_query_dbs, params.variant_catalog, params.vep_filters, + params.vcfanno_lua, params.vcfanno_resources, params.vcfanno_toml, params.vep_cache @@ -209,7 +210,7 @@ workflow RAREDISEASE { ch_genome_fai_no_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() : ( ch_references.fasta_fai ?: Channel.empty() ) ch_genome_fai_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : ( ch_references.fasta_fai_meta ?: Channel.empty() ) + : ( ch_references.fasta_fai_meta ?: Channel.empty() ) ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() : ( ch_references.fasta_fai_mt_shift ?: Channel.empty() ) ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() @@ -220,8 +221,10 @@ workflow RAREDISEASE { : Channel.value([]) ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).collect() : ( ch_references.known_dbsnp_tbi ?: Channel.empty() ) - ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() + ch_sequence_dictionary_no_meta = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() : ( ch_references.sequence_dict ?: Channel.empty() ) + 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 ?: Channel.empty() ) ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).collect() : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) ch_target_bed = ch_references.target_bed @@ -230,9 +233,10 @@ workflow RAREDISEASE { : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) + ch_sequence_dictionary_meta.view() // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( - ch_sequence_dictionary, + ch_sequence_dictionary_no_meta, ch_genome_fai_meta, ch_genome_fai_no_meta, ch_genome_fasta_no_meta @@ -260,8 +264,9 @@ workflow RAREDISEASE { QC_BAM ( ch_mapped.marked_bam, ch_mapped.marked_bai, - ch_genome_fasta_no_meta, - ch_genome_fai_no_meta, + ch_mapped.bam_bai, + ch_genome_fasta_meta, + ch_genome_fai_meta, ch_bait_intervals, ch_target_intervals, ch_chrom_sizes @@ -315,7 +320,7 @@ workflow RAREDISEASE { file(params.gens_pon), file(params.gens_gnomad_pos), CHECK_INPUT.out.case_info, - ch_sequence_dictionary + ch_sequence_dictionary_no_meta ) ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) } @@ -328,7 +333,7 @@ workflow RAREDISEASE { params.vep_cache_version, ch_vep_cache, ch_genome_fasta_no_meta, - ch_sequence_dictionary + ch_sequence_dictionary_no_meta ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) @@ -357,9 +362,10 @@ workflow RAREDISEASE { ANALYSE_MT ( ch_mapped.bam_bai, ch_bwamem2_index, - ch_genome_fasta_no_meta, ch_genome_fasta_meta, - ch_sequence_dictionary, + ch_genome_fasta_no_meta, + ch_sequence_dictionary_meta, + ch_sequence_dictionary_no_meta, ch_genome_fai_no_meta, ch_mt_intervals, ch_bwamem2_index_mt_shift, @@ -382,6 +388,7 @@ workflow RAREDISEASE { ANNOTATE_SNVS ( ch_vcf, ch_vcfanno_resources, + params.vcfanno_lua, params.vcfanno_toml, params.genome, params.vep_cache_version, From fb370fc84d5a0384f3518dcf431e03c275a2b783 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 00:12:24 +0100 Subject: [PATCH 0854/1921] update config --- conf/modules.config | 1 + workflows/raredisease.nf | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index b411785c..037cff3b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -736,6 +736,7 @@ process { process { withName: '.*ANNOTATE_SNVS:VCFANNO' { + ext.prefix = { "${meta.id}_vcfanno" } ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/snv_annotation" }, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 74d43281..69630725 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -233,7 +233,6 @@ workflow RAREDISEASE { : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) - ch_sequence_dictionary_meta.view() // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( ch_sequence_dictionary_no_meta, From a5340e02c6f85daceec5c61a4bc376d657a26c26 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 02:54:42 +0100 Subject: [PATCH 0855/1921] vcfanno fix --- subworkflows/local/prepare_references.nf | 7 ------- workflows/raredisease.nf | 7 ++----- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index e998e750..2de97607 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -19,7 +19,6 @@ include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modul include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' -include { UNTAR as UNTAR_VCFANNO } from '../../modules/nf-core/untar/main' workflow PREPARE_REFERENCES { @@ -33,7 +32,6 @@ workflow PREPARE_REFERENCES { gnomad_vcf_in known_dbsnp target_bed - vcfanno_resources // [mandatory] vcfanno resource file main: ch_versions = Channel.empty() @@ -72,9 +70,6 @@ workflow PREPARE_REFERENCES { .set { ch_bait_intervals_cat_in } CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) - // Untar vcfanno - UNTAR_VCFANNO ( vcfanno_resources ) - // Gather versions ch_versions = ch_versions.mix(BWA_INDEX.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_GENOME.out.versions) @@ -92,7 +87,6 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(TABIX_PBT.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) ch_versions = ch_versions.mix(GATK_ILT.out.versions) - ch_versions = ch_versions.mix(UNTAR_VCFANNO.out.versions) emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() @@ -112,7 +106,6 @@ workflow PREPARE_REFERENCES { sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() target_intervals = GATK_BILT.out.interval_list.collect{it[1]}.collect() - vcfanno_resources = UNTAR_VCFANNO.out.untar.map { id, resources -> [resources] }.collect() versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 69630725..c4ad6d44 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -168,7 +168,7 @@ workflow RAREDISEASE { : Channel.value([]) ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true).collect() - ch_vcfanno_resources_unprocessed = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).map{ it -> [[id:it[0].simpleName], it] }.collect() + ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources+'/*').collect() : Channel.value([]) ch_vep_cache = params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) @@ -193,8 +193,7 @@ workflow RAREDISEASE { ch_gnomad_af_tab, ch_gnomad_vcf_unprocessed, ch_known_dbsnp, - ch_target_bed_unprocessed, - ch_vcfanno_resources_unprocessed + ch_target_bed_unprocessed ) .set { ch_references } @@ -229,8 +228,6 @@ workflow RAREDISEASE { : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) ch_target_bed = ch_references.target_bed ch_target_intervals = ch_references.target_intervals - ch_vcfanno_resources = params.vcfanno_resources.endsWith('.tar.gz') ? ch_references.vcfanno_resources - : Channel.fromPath(params.vcfanno_resources).collect() ch_versions = ch_versions.mix(ch_references.versions) // CREATE CHROMOSOME BED AND INTERVALS From 67c5b5711b902cc8b3b5f519c7521b2e5fc43657 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:14:49 +0100 Subject: [PATCH 0856/1921] update vcfanno --- modules.json | 2 +- modules/nf-core/vcfanno/main.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index 90dd0004..27a894ab 100644 --- a/modules.json +++ b/modules.json @@ -263,7 +263,7 @@ }, "vcfanno": { "branch": "master", - "git_sha": "3a15c72f700eacc8f2cdb3b85e8b5311420437bd" + "git_sha": "2edbd10f12f7d3d681d2196707f15140d0e4d463" } } } diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index 72a96490..c8b432f6 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -14,8 +14,8 @@ process VCFANNO { path resources output: - tuple val(meta), path("*.vcf"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf") , emit: vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -28,7 +28,7 @@ process VCFANNO { vcfanno \\ -p $task.cpus \\ $args \\ - $lua \\ + $lua_cmd \\ $toml \\ $vcf \\ > ${prefix}.vcf From 15efc7ee38af0374ea48be94aedc8d972fbcd76e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:22:59 +0100 Subject: [PATCH 0857/1921] remove vcfanno --- conf/modules.config | 10 ------ modules.json | 4 --- modules/nf-core/untar/main.nf | 64 ---------------------------------- modules/nf-core/untar/meta.yml | 40 --------------------- 4 files changed, 118 deletions(-) delete mode 100644 modules/nf-core/untar/main.nf delete mode 100644 modules/nf-core/untar/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 037cff3b..9fdbdf90 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -150,16 +150,6 @@ process { ] } - withName: '.*PREPARE_REFERENCES:UNTAR_VCFANNO' { - ext.when = { params.vcfanno_resources && params.vcfanno_resources.endsWith('.tar.gz') } - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - ] - } - withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} publishDir = [ diff --git a/modules.json b/modules.json index 27a894ab..519add00 100644 --- a/modules.json +++ b/modules.json @@ -257,10 +257,6 @@ "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" }, - "untar": { - "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" - }, "vcfanno": { "branch": "master", "git_sha": "2edbd10f12f7d3d681d2196707f15140d0e4d463" diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf deleted file mode 100644 index 71eea7b2..00000000 --- a/modules/nf-core/untar/main.nf +++ /dev/null @@ -1,64 +0,0 @@ -process UNTAR { - tag "$archive" - label 'process_single' - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'ubuntu:20.04' }" - - input: - tuple val(meta), path(archive) - - output: - tuple val(meta), path("$untar"), emit: untar - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - untar = archive.toString() - '.tar.gz' - - """ - mkdir output - - ## Ensures --strip-components only applied when top level of tar contents is a directory - ## If just files or multiple directories, place all in output - if [[ \$(tar -tzf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then - tar \\ - -C output --strip-components 1 \\ - -xzvf \\ - $args \\ - $archive \\ - $args2 - else - tar \\ - -C output \\ - -xzvf \\ - $args \\ - $archive \\ - $args2 - fi - - mv output ${untar} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS - """ - - stub: - untar = archive.toString() - '.tar.gz' - """ - touch $untar - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml deleted file mode 100644 index ea7a3f38..00000000 --- a/modules/nf-core/untar/meta.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: untar -description: Extract files. -keywords: - - untar - - uncompress -tools: - - untar: - description: | - Extract tar.gz files. - documentation: https://www.gnu.org/software/tar/manual/ - licence: ["GPL-3.0-or-later"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@joseespinosa" - - "@drpatelh" - - "@matthdsm" - - "@jfy133" From 1dad1dc58d7f0ac67d28f3a57b05e1c9cab9a9f2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:26:46 +0100 Subject: [PATCH 0858/1921] fix CI --- conf/test.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/test.config b/conf/test.config index 17834747..de69c031 100644 --- a/conf/test.config +++ b/conf/test.config @@ -33,6 +33,7 @@ params { // Variant annotation vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_grch38_small_test.tar.gz' vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' + vcfanno_lua = "" target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' mt_intervals = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' From 0d2c69e1191729cb9bf24e1809a7071257492684 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:39:02 +0100 Subject: [PATCH 0859/1921] move channels around --- subworkflows/local/annotate_snvs.nf | 6 ++---- workflows/raredisease.nf | 8 ++++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 52fd683d..d2269f93 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -18,7 +18,7 @@ workflow ANNOTATE_SNVS { take: vcf - vcfanno_resource_dir + vcfanno_resources vcfanno_lua vcfanno_toml vep_genome @@ -31,8 +31,6 @@ workflow ANNOTATE_SNVS { main: ch_versions = Channel.empty() - ch_toml = Channel.fromPath(vcfanno_toml) - ch_lua = Channel.fromPath(vcfanno_lua) ch_vcf_scatter_in = Channel.empty() ch_vep_in = Channel.empty() @@ -73,7 +71,7 @@ workflow ANNOTATE_SNVS { // // annotate vcfanno // - VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, ch_toml, ch_lua, vcfanno_resource_dir) + VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, vcfanno_toml, vcfanno_lua, vcfanno_resources) ch_versions = ch_versions.mix(VCFANNO.out.versions) ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c4ad6d44..2be1f5b9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -170,6 +170,10 @@ workflow RAREDISEASE { ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources+'/*').collect() : Channel.value([]) + ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(vcfanno_lua).collect() + : Channel.value([]) + ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(vcfanno_toml).collect() + : Channel.value([]) ch_vep_cache = params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters).collect() @@ -384,8 +388,8 @@ workflow RAREDISEASE { ANNOTATE_SNVS ( ch_vcf, ch_vcfanno_resources, - params.vcfanno_lua, - params.vcfanno_toml, + ch_vcfanno_lua, + ch_vcfanno_toml, params.genome, params.vep_cache_version, ch_vep_cache, From 06e9beedf847505ec836cb7cff95243e2cc995cc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:42:25 +0100 Subject: [PATCH 0860/1921] fix ci error --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2be1f5b9..99678bb1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -170,9 +170,9 @@ workflow RAREDISEASE { ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources+'/*').collect() : Channel.value([]) - ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(vcfanno_lua).collect() + ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(params.vcfanno_lua).collect() : Channel.value([]) - ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(vcfanno_toml).collect() + ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(params.vcfanno_toml).collect() : Channel.value([]) ch_vep_cache = params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) From a9935b8f038229071f22434fd8622a8787917b9b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Dec 2022 23:46:01 +0100 Subject: [PATCH 0861/1921] vcfanno fix --- conf/test.config | 2 +- nextflow_schema.json | 4 ++-- workflows/raredisease.nf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/test.config b/conf/test.config index de69c031..a20cf450 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,7 +31,7 @@ params { variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' // Variant annotation - vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_grch38_small_test.tar.gz' + vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_resources.txt' vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' vcfanno_lua = "" target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' diff --git a/nextflow_schema.json b/nextflow_schema.json index 27efb54c..d35ae8b6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -284,8 +284,8 @@ }, "vcfanno_resources": { "type": "string", - "description": "Directory path or tar.gz archive that holds resources defined within the vcfanno toml file.", - "help_text": "If no directory path is passed, default configurations will be used according to genome build within the context of the pipeline.", + "description": "Text 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 }, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 99678bb1..5957a410 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -168,7 +168,7 @@ workflow RAREDISEASE { : 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+'/*').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([]) From 43764ad996a9a89cfd15c71a8a0ce3cb4b91e6b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Dec 2022 04:25:07 +0100 Subject: [PATCH 0862/1921] format --- subworkflows/local/analyse_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index ad1d0c3c..b351476b 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -32,7 +32,7 @@ workflow ANALYSE_MT { ch_versions = Channel.empty() // STEP 1: PREPARING MT ALIGNMENT - CONVERT_MT_BAM_TO_FASTQ ( bam , genome_fasta_meta, genome_fai, genome_dict_no_meta, ) + CONVERT_MT_BAM_TO_FASTQ ( bam, genome_fasta_meta, genome_fai, genome_dict_no_meta ) ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions)// Outputs bam files //STEP 2.1: MT ALIGNMENT AND VARIANT CALLING From 63343f9e80523c9f629b9c72040a73dc6b454b2a Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 13:42:30 +0100 Subject: [PATCH 0863/1921] Fixed syntax --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index f592667b..6f1787e9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -487,6 +487,7 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { + publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, From b8718180ddb88001b341138981b951068ab9f658 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 13:48:47 +0100 Subject: [PATCH 0864/1921] Fixed path to module --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 8bd44117..23b34c05 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -8,8 +8,8 @@ include { QUALIMAP_BAMQC } from '../../m include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' -include { PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/modules/picard/collectwgsmetrics/main' -include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/modules/picard/collectwgsmetrics/main' +include { PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' +include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS } from '../../modules/local/sentieon/wgsmetricsalgo' include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../modules/local/sentieon/wgsmetricsalgo' From b6886cf0b8e1d8550659f26bcb1cc52b2d533d45 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:11:29 +0100 Subject: [PATCH 0865/1921] Modified declaration of processes --- subworkflows/local/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 23b34c05..400cedb4 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -8,7 +8,7 @@ include { QUALIMAP_BAMQC } from '../../m include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' -include { PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' +include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS } from '../../modules/local/sentieon/wgsmetricsalgo' include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../modules/local/sentieon/wgsmetricsalgo' From e857a67c5baecc9907ef5affc620088bd6350d34 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:14:55 +0100 Subject: [PATCH 0866/1921] Added interval files --- conf/test.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/test.config b/conf/test.config index a20cf450..41e4a2a4 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,6 +26,8 @@ params { // Genome references fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' mt_fasta_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' + intervals_wgs = '${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list' + intervals_y = '${projectDir}/assets/chrY_grch38.interval_list' // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' From b01aedd2612e3e7e2f453b0170106394200d6be6 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:29:37 +0100 Subject: [PATCH 0867/1921] Added params --- workflows/raredisease.nf | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5957a410..c9634655 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -23,6 +23,8 @@ def checkPathParamList = [ params.gnomad_af_idx, params.gnomad_vcf, params.input, + params.intervals_wgs, + params.intervals_y, params.known_dbsnp, params.known_dbsnp_tbi, params.known_indels, @@ -142,6 +144,10 @@ workflow RAREDISEASE { : Channel.value([[],[]]) ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).collect() : Channel.empty() + ch_intervals_wgs = params.interval_wgs ? Channel.fromPath(params.interval_wgs).collect() + : Channel.empty() + ch_intervals_y = params.interval_y ? Channel.fromPath(params.interval_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.ml_model ? Channel.fromPath(params.ml_model).collect() @@ -269,7 +275,10 @@ workflow RAREDISEASE { ch_genome_fai_meta, ch_bait_intervals, ch_target_intervals, - ch_chrom_sizes + ch_chrom_sizes, + ch_intervals_wgs, + ch_intervals_y, + params.aligner ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) From 22e35fddf2592ab19b8517efaf554edf4d24a669 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:30:45 +0100 Subject: [PATCH 0868/1921] Fixed typo --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c9634655..586b4e1b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -144,9 +144,9 @@ workflow RAREDISEASE { : Channel.value([[],[]]) ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).collect() : Channel.empty() - ch_intervals_wgs = params.interval_wgs ? Channel.fromPath(params.interval_wgs).collect() + ch_intervals_wgs = params.intervals_wgs ? Channel.fromPath(params.intervals_wgs).collect() : Channel.empty() - ch_intervals_y = params.interval_y ? Channel.fromPath(params.interval_y).collect() + 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([[],[]]) From 939dcf7b2dd2dcb4ee3266e8e8adb6de0262c962 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:34:50 +0100 Subject: [PATCH 0869/1921] added interval file lists --- main.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.nf b/main.nf index 5143e530..d617807c 100644 --- a/main.nf +++ b/main.nf @@ -26,6 +26,8 @@ params.call_interval = WorkflowMain.getGenomeAttribute(params, params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') params.gnomad_vcf = WorkflowMain.getGenomeAttribute(params, 'gnomad_vcf') +params.intervals_wgs = WorkflowMain.getGenomeAttribute(params, 'intervals_wgs') +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') From bd75c433a20a4297889ace684a3d6af01f1e889b Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:43:28 +0100 Subject: [PATCH 0870/1921] Changed syntax --- conf/test.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 41e4a2a4..bde530bc 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,8 +26,8 @@ params { // Genome references fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' mt_fasta_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' - intervals_wgs = '${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list' - intervals_y = '${projectDir}/assets/chrY_grch38.interval_list' + intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" + intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" // Variant catalog file variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' From 110071d6f4e60b7156fff238f433a12c83d4dab4 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:50:19 +0100 Subject: [PATCH 0871/1921] Added interval files --- nextflow_schema.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index d35ae8b6..f5451d2f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -126,6 +126,22 @@ "pattern": "^\\S+\\.bed(\\.gz)?\\.idx$", "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" + } + "intervals_wgs": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-file", + "pattern": "^\\S+\\.intervals?(_list)?$", + "description": "Path to the interval list of the genome (autosomes, sex chromosomes, and mitochondria).", + "help_text": "Path to the interval list of the genome. This is used to calculate genome-wide coverage statistics." + }, + "intervals_y": { + "type": "string", + "format": "path", + "fa_icon": "fas fa-file", + "pattern": "^\\S+\\.intervals?(_list)?$", + "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." }, "mt_intervals": { "type": "string", From b18e77ce3312d11d247b9f4a62111e4fe4626bfb Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 2 Dec 2022 14:53:51 +0100 Subject: [PATCH 0872/1921] Fixed syntax --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f5451d2f..fc8cae4f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -126,7 +126,7 @@ "pattern": "^\\S+\\.bed(\\.gz)?\\.idx$", "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" - } + }, "intervals_wgs": { "type": "string", "format": "path", From 8f9e18735350b2832eef983de3f717f4320f5330 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 2 Dec 2022 15:20:59 +0100 Subject: [PATCH 0873/1921] feat added test config with 2 samples --- .github/workflows/awstest.yml | 30 +++++++++++++++++++++++ conf/test2.config | 46 +++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 conf/test2.config diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 87d5182f..99d7b56d 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -27,3 +27,33 @@ jobs: with: name: Tower debug log file path: tower_action_*.log + +name: nf-core AWS test 2 samples +# This workflow can be triggered manually with the GitHub actions workflow dispatch button. +# It runs the -profile 'test2' on AWS batch + +on: + workflow_dispatch: +jobs: + run-tower: + name: Run AWS tests 2 samples + if: github.repository == 'nf-core/raredisease' + runs-on: ubuntu-latest + steps: + # Launch workflow using Tower CLI tool action + - name: Launch workflow via tower + uses: nf-core/tower-action@v3 + with: + workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} + compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} + parameters: | + { + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test-${{ github.sha }}" + } + profiles: test2,aws_tower + - uses: actions/upload-artifact@v3 + with: + name: Tower debug log file + path: tower_action_*.log \ No newline at end of file diff --git a/conf/test2.config b/conf/test2.config new file mode 100644 index 00000000..54e98638 --- /dev/null +++ b/conf/test2.config @@ -0,0 +1,46 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/raredisease -profile test2, --outdir + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Test profile 2 samples' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run on GitHub Actions + max_cpus = 2 + max_memory = '6.GB' + max_time = '2.h' + + // Input data + // TODO nf-core: Give any required params for the test so that command line flags are not needed + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_2_samples.csv' + + // Genome references + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' + mt_fasta_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' + + // Variant catalog file + variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' + + // Variant annotation + vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_resources.txt' + vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' + vcfanno_lua = "" + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' + + mt_intervals = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' + mt_intervals_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' + mt_backchain_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' + + genome = 'GRCh38' + vep_cache_version = 107 +} + From 27e9ca0dc3fbefc59130b8fa3d98d9949e61dff4 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 2 Dec 2022 15:50:13 +0100 Subject: [PATCH 0874/1921] feat added aws test --- .github/workflows/awstest.yml | 30 ------------------------------ .github/workflows/awstest2.yml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/awstest2.yml diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 99d7b56d..87d5182f 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -27,33 +27,3 @@ jobs: with: name: Tower debug log file path: tower_action_*.log - -name: nf-core AWS test 2 samples -# This workflow can be triggered manually with the GitHub actions workflow dispatch button. -# It runs the -profile 'test2' on AWS batch - -on: - workflow_dispatch: -jobs: - run-tower: - name: Run AWS tests 2 samples - if: github.repository == 'nf-core/raredisease' - runs-on: ubuntu-latest - steps: - # Launch workflow using Tower CLI tool action - - name: Launch workflow via tower - uses: nf-core/tower-action@v3 - with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} - parameters: | - { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test-${{ github.sha }}" - } - profiles: test2,aws_tower - - uses: actions/upload-artifact@v3 - with: - name: Tower debug log file - path: tower_action_*.log \ No newline at end of file diff --git a/.github/workflows/awstest2.yml b/.github/workflows/awstest2.yml new file mode 100644 index 00000000..11c87bde --- /dev/null +++ b/.github/workflows/awstest2.yml @@ -0,0 +1,30 @@ +name: nf-core AWS test 2 samples +# This workflow can be triggered manually with the GitHub actions workflow dispatch button. +# It runs the -profile 'test2' on AWS batch + +on: + workflow_dispatch: +jobs: + run-tower: + name: Run AWS tests 2 samples + if: github.repository == 'nf-core/raredisease' + runs-on: ubuntu-latest + steps: + # Launch workflow using Tower CLI tool action + - name: Launch workflow via tower + uses: nf-core/tower-action@v3 + with: + workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} + access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} + compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} + parameters: | + { + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test-${{ github.sha }}" + } + profiles: test2,aws_tower + - uses: actions/upload-artifact@v3 + with: + name: Tower debug log file + path: tower_action_*.log + \ No newline at end of file From a528d185041aee2a9a69d4d5d5b5ca90a35963ff Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 2 Dec 2022 15:51:27 +0100 Subject: [PATCH 0875/1921] feat added aws test --- .github/workflows/awstest2.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/awstest2.yml b/.github/workflows/awstest2.yml index 11c87bde..bdd091a6 100644 --- a/.github/workflows/awstest2.yml +++ b/.github/workflows/awstest2.yml @@ -20,11 +20,10 @@ jobs: workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} parameters: | { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test-${{ github.sha }}" + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test2-${{ github.sha }}" } profiles: test2,aws_tower - uses: actions/upload-artifact@v3 with: name: Tower debug log file path: tower_action_*.log - \ No newline at end of file From 8b8c770b177bea41f5f88cc43162a5c9fcc9de50 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 2 Dec 2022 16:04:34 +0100 Subject: [PATCH 0876/1921] feat added aws test --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a64a034..086c44e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,3 +37,4 @@ jobs: # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker -stub --outdir ./results + nextflow run ${GITHUB_WORKSPACE} -profile test2,docker -stub --outdir ./results2 From 55272f8eae2af800f5cc8a054ca6498885c87029 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 2 Dec 2022 16:12:14 +0100 Subject: [PATCH 0877/1921] feat added aws test --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 086c44e2..e76fc7e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,4 +37,10 @@ jobs: # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker -stub --outdir ./results + + - name: Run pipeline with test data + # TODO nf-core: You can customise CI pipeline run tests as required + # For example: adding multiple test runs with different parameters + # Remember that you can parallelise this by using strategy.matrix + run: | nextflow run ${GITHUB_WORKSPACE} -profile test2,docker -stub --outdir ./results2 From 745c7c07ab9c34a73e122183f06887357495ecc1 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 2 Dec 2022 16:13:18 +0100 Subject: [PATCH 0878/1921] feat added aws test --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e76fc7e1..87c2c2f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker -stub --outdir ./results - - name: Run pipeline with test data + - name: Run pipeline with test data 2 samples # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix From e997d7978bbc027b591577f8788e4d6081d6adaa Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 2 Dec 2022 16:20:38 +0100 Subject: [PATCH 0879/1921] bwa index fixes --- conf/modules.config | 13 +++++++++++-- modules/local/sentieon/bwamemindex.nf | 4 ++-- subworkflows/local/prepare_references.nf | 8 +++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 61f269b7..f295063b 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -91,7 +91,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWA_INDEX' { - ext.when = {!params.bwa_index} + ext.when = {!params.bwa_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, mode: 'copy', @@ -150,6 +150,16 @@ process { ] } + withName: '.*PREPARE_REFERENCES:UNTAR_VCFANNO' { + ext.when = { params.vcfanno_resources && params.vcfanno_resources.endsWith('.tar.gz') } + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + ] + } + withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} publishDir = [ @@ -737,7 +747,6 @@ process { process { withName: '.*ANNOTATE_SNVS:VCFANNO' { - ext.prefix = { "${meta.id}_vcfanno" } ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/snv_annotation" }, diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 2dae1b09..09d3eb1a 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -9,8 +9,8 @@ process SENTIEON_BWAINDEX { tuple val(meta), path(fasta) output: - tuple val(meta), path("bwa"), emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("bwa/"), emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 2de97607..13c5b413 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -37,12 +37,14 @@ workflow PREPARE_REFERENCES { ch_versions = Channel.empty() ch_tbi = Channel.empty() ch_bgzip_tbi = Channel.empty() + ch_bwa = Channel.empty() + ch_sentieonbwa= Channel.empty() // Genome indices - BWA_INDEX(fasta_meta) + BWA_INDEX(fasta_meta).index.set{ch_bwa} BWAMEM2_INDEX_GENOME(fasta_meta) BWAMEM2_INDEX_SHIFT_MT(mt_fasta_shift_meta) - SENTIEON_BWAINDEX(fasta_meta) + SENTIEON_BWAINDEX(fasta_meta).index.set{ch_sentieonbwa} SAMTOOLS_FAIDX_GENOME(fasta_meta) SAMTOOLS_FAIDX_SHIFT_MT(mt_fasta_shift_meta) GATK_SD(fasta_no_meta) @@ -90,7 +92,7 @@ workflow PREPARE_REFERENCES { emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() - bwa_index = BWA_INDEX.out.index.collect() ?: SENTIEON_BWAINDEX.out.index.collect() + bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() From 5272c222c34b2a8660188da3508e133ebe343a5d Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 2 Dec 2022 16:34:55 +0100 Subject: [PATCH 0880/1921] removed untar_vcfanno module from modules config --- conf/modules.config | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f295063b..7442ee5f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -150,16 +150,6 @@ process { ] } - withName: '.*PREPARE_REFERENCES:UNTAR_VCFANNO' { - ext.when = { params.vcfanno_resources && params.vcfanno_resources.endsWith('.tar.gz') } - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - ] - } - withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} publishDir = [ From 8d4db9068507ab8850a43d0d32e4f2c7e91cc4d4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Dec 2022 16:35:46 +0100 Subject: [PATCH 0881/1921] review suggestions --- nextflow.config | 4 ++-- subworkflows/local/call_snv.nf | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/nextflow.config b/nextflow.config index bcc8ef2c..fc1bf1e5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,12 +13,12 @@ params { input = null // References - genome = 'GRCh37' + genome = 'GRCh38' igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false local_genomes = null save_reference = false - mt_contig_name = 'MT' + mt_contig_name = 'chrM' // Main options analysis_type = 'wgs' diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 61d9c1c4..4d4475a6 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -27,8 +27,7 @@ workflow CALL_SNV { ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf ch_tabix = CALL_SNV_DEEPVARIANT.out.tabix ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) - - } else if ( variant_caller == "sentieon" ) { + } else if ( variant_caller == "sentieon" ) { CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, call_interval, ml_model, case_info ) ch_vcf = CALL_SNV_SENTIEON.out.vcf ch_tabix = CALL_SNV_SENTIEON.out.tabix From 93b9bb5aed4ac3261617f2f4ffc63b647dbbb415 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 2 Dec 2022 16:38:03 +0100 Subject: [PATCH 0882/1921] fixes --- conf/modules.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules.config b/conf/modules.config index 7442ee5f..6e46b3c2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -737,6 +737,7 @@ process { process { withName: '.*ANNOTATE_SNVS:VCFANNO' { + ext.prefix = { "${meta.id}_vcfanno" } ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/snv_annotation" }, From 726c8be7592f9c6f320e0bb6c8d2a54a5c4f6c1b Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 2 Dec 2022 16:39:20 +0100 Subject: [PATCH 0883/1921] fixed spaces --- subworkflows/local/prepare_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 13c5b413..7c067b97 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -92,7 +92,7 @@ workflow PREPARE_REFERENCES { emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() - bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() + bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() From caec1187e97480fd43b1f447709581b78f006bbb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 4 Dec 2022 01:27:54 +0100 Subject: [PATCH 0884/1921] for local work --- subworkflows/local/align.nf | 30 +++++++--- subworkflows/local/alignment/align_bwamem2.nf | 44 +++++++------- .../local/alignment/align_sentieon.nf | 23 ++++---- subworkflows/local/analyse_MT.nf | 36 ++++++----- .../local/annotate_consequence_pli.nf | 11 ++-- subworkflows/local/annotate_snvs.nf | 59 +++++++------------ .../local/annotate_structural_variants.nf | 31 ++++------ subworkflows/local/call_repeat_expansions.nf | 7 ++- subworkflows/local/call_snv.nf | 40 +++++++++---- .../local/call_structural_variants.nf | 19 +++--- subworkflows/local/gens.nf | 11 ++-- .../local/mitochondria/align_and_call_MT.nf | 57 ++++++++---------- .../mitochondria/convert_mt_bam_to_fastq.nf | 5 +- .../local/mitochondria/merge_annotate_MT.nf | 28 ++++----- .../local/preprocessing/prepare_vcf.nf | 7 ++- subworkflows/local/qc_bam.nf | 44 ++++++-------- subworkflows/local/rank_variants.nf | 14 +++-- subworkflows/local/scatter_genome.nf | 3 +- .../variant_calling/call_cnv_cnvpytor.nf | 9 +-- .../variant_calling/call_snv_deepvariant.nf | 9 +-- .../variant_calling/call_snv_sentieon.nf | 7 ++- .../local/variant_calling/call_sv_manta.nf | 1 + .../local/variant_calling/call_sv_tiddit.nf | 3 +- workflows/raredisease.nf | 15 ++--- 24 files changed, 262 insertions(+), 251 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index b8f9adc8..54bd2f24 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -20,18 +20,32 @@ workflow ALIGN { main: ch_versions = Channel.empty() - ALIGN_BWAMEM2 ( reads_input, index_bwamem2, fasta, fai, platform ) - ALIGN_SENTIEON ( reads_input, fasta, fai, index_bwa, known_dbsnp, known_dbsnp_tbi, platform ) + ALIGN_BWAMEM2 ( + reads_input, + index_bwamem2, + fasta, + fai, + platform + ) + + ALIGN_SENTIEON ( + reads_input, + fasta, + fai, + index_bwa, + known_dbsnp, + known_dbsnp_tbi, + platform + ) 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, by: [0]) ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) - ch_bam_bai = ch_marked_bam.join(ch_marked_bai, by: [0]) - emit: - marked_bam = ch_marked_bam // channel: [ val(meta), [ marked_bam ] ] - marked_bai = ch_marked_bai // channel: [ val(meta), [ marked_bai ] ] - bam_bai = ch_bam_bai // channel: [ val(meta), [ marked_bam, marked_bai ] ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + marked_bam = ch_marked_bam + marked_bai = ch_marked_bai + bam_bai = ch_bam_bai + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 3bb0c5a2..e6e288ec 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -23,47 +23,47 @@ workflow ALIGN_BWAMEM2 { // Map, sort, and index BWAMEM2_MEM ( reads_input, index, true ) - ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_ALIGN.out.versions.first()) - // Join the mapped bam + bai paths by their keys for stats // Get stats for each demultiplexed read pair. bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai) SAMTOOLS_STATS ( bam_sorted_indexed, [] ) - ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first()) // Merge multiple lane samples and index BWAMEM2_MEM.out.bam - .map{ meta, bam -> - new_meta = meta.clone() // clone to avoid overriding the global meta - new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename - new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" - [new_meta, bam]} // end the closure to return newly modified channel - .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] - .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list - single: it[1].size() == 1 - multiple: it[1].size() > 1 - } - .set{ bams } // create a new multi-channel named bams + .map{ meta, bam -> + new_meta = meta.clone() + new_meta.id = new_meta.id.split('_')[0] + new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" + [new_meta, bam] + } + .groupTuple(by: 0) + .branch{ + single: it[1].size() == 1 + multiple: it[1].size() > 1 + } + .set{ bams } // If there are no samples to merge, skip the process SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) - ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions.first()) // Marking duplicates MARKDUPLICATES ( prepared_bam , fasta, fai ) SAMTOOLS_INDEX_MARKDUP ( MARKDUPLICATES.out.bam ) + + ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX_ALIGN.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions.first()) ch_versions = ch_versions.mix(MARKDUPLICATES.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MARKDUP.out.versions.first()) emit: - stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] - metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] - marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), [ marked_bam ] ] - marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai // channel: [ val(meta), [ marked_bai ] ] - - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + stats = SAMTOOLS_STATS.out.stats + metrics = MARKDUPLICATES.out.metrics + marked_bam = MARKDUPLICATES.out.bam + marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 6c5914d9..e45cdbb5 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -26,18 +26,18 @@ workflow ALIGN_SENTIEON { ch_bqsr_csv = Channel.empty() SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) - ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions.first()) SENTIEON_BWAMEM.out .bam .join(SENTIEON_BWAMEM.out.bai) .map{ meta, bam, bai -> - new_meta = meta.clone() // clone to avoid overriding the global meta - new_meta.id = new_meta.id.split('_')[0] // access the .id attribute of meta to split samplename_lane into samplename + new_meta = meta.clone() + new_meta.id = new_meta.id.split('_')[0] new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" - [new_meta, bam, bai]} // end the closure to return newly modified channel - .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] - .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list + [new_meta, bam, bai] + } + .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] + .branch{ single: it[1].size() == 1 multiple: it[1].size() > 1 } @@ -45,11 +45,10 @@ 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, fasta, fai ) - ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions.first()) SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) - ch_versions = ch_versions.mix(SENTIEON_LOCUSCOLLECTOR.out.versions.first()) ch_bam_bai .join(SENTIEON_LOCUSCOLLECTOR.out.score) @@ -57,7 +56,6 @@ workflow ALIGN_SENTIEON { .set { ch_bam_bai_score } SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai ) - ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam @@ -70,6 +68,11 @@ workflow ALIGN_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_BQSR.out.versions.first()) } + ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_LOCUSCOLLECTOR.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) + emit: marked_bam = SENTIEON_DEDUP.out.bam marked_bai = SENTIEON_DEDUP.out.bai @@ -82,5 +85,5 @@ workflow ALIGN_SENTIEON { gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index b351476b..d61fb852 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -31,11 +31,15 @@ workflow ANALYSE_MT { main: ch_versions = Channel.empty() - // STEP 1: PREPARING MT ALIGNMENT - CONVERT_MT_BAM_TO_FASTQ ( bam, genome_fasta_meta, genome_fai, genome_dict_no_meta ) - ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions)// Outputs bam files + // PREPARING READS FOR MT ALIGNMENT + CONVERT_MT_BAM_TO_FASTQ ( + bam, + genome_fasta_meta, + genome_fai, + genome_dict_no_meta + ) - //STEP 2.1: MT ALIGNMENT AND VARIANT CALLING + // MT ALIGNMENT AND VARIANT CALLING ALIGN_AND_CALL_MT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, @@ -44,8 +48,7 @@ workflow ANALYSE_MT { genome_dict_no_meta, genome_fai, mt_intervals - ) - ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) + ) ALIGN_AND_CALL_MT_SHIFT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, @@ -55,18 +58,17 @@ workflow ANALYSE_MT { shift_mt_dict, shift_mt_fai, shift_mt_intervals - ) - ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) + ) - // STEP 2.3: PICARD_LIFTOVERVCF + // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT PICARD_LIFTOVERVCF ( ALIGN_AND_CALL_MT_SHIFT.out.vcf, genome_dict_no_meta, shift_mt_backchain, - genome_fasta_no_meta) - ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) + genome_fasta_no_meta + ) - // STEP 3: MT MERGE AND ANNOTATE VARIANTS + // MT MERGE AND ANNOTATE VARIANTS MERGE_ANNOTATE_MT( ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, @@ -77,7 +79,13 @@ workflow ANALYSE_MT { vep_genome, vep_cache_version, vep_cache, - case_info) + case_info + ) + + ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions) + ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) + ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) + ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: @@ -93,5 +101,5 @@ workflow ANALYSE_MT { html = ALIGN_AND_CALL_MT.out.html txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index 1913b1b6..a414516c 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -13,13 +13,10 @@ workflow ANNOTATE_CSQ_PLI { main: ch_versions = Channel.empty() - ADD_MOST_SEVERE_CSQ ( - vcf, - variant_consequences - ) - ADD_MOST_SEVERE_PLI ( - ADD_MOST_SEVERE_CSQ.out.vcf, - ) + ADD_MOST_SEVERE_CSQ (vcf, variant_consequences) + + ADD_MOST_SEVERE_PLI (ADD_MOST_SEVERE_CSQ.out.vcf) + ch_versions = ch_versions.mix(ADD_MOST_SEVERE_CSQ.out.versions) ch_versions = ch_versions.mix(ADD_MOST_SEVERE_PLI.out.versions) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 6bdcc77f..e4d22c7d 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -35,24 +35,9 @@ workflow ANNOTATE_SNVS { ch_vcf_scatter_in = Channel.empty() ch_vep_in = Channel.empty() - // - // annotate rhocall - // - vcf.map { meta, vcf, idx -> - return [ vcf, idx ] - } - .set { ch_roh_vcfs} - - 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 } + vcf.map { meta, vcf, idx -> return [vcf, idx] }.set { ch_roh_vcfs } + samples.map { it -> it.phenotype == "2" ?: it }.set { ch_phenotype } + ch_phenotype.affected.combine(ch_roh_vcfs).set { ch_roh_input } BCFTOOLS_ROH (ch_roh_input, gnomad_af, [], [], [], []) @@ -62,62 +47,60 @@ workflow ANNOTATE_SNVS { new_meta.id = meta.case_id return [new_meta, roh] } - .set { ch_roh_rhocall} + .set { ch_roh_rhocall } RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) - ch_versions = ch_versions.mix(ZIP_TABIX_ROHCALL.out.versions) - // - // annotate vcfanno - // VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, vcfanno_toml, vcfanno_lua, vcfanno_resources) - ch_versions = ch_versions.mix(VCFANNO.out.versions) ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) - ch_versions = ch_versions.mix(ZIP_TABIX_VCFANNO.out.versions) - BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi,[],[],[]).vcf.set { ch_vep_in } - ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) + BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi, [], [], []) // filter on frequencies TABIX_BCFTOOLS_VIEW (BCFTOOLS_VIEW.out.vcf) - ch_versions = ch_versions.mix(TABIX_BCFTOOLS_VIEW.out.versions) BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS_VIEW.out.tbi).collect().set { ch_vcf_scatter_in } GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(split_intervals)).vcf.set { ch_vep_in } - ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions.first()) - // - // annotate vep - // - ENSEMBLVEP_SNV(ch_vep_in, + ENSEMBLVEP_SNV( + ch_vep_in, vep_genome, "homo_sapiens", vep_cache_version, vep_cache, fasta, [] - ) - ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions.first()) + ) ZIP_TABIX_VEP (ENSEMBLVEP_SNV.out.vcf) - ch_versions = ch_versions.mix(ZIP_TABIX_VEP.out.versions.first()) ZIP_TABIX_VEP.out.gz_tbi .groupTuple() .map { meta, vcfs, tbis -> def sortedvcfs = vcfs.sort() def sortedtbis = tbis.sort() - return [ meta, sortedvcfs, sortedtbis ] + return [ meta, sortedvcfs, sortedtbis ] } .set { ch_vep_ann } BCFTOOLS_CONCAT (ch_vep_ann) - ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) + + ch_versions = ch_versions.mix(BCFTOOLS_RHO.out.versions) + 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(ZIP_TABIX_VCFANNO.out.versions) + 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(ENSEMBLVEP_SNV.out.versions.first()) + ch_versions = ch_versions.mix(ZIP_TABIX_VEP.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 0d71639a..5f140508 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -32,40 +32,35 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { } .set { ch_svdb_dbs } - SVDB_QUERY(vcf, + SVDB_QUERY( + vcf, ch_svdb_dbs.in_occs.toList(), ch_svdb_dbs.in_frqs.toList(), ch_svdb_dbs.out_occs.toList(), ch_svdb_dbs.out_frqs.toList(), ch_svdb_dbs.vcf_dbs.toList() - ) - ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) - - PICARD_SORTVCF(SVDB_QUERY.out.vcf, - fasta, - seq_dict ) - ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - PICARD_SORTVCF.out.vcf - .map { meta, vcf -> - return [meta,vcf,[]] - } - .set { ch_sortvcf } + PICARD_SORTVCF(SVDB_QUERY.out.vcf, fasta, seq_dict) - BCFTOOLS_VIEW(ch_sortvcf,[],[],[]) - ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) + PICARD_SORTVCF.out.vcf.map { meta, vcf -> return [meta,vcf,[]] }.set { ch_sortvcf } + + BCFTOOLS_VIEW(ch_sortvcf, [], [], []) - ENSEMBLVEP_SV(BCFTOOLS_VIEW.out.vcf, + ENSEMBLVEP_SV( + BCFTOOLS_VIEW.out.vcf, vep_genome, "homo_sapiens", vep_cache_version, vep_cache, fasta, [] - ) - ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) + ) + ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) + ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) + ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: vcf_ann = ENSEMBLVEP_SV.out.vcf diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 3c551168..cca75d00 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -14,10 +14,11 @@ workflow CALL_REPEAT_EXPANSIONS { main: ch_versions = Channel.empty() - EXPANSIONHUNTER( bam, fasta, variant_catalog ) - ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions.first()) + EXPANSIONHUNTER (bam, fasta, variant_catalog) + + STRANGER (EXPANSIONHUNTER.out.vcf, variant_catalog) - STRANGER ( EXPANSIONHUNTER.out.vcf, variant_catalog ) + ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions.first()) ch_versions = ch_versions.mix(STRANGER.out.versions.first()) emit: diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 4d4475a6..23e94ed0 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -21,26 +21,40 @@ workflow CALL_SNV { main: ch_versions = Channel.empty() + ch_vcf = Channel.empty() + ch_tabix = Channel.empty() - if (variant_caller == "deepvariant") { - CALL_SNV_DEEPVARIANT ( input, fasta, fai, case_info ) - ch_vcf = CALL_SNV_DEEPVARIANT.out.vcf - ch_tabix = CALL_SNV_DEEPVARIANT.out.tabix - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) - } else if ( variant_caller == "sentieon" ) { - CALL_SNV_SENTIEON( input, fasta, fai, known_dbsnp, known_dbsnp_tbi, call_interval, ml_model, case_info ) - ch_vcf = CALL_SNV_SENTIEON.out.vcf - ch_tabix = CALL_SNV_SENTIEON.out.tabix - ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) - } else { - exit 1, 'Please provide a valid variant caller!' - } + CALL_SNV_DEEPVARIANT ( + input, + fasta, + fai, + case_info + ) + + CALL_SNV_SENTIEON( + input, + fasta, + fai, + known_dbsnp, + known_dbsnp_tbi, + call_interval, + ml_model, + case_info + ) + + ch_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) + ch_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) ch_vcf.join(ch_tabix) .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} .set { ch_selvar_in } + GATK4_SELECTVARIANTS(ch_selvar_in) + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) + ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) + emit: vcf = GATK4_SELECTVARIANTS.out.vcf tabix = GATK4_SELECTVARIANTS.out.tbi diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 0b457b63..d77be31a 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -12,6 +12,7 @@ workflow CALL_STRUCTURAL_VARIANTS { take: bam // channel: [ val(meta), path(bam) ] bai // channel: [ val(meta), path(bai) ] + bam_bai // channel: [ val(meta), path(bam), path(bai) ] bwa_index // channel: [ val(meta), path(bwa_index)] fasta_no_meta // channel: [ path(genome.fasta) ] fasta_meta // channel: [ val(meta), path(genome.fasta) ] @@ -23,27 +24,21 @@ workflow CALL_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() - //manta - CALL_SV_MANTA ( bam, bai, fasta_no_meta, fai, case_info, target_bed ) + CALL_SV_MANTA (bam, bai, fasta_no_meta, fai, case_info, target_bed) .diploid_sv_vcf .collect{it[1]} .set{ manta_vcf } - ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) - //tiddit - ch_tiddit_bam = bam.join(bai) - CALL_SV_TIDDIT ( ch_tiddit_bam, fasta_meta, bwa_index, case_info ) + CALL_SV_TIDDIT (bam_bai, fasta_meta, bwa_index, case_info) .vcf .collect{it[1]} .set { tiddit_vcf } - ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) //cnvpytor // CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta_no_meta, fai) // .candidate_cnvs_vcf // .collect{it[1]} // .set {cnvpytor_vcf } - // ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) // //merge // tiddit_vcf @@ -58,12 +53,16 @@ workflow CALL_STRUCTURAL_VARIANTS { .toList() .set { vcf_list } - case_info.combine(vcf_list) + case_info + .combine(vcf_list) .set { merge_input_vcfs } // SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta","cnvpytor"] ) - SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta"] ) + SVDB_MERGE (merge_input_vcfs, ["tiddit","manta"]) + 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_CNVPYTOR.out.versions) emit: vcf = SVDB_MERGE.out.vcf diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 222600fb..dd63842d 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -21,13 +21,14 @@ workflow GENS { main: ch_versions = Channel.empty() - COLLECTREADCOUNTS ( bam, fasta, fai, seq_dict, interval_list ) - ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions.first()) + COLLECTREADCOUNTS (bam, fasta, fai, seq_dict, interval_list) - DENOISEREADCOUNTS ( COLLECTREADCOUNTS.out.read_counts, pon ) - ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions.first()) + DENOISEREADCOUNTS (COLLECTREADCOUNTS.out.read_counts, pon) + + GENS_GENERATE (DENOISEREADCOUNTS.out.standardized_read_counts, vcf.map { meta, vcf -> vcf }, gnomad_pos) - GENS_GENERATE ( DENOISEREADCOUNTS.out.standardized_read_counts, vcf.map { meta, vcf -> vcf }, gnomad_pos ) + ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions.first()) + ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions.first()) ch_versions = ch_versions.mix(GENS_GENERATE.out.versions.first()) emit: diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 83c065ba..22787366 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -27,55 +27,48 @@ workflow ALIGN_AND_CALL_MT { ch_versions = Channel.empty() // Outputs bam files - BWAMEM2_MEM_MT ( fastq , genome_index, true) - ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) - ch_mt_bam = BWAMEM2_MEM_MT.out.bam + BWAMEM2_MEM_MT (fastq , genome_index, true) + ch_mt_bam = BWAMEM2_MEM_MT.out.bam ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) - // Merges bam files - GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, genome_fasta, genome_dict ) - ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, genome_fasta, genome_dict) - // Add read group to merged bam file - PICARD_ADDORREPLACEREADGROUPS_MT ( GATK4_MERGEBAMALIGNMENT_MT.out.bam ) - ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) + PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) - // Marks duplicates - PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, genome_fasta, genome_fai ) - ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, genome_fasta, genome_fai) - // Sort bam file SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) - ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) - // Index bam file SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) - ch_sort_index_bam_intervals_mt = ch_sort_index_bam.combine(intervals_mt) - ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) + ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) + ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(intervals_mt) - // Calls variants with Mutect2 - GATK4_MUTECT2_MT (ch_sort_index_bam_intervals_mt, genome_fasta, genome_fai, genome_dict, [], [], [],[]) - ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) + GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, genome_fasta, genome_fai, genome_dict, [], [], [],[]) // Haplocheck // TODO: probably it will be outside this subworkflow as we want to run // with the VCF with the variants from the shifted alignment (to solve the mt circularity issue) - HAPLOCHECK_MT ( GATK4_MUTECT2_MT.out.vcf ) - ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) // Filter Mutect2 calls ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) ch_mutect_out = ch_mutect_vcf.join(GATK4_MUTECT2_MT.out.stats, by: [0]) - ch_to_filt = ch_mutect_out.map { - meta, vcf, tbi, stats -> - return [meta, vcf, tbi, stats, [], [], [], []]} - GATK4_FILTERMUTECTCALLS_MT( ch_to_filt, - genome_fasta, - genome_fai, - genome_dict ) - ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) + ch_to_filt = ch_mutect_out.map { + meta, vcf, tbi, stats -> + return [meta, vcf, tbi, stats, [], [], [], []] + } + + GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, genome_fasta, genome_fai, genome_dict) + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) + 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(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 @@ -84,5 +77,5 @@ workflow ALIGN_AND_CALL_MT { filt_sats = GATK4_FILTERMUTECTCALLS_MT.out.stats txt = HAPLOCHECK_MT.out.txt html = HAPLOCHECK_MT.out.html - versions = ch_versions + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index 128b1e81..81de9d19 100644 --- a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -18,14 +18,15 @@ workflow CONVERT_MT_BAM_TO_FASTQ { // Outputs bam containing only MT GATK4_PRINTREADS_MT ( bam, genome_fasta_meta, genome_fai, genome_dict ) - ch_versions = ch_versions.mix(GATK4_PRINTREADS_MT.out.versions.first()) // Removes alignment information GATK4_REVERTSAM_MT ( GATK4_PRINTREADS_MT.out.bam ) - ch_versions = ch_versions.mix(GATK4_REVERTSAM_MT.out.versions.first()) // Outputs fastq files GATK4_SAMTOFASTQ_MT ( GATK4_REVERTSAM_MT.out.bam ) + + ch_versions = ch_versions.mix(GATK4_PRINTREADS_MT.out.versions.first()) + ch_versions = ch_versions.mix(GATK4_REVERTSAM_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_SAMTOFASTQ_MT.out.versions.first()) emit: diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 7946f681..766ccef9 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -36,30 +36,21 @@ workflow MERGE_ANNOTATE_MT { .map{ meta, vcf1, vcf2 -> [meta, [vcf1, vcf2]] } - GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, genome_dict_meta) - ch_versions = ch_versions.mix(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.versions.first()) // Filtering Variants - ch_filt_vcf = GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf.join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, by:[0]) - GATK4_VARIANTFILTRATION_MT(ch_filt_vcf, - genome_fasta, - genome_fai, - genome_dict_no_meta ) - ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) + GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf.join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, by:[0]).set { ch_filt_vcf } + GATK4_VARIANTFILTRATION_MT (ch_filt_vcf, genome_fasta, genome_fai, genome_dict_no_meta) // Spliting multiallelic calls - ch_in_split = GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]) + GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]).set { ch_in_split } SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) - ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions.first()) - TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) - ch_in_remdup = SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi) // Removing duplicates and merging if there is more than one sample + SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi).set { ch_in_remdup } REMOVE_DUPLICATES_MT(ch_in_remdup, genome_fasta) TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) - ch_versions = ch_versions.mix(REMOVE_DUPLICATES_MT.out.versions.first()) REMOVE_DUPLICATES_MT.out.vcf .collect{it[1]} @@ -91,11 +82,9 @@ workflow MERGE_ANNOTATE_MT { genome_fasta, genome_fai) ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants - ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) CHANGE_NAME_VCF_MT(ch_case_vcf.single) ch_vcf_changed_name = CHANGE_NAME_VCF_MT.out.file - ch_versions = ch_versions.mix(CHANGE_NAME_VCF_MT.out.versions) ch_in_vep = ch_merged_vcf.mix(ch_vcf_changed_name) @@ -111,11 +100,18 @@ workflow MERGE_ANNOTATE_MT { vep_cache, genome_fasta, []) - ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) // Running haplogrep2 TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "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(CHANGE_NAME_VCF_MT.out.versions) + ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: diff --git a/subworkflows/local/preprocessing/prepare_vcf.nf b/subworkflows/local/preprocessing/prepare_vcf.nf index 21876592..91293964 100644 --- a/subworkflows/local/preprocessing/prepare_vcf.nf +++ b/subworkflows/local/preprocessing/prepare_vcf.nf @@ -30,20 +30,21 @@ workflow CHECK_VCF { return [['id':id],filepath] } .set { ch_vcfs_norm } - ch_versions = ch_versions.mix(CHECK_INPUT_VCF.out.versions) SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) - ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_PV.out.versions) REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta) .vcf .set { ch_vcfs_rmdup } - ch_versions = ch_versions.mix(REMOVE_DUPLICATES_PV.out.versions) vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) TABIX_PV (vcf_out) + ch_versions = ch_versions.mix(CHECK_INPUT_VCF.out.versions) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_PV.out.versions) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_PV.out.versions) + emit: vcf = vcf_out // path: normalized_vcf index = TABIX_PV.out.tbi diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index f19ff111..e21557f0 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -24,37 +24,31 @@ workflow QC_BAM { main: ch_versions = Channel.empty() - // COLLECT MULTIPLE METRICS - PICARD_COLLECTMULTIPLEMETRICS ( bam_bai, fasta, fai ) - ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) + PICARD_COLLECTMULTIPLEMETRICS (bam_bai, fasta, fai) - // COLLECT HS METRICS - PICARD_COLLECTHSMETRICS ( bam_bai, fasta, fai, bait_intervals, target_intervals ) - ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) + PICARD_COLLECTHSMETRICS (bam_bai, fasta, fai, bait_intervals, target_intervals) - // QUALIMAP BAMQC - gff = [] - QUALIMAP_BAMQC ( bam, gff ) - ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) + QUALIMAP_BAMQC (bam, []) + + TIDDIT_COV (bam, []) // 2nd pos. arg is req. only for cram input + + UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, chrom_sizes) - // TIDDIT COVERAGE - TIDDIT_COV ( bam, [] ) // 2nd pos. arg is req. only for cram input - UCSC_WIGTOBIGWIG ( TIDDIT_COV.out.wig, chrom_sizes ) + MOSDEPTH (bam_bai, [], []) + + ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) - - // MOSDEPTH - mosdepth_input_bams = bam.join(bai, by: [0]) - MOSDEPTH (mosdepth_input_bams,[],[]) ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) emit: - multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] - tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] - bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] - d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(*.d4) ] - - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics + hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics + qualimap_results = QUALIMAP_BAMQC.out.results + tiddit_wig = TIDDIT_COV.out.wig + bigwig = UCSC_WIGTOBIGWIG.out.bw + d4 = MOSDEPTH.out.per_base_d4 + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index f7e821c0..7b13094d 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -19,15 +19,19 @@ workflow RANK_VARIANTS { ch_versions = Channel.empty() GENMOD_ANNOTATE(vcf) - ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) + GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ped, reduced_penetrance) - ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) + GENMOD_SCORE(GENMOD_MODELS.out.vcf, ped, score_config) - ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) + GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) + + ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) + ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) + ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) emit: - vcf = GENMOD_COMPOUND.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = GENMOD_COMPOUND.out.vcf + versions = ch_versions.ifEmpty(null) } diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 2ae43b03..8adb7349 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -17,9 +17,10 @@ workflow SCATTER_GENOME { ch_versions = Channel.empty() BUILD_BED (fai_meta) - ch_versions = ch_versions.mix(BUILD_BED.out.versions) GATK4_SPLITINTERVALS(BUILD_BED.out.bed, fasta_no_meta, fai_no_meta, dict) + + ch_versions = ch_versions.mix(BUILD_BED.out.versions) ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) emit: diff --git a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf index f956799a..38c420b2 100644 --- a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf +++ b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf @@ -22,16 +22,12 @@ workflow CALL_CNV_CNVPYTOR { ch_versions = Channel.empty() GENERATE_PYTOR(bam.join(bai, by: [0]), fasta, fai) - ch_versions = ch_versions.mix(GENERATE_PYTOR.out.versions.first()) HISTOGRAMS(GENERATE_PYTOR.out.pytor, binsizes) - ch_versions = ch_versions.mix(HISTOGRAMS.out.versions.first()) PARTITIONS(HISTOGRAMS.out.pytor, binsizes) - ch_versions = ch_versions.mix(PARTITIONS.out.versions.first()) CALL_CNVS(PARTITIONS.out.pytor, binsizes) - ch_versions = ch_versions.mix(CALL_CNVS.out.versions.first()) CALL_CNVS.out .pytor @@ -44,6 +40,11 @@ workflow CALL_CNV_CNVPYTOR { .set { ch_pytor } VIEW(ch_pytor, binsizes, "vcf") + + ch_versions = ch_versions.mix(GENERATE_PYTOR.out.versions.first()) + ch_versions = ch_versions.mix(HISTOGRAMS.out.versions.first()) + ch_versions = ch_versions.mix(PARTITIONS.out.versions.first()) + ch_versions = ch_versions.mix(CALL_CNVS.out.versions.first()) ch_versions = ch_versions.mix(VIEW.out.versions.first()) emit: diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 3fab61b6..e965ffe8 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -28,28 +28,29 @@ workflow CALL_SNV_DEEPVARIANT { .collect{it[1]} .toList() .set { file_list } - ch_versions = ch_versions.mix(DEEPVARIANT.out.versions.first()) case_info .combine(file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) - ch_versions = ch_versions.mix(GLNEXUS.out.versions) ch_split_multi_in = GLNEXUS.out.bcf .map{meta, bcf -> return [meta, bcf, []]} SPLIT_MULTIALLELICS_GL (ch_split_multi_in, fasta) - ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_GL.out.versions) ch_remove_dup_in = SPLIT_MULTIALLELICS_GL.out.vcf .map{meta, vcf -> return [meta, vcf, []]} REMOVE_DUPLICATES_GL (ch_remove_dup_in, fasta) - ch_versions = ch_versions.mix(REMOVE_DUPLICATES_GL.out.versions) TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) + + ch_versions = ch_versions.mix(DEEPVARIANT.out.versions.first()) + ch_versions = ch_versions.mix(GLNEXUS.out.versions) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_GL.out.versions) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_GL.out.versions) ch_versions = ch_versions.mix(TABIX_GL.out.versions) emit: diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 39d21c08..11e6ae17 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -26,7 +26,6 @@ workflow CALL_SNV_SENTIEON { SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, call_interval, ml_model ) ch_vcf = SENTIEON_DNASCOPE.out.vcf ch_index = SENTIEON_DNASCOPE.out.vcf_index - ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) if ( ml_model ) { @@ -60,6 +59,12 @@ workflow CALL_SNV_SENTIEON { REMOVE_DUPLICATES_SEN(ch_remove_dup_in, fasta) TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) + ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_MERGE.out.versions.first()) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_SEN.out.versions.first()) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) + ch_versions = ch_versions.mix(TABIX_SEN.out.versions.first()) + emit: vcf = REMOVE_DUPLICATES_SEN.out.vcf tabix = TABIX_SEN.out.tbi diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 6653aa4a..e1da4896 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -40,6 +40,7 @@ workflow CALL_SV_MANTA { .set { manta_input } MANTA ( manta_input, fasta, fai ) } + ch_versions = MANTA.out.versions emit: diff --git a/subworkflows/local/variant_calling/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf index 99094f1c..51d8f77c 100644 --- a/subworkflows/local/variant_calling/call_sv_tiddit.nf +++ b/subworkflows/local/variant_calling/call_sv_tiddit.nf @@ -14,7 +14,6 @@ workflow CALL_SV_TIDDIT { main: TIDDIT_SV ( bam, fasta, index ) - ch_versions = TIDDIT_SV.out.versions.first() TIDDIT_SV.out .vcf @@ -27,6 +26,8 @@ workflow CALL_SV_TIDDIT { .set { merge_input_vcfs } SVDB_MERGE_TIDDIT ( merge_input_vcfs, [] ) + + ch_versions = TIDDIT_SV.out.versions.first() ch_versions = ch_versions.mix(SVDB_MERGE_TIDDIT.out.versions) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d299fcd6..369b8db8 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -106,9 +106,6 @@ include { QC_BAM } from '../subworkflows/local/qc include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' -// -// SUBWORKFLOW: Consists entirely of nf-core/modules -// /* @@ -261,7 +258,7 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - // STEP 1.5: BAM QUALITY CHECK + // BAM QUALITY CHECK QC_BAM ( ch_mapped.marked_bam, ch_mapped.marked_bai, @@ -274,7 +271,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) - // STEP 1.6: EXPANSIONHUNTER AND STRANGER + // EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, ch_genome_fasta_no_meta, @@ -283,7 +280,6 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 2: VARIANT CALLING - // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV ( params.variant_caller, ch_mapped.bam_bai, @@ -300,6 +296,7 @@ workflow RAREDISEASE { CALL_STRUCTURAL_VARIANTS ( ch_mapped.marked_bam, ch_mapped.marked_bai, + ch_mapped.bam_bai, ch_bwa_index, ch_genome_fasta_no_meta, ch_genome_fasta_meta, @@ -310,7 +307,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) - // STEP 2.1: GENS + // GENS if (params.gens_switch) { GENS ( ch_mapped.bam_bai, @@ -382,7 +379,7 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) - // STEP 3: VARIANT ANNOTATION + // VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) if (params.annotate_snv_switch) { @@ -409,8 +406,8 @@ workflow RAREDISEASE { .concat(ANALYSE_MT.out.vcf) .groupTuple() .set { ch_merged_vcf } - ch_merged_vcf.join(ch_merged_tbi).set {ch_concat_in} + BCFTOOLS_CONCAT (ch_concat_in) ANN_CSQ_PLI_SNV ( BCFTOOLS_CONCAT.out.vcf, From b3f2d54dcabe915146f6005fe989889df13ae7b5 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 5 Dec 2022 15:34:01 +0100 Subject: [PATCH 0885/1921] fix add profile test2 --- conf/test2.config | 4 ++-- nextflow.config | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/test2.config b/conf/test2.config index 54e98638..17b7a014 100644 --- a/conf/test2.config +++ b/conf/test2.config @@ -1,8 +1,8 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests + Nextflow config file for running minimal tests2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test. + Defines input files and everything required to run a fast and simple pipeline test2. Use as follows: nextflow run nf-core/raredisease -profile test2, --outdir diff --git a/nextflow.config b/nextflow.config index fc1bf1e5..3b6d860e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -165,6 +165,7 @@ profiles { } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } + test2 { includeConfig 'conf/test2.config' } } // Load igenomes.config if required, else load custom genomes.config From 78386e27db2d30a524da77e4ff0a506e12412495 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 5 Dec 2022 16:02:12 +0100 Subject: [PATCH 0886/1921] feat modified PR checklist to add test with 2 samples --- .github/PULL_REQUEST_TEMPLATE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ac6e36cd..efb90dc3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,6 +18,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir -stub`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test2,docker --outdir -stub`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. From afd9563b6f355b4f0c8f9c307b609623e17cc9aa Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 15 Dec 2022 13:46:11 +0100 Subject: [PATCH 0887/1921] linting --- modules.json | 196 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 124 insertions(+), 72 deletions(-) diff --git a/modules.json b/modules.json index 5484d16e..f7416d93 100644 --- a/modules.json +++ b/modules.json @@ -7,271 +7,323 @@ "nf-core": { "bcftools/concat": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e" + "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "9518fa4f65f3fb8cde24fde7d40333b39ec8fd65" + "git_sha": "9518fa4f65f3fb8cde24fde7d40333b39ec8fd65", + "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", - "git_sha": "653588be2a4aadab487b530643dbc9baf7a485c4" + "git_sha": "653588be2a4aadab487b530643dbc9baf7a485c4", + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "cnvpytor/callcnvs": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "cnvpytor/histogram": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "cnvpytor/importreaddepth": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "cnvpytor/partition": { - "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" - }, - "cnvpytor/view": { - "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" - }, - "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", "installed_by": ["modules"] }, - "fastqc": { + "cnvpytor/view": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", "installed_by": ["modules"] }, - "multiqc": { + "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", "installed_by": ["modules"] - "git_sha": "8022c68e7403eecbd8ba9c49496f69f8c49d50f0" }, "deepvariant": { "branch": "master", - "git_sha": "6e58487f28429876b7cad237afbf4685e90c7bd4" + "git_sha": "6e58487f28429876b7cad237afbf4685e90c7bd4", + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "810e8f2603ec38401d49a4aaed06f6d058745552" + "git_sha": "810e8f2603ec38401d49a4aaed06f6d058745552", + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "c25943553f62be5f907e3c12c42eaf0a1b40746d" + "git_sha": "c25943553f62be5f907e3c12c42eaf0a1b40746d", + "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "6220bc7d99377159f4cc7f6a421b494f3e2466d6" + "git_sha": "6220bc7d99377159f4cc7f6a421b494f3e2466d6", + "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67" + "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "9b7ca0f32e122a0cd1f33689fafbad4112407b42" + "git_sha": "9b7ca0f32e122a0cd1f33689fafbad4112407b42", + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "f6ee593e77fbb9fb88e506b761611cccb0bf51ac" + "git_sha": "f6ee593e77fbb9fb88e506b761611cccb0bf51ac", + "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "c95bed5b125e90553814b8720875c8c663524619" + "git_sha": "c95bed5b125e90553814b8720875c8c663524619", + "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "installed_by": ["modules"] }, "glnexus": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "haplocheck": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae" + "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "hmtnote": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5" + "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5", + "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2" + "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2", + "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2" + "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2", + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", - "git_sha": "3d5d18db1b39e1133505ae2fa2a062b0073c8a6a" + "git_sha": "3d5d18db1b39e1133505ae2fa2a062b0073c8a6a", + "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "eca65aa4a5e2e192ac44d6962c8f9260f314ffb8" + "git_sha": "eca65aa4a5e2e192ac44d6962c8f9260f314ffb8", + "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" + "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "installed_by": ["modules"] }, "stranger": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", - "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7" + "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7", + "installed_by": ["modules"] }, "svdb/query": { "branch": "master", - "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7" + "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7", + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", - "git_sha": "3a54013f0790674624b77e9a074ce8d22400d4fa" + "git_sha": "3a54013f0790674624b77e9a074ce8d22400d4fa", + "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", - "git_sha": "89f98091ac9e1653657b9e324e394b158d723a4f" + "git_sha": "89f98091ac9e1653657b9e324e394b158d723a4f", + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" + "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", - "git_sha": "2edbd10f12f7d3d681d2196707f15140d0e4d463" + "git_sha": "2edbd10f12f7d3d681d2196707f15140d0e4d463", + "installed_by": ["modules"] } } } From 70bb3eba4706ea06b99bd2f44b626c43ad35006f Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 15 Dec 2022 13:55:02 +0100 Subject: [PATCH 0888/1921] use dev version of nf-core tools --- .github/workflows/linting.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index c7f8f563..a74cead4 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -81,10 +81,11 @@ jobs: python-version: "3.7" architecture: "x64" + # FIXME: Remove this when nf-core modules lint stabilizes and install stable release - name: Install dependencies run: | python -m pip install --upgrade pip - pip install nf-core + python -m pip install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev - name: Run nf-core lint env: From 64e4286270ed881bb3077a5fca6a7f5c040f9e08 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 15 Dec 2022 15:56:17 +0100 Subject: [PATCH 0889/1921] reverting the collect software version syntax --- workflows/raredisease.nf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 60c0c6ed..230b6246 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -437,8 +437,11 @@ workflow RAREDISEASE { // // MODULE: Pipeline reporting // + + // TODO The template v2.7.1 template update introduced: ch_versions.unique{ it.text }.collectFile(name: 'collated_versions.yml') + // This caused the pipeline to stall CUSTOM_DUMPSOFTWAREVERSIONS ( - ch_versions.unique{ it.text }.collectFile(name: 'collated_versions.yml') + ch_versions.unique().collectFile(name: 'collated_versions.yml') ) // From 88dd346469f56a3cbb4ed37c093331cb166a2b5e Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 16 Dec 2022 11:00:00 +0100 Subject: [PATCH 0890/1921] initial commit add SMNCopyNumberCaller --- CITATIONS.md | 3 ++ conf/modules.config | 16 +++++++ modules.json | 4 ++ modules/nf-core/smncopynumbercaller/main.nf | 40 ++++++++++++++++ modules/nf-core/smncopynumbercaller/meta.yml | 49 ++++++++++++++++++++ workflows/raredisease.nf | 7 +++ 6 files changed, 119 insertions(+) create mode 100644 modules/nf-core/smncopynumbercaller/main.nf create mode 100644 modules/nf-core/smncopynumbercaller/meta.yml diff --git a/CITATIONS.md b/CITATIONS.md index 34d06fe4..f89061cc 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -15,6 +15,9 @@ - [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. +- [SMNCopyNumberCaller] (https://www.nature.com/articles/s41436-020-0754-0) + > Chen X, Sanchis-Juan A, French CE, Connel AJ, Delon I, Kingsbury Z, Chawla A, Halpern AL, Taft RJ, NIHR BioResource, Bentley DR, Butchbach MER, Raymond FL, Eberle MA. Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genet Med. February 2020:1-9. doi:10.1038/s41436-020-0754-0 + ## Software packaging/containerisation tools - [Anaconda](https://anaconda.com) diff --git a/conf/modules.config b/conf/modules.config index 6e46b3c2..709359ab 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -510,6 +510,22 @@ process { } +// +// Smncopynumbercaller options +// + +process { + withName: '.*SMNCOPYNUMBERCALLER' { + ext.args = genome.contains('GRch37') ? '--genome 37' : '--genome 38' + ext.prefix = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/smncopynumbercaller" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + // // SNV calling options // diff --git a/modules.json b/modules.json index 519add00..20d8d056 100644 --- a/modules.json +++ b/modules.json @@ -225,6 +225,10 @@ "branch": "master", "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01" }, + "smncopynumbercaller": { + "branch": "master", + "git_sha": "2bb1f6515962a1559e79544112394d2db03a4302" + }, "stranger": { "branch": "master", "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905" diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf new file mode 100644 index 00000000..fec45db0 --- /dev/null +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -0,0 +1,40 @@ +process SMNCOPYNUMBERCALLER { + tag "$meta.id" + label 'process_low' + + conda (params.enable_conda ? "bioconda::smncopynumbercaller=1.1.2" : null) + 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' }" + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("out/*.tsv"), emit: smncopynumber + tuple val(meta), path("out/*.json"), emit: run_metrics + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + manifest_text = bam.join("\n") + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "1.1.2" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + """ + echo "$manifest_text" >manifest.txt + smn_caller.py \\ + $args \\ + --manifest manifest.txt \\ + --prefix $prefix \\ + --outDir "out" \\ + --threads $task.cpus + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + SMNCopyNumberCaller: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/smncopynumbercaller/meta.yml b/modules/nf-core/smncopynumbercaller/meta.yml new file mode 100644 index 00000000..21f057fa --- /dev/null +++ b/modules/nf-core/smncopynumbercaller/meta.yml @@ -0,0 +1,49 @@ +name: "smncopynumbercaller" +description: tool to call the copy number of full-length SMN1, full-length SMN2, as well as SMN2Δ7–8 (SMN2 with a deletion of Exon7-8) from a whole-genome sequencing (WGS) BAM file. +keywords: + - copy number, BAM, CRAM, SMN1, SMN2 +tools: + - "smncopynumbercaller": + description: "call copy number of SMN1, SMN2, SMN2Δ7–8 from a bam file" + homepage: "https://github.com/Illumina/SMNCopyNumberCaller" + documentation: "https://github.com/Illumina/SMNCopyNumberCaller" + tool_dev_url: "https://github.com/Illumina/SMNCopyNumberCaller" + doi: "https://doi.org/10.1038/s41436-020-0754-0" + licence: "Apache License Version 2.0" + +input: + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - run_metrics: + type: file + description: File containing run parameters of SMNCopyNumberCaller + pattern: "*.{json}" + - smncopynumber: + type: file + description: File containing the output of SMNCopyNumberCaller + pattern: "*.{tsv}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@peterpru" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d299fcd6..15340463 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -85,6 +85,7 @@ include { BCFTOOLS_CONCAT } from '../modules/nf-core/bcfto include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' // // SUBWORKFLOWS @@ -282,6 +283,12 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + // STEP 1.7: SMNCOPYNUMBERCALLER + CALL_SMNCOPYNUMBERCALLER ( + ch_mapped.bam_bai + ) + ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) + // STEP 2: VARIANT CALLING // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV ( From d6daadc3948555ca85a6ce47ab11efd4de939b0e Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 16 Dec 2022 15:38:22 +0100 Subject: [PATCH 0891/1921] fix clarified name of test with 2 samples --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/awstest2.yml | 6 +++--- .github/workflows/ci.yml | 2 +- conf/{test2.config => test2samples.config} | 6 +++--- nextflow.config | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) rename conf/{test2.config => test2samples.config} (92%) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index efb90dc3..92b6ee7a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,7 +18,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir -stub`). -- [ ] Ensure the test suite passes (`nextflow run . -profile test2,docker --outdir -stub`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test2samples,docker --outdir -stub`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. diff --git a/.github/workflows/awstest2.yml b/.github/workflows/awstest2.yml index bdd091a6..26f58bd7 100644 --- a/.github/workflows/awstest2.yml +++ b/.github/workflows/awstest2.yml @@ -1,6 +1,6 @@ name: nf-core AWS test 2 samples # This workflow can be triggered manually with the GitHub actions workflow dispatch button. -# It runs the -profile 'test2' on AWS batch +# It runs the -profile 'test2samples' on AWS batch on: workflow_dispatch: @@ -20,9 +20,9 @@ jobs: workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} parameters: | { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test2-${{ github.sha }}" + "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test2samples-${{ github.sha }}" } - profiles: test2,aws_tower + profiles: test2samples,aws_tower - uses: actions/upload-artifact@v3 with: name: Tower debug log file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffaacc89..8e531bcc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,4 +47,4 @@ jobs: # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | - nextflow run ${GITHUB_WORKSPACE} -profile test2,docker -stub --outdir ./results2 + nextflow run ${GITHUB_WORKSPACE} -profile test2samples,docker -stub --outdir ./results2 diff --git a/conf/test2.config b/conf/test2samples.config similarity index 92% rename from conf/test2.config rename to conf/test2samples.config index 17b7a014..5cdd9052 100644 --- a/conf/test2.config +++ b/conf/test2samples.config @@ -1,11 +1,11 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests2 + Nextflow config file for running 2 samples ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test2. + Defines input files and everything required to run a fast and simple pipeline with 2 samples. Use as follows: - nextflow run nf-core/raredisease -profile test2, --outdir + nextflow run nf-core/raredisease -profile test2samples, --outdir ---------------------------------------------------------------------------------------- */ diff --git a/nextflow.config b/nextflow.config index 3ab85baa..90a48cb4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -169,9 +169,9 @@ profiles { executor.cpus = 16 executor.memory = 60.GB } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } - test2 { includeConfig 'conf/test2.config' } + test { includeConfig 'conf/test.config' } + test_full { includeConfig 'conf/test_full.config' } + test2samples { includeConfig 'conf/test2samples.config' } } // Load igenomes.config if required, else load custom genomes.config From d39d2e141054e8e3e25db89c4fefd0e7a9b26f47 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 16 Dec 2022 15:45:43 +0100 Subject: [PATCH 0892/1921] Try to add second test as parameter to matrix --- .github/workflows/ci.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8e531bcc..7f441fb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,9 @@ jobs: NXF_VER: - "22.10.1" - "latest-everything" + parameters: + - "-profile test,docker" + - "-profile test2samples,docker" steps: - name: Check out pipeline code uses: actions/checkout@v3 @@ -40,11 +43,11 @@ jobs: # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker -stub --outdir ./results + nextflow run ${GITHUB_WORKSPACE} ${{ matrix.parameters }} -stub --outdir ./results - - name: Run pipeline with test data 2 samples - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix - run: | - nextflow run ${GITHUB_WORKSPACE} -profile test2samples,docker -stub --outdir ./results2 +# - name: Run pipeline with test data 2 samples +# # TODO nf-core: You can customise CI pipeline run tests as required +# # For example: adding multiple test runs with different parameters +# # Remember that you can parallelise this by using strategy.matrix +# run: | +# nextflow run ${GITHUB_WORKSPACE} -profile test2samples,docker -stub --outdir ./results2 From 284908c41012441112ac90d464efeb571fe9c542 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 16 Dec 2022 16:56:59 +0100 Subject: [PATCH 0893/1921] feat removed commented lines --- .github/workflows/ci.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f441fb4..7f88d7b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,10 +44,3 @@ jobs: # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} ${{ matrix.parameters }} -stub --outdir ./results - -# - name: Run pipeline with test data 2 samples -# # TODO nf-core: You can customise CI pipeline run tests as required -# # For example: adding multiple test runs with different parameters -# # Remember that you can parallelise this by using strategy.matrix -# run: | -# nextflow run ${GITHUB_WORKSPACE} -profile test2samples,docker -stub --outdir ./results2 From 8985ff1d4fb8c4ce9e7ca46c7d60c0b88f58cda7 Mon Sep 17 00:00:00 2001 From: peterpru Date: Mon, 19 Dec 2022 10:36:25 +0100 Subject: [PATCH 0894/1921] fix linting --- CITATIONS.md | 2 +- conf/modules.config | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index f89061cc..92ac8896 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -15,7 +15,7 @@ - [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. -- [SMNCopyNumberCaller] (https://www.nature.com/articles/s41436-020-0754-0) +- [SMNCopyNumberCaller](https://www.nature.com/articles/s41436-020-0754-0) > Chen X, Sanchis-Juan A, French CE, Connel AJ, Delon I, Kingsbury Z, Chawla A, Halpern AL, Taft RJ, NIHR BioResource, Bentley DR, Butchbach MER, Raymond FL, Eberle MA. Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genet Med. February 2020:1-9. doi:10.1038/s41436-020-0754-0 ## Software packaging/containerisation tools diff --git a/conf/modules.config b/conf/modules.config index 709359ab..03600b8c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -516,7 +516,9 @@ process { process { withName: '.*SMNCOPYNUMBERCALLER' { - ext.args = genome.contains('GRch37') ? '--genome 37' : '--genome 38' + ext.args = { + (params.genome == 'GRCh37') ? '--genome 37' : '--genome 38' + } ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/smncopynumbercaller" }, From f01a1b4266ff377da3637b9228a59161ce4e761f Mon Sep 17 00:00:00 2001 From: peterpru Date: Mon, 19 Dec 2022 14:28:14 +0100 Subject: [PATCH 0895/1921] run prettier and fix typo --- CITATIONS.md | 1 + workflows/raredisease.nf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index 92ac8896..a8407622 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -13,6 +13,7 @@ - [FastQC](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. - [SMNCopyNumberCaller](https://www.nature.com/articles/s41436-020-0754-0) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 15340463..7a8e464b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -284,7 +284,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 1.7: SMNCOPYNUMBERCALLER - CALL_SMNCOPYNUMBERCALLER ( + SMNCOPYNUMBERCALLER ( ch_mapped.bam_bai ) ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) From 035344ed4675aed1b2cc9b661d6e305b135331f6 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 19 Dec 2022 17:34:17 +0100 Subject: [PATCH 0896/1921] updates fastqc --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index f7425869..55fa0e61 100644 --- a/modules.json +++ b/modules.json @@ -92,7 +92,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "810e8f2603ec38401d49a4aaed06f6d058745552", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { From 234e8f08c4c394a16c3e5b8d0e7a677d5b41b547 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 19 Dec 2022 17:41:44 +0100 Subject: [PATCH 0897/1921] use release version of nf-core tools in ci linting --- .github/workflows/linting.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index a74cead4..c7f8f563 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -81,11 +81,10 @@ jobs: python-version: "3.7" architecture: "x64" - # FIXME: Remove this when nf-core modules lint stabilizes and install stable release - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev + pip install nf-core - name: Run nf-core lint env: From 3083af241e668d411f92010ed9e7140e554511a7 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 10 Jan 2023 10:44:24 +0100 Subject: [PATCH 0898/1921] updated vcfanno-resource input parameter --- conf/genomes.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/genomes.config b/conf/genomes.config index 9e456cfc..faa55db5 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -37,7 +37,7 @@ params { svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/grch37_vcfanno_resources.txt" vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" @@ -70,7 +70,7 @@ params { svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/" + vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/grch38_vcfanno_resources.txt" vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" vep_cache = "${params.local_genomes}/vep_cache" vep_filters = "${params.local_genomes}/gene_panels.bed" From f22d6ee2d0e2f109c44c31e9ff33a7519bd3a0c7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 11 Jan 2023 11:15:14 +0100 Subject: [PATCH 0899/1921] annotate_snv --- subworkflows/local/annotate_snvs.nf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index e4d22c7d..d5120fc2 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -36,7 +36,11 @@ workflow ANNOTATE_SNVS { ch_vep_in = Channel.empty() vcf.map { meta, vcf, idx -> return [vcf, idx] }.set { ch_roh_vcfs } - samples.map { it -> it.phenotype == "2" ?: it }.set { ch_phenotype } + 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, gnomad_af, [], [], [], []) @@ -90,7 +94,7 @@ workflow ANNOTATE_SNVS { TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) - ch_versions = ch_versions.mix(BCFTOOLS_RHO.out.versions) + 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) ch_versions = ch_versions.mix(VCFANNO.out.versions) From 3e5f8d3eefee25ed80c1af417b2f00f39c3fa6d8 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 13 Jan 2023 13:40:29 +0100 Subject: [PATCH 0900/1921] Update qc_bam.nf - changed input --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 400cedb4..7403dd97 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -57,10 +57,10 @@ workflow QC_BAM { // COLLECT WGS METRICS if ( aligner == "bwamem2" ) { - PICARD_COLLECTWGSMETRICS ( bam, fasta, intervals_wgs ) + PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, intervals_wgs ) ch_cov = PICARD_COLLECTWGSMETRICS.out.metrics ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions) - PICARD_COLLECTWGSMETRICS_Y ( bam, fasta, intervals_y ) + PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, intervals_y ) ch_cov_y = PICARD_COLLECTWGSMETRICS_Y.out.metrics ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) } else if ( aligner == "sentieon" ) { From ec2ab4eb4aeccecec0194f5c837474a5af3cf437 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 13 Jan 2023 13:49:42 +0100 Subject: [PATCH 0901/1921] Updated module --- modules.json | 3 ++- .../nf-core/picard/collectwgsmetrics/main.nf | 9 ++++---- .../nf-core/picard/collectwgsmetrics/meta.yml | 21 +++++++++++++++++-- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/modules.json b/modules.json index 6baf8ed1..5857c8f7 100644 --- a/modules.json +++ b/modules.json @@ -232,7 +232,8 @@ }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "9c92f40092d7a9112953b7571f7021f65740bf7f" + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 62074d40..b767b99c 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -1,15 +1,16 @@ process PICARD_COLLECTWGSMETRICS { tag "$meta.id" - label 'process_medium' + label 'process_single' - conda (params.enable_conda ? "bioconda::picard=2.27.4 r::r-base" : null) + conda "bioconda::picard=2.27.4 r::r-base" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" input: - tuple val(meta), path(bam) - path fasta + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta2), path(fai) path intervallist output: diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index b9dc37af..57ab9cfe 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -22,11 +22,28 @@ input: e.g. [ id:'test', single_end:false ] - bam: type: file - description: BAM file - pattern: "*.{bam}" + description: Aligned reads file + pattern: "*.{bam, cram}" + - bai: + type: file + description: (Optional) Aligned reads file index + pattern: "*.{bai,crai}" + - meta2: + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Genome fasta file + pattern: "*.{fa,fasta,fna}" + - meta2: + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Genome fasta file index + pattern: "*.{fai}" - intervallist: type: file description: Picard Interval List. Defines which contigs to include. Can be generated from a BED file with GATK BedToIntervalList. From ec3b5d10d5ffc5e3b324856d5f8553393c2768dc Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 13 Jan 2023 13:54:12 +0100 Subject: [PATCH 0902/1921] Fixed input channel --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 7403dd97..ef206187 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -57,10 +57,10 @@ workflow QC_BAM { // COLLECT WGS METRICS if ( aligner == "bwamem2" ) { - PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, intervals_wgs ) + PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) ch_cov = PICARD_COLLECTWGSMETRICS.out.metrics ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions) - PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, intervals_y ) + PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) ch_cov_y = PICARD_COLLECTWGSMETRICS_Y.out.metrics ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) } else if ( aligner == "sentieon" ) { From f3bb9fc5b6524d4a4e8577472a725a36b48dca16 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 Jan 2023 16:08:17 +0100 Subject: [PATCH 0903/1921] added meta --- workflows/raredisease.nf | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 230b6246..e6ba0902 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -223,7 +223,7 @@ workflow RAREDISEASE { : Channel.empty() ch_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) - ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).collect() + 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 ?: Channel.empty() ) ch_sequence_dictionary_no_meta = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() : ( ch_references.sequence_dict ?: Channel.empty() ) @@ -260,7 +260,7 @@ workflow RAREDISEASE { ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - + // STEP 1.5: BAM QUALITY CHECK QC_BAM ( ch_mapped.marked_bam, @@ -286,7 +286,7 @@ workflow RAREDISEASE { // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV ( params.variant_caller, - ch_mapped.bam_bai, + ALIGN.out.bam_bai, ch_genome_fasta_no_meta, ch_genome_fai_no_meta, ch_known_dbsnp, @@ -359,7 +359,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FILTER_VEP_SV.out.versions) } - +/* ANALYSE_MT ( ch_mapped.bam_bai, ch_bwamem2_index, @@ -433,7 +433,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FILTER_VEP_SNV.out.versions) } - +*/ // // MODULE: Pipeline reporting // @@ -464,6 +464,7 @@ workflow RAREDISEASE { ch_multiqc_logo.toList() ) multiqc_report = MULTIQC.out.report.toList() + } /* From a1e352d5fbb9868c270936316b934488442df1c4 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 Jan 2023 16:25:28 +0100 Subject: [PATCH 0904/1921] fixed for single and multiple vcfs --- .../local/variant_calling/call_snv_sentieon.nf | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 39d21c08..07d8b3e6 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -45,14 +45,18 @@ workflow CALL_SNV_SENTIEON { case_info .combine(ch_vcf_idx) .groupTuple() - .set{ ch_vcf_idx_case } - - BCFTOOLS_MERGE(ch_vcf_idx_case,[],fasta,fai) + .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list + single: it[1].size() == 1 + multiple: it[1].size() > 1 + } + .set{ ch_vcf_idx_merge_in } + BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple,[],fasta,fai) ch_split_multi_in = BCFTOOLS_MERGE.out.merged_variants .map{meta, bcf -> - return [meta, bcf, []]} - SPLIT_MULTIALLELICS_SEN(ch_split_multi_in, fasta) + return [meta, bcf, []]} + ch_vcf_idx_case = ch_vcf_idx_merge_in.single.mix(ch_split_multi_in) + SPLIT_MULTIALLELICS_SEN(ch_vcf_idx_case, fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_SEN.out.vcf .map{meta, vcf -> From 991575229447edbd422624bebd46706bddc7a167 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 Jan 2023 16:39:55 +0100 Subject: [PATCH 0905/1921] cleaned --- workflows/raredisease.nf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e6ba0902..ad6202f2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -286,7 +286,7 @@ workflow RAREDISEASE { // TODO: There should be a conditional to execute certain variant callers (e.g. sentieon, gatk, deepvariant) defined by the user and we need to think of a default caller. CALL_SNV ( params.variant_caller, - ALIGN.out.bam_bai, + ch_mapped.bam_bai, ch_genome_fasta_no_meta, ch_genome_fai_no_meta, ch_known_dbsnp, @@ -359,7 +359,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FILTER_VEP_SV.out.versions) } -/* + ANALYSE_MT ( ch_mapped.bam_bai, ch_bwamem2_index, @@ -433,7 +433,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(FILTER_VEP_SNV.out.versions) } -*/ + // // MODULE: Pipeline reporting // @@ -482,7 +482,6 @@ workflow.onComplete { NfcoreTemplate.IM_notification(workflow, params, summary_params, projectDir, log) } } - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ THE END From 4c32e64e51b78abb3bcbcd84d8cb324cf643eb95 Mon Sep 17 00:00:00 2001 From: sima-r Date: Fri, 13 Jan 2023 16:41:38 +0100 Subject: [PATCH 0906/1921] cleaned --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ad6202f2..23eeb5d3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -260,7 +260,7 @@ workflow RAREDISEASE { ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - + // STEP 1.5: BAM QUALITY CHECK QC_BAM ( ch_mapped.marked_bam, @@ -464,7 +464,6 @@ workflow RAREDISEASE { ch_multiqc_logo.toList() ) multiqc_report = MULTIQC.out.report.toList() - } /* @@ -482,6 +481,7 @@ workflow.onComplete { NfcoreTemplate.IM_notification(workflow, params, summary_params, projectDir, log) } } + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ THE END From 3fcd8eeefc4471937ca582d7f2af5140f1e3722c Mon Sep 17 00:00:00 2001 From: sima-r Date: Thu, 26 Jan 2023 16:07:38 +0100 Subject: [PATCH 0907/1921] added missing inputs --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index ef206187..897cf46e 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -64,10 +64,10 @@ workflow QC_BAM { ch_cov_y = PICARD_COLLECTWGSMETRICS_Y.out.metrics ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) } else if ( aligner == "sentieon" ) { - SENTIEON_WGSMETRICS ( bam, fasta ) + SENTIEON_WGSMETRICS ( bam, fasta, fai) ch_cov = SENTIEON_WGSMETRICS.out.metrics ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS.out.versions) - SENTIEON_WGSMETRICS_Y ( bam, fasta ) + SENTIEON_WGSMETRICS_Y ( bam, fasta, fai) ch_cov_y = SENTIEON_WGSMETRICS_Y.out.metrics ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS_Y.out.versions) } else { From 0d783ccfdd7cab9522952f45ee64109c612292bf Mon Sep 17 00:00:00 2001 From: sima-r Date: Thu, 26 Jan 2023 16:13:05 +0100 Subject: [PATCH 0908/1921] Corrected output channel names --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 897cf46e..d131fd77 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -65,10 +65,10 @@ workflow QC_BAM { ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) } else if ( aligner == "sentieon" ) { SENTIEON_WGSMETRICS ( bam, fasta, fai) - ch_cov = SENTIEON_WGSMETRICS.out.metrics + ch_cov = SENTIEON_WGSMETRICS.out.wgs_metrics ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS.out.versions) SENTIEON_WGSMETRICS_Y ( bam, fasta, fai) - ch_cov_y = SENTIEON_WGSMETRICS_Y.out.metrics + ch_cov_y = SENTIEON_WGSMETRICS_Y.out.wgs_metrics ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS_Y.out.versions) } else { exit 1, 'Please provide a valid aligner!' From cb7b061620eed99523e33dfa8ec51db30a8fdc93 Mon Sep 17 00:00:00 2001 From: sima-r Date: Thu, 26 Jan 2023 16:20:10 +0100 Subject: [PATCH 0909/1921] corrected the inputs to wgsmetrics functions --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index d131fd77..ffdbc87d 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -64,10 +64,10 @@ workflow QC_BAM { ch_cov_y = PICARD_COLLECTWGSMETRICS_Y.out.metrics ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) } else if ( aligner == "sentieon" ) { - SENTIEON_WGSMETRICS ( bam, fasta, fai) + SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) ch_cov = SENTIEON_WGSMETRICS.out.wgs_metrics ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS.out.versions) - SENTIEON_WGSMETRICS_Y ( bam, fasta, fai) + SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) ch_cov_y = SENTIEON_WGSMETRICS_Y.out.wgs_metrics ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS_Y.out.versions) } else { From 1abaa94acb53c6788fe3d7119c0618707cbd40b9 Mon Sep 17 00:00:00 2001 From: sima-r Date: Thu, 26 Jan 2023 16:35:49 +0100 Subject: [PATCH 0910/1921] Matched files with inputs in the qc_bam --- modules/local/sentieon/wgsmetricsalgo.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index f6c25b0e..bce76109 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -7,8 +7,8 @@ process SENTIEON_WGSMETRICSALGO { input: tuple val(meta), path(bam), path(bai) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta2), path(fai) output: tuple val(meta), path('*wgs_metrics.txt'), emit: wgs_metrics From afdd963c63b2558c17790d6a6cfd911c1c8601a7 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Tue, 31 Jan 2023 15:02:28 +0100 Subject: [PATCH 0911/1921] Differentiated output folders for wg and y --- conf/modules.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f95a3445..1046c095 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -488,7 +488,7 @@ process { withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -496,7 +496,7 @@ process { withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -505,7 +505,7 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] @@ -514,7 +514,7 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics" }, + path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] From 9c96516d632024adce834707b4af3b2742f289e4 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Mon, 6 Feb 2023 14:27:16 +0100 Subject: [PATCH 0912/1921] Refactor - replace if-else logic by ext.when --- conf/modules.config | 4 ++++ subworkflows/local/qc_bam.nf | 28 +++++++++++----------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 1046c095..80edf200 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -487,6 +487,7 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { + ext.when = params.aligner.equals("bwamem2") publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, @@ -495,6 +496,7 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { + ext.when = params.aligner.equals("bwamem2") publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, mode: params.publish_dir_mode, @@ -503,6 +505,7 @@ process { } withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { + ext.when = params.aligner.equals("sentieon") ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, @@ -512,6 +515,7 @@ process { } withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { + ext.when = params.aligner.equals("sentieon") ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index e18c0356..ef41d368 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -51,23 +51,17 @@ workflow QC_BAM { ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) // COLLECT WGS METRICS - if ( aligner == "bwamem2" ) { - PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) - ch_cov = PICARD_COLLECTWGSMETRICS.out.metrics - ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions) - PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) - ch_cov_y = PICARD_COLLECTWGSMETRICS_Y.out.metrics - ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions) - } else if ( aligner == "sentieon" ) { - SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) - ch_cov = SENTIEON_WGSMETRICS.out.wgs_metrics - ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS.out.versions) - SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) - ch_cov_y = SENTIEON_WGSMETRICS_Y.out.wgs_metrics - ch_versions = ch_versions.mix(SENTIEON_WGSMETRICS_Y.out.versions) - } else { - exit 1, 'Please provide a valid aligner!' - } + PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) + PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) + + SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) + SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) + + 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) + + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions, SENTIEON_WGSMETRICS.out.versions) + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions, SENTIEON_WGSMETRICS_Y.out.versions) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] From e17571c9802105eef6e4a1d7c2697e87efab7da6 Mon Sep 17 00:00:00 2001 From: sima-r Date: Mon, 6 Feb 2023 14:48:15 +0100 Subject: [PATCH 0913/1921] corrections --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 80edf200..b854bbce 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -430,7 +430,7 @@ process { ] } - withName: '.*CALL_SNV_DEEPVARIANT:TABIX_SEN' { + withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { publishDir = [ path: { "${params.outdir}/sentieon_normvcf" }, mode: params.publish_dir_mode, From 684d3e2265146e22798d82f9115d3d1eb2eeb3af Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Feb 2023 00:08:49 +0100 Subject: [PATCH 0914/1921] fix sentieon error --- conf/modules.config | 2 +- .../local/variant_calling/call_snv_deepvariant.nf | 15 ++++++++------- .../local/variant_calling/call_snv_sentieon.nf | 4 ++-- workflows/raredisease.nf | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 6e46b3c2..9b2b80a4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -430,7 +430,7 @@ process { ] } - withName: '.*CALL_SNV_DEEPVARIANT:TABIX_SEN' { + withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { publishDir = [ path: { "${params.outdir}/sentieon_normvcf" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index e965ffe8..ced5a1f0 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -17,17 +17,18 @@ workflow CALL_SNV_DEEPVARIANT { main: ch_versions = Channel.empty() + bam.map { meta, bam, bai -> return [meta, bam, bai, []] } .set { ch_bam } DEEPVARIANT ( ch_bam, fasta, fai ) - DEEPVARIANT.out - .gvcf + DEEPVARIANT.out.gvcf .collect{it[1]} .toList() - .set { file_list } + .collect() + .set { ch_file_list } case_info .combine(file_list) @@ -36,13 +37,13 @@ workflow CALL_SNV_DEEPVARIANT { GLNEXUS ( ch_gvcfs ) ch_split_multi_in = GLNEXUS.out.bcf - .map{meta, bcf -> - return [meta, bcf, []]} + .map{ meta, bcf -> + return [meta, bcf, []] } SPLIT_MULTIALLELICS_GL (ch_split_multi_in, fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_GL.out.vcf - .map{meta, vcf -> - return [meta, vcf, []]} + .map{ meta, vcf -> + return [meta, vcf, []] } REMOVE_DUPLICATES_GL (ch_remove_dup_in, 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 8c6698bd..f451b877 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -47,14 +47,14 @@ workflow CALL_SNV_SENTIEON { .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list single: it[1].size() == 1 multiple: it[1].size() > 1 - } + } .set{ ch_vcf_idx_merge_in } BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple,[],fasta,fai) ch_split_multi_in = BCFTOOLS_MERGE.out.merged_variants .map{meta, bcf -> return [meta, bcf, []]} - ch_vcf_idx_case = ch_vcf_idx_merge_in.single.mix(ch_split_multi_in) + ch_vcf_idx_case = ch_vcf_idx_merge_in.single.mix(ch_split_multi_in) SPLIT_MULTIALLELICS_SEN(ch_vcf_idx_case, fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_SEN.out.vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6007fa37..d80f8c1e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -143,7 +143,7 @@ workflow RAREDISEASE { 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.ml_model ? Channel.fromPath(params.ml_model).collect() - : Channel.value([]) + : Channel.empty() 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() From 0ec8c06a35b923dd91ce7d08f3a3af273de00fa8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Feb 2023 06:05:10 +0100 Subject: [PATCH 0915/1921] update snv sentieon --- conf/modules.config | 3 ++- .../local/variant_calling/call_snv_deepvariant.nf | 2 +- subworkflows/local/variant_calling/call_snv_sentieon.nf | 8 ++++---- workflows/raredisease.nf | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9b2b80a4..179df41f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -59,7 +59,7 @@ process { process { withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { - ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} + ext.when = {!params.bwamem2_index} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -405,6 +405,7 @@ process { } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { + ext.when = { params.ml_model } publishDir = [ path: { "${params.outdir}/sentieon_dnamodelapply" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index ced5a1f0..683cdf66 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -31,7 +31,7 @@ workflow CALL_SNV_DEEPVARIANT { .set { ch_file_list } case_info - .combine(file_list) + .combine(ch_file_list) .set { ch_gvcfs } GLNEXUS ( ch_gvcfs ) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index f451b877..36332160 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -27,14 +27,13 @@ workflow CALL_SNV_SENTIEON { ch_vcf = SENTIEON_DNASCOPE.out.vcf ch_index = SENTIEON_DNASCOPE.out.vcf_index - if ( ml_model ) { + ch_vcf_idx = ch_vcf.join( ch_index ) - ch_vcf_idx = ch_vcf.join( ch_index ) + SENTIEON_DNAMODELAPPLY ( ch_vcf_idx, fasta, fai, ml_model ) - SENTIEON_DNAMODELAPPLY ( ch_vcf_idx, fasta, fai, ml_model ) + if (params.ml_model) { ch_vcf = SENTIEON_DNAMODELAPPLY.out.vcf ch_index = SENTIEON_DNAMODELAPPLY.out.vcf_index - ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) } ch_vcf.join(ch_index) @@ -64,6 +63,7 @@ workflow CALL_SNV_SENTIEON { TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) + // ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_MERGE.out.versions.first()) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_SEN.out.versions.first()) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d80f8c1e..6007fa37 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -143,7 +143,7 @@ workflow RAREDISEASE { 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.ml_model ? Channel.fromPath(params.ml_model).collect() - : Channel.empty() + : 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() From 80d9e3eaaaeded6b831f1bc365f1862e0aa847b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 8 Feb 2023 06:51:11 +0100 Subject: [PATCH 0916/1921] include versions --- subworkflows/local/variant_calling/call_snv_sentieon.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 36332160..01d4297f 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -63,7 +63,7 @@ workflow CALL_SNV_SENTIEON { TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) - // ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_MERGE.out.versions.first()) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_SEN.out.versions.first()) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) From e5e2fc4b22158bb2cff04d2e9a5b1541ebe24dd7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Feb 2023 00:45:45 +0100 Subject: [PATCH 0917/1921] update mitochondrial subworkflow --- conf/modules.config | 36 +++++++++++++++---- main.nf | 1 + nextflow_schema.json | 8 +++++ subworkflows/local/analyse_MT.nf | 4 +++ .../local/mitochondria/align_and_call_MT.nf | 31 +++++++++------- subworkflows/local/prepare_references.nf | 26 ++++++++------ workflows/raredisease.nf | 5 +++ 7 files changed, 80 insertions(+), 31 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 179df41f..8e73bd01 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -59,7 +59,7 @@ process { process { withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { - ext.when = {!params.bwamem2_index} + ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -70,7 +70,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_SHIFT_MT' { - ext.when = {!params.mt_bwamem2_index_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} + ext.when = {!params.mt_bwamem2_index_shift && params.mt_fasta_shift && !(params.analysis_type == "wes") && params.aligner == "bwamem2"} publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, @@ -80,7 +80,7 @@ process { ] } - withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX' { + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { ext.when = {!params.bwa_index && params.aligner == "sentieon"} publishDir = [ path: { "${params.outdir}/references" }, @@ -90,8 +90,18 @@ process { ] } - withName: '.*PREPARE_REFERENCES:BWA_INDEX' { - ext.when = {!params.bwa_index && params.aligner == "bwamem2"} + 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"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference + ] + } + + withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { + ext.when = {!params.bwa_index && !(params.aligner == "sentieon")} publishDir = [ path: { "${params.outdir}/references" }, mode: 'copy', @@ -895,10 +905,16 @@ process { process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(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.prefix = { "${meta.id}.sorted" } + } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' @@ -943,10 +959,16 @@ process { process { 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") } + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(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.prefix = { "${meta.id}.sorted" } + } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' diff --git a/main.nf b/main.nf index 5143e530..fb1ed0ed 100644 --- a/main.nf +++ b/main.nf @@ -32,6 +32,7 @@ params.known_indels = WorkflowMain.getGenomeAttribute(params, 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') diff --git a/nextflow_schema.json b/nextflow_schema.json index 0f243e6c..96cfefd9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -204,6 +204,14 @@ "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", diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index d61fb852..848d5463 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -10,6 +10,7 @@ include { MERGE_ANNOTATE_MT } from './mitochondria/ workflow ANALYSE_MT { take: bam // channel: [ val(meta), file(bam), file(bai) ] + genome_bwa_index // channel: [ /path/to/bwa/index/ ] genome_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] genome_fasta_meta // channel: [ [], genome.fasta ] genome_fasta_no_meta // channel: [ genome.fasta ] @@ -17,6 +18,7 @@ workflow ANALYSE_MT { genome_dict_no_meta // channel: [ genome.dict ] genome_fai // channel: [ genome.fai ] mt_intervals // channel: [ file(non_control_region.chrM.interval_list) ] + shift_mt_bwa_index // channel: [ /path/to/bwa/index/ ] shift_mt_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] shift_mt_fasta // channel: [ genome.fasta ] shift_mt_dict // channel: [ genome.dict ] @@ -43,6 +45,7 @@ workflow ANALYSE_MT { ALIGN_AND_CALL_MT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, + genome_bwa_index, genome_bwamem2_index, genome_fasta_no_meta, genome_dict_no_meta, @@ -53,6 +56,7 @@ workflow ANALYSE_MT { ALIGN_AND_CALL_MT_SHIFT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, + shift_mt_bwa_index, shift_mt_bwamem2_index, shift_mt_fasta, shift_mt_dict, diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 22787366..959ac4aa 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -2,6 +2,7 @@ // Align and call MT // +include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/local/sentieon/bwamem' include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' @@ -15,27 +16,31 @@ include { TABIX_TABIX as TABIX_TABIX_MT } fr workflow ALIGN_AND_CALL_MT { take: - fastq // channel: [ val(meta), path('*.fastq.gz') ] - ubam // channel: [ val(meta), path('*.bam') ] - genome_index // channel: [ /path/to/bwamem2/index/ ] - genome_fasta // channel: [ genome.fasta ] - genome_dict // channel: [ genome.dict ] - genome_fai // channel: [ genome.fai ] - intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] + fastq // channel: [ val(meta), path('*.fastq.gz') ] + ubam // channel: [ val(meta), path('*.bam') ] + index_bwa // channel: [ /path/to/bwamem2/index/ ] + index_bwamem2 // channel: [ /path/to/bwamem2/index/ ] + fasta // channel: [ genome.fasta ] + dict // channel: [ genome.dict ] + fai // channel: [ genome.fai ] + intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] main: ch_versions = Channel.empty() // Outputs bam files - BWAMEM2_MEM_MT (fastq , genome_index, true) - ch_mt_bam = BWAMEM2_MEM_MT.out.bam + BWAMEM2_MEM_MT (fastq , index_bwamem2, true) + + SENTIEON_BWAMEM_MT ( fastq, fasta, fai, index_bwa ) + + ch_mt_bam = Channel.empty().mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam) ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) - GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, genome_fasta, genome_dict) + GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, fasta, dict) PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) - PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, genome_fasta, genome_fai) + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, fasta, fai) SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) @@ -43,7 +48,7 @@ workflow ALIGN_AND_CALL_MT { ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(intervals_mt) - GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, genome_fasta, genome_fai, genome_dict, [], [], [],[]) + GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, fasta, fai, dict, [], [], [],[]) // Haplocheck // TODO: probably it will be outside this subworkflow as we want to run @@ -58,7 +63,7 @@ workflow ALIGN_AND_CALL_MT { return [meta, vcf, tbi, stats, [], [], [], []] } - GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, genome_fasta, genome_fai, genome_dict) + GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, fasta, fai, dict) ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 7c067b97..f84a6eaa 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -2,7 +2,7 @@ // Prepare reference files // -include { BWA_INDEX } from '../../modules/nf-core/bwa/index/main' +include { BWA_INDEX as BWA_INDEX_GENOME } from '../../modules/nf-core/bwa/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_SHIFT_MT } from '../../modules/nf-core/bwamem2/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' @@ -14,7 +14,8 @@ include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modul include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' 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 { SENTIEON_BWAINDEX } from '../../modules/local/sentieon/bwamemindex' +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' include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' @@ -34,17 +35,18 @@ workflow PREPARE_REFERENCES { target_bed main: - ch_versions = Channel.empty() - ch_tbi = Channel.empty() - ch_bgzip_tbi = Channel.empty() - ch_bwa = Channel.empty() - ch_sentieonbwa= Channel.empty() + ch_versions = Channel.empty() + ch_tbi = Channel.empty() + ch_bgzip_tbi = Channel.empty() + ch_bwa = Channel.empty() + ch_sentieonbwa = Channel.empty() // Genome indices - BWA_INDEX(fasta_meta).index.set{ch_bwa} + BWA_INDEX_GENOME(fasta_meta).index.set{ch_bwa} BWAMEM2_INDEX_GENOME(fasta_meta) BWAMEM2_INDEX_SHIFT_MT(mt_fasta_shift_meta) - SENTIEON_BWAINDEX(fasta_meta).index.set{ch_sentieonbwa} + SENTIEON_BWAINDEX_GENOME(fasta_meta).index.set{ch_sentieonbwa} + SENTIEON_BWAINDEX_SHIFT_MT(mt_fasta_shift_meta) SAMTOOLS_FAIDX_GENOME(fasta_meta) SAMTOOLS_FAIDX_SHIFT_MT(mt_fasta_shift_meta) GATK_SD(fasta_no_meta) @@ -73,10 +75,11 @@ workflow PREPARE_REFERENCES { CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) // Gather versions - ch_versions = ch_versions.mix(BWA_INDEX.out.versions) + ch_versions = ch_versions.mix(BWA_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_SHIFT_MT.out.versions) - ch_versions = ch_versions.mix(SENTIEON_BWAINDEX.out.versions) + 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(GATK_SD.out.versions) @@ -93,6 +96,7 @@ workflow PREPARE_REFERENCES { emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() + bwa_index_mt_shift = SENTIEON_BWAINDEX_SHIFT_MT.out.index.collect() bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6007fa37..8046694d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -29,6 +29,7 @@ def checkPathParamList = [ 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, @@ -203,6 +204,8 @@ workflow RAREDISEASE { ch_bait_intervals = ch_references.bait_intervals ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).map {it -> [[id:it[0].simpleName], it]}.collect() : ( ch_references.bwa_index ?: Channel.empty() ) + 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 ?: Channel.empty() ) ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).map {it -> [[id:it[0].simpleName], it]}.collect() : ( ch_references.bwamem2_index ?: Channel.empty() ) ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() @@ -359,6 +362,7 @@ workflow RAREDISEASE { ANALYSE_MT ( ch_mapped.bam_bai, + ch_bwa_index, ch_bwamem2_index, ch_genome_fasta_meta, ch_genome_fasta_no_meta, @@ -366,6 +370,7 @@ workflow RAREDISEASE { ch_sequence_dictionary_no_meta, ch_genome_fai_no_meta, ch_mt_intervals, + ch_bwa_index_mt_shift, ch_bwamem2_index_mt_shift, ch_mt_fasta_shift_no_meta, ch_sequence_dictionary_mt_shift, From 1186d1d746eef795c2b95e2952348aab36fa0254 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Feb 2023 00:49:53 +0100 Subject: [PATCH 0918/1921] fixed editor config lint error --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 8e73bd01..6e9d8ac1 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -100,7 +100,7 @@ process { ] } - withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { + withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { ext.when = {!params.bwa_index && !(params.aligner == "sentieon")} publishDir = [ path: { "${params.outdir}/references" }, @@ -963,7 +963,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SENTIEON_BWAMEM_MT' { + 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.prefix = { "${meta.id}.sorted" } From 1df227725dfb22aaeecf69ac737b165177fcf918 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Feb 2023 10:53:24 +0100 Subject: [PATCH 0919/1921] add mt switch --- nextflow.config | 3 +- nextflow_schema.json | 6 ++++ workflows/raredisease.nf | 78 +++++++++++++++++++++++----------------- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/nextflow.config b/nextflow.config index 886cbcb8..86e262ad 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,7 +23,8 @@ params { // Main options analysis_type = 'wgs' annotate_snv_switch = true - annotate_sv_switch = false + annotate_sv_switch = true + annotate_mt_switch = true gens_switch = false platform = 'illumina' diff --git a/nextflow_schema.json b/nextflow_schema.json index 0f243e6c..d72972c3 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -372,6 +372,12 @@ "fa_icon": "fas fa-book", "enum": ["wgs", "wes", "mito"] }, + "annotate_mt_switch": { + "type": "boolean", + "default": true, + "description": "Specifies whether or not to run a separate subworkflow for mitochondria.", + "fa_icon": "fas fa-book" + }, "annotate_snv_switch": { "type": "boolean", "default": true, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6007fa37..5dcc7cba 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -357,27 +357,30 @@ workflow RAREDISEASE { } - ANALYSE_MT ( - ch_mapped.bam_bai, - 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_mt_intervals, - ch_bwamem2_index_mt_shift, - ch_mt_fasta_shift_no_meta, - ch_sequence_dictionary_mt_shift, - ch_mt_shift_fai, - ch_mt_intervals_shift, - ch_mt_backchain_shift, - params.genome, - params.vep_cache_version, - ch_vep_cache, - CHECK_INPUT.out.case_info - ) - ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) + if (params.annotate_mt_switch) { + ANALYSE_MT ( + ch_mapped.bam_bai, + 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_mt_intervals, + ch_bwamem2_index_mt_shift, + ch_mt_fasta_shift_no_meta, + ch_sequence_dictionary_mt_shift, + ch_mt_shift_fai, + ch_mt_intervals_shift, + ch_mt_backchain_shift, + params.genome, + params.vep_cache_version, + ch_vep_cache, + CHECK_INPUT.out.case_info + ) + ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) + + } // VARIANT ANNOTATION ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) @@ -398,19 +401,28 @@ workflow RAREDISEASE { ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) - ch_snv_annotate.tbi - .concat(ANALYSE_MT.out.tbi) - .groupTuple() - .set { ch_merged_tbi } - ch_snv_annotate.vcf_ann - .concat(ANALYSE_MT.out.vcf) - .groupTuple() - .set { ch_merged_vcf } - ch_merged_vcf.join(ch_merged_tbi).set {ch_concat_in} - - BCFTOOLS_CONCAT (ch_concat_in) + ch_snv_annotate = ANNOTATE_SNVS.out.vcf_ann + + if (params.annotate_mt_switch) { + + ANNOTATE_SNVS.out.tbi + .concat(ANALYSE_MT.out.tbi) + .groupTuple() + .set { ch_merged_tbi } + + ANNOTATE_SNVS.out.vcf_ann + .concat(ANALYSE_MT.out.vcf) + .groupTuple() + .set { ch_merged_vcf } + + ch_merged_vcf.join(ch_merged_tbi).set {ch_concat_in} + + BCFTOOLS_CONCAT (ch_concat_in) + ch_snv_annotate = BCFTOOLS_CONCAT.out.vcf + } + ANN_CSQ_PLI_SNV ( - BCFTOOLS_CONCAT.out.vcf, + ch_snv_annotate, ch_variant_consequences ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) From 5c6fd9e2ffc59f68de0f0be698368d71c4e0e81e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Feb 2023 13:58:15 +0100 Subject: [PATCH 0920/1921] revert change to nextflow config --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 86e262ad..a36589d3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,7 +23,7 @@ params { // Main options analysis_type = 'wgs' annotate_snv_switch = true - annotate_sv_switch = true + annotate_sv_switch = false annotate_mt_switch = true gens_switch = false platform = 'illumina' From 0b1a7e38181152713ea1364604e8c17f5001ca08 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Feb 2023 13:21:12 +0100 Subject: [PATCH 0921/1921] review suggestions --- subworkflows/local/mitochondria/align_and_call_MT.nf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 959ac4aa..1a45a28a 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -16,19 +16,18 @@ include { TABIX_TABIX as TABIX_TABIX_MT } fr workflow ALIGN_AND_CALL_MT { take: - fastq // channel: [ val(meta), path('*.fastq.gz') ] - ubam // channel: [ val(meta), path('*.bam') ] + fastq // channel: [ val(meta), path('*.fastq.gz') ] + ubam // channel: [ val(meta), path('*.bam') ] index_bwa // channel: [ /path/to/bwamem2/index/ ] index_bwamem2 // channel: [ /path/to/bwamem2/index/ ] fasta // channel: [ genome.fasta ] dict // channel: [ genome.dict ] fai // channel: [ genome.fai ] - intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] + intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] main: ch_versions = Channel.empty() - // Outputs bam files BWAMEM2_MEM_MT (fastq , index_bwamem2, true) SENTIEON_BWAMEM_MT ( fastq, fasta, fai, index_bwa ) From 642dd347465db88fffa3eb42ddce04d96b03d123 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Feb 2023 13:24:40 +0100 Subject: [PATCH 0922/1921] review suggestions --- nextflow.config | 2 +- nextflow_schema.json | 12 ++++++------ subworkflows/local/call_snv.nf | 11 ++--------- workflows/raredisease.nf | 21 ++++++++++++++++++--- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/nextflow.config b/nextflow.config index a36589d3..ccd41f42 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,7 +24,7 @@ params { analysis_type = 'wgs' annotate_snv_switch = true annotate_sv_switch = false - annotate_mt_switch = true + dedicated_mt_analysis = true gens_switch = false platform = 'illumina' diff --git a/nextflow_schema.json b/nextflow_schema.json index d72972c3..46bf51ba 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -372,12 +372,6 @@ "fa_icon": "fas fa-book", "enum": ["wgs", "wes", "mito"] }, - "annotate_mt_switch": { - "type": "boolean", - "default": true, - "description": "Specifies whether or not to run a separate subworkflow for mitochondria.", - "fa_icon": "fas fa-book" - }, "annotate_snv_switch": { "type": "boolean", "default": true, @@ -390,6 +384,12 @@ "description": "Specifies whether or not to run annotate structural variant subworkflow.", "fa_icon": "fas fa-book" }, + "dedicated_mt_analysis": { + "type": "boolean", + "default": true, + "description": "Specifies whether or not to run a separate subworkflow for mitochondrial analysis.", + "fa_icon": "fas fa-book" + }, "gens_switch": { "type": "boolean", "default": false, diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 23e94ed0..a1e98a2f 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -45,18 +45,11 @@ workflow CALL_SNV { ch_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) ch_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) - ch_vcf.join(ch_tabix) - .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} - .set { ch_selvar_in } - - GATK4_SELECTVARIANTS(ch_selvar_in) - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) - ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) emit: - vcf = GATK4_SELECTVARIANTS.out.vcf - tabix = GATK4_SELECTVARIANTS.out.tbi + vcf = ch_vcf + tabix = ch_tabix versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5dcc7cba..c7020450 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -84,6 +84,7 @@ include { MAKE_PED } from '../modules/local/create_ include { BCFTOOLS_CONCAT } from '../modules/nf-core/bcftools/concat/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' +include { GATK4_SELECTVARIANTS } from '../modules/nf-core/gatk4/selectvariants/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' // @@ -357,7 +358,7 @@ workflow RAREDISEASE { } - if (params.annotate_mt_switch) { + if (params.dedicated_mt_analysis) { ANALYSE_MT ( ch_mapped.bam_bai, ch_bwamem2_index, @@ -383,9 +384,22 @@ workflow RAREDISEASE { } // VARIANT ANNOTATION - ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) if (params.annotate_snv_switch) { + + ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) + + if (params.dedicated_mt_analysis) { + ch_vcf + .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} + .set { ch_selvar_in } + + GATK4_SELECTVARIANTS(ch_selvar_in) // remove mitochondrial variants + + ch_vcf = GATK4_SELECTVARIANTS.out.vcf.join(GATK4_SELECTVARIANTS.out.tbi, by: [0]) + ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) + } + ANNOTATE_SNVS ( ch_vcf, ch_vcfanno_resources, @@ -403,7 +417,7 @@ workflow RAREDISEASE { ch_snv_annotate = ANNOTATE_SNVS.out.vcf_ann - if (params.annotate_mt_switch) { + if (params.dedicated_mt_analysis) { ANNOTATE_SNVS.out.tbi .concat(ANALYSE_MT.out.tbi) @@ -419,6 +433,7 @@ workflow RAREDISEASE { BCFTOOLS_CONCAT (ch_concat_in) ch_snv_annotate = BCFTOOLS_CONCAT.out.vcf + ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) } ANN_CSQ_PLI_SNV ( From 7683a73446d356463c98b9ab391e7c013139616d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Feb 2023 13:27:32 +0100 Subject: [PATCH 0923/1921] change order --- workflows/raredisease.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a46c5729..1b3127f5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -425,16 +425,16 @@ workflow RAREDISEASE { if (params.dedicated_mt_analysis) { - ANNOTATE_SNVS.out.tbi - .concat(ANALYSE_MT.out.tbi) - .groupTuple() - .set { ch_merged_tbi } - ANNOTATE_SNVS.out.vcf_ann .concat(ANALYSE_MT.out.vcf) .groupTuple() .set { ch_merged_vcf } + ANNOTATE_SNVS.out.tbi + .concat(ANALYSE_MT.out.tbi) + .groupTuple() + .set { ch_merged_tbi } + ch_merged_vcf.join(ch_merged_tbi).set {ch_concat_in} BCFTOOLS_CONCAT (ch_concat_in) From d5a9b8131bb9471ad75a0ad4a8a267a57948bccb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Feb 2023 13:36:06 +0100 Subject: [PATCH 0924/1921] remove extra spaces --- 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 1a45a28a..5baddbc9 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -2,7 +2,7 @@ // Align and call MT // -include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/local/sentieon/bwamem' +include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/local/sentieon/bwamem' include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' From 339471c46c73bd4881ac6e7892b3693ddd6233f4 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 14 Feb 2023 15:34:01 +0100 Subject: [PATCH 0925/1921] Added bcftools filter --- .../local/variant_calling/call_snv_sentieon.nf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 01d4297f..4076e2dd 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -8,6 +8,9 @@ include { BCFTOOLS_MERGE } from '../../../modules/nf-c include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' include { BCFTOOLS_NORM as REMOVE_DUPLICATES_SEN } from '../../../modules/nf-core/bcftools/norm/main' include { TABIX_TABIX as TABIX_SEN } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_FILTER as BCF_FILTER_ONE } from '../../../modules/nf-core/bcftools/filter/main' +include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-core/bcftools/filter/main' workflow CALL_SNV_SENTIEON { take: @@ -36,6 +39,12 @@ workflow CALL_SNV_SENTIEON { ch_index = SENTIEON_DNAMODELAPPLY.out.vcf_index } + BCF_FILTER_ONE (ch_vcf ) + BCF_FILTER_TWO ( BCF_FILTER_ONE.out.vcf ) + ch_vcf = BCF_FILTER_TWO.out.vcf + TABIX_BCFTOOLS ( ch_vcf ) + ch_index = TABIX_BCFTOOLS.out.tbi + ch_vcf.join(ch_index) .map { meta,vcf,tbi -> return [vcf,tbi] } .set { ch_vcf_idx } @@ -68,6 +77,7 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_SEN.out.versions.first()) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) ch_versions = ch_versions.mix(TABIX_SEN.out.versions.first()) + ch_versions = ch_versions.mix(BCF_FILTER_ONE.out.versions.first()) emit: vcf = REMOVE_DUPLICATES_SEN.out.vcf From bfcef5b8cdc0eda6dfd085106e3639bc1d2ccec3 Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 14 Feb 2023 15:48:17 +0100 Subject: [PATCH 0926/1921] Added bcftools filter module configs --- conf/modules.config | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 6e9d8ac1..dbe688c0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -423,6 +423,25 @@ process { ] } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { + ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" + ext.prefix = { "${meta.id}_mlfiltered_0.95" } + publishDir = [ + path: { "${params.outdir}/sentieon_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { + ext.args = "-i FILTER='\"PASS\"' -m x -Oz" + ext.prefix = { "${meta.id}_passed" } + publishDir = [ + path: { "${params.outdir}/sentieon_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } From 8488414e2fa0ea8158f1cad275efcdaa7adf24dd Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 14 Feb 2023 15:48:42 +0100 Subject: [PATCH 0927/1921] New line --- conf/modules.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index dbe688c0..314c6354 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -432,6 +432,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { ext.args = "-i FILTER='\"PASS\"' -m x -Oz" ext.prefix = { "${meta.id}_passed" } @@ -441,7 +442,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } From 56fd81e89489a971a6adc08929ff9a0a553a049a Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 14 Feb 2023 15:51:40 +0100 Subject: [PATCH 0928/1921] installed bcftools filter module --- modules.json | 5 +++ modules/nf-core/bcftools/filter/main.nf | 46 ++++++++++++++++++++++++ modules/nf-core/bcftools/filter/meta.yml | 41 +++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 modules/nf-core/bcftools/filter/main.nf create mode 100644 modules/nf-core/bcftools/filter/meta.yml diff --git a/modules.json b/modules.json index 55fa0e61..f99e87d5 100644 --- a/modules.json +++ b/modules.json @@ -10,6 +10,11 @@ "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", "installed_by": ["modules"] }, + "bcftools/filter": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, "bcftools/merge": { "branch": "master", "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf new file mode 100644 index 00000000..4e02009d --- /dev/null +++ b/modules/nf-core/bcftools/filter/main.nf @@ -0,0 +1,46 @@ +process BCFTOOLS_FILTER { + tag "$meta.id" + label 'process_medium' + + 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(vcf) + + output: + tuple val(meta), path("*.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + bcftools filter \\ + --output ${prefix}.vcf.gz \\ + $args \\ + $vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + touch ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/filter/meta.yml b/modules/nf-core/bcftools/filter/meta.yml new file mode 100644 index 00000000..05a6d828 --- /dev/null +++ b/modules/nf-core/bcftools/filter/meta.yml @@ -0,0 +1,41 @@ +name: bcftools_filter +description: Filters VCF files +keywords: + - variant calling + - filtering + - VCF +tools: + - filter: + description: | + Apply fixed-threshold filters to VCF files. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF input file + pattern: "*.{vcf}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF filtered output file + pattern: "*.{vcf}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" From f78c1c9f0fe39b4dcc7d19367ab3139fa8954167 Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 15 Feb 2023 09:48:50 +0100 Subject: [PATCH 0929/1921] updates modules to remove enable_conda --- modules.json | 124 +++++++++--------- modules/local/add_most_severe_consequence.nf | 2 +- modules/local/add_most_severe_pli.nf | 2 +- modules/local/change_name.nf | 2 +- modules/local/check_input_vcf.nf | 2 +- modules/local/create_bed_from_fai.nf | 2 +- modules/local/create_pedfile.nf | 2 +- modules/local/ensemblvep/main.nf | 5 +- modules/local/filter_vep.nf | 5 +- modules/local/gatk4/collectreadcounts/main.nf | 2 +- modules/local/gatk4/denoisereadcounts/main.nf | 2 +- modules/local/get_chrom_sizes.nf | 2 +- modules/nf-core/bcftools/concat/main.nf | 2 +- modules/nf-core/bcftools/concat/meta.yml | 1 + modules/nf-core/bcftools/merge/main.nf | 2 +- modules/nf-core/bcftools/norm/main.nf | 2 +- 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/index/meta.yml | 2 +- modules/nf-core/bwamem2/mem/main.nf | 2 +- modules/nf-core/cat/cat/main.nf | 2 +- modules/nf-core/cnvpytor/callcnvs/main.nf | 2 +- modules/nf-core/cnvpytor/histogram/main.nf | 2 +- .../nf-core/cnvpytor/importreaddepth/main.nf | 2 +- modules/nf-core/cnvpytor/partition/main.nf | 2 +- modules/nf-core/cnvpytor/view/main.nf | 2 +- modules/nf-core/deepvariant/main.nf | 8 +- modules/nf-core/expansionhunter/main.nf | 2 +- .../nf-core/gatk4/bedtointervallist/main.nf | 2 +- .../gatk4/createsequencedictionary/main.nf | 4 +- .../nf-core/gatk4/filtermutectcalls/main.nf | 2 +- .../nf-core/gatk4/intervallisttools/main.nf | 2 +- .../nf-core/gatk4/mergebamalignment/main.nf | 2 +- modules/nf-core/gatk4/mergevcfs/main.nf | 2 +- modules/nf-core/gatk4/mutect2/main.nf | 2 +- modules/nf-core/gatk4/printreads/main.nf | 2 +- 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 | 2 +- .../nf-core/gatk4/variantfiltration/main.nf | 2 +- 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/hmtnote/main.nf | 2 +- modules/nf-core/manta/germline/main.nf | 2 +- modules/nf-core/mosdepth/main.nf | 8 +- modules/nf-core/mosdepth/meta.yml | 10 ++ modules/nf-core/multiqc/main.nf | 6 +- .../picard/addorreplacereadgroups/main.nf | 2 +- .../nf-core/picard/collecthsmetrics/main.nf | 4 +- .../picard/collectmultiplemetrics/main.nf | 4 +- modules/nf-core/picard/liftovervcf/main.nf | 2 +- modules/nf-core/picard/markduplicates/main.nf | 2 +- modules/nf-core/picard/sortvcf/main.nf | 2 +- 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 | 2 +- modules/nf-core/samtools/sort/main.nf | 2 +- modules/nf-core/samtools/stats/main.nf | 2 +- modules/nf-core/stranger/main.nf | 2 +- modules/nf-core/svdb/merge/main.nf | 2 +- modules/nf-core/svdb/query/main.nf | 2 +- modules/nf-core/tabix/bgziptabix/main.nf | 2 +- modules/nf-core/tabix/tabix/main.nf | 2 +- modules/nf-core/tiddit/cov/main.nf | 2 +- modules/nf-core/tiddit/sv/main.nf | 2 +- modules/nf-core/ucsc/wigtobigwig/main.nf | 2 +- modules/nf-core/vcfanno/main.nf | 2 +- 77 files changed, 162 insertions(+), 149 deletions(-) diff --git a/modules.json b/modules.json index 55fa0e61..5645d0c1 100644 --- a/modules.json +++ b/modules.json @@ -7,72 +7,72 @@ "nf-core": { "bcftools/concat": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "78cf39939fbe160a1410c44a6c5946f9a4c56e7e", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "9518fa4f65f3fb8cde24fde7d40333b39ec8fd65", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", - "git_sha": "653588be2a4aadab487b530643dbc9baf7a485c4", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "cnvpytor/callcnvs": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "cnvpytor/histogram": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "cnvpytor/importreaddepth": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "cnvpytor/partition": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "cnvpytor/view": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { @@ -82,12 +82,12 @@ }, "deepvariant": { "branch": "master", - "git_sha": "6e58487f28429876b7cad237afbf4685e90c7bd4", + "git_sha": "c62b41a07a00fee11ec73e2a0d4a1aec771a742b", "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "fastqc": { @@ -97,232 +97,232 @@ }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "c25943553f62be5f907e3c12c42eaf0a1b40746d", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "6220bc7d99377159f4cc7f6a421b494f3e2466d6", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "7578005a576f3ac1b0d4f10c037dde34cdedfb67", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "9b7ca0f32e122a0cd1f33689fafbad4112407b42", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "f6ee593e77fbb9fb88e506b761611cccb0bf51ac", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "c95bed5b125e90553814b8720875c8c663524619", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "glnexus": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "haplocheck": { "branch": "master", - "git_sha": "d39b18e3613d996884a11ef2948e15c4c71cffae", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "hmtnote": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "def5f182583df0c20f43ec3d4355e8ebd341aaa9", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "f24b0232ef276882e61edbacd4e3f2f687031ef2", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", - "git_sha": "3d5d18db1b39e1133505ae2fa2a062b0073c8a6a", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "eca65aa4a5e2e192ac44d6962c8f9260f314ffb8", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "cf5b9c30a2adacc581793afb79fae5f5b50bed01", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "stranger": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", - "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "svdb/query": { "branch": "master", - "git_sha": "4a8a2caf44b87734b41ea4c67f508c14f0745ee7", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", - "git_sha": "3a54013f0790674624b77e9a074ce8d22400d4fa", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", - "git_sha": "89f98091ac9e1653657b9e324e394b158d723a4f", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "5e34754d42cd2d5d248ca8673c0a53cdf5624905", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, "vcfanno": { "branch": "master", - "git_sha": "2edbd10f12f7d3d681d2196707f15140d0e4d463", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] } } diff --git a/modules/local/add_most_severe_consequence.nf b/modules/local/add_most_severe_consequence.nf index ff99b76c..9d2d9551 100644 --- a/modules/local/add_most_severe_consequence.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -2,7 +2,7 @@ process ADD_MOST_SEVERE_CSQ { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + conda "conda-forge::python=3.9.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.9--1' : 'quay.io/biocontainers/python:3.9--1' }" diff --git a/modules/local/add_most_severe_pli.nf b/modules/local/add_most_severe_pli.nf index 53108c87..dd492331 100644 --- a/modules/local/add_most_severe_pli.nf +++ b/modules/local/add_most_severe_pli.nf @@ -2,7 +2,7 @@ process ADD_MOST_SEVERE_PLI { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + conda "conda-forge::python=3.9.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.9--1' : 'quay.io/biocontainers/python:3.9--1' }" diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf index 6770f8bc..38ee7c95 100644 --- a/modules/local/change_name.nf +++ b/modules/local/change_name.nf @@ -3,7 +3,7 @@ process CHANGE_NAME { label 'process_low' label 'process_single' - conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + conda "conda-forge::python=3.9.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.9--1' : 'quay.io/biocontainers/python:3.9--1' }" diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf index c56e25ed..bc020ff1 100644 --- a/modules/local/check_input_vcf.nf +++ b/modules/local/check_input_vcf.nf @@ -2,7 +2,7 @@ process CHECK_INPUT_VCF { tag "check_vcf" label 'process_single' - conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + conda "conda-forge::python=3.9.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.9--1' : 'quay.io/biocontainers/python:3.9--1' }" diff --git a/modules/local/create_bed_from_fai.nf b/modules/local/create_bed_from_fai.nf index c097a00e..ed2a35d2 100644 --- a/modules/local/create_bed_from_fai.nf +++ b/modules/local/create_bed_from_fai.nf @@ -2,7 +2,7 @@ process BUILD_BED { tag "$meta.id" label 'process_single' - conda (params.enable_conda ? "anaconda::gawk=5.1.0" : null) + 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' }" diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf index 0ee1e96c..d5940829 100644 --- a/modules/local/create_pedfile.nf +++ b/modules/local/create_pedfile.nf @@ -2,7 +2,7 @@ process MAKE_PED { tag "make_ped" label 'process_single' - conda (params.enable_conda ? "conda-forge::python=3.9.5" : null) + conda "conda-forge::python=3.9.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/python:3.9--1' : 'quay.io/biocontainers/python:3.9--1' }" diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index a893c4d5..ecff7854 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -2,8 +2,9 @@ process ENSEMBLVEP { tag "$meta.id" label 'process_medium' - if (params.enable_conda) { - exit 1, "Conda environments cannot be used with vep at the moment. Please use Docker or Singularity containers." + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead." } container "ensemblorg/ensembl-vep:release_107.0" diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 3122b43b..4f3d8f59 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -2,8 +2,9 @@ process FILTER_VEP { tag "$meta.id" label 'process_low' - if (params.enable_conda) { - exit 1, "Conda environments cannot be used with vep at the moment. Please use Docker or Singularity containers." + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead." } container "ensemblorg/ensembl-vep:release_107.0" diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index de6fed4f..b9690e0b 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -2,7 +2,7 @@ process GATK4_COLLECTREADCOUNTS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + conda "bioconda::gatk4=4.2.4.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index 8ca2e8a7..48d3da82 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -2,7 +2,7 @@ process GATK4_DENOISEREADCOUNTS { tag "$meta.id" label 'process_high' - conda (params.enable_conda ? "bioconda::gatk4=4.2.4.1" : null) + conda "bioconda::gatk4=4.2.4.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_0' }" diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 7a483ec2..d5dc0a76 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -2,7 +2,7 @@ process GET_CHROM_SIZES { tag "$fai" label 'process_single' - conda (params.enable_conda ? "conda-forge::coreutils=8.31" : null) + 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' }" diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index f933dd13..c7c39d9f 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -2,7 +2,7 @@ process BCFTOOLS_CONCAT { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) + 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' }" diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index 167dbe5a..e8c83cd6 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -46,3 +46,4 @@ output: pattern: "versions.yml" authors: - "@abhi18av" + - "@nvnieuwk" diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index caf15d36..e664f0eb 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -2,7 +2,7 @@ process BCFTOOLS_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) + 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' }" diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index a01b339b..ef95bee4 100644 --- a/modules/nf-core/bcftools/norm/main.nf +++ b/modules/nf-core/bcftools/norm/main.nf @@ -2,7 +2,7 @@ process BCFTOOLS_NORM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) + 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' }" diff --git a/modules/nf-core/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf index b3cad8ed..dc516b02 100644 --- a/modules/nf-core/bcftools/roh/main.nf +++ b/modules/nf-core/bcftools/roh/main.nf @@ -2,7 +2,7 @@ process BCFTOOLS_ROH { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) + 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' }" diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index b0458ecd..04ced9c9 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -2,7 +2,7 @@ process BCFTOOLS_VIEW { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::bcftools=1.16" : null) + 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' }" diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index 6d70fc15..7ccf3110 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -2,7 +2,7 @@ process BWA_INDEX { tag "$fasta" label 'process_single' - conda (params.enable_conda ? "bioconda::bwa=0.7.17" : null) + 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' }" diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf index 0b7ad199..a236121b 100644 --- a/modules/nf-core/bwamem2/index/main.nf +++ b/modules/nf-core/bwamem2/index/main.nf @@ -2,7 +2,7 @@ process BWAMEM2_INDEX { tag "$fasta" label 'process_single' - conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1" : null) + 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' }" diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml index a6b11ae5..40c26c38 100644 --- a/modules/nf-core/bwamem2/index/meta.yml +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -6,7 +6,7 @@ keywords: - genome - reference tools: - - bwa: + - bwamem2: description: | BWA-mem2 is a software package for mapping DNA sequences against a large reference genome, such as the human genome. diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf index 84b99dfa..489b1704 100644 --- a/modules/nf-core/bwamem2/mem/main.nf +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -2,7 +2,7 @@ process BWAMEM2_MEM { tag "$meta.id" label 'process_high' - conda (params.enable_conda ? "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index 40e53f3e..840af4b9 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -2,7 +2,7 @@ process CAT_CAT { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "conda-forge::pigz=2.3.4" : null) + 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' }" diff --git a/modules/nf-core/cnvpytor/callcnvs/main.nf b/modules/nf-core/cnvpytor/callcnvs/main.nf index 021cd879..2a92a3d2 100644 --- a/modules/nf-core/cnvpytor/callcnvs/main.nf +++ b/modules/nf-core/cnvpytor/callcnvs/main.nf @@ -2,7 +2,7 @@ process CNVPYTOR_CALLCNVS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) + conda "bioconda::cnvpytor=1.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" diff --git a/modules/nf-core/cnvpytor/histogram/main.nf b/modules/nf-core/cnvpytor/histogram/main.nf index 2abb96e6..aebb4f89 100644 --- a/modules/nf-core/cnvpytor/histogram/main.nf +++ b/modules/nf-core/cnvpytor/histogram/main.nf @@ -2,7 +2,7 @@ process CNVPYTOR_HISTOGRAM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) + conda "bioconda::cnvpytor=1.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" diff --git a/modules/nf-core/cnvpytor/importreaddepth/main.nf b/modules/nf-core/cnvpytor/importreaddepth/main.nf index fd09d1c7..860f4f74 100644 --- a/modules/nf-core/cnvpytor/importreaddepth/main.nf +++ b/modules/nf-core/cnvpytor/importreaddepth/main.nf @@ -2,7 +2,7 @@ process CNVPYTOR_IMPORTREADDEPTH { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) + conda "bioconda::cnvpytor=1.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" diff --git a/modules/nf-core/cnvpytor/partition/main.nf b/modules/nf-core/cnvpytor/partition/main.nf index d32741ba..46b46401 100644 --- a/modules/nf-core/cnvpytor/partition/main.nf +++ b/modules/nf-core/cnvpytor/partition/main.nf @@ -2,7 +2,7 @@ process CNVPYTOR_PARTITION { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) + conda "bioconda::cnvpytor=1.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" diff --git a/modules/nf-core/cnvpytor/view/main.nf b/modules/nf-core/cnvpytor/view/main.nf index 153f43e8..bf1edc92 100644 --- a/modules/nf-core/cnvpytor/view/main.nf +++ b/modules/nf-core/cnvpytor/view/main.nf @@ -2,7 +2,7 @@ process CNVPYTOR_VIEW { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::cnvpytor=1.2.1" : null) + conda "bioconda::cnvpytor=1.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index de48d9c1..7e11b766 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -2,13 +2,13 @@ process DEEPVARIANT { tag "$meta.id" label 'process_medium' + container "google/deepvariant:1.4.0" - if (params.enable_conda) { - exit 1, "Conda environments cannot be used with DeepVariant at the moment. Please use Docker or Singularity containers." + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." } - container "google/deepvariant:1.4.0" - input: tuple val(meta), path(input), path(index), path(intervals) path(fasta) diff --git a/modules/nf-core/expansionhunter/main.nf b/modules/nf-core/expansionhunter/main.nf index f60b75b4..5db8794a 100644 --- a/modules/nf-core/expansionhunter/main.nf +++ b/modules/nf-core/expansionhunter/main.nf @@ -2,7 +2,7 @@ process EXPANSIONHUNTER { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::expansionhunter=4.0.2" : null) + conda "bioconda::expansionhunter=4.0.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/expansionhunter:4.0.2--he785bd8_0' : 'quay.io/biocontainers/expansionhunter:4.0.2--he785bd8_0' }" diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 64a3fa9a..41fab003 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -2,7 +2,7 @@ process GATK4_BEDTOINTERVALLIST { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index fb78cdf5..bc324ada 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -2,7 +2,7 @@ process GATK4_CREATESEQUENCEDICTIONARY { tag "$fasta" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" @@ -41,7 +41,7 @@ process GATK4_CREATESEQUENCEDICTIONARY { stub: """ - touch test.dict + touch ${fasta.baseName}.dict cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf index 130c83b6..f3585bb3 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/main.nf +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -2,7 +2,7 @@ process GATK4_FILTERMUTECTCALLS { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf index 09e2b257..84da7bf7 100644 --- a/modules/nf-core/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/gatk4/intervallisttools/main.nf @@ -2,7 +2,7 @@ process GATK4_INTERVALLISTTOOLS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf index 55f9b6a5..6bbab76c 100644 --- a/modules/nf-core/gatk4/mergebamalignment/main.nf +++ b/modules/nf-core/gatk4/mergebamalignment/main.nf @@ -2,7 +2,7 @@ process GATK4_MERGEBAMALIGNMENT { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf index 08fb3969..d418468f 100644 --- a/modules/nf-core/gatk4/mergevcfs/main.nf +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -2,7 +2,7 @@ process GATK4_MERGEVCFS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf index 693340d9..c2085266 100644 --- a/modules/nf-core/gatk4/mutect2/main.nf +++ b/modules/nf-core/gatk4/mutect2/main.nf @@ -2,7 +2,7 @@ process GATK4_MUTECT2 { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf index c7562d9e..26a70681 100644 --- a/modules/nf-core/gatk4/printreads/main.nf +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -2,7 +2,7 @@ process GATK4_PRINTREADS { tag "$meta.id" label 'process_single' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf index 1c52aeff..9fe041c4 100644 --- a/modules/nf-core/gatk4/revertsam/main.nf +++ b/modules/nf-core/gatk4/revertsam/main.nf @@ -2,7 +2,7 @@ process GATK4_REVERTSAM { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf index b7a6bcb0..9ba5ea8d 100644 --- a/modules/nf-core/gatk4/samtofastq/main.nf +++ b/modules/nf-core/gatk4/samtofastq/main.nf @@ -2,7 +2,7 @@ process GATK4_SAMTOFASTQ { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index d05bff6f..0c4fcceb 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -2,7 +2,7 @@ process GATK4_SELECTVARIANTS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index c642b210..1640806b 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -2,7 +2,7 @@ process GATK4_SPLITINTERVALS { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index 9365bfa8..e2837a91 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -2,7 +2,7 @@ process GATK4_VARIANTFILTRATION { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::gatk4=4.3.0.0" : null) + 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' }" diff --git a/modules/nf-core/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf index 9ba2f612..9d9350dc 100644 --- a/modules/nf-core/genmod/annotate/main.nf +++ b/modules/nf-core/genmod/annotate/main.nf @@ -2,7 +2,7 @@ process GENMOD_ANNOTATE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null) + 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' }" diff --git a/modules/nf-core/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf index e7d43fea..925f76bb 100644 --- a/modules/nf-core/genmod/compound/main.nf +++ b/modules/nf-core/genmod/compound/main.nf @@ -2,7 +2,7 @@ process GENMOD_COMPOUND { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null) + 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' }" diff --git a/modules/nf-core/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf index 8d73d745..cd1b747e 100644 --- a/modules/nf-core/genmod/models/main.nf +++ b/modules/nf-core/genmod/models/main.nf @@ -2,7 +2,7 @@ process GENMOD_MODELS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::genmod=3.7.4 conda-forge::python=3.4.5" : null) + 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' }" diff --git a/modules/nf-core/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf index e0a0277c..d3c9957c 100644 --- a/modules/nf-core/genmod/score/main.nf +++ b/modules/nf-core/genmod/score/main.nf @@ -2,7 +2,7 @@ process GENMOD_SCORE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::genmod=3.7.4" : null) + 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' }" diff --git a/modules/nf-core/glnexus/main.nf b/modules/nf-core/glnexus/main.nf index a26ab4ce..479da5a7 100644 --- a/modules/nf-core/glnexus/main.nf +++ b/modules/nf-core/glnexus/main.nf @@ -2,7 +2,7 @@ process GLNEXUS { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::glnexus=1.4.1" : null) + 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' }" diff --git a/modules/nf-core/haplocheck/main.nf b/modules/nf-core/haplocheck/main.nf index 6e8541f6..0a593bd0 100644 --- a/modules/nf-core/haplocheck/main.nf +++ b/modules/nf-core/haplocheck/main.nf @@ -2,7 +2,7 @@ process HAPLOCHECK { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::haplocheck=1.3.3" : null) + 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' }" diff --git a/modules/nf-core/haplogrep2/classify/main.nf b/modules/nf-core/haplogrep2/classify/main.nf index c49cb957..8931ca78 100644 --- a/modules/nf-core/haplogrep2/classify/main.nf +++ b/modules/nf-core/haplogrep2/classify/main.nf @@ -2,7 +2,7 @@ process HAPLOGREP2_CLASSIFY { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::haplogrep=2.4.0" : null) + 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' }" diff --git a/modules/nf-core/hmtnote/main.nf b/modules/nf-core/hmtnote/main.nf index a1796924..415a44b0 100644 --- a/modules/nf-core/hmtnote/main.nf +++ b/modules/nf-core/hmtnote/main.nf @@ -2,7 +2,7 @@ process HMTNOTE { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::hmtnote=0.7.2" : null) + conda "bioconda::hmtnote=0.7.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/hmtnote:0.7.2--pyhdfd78af_0': 'quay.io/biocontainers/hmtnote:0.7.2--pyhdfd78af_0' }" diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index 5f2964fb..2feb6ed2 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -2,7 +2,7 @@ process MANTA_GERMLINE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::manta=1.6.0" : null) + 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' }" diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index d7e3c929..be4be831 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -2,15 +2,15 @@ process MOSDEPTH { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? 'bioconda::mosdepth=0.3.3' : null) + 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'}" input: - tuple val(meta), path(bam), path(bai) - path bed - path fasta + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(bed) + tuple val(meta3), path(fasta) output: tuple val(meta), path('*.global.dist.txt') , emit: global_txt diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml index d1e33447..adf3893f 100644 --- a/modules/nf-core/mosdepth/meta.yml +++ b/modules/nf-core/mosdepth/meta.yml @@ -26,10 +26,20 @@ input: type: file description: Index for BAM/CRAM file pattern: "*.{bai,crai}" + - meta2: + type: map + description: | + Groovy Map containing bed information + e.g. [ id:'test' ] - bed: type: file description: BED file with intersected intervals pattern: "*.{bed}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: Reference genome FASTA file diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 68f66bea..4b604749 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_single' - conda "bioconda::multiqc=1.13" + conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index a6debc91..01a97428 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -2,7 +2,7 @@ process PICARD_ADDORREPLACEREADGROUPS { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + conda "bioconda::picard=2.27.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index d2414cc6..ee8116ec 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -1,8 +1,8 @@ process PICARD_COLLECTHSMETRICS { tag "$meta.id" - label 'process_medium' + label 'process_single' - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + conda "bioconda::picard=2.27.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 6f5e6f1e..73cdaf3a 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -1,8 +1,8 @@ process PICARD_COLLECTMULTIPLEMETRICS { tag "$meta.id" - label 'process_medium' + label 'process_single' - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + conda "bioconda::picard=2.27.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf index d4f6be95..04336271 100644 --- a/modules/nf-core/picard/liftovervcf/main.nf +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -2,7 +2,7 @@ process PICARD_LIFTOVERVCF { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + conda "bioconda::picard=2.27.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index d1f3aaa1..14800392 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -2,7 +2,7 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + conda "bioconda::picard=2.27.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" diff --git a/modules/nf-core/picard/sortvcf/main.nf b/modules/nf-core/picard/sortvcf/main.nf index b57b39c6..d3a32a52 100644 --- a/modules/nf-core/picard/sortvcf/main.nf +++ b/modules/nf-core/picard/sortvcf/main.nf @@ -2,7 +2,7 @@ process PICARD_SORTVCF { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::picard=2.27.4" : null) + conda "bioconda::picard=2.27.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" diff --git a/modules/nf-core/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf index 3bfcb4c1..936471ba 100644 --- a/modules/nf-core/qualimap/bamqc/main.nf +++ b/modules/nf-core/qualimap/bamqc/main.nf @@ -2,7 +2,7 @@ process QUALIMAP_BAMQC { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::qualimap=2.2.2d" : null) + 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' }" diff --git a/modules/nf-core/rhocall/annotate/main.nf b/modules/nf-core/rhocall/annotate/main.nf index 95d647b1..155a9d69 100644 --- a/modules/nf-core/rhocall/annotate/main.nf +++ b/modules/nf-core/rhocall/annotate/main.nf @@ -2,7 +2,7 @@ process RHOCALL_ANNOTATE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::rhocall=0.5.1" : null) + 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' }" diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 2830963e..ce6580d2 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -2,7 +2,7 @@ process SAMTOOLS_FAIDX { tag "$fasta" label 'process_single' - conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 8577dc9d..8b95687a 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -2,7 +2,7 @@ process SAMTOOLS_INDEX { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index 89dd072a..a80ff3a2 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -2,7 +2,7 @@ process SAMTOOLS_MERGE { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index ac43e67a..84c167cd 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -2,7 +2,7 @@ process SAMTOOLS_SORT { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 5d2fd68a..0a2a3640 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -2,7 +2,7 @@ process SAMTOOLS_STATS { tag "$meta.id" label 'process_single' - conda (params.enable_conda ? "bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/stranger/main.nf b/modules/nf-core/stranger/main.nf index ddfa0070..582e389e 100644 --- a/modules/nf-core/stranger/main.nf +++ b/modules/nf-core/stranger/main.nf @@ -2,7 +2,7 @@ process STRANGER { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::stranger=0.8.1" : null) + 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' }" diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 7dd92653..8544daff 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -1,7 +1,7 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.8.1 bioconda::samtools=1.16.1" : null) + 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' }" diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index aee9aad1..f5e7da0f 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -2,7 +2,7 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::svdb=2.8.1" : null) + 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' }" diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index 0d05984a..d3a3bbff 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -2,7 +2,7 @@ process TABIX_BGZIPTABIX { tag "$meta.id" label 'process_single' - conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) + 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' }" diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index 21b2e79f..9a404db9 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -2,7 +2,7 @@ process TABIX_TABIX { tag "$meta.id" label 'process_single' - conda (params.enable_conda ? 'bioconda::tabix=1.11' : null) + 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' }" diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf index a0a79523..dec79332 100644 --- a/modules/nf-core/tiddit/cov/main.nf +++ b/modules/nf-core/tiddit/cov/main.nf @@ -2,7 +2,7 @@ process TIDDIT_COV { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) + 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' }" diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 7faefa99..45f9588a 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -2,7 +2,7 @@ process TIDDIT_SV { tag "$meta.id" label 'process_medium' - conda (params.enable_conda ? "bioconda::tiddit=3.3.2" : null) + 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' }" diff --git a/modules/nf-core/ucsc/wigtobigwig/main.nf b/modules/nf-core/ucsc/wigtobigwig/main.nf index cf76cf0a..7626159e 100644 --- a/modules/nf-core/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/ucsc/wigtobigwig/main.nf @@ -3,7 +3,7 @@ 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 (params.enable_conda ? "bioconda::ucsc-wigtobigwig=377" : null) + 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' }" diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index c8b432f6..2d5d162a 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -2,7 +2,7 @@ process VCFANNO { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::vcfanno=0.3.3" : null) + 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' }" From 98cb0fe582cd8090bf972050cf00548b8efe1a55 Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 15 Feb 2023 10:52:39 +0100 Subject: [PATCH 0930/1921] fix for mosdepth channels --- subworkflows/local/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index e21557f0..0f3e29be 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -34,7 +34,7 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, chrom_sizes) - MOSDEPTH (bam_bai, [], []) + MOSDEPTH (bam_bai, Channel.value([[],[]]) , Channel.value([[],[]]) ) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) From a61ec855d0bac8f2100212225d881f7858b7d2d3 Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 15 Feb 2023 11:05:01 +0100 Subject: [PATCH 0931/1921] small change for readability --- subworkflows/local/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 0f3e29be..48c486cc 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -34,7 +34,7 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, chrom_sizes) - MOSDEPTH (bam_bai, Channel.value([[],[]]) , Channel.value([[],[]]) ) + MOSDEPTH (bam_bai, Channel.value([[], []]), Channel.value([[], []])) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) From 14508dbfa84d406b4b1ebd158fa4113e64772b11 Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 15 Feb 2023 12:56:53 +0100 Subject: [PATCH 0932/1921] add combined bam input channel --- workflows/raredisease.nf | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ab07e37b..6526a96a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -284,8 +284,23 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 1.7: SMNCOPYNUMBERCALLER + ALIGN.out.bam + .collect{it[1]} + .toList() + .set { ch_bam_list } + + ALIGN.out.bai + .collect{it[1]} + .toList() + .set { ch_bai_list } + + CHECK_INPUT.out.case_info + .combine(ch_bam_list) + .combine(ch_bai_list) + .set { ch_bams_bais } + SMNCOPYNUMBERCALLER ( - ch_mapped.bam_bai + ch_bams_bais ) ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) From 62b78dac3abfb053da371b1d7437624925543819 Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 15 Feb 2023 13:12:43 +0100 Subject: [PATCH 0933/1921] change input channel to bam_bai --- workflows/raredisease.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6526a96a..96370288 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -284,13 +284,13 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) // STEP 1.7: SMNCOPYNUMBERCALLER - ALIGN.out.bam + ALIGN.out.bam_bai .collect{it[1]} .toList() .set { ch_bam_list } - ALIGN.out.bai - .collect{it[1]} + ALIGN.out.bam_bai + .collect{it[2]} .toList() .set { ch_bai_list } @@ -298,7 +298,7 @@ workflow RAREDISEASE { .combine(ch_bam_list) .combine(ch_bai_list) .set { ch_bams_bais } - + SMNCOPYNUMBERCALLER ( ch_bams_bais ) From 894ed25d96b4183e9b2c5e2bf81c3af1590a2d3a Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 15 Feb 2023 13:49:00 +0100 Subject: [PATCH 0934/1921] fixed spaces --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 314c6354..0c2e27a5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -432,7 +432,7 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { ext.args = "-i FILTER='\"PASS\"' -m x -Oz" ext.prefix = { "${meta.id}_passed" } @@ -449,7 +449,7 @@ process { publishDir = [ enabled: false ] - } + } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { ext.args = '--output-type z --rm-dup none' From 9047711007d42bb6c47daa1d08ec360d730ad96d Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 15 Feb 2023 13:50:35 +0100 Subject: [PATCH 0935/1921] fixed spaces --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 0c2e27a5..b1527612 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -449,7 +449,7 @@ process { publishDir = [ enabled: false ] - } + } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { ext.args = '--output-type z --rm-dup none' From b455223527ca0df10d20e35be98619bc9909961e Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Wed, 15 Feb 2023 16:48:19 +0100 Subject: [PATCH 0936/1921] Added peddy --- conf/modules.config | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 484c526a..6ed613dc 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1173,3 +1173,17 @@ process { ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " } } + +// +// PEDDY CHECK +// + +process { + withName: '.*PEDDY_CHECK:PEDDY' { + ext.args = '' + publishDir = [ + path: { "${params.outdir}/Peddy" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} From fcaed3cc875b0b22424ccc8800a86b15d79dafe3 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 15 Feb 2023 16:51:35 +0100 Subject: [PATCH 0937/1921] installed peddy --- modules.json | 5 +++ modules/nf-core/peddy/main.nf | 53 ++++++++++++++++++++++++++++ modules/nf-core/peddy/meta.yml | 64 ++++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 modules/nf-core/peddy/main.nf create mode 100644 modules/nf-core/peddy/meta.yml diff --git a/modules.json b/modules.json index bcc39bc4..668e037f 100644 --- a/modules.json +++ b/modules.json @@ -220,6 +220,11 @@ "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, + "peddy": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "a50554f372baf3e079425e5d3ac4d09dc5ff8bc5", diff --git a/modules/nf-core/peddy/main.nf b/modules/nf-core/peddy/main.nf new file mode 100644 index 00000000..03cbd02f --- /dev/null +++ b/modules/nf-core/peddy/main.nf @@ -0,0 +1,53 @@ +process PEDDY { + tag "$meta.id" + label 'process_low' + + 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' }" + + input: + tuple val(meta), path(vcf), path(vcf_tbi) + path ped + + output: + tuple val(meta), path("*.html") , emit: html + tuple val(meta), path("*.csv") , emit: csv + tuple val(meta), path("*.peddy.ped"), emit: ped + tuple val(meta), path("*.png") , optional: true, emit: png + 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}" + """ + peddy \\ + $args \\ + --plot \\ + -p $task.cpus \\ + $vcf \\ + $ped + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + peddy: \$( peddy --version 2>&1 | sed 's/peddy, version //' ) + END_VERSIONS + """ + + stub: + """ + filename=\$(basename $vcf) + touch \$filename.ped_check.csv + touch \$filename.vs.html + touch \$filename.het_check.csv + touch \$filename.sex_check.csv + touch \$filename.peddy.ped + touch \$filename.html + + touch versions.yml + """ +} diff --git a/modules/nf-core/peddy/meta.yml b/modules/nf-core/peddy/meta.yml new file mode 100644 index 00000000..b3f40bb5 --- /dev/null +++ b/modules/nf-core/peddy/meta.yml @@ -0,0 +1,64 @@ +name: peddy +description: Manipulation, validation and exploration of pedigrees +keywords: + - pedigrees + - ped + - family + +tools: + - peddy: + description: genotype, ped correspondence check, ancestry check, sex check. directly, quickly on VCF + homepage: https://github.com/brentp/peddy + documentation: https://peddy.readthedocs.io/en/latest/ + tool_dev_url: https://github.com/brentp/peddy + doi: "https://doi.org/10.1016/j.ajhg.2017.01.017" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf.gz}" + - ped: + type: file + description: PED/FAM file + pattern: "*.{ped,fam}" + - vcf_tbi: + type: file + description: TBI file + pattern: "*.{vcf.gz.tbi}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ped: + type: file + description: PED/FAM file + pattern: "*.peddy.{ped}" + - html: + type: file + description: HTML file + pattern: "*.{html}" + - csv: + type: file + description: CSV file + pattern: "*.{csv}" + - png: + type: file + description: PNG file + pattern: "*.{png}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@rannick" From 52d591f2f41b96be70f5bb4c93b34b32f1065de1 Mon Sep 17 00:00:00 2001 From: sima-r Date: Wed, 15 Feb 2023 17:10:26 +0100 Subject: [PATCH 0938/1921] added peddy module and sunworkflow --- conf/modules.config | 2 +- modules/nf-core/peddy/main.nf | 1 + subworkflows/local/peddy_check.nf | 24 ++++++++++++++++++++++++ workflows/raredisease.nf | 10 ++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 subworkflows/local/peddy_check.nf diff --git a/conf/modules.config b/conf/modules.config index 6ed613dc..8788546a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1180,7 +1180,7 @@ process { process { withName: '.*PEDDY_CHECK:PEDDY' { - ext.args = '' + ext.args = { (params.genome == 'GRCh38') ? '--sites hg38' : '' } publishDir = [ path: { "${params.outdir}/Peddy" }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, diff --git a/modules/nf-core/peddy/main.nf b/modules/nf-core/peddy/main.nf index 03cbd02f..6bed1621 100644 --- a/modules/nf-core/peddy/main.nf +++ b/modules/nf-core/peddy/main.nf @@ -27,6 +27,7 @@ process PEDDY { """ peddy \\ $args \\ + --prefix $prefix \\ --plot \\ -p $task.cpus \\ $vcf \\ diff --git a/subworkflows/local/peddy_check.nf b/subworkflows/local/peddy_check.nf new file mode 100644 index 00000000..3d9adbc2 --- /dev/null +++ b/subworkflows/local/peddy_check.nf @@ -0,0 +1,24 @@ +// +// Peddy subworkflow to check sex and relatedness. +// + +include { PEDDY } from '../../modules/nf-core/peddy/main' + +workflow PEDDY_CHECK { + take: + vcf // channel: [ val(meta), path(vcf), path(vcf_index) ] + ped + + main: + ch_versions = Channel.empty() + + PEDDY(vcf, ped) + ch_versions = ch_versions.mix(PEDDY.out.versions) + + emit: + ped = PEDDY.out.ped + csv = PEDDY.out.csv + versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] +} + + diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8497dd53..6add4210 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -110,6 +110,7 @@ include { QC_BAM } from '../subworkflows/local/qc include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' +include { PEDDY_CHECK } from '../subworkflows/local/peddy_check' /* @@ -320,6 +321,15 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) + // ped correspondence, sex check, ancestry check + ch_vcf_peddy = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) + + PEDDY_CHECK ( + ch_vcf_peddy, + MAKE_PED.out.ped + ) + ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) + // GENS if (params.gens_switch) { GENS ( From bd775722be1af59158cc380595c02f1de86818c8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:06:16 +0100 Subject: [PATCH 0939/1921] update tests --- conf/test.config | 47 +++++++++++++++++++------------------ conf/test2samples.config | 46 ------------------------------------ conf/test_solo.config | 50 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 68 deletions(-) delete mode 100644 conf/test2samples.config create mode 100644 conf/test_solo.config diff --git a/conf/test.config b/conf/test.config index bde530bc..63371ee2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -20,29 +20,32 @@ params { max_time = '2.h' // Input data - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_MT.csv' + 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/Homo_sapiens_assembly38_chr20_chrM.fasta' - mt_fasta_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' - intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" - intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" - - // Variant catalog file - variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' - - // Variant annotation - vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_resources.txt' - vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' - vcfanno_lua = "" - target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' - - mt_intervals = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' - mt_intervals_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' - mt_backchain_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' - - genome = 'GRCh38' - vep_cache_version = 107 + fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" + genome = 'GRCh37' + gnomad_af = "/home/ramprasad.neethiraj/nextflow/demo/minimal_test_data/gnomad_reformated.tab.gz" + intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" + intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" + known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" + 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" + pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" + 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" + select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" + svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" + target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" + variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" + vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" + vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" + vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" + vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" + vep_cache_version = 107 } diff --git a/conf/test2samples.config b/conf/test2samples.config deleted file mode 100644 index 5cdd9052..00000000 --- a/conf/test2samples.config +++ /dev/null @@ -1,46 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running 2 samples -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline with 2 samples. - - Use as follows: - nextflow run nf-core/raredisease -profile test2samples, --outdir - ----------------------------------------------------------------------------------------- -*/ - -params { - config_profile_name = 'Test profile 2 samples' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '2.h' - - // Input data - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_2_samples.csv' - - // Genome references - fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Homo_sapiens_assembly38_chr20_chrM.fasta' - mt_fasta_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.chrM.shifted8000.fa' - - // Variant catalog file - variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/repeat_expansions.json' - - // Variant annotation - vcfanno_resources = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_resources.txt' - vcfanno_toml = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38_vcfanno_config_-v0.2-_chr20.toml' - vcfanno_lua = "" - target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_chr20.bed' - - mt_intervals = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/non_control_region.chrM.interval_list' - mt_intervals_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/control_region_shifted.chrM.interval_list' - mt_backchain_shift = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/ShiftBack.chain' - - genome = 'GRCh38' - vep_cache_version = 107 -} - diff --git a/conf/test_solo.config b/conf/test_solo.config new file mode 100644 index 00000000..7c5f2300 --- /dev/null +++ b/conf/test_solo.config @@ -0,0 +1,50 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running a solo sample +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline with 1 sample. + + Use as follows: + nextflow run nf-core/raredisease -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function using a single sample' + + // Limit resources so that this can run on GitHub Actions + max_cpus = 2 + max_memory = '6.GB' + max_time = '2.h' + + // 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" + genome = 'GRCh37' + gnomad_af = "/home/ramprasad.neethiraj/nextflow/demo/minimal_test_data/gnomad_reformated.tab.gz" + intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" + intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" + known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" + 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" + pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" + 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" + select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" + svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" + target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" + variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" + vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" + vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" + vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" + vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" + vep_cache_version = 107 +} From fc5e6bca79c266e7fc0d4bc410920beabef820df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:07:23 +0100 Subject: [PATCH 0940/1921] update gnomad path --- conf/test.config | 2 +- conf/test_solo.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 63371ee2..6af537aa 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,7 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' - gnomad_af = "/home/ramprasad.neethiraj/nextflow/demo/minimal_test_data/gnomad_reformated.tab.gz" + gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" diff --git a/conf/test_solo.config b/conf/test_solo.config index 7c5f2300..85068bcd 100644 --- a/conf/test_solo.config +++ b/conf/test_solo.config @@ -25,7 +25,7 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' - gnomad_af = "/home/ramprasad.neethiraj/nextflow/demo/minimal_test_data/gnomad_reformated.tab.gz" + gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" From 09622a275379410d22a0da45e847afe6ed9a1a31 Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 10:04:47 +0100 Subject: [PATCH 0941/1921] use case_info.id as prefix --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 80d8cb91..3a96fa90 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -530,7 +530,7 @@ process { ext.args = { (params.genome == 'GRCh37') ? '--genome 37' : '--genome 38' } - ext.prefix = { "${meta.id}" } + ext.prefix = { "${case_info.id}" } publishDir = [ path: { "${params.outdir}/smncopynumbercaller" }, mode: params.publish_dir_mode, From 2cf15f9455983a375a64c1de23ed0db4a45aa795 Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 11:12:25 +0100 Subject: [PATCH 0942/1921] update module to include stubs --- modules/nf-core/smncopynumbercaller/main.nf | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index fec45db0..7a0e2ec4 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -2,7 +2,7 @@ process SMNCOPYNUMBERCALLER { tag "$meta.id" label 'process_low' - conda (params.enable_conda ? "bioconda::smncopynumbercaller=1.1.2" : null) + 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' }" @@ -37,4 +37,16 @@ process SMNCOPYNUMBERCALLER { SMNCopyNumberCaller: $VERSION END_VERSIONS """ + + stub: + """ + mkdir out + touch out/${prefix}.tsv + touch out/${prefix}.json + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + SMNCopyNumberCaller: $VERSION + END_VERSIONS + """ } From 0c0f26ffd82c5b16588d96541a0cd074072fc8ec Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 11:39:52 +0100 Subject: [PATCH 0943/1921] linting in modules.json --- modules.json | 266 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 199 insertions(+), 67 deletions(-) diff --git a/modules.json b/modules.json index 9d551e4e..3b7a3ed9 100644 --- a/modules.json +++ b/modules.json @@ -8,336 +8,468 @@ "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/callcnvs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/histogram": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/importreaddepth": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/partition": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/view": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "deepvariant": { "branch": "master", "git_sha": "c62b41a07a00fee11ec73e2a0d4a1aec771a742b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "expansionhunter": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mutect2": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/printreads": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/revertsam": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/compound": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/models": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/score": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "glnexus": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplocheck": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplogrep2/classify": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmtnote": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mosdepth": { "branch": "master", "git_sha": "def5f182583df0c20f43ec3d4355e8ebd341aaa9", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/liftovervcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/markduplicates": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/sortvcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "qualimap/bamqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rhocall/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "smncopynumbercaller": { "branch": "master", - "git_sha": "2bb1f6515962a1559e79544112394d2db03a4302" + "git_sha": "93deb7b33308ce23fb4fd2a8e13b86bc117e8d77" }, "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "vcfanno": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } } From 9cf9e88a484a7cf8f32d4266fa10995e1398b3d6 Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 11:44:35 +0100 Subject: [PATCH 0944/1921] linting gitattributes --- .gitattributes | 1 - .prettierignore | 2 -- lib/NfcoreSchema.groovy | 1 + lib/NfcoreTemplate.groovy | 41 +++++++++------------------------------ 4 files changed, 10 insertions(+), 35 deletions(-) diff --git a/.gitattributes b/.gitattributes index 7a2dabc2..050bb120 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,3 @@ *.config linguist-language=nextflow -*.nf.test linguist-language=nextflow modules/nf-core/** linguist-generated subworkflows/nf-core/** linguist-generated diff --git a/.prettierignore b/.prettierignore index 437d763d..eb74a574 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,5 @@ email_template.html adaptivecard.json -slackreport.json .nextflow* work/ data/ @@ -9,4 +8,3 @@ results/ testing/ testing* *.pyc -bin/ diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 33cd4f6e..b3d092f8 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -46,6 +46,7 @@ class NfcoreSchema { 'quiet', 'syslog', 'v', + 'version', // Options for `nextflow run` command 'ansi', diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 25a0a74a..27feb009 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -32,25 +32,6 @@ class NfcoreTemplate { } } - // - // Generate version string - // - public static String version(workflow) { - String version_string = "" - - if (workflow.manifest.version) { - def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' - version_string += "${prefix_v}${workflow.manifest.version}" - } - - if (workflow.commitId) { - def git_shortsha = workflow.commitId.substring(0, 7) - version_string += "-g${git_shortsha}" - } - - return version_string - } - // // Construct and send completion email // @@ -80,7 +61,7 @@ class NfcoreTemplate { misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] - email_fields['version'] = NfcoreTemplate.version(workflow) + email_fields['version'] = workflow.manifest.version email_fields['runName'] = workflow.runName email_fields['success'] = workflow.success email_fields['dateComplete'] = workflow.complete @@ -165,10 +146,10 @@ class NfcoreTemplate { } // - // Construct and send a notification to a web server as JSON - // e.g. Microsoft Teams and Slack + // Construct and send adaptive card + // https://adaptivecards.io // - public static void IM_notification(workflow, params, summary_params, projectDir, log) { + public static void adaptivecard(workflow, params, summary_params, projectDir, log) { def hook_url = params.hook_url def summary = [:] @@ -189,7 +170,7 @@ class NfcoreTemplate { misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] - msg_fields['version'] = NfcoreTemplate.version(workflow) + msg_fields['version'] = workflow.manifest.version msg_fields['runName'] = workflow.runName msg_fields['success'] = workflow.success msg_fields['dateComplete'] = workflow.complete @@ -197,16 +178,13 @@ class NfcoreTemplate { msg_fields['exitStatus'] = workflow.exitStatus msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") + msg_fields['commandLine'] = workflow.commandLine msg_fields['projectDir'] = workflow.projectDir msg_fields['summary'] = summary << misc_fields // Render the JSON template def engine = new groovy.text.GStringTemplateEngine() - // Different JSON depending on the service provider - // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format - def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" - def hf = new File("$projectDir/assets/${json_path}") + def hf = new File("$projectDir/assets/adaptivecard.json") def json_template = engine.createTemplate(hf).make(msg_fields) def json_message = json_template.toString() @@ -231,7 +209,7 @@ class NfcoreTemplate { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" } } else { log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" @@ -319,7 +297,6 @@ class NfcoreTemplate { // public static String logo(workflow, monochrome_logs) { Map colors = logColours(monochrome_logs) - String workflow_version = NfcoreTemplate.version(workflow) String.format( """\n ${dashedLine(monochrome_logs)} @@ -328,7 +305,7 @@ class NfcoreTemplate { ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} ${workflow_version}${colors.reset} + ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} ${dashedLine(monochrome_logs)} """.stripIndent() ) From ecfe0c16cd4a391c6423a5f9f34f70b0fbe3296b Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 11:47:53 +0100 Subject: [PATCH 0945/1921] Revert "linting gitattributes" This reverts commit 9cf9e88a484a7cf8f32d4266fa10995e1398b3d6. --- .gitattributes | 1 + .prettierignore | 2 ++ lib/NfcoreSchema.groovy | 1 - lib/NfcoreTemplate.groovy | 41 ++++++++++++++++++++++++++++++--------- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/.gitattributes b/.gitattributes index 050bb120..7a2dabc2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ *.config linguist-language=nextflow +*.nf.test linguist-language=nextflow modules/nf-core/** linguist-generated subworkflows/nf-core/** linguist-generated diff --git a/.prettierignore b/.prettierignore index eb74a574..437d763d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ email_template.html adaptivecard.json +slackreport.json .nextflow* work/ data/ @@ -8,3 +9,4 @@ results/ testing/ testing* *.pyc +bin/ diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index b3d092f8..33cd4f6e 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -46,7 +46,6 @@ class NfcoreSchema { 'quiet', 'syslog', 'v', - 'version', // Options for `nextflow run` command 'ansi', diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 27feb009..25a0a74a 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -32,6 +32,25 @@ class NfcoreTemplate { } } + // + // Generate version string + // + public static String version(workflow) { + String version_string = "" + + if (workflow.manifest.version) { + def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' + version_string += "${prefix_v}${workflow.manifest.version}" + } + + if (workflow.commitId) { + def git_shortsha = workflow.commitId.substring(0, 7) + version_string += "-g${git_shortsha}" + } + + return version_string + } + // // Construct and send completion email // @@ -61,7 +80,7 @@ class NfcoreTemplate { misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp def email_fields = [:] - email_fields['version'] = workflow.manifest.version + email_fields['version'] = NfcoreTemplate.version(workflow) email_fields['runName'] = workflow.runName email_fields['success'] = workflow.success email_fields['dateComplete'] = workflow.complete @@ -146,10 +165,10 @@ class NfcoreTemplate { } // - // Construct and send adaptive card - // https://adaptivecards.io + // Construct and send a notification to a web server as JSON + // e.g. Microsoft Teams and Slack // - public static void adaptivecard(workflow, params, summary_params, projectDir, log) { + public static void IM_notification(workflow, params, summary_params, projectDir, log) { def hook_url = params.hook_url def summary = [:] @@ -170,7 +189,7 @@ class NfcoreTemplate { misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp def msg_fields = [:] - msg_fields['version'] = workflow.manifest.version + msg_fields['version'] = NfcoreTemplate.version(workflow) msg_fields['runName'] = workflow.runName msg_fields['success'] = workflow.success msg_fields['dateComplete'] = workflow.complete @@ -178,13 +197,16 @@ class NfcoreTemplate { msg_fields['exitStatus'] = workflow.exitStatus msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine + msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") msg_fields['projectDir'] = workflow.projectDir msg_fields['summary'] = summary << misc_fields // Render the JSON template def engine = new groovy.text.GStringTemplateEngine() - def hf = new File("$projectDir/assets/adaptivecard.json") + // Different JSON depending on the service provider + // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format + def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" + def hf = new File("$projectDir/assets/${json_path}") def json_template = engine.createTemplate(hf).make(msg_fields) def json_message = json_template.toString() @@ -209,7 +231,7 @@ class NfcoreTemplate { if (workflow.stats.ignoredCount == 0) { log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + log.info "-${colors.purple}[$workflow.manifest.name]${colors.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" } } else { log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" @@ -297,6 +319,7 @@ class NfcoreTemplate { // public static String logo(workflow, monochrome_logs) { Map colors = logColours(monochrome_logs) + String workflow_version = NfcoreTemplate.version(workflow) String.format( """\n ${dashedLine(monochrome_logs)} @@ -305,7 +328,7 @@ class NfcoreTemplate { ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} + ${colors.purple} ${workflow.manifest.name} ${workflow_version}${colors.reset} ${dashedLine(monochrome_logs)} """.stripIndent() ) From 587ed81d1badf6281d84df16310ad0cd7543a997 Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 11:49:20 +0100 Subject: [PATCH 0946/1921] Revert "linting in modules.json" This reverts commit 0c0f26ffd82c5b16588d96541a0cd074072fc8ec. --- modules.json | 266 +++++++++++++-------------------------------------- 1 file changed, 67 insertions(+), 199 deletions(-) diff --git a/modules.json b/modules.json index 3b7a3ed9..9d551e4e 100644 --- a/modules.json +++ b/modules.json @@ -8,468 +8,336 @@ "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/callcnvs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/histogram": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/importreaddepth": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/partition": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/view": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "deepvariant": { "branch": "master", "git_sha": "c62b41a07a00fee11ec73e2a0d4a1aec771a742b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/models": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/score": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "glnexus": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplocheck": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmtnote": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", "git_sha": "def5f182583df0c20f43ec3d4355e8ebd341aaa9", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "smncopynumbercaller": { "branch": "master", - "git_sha": "93deb7b33308ce23fb4fd2a8e13b86bc117e8d77" + "git_sha": "2bb1f6515962a1559e79544112394d2db03a4302" }, "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } } From feb1dd5ff80673144f8eb856954ad2551b845e56 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 11:51:09 +0100 Subject: [PATCH 0947/1921] add untar for vep cache --- conf/modules.config | 8 + conf/test.config | 2 +- modules.json | 273 +++++++++++++++++------ modules/nf-core/untar/main.nf | 63 ++++++ modules/nf-core/untar/meta.yml | 40 ++++ subworkflows/local/prepare_references.nf | 6 +- workflows/raredisease.nf | 97 ++++---- 7 files changed, 373 insertions(+), 116 deletions(-) create mode 100644 modules/nf-core/untar/main.nf create mode 100644 modules/nf-core/untar/meta.yml diff --git a/conf/modules.config b/conf/modules.config index 484c526a..658ddfbb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -265,6 +265,14 @@ process { ] } + withName: '.*PREPARE_REFERENCES:UNTAR_VEP_CACHE' { + ext.when = { params.vep_cache.endsWith("tar.gz") } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } // diff --git a/conf/test.config b/conf/test.config index 6af537aa..0e4351cd 100644 --- a/conf/test.config +++ b/conf/test.config @@ -44,7 +44,7 @@ params { vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" - vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins" + vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" vep_cache_version = 107 } diff --git a/modules.json b/modules.json index b719257a..2a1d70e8 100644 --- a/modules.json +++ b/modules.json @@ -8,335 +8,474 @@ "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/callcnvs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/histogram": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/importreaddepth": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/partition": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cnvpytor/view": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "deepvariant": { "branch": "master", "git_sha": "c62b41a07a00fee11ec73e2a0d4a1aec771a742b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "expansionhunter": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mutect2": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/printreads": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/revertsam": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/compound": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/models": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/score": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "glnexus": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplocheck": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplogrep2/classify": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmtnote": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mosdepth": { "branch": "master", "git_sha": "def5f182583df0c20f43ec3d4355e8ebd341aaa9", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/liftovervcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/markduplicates": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/sortvcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "qualimap/bamqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rhocall/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "untar": { + "branch": "master", + "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", + "installed_by": [ + "modules" + ] }, "vcfanno": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf new file mode 100644 index 00000000..3384847a --- /dev/null +++ b/modules/nf-core/untar/main.nf @@ -0,0 +1,63 @@ +process UNTAR { + tag "$archive" + label 'process_single' + + 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' }" + + input: + tuple val(meta), path(archive) + + output: + tuple val(meta), path("$prefix"), emit: untar + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) + + """ + mkdir $prefix + + ## Ensures --strip-components only applied when top level of tar contents is a directory + ## If just files or multiple directories, place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + tar \\ + -C $prefix --strip-components 1 \\ + -xavf \\ + $args \\ + $archive \\ + $args2 + else + tar \\ + -C $prefix \\ + -xavf \\ + $args \\ + $archive \\ + $args2 + fi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) + """ + mkdir $prefix + touch ${prefix}/file.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + untar: \$(echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml new file mode 100644 index 00000000..ea7a3f38 --- /dev/null +++ b/modules/nf-core/untar/meta.yml @@ -0,0 +1,40 @@ +name: untar +description: Extract files. +keywords: + - untar + - uncompress +tools: + - untar: + description: | + Extract tar.gz files. + documentation: https://www.gnu.org/software/tar/manual/ + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - untar: + type: directory + description: Directory containing contents of archive + pattern: "*/" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index f84a6eaa..e0677f39 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -20,7 +20,7 @@ include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modul include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' - +include { UNTAR as UNTAR_VEP_CACHE } from '../../modules/nf-core/untar/main' workflow PREPARE_REFERENCES { take: @@ -33,6 +33,7 @@ workflow PREPARE_REFERENCES { gnomad_vcf_in known_dbsnp target_bed + vep_cache main: ch_versions = Channel.empty() @@ -73,6 +74,7 @@ workflow PREPARE_REFERENCES { } .set { ch_bait_intervals_cat_in } CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) + UNTAR_VEP_CACHE (vep_cache) // Gather versions ch_versions = ch_versions.mix(BWA_INDEX_GENOME.out.versions) @@ -92,6 +94,7 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(TABIX_PBT.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) ch_versions = ch_versions.mix(GATK_ILT.out.versions) + ch_versions = ch_versions.mix(UNTAR_VEP_CACHE.out.versions) emit: bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() @@ -112,6 +115,7 @@ workflow PREPARE_REFERENCES { sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() target_intervals = GATK_BILT.out.interval_list.collect{it[1]}.collect() + vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}collect() versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8497dd53..b7162eea 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -135,55 +135,55 @@ workflow RAREDISEASE { } // Initialize all file channels including unprocessed vcf, bed and tab files - 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() - : ( exit 1, 'Genome fasta not specified!' ) + 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() + : ( exit 1, '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_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).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.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_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).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.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 = 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_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.endsWith("tar.gz") ? 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 MAKE_PED (CHECK_INPUT.out.samples.toList()) @@ -203,7 +203,8 @@ workflow RAREDISEASE { ch_gnomad_af_tab, ch_gnomad_vcf_unprocessed, ch_known_dbsnp, - ch_target_bed_unprocessed + ch_target_bed_unprocessed, + ch_vep_cache_unprocessed ) .set { ch_references } @@ -240,6 +241,8 @@ workflow RAREDISEASE { : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) ch_target_bed = ch_references.target_bed ch_target_intervals = ch_references.target_intervals + ch_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 From 9701fda20b14acdd68c0353e5d5cf7e301e77439 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 11:53:46 +0100 Subject: [PATCH 0948/1921] update vep cache paths in tests --- conf/test_one_sample.config | 50 +++++++++++++++++++++++++++++++++++++ conf/test_solo.config | 2 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 conf/test_one_sample.config diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config new file mode 100644 index 00000000..e5c3b5de --- /dev/null +++ b/conf/test_one_sample.config @@ -0,0 +1,50 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running a solo sample +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline with 1 sample. + + Use as follows: + nextflow run nf-core/raredisease -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function using a single sample' + + // Limit resources so that this can run on GitHub Actions + max_cpus = 2 + max_memory = '6.GB' + max_time = '2.h' + + // 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" + genome = 'GRCh37' + gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" + intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" + intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" + known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" + 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" + pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" + 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" + select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" + svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" + target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" + variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" + vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" + vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" + vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" + vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" + vep_cache_version = 107 +} diff --git a/conf/test_solo.config b/conf/test_solo.config index 85068bcd..e5c3b5de 100644 --- a/conf/test_solo.config +++ b/conf/test_solo.config @@ -44,7 +44,7 @@ params { vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" - vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins" + vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" vep_cache_version = 107 } From 7678ae95c8901e2b01587d0b8eb6de9f41abcb69 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 11:54:07 +0100 Subject: [PATCH 0949/1921] rename file --- conf/test_solo.config | 50 ------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 conf/test_solo.config diff --git a/conf/test_solo.config b/conf/test_solo.config deleted file mode 100644 index e5c3b5de..00000000 --- a/conf/test_solo.config +++ /dev/null @@ -1,50 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running a solo sample -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline with 1 sample. - - Use as follows: - nextflow run nf-core/raredisease -profile test, --outdir - ----------------------------------------------------------------------------------------- -*/ - -params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function using a single sample' - - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '2.h' - - // 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" - genome = 'GRCh37' - gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" - intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" - known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" - 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" - pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" - 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" - select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" - svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" - target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" - variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" - vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" - vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" - vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" - vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" - vep_cache_version = 107 -} From 8b46eacea0a987ab593f328003d1f842a854b551 Mon Sep 17 00:00:00 2001 From: peterpru Date: Fri, 17 Feb 2023 12:11:53 +0100 Subject: [PATCH 0950/1921] update smncopynumbercaller git_sha --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 9d551e4e..e31156d1 100644 --- a/modules.json +++ b/modules.json @@ -292,7 +292,7 @@ }, "smncopynumbercaller": { "branch": "master", - "git_sha": "2bb1f6515962a1559e79544112394d2db03a4302" + "git_sha": "93deb7b33308ce23fb4fd2a8e13b86bc117e8d77" }, "stranger": { "branch": "master", From 5d3a04d0fd186c6736390fe09006eba74f23acf5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 12:15:58 +0100 Subject: [PATCH 0951/1921] fix prettier --- modules.json | 270 +++++++++++++-------------------------------------- 1 file changed, 68 insertions(+), 202 deletions(-) diff --git a/modules.json b/modules.json index 2a1d70e8..4edb8b67 100644 --- a/modules.json +++ b/modules.json @@ -8,474 +8,340 @@ "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/callcnvs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/histogram": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/importreaddepth": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/partition": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cnvpytor/view": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "deepvariant": { "branch": "master", "git_sha": "c62b41a07a00fee11ec73e2a0d4a1aec771a742b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/models": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/score": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "glnexus": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplocheck": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmtnote": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", "git_sha": "def5f182583df0c20f43ec3d4355e8ebd341aaa9", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "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": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "untar": { "branch": "master", "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } } } } -} \ No newline at end of file +} From d2b5367fe8e8a76f41a23a2d8c38c8ec67c1b171 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 12:21:42 +0100 Subject: [PATCH 0952/1921] update ci --- .github/workflows/awstest2.yml | 6 +++--- .github/workflows/ci.yml | 2 +- nextflow.config | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/awstest2.yml b/.github/workflows/awstest2.yml index 26f58bd7..469bf2ba 100644 --- a/.github/workflows/awstest2.yml +++ b/.github/workflows/awstest2.yml @@ -1,4 +1,4 @@ -name: nf-core AWS test 2 samples +name: nf-core AWS test single sample # This workflow can be triggered manually with the GitHub actions workflow dispatch button. # It runs the -profile 'test2samples' on AWS batch @@ -6,7 +6,7 @@ on: workflow_dispatch: jobs: run-tower: - name: Run AWS tests 2 samples + name: Run AWS tests single sample if: github.repository == 'nf-core/raredisease' runs-on: ubuntu-latest steps: @@ -22,7 +22,7 @@ jobs: { "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test2samples-${{ github.sha }}" } - profiles: test2samples,aws_tower + profiles: test_one_sample,aws_tower - uses: actions/upload-artifact@v3 with: name: Tower debug log file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f88d7b4..e3625c69 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: - "latest-everything" parameters: - "-profile test,docker" - - "-profile test2samples,docker" + - "-profile test_one_sample,docker" steps: - name: Check out pipeline code uses: actions/checkout@v3 diff --git a/nextflow.config b/nextflow.config index ccd41f42..544b7bee 100644 --- a/nextflow.config +++ b/nextflow.config @@ -167,9 +167,9 @@ profiles { executor.cpus = 16 executor.memory = 60.GB } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } - test2samples { includeConfig 'conf/test2samples.config' } + test { includeConfig 'conf/test.config' } + test_full { includeConfig 'conf/test_full.config' } + test_one_sample { includeConfig 'conf/test_one_sample.config' } } // Load igenomes.config if required, else load custom genomes.config From 2fa1326d899dee989357eb05ffb1c8980114b550 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 17 Feb 2023 12:59:40 +0100 Subject: [PATCH 0953/1921] remove null object from version channel --- subworkflows/local/align.nf | 2 +- subworkflows/local/alignment/align_bwamem2.nf | 2 +- subworkflows/local/alignment/align_sentieon.nf | 2 +- subworkflows/local/analyse_MT.nf | 2 +- subworkflows/local/annotate_consequence_pli.nf | 2 +- subworkflows/local/annotate_snvs.nf | 2 +- subworkflows/local/annotate_structural_variants.nf | 2 +- subworkflows/local/call_repeat_expansions.nf | 4 ++-- subworkflows/local/call_snv.nf | 2 +- subworkflows/local/call_structural_variants.nf | 2 +- subworkflows/local/gens.nf | 2 +- subworkflows/local/mitochondria/align_and_call_MT.nf | 2 +- subworkflows/local/preprocessing/prepare_vcf.nf | 2 +- subworkflows/local/qc_bam.nf | 7 +++---- subworkflows/local/rank_variants.nf | 2 +- subworkflows/local/scatter_genome.nf | 2 +- subworkflows/local/variant_calling/call_cnv_cnvpytor.nf | 2 +- subworkflows/local/variant_calling/call_snv_deepvariant.nf | 2 +- subworkflows/local/variant_calling/call_snv_sentieon.nf | 2 +- subworkflows/local/variant_calling/call_sv_manta.nf | 2 +- subworkflows/local/variant_calling/call_sv_tiddit.nf | 2 +- workflows/raredisease.nf | 6 +++--- 22 files changed, 27 insertions(+), 28 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 54bd2f24..928a6a06 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -47,5 +47,5 @@ workflow ALIGN { marked_bam = ch_marked_bam marked_bai = ch_marked_bai bam_bai = ch_bam_bai - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index e6e288ec..4e749a01 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -65,5 +65,5 @@ workflow ALIGN_BWAMEM2 { metrics = MARKDUPLICATES.out.metrics marked_bam = MARKDUPLICATES.out.bam marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index e45cdbb5..4076b8dd 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -85,5 +85,5 @@ workflow ALIGN_SENTIEON { gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 848d5463..3df2e989 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -105,5 +105,5 @@ workflow ANALYSE_MT { html = ALIGN_AND_CALL_MT.out.html txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index a414516c..e03e0d45 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -22,5 +22,5 @@ workflow ANNOTATE_CSQ_PLI { emit: vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index d5120fc2..6b0a86fb 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -110,5 +110,5 @@ workflow ANNOTATE_SNVS { emit: vcf_ann = BCFTOOLS_CONCAT.out.vcf tbi = TABIX_BCFTOOLS_CONCAT.out.tbi - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_verions } diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 5f140508..48aa9911 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -64,5 +64,5 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { emit: vcf_ann = ENSEMBLVEP_SV.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index cca75d00..845071a2 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -22,6 +22,6 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(STRANGER.out.versions.first()) emit: - vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index a1e98a2f..fed00674 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -51,5 +51,5 @@ workflow CALL_SNV { emit: vcf = ch_vcf tabix = ch_tabix - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index d77be31a..c0e5bcab 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -66,5 +66,5 @@ workflow CALL_STRUCTURAL_VARIANTS { emit: vcf = SVDB_MERGE.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index dd63842d..da1f4ba7 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -34,5 +34,5 @@ workflow GENS { emit: gens_cov_bed_gz = GENS_GENERATE.out.cov gens_baf_bed_gz = GENS_GENERATE.out.baf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 5baddbc9..5a64cf3b 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -81,5 +81,5 @@ workflow ALIGN_AND_CALL_MT { filt_sats = GATK4_FILTERMUTECTCALLS_MT.out.stats txt = HAPLOCHECK_MT.out.txt html = HAPLOCHECK_MT.out.html - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/preprocessing/prepare_vcf.nf b/subworkflows/local/preprocessing/prepare_vcf.nf index 91293964..5488e052 100644 --- a/subworkflows/local/preprocessing/prepare_vcf.nf +++ b/subworkflows/local/preprocessing/prepare_vcf.nf @@ -48,5 +48,5 @@ workflow CHECK_VCF { emit: vcf = vcf_out // path: normalized_vcf index = TABIX_PV.out.tbi - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index c634768c..a003a0e3 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -53,13 +53,13 @@ workflow QC_BAM { // COLLECT WGS METRICS PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) - + SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) 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) - + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions, SENTIEON_WGSMETRICS.out.versions) ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions, SENTIEON_WGSMETRICS_Y.out.versions) @@ -72,6 +72,5 @@ workflow QC_BAM { d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(*.d4) ] cov = ch_cov // channel: [ val(meta), path(metrics) ] cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] - - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index 7b13094d..8fa405fd 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -33,5 +33,5 @@ workflow RANK_VARIANTS { emit: vcf = GENMOD_COMPOUND.out.vcf - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 8adb7349..5f136168 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -26,5 +26,5 @@ workflow SCATTER_GENOME { emit: bed = BUILD_BED.out.bed.collect() split_intervals = GATK4_SPLITINTERVALS.out.split_intervals.map { meta, it -> it }.flatten().collate(1) - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf index 38c420b2..a39abb28 100644 --- a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf +++ b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf @@ -49,6 +49,6 @@ workflow CALL_CNV_CNVPYTOR { emit: candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(*.tsv) ] - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 683cdf66..fcb89efc 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -57,5 +57,5 @@ workflow CALL_SNV_DEEPVARIANT { emit: vcf = REMOVE_DUPLICATES_GL.out.vcf tabix = TABIX_GL.out.tbi - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 4076e2dd..2dc1fe1c 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -82,5 +82,5 @@ workflow CALL_SNV_SENTIEON { emit: vcf = REMOVE_DUPLICATES_SEN.out.vcf tabix = TABIX_SEN.out.tbi - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index e1da4896..a0b2d0ee 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -50,5 +50,5 @@ workflow CALL_SV_MANTA { candidate_sv_vcf_tbi = MANTA.out.candidate_sv_vcf_tbi diploid_sv_vcf = MANTA.out.diploid_sv_vcf diploid_sv_vcf_tbi = MANTA.out.diploid_sv_vcf_tbi - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/subworkflows/local/variant_calling/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf index 51d8f77c..945c07a9 100644 --- a/subworkflows/local/variant_calling/call_sv_tiddit.nf +++ b/subworkflows/local/variant_calling/call_sv_tiddit.nf @@ -32,5 +32,5 @@ workflow CALL_SV_TIDDIT { emit: vcf = SVDB_MERGE_TIDDIT.out.vcf - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8497dd53..d130598e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -282,7 +282,7 @@ workflow RAREDISEASE { ch_intervals_y, params.aligner ) - ch_versions = ch_versions.mix(QC_BAM.out.versions.ifEmpty(null)) + ch_versions = ch_versions.mix(QC_BAM.out.versions) // EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( @@ -290,7 +290,7 @@ workflow RAREDISEASE { ch_genome_fasta_no_meta, ch_variant_catalog ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions.ifEmpty(null)) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) // STEP 2: VARIANT CALLING CALL_SNV ( @@ -333,7 +333,7 @@ workflow RAREDISEASE { CHECK_INPUT.out.case_info, ch_sequence_dictionary_no_meta ) - ch_versions = ch_versions.mix(GENS.out.versions.ifEmpty(null)) + ch_versions = ch_versions.mix(GENS.out.versions) } if (params.annotate_sv_switch) { From 1f61aae3848c0bf99095785ae6266565624ad0f6 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 17 Feb 2023 13:16:42 +0100 Subject: [PATCH 0954/1921] fixing typo --- 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 6b0a86fb..ce24b7a8 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -110,5 +110,5 @@ workflow ANNOTATE_SNVS { emit: vcf_ann = BCFTOOLS_CONCAT.out.vcf tbi = TABIX_BCFTOOLS_CONCAT.out.tbi - versions = ch_verions + versions = ch_versions } From 16078a098e2dce1719eccb673a48091f3d647b22 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 17 Feb 2023 13:54:07 +0100 Subject: [PATCH 0955/1921] renaming single mt vcf --- conf/modules.config | 5 ----- subworkflows/local/mitochondria/merge_annotate_MT.nf | 6 +----- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 484c526a..20628718 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1115,11 +1115,6 @@ process { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:CHANGE_NAME_VCF_MT' { - ext.file_type = 'vcf.gz' - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 766ccef9..8d51407a 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -83,10 +83,7 @@ workflow MERGE_ANNOTATE_MT { genome_fai) ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants - CHANGE_NAME_VCF_MT(ch_case_vcf.single) - ch_vcf_changed_name = CHANGE_NAME_VCF_MT.out.file - - ch_in_vep = ch_merged_vcf.mix(ch_vcf_changed_name) + ch_in_vep = ch_merged_vcf.mix(ch_case_vcf.single) // Annotating with Hmtnote //HMTNOTE_MT(ch_in_vep) @@ -110,7 +107,6 @@ workflow MERGE_ANNOTATE_MT { 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(CHANGE_NAME_VCF_MT.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) From cb829f2e23107c78b3ccf84381c61ab84ffa28a2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 14:27:41 +0100 Subject: [PATCH 0956/1921] edit modules_conf --- conf/modules.config | 2 +- conf/test.config | 4 ++-- conf/test_one_sample.config | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 658ddfbb..18c0646a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -901,7 +901,7 @@ process { // process { - withName: 'RAREDISEASE:BCFTOOLS_CONCAT' { + withName: '.*RAREDISEASE:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_mito_genome_merged" } } } diff --git a/conf/test.config b/conf/test.config index 0e4351cd..d3fce46b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,8 +26,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" - intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" + intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" + intervals_y = "${projectDir}/assets/Y_grch37.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index e5c3b5de..ca4afe2a 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -26,8 +26,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" - intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" + intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" + intervals_y = "${projectDir}/assets/Y_grch37.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" From e096830b7e14f2b89ef51579a69975058c0a00b2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:00:57 +0100 Subject: [PATCH 0957/1921] update test for collectwgs metrics --- conf/test.config | 9 +++++---- conf/test_one_sample.config | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/conf/test.config b/conf/test.config index d3fce46b..8d6a53dc 100644 --- a/conf/test.config +++ b/conf/test.config @@ -15,9 +15,10 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = '6.GB' - max_time = '2.h' + max_cpus = 2 + max_memory = '6.GB' + max_time = '2.h' + mt_contig_name = 'MT' // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' @@ -26,7 +27,7 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" + intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37_test.interval_list" intervals_y = "${projectDir}/assets/Y_grch37.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" mt_fasta_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.fa" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index ca4afe2a..c9cbf249 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -18,6 +18,7 @@ params { max_cpus = 2 max_memory = '6.GB' max_time = '2.h' + mt_contig_name = 'MT' // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_single.csv' @@ -26,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" - intervals_y = "${projectDir}/assets/Y_grch37.interval_list" + intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/assets/1-22XYMT_grch37_test.interval_list" + intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/assets/Y_grch37_test.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" From 6c0c8d26f8ad1f84f190dc75c4d92f5886e2a87e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:04:01 +0100 Subject: [PATCH 0958/1921] update test config --- conf/test.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 8d6a53dc..d1a60939 100644 --- a/conf/test.config +++ b/conf/test.config @@ -17,7 +17,7 @@ params { // Limit resources so that this can run on GitHub Actions max_cpus = 2 max_memory = '6.GB' - max_time = '2.h' + max_time = '2.h' mt_contig_name = 'MT' // Input data @@ -27,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37_test.interval_list" - intervals_y = "${projectDir}/assets/Y_grch37.interval_list" + intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/assets/1-22XYMT_grch37_test.interval_list" + intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/assets/Y_grch37_test.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" From 8cfa90c03d7da3f8683278ac48a3ba2cce4c6bc0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:11:51 +0100 Subject: [PATCH 0959/1921] remove assets --- conf/test.config | 4 ++-- conf/test_one_sample.config | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/test.config b/conf/test.config index d1a60939..1c151b09 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" 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/assets/1-22XYMT_grch37_test.interval_list" - intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/assets/Y_grch37_test.interval_list" + intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/1-22XYMT_grch37_test.interval_list" + intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Y_grch37_test.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index c9cbf249..deae9564 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -27,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" 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/assets/1-22XYMT_grch37_test.interval_list" - intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/assets/Y_grch37_test.interval_list" + intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/1-22XYMT_grch37_test.interval_list" + intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Y_grch37_test.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" From 5275d78b48e094f0fed17c1e9347f7e7423bdb8d Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 17 Feb 2023 17:21:12 +0100 Subject: [PATCH 0960/1921] feat added vcfanno to MT subworkflow --- subworkflows/local/analyse_MT.nf | 5 ++++- .../local/mitochondria/merge_annotate_MT.nf | 15 ++++++++++++--- workflows/raredisease.nf | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 848d5463..a7a7a9af 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -25,7 +25,8 @@ workflow ANALYSE_MT { shift_mt_fai // channel: [ genome.fai ] shift_mt_intervals // channel: [ file(control_region_shifted.chrM.interval_list) ] shift_mt_backchain // channel: [ file(shift.back_chain) ] - vep_genome + vcfanno_resources + vcfanno_tomlvep_genome vep_cache_version vep_cache case_info // channel: [ val(case_info) ] @@ -80,6 +81,8 @@ workflow ANALYSE_MT { genome_dict_meta, genome_dict_no_meta, genome_fai, + vcfanno_resources, + vcfanno_tomlvep_genome, vep_genome, vep_cache_version, vep_cache, diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 766ccef9..77399fb3 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -14,6 +14,8 @@ include { HMTNOTE as HMTNOTE_MT } from '../../. 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 } from '../../../modules/nf-core/vcfanno/main' +include { TABIX_TABIX as TABIX_TABIX_MT4 } from '../../../modules/nf-core/tabix/tabix/main' workflow MERGE_ANNOTATE_MT { take: @@ -23,6 +25,8 @@ workflow MERGE_ANNOTATE_MT { genome_dict_meta // channel: [ genome.dict ] genome_dict_no_meta // channel: [ genome.dict ] genome_fai // channel: [ genome.fai ] + vcfanno_resources + vcfanno_toml vep_genome vep_cache_version vep_cache @@ -101,8 +105,13 @@ workflow MERGE_ANNOTATE_MT { genome_fasta, []) - // Running haplogrep2 + // Running vcfanno TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) + ch_in_vcfanno = ENSEMBLVEP_MT.out.vcf_gz.join(TABIX_TABIX_MT3.out.tbi, by: [0]) + VCFANNO(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) + TABIX_TABIX_MT4(VCFANNO.out.vcf_gz) + + // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") ch_versions = ch_versions.mix(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.versions.first()) @@ -116,8 +125,8 @@ workflow MERGE_ANNOTATE_MT { emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt - vcf = ENSEMBLVEP_MT.out.vcf_gz - tbi = TABIX_TABIX_MT3.out.tbi + vcf = VCFANNO.out.vcf_gz + tbi = TABIX_TABIX_MT4.out.tbi report = ENSEMBLVEP_MT.out.report versions = ch_versions // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b7162eea..95dd1fe4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -391,6 +391,8 @@ workflow RAREDISEASE { ch_mt_shift_fai, ch_mt_intervals_shift, ch_mt_backchain_shift, + ch_vcfanno_resources + ch_vcfanno_toml, params.genome, params.vep_cache_version, ch_vep_cache, From 0850753bc8d636b28841ba847669f4e62379aa04 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 17 Feb 2023 17:28:13 +0100 Subject: [PATCH 0961/1921] feat add version vcfanno --- subworkflows/local/analyse_MT.nf | 3 ++- subworkflows/local/mitochondria/merge_annotate_MT.nf | 1 + workflows/raredisease.nf | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index a7a7a9af..b4e23066 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -26,7 +26,8 @@ workflow ANALYSE_MT { shift_mt_intervals // channel: [ file(control_region_shifted.chrM.interval_list) ] shift_mt_backchain // channel: [ file(shift.back_chain) ] vcfanno_resources - vcfanno_tomlvep_genome + vcfanno_toml + vep_genome vep_cache_version vep_cache case_info // channel: [ val(case_info) ] diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 77399fb3..bada1da5 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -121,6 +121,7 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) ch_versions = ch_versions.mix(CHANGE_NAME_VCF_MT.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) + ch_versions = ch_versions.mix(VCFANNO.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 95dd1fe4..c8379847 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -391,7 +391,7 @@ workflow RAREDISEASE { ch_mt_shift_fai, ch_mt_intervals_shift, ch_mt_backchain_shift, - ch_vcfanno_resources + ch_vcfanno_resources, ch_vcfanno_toml, params.genome, params.vep_cache_version, From 5a4e2524f36c7391eaf22bc889b8dabe19ad24eb Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 17 Feb 2023 17:29:56 +0100 Subject: [PATCH 0962/1921] fix typo --- subworkflows/local/analyse_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index b4e23066..6b1f66c4 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -83,7 +83,7 @@ workflow ANALYSE_MT { genome_dict_no_meta, genome_fai, vcfanno_resources, - vcfanno_tomlvep_genome, + vcfanno_toml, vep_genome, vep_cache_version, vep_cache, From c85dc3db95ba2f9f86551f41c5e9168a0ed65fbf Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 17 Feb 2023 17:33:02 +0100 Subject: [PATCH 0963/1921] fix channel output name --- subworkflows/local/analyse_MT.nf | 2 +- subworkflows/local/mitochondria/merge_annotate_MT.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 6b1f66c4..5b6c38de 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -109,5 +109,5 @@ workflow ANALYSE_MT { html = ALIGN_AND_CALL_MT.out.html txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html - versions = ch_versions.ifEmpty(null) + versions = ch_versions } diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index bada1da5..070e9db0 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -109,7 +109,7 @@ workflow MERGE_ANNOTATE_MT { TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) ch_in_vcfanno = ENSEMBLVEP_MT.out.vcf_gz.join(TABIX_TABIX_MT3.out.tbi, by: [0]) VCFANNO(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) - TABIX_TABIX_MT4(VCFANNO.out.vcf_gz) + TABIX_TABIX_MT4(VCFANNO.out.vcf) // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") @@ -126,7 +126,7 @@ workflow MERGE_ANNOTATE_MT { emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt - vcf = VCFANNO.out.vcf_gz + vcf = VCFANNO.out.vcf tbi = TABIX_TABIX_MT4.out.tbi report = ENSEMBLVEP_MT.out.report versions = ch_versions // channel: [ versions.yml ] From 4684e5450598aa145ae78dc44a798dba03862c84 Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 17 Feb 2023 17:57:15 +0100 Subject: [PATCH 0964/1921] fix vcf and tbi file for vcfanno --- subworkflows/local/analyse_MT.nf | 3 +-- .../local/mitochondria/merge_annotate_MT.nf | 13 ++++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 5b6c38de..ba22bd35 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -97,8 +97,7 @@ workflow ANALYSE_MT { ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: - vcf = MERGE_ANNOTATE_MT.out.vcf - tbi = MERGE_ANNOTATE_MT.out.tbi + vcf = MERGE_ANNOTATE_MT.out.vcf_gz_tbi stats = ALIGN_AND_CALL_MT.out.stats filt_sats = ALIGN_AND_CALL_MT.out.filt_sats stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 070e9db0..8a6da5a2 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -15,7 +15,7 @@ include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../. 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 } from '../../../modules/nf-core/vcfanno/main' -include { TABIX_TABIX as TABIX_TABIX_MT4 } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO } from '../../../modules/nf-core/tabix/bgziptabix/main' workflow MERGE_ANNOTATE_MT { take: @@ -109,7 +109,7 @@ workflow MERGE_ANNOTATE_MT { TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) ch_in_vcfanno = ENSEMBLVEP_MT.out.vcf_gz.join(TABIX_TABIX_MT3.out.tbi, by: [0]) VCFANNO(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) - TABIX_TABIX_MT4(VCFANNO.out.vcf) + ZIP_TABIX_VCFANNO(VCFANNO.out.vcf) // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") @@ -125,9 +125,8 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: - haplog = HAPLOGREP2_CLASSIFY_MT.out.txt - vcf = VCFANNO.out.vcf - tbi = TABIX_TABIX_MT4.out.tbi - report = ENSEMBLVEP_MT.out.report - versions = ch_versions // channel: [ versions.yml ] + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt + vcf_gz_tbi = ZIP_TABIX_VCFANNO.out.gz_tbi + report = ENSEMBLVEP_MT.out.report + versions = ch_versions // channel: [ versions.yml ] } From 03e005d553a720fd76f6e7544ef8094922498c0c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 23:44:38 +0100 Subject: [PATCH 0965/1921] tests work! --- conf/modules.config | 87 +++++++++++++++++++++++++++++++++------------ conf/test.config | 6 ++-- nextflow.config | 2 +- 3 files changed, 68 insertions(+), 27 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 18c0646a..348801af 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -491,6 +491,14 @@ process { ] } + withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { + publishDir = [ + path: { "${params.outdir}/bamqc/collecthsmetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: '.*QC_BAM:QUALIMAP_BAMQC' { publishDir = [ path: { "${params.outdir}/bamqc_qualimap" }, @@ -639,7 +647,14 @@ process { ] } - withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { +} + +// +// Remove mitochondrial variants +// + +process { + withName: '.*RAREDISEASE:GATK4_SELECTVARIANTS' { ext.args = "--exclude-intervals ${params.mt_contig_name}" ext.prefix = { "${meta.id}_nomito" } ext.when = { params.annotate_snv_switch } @@ -714,7 +729,7 @@ process { } withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { - ext.args = '--pass_only' + ext.args = '--pass_only --same_order' publishDir = [ path: { "${params.outdir}/sv_caller" }, mode: params.publish_dir_mode, @@ -764,15 +779,16 @@ process { withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { ext.when = { params.annotate_sv_switch } ext.args = [ - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--distance 5000', - '--buffer_size 20000', - '--format vcf --max_sv_size 248956422', - '--appris --biotype --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--humdiv --no_progress --no_stats --numbers', - '--polyphen p --protein --offline --regulatory --sift p --symbol --tsl', - '--uniprot' + '--dir_cache vep_cache', + '--dir_plugins vep_cache/Plugins', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--appris --biotype --buffer_size 100 --canonical --cache --ccds', + '--compress_output bgzip --distance 5000 --domains', + '--exclude_predicted --force_overwrite --format vcf', + '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', + '--no_progress --no_stats --numbers --per_gene --polyphen p', + '--protein --offline --regulatory --sift p', + '--symbol --tsl --uniprot --vcf' ].join(' ') publishDir = [ path: { "${params.outdir}/sv_annotate" }, @@ -846,7 +862,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } + ext.args = { '--output-type z' } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, @@ -870,7 +886,11 @@ process { ext.when = { params.annotate_snv_switch } ext.prefix = { "${vcf.simpleName}_vep" } ext.args = [ + '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', '--distance 5000', '--buffer_size 20000', '--format vcf --max_sv_size 248956422', @@ -878,7 +898,7 @@ process { '--domains --exclude_predicted --force_overwrite', '--hgvs --humdiv --no_progress --no_stats --numbers', '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', - '--uniprot' + '--uniprot --vcf' ].join(' ') publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -1015,8 +1035,14 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_filtered" } } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_RENAMESAMPLEINVCF_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } + ext.prefix = { "${meta.id}_renamed" } + } } // @@ -1077,6 +1103,22 @@ process { ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_filtered_shifted" } } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_RENAMESAMPLEINVCF_MT' { + ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } + ext.prefix = { "${meta.id}_renamed" } + } +} + +// +// Liftover +// +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" } + } } // @@ -1142,14 +1184,18 @@ process { withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { ext.args = [ + '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--distance 0', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--distance 5000', '--buffer_size 20000', - '--format vcf --vcf --max_sv_size 16600', + '--format vcf --fork 4 --max_sv_size 248956422', '--appris --biotype --cache --canonical --ccds --compress_output bgzip', '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', '--uniprot' ].join(' ') ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } @@ -1165,12 +1211,6 @@ process { } -process { - withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { - ext.when = { params.mt_fasta_shift && params.mt_backchain_shift && !(params.analysis_type == "wes") } - } -} - // // SENTIEON_TNSCOPE_MT_CALL // @@ -1179,5 +1219,6 @@ process { withName: '.*SENTIEON_TNSCOPE' { ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " + ext.when = params.variant_caller.equals("sentieon") } } diff --git a/conf/test.config b/conf/test.config index 1c151b09..61485360 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" 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/1-22XYMT_grch37_test.interval_list" - intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Y_grch37_test.interval_list" + intervals_wgs = "https://raw.githubusercontent.com/ramprasadn/test-datasets/raredisease/reference/target_wgs.interval_list" + intervals_y = "https://raw.githubusercontent.com/ramprasadn/test-datasets/raredisease/reference/targetY.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" @@ -36,7 +36,7 @@ params { mt_backchain_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.back_chain" pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" 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_snv = "https://raw.githubusercontent.com/ramprasadn/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" select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" diff --git a/nextflow.config b/nextflow.config index 544b7bee..25090eb3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,7 +23,7 @@ params { // Main options analysis_type = 'wgs' annotate_snv_switch = true - annotate_sv_switch = false + annotate_sv_switch = true dedicated_mt_analysis = true gens_switch = false platform = 'illumina' From 462a6ca1bb5a7a1446ccddbb2a6420249969f91a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 Feb 2023 23:48:51 +0100 Subject: [PATCH 0966/1921] update paths --- conf/test.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 61485360..15544c85 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" - intervals_wgs = "https://raw.githubusercontent.com/ramprasadn/test-datasets/raredisease/reference/target_wgs.interval_list" - intervals_y = "https://raw.githubusercontent.com/ramprasadn/test-datasets/raredisease/reference/targetY.interval_list" + 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" @@ -36,7 +36,7 @@ params { mt_backchain_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.back_chain" pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" - score_config_snv = "https://raw.githubusercontent.com/ramprasadn/test-datasets/raredisease/reference/rank_model_snv.ini" + 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" select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" From 7936dcfafe73c4b8c5a59deffff95c3d086f1be3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Feb 2023 09:10:37 +0100 Subject: [PATCH 0967/1921] update paths in test_one_sample --- conf/test_one_sample.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index deae9564..d8d13d9a 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -27,8 +27,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" 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/1-22XYMT_grch37_test.interval_list" - intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/Y_grch37_test.interval_list" + 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" 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" From d60d3b1a17e40b3ab501e9333c4ac4da7a651941 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Feb 2023 09:14:41 +0100 Subject: [PATCH 0968/1921] update schema --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 2126ed1c..c7a9f47c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -404,7 +404,7 @@ }, "annotate_sv_switch": { "type": "boolean", - "default": false, + "default": true, "description": "Specifies whether or not to run annotate structural variant subworkflow.", "fa_icon": "fas fa-book" }, From 0c703ec8b3df524033553f57f6802882fa163e63 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 20 Feb 2023 10:44:57 +0100 Subject: [PATCH 0969/1921] feat change name of vcfanno mt output --- conf/modules.config | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 18c0646a..4fdb4fe2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1163,6 +1163,16 @@ process { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO' { + ext.prefix = { "${meta.id}_vcfanno_MT" } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + } process { From f36eb8c9919a067a8012179970f406bb918d9363 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Feb 2023 10:44:58 +0100 Subject: [PATCH 0970/1921] review suggestions --- conf/modules.config | 4 ++-- conf/test.config | 14 ++++++++++++++ conf/test_one_sample.config | 13 +++++++++++++ nextflow.config | 3 +++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 348801af..7b655ded 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -862,7 +862,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z' } + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, @@ -1189,7 +1189,7 @@ process { '--plugin pLI,vep_cache/pLI_values_107.txt', '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', - '--distance 5000', + '--distance 0', '--buffer_size 20000', '--format vcf --fork 4 --max_sv_size 248956422', '--appris --biotype --cache --canonical --ccds --compress_output bgzip', diff --git a/conf/test.config b/conf/test.config index 15544c85..36bb3835 100644 --- a/conf/test.config +++ b/conf/test.config @@ -50,3 +50,17 @@ params { vep_cache_version = 107 } +process { + withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + ext.when = { params.annotate_snv_switch } + ext.prefix = { "${meta.id}_view" } + ext.args = { '--output-type z' } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + + diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index d8d13d9a..63cec545 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -49,3 +49,16 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" vep_cache_version = 107 } + +process { + withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + ext.when = { params.annotate_snv_switch } + ext.prefix = { "${meta.id}_view" } + ext.args = { '--output-type z' } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} diff --git a/nextflow.config b/nextflow.config index 25090eb3..879f91c7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -35,6 +35,9 @@ params { // Variant calling variant_caller = 'deepvariant' + // sentieon Defaults + ml_model = '' + // Dnascope SNV calling pcrfree = true variant_type = 'snp,indel' From 7d7b556e3af9a21d847f06262f09e1ab401d5c90 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 20 Feb 2023 10:45:54 +0100 Subject: [PATCH 0971/1921] feat divided vcf tbi channel into 2 channels --- subworkflows/local/analyse_MT.nf | 3 ++- subworkflows/local/mitochondria/merge_annotate_MT.nf | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index ba22bd35..5b6c38de 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -97,7 +97,8 @@ workflow ANALYSE_MT { ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: - vcf = MERGE_ANNOTATE_MT.out.vcf_gz_tbi + vcf = MERGE_ANNOTATE_MT.out.vcf + tbi = MERGE_ANNOTATE_MT.out.tbi stats = ALIGN_AND_CALL_MT.out.stats filt_sats = ALIGN_AND_CALL_MT.out.filt_sats stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 8a6da5a2..8bed7ffd 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -111,6 +111,11 @@ workflow MERGE_ANNOTATE_MT { VCFANNO(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) ZIP_TABIX_VCFANNO(VCFANNO.out.vcf) + // Prepare output + ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } + ch_vcf_out.view() + ch_tbi_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } + ch_tbi_out.view() // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") @@ -126,7 +131,8 @@ workflow MERGE_ANNOTATE_MT { emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt - vcf_gz_tbi = ZIP_TABIX_VCFANNO.out.gz_tbi + vcf = ch_vcf_out + tbi = ch_tbi_out report = ENSEMBLVEP_MT.out.report versions = ch_versions // channel: [ versions.yml ] } From 9d2537e7480af417b6f37c3d564afd821ea5d7e8 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 20 Feb 2023 10:54:00 +0100 Subject: [PATCH 0972/1921] feat removed .view() --- subworkflows/local/mitochondria/merge_annotate_MT.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 8bed7ffd..b19b953d 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -113,9 +113,8 @@ workflow MERGE_ANNOTATE_MT { // Prepare output ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } - ch_vcf_out.view() ch_tbi_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } - ch_tbi_out.view() + // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") From 28244d89a5742360b336463c2b3982126970942c Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Mon, 20 Feb 2023 11:14:08 +0100 Subject: [PATCH 0973/1921] Update conf/modules.config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 7b655ded..bb12906f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -862,7 +862,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, From ff63a7d07d0c3eb3d628e07462408c44950a097a Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 20 Feb 2023 11:38:52 +0100 Subject: [PATCH 0974/1921] fix changed name of ZIP_TABIX_VCFANNO output --- conf/modules.config | 18 ++++++++++++------ .../local/mitochondria/merge_annotate_MT.nf | 8 ++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 4fdb4fe2..3f30818d 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -903,6 +903,7 @@ process { process { withName: '.*RAREDISEASE:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_mito_genome_merged" } + ext.args = " -a " } } @@ -1154,8 +1155,8 @@ process { ].join(' ') ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ - path: { "${params.outdir}/mt_annotation" }, - mode: params.publish_dir_mode, + path: { "${params.outdir}/mt_annotation_vep" }, + mode: params.publish_dir_mode ] } @@ -1163,16 +1164,21 @@ process { ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO' { - ext.prefix = { "${meta.id}_vcfanno_MT" } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { + ext.prefix = { "${meta.id}_mito_ann" } ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ - path: { "${params.outdir}/snv_annotation" }, + path: { "${params.outdir}/mt_annotation" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { + ext.prefix = { "${meta.id}_mito_ann" } + ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + } + } process { diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index b19b953d..4531db97 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -14,7 +14,7 @@ include { HMTNOTE as HMTNOTE_MT } from '../../. 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 } from '../../../modules/nf-core/vcfanno/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' workflow MERGE_ANNOTATE_MT { @@ -108,8 +108,8 @@ 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, by: [0]) - VCFANNO(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) - ZIP_TABIX_VCFANNO(VCFANNO.out.vcf) + VCFANNO_MT(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) + ZIP_TABIX_VCFANNO(VCFANNO_MT.out.vcf) // Prepare output ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } @@ -125,7 +125,7 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) ch_versions = ch_versions.mix(CHANGE_NAME_VCF_MT.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) - ch_versions = ch_versions.mix(VCFANNO.out.versions) + ch_versions = ch_versions.mix(VCFANNO_MT.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: From 9c570eb6654f388c4d8b64761c8d45ebdaad2a9c Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 20 Feb 2023 11:39:59 +0100 Subject: [PATCH 0975/1921] fix spacing in .config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 3f30818d..6ed64090 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -903,7 +903,7 @@ process { process { withName: '.*RAREDISEASE:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_mito_genome_merged" } - ext.args = " -a " + ext.args = " -a " } } From f6b2496a4f568953326a1aa26751c4134b5e0d66 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 20 Feb 2023 13:34:37 +0100 Subject: [PATCH 0976/1921] Update subworkflows/local/mitochondria/merge_annotate_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/mitochondria/merge_annotate_MT.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 4531db97..1fc18921 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -129,9 +129,9 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: - haplog = HAPLOGREP2_CLASSIFY_MT.out.txt - vcf = ch_vcf_out - tbi = ch_tbi_out - report = ENSEMBLVEP_MT.out.report - versions = ch_versions // channel: [ versions.yml ] + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt + vcf = ch_vcf_out + tbi = ch_tbi_out + report = ENSEMBLVEP_MT.out.report + versions = ch_versions // channel: [ versions.yml ] } From 323d118e721d99f1b8b03934a04c7cb4acfc0c27 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Feb 2023 13:53:31 +0100 Subject: [PATCH 0977/1921] update tests --- conf/modules.config | 2 +- conf/test.config | 13 ------------- conf/test_one_sample.config | 13 ------------- 3 files changed, 1 insertion(+), 27 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7b655ded..0f77438e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -862,7 +862,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70 | INFO/SWEGENAF > 0.70" ' } + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, diff --git a/conf/test.config b/conf/test.config index 36bb3835..ea3c7d24 100644 --- a/conf/test.config +++ b/conf/test.config @@ -50,17 +50,4 @@ params { vep_cache_version = 107 } -process { - withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { - ext.when = { params.annotate_snv_switch } - ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z' } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} - diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 63cec545..d8d13d9a 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -49,16 +49,3 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" vep_cache_version = 107 } - -process { - withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { - ext.when = { params.annotate_snv_switch } - ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z' } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} From 2c751b22a6d8bc6ad985cdcf39edc11abb695f0d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Feb 2023 14:26:12 +0100 Subject: [PATCH 0978/1921] remove space --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index b4e73ef1..451d6be7 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -862,7 +862,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, From 0995ec5eb7afdbb128b00b886edabd8ea0f8a4b0 Mon Sep 17 00:00:00 2001 From: peterpru Date: Mon, 20 Feb 2023 16:32:21 +0100 Subject: [PATCH 0979/1921] Test without stub section --- modules/nf-core/smncopynumbercaller/main.nf | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 7a0e2ec4..33ca3013 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -37,16 +37,4 @@ process SMNCOPYNUMBERCALLER { SMNCopyNumberCaller: $VERSION END_VERSIONS """ - - stub: - """ - mkdir out - touch out/${prefix}.tsv - touch out/${prefix}.json - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - SMNCopyNumberCaller: $VERSION - END_VERSIONS - """ } From 7a6d8281819e605a92be100e85bbe040c69de3d3 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Tue, 21 Feb 2023 11:43:54 +0100 Subject: [PATCH 0980/1921] removes change name from included --- subworkflows/local/mitochondria/merge_annotate_MT.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 842fae18..e594c97a 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -8,7 +8,6 @@ include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../. include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' 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 { CHANGE_NAME as CHANGE_NAME_VCF_MT } from '../../../modules/local/change_name' include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../../modules/nf-core/bcftools/merge/main' include { HMTNOTE as HMTNOTE_MT } from '../../../modules/nf-core/hmtnote/main' include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../../modules/nf-core/tabix/tabix/main' From c60ca162f8cdb5b4b8536b274dd9cf8cfe5e66a9 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 21 Feb 2023 16:11:21 +0100 Subject: [PATCH 0981/1921] add stubs in again --- modules/nf-core/smncopynumbercaller/main.nf | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 33ca3013..8688fe78 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -37,4 +37,16 @@ process SMNCOPYNUMBERCALLER { SMNCopyNumberCaller: $VERSION END_VERSIONS """ + + stub: + """ + mkdir out + touch out/$prefix.tsv + touch out/$prefix.json + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + SMNCopyNumberCaller: $VERSION + END_VERSIONS + """ } From cd313d7fa1060e0fde76f65c936135bdf078eb18 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 21 Feb 2023 16:32:27 +0100 Subject: [PATCH 0982/1921] add custom stub as prefix not defined in stubs --- modules/nf-core/smncopynumbercaller/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 8688fe78..e636e5c6 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -41,8 +41,8 @@ process SMNCOPYNUMBERCALLER { stub: """ mkdir out - touch out/$prefix.tsv - touch out/$prefix.json + touch out/smnstub.tsv + touch out/smnstub.json cat <<-END_VERSIONS > versions.yml "${task.process}": From f2fba8d53f8b0d7bddeffcf8b9778e0abc0ee7b3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:14:28 +0100 Subject: [PATCH 0983/1921] more fixes --- bin/add_most_severe_pli.py | 2 +- conf/test.config | 4 +--- conf/test_one_sample.config | 4 +--- subworkflows/local/annotate_snvs.nf | 13 +++++++------ subworkflows/local/annotate_structural_variants.nf | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py index 99f61d9f..8f528389 100755 --- a/bin/add_most_severe_pli.py +++ b/bin/add_most_severe_pli.py @@ -90,7 +90,7 @@ def parse_args(argv=None): """Define and immediately parse command line arguments.""" parser = argparse.ArgumentParser( description="Annotate vcf with the most severe pli field.", - epilog="Example: python vcfparser.py --file_in vep.vcf --file_out vep.most_severe_pli.vcf --pli pli_per_gene.txt", + epilog="Example: python vcfparser.py --file_in vep.vcf --file_out vep.most_severe_pli.vcf", ) parser.add_argument( "--file_in", diff --git a/conf/test.config b/conf/test.config index ea3c7d24..be4b45ba 100644 --- a/conf/test.config +++ b/conf/test.config @@ -34,11 +34,9 @@ params { 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" - pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" 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" - select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" @@ -46,7 +44,7 @@ params { vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index d8d13d9a..55be0d91 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -34,11 +34,9 @@ params { 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" - pli_per_gene = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins/pLI_values_107.txt" 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" - select_feature_file = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" @@ -46,6 +44,6 @@ params { vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gene_panels.bed" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index ce24b7a8..d522f4f2 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -10,7 +10,7 @@ include { RHOCALL_ANNOTATE } from '../../modules/nf-core/ 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' -include { TABIX_BGZIPTABIX as ZIP_TABIX_VEP } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' 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' @@ -79,13 +79,14 @@ workflow ANNOTATE_SNVS { [] ) - ZIP_TABIX_VEP (ENSEMBLVEP_SNV.out.vcf) + TABIX_VEP (ENSEMBLVEP_SNV.out.vcf_gz) - ZIP_TABIX_VEP.out.gz_tbi + ENSEMBLVEP_SNV.out.vcf_gz + .join(TABIX_VEP.out.tbi) .groupTuple() .map { meta, vcfs, tbis -> - def sortedvcfs = vcfs.sort() - def sortedtbis = tbis.sort() + def sortedvcfs = vcfs.sort { it.baseName } + def sortedtbis = tbis.sort { it.baseName } return [ meta, sortedvcfs, sortedtbis ] } .set { ch_vep_ann } @@ -103,7 +104,7 @@ workflow ANNOTATE_SNVS { 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(ENSEMBLVEP_SNV.out.versions.first()) - ch_versions = ch_versions.mix(ZIP_TABIX_VEP.out.versions.first()) + 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) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 48aa9911..fc37c4eb 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -63,6 +63,6 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: - vcf_ann = ENSEMBLVEP_SV.out.vcf + vcf_ann = ENSEMBLVEP_SV.out.vcf_gz versions = ch_versions } From 3be280604e2802252684ad8305182bebbd88dcd9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:30:11 +0100 Subject: [PATCH 0984/1921] update template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 92b6ee7a..d848b01e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,7 +18,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir -stub`). -- [ ] Ensure the test suite passes (`nextflow run . -profile test2samples,docker --outdir -stub`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test_one_sample,docker --outdir -stub`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. From 412da09e02a9d80bb0f6397ff11c310b52dbe3f0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Feb 2023 22:11:34 +0100 Subject: [PATCH 0985/1921] update wgs metrics --- conf/modules.config | 2 -- modules/local/sentieon/wgsmetricsalgo.nf | 9 ++++++--- subworkflows/local/qc_bam.nf | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index f03155f9..58381d22 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -553,7 +553,6 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, @@ -563,7 +562,6 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, mode: params.publish_dir_mode, diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index bce76109..2165741c 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -9,6 +9,7 @@ process SENTIEON_WGSMETRICSALGO { tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) tuple val(meta2), path(fai) + path intervals_list output: tuple val(meta), path('*wgs_metrics.txt'), emit: wgs_metrics @@ -18,9 +19,10 @@ process SENTIEON_WGSMETRICSALGO { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def input = bam.sort().collect{"-i $it"}.join(' ') + def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals_list ? "--interval ${intervals_list}" : "" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" @@ -32,6 +34,7 @@ process SENTIEON_WGSMETRICSALGO { -t $task.cpus \\ -r $fasta \\ $input \\ + $interval \\ $args \\ --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index a003a0e3..4d4e26d6 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -54,8 +54,8 @@ workflow QC_BAM { PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) - SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) - SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) + SENTIEON_WGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) + SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai, 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) From f617f70017ca92daf32882cfc394ae1e74cdbb38 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Feb 2023 23:59:32 +0100 Subject: [PATCH 0986/1921] update ml model --- conf/test.config | 1 + conf/test_one_sample.config | 1 + modules/local/sentieon/dnamodelapply.nf | 7 +++--- modules/local/sentieon/dnascope.nf | 7 +++--- .../variant_calling/call_snv_sentieon.nf | 24 ++++++++----------- workflows/raredisease.nf | 4 ++++ 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/conf/test.config b/conf/test.config index ea3c7d24..b336b1b7 100644 --- a/conf/test.config +++ b/conf/test.config @@ -30,6 +30,7 @@ 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" 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" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index d8d13d9a..f476e772 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -30,6 +30,7 @@ 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" 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.1.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" diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf index 3be8ec10..3da61591 100644 --- a/modules/local/sentieon/dnamodelapply.nf +++ b/modules/local/sentieon/dnamodelapply.nf @@ -10,9 +10,10 @@ process SENTIEON_DNAMODELAPPLY { path ml_model output: - tuple val(meta), path("*_dnascope_ml.vcf.gz") , emit: vcf - tuple val(meta), path("*_dnascope_ml.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: index + tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi") , emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index 1d2d1ccc..5bd5ac15 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -13,9 +13,10 @@ process SENTIEON_DNASCOPE { path ml_model output: - tuple val(meta), path("*_dnascope.vcf.gz") , emit: vcf - tuple val(meta), path("*_dnascope.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: index + tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi") , emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 2dc1fe1c..aef4eeeb 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -27,25 +27,16 @@ workflow CALL_SNV_SENTIEON { ch_versions = Channel.empty() SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, call_interval, ml_model ) - ch_vcf = SENTIEON_DNASCOPE.out.vcf - ch_index = SENTIEON_DNASCOPE.out.vcf_index - ch_vcf_idx = ch_vcf.join( ch_index ) + SENTIEON_DNAMODELAPPLY ( SENTIEON_DNASCOPE.out.vcf_index, fasta, fai, ml_model ) - SENTIEON_DNAMODELAPPLY ( ch_vcf_idx, fasta, fai, ml_model ) + BCF_FILTER_ONE (SENTIEON_DNAMODELAPPLY.out.vcf ) - if (params.ml_model) { - ch_vcf = SENTIEON_DNAMODELAPPLY.out.vcf - ch_index = SENTIEON_DNAMODELAPPLY.out.vcf_index - } - - BCF_FILTER_ONE (ch_vcf ) BCF_FILTER_TWO ( BCF_FILTER_ONE.out.vcf ) - ch_vcf = BCF_FILTER_TWO.out.vcf - TABIX_BCFTOOLS ( ch_vcf ) - ch_index = TABIX_BCFTOOLS.out.tbi - ch_vcf.join(ch_index) + TABIX_BCFTOOLS ( BCF_FILTER_TWO.out.vcf ) + + BCF_FILTER_TWO.out.vcf.join(TABIX_BCFTOOLS.out.tbi) .map { meta,vcf,tbi -> return [vcf,tbi] } .set { ch_vcf_idx } @@ -59,16 +50,21 @@ workflow CALL_SNV_SENTIEON { .set{ ch_vcf_idx_merge_in } BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple,[],fasta,fai) + ch_split_multi_in = BCFTOOLS_MERGE.out.merged_variants .map{meta, bcf -> return [meta, bcf, []]} + ch_vcf_idx_case = ch_vcf_idx_merge_in.single.mix(ch_split_multi_in) + SPLIT_MULTIALLELICS_SEN(ch_vcf_idx_case, fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_SEN.out.vcf .map{meta, vcf -> return [meta, vcf, []]} + REMOVE_DUPLICATES_SEN(ch_remove_dup_in, fasta) + TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 519a57e5..4a1bb331 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -134,6 +134,10 @@ workflow RAREDISEASE { exit 1, 'Input samplesheet not specified!' } + if (params.variant_caller.equals("sentieon") && !params.ml_model) { + exit 1, 'Machine learning model not specified!' + } + // Initialize all file channels including unprocessed vcf, bed and tab files ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() : Channel.value([]) From 53fc63c115f4c248199be313802627be41157959 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 00:25:54 +0100 Subject: [PATCH 0987/1921] update link --- conf/test_one_sample.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index f476e772..f41baa9a 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -30,7 +30,7 @@ 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" 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.1.model" + 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" From e8ddbaed1102a07b4942c38787214f884e958aae Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 09:54:04 +0100 Subject: [PATCH 0988/1921] refactor modules --- conf/modules.config | 111 ++++++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 58381d22..8e49211f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -411,6 +411,7 @@ process { } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { + ext.prefix = { "${meta.id}_dnascope" } ext.args2 = { [ params.variant_type ? "--var_type ${params.variant_type}" : '', params.pcrfree ? "--pcr_indel_model NONE" : '' @@ -423,7 +424,7 @@ process { } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { - ext.when = { params.ml_model } + ext.prefix = { "${meta.id}_dnamodelapply" } publishDir = [ path: { "${params.outdir}/sentieon_dnamodelapply" }, mode: params.publish_dir_mode, @@ -598,8 +599,12 @@ process { // process { + + withName: '.*CALL_SNV_DEEPVARIANT:.*' { + ext.when = params.variant_caller.equals("deepvariant") + } + withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { - ext.when = { params.variant_caller.equals("deepvariant") } ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } ext.prefix = { "${meta.id}_deepvar" } publishDir = [ @@ -610,7 +615,6 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:GLNEXUS' { - ext.when = { params.variant_caller.equals("deepvariant") } ext.args = '--config DeepVariant_unfiltered' publishDir = [ enabled: false @@ -618,7 +622,6 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:SPLIT_MULTIALLELICS_GL' { - ext.when = { params.variant_caller.equals("deepvariant") } ext.args = '--output-type z --multiallelics -both' publishDir = [ enabled: false @@ -626,7 +629,6 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { - ext.when = { params.variant_caller.equals("deepvariant") } ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ @@ -637,7 +639,6 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { - ext.when = { params.variant_caller.equals("deepvariant") } publishDir = [ path: { "${params.outdir}/glnexus" }, mode: params.publish_dir_mode, @@ -752,22 +753,23 @@ process { // process { + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { + ext.when = params.annotate_sv_switch + } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { - ext.when = { params.annotate_sv_switch } publishDir = [ enabled: false, ] } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { - ext.when = { params.annotate_sv_switch } publishDir = [ enabled: false, ] } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { - ext.when = { params.annotate_sv_switch } ext.prefix = { "${meta.id}_view" } publishDir = [ enabled: false, @@ -775,7 +777,6 @@ process { } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { - ext.when = { params.annotate_sv_switch } ext.args = [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', @@ -800,20 +801,21 @@ process { // process { + withName: '.*RANK_VARIANTS_SV:.*' { + ext.when = params.annotate_sv_switch + } + withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - ext.when = { params.annotate_sv_switch } ext.args = { (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' } } withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { - ext.when = { params.annotate_sv_switch } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { - ext.when = { params.annotate_sv_switch } publishDir = [ path: { "${params.outdir}/genmod" }, mode: params.publish_dir_mode, @@ -827,9 +829,12 @@ process { // process { + withName: '.*ANNOTATE_SNVS:.*' { + ext.when = params.annotate_snv_switch + } + withName: '.*ANNOTATE_SNVS:VCFANNO' { ext.prefix = { "${meta.id}_vcfanno" } - ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/snv_annotation" }, mode: params.publish_dir_mode, @@ -838,7 +843,6 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { - ext.when = { params.annotate_snv_switch } ext.args = { "--samples ${meta.id} --skip-indels " } publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -848,7 +852,6 @@ process { } withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { - ext.when = { params.annotate_snv_switch } ext.args = { "--v14 " } publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -858,7 +861,6 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { - ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_view" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } publishDir = [ @@ -869,7 +871,6 @@ process { } withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { - ext.when = { params.annotate_snv_switch } ext.prefix = { "${meta.id}_${intervals.simpleName}" } ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} publishDir = [ @@ -881,7 +882,6 @@ process { } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { - ext.when = { params.annotate_snv_switch } ext.prefix = { "${vcf.simpleName}_vep" } ext.args = [ '--dir_plugins vep_cache/Plugins', @@ -905,7 +905,6 @@ process { } withName: '.*ANNOTATE_SNVS:ZIP_TABIX_VEP' { - ext.when = { params.annotate_snv_switch } ext.prefix = { "${input.simpleName}" } publishDir = [ path: { "${params.outdir}/snv_annotation" }, @@ -930,25 +929,25 @@ process { // process { + withName: '.*RANK_VARIANTS_SNV:.*' { + ext.when = params.annotate_snv_switch + } + withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - ext.when = { params.annotate_snv_switch } ext.args = { (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' } } withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { - ext.when = { params.annotate_snv_switch } ext.args = " --whole_gene " } withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { - ext.when = { params.annotate_snv_switch } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { - ext.when = { params.annotate_snv_switch } publishDir = [ path: { "${params.outdir}/genmod" }, mode: params.publish_dir_mode, @@ -963,9 +962,12 @@ process { // 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"} - ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = [ "-L ${params.mt_contig_name}", "--read-filter MateOnSameContigOrNoMappedMateReadFilter", @@ -974,12 +976,10 @@ process { } withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { - ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { - ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT' } } @@ -989,6 +989,10 @@ process { // 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.args = { "-M -K 100000000 -R ${meta.read_group}" } @@ -1001,13 +1005,11 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = { [ "--VALIDATION_STRINGENCY LENIENT", "--RGLB lib", @@ -1018,28 +1020,23 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_filtered" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_RENAMESAMPLEINVCF_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_renamed" } } } @@ -1049,6 +1046,10 @@ 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.args = { "-M -K 100000000 -R ${meta.read_group}" } @@ -1061,13 +1062,11 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = { [ "--VALIDATION_STRINGENCY LENIENT", "--RGLB lib", @@ -1078,33 +1077,27 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.args = '--mitochondria-mode TRUE' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:HAPLOCHECK_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_filtered_shifted" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_RENAMESAMPLEINVCF_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_renamed" } } } @@ -1125,34 +1118,35 @@ process { // 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" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_VARIANTFILTRATION_MT' { ext.prefix = { "${meta.id}_filt" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ enabled: false ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ path: { "${params.outdir}/gatk4" }, mode: params.publish_dir_mode, @@ -1161,19 +1155,27 @@ process { } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT2' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT3' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { @@ -1192,7 +1194,6 @@ process { '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', '--uniprot' ].join(' ') - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ path: { "${params.outdir}/mt_annotation_vep" }, mode: params.publish_dir_mode @@ -1200,12 +1201,13 @@ process { } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } + publishDir = [ + enabled: false + ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { ext.prefix = { "${meta.id}_mito_ann" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } publishDir = [ path: { "${params.outdir}/mt_annotation" }, mode: params.publish_dir_mode, @@ -1215,7 +1217,6 @@ process { withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { ext.prefix = { "${meta.id}_mito_ann" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } } } From 9d59af9cc8f2a622f925336613e290bdf2d7bc5f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 10:37:04 +0100 Subject: [PATCH 0989/1921] remove changes overlapping with the other PR --- conf/modules.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 8e49211f..acd5d7e0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -554,7 +554,7 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { ext.when = params.aligner.equals("sentieon") - publishDir = [ + ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -563,6 +563,7 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { ext.when = params.aligner.equals("sentieon") + ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, mode: params.publish_dir_mode, From 76e1c4872332ba805e48cc2f2d3acdd13bccf7b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 10:43:18 +0100 Subject: [PATCH 0990/1921] Update subworkflows/local/qc_bam.nf Co-authored-by: Anders Jemt --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 4d4e26d6..a003a0e3 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -54,8 +54,8 @@ workflow QC_BAM { PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) - SENTIEON_WGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) - SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) + SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) + SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) 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) From b900290b57fd5f7f35fe4ca1b638abbfee9700ee Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 11:10:09 +0100 Subject: [PATCH 0991/1921] revert more changes --- modules/local/sentieon/wgsmetricsalgo.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 2165741c..5c5ad94c 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -9,7 +9,6 @@ process SENTIEON_WGSMETRICSALGO { tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) tuple val(meta2), path(fai) - path intervals_list output: tuple val(meta), path('*wgs_metrics.txt'), emit: wgs_metrics From 23d600a7f0516e70850b7e5ee3ccd959e6c81eaf Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 22 Feb 2023 11:50:36 +0100 Subject: [PATCH 0992/1921] change version argument --- modules/nf-core/smncopynumbercaller/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index e636e5c6..dea55aac 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -22,7 +22,7 @@ process SMNCOPYNUMBERCALLER { manifest_text = bam.join("\n") def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = "1.1.2" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. """ echo "$manifest_text" >manifest.txt smn_caller.py \\ @@ -34,7 +34,7 @@ process SMNCOPYNUMBERCALLER { cat <<-END_VERSIONS > versions.yml "${task.process}": - SMNCopyNumberCaller: $VERSION + SMNCopyNumberCaller: "1.1.2" END_VERSIONS """ @@ -46,7 +46,7 @@ process SMNCOPYNUMBERCALLER { cat <<-END_VERSIONS > versions.yml "${task.process}": - SMNCopyNumberCaller: $VERSION + SMNCopyNumberCaller: $"1.1.2" END_VERSIONS """ } From bbbca9f99ef1fc23c3663420431ae8ab216de866 Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 22 Feb 2023 11:53:01 +0100 Subject: [PATCH 0993/1921] fix typo --- modules/nf-core/smncopynumbercaller/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index dea55aac..0f8cd9b0 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -46,7 +46,7 @@ process SMNCOPYNUMBERCALLER { cat <<-END_VERSIONS > versions.yml "${task.process}": - SMNCopyNumberCaller: $"1.1.2" + SMNCopyNumberCaller: "1.1.2" END_VERSIONS """ } From b80665b16367303dd26f83236a20035e895c53aa Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 22 Feb 2023 13:15:23 +0100 Subject: [PATCH 0994/1921] remove and install smncopynumbercaller using nf-core modules commands --- modules/nf-core/smncopynumbercaller/main.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 0f8cd9b0..7a0e2ec4 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -22,7 +22,7 @@ process SMNCOPYNUMBERCALLER { manifest_text = bam.join("\n") def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + def VERSION = "1.1.2" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. """ echo "$manifest_text" >manifest.txt smn_caller.py \\ @@ -34,19 +34,19 @@ process SMNCOPYNUMBERCALLER { cat <<-END_VERSIONS > versions.yml "${task.process}": - SMNCopyNumberCaller: "1.1.2" + SMNCopyNumberCaller: $VERSION END_VERSIONS """ stub: """ mkdir out - touch out/smnstub.tsv - touch out/smnstub.json + touch out/${prefix}.tsv + touch out/${prefix}.json cat <<-END_VERSIONS > versions.yml "${task.process}": - SMNCopyNumberCaller: "1.1.2" + SMNCopyNumberCaller: $VERSION END_VERSIONS """ } From d1369e1296dd63d3abdb99966349a491b1d483c4 Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 22 Feb 2023 14:16:15 +0100 Subject: [PATCH 0995/1921] update smn module which contains stub fixes --- modules.json | 2 +- modules/nf-core/smncopynumbercaller/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index 9fd26f25..2b5a8258 100644 --- a/modules.json +++ b/modules.json @@ -292,7 +292,7 @@ }, "smncopynumbercaller": { "branch": "master", - "git_sha": "93deb7b33308ce23fb4fd2a8e13b86bc117e8d77" + "git_sha": "e70433b04bef836b22bbed5a1e6e4e95aeec09fe" }, "stranger": { "branch": "master", diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 7a0e2ec4..27b5ae21 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -31,7 +31,6 @@ process SMNCOPYNUMBERCALLER { --prefix $prefix \\ --outDir "out" \\ --threads $task.cpus - cat <<-END_VERSIONS > versions.yml "${task.process}": SMNCopyNumberCaller: $VERSION @@ -39,11 +38,12 @@ process SMNCOPYNUMBERCALLER { """ stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "1.1.2" """ mkdir out touch out/${prefix}.tsv touch out/${prefix}.json - cat <<-END_VERSIONS > versions.yml "${task.process}": SMNCopyNumberCaller: $VERSION From 4b7a154e9bd68ea748b08546348be2f41ab77d9c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 15:38:47 +0100 Subject: [PATCH 0996/1921] revert changes --- modules/local/sentieon/wgsmetricsalgo.nf | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 5c5ad94c..bce76109 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -18,10 +18,9 @@ process SENTIEON_WGSMETRICSALGO { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" - def interval = intervals_list ? "--interval ${intervals_list}" : "" + def args = task.ext.args ?: '' + 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" @@ -33,7 +32,6 @@ process SENTIEON_WGSMETRICSALGO { -t $task.cpus \\ -r $fasta \\ $input \\ - $interval \\ $args \\ --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt From 75836a20b3d7abaccbd5cc31c3200641235e3abc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 15:40:43 +0100 Subject: [PATCH 0997/1921] edit spaces --- conf/modules.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index acd5d7e0..90e18a74 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -554,7 +554,8 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ + ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } + publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, From 5b58bf9f2c175bd333855fd2125c788f65b4d0d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:26:19 +0100 Subject: [PATCH 0998/1921] break modules.config into smaller configs --- conf/modules.config | 1236 ----------------- conf/modules/align.config | 12 + conf/modules/align_and_call_MT.config | 130 ++ conf/modules/align_bwamem2.config | 62 + conf/modules/align_sentieon.config | 65 + conf/modules/analyse_MT.config | 24 + conf/modules/annotate_consequence_pli.config | 12 + conf/modules/annotate_snvs.config | 101 ++ .../annotate_structural_variants.config | 60 + conf/modules/call_cnv_cnvpytor.config | 48 + conf/modules/call_repeat_expansions.config | 34 + conf/modules/call_snv.config | 12 + conf/modules/call_snv_deepvariant.config | 65 + conf/modules/call_snv_sentieon.config | 90 ++ conf/modules/call_structural_variants.config | 26 + conf/modules/call_sv_manta.config | 27 + conf/modules/call_sv_tiddit.config | 36 + conf/modules/check_input.config | 12 + conf/modules/convert_mt_bam_to_fastq.config | 39 + conf/modules/gens.config | 30 + conf/modules/merge_annotate_MT.config | 120 ++ conf/modules/prepare_references.config | 198 +++ conf/modules/prepare_vcf.config | 55 + conf/modules/qc_bam.config | 106 ++ conf/modules/rank_variants.config | 72 + conf/modules/raredisease.config | 94 ++ conf/modules/scatter_genome.config | 34 + nextflow.config | 30 +- 28 files changed, 1592 insertions(+), 1238 deletions(-) delete mode 100644 conf/modules.config create mode 100644 conf/modules/align.config create mode 100644 conf/modules/align_and_call_MT.config create mode 100644 conf/modules/align_bwamem2.config create mode 100644 conf/modules/align_sentieon.config create mode 100644 conf/modules/analyse_MT.config create mode 100644 conf/modules/annotate_consequence_pli.config create mode 100644 conf/modules/annotate_snvs.config create mode 100644 conf/modules/annotate_structural_variants.config create mode 100644 conf/modules/call_cnv_cnvpytor.config create mode 100644 conf/modules/call_repeat_expansions.config create mode 100644 conf/modules/call_snv.config create mode 100644 conf/modules/call_snv_deepvariant.config create mode 100644 conf/modules/call_snv_sentieon.config create mode 100644 conf/modules/call_structural_variants.config create mode 100644 conf/modules/call_sv_manta.config create mode 100644 conf/modules/call_sv_tiddit.config create mode 100644 conf/modules/check_input.config create mode 100644 conf/modules/convert_mt_bam_to_fastq.config create mode 100644 conf/modules/gens.config create mode 100644 conf/modules/merge_annotate_MT.config create mode 100644 conf/modules/prepare_references.config create mode 100644 conf/modules/prepare_vcf.config create mode 100644 conf/modules/qc_bam.config create mode 100644 conf/modules/rank_variants.config create mode 100644 conf/modules/raredisease.config create mode 100644 conf/modules/scatter_genome.config diff --git a/conf/modules.config b/conf/modules.config deleted file mode 100644 index 90e18a74..00000000 --- a/conf/modules.config +++ /dev/null @@ -1,1236 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ - -// -// General configuration options -// - -process { - publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - - withName: '.*CHECK_INPUT:SAMPLESHEET_CHECK' { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: 'CUSTOM_DUMPSOFTWAREVERSIONS' { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - pattern: '*_versions.yml' - ] - } -} - -// -// Read QC options -// - -process { - withName: 'FASTQC' { - ext.args = '--quiet' - publishDir = [ - path: { "${params.outdir}/reports/fastqc/${meta.id}" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} - -// -// Genome preparation options -// - -process { - withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { - ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" - ] - } - - 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"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" - ] - } - - withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { - ext.when = {!params.bwa_index && params.aligner == "sentieon"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference - ] - } - - 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"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference - ] - } - - withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { - ext.when = {!params.bwa_index && !(params.aligner == "sentieon")} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference - ] - } - - withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { - ext.when = {!params.fasta_fai} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*fai" - ] - } - - withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { - ext.when = {!params.mt_fai_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*fai" - ] - } - - withName: '.*PREPARE_REFERENCES:GATK_SD' { - ext.when = {!params.sequence_dictionary} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*dict" - ] - } - - withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { - ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*dict" - ] - } - - withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { - publishDir = [ - enabled: false, - ] - } - - withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { - ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*tbi" - ] - } - - withName: '.*PREPARE_REFERENCES:TABIX_GNOMAD_AF' { - ext.when = {params.gnomad_af && !params.gnomad_af_idx} - ext.args = '-s 1 -b 2 -e 2' - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*tbi" - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:CHECK_INPUT_VCF' { - ext.when = {params.gnomad_vcf} - publishDir = [ - enabled: false, - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:SPLIT_MULTIALLELICS_PV' { - ext.when = {params.gnomad_vcf} - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:REMOVE_DUPLICATES_PV' { - ext.when = {params.gnomad_vcf} - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:TABIX_PV' { - ext.when = {params.gnomad_vcf} - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:TABIX_PT' { - ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:TABIX_PBT' { - ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:GATK_BILT' { - ext.when = { params.target_bed } - ext.prefix = { "${meta.id}_target" } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:GATK_ILT' { - ext.when = { params.target_bed } - ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' - publishDir = [ - enabled: false - ] - } - - withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { - ext.when = { params.target_bed } - ext.prefix = { "${meta.id}" } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:UNTAR_VEP_CACHE' { - ext.when = { params.vep_cache.endsWith("tar.gz") } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// Create bed and interval files for scatter operations -// - -process { - withName: '.*SCATTER_GENOME:BUILD_BED' { - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} - } - - withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { - ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} - ext.prefix = { "${meta.id}_genome_intervals" } - publishDir = [ - enabled: params.save_reference, - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// Bwamem2 alignment options -// - -process { - withName: '.*ALIGN_BWAMEM2:.*' { - ext.when = params.aligner.equals("bwamem2") - publishDir = [ - path: { "${params.outdir}/bwamem2" }, - mode: 'copy', - pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - publishDir = [ - path: { "${params.outdir}/bwamem2" }, - enabled: false, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { - ext.args = '-s --remove-overlaps' - publishDir = [ - path: { "${params.outdir}/bwamem2" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { - ext.prefix = { "${meta.id}_sorted_merged" } - publishDir = [ - enabled: false, - ] - } - - withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { - ext.prefix = { "${meta.id}_sorted_md" } - publishDir = [ - path: { "${params.outdir}/bwamem2" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - -} - -// -// Sentieon alignment options -// - -process { - withName: '.*ALIGN_SENTIEON:.*' { - ext.when = params.aligner.equals("sentieon") - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { - ext.args = { "-M -K 10000000 -R ${meta.read_group} " } - ext.prefix = { "${meta.id}.sorted" } - publishDir = [ - path: { "${params.outdir}/sentieon_align" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { - publishDir = [ - path: { "${params.outdir}/sentieon_bam_metrics" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { - publishDir = [ - path: { "${params.outdir}/sentieon_dedup" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { - ext.args = { $params.rmdup ? "--rmdup" : '' } - publishDir = [ - path: { "${params.outdir}/sentieon_dedup" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BQSR' { - publishDir = [ - path: { "${params.outdir}/sentieon_recal" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// Sentieon SNV calling options -// - -process { - withName: '.*CALL_SNV_SENTIEON:.*' { - ext.when = params.variant_caller.equals("sentieon") - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { - ext.prefix = { "${meta.id}_dnascope" } - ext.args2 = { [ - params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcrfree ? "--pcr_indel_model NONE" : '' - ].join(" ") } - publishDir = [ - path: { "${params.outdir}/sentieon_dnascope" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { - ext.prefix = { "${meta.id}_dnamodelapply" } - publishDir = [ - path: { "${params.outdir}/sentieon_dnamodelapply" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { - ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" - ext.prefix = { "${meta.id}_mlfiltered_0.95" } - publishDir = [ - path: { "${params.outdir}/sentieon_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { - ext.args = "-i FILTER='\"PASS\"' -m x -Oz" - ext.prefix = { "${meta.id}_passed" } - publishDir = [ - path: { "${params.outdir}/sentieon_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - path: { "${params.outdir}/sentieon_normvcf" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { - publishDir = [ - path: { "${params.outdir}/sentieon_normvcf" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// Bam QC options -// - -process { - withName: '.*QC_BAM:PICARD_COLLECTMULTIPLEMETRICS' { - publishDir = [ - path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { - publishDir = [ - path: { "${params.outdir}/bamqc/collecthsmetrics" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:QUALIMAP_BAMQC' { - publishDir = [ - path: { "${params.outdir}/bamqc_qualimap" }, - mode: params.publish_dir_mode, - ] - } - - withName: '.*QC_BAM:TIDDIT_COV' { - ext.args = '-z 500 -w' - publishDir = [ - path: { "${params.outdir}/tiddit_coverage" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:UCSC_WIGTOBIGWIG' { - ext.args = '-clip' - publishDir = [ - path: { "${params.outdir}/tiddit_coverage" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:MOSDEPTH' { - ext.args = '--d4' - publishDir = [ - path: { "${params.outdir}/mosdepth" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { - ext.when = params.aligner.equals("bwamem2") - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { - ext.when = params.aligner.equals("bwamem2") - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { - ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { - ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} - -// -// Repeat expansion calling options -// - -process { - withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { - publishDir = [ - path: { "${params.outdir}/expansionhunter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*CALL_REPEAT_EXPANSIONS:STRANGER' { - publishDir = [ - path: { "${params.outdir}/stranger" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } -} - - -// -// SNV calling options -// - -process { - - withName: '.*CALL_SNV_DEEPVARIANT:.*' { - ext.when = params.variant_caller.equals("deepvariant") - } - - withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { - ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } - ext.prefix = { "${meta.id}_deepvar" } - publishDir = [ - path: { "${params.outdir}/deepvariant" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV_DEEPVARIANT:GLNEXUS' { - ext.args = '--config DeepVariant_unfiltered' - publishDir = [ - enabled: false - ] - } - - withName: '.*CALL_SNV_DEEPVARIANT:SPLIT_MULTIALLELICS_GL' { - ext.args = '--output-type z --multiallelics -both' - publishDir = [ - enabled: false - ] - } - - withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - path: { "${params.outdir}/glnexus" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { - publishDir = [ - path: { "${params.outdir}/glnexus" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - -} - -// -// Remove mitochondrial variants -// - -process { - withName: '.*RAREDISEASE:GATK4_SELECTVARIANTS' { - ext.args = "--exclude-intervals ${params.mt_contig_name}" - ext.prefix = { "${meta.id}_nomito" } - ext.when = { params.annotate_snv_switch } - publishDir = [ - path: { "${params.outdir}/glnexus/no_mito" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// Structural variant calling options -// - -process { - withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA' { - ext.prefix = { "${meta.id}_manta" } - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV' { - ext.args = '-p 6' - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - ] - } - - withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:SVDB_MERGE_TIDDIT' { - ext.args = '--notag --pass_only' - ext.prefix = { "${meta.id}_tiddit" } - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:GENERATE_PYTOR" { - ext.args = { params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:HISTOGRAMS" { - publishDir = [ - enabled: false - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:PARTITIONS" { - publishDir = [ - enabled: false - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:CALL_CNVS" { - publishDir = [ - enabled: false - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:VIEW" { - ext.prefix = { "${meta.id}_cnvpytor" } - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - ] - } - - withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { - ext.args = '--pass_only --same_order' - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - ] - } - - withName: '.*GENS:COLLECTREADCOUNTS' { - ext.args = '--interval-merging-rule OVERLAPPING_ONLY' - } - - withName: GENS { - publishDir = [ - path: { "${params.outdir}/gens" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// Structural variant annotation options -// - -process { - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { - ext.when = params.annotate_sv_switch - } - - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { - publishDir = [ - enabled: false, - ] - } - - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { - publishDir = [ - enabled: false, - ] - } - - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_view" } - publishDir = [ - enabled: false, - ] - } - - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { - ext.args = [ - '--dir_cache vep_cache', - '--dir_plugins vep_cache/Plugins', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--appris --biotype --buffer_size 100 --canonical --cache --ccds', - '--compress_output bgzip --distance 5000 --domains', - '--exclude_predicted --force_overwrite --format vcf', - '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', - '--no_progress --no_stats --numbers --per_gene --polyphen p', - '--protein --offline --regulatory --sift p', - '--symbol --tsl --uniprot --vcf' - ].join(' ') - publishDir = [ - path: { "${params.outdir}/sv_annotate" }, - mode: params.publish_dir_mode, - ] - } -} - -// -// Score and rank structural variants -// - -process { - withName: '.*RANK_VARIANTS_SV:.*' { - ext.when = params.annotate_sv_switch - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' - } - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { - ext.args = " --rank_results " - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -// -// SNV annotation options -// - -process { - withName: '.*ANNOTATE_SNVS:.*' { - ext.when = params.annotate_snv_switch - } - - withName: '.*ANNOTATE_SNVS:VCFANNO' { - ext.prefix = { "${meta.id}_vcfanno" } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { - ext.args = { "--samples ${meta.id} --skip-indels " } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { - ext.args = { "--v14 " } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_view" } - ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { - ext.prefix = { "${meta.id}_${intervals.simpleName}" } - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} - publishDir = [ - enabled: params.save_reference, - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { - ext.prefix = { "${vcf.simpleName}_vep" } - ext.args = [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', - '--distance 5000', - '--buffer_size 20000', - '--format vcf --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', - '--uniprot --vcf' - ].join(' ') - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - ] - } - - withName: '.*ANNOTATE_SNVS:ZIP_TABIX_VEP' { - ext.prefix = { "${input.simpleName}" } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - ] - } -} - -// -// Merge mitochondrial and genomic vcfs -// - -process { - withName: '.*RAREDISEASE:BCFTOOLS_CONCAT' { - ext.prefix = { "${meta.id}_mito_genome_merged" } - ext.args = " -a " - } -} - -// -// Score and rank SNVs -// - -process { - withName: '.*RANK_VARIANTS_SNV:.*' { - ext.when = params.annotate_snv_switch - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' - } - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { - ext.args = " --whole_gene " - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { - ext.args = " --rank_results " - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { - publishDir = [ - path: { "${params.outdir}/genmod" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - - -// -// ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ -// - -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"} - ext.args = [ - "-L ${params.mt_contig_name}", - "--read-filter MateOnSameContigOrNoMappedMateReadFilter", - "--read-filter MateUnmappedAndUnmappedReadFilter" - ].join(" ").trim() - } - - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { - ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' - } - - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT' - } -} - -// -// ANALYSE_MT:ALIGN_AND_CALL_MT -// - -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.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.prefix = { "${meta.id}.sorted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.args = { [ - "--VALIDATION_STRINGENCY LENIENT", - "--RGLB lib", - "--RGPL ILLUMINA", - "--RGPU barcode", - "--RGSM ${meta.id}" - ].join(' ' ).trim() } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { - ext.prefix = { "${meta.id}_sorted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria-mode TRUE' - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { - ext.prefix = { "${meta.id}_filtered" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_RENAMESAMPLEINVCF_MT' { - ext.prefix = { "${meta.id}_renamed" } - } -} - -// -// ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT -// - -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.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.prefix = { "${meta.id}.sorted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.args = { [ - "--VALIDATION_STRINGENCY LENIENT", - "--RGLB lib", - "--RGPL ${params.platform}", - "--RGPU barcode", - "--RGSM ${meta.id}" - ].join(' ' ).trim() } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { - ext.prefix = { "${meta.id}_sorted_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria-mode TRUE' - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:HAPLOCHECK_MT' { - ext.prefix = { "${meta.id}_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { - ext.prefix = { "${meta.id}_filtered_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_RENAMESAMPLEINVCF_MT' { - ext.prefix = { "${meta.id}_renamed" } - } -} - -// -// Liftover -// -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" } - } -} - -// -// ANALYSE_MT:MERGE_ANNOTATE_MT -// - -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" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_VARIANTFILTRATION_MT' { - ext.prefix = { "${meta.id}_filt" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - path: { "${params.outdir}/gatk4" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT2' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_MT' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT3' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { - ext.args = [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', - '--distance 0', - '--buffer_size 20000', - '--format vcf --fork 4 --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', - '--uniprot' - ].join(' ') - publishDir = [ - path: { "${params.outdir}/mt_annotation_vep" }, - mode: params.publish_dir_mode - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { - ext.prefix = { "${meta.id}_mito_ann" } - publishDir = [ - path: { "${params.outdir}/mt_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { - ext.prefix = { "${meta.id}_mito_ann" } - } - -} - -// -// SENTIEON_TNSCOPE_MT_CALL -// - -process { - withName: '.*SENTIEON_TNSCOPE' { - ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } - ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " - ext.when = params.variant_caller.equals("sentieon") - } -} diff --git a/conf/modules/align.config b/conf/modules/align.config new file mode 100644 index 00000000..2812ef7f --- /dev/null +++ b/conf/modules/align.config @@ -0,0 +1,12 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config new file mode 100644 index 00000000..fdcf5a0e --- /dev/null +++ b/conf/modules/align_and_call_MT.config @@ -0,0 +1,130 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// ANALYSE_MT:ALIGN_AND_CALL_MT +// + +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.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.prefix = { "${meta.id}.sorted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.prefix = { "${meta.id}_merged" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.args = { [ + "--VALIDATION_STRINGENCY LENIENT", + "--RGLB lib", + "--RGPL ILLUMINA", + "--RGPU barcode", + "--RGSM ${meta.id}" + ].join(' ' ).trim() } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.prefix = { "${meta.id}_markduplicates" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { + ext.prefix = { "${meta.id}_sorted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { + ext.args = '--mitochondria-mode TRUE' + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { + ext.prefix = { "${meta.id}_filtered" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_RENAMESAMPLEINVCF_MT' { + ext.prefix = { "${meta.id}_renamed" } + } +} + +// +// ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT +// + +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.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.prefix = { "${meta.id}.sorted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.prefix = { "${meta.id}_merged_shifted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.args = { [ + "--VALIDATION_STRINGENCY LENIENT", + "--RGLB lib", + "--RGPL ${params.platform}", + "--RGPU barcode", + "--RGSM ${meta.id}" + ].join(' ' ).trim() } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.prefix = { "${meta.id}_markduplicates_shifted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { + ext.prefix = { "${meta.id}_sorted_shifted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { + ext.args = '--mitochondria-mode TRUE' + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:HAPLOCHECK_MT' { + ext.prefix = { "${meta.id}_shifted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { + ext.prefix = { "${meta.id}_filtered_shifted" } + } + + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_RENAMESAMPLEINVCF_MT' { + ext.prefix = { "${meta.id}_renamed" } + } +} diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config new file mode 100644 index 00000000..81b5e785 --- /dev/null +++ b/conf/modules/align_bwamem2.config @@ -0,0 +1,62 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Bwamem2 alignment options +// + +process { + withName: '.*ALIGN_BWAMEM2:.*' { + ext.when = params.aligner.equals("bwamem2") + publishDir = [ + path: { "${params.outdir}/bwamem2" }, + mode: 'copy', + pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + publishDir = [ + path: { "${params.outdir}/bwamem2" }, + enabled: false, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { + ext.args = '-s --remove-overlaps' + publishDir = [ + path: { "${params.outdir}/bwamem2" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { + ext.prefix = { "${meta.id}_sorted_merged" } + publishDir = [ + enabled: false, + ] + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { + ext.prefix = { "${meta.id}_sorted_md" } + publishDir = [ + path: { "${params.outdir}/bwamem2" }, + 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 new file mode 100644 index 00000000..56b96cac --- /dev/null +++ b/conf/modules/align_sentieon.config @@ -0,0 +1,65 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Sentieon alignment options +// + +process { + withName: '.*ALIGN_SENTIEON:.*' { + ext.when = params.aligner.equals("sentieon") + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { + ext.args = { "-M -K 10000000 -R ${meta.read_group} " } + ext.prefix = { "${meta.id}.sorted" } + publishDir = [ + path: { "${params.outdir}/sentieon_align" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { + publishDir = [ + path: { "${params.outdir}/sentieon_bam_metrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { + publishDir = [ + path: { "${params.outdir}/sentieon_dedup" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { + ext.args = { $params.rmdup ? "--rmdup" : '' } + publishDir = [ + path: { "${params.outdir}/sentieon_dedup" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BQSR' { + publishDir = [ + path: { "${params.outdir}/sentieon_recal" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/analyse_MT.config b/conf/modules/analyse_MT.config new file mode 100644 index 00000000..7c3adbb2 --- /dev/null +++ b/conf/modules/analyse_MT.config @@ -0,0 +1,24 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Liftover +// + +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/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config new file mode 100644 index 00000000..2812ef7f --- /dev/null +++ b/conf/modules/annotate_consequence_pli.config @@ -0,0 +1,12 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config new file mode 100644 index 00000000..7e8caa7f --- /dev/null +++ b/conf/modules/annotate_snvs.config @@ -0,0 +1,101 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// SNV annotation options +// + +process { + withName: '.*ANNOTATE_SNVS:.*' { + ext.when = params.annotate_snv_switch + } + + withName: '.*ANNOTATE_SNVS:VCFANNO' { + ext.prefix = { "${meta.id}_vcfanno" } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { + ext.args = { "--samples ${meta.id} --skip-indels " } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { + ext.args = { "--v14 " } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_view" } + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { + ext.prefix = { "${meta.id}_${intervals.simpleName}" } + ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} + publishDir = [ + enabled: params.save_reference, + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { + ext.prefix = { "${vcf.simpleName}_vep" } + ext.args = [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot --vcf' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + ] + } + + withName: '.*ANNOTATE_SNVS:ZIP_TABIX_VEP' { + ext.prefix = { "${input.simpleName}" } + publishDir = [ + path: { "${params.outdir}/snv_annotation" }, + mode: params.publish_dir_mode, + ] + } +} diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config new file mode 100644 index 00000000..07d43734 --- /dev/null +++ b/conf/modules/annotate_structural_variants.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 +---------------------------------------------------------------------------------------- +*/ + +// +// Structural variant annotation options +// + +process { + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { + ext.when = params.annotate_sv_switch + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { + publishDir = [ + enabled: false, + ] + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { + publishDir = [ + enabled: false, + ] + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_view" } + publishDir = [ + enabled: false, + ] + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { + ext.args = [ + '--dir_cache vep_cache', + '--dir_plugins vep_cache/Plugins', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--appris --biotype --buffer_size 100 --canonical --cache --ccds', + '--compress_output bgzip --distance 5000 --domains', + '--exclude_predicted --force_overwrite --format vcf', + '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', + '--no_progress --no_stats --numbers --per_gene --polyphen p', + '--protein --offline --regulatory --sift p', + '--symbol --tsl --uniprot --vcf' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/sv_annotate" }, + mode: params.publish_dir_mode, + ] + } +} diff --git a/conf/modules/call_cnv_cnvpytor.config b/conf/modules/call_cnv_cnvpytor.config new file mode 100644 index 00000000..cce0b1ee --- /dev/null +++ b/conf/modules/call_cnv_cnvpytor.config @@ -0,0 +1,48 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// cnvpytor calling options +// + +process { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:GENERATE_PYTOR" { + ext.args = { params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:HISTOGRAMS" { + publishDir = [ + enabled: false + ] + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:PARTITIONS" { + publishDir = [ + enabled: false + ] + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:CALL_CNVS" { + publishDir = [ + enabled: false + ] + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:VIEW" { + ext.prefix = { "${meta.id}_cnvpytor" } + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + ] + } +} diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config new file mode 100644 index 00000000..f52412f0 --- /dev/null +++ b/conf/modules/call_repeat_expansions.config @@ -0,0 +1,34 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Repeat expansion calling options +// + +process { + withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { + publishDir = [ + path: { "${params.outdir}/expansionhunter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:STRANGER' { + publishDir = [ + path: { "${params.outdir}/stranger" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config new file mode 100644 index 00000000..2812ef7f --- /dev/null +++ b/conf/modules/call_snv.config @@ -0,0 +1,12 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config new file mode 100644 index 00000000..5825469c --- /dev/null +++ b/conf/modules/call_snv_deepvariant.config @@ -0,0 +1,65 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// SNV calling options - deepvariant +// + +process { + + withName: '.*CALL_SNV_DEEPVARIANT:.*' { + ext.when = params.variant_caller.equals("deepvariant") + } + + withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { + ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } + ext.prefix = { "${meta.id}_deepvar" } + publishDir = [ + path: { "${params.outdir}/deepvariant" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV_DEEPVARIANT:GLNEXUS' { + ext.args = '--config DeepVariant_unfiltered' + publishDir = [ + enabled: false + ] + } + + withName: '.*CALL_SNV_DEEPVARIANT:SPLIT_MULTIALLELICS_GL' { + ext.args = '--output-type z --multiallelics -both' + publishDir = [ + enabled: false + ] + } + + withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/glnexus" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { + publishDir = [ + path: { "${params.outdir}/glnexus" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config new file mode 100644 index 00000000..5ad82181 --- /dev/null +++ b/conf/modules/call_snv_sentieon.config @@ -0,0 +1,90 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Sentieon SNV calling options +// + +process { + withName: '.*CALL_SNV_SENTIEON:.*' { + ext.when = params.variant_caller.equals("sentieon") + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { + ext.prefix = { "${meta.id}_dnascope" } + ext.args2 = { [ + params.variant_type ? "--var_type ${params.variant_type}" : '', + params.pcrfree ? "--pcr_indel_model NONE" : '' + ].join(" ") } + publishDir = [ + path: { "${params.outdir}/sentieon_dnascope" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { + ext.prefix = { "${meta.id}_dnamodelapply" } + publishDir = [ + path: { "${params.outdir}/sentieon_dnamodelapply" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { + ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" + ext.prefix = { "${meta.id}_mlfiltered_0.95" } + publishDir = [ + path: { "${params.outdir}/sentieon_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { + ext.args = "-i FILTER='\"PASS\"' -m x -Oz" + ext.prefix = { "${meta.id}_passed" } + publishDir = [ + path: { "${params.outdir}/sentieon_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + publishDir = [ + enabled: false + ] + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/sentieon_normvcf" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { + publishDir = [ + path: { "${params.outdir}/sentieon_normvcf" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config new file mode 100644 index 00000000..d59ebb9d --- /dev/null +++ b/conf/modules/call_structural_variants.config @@ -0,0 +1,26 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Structural variant calling options +// + +process { + withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { + ext.args = '--pass_only --same_order' + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + ] + } +} diff --git a/conf/modules/call_sv_manta.config b/conf/modules/call_sv_manta.config new file mode 100644 index 00000000..57cc3440 --- /dev/null +++ b/conf/modules/call_sv_manta.config @@ -0,0 +1,27 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Structural variant calling options - Manta +// + +process { + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA' { + ext.prefix = { "${meta.id}_manta" } + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} diff --git a/conf/modules/call_sv_tiddit.config b/conf/modules/call_sv_tiddit.config new file mode 100644 index 00000000..8e316156 --- /dev/null +++ b/conf/modules/call_sv_tiddit.config @@ -0,0 +1,36 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Structural variant calling options -tiddit +// + +process { + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV' { + ext.args = '-p 6' + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + ] + } + + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:SVDB_MERGE_TIDDIT' { + ext.args = '--notag --pass_only' + ext.prefix = { "${meta.id}_tiddit" } + publishDir = [ + path: { "${params.outdir}/sv_caller" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} diff --git a/conf/modules/check_input.config b/conf/modules/check_input.config new file mode 100644 index 00000000..2812ef7f --- /dev/null +++ b/conf/modules/check_input.config @@ -0,0 +1,12 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config new file mode 100644 index 00000000..47e1f5bf --- /dev/null +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -0,0 +1,39 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Extract mitochondrial reads from bam and save them in fastq files +// + +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"} + ext.args = [ + "-L ${params.mt_contig_name}", + "--read-filter MateOnSameContigOrNoMappedMateReadFilter", + "--read-filter MateUnmappedAndUnmappedReadFilter" + ].join(" ").trim() + } + + withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { + ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' + } + + withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT' + } +} diff --git a/conf/modules/gens.config b/conf/modules/gens.config new file mode 100644 index 00000000..f1a8ec8f --- /dev/null +++ b/conf/modules/gens.config @@ -0,0 +1,30 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Gens options +// + +process { + withName: '.*GENS:COLLECTREADCOUNTS' { + ext.args = '--interval-merging-rule OVERLAPPING_ONLY' + } + + withName: GENS { + publishDir = [ + path: { "${params.outdir}/gens" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config new file mode 100644 index 00000000..d574fcaa --- /dev/null +++ b/conf/modules/merge_annotate_MT.config @@ -0,0 +1,120 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Mitochondrial annotation options +// + +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" } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_VARIANTFILTRATION_MT' { + ext.prefix = { "${meta.id}_filt" } + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/gatk4" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT2' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_MT' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT3' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { + ext.args = [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--distance 0', + '--buffer_size 20000', + '--format vcf --fork 4 --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', + '--uniprot' + ].join(' ') + publishDir = [ + path: { "${params.outdir}/mt_annotation_vep" }, + mode: params.publish_dir_mode + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { + ext.prefix = { "${meta.id}_mito_ann" } + publishDir = [ + path: { "${params.outdir}/mt_annotation" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { + ext.prefix = { "${meta.id}_mito_ann" } + } + +} diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config new file mode 100644 index 00000000..8be6d38d --- /dev/null +++ b/conf/modules/prepare_references.config @@ -0,0 +1,198 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Genome and reference preparation options +// + +process { + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { + ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" + ] + } + + 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"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" + ] + } + + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { + ext.when = {!params.bwa_index && params.aligner == "sentieon"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference + ] + } + + 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"} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference + ] + } + + withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { + ext.when = {!params.bwa_index && !(params.aligner == "sentieon")} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: 'copy', + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference + ] + } + + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { + ext.when = {!params.fasta_fai} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*fai" + ] + } + + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { + ext.when = {!params.mt_fai_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*fai" + ] + } + + withName: '.*PREPARE_REFERENCES:GATK_SD' { + ext.when = {!params.sequence_dictionary} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*dict" + ] + } + + withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { + ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*dict" + ] + } + + withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { + publishDir = [ + enabled: false, + ] + } + + withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { + ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*tbi" + ] + } + + withName: '.*PREPARE_REFERENCES:TABIX_GNOMAD_AF' { + ext.when = {params.gnomad_af && !params.gnomad_af_idx} + ext.args = '-s 1 -b 2 -e 2' + publishDir = [ + path: { "${params.outdir}/references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: params.save_reference, + pattern: "*tbi" + ] + } + + withName: '.*PREPARE_REFERENCES:TABIX_PT' { + ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*PREPARE_REFERENCES:TABIX_PBT' { + ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*PREPARE_REFERENCES:GATK_BILT' { + ext.when = { params.target_bed } + ext.prefix = { "${meta.id}_target" } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*PREPARE_REFERENCES:GATK_ILT' { + ext.when = { params.target_bed } + ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' + publishDir = [ + enabled: false + ] + } + + withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { + ext.when = { params.target_bed } + ext.prefix = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*PREPARE_REFERENCES:UNTAR_VEP_CACHE' { + ext.when = { params.vep_cache.endsWith("tar.gz") } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/prepare_vcf.config b/conf/modules/prepare_vcf.config new file mode 100644 index 00000000..56856837 --- /dev/null +++ b/conf/modules/prepare_vcf.config @@ -0,0 +1,55 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Normalize and index vcf files +// + +process { + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:CHECK_INPUT_VCF' { + ext.when = {params.gnomad_vcf} + publishDir = [ + enabled: false, + ] + } + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:SPLIT_MULTIALLELICS_PV' { + ext.when = {params.gnomad_vcf} + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + publishDir = [ + enabled: false + ] + } + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:REMOVE_DUPLICATES_PV' { + ext.when = {params.gnomad_vcf} + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*PREPARE_REFERENCES:CHECK_VCF:TABIX_PV' { + ext.when = {params.gnomad_vcf} + publishDir = [ + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config new file mode 100644 index 00000000..38eca259 --- /dev/null +++ b/conf/modules/qc_bam.config @@ -0,0 +1,106 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Bam QC options +// + +process { + withName: '.*QC_BAM:PICARD_COLLECTMULTIPLEMETRICS' { + publishDir = [ + path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { + publishDir = [ + path: { "${params.outdir}/bamqc/collecthsmetrics" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:QUALIMAP_BAMQC' { + publishDir = [ + path: { "${params.outdir}/bamqc_qualimap" }, + mode: params.publish_dir_mode, + ] + } + + withName: '.*QC_BAM:TIDDIT_COV' { + ext.args = '-z 500 -w' + publishDir = [ + path: { "${params.outdir}/tiddit_coverage" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:UCSC_WIGTOBIGWIG' { + ext.args = '-clip' + publishDir = [ + path: { "${params.outdir}/tiddit_coverage" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:MOSDEPTH' { + ext.args = '--d4' + publishDir = [ + path: { "${params.outdir}/mosdepth" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { + ext.when = params.aligner.equals("bwamem2") + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { + ext.when = params.aligner.equals("bwamem2") + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { + ext.when = params.aligner.equals("sentieon") + ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { + ext.when = params.aligner.equals("sentieon") + ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } + publishDir = [ + path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config new file mode 100644 index 00000000..3b786955 --- /dev/null +++ b/conf/modules/rank_variants.config @@ -0,0 +1,72 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Score and rank structural variants +// + +process { + withName: '.*RANK_VARIANTS_SV:.*' { + ext.when = params.annotate_sv_switch + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + } + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + ext.args = " --rank_results " + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + +// +// Score and rank SNVs +// + +process { + withName: '.*RANK_VARIANTS_SNV:.*' { + ext.when = params.annotate_snv_switch + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + } + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.args = " --whole_gene " + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { + ext.args = " --rank_results " + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { + publishDir = [ + path: { "${params.outdir}/genmod" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config new file mode 100644 index 00000000..04cd8447 --- /dev/null +++ b/conf/modules/raredisease.config @@ -0,0 +1,94 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// General configuration options +// + +process { + publishDir = [ + path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + + withName: '.*CHECK_INPUT:SAMPLESHEET_CHECK' { + publishDir = [ + path: { "${params.outdir}/pipeline_info" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: 'CUSTOM_DUMPSOFTWAREVERSIONS' { + publishDir = [ + path: { "${params.outdir}/pipeline_info" }, + mode: params.publish_dir_mode, + pattern: '*_versions.yml' + ] + } +} + +// +// Read QC options +// + +process { + withName: '.*RAREDISEASE:FASTQC' { + ext.args = '--quiet' + publishDir = [ + path: { "${params.outdir}/reports/fastqc/${meta.id}" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + +// +// Remove mitochondrial variants +// + +process { + withName: '.*RAREDISEASE:GATK4_SELECTVARIANTS' { + ext.args = "--exclude-intervals ${params.mt_contig_name}" + ext.prefix = { "${meta.id}_nomito" } + ext.when = { params.annotate_snv_switch } + publishDir = [ + path: { "${params.outdir}/glnexus/no_mito" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + +// +// Merge mitochondrial and genomic vcfs +// + +process { + withName: '.*RAREDISEASE:BCFTOOLS_CONCAT' { + ext.prefix = { "${meta.id}_mito_genome_merged" } + ext.args = " -a " + } +} + +// +// SENTIEON_TNSCOPE_MT_CALL +// + +process { + withName: '.*SENTIEON_TNSCOPE' { + ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } + ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " + ext.when = params.variant_caller.equals("sentieon") + } +} diff --git a/conf/modules/scatter_genome.config b/conf/modules/scatter_genome.config new file mode 100644 index 00000000..cb804163 --- /dev/null +++ b/conf/modules/scatter_genome.config @@ -0,0 +1,34 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Create bed and interval files for scatter operations +// + +process { + withName: '.*SCATTER_GENOME:BUILD_BED' { + ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} + } + + withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { + ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } + ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} + ext.prefix = { "${meta.id}_genome_intervals" } + publishDir = [ + enabled: params.save_reference, + path: { "${params.outdir}/processed_references" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/nextflow.config b/nextflow.config index 879f91c7..a1ed8187 100644 --- a/nextflow.config +++ b/nextflow.config @@ -243,8 +243,34 @@ manifest { doi = '' } -// Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +// Load DSL2 module options from config files, where each file contains the options for modules used in the eponymous subworkflow. + +includeConfig 'conf/modules/align_and_call_MT.config' +includeConfig 'conf/modules/align_bwamem2.config' +includeConfig 'conf/modules/align.config' +includeConfig 'conf/modules/align_sentieon.config' +includeConfig 'conf/modules/analyse_MT.config' +includeConfig 'conf/modules/annotate_consequence_pli.config' +includeConfig 'conf/modules/annotate_snvs.config' +includeConfig 'conf/modules/annotate_structural_variants.config' +includeConfig 'conf/modules/call_cnv_cnvpytor.config' +includeConfig 'conf/modules/call_repeat_expansions.config' +includeConfig 'conf/modules/call_snv.config' +includeConfig 'conf/modules/call_snv_deepvariant.config' +includeConfig 'conf/modules/call_snv_sentieon.config' +includeConfig 'conf/modules/call_structural_variants.config' +includeConfig 'conf/modules/call_sv_manta.config' +includeConfig 'conf/modules/call_sv_tiddit.config' +includeConfig 'conf/modules/check_input.config' +includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' +includeConfig 'conf/modules/gens.config' +includeConfig 'conf/modules/merge_annotate_MT.config' +includeConfig 'conf/modules/prepare_references.config' +includeConfig 'conf/modules/prepare_vcf.config' +includeConfig 'conf/modules/qc_bam.config' +includeConfig 'conf/modules/rank_variants.config' +includeConfig 'conf/modules/raredisease.config' +includeConfig 'conf/modules/scatter_genome.config' // Function to ensure that resource requirements don't go beyond // a maximum limit From 8fe4f1a700bd99ac8e4c7d7291939eee3d06804d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:39:12 +0100 Subject: [PATCH 0999/1921] update lint config --- .nf-core.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.nf-core.yml b/.nf-core.yml index a6868bcb..a22ef6f7 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,4 +1,6 @@ lint: + files_exist: + - conf/modules.config files_unchanged: - .github/CONTRIBUTING.md - .github/ISSUE_TEMPLATE/bug_report.yml From 4ebda90efbf6748096cd8e979a308f2d53d210b3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Feb 2023 11:07:55 +0100 Subject: [PATCH 1000/1921] resolve merge conflict --- conf/modules/qc_bam.config | 2 -- modules/local/sentieon/wgsmetricsalgo.nf | 3 +++ subworkflows/local/qc_bam.nf | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 38eca259..cb1af0ea 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -86,7 +86,6 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y,MT" : "--interval chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX,chrY,chrM" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, mode: params.publish_dir_mode, @@ -96,7 +95,6 @@ process { withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { ext.when = params.aligner.equals("sentieon") - ext.args = { (params.genome == "GRCh37") ? "--interval Y" : "--interval chrY" } publishDir = [ path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, mode: params.publish_dir_mode, diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index bce76109..555131fe 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -9,6 +9,7 @@ process SENTIEON_WGSMETRICSALGO { tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) tuple val(meta2), path(fai) + path intervals_list output: tuple val(meta), path('*wgs_metrics.txt'), emit: wgs_metrics @@ -21,6 +22,7 @@ process SENTIEON_WGSMETRICSALGO { def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals_list ? "--interval ${intervals_list}" : "" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" @@ -32,6 +34,7 @@ process SENTIEON_WGSMETRICSALGO { -t $task.cpus \\ -r $fasta \\ $input \\ + $interval \\ $args \\ --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index a003a0e3..4d4e26d6 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -54,8 +54,8 @@ workflow QC_BAM { PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) - SENTIEON_WGSMETRICS ( bam_bai, fasta, fai) - SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai) + SENTIEON_WGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) + SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai, 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) From 46a7693ce03c670fbf308f8dd206bbea48a7165d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Feb 2023 11:28:20 +0100 Subject: [PATCH 1001/1921] fix spaces --- modules/local/sentieon/wgsmetricsalgo.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 555131fe..2165741c 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -19,9 +19,9 @@ process SENTIEON_WGSMETRICSALGO { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def input = bam.sort().collect{"-i $it"}.join(' ') + def prefix = task.ext.prefix ?: "${meta.id}" def interval = intervals_list ? "--interval ${intervals_list}" : "" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then From 8356740832451283989bb0834708b68e23525f8b Mon Sep 17 00:00:00 2001 From: peterpru Date: Thu, 23 Feb 2023 11:57:28 +0100 Subject: [PATCH 1002/1921] integrate review comments --- conf/modules.config | 2 +- modules.json | 3 ++- workflows/raredisease.nf | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 50e68159..b726836c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -604,7 +604,7 @@ process { ext.args = { (params.genome == 'GRCh37') ? '--genome 37' : '--genome 38' } - ext.prefix = { "${case_info.id}" } + ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/smncopynumbercaller" }, mode: params.publish_dir_mode, diff --git a/modules.json b/modules.json index 2b5a8258..b000fc5c 100644 --- a/modules.json +++ b/modules.json @@ -292,7 +292,8 @@ }, "smncopynumbercaller": { "branch": "master", - "git_sha": "e70433b04bef836b22bbed5a1e6e4e95aeec09fe" + "git_sha": "e70433b04bef836b22bbed5a1e6e4e95aeec09fe", + "installed_by": ["modules"] }, "stranger": { "branch": "master", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e624999a..0fa501e1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -297,12 +297,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) // STEP 1.7: SMNCOPYNUMBERCALLER - ALIGN.out.bam_bai + ch_mapped.bam_bai .collect{it[1]} .toList() .set { ch_bam_list } - ALIGN.out.bam_bai + ch_mapped.bam_bai .collect{it[2]} .toList() .set { ch_bai_list } From 64c7f60604cfdc53048606ba9c560921afd107dd Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 23 Feb 2023 17:28:58 +0100 Subject: [PATCH 1003/1921] removes unused process from modules config --- conf/modules/align_and_call_MT.config | 7 ------- 1 file changed, 7 deletions(-) diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config index fdcf5a0e..c4915c11 100644 --- a/conf/modules/align_and_call_MT.config +++ b/conf/modules/align_and_call_MT.config @@ -62,10 +62,6 @@ process { withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { ext.prefix = { "${meta.id}_filtered" } } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_RENAMESAMPLEINVCF_MT' { - ext.prefix = { "${meta.id}_renamed" } - } } // @@ -124,7 +120,4 @@ process { ext.prefix = { "${meta.id}_filtered_shifted" } } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_RENAMESAMPLEINVCF_MT' { - ext.prefix = { "${meta.id}_renamed" } - } } From b875d5fcd47d612c250a1d182b9dd1f303b720e8 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 23 Feb 2023 17:46:09 +0100 Subject: [PATCH 1004/1921] removed one more unused process from config --- conf/modules/annotate_snvs.config | 8 -------- 1 file changed, 8 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 7e8caa7f..9db85f23 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -90,12 +90,4 @@ process { mode: params.publish_dir_mode, ] } - - withName: '.*ANNOTATE_SNVS:ZIP_TABIX_VEP' { - ext.prefix = { "${input.simpleName}" } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - ] - } } From 07f55e898c631e5d649688ec8d57177a85183ad6 Mon Sep 17 00:00:00 2001 From: Peter Pruisscher Date: Mon, 27 Feb 2023 12:31:06 +0100 Subject: [PATCH 1005/1921] update smncopynumbercaller --- modules.json | 2 +- modules/nf-core/smncopynumbercaller/main.nf | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index b000fc5c..bc7ff072 100644 --- a/modules.json +++ b/modules.json @@ -292,7 +292,7 @@ }, "smncopynumbercaller": { "branch": "master", - "git_sha": "e70433b04bef836b22bbed5a1e6e4e95aeec09fe", + "git_sha": "c5620578276a1927f5b4afbc2b4266c9cf7b43ca", "installed_by": ["modules"] }, "stranger": { diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 27b5ae21..e746f9fc 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -19,18 +19,19 @@ process SMNCOPYNUMBERCALLER { task.ext.when == null || task.ext.when script: - manifest_text = bam.join("\n") def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def VERSION = "1.1.2" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. """ - echo "$manifest_text" >manifest.txt + echo $bam | tr ' ' ' + ' > manifest.txt smn_caller.py \\ $args \\ --manifest manifest.txt \\ --prefix $prefix \\ --outDir "out" \\ --threads $task.cpus + cat <<-END_VERSIONS > versions.yml "${task.process}": SMNCopyNumberCaller: $VERSION @@ -44,6 +45,7 @@ process SMNCOPYNUMBERCALLER { mkdir out touch out/${prefix}.tsv touch out/${prefix}.json + cat <<-END_VERSIONS > versions.yml "${task.process}": SMNCopyNumberCaller: $VERSION From 675ebce2c336acaaee9edac8d0e729b97f741e86 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 28 Feb 2023 10:17:03 +0100 Subject: [PATCH 1006/1921] merge expansionhunter calls --- CITATIONS.md | 3 + conf/modules/call_repeat_expansions.config | 67 +++++++++++++++++- modules.json | 10 +++ modules/nf-core/bcftools/reheader/main.nf | 68 +++++++++++++++++++ modules/nf-core/bcftools/reheader/meta.yml | 52 ++++++++++++++ .../nf-core/picard/renamesampleinvcf/main.nf | 56 +++++++++++++++ .../nf-core/picard/renamesampleinvcf/meta.yml | 44 ++++++++++++ subworkflows/local/call_repeat_expansions.nf | 66 ++++++++++++++++-- subworkflows/local/check_input.nf | 7 +- workflows/raredisease.nf | 4 +- 10 files changed, 366 insertions(+), 11 deletions(-) create mode 100644 modules/nf-core/bcftools/reheader/main.nf create mode 100644 modules/nf-core/bcftools/reheader/meta.yml create mode 100644 modules/nf-core/picard/renamesampleinvcf/main.nf create mode 100644 modules/nf-core/picard/renamesampleinvcf/meta.yml diff --git a/CITATIONS.md b/CITATIONS.md index a8407622..188639d8 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -19,6 +19,9 @@ - [SMNCopyNumberCaller](https://www.nature.com/articles/s41436-020-0754-0) > Chen X, Sanchis-Juan A, French CE, Connel AJ, Delon I, Kingsbury Z, Chawla A, Halpern AL, Taft RJ, NIHR BioResource, Bentley DR, Butchbach MER, Raymond FL, Eberle MA. Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genet Med. February 2020:1-9. doi:10.1038/s41436-020-0754-0 +- [ExpansionHunter](https://academic.oup.com/bioinformatics/article/doi/10.1093/bioinformatics/btz431/5499079) + > Egor Dolzhenko, Viraj Deshpande, Felix Schlesinger, Peter Krusche, Roman Petrovski, Sai Chen, Dorothea Emig-Agius, Andrew Gross, Giuseppe Narzisi, Brett Bowman, Konrad Scheffler, Joke J F A van Vugt, Courtney French, Alba Sanchis-Juan, Kristina Ibáñez, Arianna Tucci, Bryan R Lajoie, Jan H Veldink, F Lucy Raymond, Ryan J Taft, David R Bentley, Michael A Eberle, ExpansionHunter: a sequence-graph-based tool to analyze variation in short tandem repeat regions, Bioinformatics, Volume 35, Issue 22, November 2019, Pages 4754–4756, https://doi.org/10.1093/bioinformatics/btz431 + ## Software packaging/containerisation tools - [Anaconda](https://anaconda.com) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index f52412f0..6c4b0c33 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -16,17 +16,80 @@ // process { + withName: '.*CALL_REPEAT_EXPANSIONS:.*' { + ext.when = { params.analysis_type != "wes" } + } + withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { publishDir = [ - path: { "${params.outdir}/expansionhunter" }, + enabled: false, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { + ext.prefix = { "${meta.id}_reheader" } + publishDir = [ + enabled: false, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:RENAMESAMPLE_EXP' { + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> + filename.equals('versions.yml') ? null : + filename.contains('_renam.vcf.gz') ? "${meta.id}_repeat_expansion.vcf.gz" : + filename + }, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:TABIX_EXP_RENAME' { + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> + filename.equals('versions.yml') ? null : + filename.contains('_renam.vcf.gz.tbi') ? "${meta.id}_repeat_expansion.vcf.gz.tbi" : + filename + }, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:SPLIT_MULTIALLELICS_EXP' { + ext.prefix = { "${meta.id}_exp" } + publishDir = [ + enabled: false, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:SVDB_MERGE_REPEATS' { + ext.args = {"--notag"} + publishDir = [ + enabled: false ] } withName: '.*CALL_REPEAT_EXPANSIONS:STRANGER' { publishDir = [ - path: { "${params.outdir}/stranger" }, + enabled: false + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:COMPRESS_STRANGER' { + ext.prefix = { "${meta.id}_repeat_expansion" } + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:INDEX_STRANGER' { + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] diff --git a/modules.json b/modules.json index bc7ff072..c7d7d205 100644 --- a/modules.json +++ b/modules.json @@ -25,6 +25,11 @@ "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, + "bcftools/reheader": { + "branch": "master", + "git_sha": "bd4b60c7f9358c7146ac198fd0c4ae6355ddd086", + "installed_by": ["modules"] + }, "bcftools/roh": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", @@ -250,6 +255,11 @@ "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, + "picard/renamesampleinvcf": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, "picard/sortvcf": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", diff --git a/modules/nf-core/bcftools/reheader/main.nf b/modules/nf-core/bcftools/reheader/main.nf new file mode 100644 index 00000000..57634c07 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/main.nf @@ -0,0 +1,68 @@ +process BCFTOOLS_REHEADER { + 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(vcf), path(header) + path fai + + 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 update_sequences = fai ? "-f $fai" : "" + def new_header = header ? "-h $header" : "" + + def args2 = task.ext.args2 ?: '--output-type z' + def extension = args2.contains("--output-type b") || args2.contains("-Ob") ? "bcf.gz" : + args2.contains("--output-type u") || args2.contains("-Ou") ? "bcf" : + args2.contains("--output-type z") || args2.contains("-Oz") ? "vcf.gz" : + args2.contains("--output-type v") || args2.contains("-Ov") ? "vcf" : + "vcf" + """ + bcftools \\ + reheader \\ + $update_sequences \\ + $new_header \\ + $args \\ + --threads $task.cpus \\ + $vcf \\ + | bcftools view \\ + $args2 \\ + --output ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def args2 = task.ext.args2 ?: '--output-type z' + def prefix = task.ext.prefix ?: "${meta.id}" + + def extension = args2.contains("--output-type b") || args2.contains("-Ob") ? "bcf.gz" : + args2.contains("--output-type u") || args2.contains("-Ou") ? "bcf" : + args2.contains("--output-type z") || args2.contains("-Oz") ? "vcf.gz" : + args2.contains("--output-type v") || args2.contains("-Ov") ? "vcf" : + "vcf" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/reheader/meta.yml b/modules/nf-core/bcftools/reheader/meta.yml new file mode 100644 index 00000000..44d75fdf --- /dev/null +++ b/modules/nf-core/bcftools/reheader/meta.yml @@ -0,0 +1,52 @@ +name: bcftools_reheader +description: Reheader a VCF file +keywords: + - reheader + - vcf + - update header +tools: + - reheader: + description: | + Modify header of VCF/BCF files, change sample names. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://samtools.github.io/bcftools/bcftools.html#reheader + doi: 10.1093/gigascience/giab008 + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF/BCF file + pattern: "*.{vcf.gz,vcf,bcf}" + - header: + type: file + description: New header to add to the VCF + pattern: "*.{header.txt}" + - fai: + type: file + description: Fasta index to update header sequences with + pattern: "*.{fai}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: VCF with updated header, bgzipped per default + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + +authors: + - "@bjohnnyd" + - "@jemten" diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf new file mode 100644 index 00000000..5fadbd40 --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/main.nf @@ -0,0 +1,56 @@ + +process PICARD_RENAMESAMPLEINVCF { + tag "$meta.id" + label 'process_single' + + conda "bioconda::picard=2.27.4" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : + 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.vcf.gz"), emit: vcf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def extended_args = args.contains("--NEW_SAMPLE_NAME") ? $args : "${args} --NEW_SAMPLE_NAME ${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard RenameSampleInVcf] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + + """ + picard \\ + RenameSampleInVcf \\ + -Xmx${avail_mem}g \\ + --INPUT $vcf \\ + --OUTPUT ${prefix}_renam.vcf.gz \\ + $extended_args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard RenameSampleInVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_renam.vcf.gz + cat <<-END_VERSIONS > versions.yml + "${task.process}": + picard: \$(picard RenameSampleInVcf --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) + END_VERSIONS + """ +} diff --git a/modules/nf-core/picard/renamesampleinvcf/meta.yml b/modules/nf-core/picard/renamesampleinvcf/meta.yml new file mode 100644 index 00000000..8f3ed6b4 --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/meta.yml @@ -0,0 +1,44 @@ +name: "picard_renamesampleinvcf" +description: changes name of sample in the vcf file +keywords: + - picard + - picard/renamesampleinvcf +tools: + - "picard": + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ + tool_dev_url: "https://github.com/broadinstitute/picard" + doi: "" + licence: "['MIT']" + +input: + - 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" + - vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + +authors: + - "@Lucpen" diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 845071a2..8e501891 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -2,26 +2,78 @@ // Run ExpansionHunter and Stranger // -include { EXPANSIONHUNTER } from '../../modules/nf-core/expansionhunter/main' -include { STRANGER } from '../../modules/nf-core/stranger/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_EXP } from '../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_REHEADER as BCFTOOLS_REHEADER_EXP } from '../../modules/nf-core/bcftools/reheader/main' +include { BCFTOOLS_VIEW as COMPRESS_STRANGER } from '../../modules/nf-core/bcftools/view/main' +include { EXPANSIONHUNTER } from '../../modules/nf-core/expansionhunter/main' +include { PICARD_RENAMESAMPLEINVCF as RENAMESAMPLE_EXP } from '../../modules/nf-core/picard/renamesampleinvcf/main' +include { STRANGER } from '../../modules/nf-core/stranger/main' +include { SVDB_MERGE as SVDB_MERGE_REPEATS } from '../../modules/nf-core/svdb/merge/main' +include { TABIX_BGZIPTABIX as BGZIPTABIX_EXP } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as INDEX_STRANGER } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_EXP_RENAME } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_REPEAT_EXPANSIONS { take: bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // channel: /path/to/genome.fasta variant_catalog // channel: /path/to/variant_catalog.json + case_info // channel: [ case_id ] + fasta // channel: /path/to/genome.fasta + fai // channel: /path/to/genome.fasta.fai main: ch_versions = Channel.empty() - EXPANSIONHUNTER (bam, fasta, variant_catalog) + EXPANSIONHUNTER ( + bam, + fasta, + variant_catalog + ) + + // Fix header and rename sample + BCFTOOLS_REHEADER_EXP ( + EXPANSIONHUNTER.out.vcf.map{ meta, vcf -> [ meta, vcf, [] ]}, + fai + ) + RENAMESAMPLE_EXP ( BCFTOOLS_REHEADER_EXP.out.vcf ) + TABIX_EXP_RENAME ( RENAMESAMPLE_EXP.out.vcf ) + + // Split multi allelelic + SPLIT_MULTIALLELICS_EXP ( + RENAMESAMPLE_EXP.out.vcf.join(TABIX_EXP_RENAME.out.tbi), + fasta + ) + //TABIX_EXP_SPLIT ( SPLIT_MULTIALLELICS_EXP.out.vcf ) + + // Merge indiviual repeat expansions + SPLIT_MULTIALLELICS_EXP.out.vcf + .collect{it[1]} + .toList() + .set {ch_exp_vcfs} + case_info + .combine(ch_exp_vcfs) + .set {ch_svdb_merge_input} + SVDB_MERGE_REPEATS ( ch_svdb_merge_input, [] ) - STRANGER (EXPANSIONHUNTER.out.vcf, variant_catalog) + // Annotate, compress and index + STRANGER ( SVDB_MERGE_REPEATS.out.vcf, variant_catalog ) + COMPRESS_STRANGER ( + STRANGER.out.vcf.map{ meta, vcf -> [meta, vcf, [] ]}, + [], [], [] + ) + INDEX_STRANGER ( COMPRESS_STRANGER.out.vcf ) ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_EXP.out.versions.first()) + ch_versions = ch_versions.mix(RENAMESAMPLE_EXP.out.versions.first() ) + ch_versions = ch_versions.mix(TABIX_EXP_RENAME.out.versions.first()) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_EXP.out.versions.first()) + ch_versions = ch_versions.mix(SVDB_MERGE_REPEATS.out.versions.first()) ch_versions = ch_versions.mix(STRANGER.out.versions.first()) + ch_versions = ch_versions.mix(COMPRESS_STRANGER.out.versions.first()) + ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) emit: - vcf = STRANGER.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] - versions = ch_versions // channel: [ versions.yml ] + vcf = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi) // channel: [ val(meta), path(*.vcf.gz), path(*.vcf.gz.tbi) ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 5856870a..fa64498a 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -30,7 +30,12 @@ workflow CHECK_INPUT { def create_fastq_channel(LinkedHashMap row) { // create meta map def meta = [:] - meta.id = row.sample + meta.case_id = row.case_id + meta.gender = row.gender + meta.id = row.sample + meta.maternal = row.maternal_id + meta.paternal = row.paternal_id + meta.phenotype = row.phenotype meta.single_end = row.single_end.toBoolean() //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c198c935..997c7e0c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -295,8 +295,10 @@ workflow RAREDISEASE { // EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, + ch_variant_catalog, + CHECK_INPUT.out.case_info, ch_genome_fasta_no_meta, - ch_variant_catalog + ch_genome_fai_no_meta ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) From ecd1c270aa03e3f58f837c879675062c97f909c4 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 28 Feb 2023 10:40:26 +0100 Subject: [PATCH 1007/1921] prettier on CITATIONS.md --- CITATIONS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CITATIONS.md b/CITATIONS.md index 188639d8..4d6298e5 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -17,6 +17,7 @@ > 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. - [SMNCopyNumberCaller](https://www.nature.com/articles/s41436-020-0754-0) + > Chen X, Sanchis-Juan A, French CE, Connel AJ, Delon I, Kingsbury Z, Chawla A, Halpern AL, Taft RJ, NIHR BioResource, Bentley DR, Butchbach MER, Raymond FL, Eberle MA. Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genet Med. February 2020:1-9. doi:10.1038/s41436-020-0754-0 - [ExpansionHunter](https://academic.oup.com/bioinformatics/article/doi/10.1093/bioinformatics/btz431/5499079) From 29d92f5c882dbf67260f5555f97acf10769d0911 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 28 Feb 2023 16:34:36 +0100 Subject: [PATCH 1008/1921] removes line that was commented out --- subworkflows/local/call_repeat_expansions.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 8e501891..4c1569b8 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -43,7 +43,6 @@ workflow CALL_REPEAT_EXPANSIONS { RENAMESAMPLE_EXP.out.vcf.join(TABIX_EXP_RENAME.out.tbi), fasta ) - //TABIX_EXP_SPLIT ( SPLIT_MULTIALLELICS_EXP.out.vcf ) // Merge indiviual repeat expansions SPLIT_MULTIALLELICS_EXP.out.vcf From 5a86e1f0ac0df5b55a9c7050dd694745ce3b708a Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Mar 2023 13:40:13 +0100 Subject: [PATCH 1009/1921] remove deprecated .yaml file and add bamqc to multiqc --- assets/multiqc_config.yaml | 11 ----------- assets/multiqc_config.yml | 4 ++++ workflows/raredisease.nf | 10 +++++++++- 3 files changed, 13 insertions(+), 12 deletions(-) delete mode 100644 assets/multiqc_config.yaml diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml deleted file mode 100644 index 15ff17a9..00000000 --- a/assets/multiqc_config.yaml +++ /dev/null @@ -1,11 +0,0 @@ -report_comment: > - This report has been generated by the nf-core/raredisease - analysis pipeline. For information about how to interpret these results, please see the - documentation. -report_section_order: - software_versions: - order: -1000 - nf-core-raredisease-summary: - order: -1001 - -export_plots: true diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 3f45252a..a0ce1f4d 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,3 +1,7 @@ +custom_logo: "nf-core-raredisease_logo_light.png" +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 analysis pipeline. For information about how to interpret these results, please see the diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 997c7e0c..b48cd4da 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -528,7 +528,15 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - + ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTMULTIPLEMETRICS.out.metrics.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTHSMETRICS.out.metrics.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_BAMQC.out.results.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(MOSDEPTH.out.per_base_d4.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TIDDIT_COV.out.wig.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(UCSC_WIGTOBIGWIG.out.bw.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_cov.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_cov_y.collect().ifEmpty([])) + MULTIQC ( ch_multiqc_files.collect(), ch_multiqc_config.toList(), From 126663cfc737a46a1602ea1627bf221ae67b85e5 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Mar 2023 13:42:44 +0100 Subject: [PATCH 1010/1921] undo last commit --- assets/multiqc_config.yaml | 11 +++++++++++ assets/multiqc_config.yml | 4 ---- workflows/raredisease.nf | 10 +--------- 3 files changed, 12 insertions(+), 13 deletions(-) create mode 100644 assets/multiqc_config.yaml diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml new file mode 100644 index 00000000..15ff17a9 --- /dev/null +++ b/assets/multiqc_config.yaml @@ -0,0 +1,11 @@ +report_comment: > + This report has been generated by the nf-core/raredisease + analysis pipeline. For information about how to interpret these results, please see the + documentation. +report_section_order: + software_versions: + order: -1000 + nf-core-raredisease-summary: + order: -1001 + +export_plots: true diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index a0ce1f4d..3f45252a 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,3 @@ -custom_logo: "nf-core-raredisease_logo_light.png" -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 analysis pipeline. For information about how to interpret these results, please see the diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b48cd4da..997c7e0c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -528,15 +528,7 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTMULTIPLEMETRICS.out.metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTHSMETRICS.out.metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_BAMQC.out.results.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(MOSDEPTH.out.per_base_d4.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TIDDIT_COV.out.wig.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(UCSC_WIGTOBIGWIG.out.bw.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_cov.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_cov_y.collect().ifEmpty([])) - + MULTIQC ( ch_multiqc_files.collect(), ch_multiqc_config.toList(), From 8fcff9fcc301cf3954aa7c9bd36677cc1db47777 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Mar 2023 13:51:02 +0100 Subject: [PATCH 1011/1921] remove deprecated .yaml file and add bamqc to multiqc --- assets/multiqc_config.yaml | 11 ----------- assets/multiqc_config.yml | 4 ++++ workflows/raredisease.nf | 9 +++++++++ 3 files changed, 13 insertions(+), 11 deletions(-) delete mode 100644 assets/multiqc_config.yaml diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml deleted file mode 100644 index 15ff17a9..00000000 --- a/assets/multiqc_config.yaml +++ /dev/null @@ -1,11 +0,0 @@ -report_comment: > - This report has been generated by the nf-core/raredisease - analysis pipeline. For information about how to interpret these results, please see the - documentation. -report_section_order: - software_versions: - order: -1000 - nf-core-raredisease-summary: - order: -1001 - -export_plots: true diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 3f45252a..a0ce1f4d 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,3 +1,7 @@ +custom_logo: "nf-core-raredisease_logo_light.png" +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 analysis pipeline. For information about how to interpret these results, please see the diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 997c7e0c..97d6a1fe 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -528,6 +528,15 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTMULTIPLEMETRICS.out.metrics.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTHSMETRICS.out.metrics.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_BAMQC.out.results.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(MOSDEPTH.out.per_base_d4.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(TIDDIT_COV.out.wig.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(UCSC_WIGTOBIGWIG.out.bw.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_cov.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_cov_y.collect().ifEmpty([])) + MULTIQC ( ch_multiqc_files.collect(), From 443819854ca886c3456787571a6e434a4b4fa8fc Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Mar 2023 14:47:53 +0100 Subject: [PATCH 1012/1921] define subworkflow to access channel --- workflows/raredisease.nf | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 97d6a1fe..66d94506 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -528,14 +528,15 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTMULTIPLEMETRICS.out.metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(PICARD_COLLECTHSMETRICS.out.metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_BAMQC.out.results.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(MOSDEPTH.out.per_base_d4.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(TIDDIT_COV.out.wig.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(UCSC_WIGTOBIGWIG.out.bw.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_cov.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_cov_y.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.results.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.tiddit_wig.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.bigwig.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.bw.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.d4.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov_y.collect().ifEmpty([])) MULTIQC ( From a5cb8f56c68ddc2d2301d9a92fc41b096f322504 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Mar 2023 16:27:13 +0100 Subject: [PATCH 1013/1921] add correct channels to give to multiqc --- workflows/raredisease.nf | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 66d94506..2be32d58 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -530,13 +530,7 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.results.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.tiddit_wig.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.bigwig.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.bw.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.d4.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov_y.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.collect().ifEmpty([])) MULTIQC ( From a8170245dda9064e69b8dc89ba6ef83c8c885431 Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 8 Mar 2023 11:17:41 +0100 Subject: [PATCH 1014/1921] add file paths using .map.collect --- workflows/raredisease.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2be32d58..eec9ba20 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -528,9 +528,9 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.map{it[1]}.collect().ifEmpty([])) MULTIQC ( From 120a674eb578f0fedd7a651f19b3942e3a5903df Mon Sep 17 00:00:00 2001 From: Ryan James Kennedy Date: Wed, 8 Mar 2023 16:59:04 +0000 Subject: [PATCH 1015/1921] 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 c72fab2c0f71bb7eb43640fad27ce1a1cbc08ff9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Mar 2023 14:38:30 +0100 Subject: [PATCH 1016/1921] Usage markdown --- docs/usage.md | 349 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 255 insertions(+), 94 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 9bdb486b..14177890 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,36 +1,94 @@ # nf-core/raredisease: Usage -## :warning: Please read this documentation on the nf-core website: [https://nf-co.re/raredisease/usage](https://nf-co.re/raredisease/usage) +**We recommend reading this documentation on the nf-core website: [https://nf-co.re/raredisease/usage](https://nf-co.re/raredisease/usage)** + +Table of contents: + +- [nf-core/raredisease: Usage](#nf-core-raredisease--usage) +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Run nf-core/raredisease with test data] (#run-nf-core-raredisease-with-test-data--a-id--testdata----) +- [Run nf-core/raredisease with your data] (#run-nf-core-raredisease-with-your-data--a-id--owndata----) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from alignment files](#2-qc-stats-from-alignment-files) + - [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. Annotation & Ranking - SNV](#6-annotation---ranking---snv) + - [7. Annotation & Ranking - SV](#7-annotation---ranking---sv) + - [8. Mitochondrial analysis workflow](#8-mitochondrial-analysis-workflow) + - [Run the pipeline](#run-the-pipeline) + - [Command line](#command-line) + - [Config file](#config-file) +- [Tips](#tips) + - [Custom configuration](#custom-configuration) + - [Resource requests](#resource-requests) + - [For beginners](#for-beginners) + - [Advanced option on process level](#advanced-option-on-process-level) + - [Updating containers (advanced users)](#updating-containers--advanced-users-) + - [nf-core/configs](#nf-core-configs) + - [Run sentieon](#run-sentieon) + - [Azure Resource Requests](#azure-resource-requests) + - [Running in the background](#running-in-the-background) + - [Nextflow memory requirements](#nextflow-memory-requirements) + +# Introduction + +nf-core/raredisease is a bioinformatics best-practice analysis pipeline to call, annotate and score variants from WGS/WES of rare disease patients. The pipeline is built using nextflow. + +# Prerequisites + +1. Install Nextflow (>=22.10.1) using the instructions [here.](https://nextflow.io/docs/latest/getstarted.html#installation) +2. Install one of the following technologies for full pipeline reproducibility: Docker, Singularity, Podman, Shifter or Charliecloud. + > Almost all nf-core pipelines give you the option to use conda as well. However, some tools used in the raredisease pipeline do not have a conda package so we do not support conda at the moment. + +# Run nf-core/raredisease with test data + +Before running the pipeline with your data, we recommend running it with the test dataset available [here](https://github.com/nf-core/test-datasets/tree/raredisease). + +> You do not need to download the data as the pipeline is configured to fetch that data automatically for you when you use the test profile. + +Run the following command, where YOURPROFILE is the package manager you installed on your machine. For example, `-profile test,docker` or `-profile test,singularity`: -> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ +``` +nextflow run nf-core/raredisease \ + -revision dev -profile test, \ + --outdir +``` -## Introduction +> Check [nf-core/configs](https://github.com/nf-core/configs/tree/master/conf) to see if a custom config file to run nf-core pipelines already exists for your institute. If so, you can simply use `-profile test,` in your command. This enables the appropirate package manager and sets the appropriate execution settings for your machine. +> NB: The order of profiles is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. - +The above command downloads the pipeline from github, caches it, and tests it on the test dataset. -## Samplesheet input +> When you run the command again, it will fetch the pipeline from cache even if the remote version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. -You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 9 columns, and a header row as shown in the examples below. +Test profile runs the pipeline with a proband containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. -```bash ---input '[path to samplesheet file]' +Running the command creates the following files in your working directory: + +``` +work # Directory containing the nextflow working files + # Finished results in specified location (defined with --outdir) +.nextflow_log # Log file from Nextflow +# Other nextflow hidden files, like history of pipeline logs. ``` -### Multiple runs of the same sample +# Run nf-core/raredisease with your data -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across 2 lanes: +Running the pipeline involves three steps: - +1. Prepare a samplesheet +2. Gather all required references +3. Supply samplesheet and references, and run the command -```console -sample,lane,fastq_1,fastq_2,gender,phenotype,paternal_id,maternal_id,case_id -AEG588A1,2,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,1,2,AEG588A3,AEG588A2,fam_1 -AEG588A1,3,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz,1,2,AEG588A3,AEG588A2,fam_1 -AEG588A2,4,AEG588A2_S1_L004_R1_001.fastq.gz,AEG588A2_S1_L004_R2_001.fastq.gz,2,1,,,fam_1 -AEG588A3,4,AEG588A3_S1_L004_R1_001.fastq.gz,AEG588A3_S1_L004_R2_001.fastq.gz,1,1,,,fam_1 -``` +### Samplesheet + +A samplesheet is used to pass the information about the sample(s), such as the path to the fastq files and other meta data (gender, phenotype, etc.,) to the pipeline. -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). +nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). | Column | Description | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -44,110 +102,196 @@ The pipeline will auto-detect whether a sample is single- or paired-end using th | `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for other samples than the proband. | | `case_id` | Case ID, for the analysis used when generating a family VCF | -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +It is also possible to include multiple runs of the same sample in a samplesheet like when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across 2 lanes: -## Running the pipeline +| sample | lane | fastq_1 | fastq_2 | gender | phenotype | paternal_id | maternal_id | case_id | +| -------- | ---- | -------------------------------- | -------------------------------- | ------ | --------- | ----------- | ----------- | ------- | +| AEG588A1 | 2 | AEG588A1_S1_L002_R1_001.fastq.gz | AEG588A1_S1_L002_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | +| AEG588A1 | 3 | AEG588A1_S1_L003_R1_001.fastq.gz | AEG588A1_S1_L003_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | +| AEG588A2 | 4 | AEG588A2_S1_L004_R1_001.fastq.gz | AEG588A2_S1_L004_R2_001.fastq.gz | 2 | 1 | | | fam_1 | +| AEG588A3 | 4 | AEG588A3_S1_L004_R1_001.fastq.gz | AEG588A3_S1_L004_R2_001.fastq.gz | 1 | 1 | | | fam_1 | -The typical command for running the pipeline is as follows: +If you would like to see more examples of what a typical samplesheet looks like for a singleton and a trio, follow these links, [singleton](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_single.csv) and [trio](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_trio.csv). -```bash -nextflow run nf-core/raredisease --input samplesheet.csv --outdir --genome GRCh37 -profile docker -``` +### Reference files and parameters -This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. +In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -Note that the pipeline will create the following files in your working directory: +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (ex: you can align with either bwamem2 or sentieon, call SNVs with deepvariant or sentieon). You also have the option to turn off parts of the pipeline if you do not want to run them (ex: snv annotation can be turned off by setting `--annotate_snv_switch` flag to false). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters only used by that tool need not be provided. For example, for SNV calling if you decide to use deepvariant as your variant caller, you do not need to provide the parameter `--ml_model`, as it is only used by sentieon. -```bash -work # Directory containing the nextflow working files - # Finished results in specified location (defined with --outdir) -.nextflow_log # Log file from Nextflow -# Other nextflow hidden files, eg. history of pipeline runs and old logs. -``` +To help you decide which parameters you need to supply, we have tabulated the mandatory and optional inputs for different features that constitute the pipeline. -### Updating the pipeline +> Of the features listed below alignment, qc stats, repeat expansions, snv & sv variant calling are always run by default so the mandatory parameters used by those features will always have to be supplied to the pipeline. -When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: +#### 1. Alignment -```bash -nextflow pull nf-core/raredisease -``` +| Mandatory | Optional | +| ------------------- | --------------------------- | +| aligner1 | fasta_fai2 | +| fasta | bwamem2_index2 | +| platform | known_dbsnp3 | +| | known_dbsnp_tbi3 | -### Reproducibility +1Default value is bwamem2, but if you have a valid license for sentieon, you have the option to use sentieon as well. +2fasta_fai and bwamem2_index, if not provided by the user, will be generated by the pipeline when necessary. +3Used only by sentieon. -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +#### 2. QC stats from alignment files -First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. +| Mandatory | Optional | +| ------------------------------------------------------------ | -------- | +| intervals_wgs | | +| intervals_y | | +| target_bed / (bait_intervals & target_intervals)1 | | -This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. +1 If a target_bed file is provided, bait_intervals and target_intervals can be generated by the pipeline. -## Core Nextflow arguments +#### 3. Repeat expansions -> **NB:** These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). +| Mandatory | Optional | +| --------------- | -------- | +| variant_catalog | | -### `-profile` +#### 4. Variant calling - SNV -Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. +| Mandatory | Optional | +| -------------------------- | --------------------------- | +| variant_caller1 | known_dbsnp2 | +| ml_model2 | known_dbsnp_tbi2 | +| analysis_type 3 | call_interval2 | +| | known_dbsnp_tbi2 | -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. +1Default variant caller is deepvariant, but you have the option to use sentieon as well. +2These parameters are only used by sentieon. +3Default is WGS, but you have the option to choose WES as well. -> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +#### 5. Variant calling - Structural variants -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +| Mandatory | Optional | +| --------- | ---------- | +| | target_bed | +| | bwa_index | -Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! -They are loaded in sequence, so later profiles can overwrite earlier profiles. +#### 6. Annotation & Ranking - SNV -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +| Mandatory | Optional | +| ----------------------------- | ------------------------------ | +| genome1 | gnomad_af4 | +| vcfanno_resources2 | reduced_penetrance5 | +| vcfanno_toml3 | vcfanno_lua | +| vep_cache_version | vep_filters | +| vep_cache | | -- `test` - - A profile with a complete configuration for automated testing - - Includes links to test data so needs no other parameters -- `docker` - - A generic configuration profile to be used with [Docker](https://docker.com/) -- `singularity` - - A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) -- `podman` - - A generic configuration profile to be used with [Podman](https://podman.io/) -- `shifter` - - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) -- `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) -- `conda` - - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. +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/ramprasadn/test-datasets/blob/raredisease/reference/vcfanno_resources.txt). +3Path to a vcfanno configration file. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/vcfanno_config.toml). +4Gnomad vcf file can be downloaded from here https://gnomad.broadinstitute.org/downloads. +5Used by genmod while ranking the variants. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/reduced_penetrance.tsv). -### `-resume` +#### 7. Annotation & Ranking - SV -Specify this when restarting a pipeline. Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. For input to be considered the same, not only the names must be identical but the files' contents as well. For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). +| Mandatory | Optional | +| -------------------------- | ------------------ | +| genome | reduced_penetrance | +| svdb_query_dbs1 | score_config_sv | +| vep_cache_version | vep_filters | +| vep_cache | | -You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. +1 A csv file that describes the databases(vcfs) used by svdb for annotating structural variants. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). Information about the column headers can be found [here](https://github.com/J35P312/SVDB#Query). -### `-c` +#### 8. Mitochondrial analysis workflow -Specify the path to a specific config file (this is a core Nextflow command). See the [nf-core website documentation](https://nf-co.re/usage/configuration) for more information. +| Mandatory | Optional | +| ------------------------------- | -------- | +| genome | | +| mt_backchain_shift 1 | | +| mt_contig_name | | +| mt_fasta_shift | | +| mt_intervals | | +| mt_intervals_shift | | +| vcfanno_resources | | +| vcfanno_toml | | +| vep_cache_version | | +| vep_cache | | + +1 Can be generated by GATK's [ShiftFasta](https://gatk.broadinstitute.org/hc/en-us/articles/9570501436827-ShiftFasta-BETA-). Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/mt_shift8000.back_chain). + +### Run the pipeline + +There are two possible approaches you can take to supply samplesheet and reference data to the pipeline while starting a run. + +1. Command line +2. Config file + +#### Command line + +All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed from the command line. For example, you can provide the samplesheet, reference fasta, and turn off annotations for SNVs and SVs by running, + +``` +nextflow run nf-core/raredisease \ + -revision dev \ + -profile test, \ + --input samplesheet.csv \ + --fasta reference.fasta \ + --annotate_snv_switch false \ + --annotate_sv_switch false \ + --outdir +``` + +#### Config file + +While one can quickly supply/change the default parameters easily from the command line, it can easily become confusing so we recommend using a config file instead. In such cases, one can create a config file that contains all the parameters and pass that file from the command line instead. + +``` +nextflow run nf-core/raredisease \ + -revision dev \ + -profile test, \ + -c \ + --outdir +``` + +A sample config file can be found [here](https://github.com/nf-core/raredisease/blob/dev/conf/test.config). + +# Tips + +- **Singularity cache:** If you are using singularity, please use the nf-core download command to download images first, before running the pipeline. Setting the NXF_SINGULARITY_CACHEDIR or singularity.cacheDir Nextflow options enables you to store and re-use the images from a central location for future pipeline runs. + +- **Save references:** While the pipeline can generate indices for the fasta and some vcf files when they are not provided, it can be benficial to supply them to the pipeline as it avoids wasting resources. You can use the `--save_reference` parameter to publish those files, and then update your config file to contain the paths to these files for your subsequent runs. + +- **Update pipeline:** If you would like to update the pipeline code stored in cache, in addition to running the command with `-latest` option, you can also run the command below: + +```bash +nextflow pull nf-core/raredisease +``` + +- **Reproducibility:** It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. + +- **Restart a previous run:** Add `-resume` to your command when restarting a pipeline. Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. For input to be considered the same, not only the names must be identical but the files' contents as well. For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. ## Custom configuration ### Resource requests -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/raredisease/blob/dev/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. -For example, if the nf-core/rnaseq pipeline is failing after multiple re-submissions of the `STAR_ALIGN` process due to an exit code of `137` this would indicate that there is an out of memory issue: +For example, if the nf-core/raredisease pipeline is failing after multiple re-submissions of the `DEEPVARIANT` process due to an exit code of `137` this would indicate that there is an out of memory issue: ```console -[62/149eb0] NOTE: Process `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) -- Execution is retried (1) -Error executing process > 'NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)' +[62/149eb0] NOTE: Process `NFCORE_RAREDISEASE:RAREDISEASE:CALL_SNV:CALL_SNV_DEEPVARIANT:DEEPVARIANT (earlycasualcaiman)` terminated with an error exit status (137) -- Execution is retried (1) +Error executing process > 'NFCORE_RAREDISEASE:RAREDISEASE:CALL_SNV:CALL_SNV_DEEPVARIANT:DEEPVARIANT (earlycasualcaiman)' Caused by: - Process `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) + Process `NFCORE_RAREDISEASE:RAREDISEASE:CALL_SNV:CALL_SNV_DEEPVARIANT:DEEPVARIANT (earlycasualcaiman)` terminated with an error exit status (137) Command executed: - STAR \ - --genomeDir star \ - --readFilesIn WT_REP1_trimmed.fq.gz \ - --runThreadN 2 \ - --outFileNamePrefix WT_REP1. \ - + /opt/deepvariant/bin/run_deepvariant \ + --ref=reference.fasta \ + --reads=earlycasualcaiman_sorted_md.bam \ + --output_vcf=earlycasualcaiman_deepvar.vcf.gz \ + --output_gvcf=earlycasualcaiman_deepvar.g.vcf.gz \ + --model_type=WGS \ + \ + --num_shards=2 Command exit status: 137 @@ -156,7 +300,8 @@ Command output: (empty) Command error: - .command.sh: line 9: 30 Killed STAR --genomeDir star --readFilesIn WT_REP1_trimmed.fq.gz --runThreadN 2 --outFileNamePrefix WT_REP1. + .command.sh: line 9: 30 Killed /opt/deepvariant/bin/run_deepvariant --ref=reference.fasta --reads=earlycasualcaiman_sorted_md.bam --output_vcf=earlycasualcaiman_deepvar.vcf.gz --output_gvcf=earlycasualcaiman_deepvar.g.vcf.gz --model_type=WGS --num_shards=2 + Work dir: /home/pipelinetest/work/9d/172ca5881234073e8d76f2a19c88fb @@ -165,27 +310,27 @@ Tip: you can replicate the issue by changing to the process work dir and enterin #### For beginners -A first step to bypass this error, you could try to increase the amount of CPUs, memory, and time for the whole pipeline. Therefor you can try to increase the resource for the parameters `--max_cpus`, `--max_memory`, and `--max_time`. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of rnaseq](https://nf-co.re/rnaseq/3.9/parameters) and scroll down to the `show hidden parameter` button to get the default value for `--max_memory`. In this case 128GB, you than can try to run your pipeline again with `--max_memory 200GB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. +A first step to bypass this error, you could try to increase the amount of CPUs, memory, and time for the whole pipeline. Therefor you can try to increase the resource for the parameters `--max_cpus`, `--max_memory`, and `--max_time`. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of raredisease](https://nf-co.re/raredisease/dev/parameters) and scroll down to the `Click here to show all hidden params.` button to get the default value for `--max_memory`. In this case 128GB, you than can try to run your pipeline again with `--max_memory 200GB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. #### Advanced option on process level -To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). -We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/star/align/main.nf`. -If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). +To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process DEEPAVARIANT` in the [nf-core/raredisease Github repo](https://github.com/nf-core/raredisease/search?q=process+DEEPVARIANT). +We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/deepvariant/main.nf`. +If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_medium`](https://github.com/nf-core/raredisease/blob/7a0d47aca1d5b59771af2ce49c320249e379fc23/modules/nf-core/deepvariant/main.nf#L3). The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. -The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. -Providing you haven't set any other standard nf-core parameters to **cap** the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `STAR_ALIGN` process failure by creating a custom config file that sets at least 72GB of memory, in this case increased to 100GB. +The default values for the `process_medium` label are set in the pipeline's [`base.config`](https://github.com/nf-core/raredisease/blob/7a0d47aca1d5b59771af2ce49c320249e379fc23/conf/base.config#L39-L43) which in this case is defined as 36GB. +Providing you haven't set any other standard nf-core parameters to **cap** the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `DEEPVARIANT` process failure by creating a custom config file that sets at least 36GB of memory, in this case increased to 72GB. The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. ```nextflow process { - withName: 'NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN' { - memory = 100.GB + withName: 'NFCORE_RAREDISEASE:RAREDISEASE:CALL_SNV:CALL_SNV_DEEPVARIANT:DEEPVARIANT' { + memory = 72.GB } } ``` -> **NB:** We specify the full process name i.e. `NFCORE_RNASEQ:RNASEQ:ALIGN_STAR:STAR_ALIGN` in the config file because this takes priority over the short name (`STAR_ALIGN`) and allows existing configuration using the full process name to be correctly overridden. +> **NB:** We specify the full process name i.e. `NFCORE_RAREDISEASE:RAREDISEASE:CALL_SNV:CALL_SNV_DEEPVARIANT:DEEPVARIANT` in the config file because this takes priority over the short name (`DEEPVARIANT`) and allows existing configuration using the full process name to be correctly overridden. > > If you get a warning suggesting that the process selector isn't recognised check that the process name has been specified correctly. @@ -231,12 +376,28 @@ The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementatio ### nf-core/configs -In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. +In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information about creating your own configuration files. If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). +## Run sentieon + +To use sentieon you have to: + +1. Ensure that sentieon executable is in path. +2. If necessary, store license information as a secret in nextflow's local store. +3. Set environmental variable `NXF_ENABLE_SECRETS` to an appropriate value. + +To elaborate more on item #2 in the list above, if you are running nf-core/raredisease with sentieon on AWS or on a local machine where do not want other users to know your license details, we recommend that you use [nextflow's secrets feature](https://www.nextflow.io/docs/latest/secrets.html) to pass the that information. To do that run the command below after replacing LICENSE with the value corresponding to your license server (ex:1.1.1.1:4000) + +``` +nextflow secrets set SENTIEON_LICENSE_BASE64 +``` + +If you are using nextflow secrets, you have to set the environment variable `NXF_ENABLE_SECRETS` to true. This will see to it that the pipeline can retrieve the secret from nextflow's secrets store during the pipeline execution. Keep in mind that versions of nextflow Version 22.09.2-edge and onwards have NXF_ENABLE_SECRETS to true by default. If you are not using secrets set `NXF_ENABLE_SECRETS` to false, but make sure that the environmental variable [`SENTIEON_LICENSE`](`NXF_ENABLE_SECRETS`) is set to reflect the value of your license server on your machine. + ## Azure Resource Requests To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. From dc355d2339c8c0e4718b957db18af20369f91ec2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Mar 2023 14:42:52 +0100 Subject: [PATCH 1017/1921] update toc --- docs/usage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 14177890..455ea5dd 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -7,8 +7,8 @@ Table of contents: - [nf-core/raredisease: Usage](#nf-core-raredisease--usage) - [Introduction](#introduction) - [Prerequisites](#prerequisites) -- [Run nf-core/raredisease with test data] (#run-nf-core-raredisease-with-test-data--a-id--testdata----) -- [Run nf-core/raredisease with your data] (#run-nf-core-raredisease-with-your-data--a-id--owndata----) +- [Run nf-core/raredisease with test data](#run-nf-core-raredisease-with-test-data--a-id--testdata----) +- [Run nf-core/raredisease with your data](#run-nf-core-raredisease-with-your-data--a-id--owndata----) - [Samplesheet](#samplesheet) - [Reference files and parameters](#reference-files-and-parameters) - [1. Alignment](#1-alignment) From 2664b62590662c3443d2bab9dcbe2c002ff050ac Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:56:28 +0100 Subject: [PATCH 1018/1921] add categories --- docs/usage.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 455ea5dd..d5ccb891 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -4,7 +4,6 @@ Table of contents: -- [nf-core/raredisease: Usage](#nf-core-raredisease--usage) - [Introduction](#introduction) - [Prerequisites](#prerequisites) - [Run nf-core/raredisease with test data](#run-nf-core-raredisease-with-test-data--a-id--testdata----) @@ -119,7 +118,16 @@ In nf-core/raredisease, references can be supplied using parameters listed [here Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (ex: you can align with either bwamem2 or sentieon, call SNVs with deepvariant or sentieon). You also have the option to turn off parts of the pipeline if you do not want to run them (ex: snv annotation can be turned off by setting `--annotate_snv_switch` flag to false). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters only used by that tool need not be provided. For example, for SNV calling if you decide to use deepvariant as your variant caller, you do not need to provide the parameter `--ml_model`, as it is only used by sentieon. -To help you decide which parameters you need to supply, we have tabulated the mandatory and optional inputs for different features that constitute the pipeline. +nf-core/raredisease consists of several tools used for various purposes. For convienience, we have grouped those tools under the following catergories and tabulated the mandatory and optional parameters for each group below. + +1. Alignment (bwamem2/sentieon) +2. QC stats the alignment files +3. Repeat expansions (Expansionshunter & Stranger) +4. Variant calling - SNV (deepvariant/Sentieon-haplotypecaller) +5. Variant calling - Structural variants (Tiddit & Manta) +6. Annotation & ranking - SNV (rohcall, vcfanno, ensemblvep, genmod) +7. Annotation & ranking - SV (svdb query, ensemblvep, genmod) +8. Mitochondrial analysis workflow > Of the features listed below alignment, qc stats, repeat expansions, snv & sv variant calling are always run by default so the mandatory parameters used by those features will always have to be supplied to the pipeline. From cc1adc78815a9b8d0810eb74bec861af14f24f19 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:57:48 +0100 Subject: [PATCH 1019/1921] fix typo --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index d5ccb891..880fada2 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -118,7 +118,7 @@ In nf-core/raredisease, references can be supplied using parameters listed [here Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (ex: you can align with either bwamem2 or sentieon, call SNVs with deepvariant or sentieon). You also have the option to turn off parts of the pipeline if you do not want to run them (ex: snv annotation can be turned off by setting `--annotate_snv_switch` flag to false). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters only used by that tool need not be provided. For example, for SNV calling if you decide to use deepvariant as your variant caller, you do not need to provide the parameter `--ml_model`, as it is only used by sentieon. -nf-core/raredisease consists of several tools used for various purposes. For convienience, we have grouped those tools under the following catergories and tabulated the mandatory and optional parameters for each group below. +nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories and tabulated the mandatory and optional parameters for each group below. 1. Alignment (bwamem2/sentieon) 2. QC stats the alignment files From dd135177117a4e05b3ef7d80b074fdf0ddd493c6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 9 Mar 2023 18:20:56 +0100 Subject: [PATCH 1020/1921] update section headers --- docs/usage.md | 122 +++++++++++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 880fada2..15202fae 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -4,34 +4,36 @@ Table of contents: +- [nf-core/raredisease: Usage](#nf-core-raredisease--usage) - [Introduction](#introduction) - [Prerequisites](#prerequisites) -- [Run nf-core/raredisease with test data](#run-nf-core-raredisease-with-test-data--a-id--testdata----) -- [Run nf-core/raredisease with your data](#run-nf-core-raredisease-with-your-data--a-id--owndata----) +- [Run nf-core/raredisease with test data](#run-nf-core-raredisease-with-test-data) +- [Run nf-core/raredisease with your data](#run-nf-core-raredisease-with-your-data) - [Samplesheet](#samplesheet) - [Reference files and parameters](#reference-files-and-parameters) - [1. Alignment](#1-alignment) - - [2. QC stats from alignment files](#2-qc-stats-from-alignment-files) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - [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. Annotation & Ranking - SNV](#6-annotation---ranking---snv) - - [7. Annotation & Ranking - SV](#7-annotation---ranking---sv) - - [8. Mitochondrial analysis workflow](#8-mitochondrial-analysis-workflow) + - [6. SNV annotation & Ranking](#6-snv-annotation---ranking) + - [7. SV annotation & Ranking](#7-sv-annotation---ranking) + - [8. Mitochondrial analysis](#8-mitochondrial-analysis) - [Run the pipeline](#run-the-pipeline) - - [Command line](#command-line) - - [Config file](#config-file) -- [Tips](#tips) - - [Custom configuration](#custom-configuration) - - [Resource requests](#resource-requests) - - [For beginners](#for-beginners) - - [Advanced option on process level](#advanced-option-on-process-level) - - [Updating containers (advanced users)](#updating-containers--advanced-users-) - - [nf-core/configs](#nf-core-configs) - - [Run sentieon](#run-sentieon) - - [Azure Resource Requests](#azure-resource-requests) - - [Running in the background](#running-in-the-background) - - [Nextflow memory requirements](#nextflow-memory-requirements) + - [Direct input in cli](#direct-input-in-cli) + - [Import from a config file (recommended)](#import-from-a-config-file--recommended-) +- [Best practices](#best-practices) +- [Troubleshooting](#troubleshooting) + - [Resource errors](#resource-errors) + - [For beginners](#for-beginners) + - [Advanced option on process level](#advanced-option-on-process-level) +- [Custom configuration](#custom-configuration) + - [Updating containers (advanced users)](#updating-containers--advanced-users-) + - [nf-core/configs](#nf-core-configs) + * [Run sentieon](#run-sentieon) + * [Azure Resource Requests](#azure-resource-requests) + * [Running in the background](#running-in-the-background) + * [Nextflow memory requirements](#nextflow-memory-requirements) # Introduction @@ -62,7 +64,7 @@ nextflow run nf-core/raredisease \ The above command downloads the pipeline from github, caches it, and tests it on the test dataset. -> When you run the command again, it will fetch the pipeline from cache even if the remote version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. +> When you run the command again, it will fetch the pipeline from cache even if a latest version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. Test profile runs the pipeline with a proband containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. @@ -85,23 +87,23 @@ Running the pipeline involves three steps: ### Samplesheet -A samplesheet is used to pass the information about the sample(s), such as the path to the fastq files and other meta data (gender, phenotype, etc.,) to the pipeline. +A samplesheet is used to pass the information about the sample(s), such as the path to the fastq files and other meta data (gender, phenotype, etc.,) to the pipeline in csv format. nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). -| Column | Description | +| Fields | Description | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | | `lane` | Used to generate seperate channels during the alignment step | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_1` | Absolute path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Absolute path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `gender` | Sex (1=male; 2=female; other=unknown) | | `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected) | -| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for other samples than the proband. | -| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for other samples than the proband. | +| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | +| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | | `case_id` | Case ID, for the analysis used when generating a family VCF | -It is also possible to include multiple runs of the same sample in a samplesheet like when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across 2 lanes: +It is also possible to include multiple runs of the same sample in a samplesheet. For example, when you have re-sequenced the same sample more than once to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across 2 lanes: | sample | lane | fastq_1 | fastq_2 | gender | phenotype | paternal_id | maternal_id | case_id | | -------- | ---- | -------------------------------- | -------------------------------- | ------ | --------- | ----------- | ----------- | ------- | @@ -116,20 +118,22 @@ If you would like to see more examples of what a typical samplesheet looks like In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (ex: you can align with either bwamem2 or sentieon, call SNVs with deepvariant or sentieon). You also have the option to turn off parts of the pipeline if you do not want to run them (ex: snv annotation can be turned off by setting `--annotate_snv_switch` flag to false). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters only used by that tool need not be provided. For example, for SNV calling if you decide to use deepvariant as your variant caller, you do not need to provide the parameter `--ml_model`, as it is only used by sentieon. +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by setting `--annotate_snv_switch` flag to false). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. -nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories and tabulated the mandatory and optional parameters for each group below. +nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories: 1. Alignment (bwamem2/sentieon) -2. QC stats the alignment files +2. QC stats from the alignment files 3. Repeat expansions (Expansionshunter & Stranger) -4. Variant calling - SNV (deepvariant/Sentieon-haplotypecaller) +4. Variant calling - SNV (DeepVariant/Sentieon-haplotypecaller) 5. Variant calling - Structural variants (Tiddit & Manta) -6. Annotation & ranking - SNV (rohcall, vcfanno, ensemblvep, genmod) -7. Annotation & ranking - SV (svdb query, ensemblvep, genmod) -8. Mitochondrial analysis workflow +6. SNV annotation & ranking (rohcall, vcfanno, ensemblvep, genmod) +7. SV annotation & ranking (svdb query, ensemblvep, genmod) +8. Mitochondrial analysis -> Of the features listed below alignment, qc stats, repeat expansions, snv & sv variant calling are always run by default so the mandatory parameters used by those features will always have to be supplied to the pipeline. +The mandatory and optional parameters for each category are tabulated below. + +> Alignment, qc stats, repeat expansions, snv & sv variant calling are run by default. Hence, the mandatory parameters used by those features will always have to be provided to the pipeline. #### 1. Alignment @@ -144,7 +148,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con 2fasta_fai and bwamem2_index, if not provided by the user, will be generated by the pipeline when necessary. 3Used only by sentieon. -#### 2. QC stats from alignment files +#### 2. QC stats from the alignment files | Mandatory | Optional | | ------------------------------------------------------------ | -------- | @@ -169,7 +173,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con | analysis_type 3 | call_interval2 | | | known_dbsnp_tbi2 | -1Default variant caller is deepvariant, but you have the option to use sentieon as well. +1Default variant caller is DeepVariant, but you have the option to use sentieon as well. 2These parameters are only used by sentieon. 3Default is WGS, but you have the option to choose WES as well. @@ -180,7 +184,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con | | target_bed | | | bwa_index | -#### 6. Annotation & Ranking - SNV +#### 6. SNV annotation & Ranking | Mandatory | Optional | | ----------------------------- | ------------------------------ | @@ -196,7 +200,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con 4Gnomad vcf file can be downloaded from here https://gnomad.broadinstitute.org/downloads. 5Used by genmod while ranking the variants. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/reduced_penetrance.tsv). -#### 7. Annotation & Ranking - SV +#### 7. SV annotation & Ranking | Mandatory | Optional | | -------------------------- | ------------------ | @@ -207,7 +211,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con 1 A csv file that describes the databases(vcfs) used by svdb for annotating structural variants. Sample file [here](https://github.com/ramprasadn/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 workflow +#### 8. Mitochondrial analysis | Mandatory | Optional | | ------------------------------- | -------- | @@ -226,14 +230,11 @@ nf-core/raredisease consists of several tools used for various purposes. For con ### Run the pipeline -There are two possible approaches you can take to supply samplesheet and reference data to the pipeline while starting a run. - -1. Command line -2. Config file +You can directly supply the parameters in the command line (cli) or use a config file from which the pipeline can import the parameters. -#### Command line +#### Direct input in cli -All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed from the command line. For example, you can provide the samplesheet, reference fasta, and turn off annotations for SNVs and SVs by running, +All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed using the cli. For example, you can provide the samplesheet, reference fasta, and turn off annotations for SNVs and SVs by running, ``` nextflow run nf-core/raredisease \ @@ -246,9 +247,9 @@ nextflow run nf-core/raredisease \ --outdir ``` -#### Config file +#### Import from a config file (recommended) -While one can quickly supply/change the default parameters easily from the command line, it can easily become confusing so we recommend using a config file instead. In such cases, one can create a config file that contains all the parameters and pass that file from the command line instead. +To input or change the default parameters, we recommend using a config file instead. Create a config file that contains all the parameters and supply that file as shown below. ``` nextflow run nf-core/raredisease \ @@ -260,11 +261,11 @@ nextflow run nf-core/raredisease \ A sample config file can be found [here](https://github.com/nf-core/raredisease/blob/dev/conf/test.config). -# Tips +# Best practices -- **Singularity cache:** If you are using singularity, please use the nf-core download command to download images first, before running the pipeline. Setting the NXF_SINGULARITY_CACHEDIR or singularity.cacheDir Nextflow options enables you to store and re-use the images from a central location for future pipeline runs. +- **Singularity cache:** If you are using singularity, use the nf-core download command to download images first, before running the pipeline. Define [NXF_SINGULARITY_CACHEDIR](https://nextflow.io/docs/latest/config.html?highlight=nxf_singularity_cachedir#environment-variables) or singularity.cacheDir Nextflow options to store and re-use the images from a central location for future pipeline runs. -- **Save references:** While the pipeline can generate indices for the fasta and some vcf files when they are not provided, it can be benficial to supply them to the pipeline as it avoids wasting resources. You can use the `--save_reference` parameter to publish those files, and then update your config file to contain the paths to these files for your subsequent runs. +- **Save references:** While the pipeline can generate indices for the fasta and some vcf files when they are not provided, it can be benficial to supply them to the pipeline as it saves computing resources. You can use the `--save_reference` parameter to publish those files, and then update your config file with the paths to these files for your subsequent runs. - **Update pipeline:** If you would like to update the pipeline code stored in cache, in addition to running the command with `-latest` option, you can also run the command below: @@ -272,13 +273,13 @@ A sample config file can be found [here](https://github.com/nf-core/raredisease/ nextflow pull nf-core/raredisease ``` -- **Reproducibility:** It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. +- **Reproducibility:** Specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r`, for example, `-r 1.3.1`. You can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline. For example, you can view the version number at the bottom of the MultiQC reports. -- **Restart a previous run:** Add `-resume` to your command when restarting a pipeline. Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. For input to be considered the same, not only the names must be identical but the files' contents as well. For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. +- **Restart a previous run:** Add `-resume` to your command when restarting a pipeline. Nextflow will use cached results from any pipeline steps where inputs are the same, and resume the run from where it terminated previously. For input to be considered the same, names and the files' contents must be identical. For more info about `-resume`, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. -## Custom configuration +# Troubleshooting -### Resource requests +### Resource errors Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/raredisease/blob/dev/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. @@ -318,17 +319,16 @@ Tip: you can replicate the issue by changing to the process work dir and enterin #### For beginners -A first step to bypass this error, you could try to increase the amount of CPUs, memory, and time for the whole pipeline. Therefor you can try to increase the resource for the parameters `--max_cpus`, `--max_memory`, and `--max_time`. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of raredisease](https://nf-co.re/raredisease/dev/parameters) and scroll down to the `Click here to show all hidden params.` button to get the default value for `--max_memory`. In this case 128GB, you than can try to run your pipeline again with `--max_memory 200GB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. +nf-core/raredisease provides you with options to increase the amount of CPUs(`--max_cpus`), memory(`--max_memory`), and time (`--max_time`) for the whole pipeline. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of raredisease](https://nf-co.re/raredisease/dev/parameters) and click `show hidden params` button in the right panel to get the default value for `--max_memory`. Run the pipeline with updated max_memory value `--max_memory xxxGB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. #### Advanced option on process level -To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process DEEPAVARIANT` in the [nf-core/raredisease Github repo](https://github.com/nf-core/raredisease/search?q=process+DEEPVARIANT). +To bypass this error you would need to find exactly which resources are set by the `DEEPVARIANT` process. The quickest way is to search for `process DEEPAVARIANT` in the [nf-core/raredisease Github repo](https://github.com/nf-core/raredisease/search?q=process+DEEPVARIANT). We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/deepvariant/main.nf`. If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_medium`](https://github.com/nf-core/raredisease/blob/7a0d47aca1d5b59771af2ce49c320249e379fc23/modules/nf-core/deepvariant/main.nf#L3). The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. -The default values for the `process_medium` label are set in the pipeline's [`base.config`](https://github.com/nf-core/raredisease/blob/7a0d47aca1d5b59771af2ce49c320249e379fc23/conf/base.config#L39-L43) which in this case is defined as 36GB. -Providing you haven't set any other standard nf-core parameters to **cap** the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `DEEPVARIANT` process failure by creating a custom config file that sets at least 36GB of memory, in this case increased to 72GB. -The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. +The default memory value for the `process_medium` label is set in the pipeline's [`base.config`](https://github.com/nf-core/raredisease/blob/7a0d47aca1d5b59771af2ce49c320249e379fc23/conf/base.config#L39-L43), which in this case is 36GB. +We can try and bypass the `DEEPVARIANT` process failure by creating a custom config file that increases the memory limit from 36GB to 72GB (NB: verify that the value set by --max_memory is above 72GB). The custom config below can then be provided to the pipeline via the `-c` parameter as highlighted in previous sections. ```nextflow process { @@ -342,6 +342,8 @@ process { > > If you get a warning suggesting that the process selector isn't recognised check that the process name has been specified correctly. +# Custom configuration + ### Updating containers (advanced users) The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. From 9937194bf61aae640388e5ee8488aac7a2d26461 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 10 Mar 2023 13:50:22 +0100 Subject: [PATCH 1021/1921] review suggestions --- docs/usage.md | 154 ++++++++++++++++++++++++++------------------------ 1 file changed, 79 insertions(+), 75 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 15202fae..59ccc5c4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -5,47 +5,47 @@ Table of contents: - [nf-core/raredisease: Usage](#nf-core-raredisease--usage) -- [Introduction](#introduction) -- [Prerequisites](#prerequisites) -- [Run nf-core/raredisease with test data](#run-nf-core-raredisease-with-test-data) -- [Run nf-core/raredisease with your data](#run-nf-core-raredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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) - - [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-) -- [Best practices](#best-practices) -- [Troubleshooting](#troubleshooting) - - [Resource errors](#resource-errors) - - [For beginners](#for-beginners) - - [Advanced option on process level](#advanced-option-on-process-level) -- [Custom configuration](#custom-configuration) - - [Updating containers (advanced users)](#updating-containers--advanced-users-) - - [nf-core/configs](#nf-core-configs) - * [Run sentieon](#run-sentieon) - * [Azure Resource Requests](#azure-resource-requests) - * [Running in the background](#running-in-the-background) - * [Nextflow memory requirements](#nextflow-memory-requirements) - -# Introduction + - [Introduction](#introduction) + - [Prerequisites](#prerequisites) + - [Run nf-core/raredisease with test data](#run-nf-core-raredisease-with-test-data) + - [Run nf-core/raredisease with your data](#run-nf-core-raredisease-with-your-data) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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) + - [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-) + - [Best practices](#best-practices) + - [Troubleshooting](#troubleshooting) + - [Resource errors](#resource-errors) + - [For beginners](#for-beginners) + - [Advanced option on process level](#advanced-option-on-process-level) + - [Custom configuration](#custom-configuration) + - [Updating containers (advanced users)](#updating-containers--advanced-users-) + - [nf-core/configs](#nf-core-configs) + - [Run sentieon](#run-sentieon) + - [Azure Resource Requests](#azure-resource-requests) + - [Running in the background](#running-in-the-background) + - [Nextflow memory requirements](#nextflow-memory-requirements) + +## Introduction nf-core/raredisease is a bioinformatics best-practice analysis pipeline to call, annotate and score variants from WGS/WES of rare disease patients. The pipeline is built using nextflow. -# Prerequisites +## Prerequisites 1. Install Nextflow (>=22.10.1) using the instructions [here.](https://nextflow.io/docs/latest/getstarted.html#installation) 2. Install one of the following technologies for full pipeline reproducibility: Docker, Singularity, Podman, Shifter or Charliecloud. > Almost all nf-core pipelines give you the option to use conda as well. However, some tools used in the raredisease pipeline do not have a conda package so we do not support conda at the moment. -# Run nf-core/raredisease with test data +## Run nf-core/raredisease with test data Before running the pipeline with your data, we recommend running it with the test dataset available [here](https://github.com/nf-core/test-datasets/tree/raredisease). @@ -64,7 +64,7 @@ nextflow run nf-core/raredisease \ The above command downloads the pipeline from github, caches it, and tests it on the test dataset. -> When you run the command again, it will fetch the pipeline from cache even if a latest version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. +> When you run the command again, it will fetch the pipeline from cache even if a more recent version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. Test profile runs the pipeline with a proband containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. @@ -77,7 +77,7 @@ work # Directory containing the nextflow working files # Other nextflow hidden files, like history of pipeline logs. ``` -# Run nf-core/raredisease with your data +## Run nf-core/raredisease with your data Running the pipeline involves three steps: @@ -85,7 +85,7 @@ Running the pipeline involves three steps: 2. Gather all required references 3. Supply samplesheet and references, and run the command -### Samplesheet +#### Samplesheet A samplesheet is used to pass the information about the sample(s), such as the path to the fastq files and other meta data (gender, phenotype, etc.,) to the pipeline in csv format. @@ -114,7 +114,7 @@ It is also possible to include multiple runs of the same sample in a samplesheet If you would like to see more examples of what a typical samplesheet looks like for a singleton and a trio, follow these links, [singleton](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_single.csv) and [trio](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_trio.csv). -### Reference files and parameters +#### Reference files and parameters In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). @@ -131,11 +131,13 @@ nf-core/raredisease consists of several tools used for various purposes. For con 7. SV annotation & ranking (svdb query, ensemblvep, genmod) 8. Mitochondrial analysis +> We have only listed the groups that require at least one input from the user. For example, the pipeline also runs smncopynumbercaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check [README](../README.md). + The mandatory and optional parameters for each category are tabulated below. > Alignment, qc stats, repeat expansions, snv & sv variant calling are run by default. Hence, the mandatory parameters used by those features will always have to be provided to the pipeline. -#### 1. Alignment +##### 1. Alignment | Mandatory | Optional | | ------------------- | --------------------------- | @@ -144,11 +146,11 @@ The mandatory and optional parameters for each category are tabulated below. | platform | known_dbsnp3 | | | known_dbsnp_tbi3 | -1Default value is bwamem2, but if you have a valid license for sentieon, you have the option to use sentieon as well. -2fasta_fai and bwamem2_index, if not provided by the user, will be generated by the pipeline when necessary. -3Used only by sentieon. +1Default value is bwamem2, but if you have a valid license for sentieon, you have the option to use sentieon as well.
+2fasta_fai and bwamem2_index, if not provided by the user, will be generated by the pipeline when necessary.
+3Used only by sentieon.
-#### 2. QC stats from the alignment files +##### 2. QC stats from the alignment files | Mandatory | Optional | | ------------------------------------------------------------ | -------- | @@ -158,13 +160,13 @@ The mandatory and optional parameters for each category are tabulated below. 1 If a target_bed file is provided, bait_intervals and target_intervals can be generated by the pipeline. -#### 3. Repeat expansions +##### 3. Repeat expansions | Mandatory | Optional | | --------------- | -------- | | variant_catalog | | -#### 4. Variant calling - SNV +##### 4. Variant calling - SNV | Mandatory | Optional | | -------------------------- | --------------------------- | @@ -173,34 +175,36 @@ The mandatory and optional parameters for each category are tabulated below. | analysis_type 3 | call_interval2 | | | known_dbsnp_tbi2 | -1Default variant caller is DeepVariant, but you have the option to use sentieon as well. -2These parameters are only used by sentieon. -3Default is WGS, but you have the option to choose WES as well. +1Default variant caller is DeepVariant, but you have the option to use sentieon as well.
+2These parameters are only used by sentieon.
+3Default is WGS, but you have the option to choose WES as well.
-#### 5. Variant calling - Structural variants +##### 5. Variant calling - Structural variants | Mandatory | Optional | | --------- | ---------- | | | target_bed | | | bwa_index | -#### 6. SNV annotation & Ranking +##### 6. SNV annotation & Ranking | Mandatory | Optional | | ----------------------------- | ------------------------------ | | genome1 | gnomad_af4 | | vcfanno_resources2 | reduced_penetrance5 | | vcfanno_toml3 | vcfanno_lua | -| vep_cache_version | vep_filters | -| vep_cache | | +| vep_cache_version | vep_filters6 | +| vep_cache | score_config_snv7 | -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/ramprasadn/test-datasets/blob/raredisease/reference/vcfanno_resources.txt). -3Path to a vcfanno configration file. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/vcfanno_config.toml). -4Gnomad vcf file can be downloaded from here https://gnomad.broadinstitute.org/downloads. -5Used by genmod while ranking the variants. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/reduced_penetrance.tsv). +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).
+3Path to a vcfanno configration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
+4Gnomad vcf file can be downloaded from here https://gnomad.broadinstitute.org/downloads.
+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(HGNC ids) that is used to split the variants into a 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).
-#### 7. SV annotation & Ranking +##### 7. SV annotation & Ranking | Mandatory | Optional | | -------------------------- | ------------------ | @@ -209,9 +213,9 @@ The mandatory and optional parameters for each category are tabulated below. | vep_cache_version | vep_filters | | vep_cache | | -1 A csv file that describes the databases(vcfs) used by svdb for annotating structural variants. Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). Information about the column headers can be found [here](https://github.com/J35P312/SVDB#Query). +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 +##### 8. Mitochondrial analysis | Mandatory | Optional | | ------------------------------- | -------- | @@ -226,13 +230,13 @@ The mandatory and optional parameters for each category are tabulated below. | vep_cache_version | | | vep_cache | | -1 Can be generated by GATK's [ShiftFasta](https://gatk.broadinstitute.org/hc/en-us/articles/9570501436827-ShiftFasta-BETA-). Sample file [here](https://github.com/ramprasadn/test-datasets/blob/raredisease/reference/mt_shift8000.back_chain). +1 Can 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). -### Run the pipeline +#### Run the pipeline You can directly supply the parameters in the command line (cli) or use a config file from which the pipeline can import the parameters. -#### Direct input in cli +##### Direct input in cli All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed using the cli. For example, you can provide the samplesheet, reference fasta, and turn off annotations for SNVs and SVs by running, @@ -247,7 +251,7 @@ nextflow run nf-core/raredisease \ --outdir ``` -#### Import from a config file (recommended) +##### Import from a config file (recommended) To input or change the default parameters, we recommend using a config file instead. Create a config file that contains all the parameters and supply that file as shown below. @@ -261,7 +265,7 @@ nextflow run nf-core/raredisease \ A sample config file can be found [here](https://github.com/nf-core/raredisease/blob/dev/conf/test.config). -# Best practices +## Best practices - **Singularity cache:** If you are using singularity, use the nf-core download command to download images first, before running the pipeline. Define [NXF_SINGULARITY_CACHEDIR](https://nextflow.io/docs/latest/config.html?highlight=nxf_singularity_cachedir#environment-variables) or singularity.cacheDir Nextflow options to store and re-use the images from a central location for future pipeline runs. @@ -277,9 +281,9 @@ nextflow pull nf-core/raredisease - **Restart a previous run:** Add `-resume` to your command when restarting a pipeline. Nextflow will use cached results from any pipeline steps where inputs are the same, and resume the run from where it terminated previously. For input to be considered the same, names and the files' contents must be identical. For more info about `-resume`, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. -# Troubleshooting +## Troubleshooting -### Resource errors +#### Resource errors Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/raredisease/blob/dev/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. @@ -317,11 +321,11 @@ Work dir: Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` ``` -#### For beginners +##### For beginners nf-core/raredisease provides you with options to increase the amount of CPUs(`--max_cpus`), memory(`--max_memory`), and time (`--max_time`) for the whole pipeline. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of raredisease](https://nf-co.re/raredisease/dev/parameters) and click `show hidden params` button in the right panel to get the default value for `--max_memory`. Run the pipeline with updated max_memory value `--max_memory xxxGB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. -#### Advanced option on process level +##### Advanced option on process level To bypass this error you would need to find exactly which resources are set by the `DEEPVARIANT` process. The quickest way is to search for `process DEEPAVARIANT` in the [nf-core/raredisease Github repo](https://github.com/nf-core/raredisease/search?q=process+DEEPVARIANT). We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so, based on the search results, the file we want is `modules/nf-core/deepvariant/main.nf`. @@ -342,9 +346,9 @@ process { > > If you get a warning suggesting that the process selector isn't recognised check that the process name has been specified correctly. -# Custom configuration +## Custom configuration -### Updating containers (advanced users) +#### Updating containers (advanced users) The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. @@ -384,7 +388,7 @@ The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementatio > **NB:** If you wish to periodically update individual tool-specific results (e.g. Pangolin) generated by the pipeline then you must ensure to keep the `work/` directory otherwise the `-resume` ability of the pipeline will be compromised and it will restart from scratch. -### nf-core/configs +#### nf-core/configs In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. @@ -392,7 +396,7 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Run sentieon +### Run sentieon To use sentieon you have to: @@ -408,7 +412,7 @@ nextflow secrets set SENTIEON_LICENSE_BASE64 If you are using nextflow secrets, you have to set the environment variable `NXF_ENABLE_SECRETS` to true. This will see to it that the pipeline can retrieve the secret from nextflow's secrets store during the pipeline execution. Keep in mind that versions of nextflow Version 22.09.2-edge and onwards have NXF_ENABLE_SECRETS to true by default. If you are not using secrets set `NXF_ENABLE_SECRETS` to false, but make sure that the environmental variable [`SENTIEON_LICENSE`](`NXF_ENABLE_SECRETS`) is set to reflect the value of your license server on your machine. -## Azure Resource Requests +### Azure Resource Requests To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. @@ -416,7 +420,7 @@ We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by de Note that the choice of VM size depends on your quota and the overall workload during the analysis. For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). -## Running in the background +### Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. @@ -425,7 +429,7 @@ The Nextflow `-bg` flag launches Nextflow in the background, detached from your Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). -## Nextflow memory requirements +### Nextflow memory requirements In some cases, the Nextflow Java virtual machines can start to request a large amount of memory. We recommend adding the following line to your environment to limit this (typically in `~/.bashrc` or `~./bash_profile`): From b1962d3cb9d733f4b0772e0b67fe04d342f15586 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:00:27 +0100 Subject: [PATCH 1022/1921] update align subworkflows --- subworkflows/local/alignment/align_bwamem2.nf | 28 +++++++++---------- .../local/alignment/align_sentieon.nf | 24 ++++++++-------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 4e749a01..774089b3 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: - reads_input // channel: [ val(meta), reads_input ] - index // channel: [ /path/to/bwamem2/index/ ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - platform // params.platform + ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] + ch_index // channel: [mandatory] [ path(bwamem2_index) ] + ch_fasta // channel: [mandatory] [ path(genome.fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] + val_platform // string: [mandatory] val(platform) main: ch_versions = Channel.empty() // Map, sort, and index - BWAMEM2_MEM ( reads_input, index, true ) + BWAMEM2_MEM ( ch_reads_input, ch_index, true ) SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) @@ -35,7 +35,7 @@ workflow ALIGN_BWAMEM2 { .map{ meta, bam -> new_meta = meta.clone() new_meta.id = new_meta.id.split('_')[0] - new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" + new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + val_platform + "\\tSM:" + new_meta.id + "\'" [new_meta, bam] } .groupTuple(by: 0) @@ -46,11 +46,11 @@ workflow ALIGN_BWAMEM2 { .set{ bams } // If there are no samples to merge, skip the process - SAMTOOLS_MERGE ( bams.multiple, fasta, fai ) + SAMTOOLS_MERGE ( bams.multiple, ch_fasta, ch_fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) // Marking duplicates - MARKDUPLICATES ( prepared_bam , fasta, fai ) + MARKDUPLICATES ( prepared_bam , ch_fasta, ch_fai ) SAMTOOLS_INDEX_MARKDUP ( MARKDUPLICATES.out.bam ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) @@ -61,9 +61,9 @@ workflow ALIGN_BWAMEM2 { ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MARKDUP.out.versions.first()) emit: - stats = SAMTOOLS_STATS.out.stats - metrics = MARKDUPLICATES.out.metrics - marked_bam = MARKDUPLICATES.out.bam - marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai - versions = ch_versions + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] + metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), path(metrics) ] + marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), path(bam) ] + marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai // channel: [ val(meta), path(bai) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 4076b8dd..04a03d7c 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -11,13 +11,13 @@ include { SENTIEON_READWRITER } from '../../../modules/local/sentieon/readwr workflow ALIGN_SENTIEON { take: - reads_input // channel: [ val(meta), reads_input ] - fasta // path: genome.fasta - fai // path: genome.fai - index // channel: [ /path/to/bwamem2/index/ ] - known_dbsnp // path: params.known_dbsnp - known_dbsnp_tbi // path: params.known_dbsnp - platform // value: params.platform + ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] + ch_fasta // channel: [mandatory] [ path(genome.fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] + ch_index // channel: [mandatory] [ path(bwamem2_index) ] + ch_known_dbsnp // channel: [mandatory] [ path(known_dbsnp) ] + ch_known_dbsnp_tbi // channel: [mandatory] [ path(known_dbsnp_tbi) ] + val_platform // string: [mandatory] val(platform) main: ch_versions = Channel.empty() @@ -25,7 +25,7 @@ workflow ALIGN_SENTIEON { ch_bqsr_bai = Channel.empty() ch_bqsr_csv = Channel.empty() - SENTIEON_BWAMEM ( reads_input, fasta, fai, index ) + SENTIEON_BWAMEM ( ch_reads_input, ch_fasta, ch_fai, ch_index ) SENTIEON_BWAMEM.out .bam @@ -33,7 +33,7 @@ workflow ALIGN_SENTIEON { .map{ meta, bam, bai -> new_meta = meta.clone() new_meta.id = new_meta.id.split('_')[0] - new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + platform + "\\tSM:" + new_meta.id + "\'" + new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + val_platform + "\\tSM:" + new_meta.id + "\'" [new_meta, bam, bai] } .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] @@ -46,7 +46,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, fasta, fai ) + SENTIEON_DATAMETRICS (ch_bam_bai, ch_fasta, ch_fai ) SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) @@ -55,13 +55,13 @@ workflow ALIGN_SENTIEON { .join(SENTIEON_LOCUSCOLLECTOR.out.score_idx) .set { ch_bam_bai_score } - SENTIEON_DEDUP ( ch_bam_bai_score, fasta, fai ) + SENTIEON_DEDUP ( ch_bam_bai_score, ch_fasta, ch_fai ) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam .join(SENTIEON_DEDUP.out.bai) .set { ch_dedup_bam_bai } - SENTIEON_BQSR ( ch_dedup_bam_bai, fasta, fai, known_dbsnp, known_dbsnp_tbi ) + SENTIEON_BQSR ( ch_dedup_bam_bai, ch_fasta, ch_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 From 27c3d4f41469a919db117d3c38a84539e731fe9a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 11 Mar 2023 17:40:38 +0100 Subject: [PATCH 1023/1921] simplify some ternary operators --- workflows/raredisease.nf | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eec9ba20..e09615e3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -216,34 +216,34 @@ workflow RAREDISEASE { // Gather built indices or get them from the params ch_bait_intervals = ch_references.bait_intervals ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).map {it -> [[id:it[0].simpleName], it]}.collect() - : ( ch_references.bwa_index ?: Channel.empty() ) + : 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 ?: Channel.empty() ) + : ch_references.bwa_index_mt_shift ch_bwamem2_index = params.bwamem2_index ? Channel.fromPath(params.bwamem2_index).map {it -> [[id:it[0].simpleName], it]}.collect() - : ( ch_references.bwamem2_index ?: Channel.empty() ) + : 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 ?: Channel.empty() ) + : ch_references.bwamem2_index_mt_shift 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 ?: Channel.empty() ) + : ch_references.fasta_fai ch_genome_fai_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : ( ch_references.fasta_fai_meta ?: Channel.empty() ) + : 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 ?: Channel.empty() ) + : ch_references.fasta_fai_mt_shift ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() - : ( ch_references.gnomad_af_idx ?: Channel.empty() ) + : 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_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf : Channel.value([]) 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 ?: Channel.empty() ) + : ch_references.known_dbsnp_tbi.ifEmpty([[],[]]) ch_sequence_dictionary_no_meta = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() - : ( ch_references.sequence_dict ?: Channel.empty() ) + : 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 ?: Channel.empty() ) + : ch_references.sequence_dict_meta ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).collect() - : ( ch_references.sequence_dict_mt_shift ?: Channel.empty() ) + : 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.endsWith("tar.gz") ? ch_references.vep_resources From cf77d1df70ed3d1df761a9a6f77e32b40df24fc4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 11 Mar 2023 22:15:49 +0100 Subject: [PATCH 1024/1921] align sentieon --- .../local/alignment/align_sentieon.nf | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 04a03d7c..e1b484ba 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -74,16 +74,16 @@ workflow ALIGN_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) emit: - marked_bam = SENTIEON_DEDUP.out.bam - marked_bai = SENTIEON_DEDUP.out.bai - recal_bam = ch_bqsr_bam.ifEmpty(null) - recal_bai = ch_bqsr_bai.ifEmpty(null) - recal_csv = ch_bqsr_csv.ifEmpty(null) - mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) - qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) - gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) - gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) - aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) - is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) - versions = ch_versions + marked_bam = SENTIEON_DEDUP.out.bam // channel: [ val(meta), path(bam) ] + marked_bai = SENTIEON_DEDUP.out.bai // channel: [ val(meta), path(bai) ] + recal_bam = ch_bqsr_bam.ifEmpty(null) // channel: [ val(meta), path(bam) ] + recal_bai = ch_bqsr_bai.ifEmpty(null) // channel: [ val(meta), path(bai) ] + recal_csv = ch_bqsr_csv.ifEmpty(null) // channel: [ val(meta), path(csv) ] + mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) // channel: [ val(meta), path(mq_metrics) ] + qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) // channel: [ val(meta), path(qd_metrics) ] + gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) // channel: [ val(meta), path(gc_metrics) ] + gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) // channel: [ val(meta), path(gc_summary) ] + aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) // channel: [ val(meta), path(aln_metrics) ] + is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) // channel: [ val(meta), path(is_metrics) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From d57316f6e78185b9833037f0cdfb48d7f2e5df4a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 00:25:15 +0100 Subject: [PATCH 1025/1921] mito subs --- subworkflows/local/alignment/align_bwamem2.nf | 2 +- .../local/alignment/align_sentieon.nf | 2 +- subworkflows/local/analyse_MT.nf | 128 +++++++++--------- .../local/mitochondria/align_and_call_MT.nf | 46 +++---- .../mitochondria/convert_mt_bam_to_fastq.nf | 16 +-- .../local/mitochondria/merge_annotate_MT.nf | 64 ++++----- 6 files changed, 129 insertions(+), 129 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 774089b3..293f02c3 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -14,7 +14,7 @@ workflow ALIGN_BWAMEM2 { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] ch_index // channel: [mandatory] [ path(bwamem2_index) ] - ch_fasta // channel: [mandatory] [ path(genome.fasta) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] val_platform // string: [mandatory] val(platform) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index e1b484ba..437141ff 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -12,7 +12,7 @@ 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(genome.fasta) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] ch_index // channel: [mandatory] [ path(bwamem2_index) ] ch_known_dbsnp // channel: [mandatory] [ path(known_dbsnp) ] diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 5b6c38de..397576b7 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -9,85 +9,85 @@ include { MERGE_ANNOTATE_MT } from './mitochondria/ workflow ANALYSE_MT { take: - bam // channel: [ val(meta), file(bam), file(bai) ] - genome_bwa_index // channel: [ /path/to/bwa/index/ ] - genome_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] - genome_fasta_meta // channel: [ [], genome.fasta ] - genome_fasta_no_meta // channel: [ genome.fasta ] - genome_dict_meta // channel: [ genome.dict ] - genome_dict_no_meta // channel: [ genome.dict ] - genome_fai // channel: [ genome.fai ] - mt_intervals // channel: [ file(non_control_region.chrM.interval_list) ] - shift_mt_bwa_index // channel: [ /path/to/bwa/index/ ] - shift_mt_bwamem2_index // channel: [ /path/to/bwamem2/index/ ] - shift_mt_fasta // channel: [ genome.fasta ] - shift_mt_dict // channel: [ genome.dict ] - shift_mt_fai // channel: [ genome.fai ] - shift_mt_intervals // channel: [ file(control_region_shifted.chrM.interval_list) ] - shift_mt_backchain // channel: [ file(shift.back_chain) ] - vcfanno_resources - vcfanno_toml - vep_genome - vep_cache_version - vep_cache - case_info // channel: [ val(case_info) ] + ch_bam // channel: [mandatory] [ val(meta), file(bam), file(bai) ] + 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_fai // channel: [mandatory] [ path(fai) ] + 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) ] main: ch_versions = Channel.empty() // PREPARING READS FOR MT ALIGNMENT CONVERT_MT_BAM_TO_FASTQ ( - bam, - genome_fasta_meta, - genome_fai, - genome_dict_no_meta + ch_bam, + ch_genome_fasta_meta, + ch_genome_fai, + ch_genome_dict_no_meta ) // MT ALIGNMENT AND VARIANT CALLING ALIGN_AND_CALL_MT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, - genome_bwa_index, - genome_bwamem2_index, - genome_fasta_no_meta, - genome_dict_no_meta, - genome_fai, - mt_intervals + ch_genome_bwa_index, + ch_genome_bwamem2_index, + ch_genome_fasta_no_meta, + ch_genome_dict_no_meta, + ch_genome_fai, + ch_mt_intervals ) ALIGN_AND_CALL_MT_SHIFT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, - shift_mt_bwa_index, - shift_mt_bwamem2_index, - shift_mt_fasta, - shift_mt_dict, - shift_mt_fai, - shift_mt_intervals + 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 ) // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT PICARD_LIFTOVERVCF ( ALIGN_AND_CALL_MT_SHIFT.out.vcf, - genome_dict_no_meta, - shift_mt_backchain, - genome_fasta_no_meta + ch_genome_dict_no_meta, + ch_shift_mt_backchain, + ch_genome_fasta_no_meta ) // MT MERGE AND ANNOTATE VARIANTS MERGE_ANNOTATE_MT( ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, - genome_fasta_no_meta, - genome_dict_meta, - genome_dict_no_meta, - genome_fai, - vcfanno_resources, - vcfanno_toml, - vep_genome, - vep_cache_version, - vep_cache, - case_info + ch_genome_fasta_no_meta, + ch_genome_dict_meta, + ch_genome_dict_no_meta, + ch_genome_fai, + ch_vcfanno_resources, + ch_vcfanno_toml, + val_vep_genome, + val_vep_cache_version, + ch_vep_cache, + ch_case_info ) ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions) @@ -97,17 +97,17 @@ workflow ANALYSE_MT { ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: - vcf = MERGE_ANNOTATE_MT.out.vcf - tbi = MERGE_ANNOTATE_MT.out.tbi - stats = ALIGN_AND_CALL_MT.out.stats - filt_sats = ALIGN_AND_CALL_MT.out.filt_sats - stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats - filt_sats_sh = ALIGN_AND_CALL_MT_SHIFT.out.filt_sats - haplog = MERGE_ANNOTATE_MT.out.haplog - report = MERGE_ANNOTATE_MT.out.report - txt = ALIGN_AND_CALL_MT.out.txt - html = ALIGN_AND_CALL_MT.out.html - txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt - html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html - versions = ch_versions + 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) ] + 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) ] } diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 5a64cf3b..c138a4d9 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -16,38 +16,38 @@ include { TABIX_TABIX as TABIX_TABIX_MT } fr workflow ALIGN_AND_CALL_MT { take: - fastq // channel: [ val(meta), path('*.fastq.gz') ] - ubam // channel: [ val(meta), path('*.bam') ] - index_bwa // channel: [ /path/to/bwamem2/index/ ] - index_bwamem2 // channel: [ /path/to/bwamem2/index/ ] - fasta // channel: [ genome.fasta ] - dict // channel: [ genome.dict ] - fai // channel: [ genome.fai ] - intervals_mt // channel: [ file(non_control_region.chrM.interval_list) ] + ch_fastq // channel: [mandatory] [ val(meta), [ path(reads) ] ] + ch_ubam // channel: [mandatory] [ val(meta), path(bam) ] + ch_index_bwa // channel: [mandatory for sentieon] [ path(index) ] + ch_index_bwamem2 // channel: [mandatory for bwamem2] [ path(index) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_dict // channel: [mandatory] [ path(dict) ] + ch_fai // channel: [mandatory] [ path(fai) ] + ch_intervals_mt // channel: [mandatory] [ path(interval_list) ] main: ch_versions = Channel.empty() - BWAMEM2_MEM_MT (fastq , index_bwamem2, true) + BWAMEM2_MEM_MT (ch_fastq , ch_index_bwamem2, true) - SENTIEON_BWAMEM_MT ( fastq, fasta, fai, index_bwa ) + SENTIEON_BWAMEM_MT ( ch_fastq, ch_fasta, ch_fai, ch_index_bwa ) ch_mt_bam = Channel.empty().mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam) - ch_fastq_ubam = ch_mt_bam.join(ubam, by: [0]) + ch_fastq_ubam = ch_mt_bam.join(ch_ubam, by: [0]) - GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, fasta, dict) + GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, ch_fasta, ch_dict) PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) - PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, fasta, fai) + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, ch_fasta, ch_fai) SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) - ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(intervals_mt) + ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(ch_intervals_mt) - GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, fasta, fai, dict, [], [], [],[]) + GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) // Haplocheck // TODO: probably it will be outside this subworkflow as we want to run @@ -62,7 +62,7 @@ workflow ALIGN_AND_CALL_MT { return [meta, vcf, tbi, stats, [], [], [], []] } - GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, fasta, fai, dict) + GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, ch_fasta, ch_fai, ch_dict) ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) @@ -75,11 +75,11 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) emit: - vcf = GATK4_FILTERMUTECTCALLS_MT.out.vcf - tbi = GATK4_FILTERMUTECTCALLS_MT.out.tbi - stats = GATK4_MUTECT2_MT.out.stats - filt_sats = GATK4_FILTERMUTECTCALLS_MT.out.stats - txt = HAPLOCHECK_MT.out.txt - html = HAPLOCHECK_MT.out.html - versions = ch_versions + 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) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index 81de9d19..537c84e6 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: - bam // channel: [ val(meta), file(bam), file(bai) ] - genome_fasta_meta // channel: [ [], genome.fasta ] - genome_fai // channel: [ genome.fai ] - genome_dict // channel: [ genome.dict ] + 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) ] main: ch_versions = Channel.empty() // Outputs bam containing only MT - GATK4_PRINTREADS_MT ( bam, genome_fasta_meta, genome_fai, genome_dict ) + GATK4_PRINTREADS_MT ( ch_bam, ch_genome_fasta_meta, ch_genome_fai, ch_genome_dict ) // Removes alignment information GATK4_REVERTSAM_MT ( GATK4_PRINTREADS_MT.out.bam ) @@ -30,7 +30,7 @@ workflow CONVERT_MT_BAM_TO_FASTQ { ch_versions = ch_versions.mix(GATK4_SAMTOFASTQ_MT.out.versions.first()) emit: - fastq = GATK4_SAMTOFASTQ_MT.out.fastq - bam = GATK4_REVERTSAM_MT.out.bam - versions = ch_versions // channel: [ versions.yml ] + fastq = GATK4_SAMTOFASTQ_MT.out.fastq // channel: [ val(meta), [ path(fastq) ] ] + bam = GATK4_REVERTSAM_MT.out.bam // channel: [ val(meta), path(bam) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index e594c97a..1b8367d9 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -18,41 +18,41 @@ include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO } from '../../. workflow MERGE_ANNOTATE_MT { take: - vcf1 // channel: [ val(meta), path('*.vcf.gz') ] - vcf2 // channel: [ val(meta), path('*.vcf.gz') ] - genome_fasta // channel: [ genome.fasta ] - genome_dict_meta // channel: [ genome.dict ] - genome_dict_no_meta // channel: [ genome.dict ] - genome_fai // channel: [ genome.fai ] - vcfanno_resources - vcfanno_toml - vep_genome - vep_cache_version - vep_cache - case_info // channel: [ val(case_info) ] + ch_vcf1 // channel: [mandatory] [ val(meta), path(vcf) ] + ch_vcf2 // channel: [mandatory] [ val(meta), path(vcf) ] + 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_fai // channel: [mandatory] [ path(fai) ] + 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() - ch_vcfs = vcf1 - .join(vcf2, remainder: true) + ch_vcfs = ch_vcf1 + .join(ch_vcf2, remainder: true) .map{ meta, vcf1, vcf2 -> [meta, [vcf1, vcf2]] } - GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, genome_dict_meta) + GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, ch_genome_dict_meta) // Filtering Variants GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf.join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, by:[0]).set { ch_filt_vcf } - GATK4_VARIANTFILTRATION_MT (ch_filt_vcf, genome_fasta, genome_fai, genome_dict_no_meta) + GATK4_VARIANTFILTRATION_MT (ch_filt_vcf, ch_genome_fasta, ch_genome_fai, ch_genome_dict_no_meta) // Spliting multiallelic calls GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]).set { ch_in_split } - SPLIT_MULTIALLELICS_MT (ch_in_split, genome_fasta) + SPLIT_MULTIALLELICS_MT (ch_in_split, ch_genome_fasta) TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) // Removing duplicates and merging if there is more than one sample SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi).set { ch_in_remdup } - REMOVE_DUPLICATES_MT(ch_in_remdup, genome_fasta) + REMOVE_DUPLICATES_MT(ch_in_remdup, ch_genome_fasta) TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) REMOVE_DUPLICATES_MT.out.vcf @@ -67,7 +67,7 @@ workflow MERGE_ANNOTATE_MT { .toList() .set { file_list_tbi } - case_info + ch_case_info .combine(file_list_vcf) .combine(file_list_tbi) .set { ch_rem_dup_vcf_tbi } @@ -82,8 +82,8 @@ workflow MERGE_ANNOTATE_MT { BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, [], - genome_fasta, - genome_fai) + 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) @@ -94,23 +94,23 @@ workflow MERGE_ANNOTATE_MT { // Annotating with ensembl Vep ENSEMBLVEP_MT( ch_in_vep, - vep_genome, + val_vep_genome, "homo_sapiens", - vep_cache_version, - vep_cache, - genome_fasta, + val_vep_cache_version, + ch_vep_cache, + ch_genome_fasta, []) // Running vcfanno TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) ch_in_vcfanno = ENSEMBLVEP_MT.out.vcf_gz.join(TABIX_TABIX_MT3.out.tbi, by: [0]) - VCFANNO_MT(ch_in_vcfanno, vcfanno_toml, [], vcfanno_resources) + VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) ZIP_TABIX_VCFANNO(VCFANNO_MT.out.vcf) // Prepare output ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } 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") @@ -124,9 +124,9 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: - haplog = HAPLOGREP2_CLASSIFY_MT.out.txt - vcf = ch_vcf_out - tbi = ch_tbi_out - report = ENSEMBLVEP_MT.out.report - versions = ch_versions // channel: [ versions.yml ] + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] + vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] + tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] + report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From b88f857dd501373abb07d5e44c5427552b09954d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 00:33:59 +0100 Subject: [PATCH 1026/1921] remove aligner --- subworkflows/local/align.nf | 49 ++++++++++++++++++------------------- workflows/raredisease.nf | 1 - 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 928a6a06..716e1db1 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -7,35 +7,34 @@ include { ALIGN_SENTIEON } from './alignment/align_sentieon' workflow ALIGN { take: - aligner // string: params.aligner - reads_input // channel: [ val(meta), reads_input ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - index_bwa // channel: [ /path/to/bwamem2/index/ ] - index_bwamem2 // channel: [ /path/to/bwamem2/index/ ] - known_dbsnp // channel: [ /path/to/known_dbsnp ] - known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] - platform // string: params.platform + ch_reads_input // channel: [mandatory] [ val(meta), [path(reads)] ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] + ch_index_bwa // channel: [mandatory] [ path(index) ] + ch_index_bwamem2 // channel: [mandatory] [ 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 main: ch_versions = Channel.empty() ALIGN_BWAMEM2 ( - reads_input, - index_bwamem2, - fasta, - fai, - platform + ch_reads_input, + ch_index_bwamem2, + ch_fasta, + ch_fai, + val_platform ) ALIGN_SENTIEON ( - reads_input, - fasta, - fai, - index_bwa, - known_dbsnp, - known_dbsnp_tbi, - platform + ch_reads_input, + ch_fasta, + ch_fai, + ch_index_bwa, + ch_known_dbsnp, + ch_known_dbsnp_tbi, + val_platform ) ch_marked_bam = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bam, ALIGN_SENTIEON.out.marked_bam) @@ -44,8 +43,8 @@ workflow ALIGN { ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) emit: - marked_bam = ch_marked_bam - marked_bai = ch_marked_bai - bam_bai = ch_bam_bai - versions = ch_versions + marked_bam = ch_marked_bam // channel: [ val(meta), path(bam) ] + marked_bai = ch_marked_bai // channel: [ val(meta), path(bai) ] + bam_bai = ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eec9ba20..340b43c2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -263,7 +263,6 @@ workflow RAREDISEASE { // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( - params.aligner, CHECK_INPUT.out.reads, ch_genome_fasta_no_meta, ch_genome_fai_no_meta, From 4334544782d1eb7d122935d2c08cbbf0745f4adc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 13:50:44 +0100 Subject: [PATCH 1027/1921] remove unused variables and subworkflows --- main.nf | 1 - nextflow_schema.json | 8 --- subworkflows/local/align.nf | 1 - subworkflows/local/prepare_references.nf | 4 -- .../local/preprocessing/prepare_vcf.nf | 52 ------------------- workflows/raredisease.nf | 8 --- 6 files changed, 74 deletions(-) delete mode 100644 subworkflows/local/preprocessing/prepare_vcf.nf diff --git a/main.nf b/main.nf index 14481bed..7e3a865a 100644 --- a/main.nf +++ b/main.nf @@ -25,7 +25,6 @@ params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') -params.gnomad_vcf = WorkflowMain.getGenomeAttribute(params, 'gnomad_vcf') params.intervals_wgs = WorkflowMain.getGenomeAttribute(params, 'intervals_wgs') params.intervals_y = WorkflowMain.getGenomeAttribute(params, 'intervals_y') params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp') diff --git a/nextflow_schema.json b/nextflow_schema.json index c7a9f47c..759512b5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -103,14 +103,6 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "gnomad_vcf": { - "type": "string", - "format": "path", - "fa_icon": "fas fa-bezier-curve", - "pattern": "^\\S+\\.vcf(\\.gz)?$", - "description": "Path to directory for gnomad vcf.", - "help_text": "Path to the gnomad annotations vcf file. If you don't provide one, gnomad annotations will not be used." - }, "gnomad_af": { "type": "string", "format": "path", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 928a6a06..b6e04f62 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -7,7 +7,6 @@ include { ALIGN_SENTIEON } from './alignment/align_sentieon' workflow ALIGN { take: - aligner // string: params.aligner reads_input // channel: [ val(meta), reads_input ] fasta // channel: [genome.fasta] fai // channel: [genome.fai] diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index e0677f39..a382dacf 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -6,7 +6,6 @@ include { BWA_INDEX as BWA_INDEX_GENOME } from '../../modul include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_SHIFT_MT } from '../../modules/nf-core/bwamem2/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' -include { CHECK_VCF } from './preprocessing/prepare_vcf' include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' 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' @@ -60,9 +59,6 @@ workflow PREPARE_REFERENCES { TABIX_PT(target_bed).tbi.set { ch_tbi } TABIX_PBT(target_bed).gz_tbi.set { ch_bgzip_tbi } - // Check if a vcf file is normalized and create index - CHECK_VCF(gnomad_vcf_in, fasta_no_meta) - // Generate bait and target intervals GATK_BILT(target_bed, GATK_SD.out.dict).interval_list GATK_ILT(GATK_BILT.out.interval_list) diff --git a/subworkflows/local/preprocessing/prepare_vcf.nf b/subworkflows/local/preprocessing/prepare_vcf.nf deleted file mode 100644 index 5488e052..00000000 --- a/subworkflows/local/preprocessing/prepare_vcf.nf +++ /dev/null @@ -1,52 +0,0 @@ -// -// Prepare reference vcf files -// - -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_PV } from '../../../modules/nf-core/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_PV } from '../../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_PV } from '../../../modules/nf-core/tabix/tabix/main' -include { CHECK_INPUT_VCF } from '../../../modules/local/check_input_vcf' - -workflow CHECK_VCF { - take: - vcf_file // file: vcf file - fasta // path(fasta) - - main: - ch_versions = Channel.empty() - - CHECK_INPUT_VCF( vcf_file ).csv - .splitCsv( header:true ) - .map { row -> - def id = "${row.id}" - def filepath = "${row.filepath}" - def processed = "${row.processed}" - tuple(id,filepath,processed) - } - .branch { id, filepath, processed -> - processed: processed == 'yes' - return [['id':id],filepath] - unprocessed: processed == 'no' - return [['id':id],filepath] - } - .set { ch_vcfs_norm } - - SPLIT_MULTIALLELICS_PV (ch_vcfs_norm.unprocessed, fasta) - - REMOVE_DUPLICATES_PV (SPLIT_MULTIALLELICS_PV.out.vcf, fasta) - .vcf - .set { ch_vcfs_rmdup } - - vcf_out = ch_vcfs_rmdup.mix( ch_vcfs_norm.processed ) - - TABIX_PV (vcf_out) - - ch_versions = ch_versions.mix(CHECK_INPUT_VCF.out.versions) - ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_PV.out.versions) - ch_versions = ch_versions.mix(REMOVE_DUPLICATES_PV.out.versions) - - emit: - vcf = vcf_out // path: normalized_vcf - index = TABIX_PV.out.tbi - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eec9ba20..7c1d1b21 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -21,7 +21,6 @@ def checkPathParamList = [ params.gens_pon, params.gnomad_af, params.gnomad_af_idx, - params.gnomad_vcf, params.input, params.intervals_wgs, params.intervals_y, @@ -147,8 +146,6 @@ workflow RAREDISEASE { 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_gnomad_vcf_unprocessed = params.gnomad_vcf ? Channel.fromPath(params.gnomad_vcf).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() @@ -202,11 +199,9 @@ workflow RAREDISEASE { PREPARE_REFERENCES ( ch_genome_fasta_no_meta, ch_genome_fasta_meta, - params.fasta_fai, ch_mt_fasta_shift_no_meta, ch_mt_fasta_shift_meta, ch_gnomad_af_tab, - ch_gnomad_vcf_unprocessed, ch_known_dbsnp, ch_target_bed_unprocessed, ch_vep_cache_unprocessed @@ -234,8 +229,6 @@ workflow RAREDISEASE { : ( ch_references.gnomad_af_idx ?: Channel.empty() ) 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_gnomad_vcf = params.gnomad_vcf ? ch_references.gnomad_vcf - : Channel.value([]) 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 ?: Channel.empty() ) ch_sequence_dictionary_no_meta = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() @@ -263,7 +256,6 @@ workflow RAREDISEASE { // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( - params.aligner, CHECK_INPUT.out.reads, ch_genome_fasta_no_meta, ch_genome_fai_no_meta, From 93ba63d73e5ff4b0b7b60fbd90eb6b31de79caaf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 14:00:30 +0100 Subject: [PATCH 1028/1921] remove mentions of check_vcf --- subworkflows/local/prepare_references.nf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index a382dacf..ed8ef721 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -25,11 +25,9 @@ workflow PREPARE_REFERENCES { take: fasta_no_meta // [mandatory] genome.fasta fasta_meta - fai // [optional ] genome.fai mt_fasta_shift_no_meta mt_fasta_shift_meta gnomad_af_tab - gnomad_vcf_in known_dbsnp target_bed vep_cache @@ -85,7 +83,6 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) - ch_versions = ch_versions.mix(CHECK_VCF.out.versions) ch_versions = ch_versions.mix(TABIX_PT.out.versions) ch_versions = ch_versions.mix(TABIX_PBT.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) @@ -103,8 +100,6 @@ workflow PREPARE_REFERENCES { fasta_fai_meta = SAMTOOLS_FAIDX_GENOME.out.fai.collect() fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] }.collect() gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() - gnomad_tbi = CHECK_VCF.out.index.collect() - gnomad_vcf = CHECK_VCF.out.vcf.collect() known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() sequence_dict = GATK_SD.out.dict.collect() sequence_dict_meta = GATK_SD.out.dict.map {it -> [[id:it[0].simpleName], it]}.collect() From 92dc6b61f2912db74d9aadef83ac8c4a330f6f6e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 18:03:17 +0100 Subject: [PATCH 1029/1921] prepare refs --- subworkflows/local/prepare_references.nf | 82 ++++++++++++------------ 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index ed8ef721..1b332812 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -23,14 +23,14 @@ include { UNTAR as UNTAR_VEP_CACHE } from '../../modul workflow PREPARE_REFERENCES { take: - fasta_no_meta // [mandatory] genome.fasta - fasta_meta - mt_fasta_shift_no_meta - mt_fasta_shift_meta - gnomad_af_tab - known_dbsnp - target_bed - vep_cache + 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) ] main: ch_versions = Channel.empty() @@ -40,25 +40,25 @@ workflow PREPARE_REFERENCES { ch_sentieonbwa = Channel.empty() // Genome indices - BWA_INDEX_GENOME(fasta_meta).index.set{ch_bwa} - BWAMEM2_INDEX_GENOME(fasta_meta) - BWAMEM2_INDEX_SHIFT_MT(mt_fasta_shift_meta) - SENTIEON_BWAINDEX_GENOME(fasta_meta).index.set{ch_sentieonbwa} - SENTIEON_BWAINDEX_SHIFT_MT(mt_fasta_shift_meta) - SAMTOOLS_FAIDX_GENOME(fasta_meta) - SAMTOOLS_FAIDX_SHIFT_MT(mt_fasta_shift_meta) - GATK_SD(fasta_no_meta) - GATK_SD_SHIFT_MT(mt_fasta_shift_no_meta) + 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) GET_CHROM_SIZES( SAMTOOLS_FAIDX_GENOME.out.fai ) // Vcf, tab and bed indices - TABIX_DBSNP(known_dbsnp) - TABIX_GNOMAD_AF(gnomad_af_tab) - TABIX_PT(target_bed).tbi.set { ch_tbi } - TABIX_PBT(target_bed).gz_tbi.set { ch_bgzip_tbi } + TABIX_DBSNP(ch_known_dbsnp) + 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 } // Generate bait and target intervals - GATK_BILT(target_bed, GATK_SD.out.dict).interval_list + GATK_BILT(ch_target_bed, GATK_SD.out.dict).interval_list GATK_ILT(GATK_BILT.out.interval_list) GATK_ILT.out.interval_list .collect{ it[1] } @@ -68,7 +68,7 @@ workflow PREPARE_REFERENCES { } .set { ch_bait_intervals_cat_in } CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) - UNTAR_VEP_CACHE (vep_cache) + UNTAR_VEP_CACHE (ch_vep_cache) // Gather versions ch_versions = ch_versions.mix(BWA_INDEX_GENOME.out.versions) @@ -90,24 +90,24 @@ 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() - bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() - bwa_index_mt_shift = SENTIEON_BWAINDEX_SHIFT_MT.out.index.collect() - bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() - bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() - chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() - fasta_fai = SAMTOOLS_FAIDX_GENOME.out.fai.map{ meta, fai -> [fai] }.collect() - fasta_fai_meta = SAMTOOLS_FAIDX_GENOME.out.fai.collect() - fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] }.collect() - gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() - known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() - sequence_dict = GATK_SD.out.dict.collect() - sequence_dict_meta = GATK_SD.out.dict.map {it -> [[id:it[0].simpleName], it]}.collect() - sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() - target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() - target_intervals = GATK_BILT.out.interval_list.collect{it[1]}.collect() - vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}collect() - versions = ch_versions + 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: [ path(index) ] + bwa_index_mt_shift = SENTIEON_BWAINDEX_SHIFT_MT.out.index.collect() // channel: [ path(index) ] + bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ path(index) ] + bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() // channel: [ 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) ] } From b507618bbefedd93ac09f004e91f3375064df42f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 21:10:50 +0100 Subject: [PATCH 1030/1921] add call sv subworkflows --- subworkflows/local/align.nf | 4 +-- subworkflows/local/alignment/align_bwamem2.nf | 2 +- .../local/alignment/align_sentieon.nf | 2 +- .../local/call_structural_variants.nf | 30 ++++++++-------- subworkflows/local/prepare_references.nf | 8 ++--- .../variant_calling/call_cnv_cnvpytor.nf | 22 ++++++------ .../local/variant_calling/call_sv_manta.nf | 36 +++++++++---------- .../local/variant_calling/call_sv_tiddit.nf | 16 ++++----- 8 files changed, 60 insertions(+), 60 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 716e1db1..e010926f 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -10,8 +10,8 @@ workflow ALIGN { ch_reads_input // channel: [mandatory] [ val(meta), [path(reads)] ] ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] - ch_index_bwa // channel: [mandatory] [ path(index) ] - ch_index_bwamem2 // channel: [mandatory] [ path(index) ] + 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) ] ch_known_dbsnp_tbi // channel: [optional; used by sentieon] [ path(known_dbsnp_tbi) ] val_platform // string: [mandatory] illumina or a different technology diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 293f02c3..8d78c6b2 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -13,7 +13,7 @@ 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] [ path(bwamem2_index) ] + ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] val_platform // string: [mandatory] val(platform) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 437141ff..3efc9faf 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -14,7 +14,7 @@ workflow ALIGN_SENTIEON { ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] - ch_index // channel: [mandatory] [ path(bwamem2_index) ] + ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] ch_known_dbsnp // channel: [mandatory] [ path(known_dbsnp) ] ch_known_dbsnp_tbi // channel: [mandatory] [ path(known_dbsnp_tbi) ] val_platform // string: [mandatory] val(platform) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index c0e5bcab..ed25db68 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -10,26 +10,26 @@ include { CALL_CNV_CNVPYTOR } from './variant_calling/call_cnv_cnvpytor' workflow CALL_STRUCTURAL_VARIANTS { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] - bam_bai // channel: [ val(meta), path(bam), path(bai) ] - bwa_index // channel: [ val(meta), path(bwa_index)] - fasta_no_meta // channel: [ path(genome.fasta) ] - fasta_meta // channel: [ val(meta), path(genome.fasta) ] - fai // channel: [ path(genome.fai) ] - case_info // channel: [ val(case_info) ] - target_bed // channel: [ path(target.bed) ] - cnvpytor_bins // channel: [ val("binsizes") ] + 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) ] + val_cnvpytor_bins // string: [mandatory] binsizes for cnvpytor default: 1000 main: ch_versions = Channel.empty() - CALL_SV_MANTA (bam, bai, fasta_no_meta, fai, case_info, target_bed) + CALL_SV_MANTA (ch_bam, ch_bai, ch_fasta_no_meta, ch_fai, ch_case_info, ch_target_bed) .diploid_sv_vcf .collect{it[1]} .set{ manta_vcf } - CALL_SV_TIDDIT (bam_bai, fasta_meta, bwa_index, case_info) + CALL_SV_TIDDIT (ch_bam_bai, ch_fasta_meta, ch_bwa_index, ch_case_info) .vcf .collect{it[1]} .set { tiddit_vcf } @@ -53,7 +53,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .toList() .set { vcf_list } - case_info + ch_case_info .combine(vcf_list) .set { merge_input_vcfs } @@ -65,6 +65,6 @@ workflow CALL_STRUCTURAL_VARIANTS { // ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) emit: - vcf = SVDB_MERGE.out.vcf - versions = ch_versions + vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 1b332812..fdb090bb 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -91,10 +91,10 @@ workflow PREPARE_REFERENCES { 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: [ path(index) ] - bwa_index_mt_shift = SENTIEON_BWAINDEX_SHIFT_MT.out.index.collect() // channel: [ path(index) ] - bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ path(index) ] - bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() // channel: [ path(index) ] + 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) ] diff --git a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf index a39abb28..39cb62d0 100644 --- a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf +++ b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf @@ -10,18 +10,18 @@ include { CNVPYTOR_VIEW as VIEW } from '../../../modules/nf workflow CALL_CNV_CNVPYTOR { take: - bam // channel: [ val(meta), path(bam)] - bai // channel: [ val(meta), path(bai) ] - case_info // channel: [ case_id ] - binsizes // channel: [ val(binsize) ] - fasta // channel: [ path(fasta) ] - fai // channel: [ path(fai) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam)] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_case_info // channel: [mandatory] [ val(case_id) ] + val_binsizes // channel: [optional] [ val(binsize) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] main: ch_versions = Channel.empty() - GENERATE_PYTOR(bam.join(bai, by: [0]), fasta, fai) + GENERATE_PYTOR(ch_bam.join(ch_bai, by: [0]), ch_fasta, ch_fai) HISTOGRAMS(GENERATE_PYTOR.out.pytor, binsizes) @@ -35,11 +35,11 @@ workflow CALL_CNV_CNVPYTOR { .toList() .set { file_list } - case_info + ch_case_info .combine(file_list) .set { ch_pytor } - VIEW(ch_pytor, binsizes, "vcf") + VIEW(ch_pytor, val_binsizes, "vcf") ch_versions = ch_versions.mix(GENERATE_PYTOR.out.versions.first()) ch_versions = ch_versions.mix(HISTOGRAMS.out.versions.first()) @@ -48,7 +48,7 @@ workflow CALL_CNV_CNVPYTOR { ch_versions = ch_versions.mix(VIEW.out.versions.first()) emit: - candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(*.tsv) ] - versions = ch_versions // channel: [ versions.yml ] + candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index a0b2d0ee..9a10aa06 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -6,49 +6,49 @@ include { MANTA_GERMLINE as MANTA } from '../../../modules/nf-core/manta/germlin workflow CALL_SV_MANTA { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] - fasta // path(fasta) - fai // path(fai) - case_info // channel: [ case_id ] - bed // channel: [ val(meta), path(bed), path(bed_tbi) ] + 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) ] main: - bam.collect{it[1]} + ch_bam.collect{it[1]} .toList() .set { bam_file_list } - bai.collect{it[1]} + ch_bai.collect{it[1]} .toList() .set { bai_file_list } - bed.map { + ch_bed.map { id, bed_file, index -> return [bed_file, index]} .set { bed_input } if (params.analysis_type.toUpperCase() == "WGS" ) { - case_info.combine(bam_file_list) + ch_case_info.combine(bam_file_list) .combine(bai_file_list) .map { it -> it + [ [], [] ] } .set { manta_input } - MANTA ( manta_input, fasta, fai ) + MANTA ( manta_input, ch_fasta, ch_fai ) } else { case_info.combine(bam_file_list) .combine(bai_file_list) .combine(bed_input) .set { manta_input } - MANTA ( manta_input, fasta, fai ) + MANTA ( manta_input, ch_fasta, ch_fai ) } ch_versions = MANTA.out.versions emit: - candidate_small_indels_vcf = MANTA.out.candidate_small_indels_vcf - candidate_small_indels_vcf_tbi = MANTA.out.candidate_small_indels_vcf_tbi - candidate_sv_vcf = MANTA.out.candidate_sv_vcf - candidate_sv_vcf_tbi = MANTA.out.candidate_sv_vcf_tbi - diploid_sv_vcf = MANTA.out.diploid_sv_vcf - diploid_sv_vcf_tbi = MANTA.out.diploid_sv_vcf_tbi + candidate_small_indels_vcf = MANTA.out.candidate_small_indels_vcf // channel: [ val(meta), path(vcf) ] + candidate_small_indels_vcf_tbi = MANTA.out.candidate_small_indels_vcf_tbi // channel: [ val(meta), path(tbi) ] + candidate_sv_vcf = MANTA.out.candidate_sv_vcf // channel: [ val(meta), path(vcf) ] + candidate_sv_vcf_tbi = MANTA.out.candidate_sv_vcf_tbi // channel: [ val(meta), path(tbi) ] + diploid_sv_vcf = MANTA.out.diploid_sv_vcf // channel: [ val(meta), path(vcf) ] + diploid_sv_vcf_tbi = MANTA.out.diploid_sv_vcf_tbi // channel: [ val(meta), path(tbi) ] versions = ch_versions } diff --git a/subworkflows/local/variant_calling/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf index 945c07a9..6729d304 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: - bam // channel: [ val(meta), path(bam) ] - fasta // channel: [ val(meta), path(fasta) ] - index // [ val(meta), path(bwa_index)] - case_info // channel: [ case_id ] + 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) ] main: - TIDDIT_SV ( bam, fasta, index ) + TIDDIT_SV ( ch_bam_bai, ch_fasta, ch_index ) TIDDIT_SV.out .vcf @@ -21,7 +21,7 @@ workflow CALL_SV_TIDDIT { .toList() .set { vcf_file_list } - case_info + ch_case_info .combine(vcf_file_list) .set { merge_input_vcfs } @@ -31,6 +31,6 @@ workflow CALL_SV_TIDDIT { ch_versions = ch_versions.mix(SVDB_MERGE_TIDDIT.out.versions) emit: - vcf = SVDB_MERGE_TIDDIT.out.vcf - versions = ch_versions + vcf = SVDB_MERGE_TIDDIT.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 4b6485d445fc4dde1a2dc33b4d061f42c47b5531 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 21:12:02 +0100 Subject: [PATCH 1031/1921] upsate comments align mt --- subworkflows/local/mitochondria/align_and_call_MT.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index c138a4d9..85974af0 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -18,8 +18,8 @@ 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] [ path(index) ] - ch_index_bwamem2 // channel: [mandatory for bwamem2] [ path(index) ] + 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) ] From dd0b65eb23ac0edc686f242827a14e604eb1525f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 21:35:05 +0100 Subject: [PATCH 1032/1921] remove variant caller --- subworkflows/local/call_snv.nf | 1 - workflows/raredisease.nf | 1 - 2 files changed, 2 deletions(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index fed00674..37665f64 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -9,7 +9,6 @@ include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariant workflow CALL_SNV { take: - variant_caller // string: params.variant_caller input // channel: [ val(meta), path(bam), path(bai) ] fasta // channel: [genome.fasta] fai // channel: [genome.fai] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7c1d1b21..0804086c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -317,7 +317,6 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING CALL_SNV ( - params.variant_caller, ch_mapped.bam_bai, ch_genome_fasta_no_meta, ch_genome_fai_no_meta, From 121133524e0f677a095b83ccab9a920596e8842f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 22:23:11 +0100 Subject: [PATCH 1033/1921] call snv and allied subworkflows --- subworkflows/local/call_snv.nf | 46 +++++++++---------- .../variant_calling/call_snv_deepvariant.nf | 26 +++++------ .../variant_calling/call_snv_sentieon.nf | 22 ++++----- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 37665f64..c2555c79 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -9,14 +9,14 @@ include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariant workflow CALL_SNV { take: - input // channel: [ val(meta), path(bam), path(bai) ] - fasta // channel: [genome.fasta] - fai // channel: [genome.fai] - known_dbsnp // channel: [ /path/to/known_dbsnp ] - known_dbsnp_tbi // channel: [ /path/to/known_dbsnp_tbi ] - call_interval // channel: [ /path/to/call_intervals ] - ml_model // channel: [ /path/to/ml_model ] - case_info // channel: [ case_id ] + ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ 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) ] + ch_ml_model // channel: [mandatory] [ path(model) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() @@ -24,21 +24,21 @@ workflow CALL_SNV { ch_tabix = Channel.empty() CALL_SNV_DEEPVARIANT ( - input, - fasta, - fai, - case_info + ch_input, + ch_fasta, + ch_fai, + ch_case_info ) CALL_SNV_SENTIEON( - input, - fasta, - fai, - known_dbsnp, - known_dbsnp_tbi, - call_interval, - ml_model, - case_info + ch_input, + ch_fasta, + ch_fai, + ch_known_dbsnp, + ch_known_dbsnp_tbi, + ch_call_interval, + ch_ml_model, + ch_case_info ) ch_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) @@ -48,7 +48,7 @@ workflow CALL_SNV { ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) emit: - vcf = ch_vcf - tabix = ch_tabix - versions = ch_versions + vcf = ch_vcf // channel: [ val(meta), path(vcf) ] + tabix = ch_tabix // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index fcb89efc..7e2f4706 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -10,27 +10,27 @@ include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-co workflow CALL_SNV_DEEPVARIANT { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - fasta // path(fasta) - fai // path(fai) - case_info // channel: [ case_id ] + ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() - bam.map { meta, bam, bai -> + ch_bam.map { meta, bam, bai -> return [meta, bam, bai, []] } - .set { ch_bam } + .set { ch_deepvar_in } - DEEPVARIANT ( ch_bam, fasta, fai ) + DEEPVARIANT ( ch_deepvar_in, ch_fasta, ch_fai ) DEEPVARIANT.out.gvcf .collect{it[1]} .toList() .collect() .set { ch_file_list } - case_info + ch_case_info .combine(ch_file_list) .set { ch_gvcfs } @@ -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, fasta) + SPLIT_MULTIALLELICS_GL (ch_split_multi_in, ch_fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_GL.out.vcf .map{ meta, vcf -> return [meta, vcf, []] } - REMOVE_DUPLICATES_GL (ch_remove_dup_in, fasta) + REMOVE_DUPLICATES_GL (ch_remove_dup_in, ch_fasta) TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) @@ -55,7 +55,7 @@ workflow CALL_SNV_DEEPVARIANT { ch_versions = ch_versions.mix(TABIX_GL.out.versions) emit: - vcf = REMOVE_DUPLICATES_GL.out.vcf - tabix = TABIX_GL.out.tbi - versions = ch_versions + vcf = REMOVE_DUPLICATES_GL.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_GL.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index aef4eeeb..7b16a2e0 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -14,14 +14,14 @@ include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-c workflow CALL_SNV_SENTIEON { take: - input // channel: [ val(meta), bam, bai ] - fasta // path: genome.fasta - fai // path: genome.fai - dbsnp // path: params.known_dbsnp - dbsnp_index // path: params.known_dbsnp - call_interval // path: params.call_interval - ml_model // path: params.ml_model - case_info // channel: [ case_id ] + ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_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) ] + ch_ml_model // channel: [mandatory] [ path(model) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() @@ -76,7 +76,7 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(BCF_FILTER_ONE.out.versions.first()) emit: - vcf = REMOVE_DUPLICATES_SEN.out.vcf - tabix = TABIX_SEN.out.tbi - versions = ch_versions + vcf = REMOVE_DUPLICATES_SEN.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_SEN.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From cfa3195113af3291cbac1d7ec5fe8a82c86a07c7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 22:27:24 +0100 Subject: [PATCH 1034/1921] repeat expansions --- subworkflows/local/call_repeat_expansions.nf | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 4c1569b8..c6185824 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -15,25 +15,25 @@ include { TABIX_TABIX as TABIX_EXP_RENAME } from '../../modules/nf- workflow CALL_REPEAT_EXPANSIONS { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - variant_catalog // channel: /path/to/variant_catalog.json - case_info // channel: [ case_id ] - fasta // channel: /path/to/genome.fasta - fai // channel: /path/to/genome.fasta.fai + 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) ] main: ch_versions = Channel.empty() EXPANSIONHUNTER ( - bam, - fasta, - variant_catalog + ch_bam, + ch_fasta, + ch_variant_catalog ) // Fix header and rename sample BCFTOOLS_REHEADER_EXP ( EXPANSIONHUNTER.out.vcf.map{ meta, vcf -> [ meta, vcf, [] ]}, - fai + ch_fai ) RENAMESAMPLE_EXP ( BCFTOOLS_REHEADER_EXP.out.vcf ) TABIX_EXP_RENAME ( RENAMESAMPLE_EXP.out.vcf ) @@ -41,7 +41,7 @@ workflow CALL_REPEAT_EXPANSIONS { // Split multi allelelic SPLIT_MULTIALLELICS_EXP ( RENAMESAMPLE_EXP.out.vcf.join(TABIX_EXP_RENAME.out.tbi), - fasta + ch_fasta ) // Merge indiviual repeat expansions @@ -49,7 +49,7 @@ workflow CALL_REPEAT_EXPANSIONS { .collect{it[1]} .toList() .set {ch_exp_vcfs} - case_info + ch_case_info .combine(ch_exp_vcfs) .set {ch_svdb_merge_input} SVDB_MERGE_REPEATS ( ch_svdb_merge_input, [] ) @@ -73,6 +73,6 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) emit: - vcf = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi) // channel: [ val(meta), path(*.vcf.gz), path(*.vcf.gz.tbi) ] - versions = ch_versions // channel: [ versions.yml ] + vcf = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi) // channel: [ val(meta), path(vcf), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From bf8b37d0a49a58e3297ee7b4f9f09fec9013d76b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 12 Mar 2023 23:33:48 +0100 Subject: [PATCH 1035/1921] annotate svs --- .../local/annotate_consequence_pli.nf | 10 ++-- subworkflows/local/annotate_snvs.nf | 48 +++++++++---------- .../local/annotate_structural_variants.nf | 34 ++++++------- subworkflows/local/call_repeat_expansions.nf | 2 +- subworkflows/local/check_input.nf | 12 ++--- .../variant_calling/call_snv_sentieon.nf | 12 ++--- 6 files changed, 59 insertions(+), 59 deletions(-) diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index e03e0d45..d98e6040 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -7,13 +7,13 @@ include { ADD_MOST_SEVERE_PLI } from '../../modules/local/add_most_severe_pli' workflow ANNOTATE_CSQ_PLI { take: - vcf // channel: [ val(meta), vcf ] - variant_consequences // path: consequences.txt + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_variant_consequences // channel: [mandatory] [ path(consequences) ] main: ch_versions = Channel.empty() - ADD_MOST_SEVERE_CSQ (vcf, variant_consequences) + ADD_MOST_SEVERE_CSQ (ch_vcf, ch_variant_consequences) ADD_MOST_SEVERE_PLI (ADD_MOST_SEVERE_CSQ.out.vcf) @@ -21,6 +21,6 @@ workflow ANNOTATE_CSQ_PLI { ch_versions = ch_versions.mix(ADD_MOST_SEVERE_PLI.out.versions) emit: - vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf - versions = ch_versions + vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index d522f4f2..693c86b3 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -18,32 +18,32 @@ include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/ workflow ANNOTATE_SNVS { take: - vcf - vcfanno_resources - vcfanno_lua - vcfanno_toml - vep_genome - vep_cache_version - vep_cache - fasta - gnomad_af - split_intervals - samples + ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] + ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] + ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] + ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] + 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_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() ch_vcf_scatter_in = Channel.empty() ch_vep_in = Channel.empty() - vcf.map { meta, vcf, idx -> return [vcf, idx] }.set { ch_roh_vcfs } - samples + 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, gnomad_af, [], [], [], []) + BCFTOOLS_ROH (ch_roh_input, ch_gnomad_af, [], [], [], []) BCFTOOLS_ROH.out.roh .map { meta, roh -> @@ -53,11 +53,11 @@ workflow ANNOTATE_SNVS { } .set { ch_roh_rhocall } - RHOCALL_ANNOTATE (vcf, ch_roh_rhocall, []) + RHOCALL_ANNOTATE (ch_vcf, ch_roh_rhocall, []) ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) - VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, vcfanno_toml, vcfanno_lua, vcfanno_resources) + VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) @@ -67,15 +67,15 @@ 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(split_intervals)).vcf.set { ch_vep_in } + GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(ch_split_intervals)).vcf.set { ch_vep_in } ENSEMBLVEP_SNV( ch_vep_in, - vep_genome, + val_vep_genome, "homo_sapiens", - vep_cache_version, - vep_cache, - fasta, + val_vep_cache_version, + ch_vep_cache, + ch_fasta, [] ) @@ -109,7 +109,7 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: - vcf_ann = BCFTOOLS_CONCAT.out.vcf - tbi = TABIX_BCFTOOLS_CONCAT.out.tbi - versions = ch_versions + vcf_ann = BCFTOOLS_CONCAT.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = TABIX_BCFTOOLS_CONCAT.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index fc37c4eb..bb669537 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -10,18 +10,18 @@ include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/m workflow ANNOTATE_STRUCTURAL_VARIANTS { take: - vcf // channel: [ val(meta), path(vcf) ] - sv_dbs // file: dbs.csv - vep_genome - vep_cache_version - vep_cache - fasta // file: genome.fasta - seq_dict // file: genome.dict + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_sv_dbs // channel: [mandatory] [ val(csv) ] + 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) ] main: ch_versions = Channel.empty() - - Channel.fromPath(sv_dbs) + ch_vcf.view() + Channel.fromPath(ch_sv_dbs) .splitCsv ( header:true ) .multiMap { row -> vcf_dbs: row.filename @@ -33,7 +33,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { .set { ch_svdb_dbs } SVDB_QUERY( - vcf, + ch_vcf, ch_svdb_dbs.in_occs.toList(), ch_svdb_dbs.in_frqs.toList(), ch_svdb_dbs.out_occs.toList(), @@ -41,7 +41,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_svdb_dbs.vcf_dbs.toList() ) - PICARD_SORTVCF(SVDB_QUERY.out.vcf, fasta, seq_dict) + PICARD_SORTVCF(SVDB_QUERY.out.vcf, ch_fasta, ch_seq_dict) PICARD_SORTVCF.out.vcf.map { meta, vcf -> return [meta,vcf,[]] }.set { ch_sortvcf } @@ -49,11 +49,11 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ENSEMBLVEP_SV( BCFTOOLS_VIEW.out.vcf, - vep_genome, + val_vep_genome, "homo_sapiens", - vep_cache_version, - vep_cache, - fasta, + val_vep_cache_version, + ch_vep_cache, + ch_fasta, [] ) @@ -63,6 +63,6 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: - vcf_ann = ENSEMBLVEP_SV.out.vcf_gz - versions = ch_versions + vcf_ann = ENSEMBLVEP_SV.out.vcf_gz // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index c6185824..64e31a15 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -55,7 +55,7 @@ workflow CALL_REPEAT_EXPANSIONS { SVDB_MERGE_REPEATS ( ch_svdb_merge_input, [] ) // Annotate, compress and index - STRANGER ( SVDB_MERGE_REPEATS.out.vcf, variant_catalog ) + STRANGER ( SVDB_MERGE_REPEATS.out.vcf, ch_variant_catalog ) COMPRESS_STRANGER ( STRANGER.out.vcf.map{ meta, vcf -> [meta, vcf, [] ]}, [], [], [] diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index fa64498a..0af95445 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -6,10 +6,10 @@ include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' workflow CHECK_INPUT { take: - samplesheet // file: /path/to/samplesheet.csv + ch_samplesheet // channel: [mandatory] [ path(csv) ] main: - SAMPLESHEET_CHECK ( samplesheet ) + SAMPLESHEET_CHECK ( ch_samplesheet ) .csv .splitCsv ( header:true, sep:',' ) .set { sheet } @@ -20,10 +20,10 @@ workflow CHECK_INPUT { samples = sheet.map { create_samples_channel(it) } emit: - case_info // channel: [ case_id ] - reads // channel: [ val(meta), [ reads ] ] - samples // channel: [ sample_id, sex, phenotype, paternal_id, maternal_id, case_id ] - versions = SAMPLESHEET_CHECK.out.versions // channel: [ versions.yml ] + case_info // channel: [ val(case_info) ] + reads // channel: [ val(meta), [ path(reads) ] ] + samples // channel: [ val(sample_id), val(sex), val(phenotype), val(paternal_id), val(maternal_id), val(case_id) ] + versions = SAMPLESHEET_CHECK.out.versions // channel: [ path(versions.yml) ] } // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 7b16a2e0..1339d96d 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -26,9 +26,9 @@ workflow CALL_SNV_SENTIEON { main: ch_versions = Channel.empty() - SENTIEON_DNASCOPE ( input, fasta, fai, dbsnp, dbsnp_index, call_interval, ml_model ) + SENTIEON_DNASCOPE ( ch_input, ch_fasta, ch_fai, ch_dbsnp, ch_dbsnp_index, ch_call_interval, ch_ml_model ) - SENTIEON_DNAMODELAPPLY ( SENTIEON_DNASCOPE.out.vcf_index, fasta, fai, ml_model ) + SENTIEON_DNAMODELAPPLY ( SENTIEON_DNASCOPE.out.vcf_index, ch_fasta, ch_fai, ch_ml_model ) BCF_FILTER_ONE (SENTIEON_DNAMODELAPPLY.out.vcf ) @@ -40,7 +40,7 @@ workflow CALL_SNV_SENTIEON { .map { meta,vcf,tbi -> return [vcf,tbi] } .set { ch_vcf_idx } - case_info + ch_case_info .combine(ch_vcf_idx) .groupTuple() .branch{ // branch the channel into multiple channels (single, multiple) depending on size of list @@ -49,7 +49,7 @@ workflow CALL_SNV_SENTIEON { } .set{ ch_vcf_idx_merge_in } - BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple,[],fasta,fai) + BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple, [], ch_fasta, ch_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, fasta) + SPLIT_MULTIALLELICS_SEN(ch_vcf_idx_case, ch_fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_SEN.out.vcf .map{meta, vcf -> return [meta, vcf, []]} - REMOVE_DUPLICATES_SEN(ch_remove_dup_in, fasta) + REMOVE_DUPLICATES_SEN(ch_remove_dup_in, ch_fasta) TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) From 3eb33647f86ad3769a8b9661b874d283d26cacc5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 00:46:43 +0100 Subject: [PATCH 1036/1921] gens and call sv --- .../local/call_structural_variants.nf | 2 +- subworkflows/local/gens.nf | 30 +++++++++---------- subworkflows/local/qc_bam.nf | 22 +++++++------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index ed25db68..fa3eae61 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -19,7 +19,7 @@ workflow CALL_STRUCTURAL_VARIANTS { 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) ] - val_cnvpytor_bins // string: [mandatory] binsizes for cnvpytor default: 1000 + val_cnvpytor_bins // string: [optional] binsizes for cnvpytor default: 1000 main: ch_versions = Channel.empty() diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index da1f4ba7..95d6c5b5 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -8,31 +8,31 @@ include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' workflow GENS { take: - bam // channel: [ val(meta), path(bam), path(bai) ] - vcf // channel: [ val(meta), path(vcf) ] - fasta // path(fasta) - fai // path(fai) - interval_list // path(interval_list) - pon // path(pon) - gnomad_pos // path(gnomad_pos) - case_info // channel: [ val(case_info) ] - seq_dict // path: seq_dict + 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) ] main: ch_versions = Channel.empty() - COLLECTREADCOUNTS (bam, fasta, fai, seq_dict, interval_list) + COLLECTREADCOUNTS (ch_bam, ch_fasta, ch_fai, ch_seq_dict, ch_interval_list) - DENOISEREADCOUNTS (COLLECTREADCOUNTS.out.read_counts, pon) + DENOISEREADCOUNTS (COLLECTREADCOUNTS.out.read_counts, ch_pon) - GENS_GENERATE (DENOISEREADCOUNTS.out.standardized_read_counts, vcf.map { meta, vcf -> vcf }, gnomad_pos) + GENS_GENERATE (DENOISEREADCOUNTS.out.standardized_read_counts, ch_vcf.map { meta, vcf -> vcf }, ch_gnomad_pos) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions.first()) ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions.first()) ch_versions = ch_versions.mix(GENS_GENERATE.out.versions.first()) emit: - gens_cov_bed_gz = GENS_GENERATE.out.cov - gens_baf_bed_gz = GENS_GENERATE.out.baf - versions = ch_versions + gens_cov_bed_gz = GENS_GENERATE.out.cov // channel: [ val(meta), path(bed) ] + gens_baf_bed_gz = GENS_GENERATE.out.baf // channel: [ val(meta), path(bed) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 4d4e26d6..e76ce240 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -16,17 +16,17 @@ include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../m workflow QC_BAM { take: - bam // channel: [ val(meta), path(bam) ] - bai // channel: [ val(meta), path(bai) ] - bam_bai - fasta // path: genome.fasta - fai // path: genome.fasta.fai - bait_intervals // path: bait.intervals_list - target_intervals // path: target.intervals_list - chrom_sizes // path: chrom.sizes - intervals_wgs // path: genome.intervals_wgs - intervals_y // path: genome.intervals_y - aligner // string: params.aligner + 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_bait_intervals // channel: [mandatory] [ path(intervals_list) ] + ch_target_intervals // channel: [mandatory] [ path(intervals_list) ] + ch_chrom_sizes // channel: [mandatory] [ path(sizes) ] + ch_intervals_wgs // channel: [mandatory] [ path(intervals) ] + ch_intervals_y // channel: [mandatory] [ path(intervals) ] + ch_aligner // string: params.aligner main: ch_versions = Channel.empty() From 99d5ee5ef0ed9497211a48688bd688bdcae54a4c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 00:47:47 +0100 Subject: [PATCH 1037/1921] remove aligner from qc_bam sworkflow --- subworkflows/local/qc_bam.nf | 1 - workflows/raredisease.nf | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 4d4e26d6..a1627283 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -26,7 +26,6 @@ workflow QC_BAM { chrom_sizes // path: chrom.sizes intervals_wgs // path: genome.intervals_wgs intervals_y // path: genome.intervals_y - aligner // string: params.aligner main: ch_versions = Channel.empty() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0804086c..c25be005 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -279,8 +279,7 @@ workflow RAREDISEASE { ch_target_intervals, ch_chrom_sizes, ch_intervals_wgs, - ch_intervals_y, - params.aligner + ch_intervals_y ) ch_versions = ch_versions.mix(QC_BAM.out.versions) From 0baa335add9c1b7c5798257d3b10da72a26efb75 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 00:59:18 +0100 Subject: [PATCH 1038/1921] qc bam --- subworkflows/local/qc_bam.nf | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 348d7800..1e3d622c 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -30,17 +30,17 @@ workflow QC_BAM { main: ch_versions = Channel.empty() - PICARD_COLLECTMULTIPLEMETRICS (bam_bai, fasta, fai) + PICARD_COLLECTMULTIPLEMETRICS (ch_bam_bai, ch_fasta, ch_fai) - PICARD_COLLECTHSMETRICS (bam_bai, fasta, fai, bait_intervals, target_intervals) + PICARD_COLLECTHSMETRICS (ch_bam_bai, ch_fasta, ch_fai, ch_bait_intervals, ch_target_intervals) - QUALIMAP_BAMQC (bam, []) + QUALIMAP_BAMQC (ch_bam, []) - TIDDIT_COV (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, chrom_sizes) + UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, ch_chrom_sizes) - MOSDEPTH (bam_bai, Channel.value([[], []]), Channel.value([[], []])) + MOSDEPTH (ch_bam_bai, Channel.value([[], []]), Channel.value([[], []])) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) @@ -50,11 +50,11 @@ workflow QC_BAM { ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) // COLLECT WGS METRICS - PICARD_COLLECTWGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) - PICARD_COLLECTWGSMETRICS_Y ( bam_bai, fasta, fai, intervals_y ) + 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 ) - SENTIEON_WGSMETRICS ( bam_bai, fasta, fai, intervals_wgs ) - SENTIEON_WGSMETRICS_Y ( bam_bai, fasta, fai, 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 ) 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) @@ -65,11 +65,11 @@ workflow QC_BAM { emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap files) ] - tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(*.wig) ] - bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(*.bw) ] - d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(*.d4) ] + qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap_dir) ] + tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(wig) ] + bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(bw) ] + d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(d4) ] cov = ch_cov // channel: [ val(meta), path(metrics) ] cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions // channel: [ path(versions.yml) ] } From e0e2d0d0eee449c2abf63ab86437d7e3df8a8acd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 01:07:12 +0100 Subject: [PATCH 1039/1921] scatter --- subworkflows/local/scatter_genome.nf | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 5f136168..55e9c8cf 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -8,23 +8,24 @@ include { GATK4_SPLITINTERVALS } from '../../modules/nf-core/gatk4/splitinterval workflow SCATTER_GENOME { take: - dict - fai_meta // channel: [ val(meta), path(vcf) ] - fai_no_meta - fasta_no_meta + 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) ] main: ch_versions = Channel.empty() - BUILD_BED (fai_meta) + BUILD_BED (ch_fai_meta) - GATK4_SPLITINTERVALS(BUILD_BED.out.bed, fasta_no_meta, fai_no_meta, dict) + GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_fasta_no_meta, ch_fai_no_meta, ch_dict) ch_versions = ch_versions.mix(BUILD_BED.out.versions) ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) + GATK4_SPLITINTERVALS.out.split_intervals.view() emit: - bed = BUILD_BED.out.bed.collect() - split_intervals = GATK4_SPLITINTERVALS.out.split_intervals.map { meta, it -> it }.flatten().collate(1) - versions = ch_versions + bed = BUILD_BED.out.bed.collect() // channel: [ val(meta), path(bed) ] + split_intervals = GATK4_SPLITINTERVALS.out.split_intervals.map { meta, it -> it }.flatten().collate(1) // channel: [ val(meta), [ path(interval_lists) ] ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 13672eff9a8e43a13b3a0b84296fff571bf9c54a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 01:07:31 +0100 Subject: [PATCH 1040/1921] remove view --- subworkflows/local/scatter_genome.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 55e9c8cf..07a70e95 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -22,7 +22,6 @@ workflow SCATTER_GENOME { ch_versions = ch_versions.mix(BUILD_BED.out.versions) ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) - GATK4_SPLITINTERVALS.out.split_intervals.view() emit: bed = BUILD_BED.out.bed.collect() // channel: [ val(meta), path(bed) ] From add02bd70ae49cdaa7c4eecfbb3dce3682fbdf75 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 01:24:47 +0100 Subject: [PATCH 1041/1921] rank variants --- subworkflows/local/alignment/align_bwamem2.nf | 2 +- subworkflows/local/alignment/align_sentieon.nf | 6 +++--- subworkflows/local/rank_variants.nf | 18 +++++++++--------- .../local/variant_calling/call_cnv_cnvpytor.nf | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 8d78c6b2..1d71b388 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -16,7 +16,7 @@ workflow ALIGN_BWAMEM2 { ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] - val_platform // string: [mandatory] val(platform) + val_platform // string: [mandatory] default: illumina main: ch_versions = Channel.empty() diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 3efc9faf..9cafadf4 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -15,9 +15,9 @@ workflow ALIGN_SENTIEON { ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] - ch_known_dbsnp // channel: [mandatory] [ path(known_dbsnp) ] - ch_known_dbsnp_tbi // channel: [mandatory] [ path(known_dbsnp_tbi) ] - val_platform // string: [mandatory] val(platform) + ch_known_dbsnp // channel: [optional] [ path(known_dbsnp) ] + ch_known_dbsnp_tbi // channel: [optional] [ path(known_dbsnp_tbi) ] + val_platform // string: [mandatory] default: illumina main: ch_versions = Channel.empty() diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index 8fa405fd..f96197fc 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -10,19 +10,19 @@ include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' workflow RANK_VARIANTS { take: - vcf // channel: [ val(meta), path(vcf) ] - ped - reduced_penetrance - score_config + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_ped // channel: [mandatory] [ path(ped) ] + ch_reduced_penetrance // channel: [mandatory] [ path(pentrance) ] + ch_score_config // channel: [mandatory] [ path(ini) ] main: ch_versions = Channel.empty() - GENMOD_ANNOTATE(vcf) + GENMOD_ANNOTATE(ch_vcf) - GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ped, reduced_penetrance) + GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ch_ped, ch_reduced_penetrance) - GENMOD_SCORE(GENMOD_MODELS.out.vcf, ped, score_config) + GENMOD_SCORE(GENMOD_MODELS.out.vcf, ch_ped, ch_score_config) GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) @@ -32,6 +32,6 @@ workflow RANK_VARIANTS { ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) emit: - vcf = GENMOD_COMPOUND.out.vcf - versions = ch_versions + vcf = GENMOD_COMPOUND.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf index 39cb62d0..5b3b87f7 100644 --- a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf +++ b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf @@ -12,8 +12,8 @@ workflow CALL_CNV_CNVPYTOR { take: ch_bam // channel: [mandatory] [ val(meta), path(bam)] ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_case_info // channel: [mandatory] [ val(case_id) ] - val_binsizes // channel: [optional] [ val(binsize) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + val_binsizes // string: [optional] binsizes for cnvpytor default: 1000 ch_fasta // channel: [mandatory] [ path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] From 7e55c685d676f18282ee78290f54d9e382efc960 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Mar 2023 01:47:32 +0100 Subject: [PATCH 1042/1921] remove view --- subworkflows/local/annotate_structural_variants.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index bb669537..147fe0d0 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -20,7 +20,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() - ch_vcf.view() + Channel.fromPath(ch_sv_dbs) .splitCsv ( header:true ) .multiMap { row -> From 1631761189c412374a8567ed94bf4d00efe492c6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 00:20:25 +0100 Subject: [PATCH 1043/1921] align call qc --- conf/modules/align_bwamem2.config | 29 +++++------ conf/modules/align_sentieon.config | 22 +++------ conf/modules/call_snv_deepvariant.config | 18 ++----- conf/modules/call_snv_sentieon.config | 30 ++---------- conf/modules/qc_bam.config | 61 ++++++------------------ 5 files changed, 43 insertions(+), 117 deletions(-) diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config index 81b5e785..953dc038 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwamem2.config @@ -19,44 +19,37 @@ process { withName: '.*ALIGN_BWAMEM2:.*' { ext.when = params.aligner.equals("bwamem2") publishDir = [ - path: { "${params.outdir}/bwamem2" }, - mode: 'copy', - pattern: "*{stats,sorted_md.bam,sorted_md.bam.bai}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false ] } withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - publishDir = [ - path: { "${params.outdir}/bwamem2" }, - enabled: false, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] } withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { ext.args = '-s --remove-overlaps' - publishDir = [ - path: { "${params.outdir}/bwamem2" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] } withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { ext.prefix = { "${meta.id}_sorted_merged" } - publishDir = [ - enabled: false, - ] } withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ - path: { "${params.outdir}/bwamem2" }, + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_INDEX_MARKDUP' { + publishDir = [ + 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 56b96cac..ba575031 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -18,38 +18,32 @@ process { withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") + publishDir = [ + enabled: false + ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { ext.args = { "-M -K 10000000 -R ${meta.read_group} " } ext.prefix = { "${meta.id}.sorted" } - publishDir = [ - path: { "${params.outdir}/sentieon_align" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { publishDir = [ - path: { "${params.outdir}/sentieon_bam_metrics" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { publishDir = [ - path: { "${params.outdir}/sentieon_dedup" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { ext.args = { $params.rmdup ? "--rmdup" : '' } publishDir = [ - path: { "${params.outdir}/sentieon_dedup" }, + path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -57,9 +51,7 @@ process { withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BQSR' { publishDir = [ - path: { "${params.outdir}/sentieon_recal" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } } diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index 5825469c..65011577 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -19,37 +19,29 @@ process { withName: '.*CALL_SNV_DEEPVARIANT:.*' { ext.when = params.variant_caller.equals("deepvariant") + publishDir = [ + enabled: false + ] } withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } ext.prefix = { "${meta.id}_deepvar" } - publishDir = [ - path: { "${params.outdir}/deepvariant" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*CALL_SNV_DEEPVARIANT:GLNEXUS' { ext.args = '--config DeepVariant_unfiltered' - publishDir = [ - enabled: false - ] } withName: '.*CALL_SNV_DEEPVARIANT:SPLIT_MULTIALLELICS_GL' { ext.args = '--output-type z --multiallelics -both' - publishDir = [ - enabled: false - ] } withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - path: { "${params.outdir}/glnexus" }, + path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -57,7 +49,7 @@ process { withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { publishDir = [ - path: { "${params.outdir}/glnexus" }, + path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 5ad82181..3c73f6ca 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -18,6 +18,9 @@ process { withName: '.*CALL_SNV_SENTIEON:.*' { ext.when = params.variant_caller.equals("sentieon") + publishDir = [ + enabled: false + ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { @@ -26,55 +29,32 @@ process { params.variant_type ? "--var_type ${params.variant_type}" : '', params.pcrfree ? "--pcr_indel_model NONE" : '' ].join(" ") } - publishDir = [ - path: { "${params.outdir}/sentieon_dnascope" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { ext.prefix = { "${meta.id}_dnamodelapply" } - publishDir = [ - path: { "${params.outdir}/sentieon_dnamodelapply" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" ext.prefix = { "${meta.id}_mlfiltered_0.95" } - publishDir = [ - path: { "${params.outdir}/sentieon_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { ext.args = "-i FILTER='\"PASS\"' -m x -Oz" ext.prefix = { "${meta.id}_passed" } - publishDir = [ - path: { "${params.outdir}/sentieon_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - path: { "${params.outdir}/sentieon_normvcf" }, + path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -82,7 +62,7 @@ process { withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { publishDir = [ - path: { "${params.outdir}/sentieon_normvcf" }, + path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index cb1af0ea..360d479a 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -16,89 +16,58 @@ // process { - withName: '.*QC_BAM:PICARD_COLLECTMULTIPLEMETRICS' { + withName: '.*QC_BAM:.*' { publishDir = [ - path: { "${params.outdir}/bamqc_collectmultiplemetrics" }, + path: { "${params.outdir}/qc_bam" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } + withName: '.*QC_BAM:PICARD_COLLECTMULTIPLEMETRICS' { + ext.prefix = { "${meta.id}_multiplemetrics" } + } + withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { - publishDir = [ - path: { "${params.outdir}/bamqc/collecthsmetrics" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_hsmetrics" } } withName: '.*QC_BAM:QUALIMAP_BAMQC' { - publishDir = [ - path: { "${params.outdir}/bamqc_qualimap" }, - mode: params.publish_dir_mode, - ] + ext.prefix = { "${meta.id}_qualimap" } } withName: '.*QC_BAM:TIDDIT_COV' { ext.args = '-z 500 -w' - publishDir = [ - path: { "${params.outdir}/tiddit_coverage" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_tidditcov" } } withName: '.*QC_BAM:UCSC_WIGTOBIGWIG' { ext.args = '-clip' - publishDir = [ - path: { "${params.outdir}/tiddit_coverage" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_wigtobigwig" } } withName: '.*QC_BAM:MOSDEPTH' { ext.args = '--d4' - publishDir = [ - path: { "${params.outdir}/mosdepth" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_mosdepth" } } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { ext.when = params.aligner.equals("bwamem2") - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { ext.when = params.aligner.equals("bwamem2") - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_wgsmetrics_y" } } withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { ext.when = params.aligner.equals("sentieon") - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_wg" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { ext.when = params.aligner.equals("sentieon") - publishDir = [ - path: { "${params.outdir}/bamqc_collectwgsmetrics_y" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_wgsmetrics_y" } } } From f5e96b1c03add7ccaa286fdaaa4d1c098bda0b51 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 00:45:52 +0100 Subject: [PATCH 1044/1921] call sv snv --- conf/modules/align.config | 8 ++++++++ conf/modules/align_bwamem2.config | 3 --- conf/modules/align_sentieon.config | 16 ++++------------ conf/modules/call_snv.config | 10 ++++++++++ conf/modules/call_snv_deepvariant.config | 3 --- conf/modules/call_snv_sentieon.config | 4 +--- conf/modules/call_structural_variants.config | 10 +++++++++- conf/modules/call_sv_manta.config | 5 ----- conf/modules/call_sv_tiddit.config | 9 --------- 9 files changed, 32 insertions(+), 36 deletions(-) diff --git a/conf/modules/align.config b/conf/modules/align.config index 2812ef7f..be3fee28 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -10,3 +10,11 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ + +process{ + withName: '.*ALIGN:.*' { + publishDir = [ + enabled: false + ] + } +} diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config index 953dc038..c6310310 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwamem2.config @@ -18,9 +18,6 @@ process { withName: '.*ALIGN_BWAMEM2:.*' { ext.when = params.aligner.equals("bwamem2") - publishDir = [ - enabled: false - ] } withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index ba575031..549e2c6e 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -18,9 +18,6 @@ process { withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") - publishDir = [ - enabled: false - ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { @@ -29,19 +26,16 @@ process { } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { - publishDir = [ - enabled: false - ] + ext.prefix = { "${meta.id}_datametrics" } } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { - publishDir = [ - enabled: false - ] + ext.prefix = { "${meta.id}_locuscollector" } } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { ext.args = { $params.rmdup ? "--rmdup" : '' } + ext.prefix = { "${meta.id}_dedup" } publishDir = [ path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, @@ -50,8 +44,6 @@ process { } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BQSR' { - publishDir = [ - enabled: false - ] + ext.prefix = { "${meta.id}_bqsr" } } } diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config index 2812ef7f..53cc78b4 100644 --- a/conf/modules/call_snv.config +++ b/conf/modules/call_snv.config @@ -10,3 +10,13 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ + +process { + + withName: '.*CALL_SNV:.*' { + publishDir = [ + enabled: false + ] + } + +} diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index 65011577..0312dded 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -19,9 +19,6 @@ process { withName: '.*CALL_SNV_DEEPVARIANT:.*' { ext.when = params.variant_caller.equals("deepvariant") - publishDir = [ - enabled: false - ] } withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 3c73f6ca..46ba791d 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -16,11 +16,9 @@ // process { + withName: '.*CALL_SNV_SENTIEON:.*' { ext.when = params.variant_caller.equals("sentieon") - publishDir = [ - enabled: false - ] } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config index d59ebb9d..8bc1c6a4 100644 --- a/conf/modules/call_structural_variants.config +++ b/conf/modules/call_structural_variants.config @@ -16,10 +16,18 @@ // process { + + withName: '.*CALL_STRUCTURAL_VARIANTS:.*' { + publishDir = [ + enabled: false + ] + } + withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { ext.args = '--pass_only --same_order' + ext.prefix = { "${meta.id}_merged" } publishDir = [ - path: { "${params.outdir}/sv_caller" }, + path: { "${params.outdir}/call_sv" }, mode: params.publish_dir_mode, ] } diff --git a/conf/modules/call_sv_manta.config b/conf/modules/call_sv_manta.config index 57cc3440..f55581af 100644 --- a/conf/modules/call_sv_manta.config +++ b/conf/modules/call_sv_manta.config @@ -18,10 +18,5 @@ process { withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA' { ext.prefix = { "${meta.id}_manta" } - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] } } diff --git a/conf/modules/call_sv_tiddit.config b/conf/modules/call_sv_tiddit.config index 8e316156..2ca400a3 100644 --- a/conf/modules/call_sv_tiddit.config +++ b/conf/modules/call_sv_tiddit.config @@ -18,19 +18,10 @@ process { withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:TIDDIT_SV' { ext.args = '-p 6' - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - ] } withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_TIDDIT:SVDB_MERGE_TIDDIT' { ext.args = '--notag --pass_only' ext.prefix = { "${meta.id}_tiddit" } - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] } } From 62a217eab679f32e484ca6f6b52269a40ad134f3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 01:31:45 +0100 Subject: [PATCH 1045/1921] references repeats --- conf/modules/call_repeat_expansions.config | 43 ++-------- conf/modules/prepare_references.config | 99 ++-------------------- conf/modules/raredisease.config | 7 +- 3 files changed, 15 insertions(+), 134 deletions(-) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 6c4b0c33..6129ef7b 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -18,64 +18,37 @@ process { withName: '.*CALL_REPEAT_EXPANSIONS:.*' { ext.when = { params.analysis_type != "wes" } + publishDir = [ + enabled: false + ] } withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { - publishDir = [ - enabled: false, - ] + ext.prefix = { "${meta.id}_exphunter" } } withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { ext.prefix = { "${meta.id}_reheader" } - publishDir = [ - enabled: false, - ] } withName: '.*CALL_REPEAT_EXPANSIONS:RENAMESAMPLE_EXP' { - publishDir = [ - path: { "${params.outdir}/repeat_expansions" }, - mode: params.publish_dir_mode, - saveAs: { filename -> - filename.equals('versions.yml') ? null : - filename.contains('_renam.vcf.gz') ? "${meta.id}_repeat_expansion.vcf.gz" : - filename - }, - ] + ext.prefix = { "${meta.id}_rename" } } withName: '.*CALL_REPEAT_EXPANSIONS:TABIX_EXP_RENAME' { - publishDir = [ - path: { "${params.outdir}/repeat_expansions" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - saveAs: { filename -> - filename.equals('versions.yml') ? null : - filename.contains('_renam.vcf.gz.tbi') ? "${meta.id}_repeat_expansion.vcf.gz.tbi" : - filename - }, - ] + ext.prefix = { "${meta.id}_tabix_rename" } } withName: '.*CALL_REPEAT_EXPANSIONS:SPLIT_MULTIALLELICS_EXP' { - ext.prefix = { "${meta.id}_exp" } - publishDir = [ - enabled: false, - ] + ext.prefix = { "${meta.id}_split_exp" } } withName: '.*CALL_REPEAT_EXPANSIONS:SVDB_MERGE_REPEATS' { ext.args = {"--notag"} - publishDir = [ - enabled: false - ] } withName: '.*CALL_REPEAT_EXPANSIONS:STRANGER' { - publishDir = [ - enabled: false - ] + ext.prefix = { "${meta.id}_stranger" } } withName: '.*CALL_REPEAT_EXPANSIONS:COMPRESS_STRANGER' { diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 8be6d38d..5acc1062 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -16,100 +16,49 @@ // process { - withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { - ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} + withName: '.*PREPARE_REFERENCES:.*' { publishDir = [ path: { "${params.outdir}/references" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, enabled: params.save_reference, - pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" ] } + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { + ext.when = {!params.bwamem2_index && 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"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*{0123,amb,ann,bwt.2bit.64,bwt.8bit.32,pac}" - ] } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { ext.when = {!params.bwa_index && params.aligner == "sentieon"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference - ] } 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"} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference - ] } withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { ext.when = {!params.bwa_index && !(params.aligner == "sentieon")} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference - ] } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { ext.when = {!params.fasta_fai} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*fai" - ] } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { ext.when = {!params.mt_fai_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*fai" - ] } withName: '.*PREPARE_REFERENCES:GATK_SD' { ext.when = {!params.sequence_dictionary} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*dict" - ] } withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*dict" - ] } withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { @@ -120,53 +69,24 @@ process { withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*tbi" - ] } withName: '.*PREPARE_REFERENCES:TABIX_GNOMAD_AF' { ext.when = {params.gnomad_af && !params.gnomad_af_idx} ext.args = '-s 1 -b 2 -e 2' - publishDir = [ - path: { "${params.outdir}/references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - enabled: params.save_reference, - pattern: "*tbi" - ] } withName: '.*PREPARE_REFERENCES:TABIX_PT' { ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*PREPARE_REFERENCES:TABIX_PBT' { ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*PREPARE_REFERENCES:GATK_BILT' { ext.when = { params.target_bed } ext.prefix = { "${meta.id}_target" } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*PREPARE_REFERENCES:GATK_ILT' { @@ -180,19 +100,12 @@ process { withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { ext.when = { params.target_bed } ext.prefix = { "${meta.id}" } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*PREPARE_REFERENCES:UNTAR_VEP_CACHE' { ext.when = { params.vep_cache.endsWith("tar.gz") } publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 3514144a..1bb0da94 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -16,11 +16,6 @@ // process { - publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] withName: '.*CHECK_INPUT:SAMPLESHEET_CHECK' { publishDir = [ @@ -47,7 +42,7 @@ process { withName: '.*RAREDISEASE:FASTQC' { ext.args = '--quiet' publishDir = [ - path: { "${params.outdir}/reports/fastqc/${meta.id}" }, + path: { "${params.outdir}/fastqc/${meta.id}" }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } From 1254dd4412f764516e8b3349e54d6e99f73827df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 02:19:01 +0100 Subject: [PATCH 1046/1921] annotate sv csq pli --- conf/modules/annotate_consequence_pli.config | 41 +++++++++++++++++++ .../annotate_structural_variants.config | 18 ++++---- modules/local/add_most_severe_consequence.nf | 6 +-- modules/local/add_most_severe_pli.nf | 6 +-- 4 files changed, 55 insertions(+), 16 deletions(-) diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index 2812ef7f..61f0f260 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -10,3 +10,44 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ + + +process { + withName: '.*ANN_CSQ_PLI_SV:.*' { + ext.when = params.annotate_sv_switch + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_vep_csq" } + } + + withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_vep_csq_pli" } + } + +} + +process { + withName: '.*ANN_CSQ_PLI_SNV:.*' { + ext.when = params.annotate_snv_switch + publishDir = [ + path: { "${params.outdir}/annotate_snv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_vep_csq" } + } + + withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_vep_csq_pli" } + } + +} diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 07d43734..c37bc92a 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -18,25 +18,21 @@ process { withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { ext.when = params.annotate_sv_switch + publishDir = [ + enabled: false + ] } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { - publishDir = [ - enabled: false, - ] + ext.prefix = { "${meta.id}_svdbquery" } } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { - publishDir = [ - enabled: false, - ] + ext.prefix = { "${meta.id}_sortvcf" } } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { ext.prefix = { "${meta.id}_view" } - publishDir = [ - enabled: false, - ] } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { @@ -52,9 +48,11 @@ process { '--protein --offline --regulatory --sift p', '--symbol --tsl --uniprot --vcf' ].join(' ') + ext.prefix = { "${meta.id}_vep" } publishDir = [ - path: { "${params.outdir}/sv_annotate" }, + path: { "${params.outdir}/annotate_sv" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } } diff --git a/modules/local/add_most_severe_consequence.nf b/modules/local/add_most_severe_consequence.nf index 9d2d9551..c70eedeb 100644 --- a/modules/local/add_most_severe_consequence.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -12,8 +12,8 @@ process ADD_MOST_SEVERE_CSQ { path (variant_consequences) output: - tuple val(meta), path("*_csq.vcf") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf") , emit: vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -22,7 +22,7 @@ process ADD_MOST_SEVERE_CSQ { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - add_most_severe_consequence.py --file_in ${vcf} --file_out ${prefix}_csq.vcf --variant_csq ${variant_consequences} + add_most_severe_consequence.py --file_in ${vcf} --file_out ${prefix}.vcf --variant_csq ${variant_consequences} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/add_most_severe_pli.nf b/modules/local/add_most_severe_pli.nf index dd492331..1167a1b1 100644 --- a/modules/local/add_most_severe_pli.nf +++ b/modules/local/add_most_severe_pli.nf @@ -11,8 +11,8 @@ process ADD_MOST_SEVERE_PLI { tuple val(meta), path(vcf) output: - tuple val(meta), path("*_pli.vcf") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf") , emit: vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -21,7 +21,7 @@ process ADD_MOST_SEVERE_PLI { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - add_most_severe_pli.py --file_in ${vcf} --file_out ${prefix}_pli.vcf + add_most_severe_pli.py --file_in ${vcf} --file_out ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": From 13dd334a8be962d8fe87fb9470597d5ba7d62f14 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 10:29:48 +0100 Subject: [PATCH 1047/1921] add annotate snv sv --- conf/modules/annotate_snvs.config | 74 +++++++++++++++++------------ subworkflows/local/annotate_snvs.nf | 35 +++++++++----- workflows/raredisease.nf | 1 + 3 files changed, 66 insertions(+), 44 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 9db85f23..4587d6a7 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -18,58 +18,37 @@ process { withName: '.*ANNOTATE_SNVS:.*' { ext.when = params.annotate_snv_switch - } - - withName: '.*ANNOTATE_SNVS:VCFANNO' { - ext.prefix = { "${meta.id}_vcfanno" } publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + enabled: false ] } withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { ext.args = { "--samples ${meta.id} --skip-indels " } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_roh" } } withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { ext.args = { "--v14 " } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + ext.prefix = { "${meta.id}_rohann" } + } + + withName: '.*ANNOTATE_SNVS:VCFANNO' { + ext.prefix = { "${meta.id}_rohann_vcfanno" } } withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_view" } + ext.prefix = { "${meta.id}_rohann_vcfanno_filter" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } - publishDir = [ - path: { "${params.outdir}/snv_annotation" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] } withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { ext.prefix = { "${meta.id}_${intervals.simpleName}" } ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} - publishDir = [ - enabled: params.save_reference, - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { - ext.prefix = { "${vcf.simpleName}_vep" } + ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } ext.args = [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,vep_cache/LoFtool_scores.txt', @@ -86,8 +65,41 @@ process { '--uniprot --vcf' ].join(' ') publishDir = [ - path: { "${params.outdir}/snv_annotation" }, + 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.annotate_snv_switch && !(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 } + ] + } + + withName: '.*ANNOTATE_SNVS:TABIX_BCFTOOLS_CONCAT' { + ext.when = { params.annotate_snv_switch && !(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/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index d522f4f2..eafb2f84 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -19,6 +19,7 @@ workflow ANNOTATE_SNVS { take: vcf + analysis_type vcfanno_resources vcfanno_lua vcfanno_toml @@ -81,20 +82,28 @@ workflow ANNOTATE_SNVS { TABIX_VEP (ENSEMBLVEP_SNV.out.vcf_gz) - ENSEMBLVEP_SNV.out.vcf_gz - .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_vep_ann } + 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) + .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_vep_ann) + 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_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) @@ -109,7 +118,7 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: - vcf_ann = BCFTOOLS_CONCAT.out.vcf - tbi = TABIX_BCFTOOLS_CONCAT.out.tbi + vcf_ann = ch_vep_ann + tbi = ch_vep_index versions = ch_versions } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a735ab33..2a0851d3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -440,6 +440,7 @@ workflow RAREDISEASE { ANNOTATE_SNVS ( ch_vcf, + params.analysis_type, ch_vcfanno_resources, ch_vcfanno_lua, ch_vcfanno_toml, From 2b498fdf0683bd283a22f73af367ec943cbb2053 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 10:51:30 +0100 Subject: [PATCH 1048/1921] rank and filter --- conf/modules/rank_variants.config | 12 ++++++++++-- conf/modules/raredisease.config | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 3b786955..fab5fdc7 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -18,6 +18,9 @@ process { withName: '.*RANK_VARIANTS_SV:.*' { ext.when = params.annotate_sv_switch + publishDir = [ + enabled: false + ] } withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { @@ -31,8 +34,9 @@ process { } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_rankedvar_sv" } publishDir = [ - path: { "${params.outdir}/genmod" }, + path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -46,6 +50,9 @@ process { process { withName: '.*RANK_VARIANTS_SNV:.*' { ext.when = params.annotate_snv_switch + publishDir = [ + enabled: false + ] } withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { @@ -63,8 +70,9 @@ process { } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_rankedvar_snv" } publishDir = [ - path: { "${params.outdir}/genmod" }, + path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 1bb0da94..47d94270 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -105,3 +105,25 @@ process { ] } } + +process { + withName: '.*FILTER_VEP_SNV' { + ext.prefix = { "${meta.id}_rankedvar_snv" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + +process { + withName: '.*FILTER_VEP_SV' { + ext.prefix = { "${meta.id}_rankedvar_sv" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} From 61097259e3b4ca4e54e14162e11be578128b9477 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 11:07:49 +0100 Subject: [PATCH 1049/1921] review suggestions Co-authored-by: Lucpen --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 59ccc5c4..0987e71e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -199,7 +199,7 @@ The mandatory and optional parameters for each category are tabulated below. 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).
3Path to a vcfanno configration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
-4Gnomad vcf file can be downloaded from here https://gnomad.broadinstitute.org/downloads.
+4Gnomad vcf file can be downloaded from [here] (https://gnomad.broadinstitute.org/downloads).
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(HGNC ids) that is used to split the variants into a 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).
From 31465d8e12b9a859d2a994b6b7f68b08ddd1a268 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 14 Mar 2023 13:49:59 +0100 Subject: [PATCH 1050/1921] removing tabs and aligning text --- subworkflows/local/align.nf | 8 ++--- subworkflows/local/alignment/align_bwamem2.nf | 10 +++--- .../local/alignment/align_sentieon.nf | 24 ++++++------- subworkflows/local/analyse_MT.nf | 10 +++--- .../local/annotate_consequence_pli.nf | 16 ++++----- subworkflows/local/annotate_snvs.nf | 30 ++++++++-------- .../local/annotate_structural_variants.nf | 12 +++---- subworkflows/local/call_repeat_expansions.nf | 16 ++++----- subworkflows/local/call_snv.nf | 22 ++++++------ .../local/call_structural_variants.nf | 4 +-- subworkflows/local/check_input.nf | 2 +- subworkflows/local/gens.nf | 20 +++++------ .../local/mitochondria/align_and_call_MT.nf | 30 ++++++++-------- .../mitochondria/convert_mt_bam_to_fastq.nf | 8 ++--- .../local/mitochondria/merge_annotate_MT.nf | 36 +++++++++---------- subworkflows/local/prepare_references.nf | 36 +++++++++---------- subworkflows/local/qc_bam.nf | 18 +++++----- subworkflows/local/rank_variants.nf | 12 +++---- subworkflows/local/scatter_genome.nf | 8 ++--- .../variant_calling/call_cnv_cnvpytor.nf | 16 ++++----- .../variant_calling/call_snv_deepvariant.nf | 14 ++++---- .../variant_calling/call_snv_sentieon.nf | 34 +++++++++--------- .../local/variant_calling/call_sv_manta.nf | 26 +++++++------- .../local/variant_calling/call_sv_tiddit.nf | 12 +++---- 24 files changed, 212 insertions(+), 212 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index e010926f..354f1a4b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -43,8 +43,8 @@ workflow ALIGN { ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) emit: - marked_bam = ch_marked_bam // channel: [ val(meta), path(bam) ] - marked_bai = ch_marked_bai // channel: [ val(meta), path(bai) ] - bam_bai = ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] - versions = ch_versions // channel: [ path(versions.yml) ] + marked_bam = ch_marked_bam // channel: [ val(meta), path(bam) ] + marked_bai = ch_marked_bai // channel: [ val(meta), path(bai) ] + bam_bai = ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 1d71b388..72283556 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -61,9 +61,9 @@ workflow ALIGN_BWAMEM2 { ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MARKDUP.out.versions.first()) emit: - stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] - metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), path(metrics) ] - marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), path(bam) ] - marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai // channel: [ val(meta), path(bai) ] - versions = ch_versions // channel: [ path(versions.yml) ] + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] + metrics = MARKDUPLICATES.out.metrics // channel: [ val(meta), path(metrics) ] + marked_bam = MARKDUPLICATES.out.bam // channel: [ val(meta), path(bam) ] + marked_bai = SAMTOOLS_INDEX_MARKDUP.out.bai // channel: [ val(meta), path(bai) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 9cafadf4..c0903c9d 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -74,16 +74,16 @@ workflow ALIGN_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) emit: - marked_bam = SENTIEON_DEDUP.out.bam // channel: [ val(meta), path(bam) ] - marked_bai = SENTIEON_DEDUP.out.bai // channel: [ val(meta), path(bai) ] - recal_bam = ch_bqsr_bam.ifEmpty(null) // channel: [ val(meta), path(bam) ] - recal_bai = ch_bqsr_bai.ifEmpty(null) // channel: [ val(meta), path(bai) ] - recal_csv = ch_bqsr_csv.ifEmpty(null) // channel: [ val(meta), path(csv) ] - mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) // channel: [ val(meta), path(mq_metrics) ] - qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) // channel: [ val(meta), path(qd_metrics) ] - gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) // channel: [ val(meta), path(gc_metrics) ] - gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) // channel: [ val(meta), path(gc_summary) ] - aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) // channel: [ val(meta), path(aln_metrics) ] - is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) // channel: [ val(meta), path(is_metrics) ] - versions = ch_versions // channel: [ path(versions.yml) ] + marked_bam = SENTIEON_DEDUP.out.bam // channel: [ val(meta), path(bam) ] + marked_bai = SENTIEON_DEDUP.out.bai // channel: [ val(meta), path(bai) ] + recal_bam = ch_bqsr_bam.ifEmpty(null) // channel: [ val(meta), path(bam) ] + recal_bai = ch_bqsr_bai.ifEmpty(null) // channel: [ val(meta), path(bai) ] + recal_csv = ch_bqsr_csv.ifEmpty(null) // channel: [ val(meta), path(csv) ] + mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) // channel: [ val(meta), path(mq_metrics) ] + qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) // channel: [ val(meta), path(qd_metrics) ] + gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) // channel: [ val(meta), path(gc_metrics) ] + gc_summary = SENTIEON_DATAMETRICS.out.gc_summary.ifEmpty(null) // channel: [ val(meta), path(gc_summary) ] + aln_metrics = SENTIEON_DATAMETRICS.out.aln_metrics.ifEmpty(null) // channel: [ val(meta), path(aln_metrics) ] + is_metrics = SENTIEON_DATAMETRICS.out.is_metrics.ifEmpty(null) // channel: [ val(meta), path(is_metrics) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 397576b7..0ad82f1a 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -1,11 +1,11 @@ // // Analyse MT // -include { CONVERT_MT_BAM_TO_FASTQ } from './mitochondria/convert_mt_bam_to_fastq' -include { ALIGN_AND_CALL_MT } from './mitochondria/align_and_call_MT' -include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './mitochondria/align_and_call_MT' -include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' -include { MERGE_ANNOTATE_MT } from './mitochondria/merge_annotate_MT' +include { CONVERT_MT_BAM_TO_FASTQ } from './mitochondria/convert_mt_bam_to_fastq' +include { ALIGN_AND_CALL_MT } from './mitochondria/align_and_call_MT' +include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './mitochondria/align_and_call_MT' +include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' +include { MERGE_ANNOTATE_MT } from './mitochondria/merge_annotate_MT' workflow ANALYSE_MT { take: diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index d98e6040..93ab181b 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -6,12 +6,12 @@ include { ADD_MOST_SEVERE_CSQ } from '../../modules/local/add_most_severe_conseq include { ADD_MOST_SEVERE_PLI } from '../../modules/local/add_most_severe_pli' workflow ANNOTATE_CSQ_PLI { - take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] - ch_variant_consequences // channel: [mandatory] [ path(consequences) ] + take: + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_variant_consequences // channel: [mandatory] [ path(consequences) ] - main: - ch_versions = Channel.empty() + main: + ch_versions = Channel.empty() ADD_MOST_SEVERE_CSQ (ch_vcf, ch_variant_consequences) @@ -20,7 +20,7 @@ workflow ANNOTATE_CSQ_PLI { ch_versions = ch_versions.mix(ADD_MOST_SEVERE_CSQ.out.versions) ch_versions = ch_versions.mix(ADD_MOST_SEVERE_PLI.out.versions) - emit: - vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + emit: + vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 693c86b3..56aae6ba 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -2,18 +2,18 @@ // A subworkflow to annotate snvs // -include { VCFANNO } from '../../modules/nf-core/vcfanno/main' -include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bcftools/concat/main' -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 { 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' -include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' -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 { VCFANNO } from '../../modules/nf-core/vcfanno/main' +include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bcftools/concat/main' +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 { 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' +include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' +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' workflow ANNOTATE_SNVS { @@ -109,7 +109,7 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: - vcf_ann = BCFTOOLS_CONCAT.out.vcf // channel: [ val(meta), path(vcf) ] - tbi = TABIX_BCFTOOLS_CONCAT.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf_ann = BCFTOOLS_CONCAT.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = TABIX_BCFTOOLS_CONCAT.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 147fe0d0..ab170fcf 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,10 +2,10 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' +include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -63,6 +63,6 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) emit: - vcf_ann = ENSEMBLVEP_SV.out.vcf_gz // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf_ann = ENSEMBLVEP_SV.out.vcf_gz // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 64e31a15..4741272f 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -15,11 +15,11 @@ include { TABIX_TABIX as TABIX_EXP_RENAME } from '../../modules/nf- workflow CALL_REPEAT_EXPANSIONS { take: - 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_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) ] main: ch_versions = Channel.empty() @@ -72,7 +72,7 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(COMPRESS_STRANGER.out.versions.first()) ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) - emit: - vcf = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi) // channel: [ val(meta), path(vcf), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + emit: + vcf = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi) // channel: [ val(meta), path(vcf), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index c2555c79..c8493a49 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -9,14 +9,14 @@ 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_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) ] - ch_ml_model // channel: [mandatory] [ path(model) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ 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) ] + ch_ml_model // channel: [mandatory] [ path(model) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() @@ -48,7 +48,7 @@ workflow CALL_SNV { ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) emit: - vcf = ch_vcf // channel: [ val(meta), path(vcf) ] - tabix = ch_tabix // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = ch_vcf // channel: [ val(meta), path(vcf) ] + tabix = ch_tabix // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index fa3eae61..4e4a7d6f 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -65,6 +65,6 @@ workflow CALL_STRUCTURAL_VARIANTS { // ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) emit: - vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 0af95445..0faa087c 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -6,7 +6,7 @@ include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' workflow CHECK_INPUT { take: - ch_samplesheet // channel: [mandatory] [ path(csv) ] + ch_samplesheet // channel: [mandatory] [ path(csv) ] main: SAMPLESHEET_CHECK ( ch_samplesheet ) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 95d6c5b5..6cc87a12 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -4,19 +4,19 @@ include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/local/gatk4/collectreadcounts/main' include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/local/gatk4/denoisereadcounts/main' -include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' +include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' 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 // 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) ] main: ch_versions = Channel.empty() diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 85974af0..a20726de 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -16,14 +16,14 @@ 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] [ path(fasta) ] - ch_dict // channel: [mandatory] [ path(dict) ] - ch_fai // channel: [mandatory] [ 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_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_intervals_mt // channel: [mandatory] [ path(interval_list) ] main: ch_versions = Channel.empty() @@ -75,11 +75,11 @@ 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) ] - 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) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index 537c84e6..adbee07b 100644 --- a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -8,10 +8,10 @@ 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] [ path(fai) ] - ch_genome_dict // channel: [mandatory] [ path(dict) ] + 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) ] main: ch_versions = Channel.empty() diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 1b8367d9..36f95ff3 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -2,19 +2,19 @@ // Merge and annotate MT // -include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' -include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' -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 { HMTNOTE as HMTNOTE_MT } from '../../../modules/nf-core/hmtnote/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 { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' +include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' +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 { HMTNOTE as HMTNOTE_MT } from '../../../modules/nf-core/hmtnote/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' workflow MERGE_ANNOTATE_MT { take: @@ -124,9 +124,9 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: - haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] - vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] - tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] - report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] - versions = ch_versions // channel: [ path(versions.yml) ] + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] + vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] + tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] + report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index fdb090bb..0eb68049 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -90,24 +90,24 @@ 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 { 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) ] } diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 1e3d622c..49564594 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -63,13 +63,13 @@ workflow QC_BAM { ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions, SENTIEON_WGSMETRICS_Y.out.versions) emit: - multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap_dir) ] - tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(wig) ] - bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(bw) ] - d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(d4) ] - cov = ch_cov // channel: [ val(meta), path(metrics) ] - cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] - versions = ch_versions // channel: [ path(versions.yml) ] + multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] + hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] + qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap_dir) ] + tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(wig) ] + bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(bw) ] + d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(d4) ] + cov = ch_cov // channel: [ val(meta), path(metrics) ] + cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index f96197fc..b9f63c42 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -2,10 +2,10 @@ // A subworkflow to score and rank variants. // -include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' -include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' -include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' -include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' +include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' +include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' +include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' +include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' workflow RANK_VARIANTS { @@ -32,6 +32,6 @@ workflow RANK_VARIANTS { ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) emit: - vcf = GENMOD_COMPOUND.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = GENMOD_COMPOUND.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 07a70e95..6f5dac41 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -8,10 +8,10 @@ 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] [ 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) ] main: ch_versions = Channel.empty() diff --git a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf index 5b3b87f7..975d139c 100644 --- a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf +++ b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf @@ -10,12 +10,12 @@ include { CNVPYTOR_VIEW as VIEW } from '../../../modules/nf workflow CALL_CNV_CNVPYTOR { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam)] - ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - val_binsizes // string: [optional] binsizes for cnvpytor default: 1000 - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam)] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + val_binsizes // string: [optional] binsizes for cnvpytor default: 1000 + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] main: @@ -48,7 +48,7 @@ workflow CALL_CNV_CNVPYTOR { ch_versions = ch_versions.mix(VIEW.out.versions.first()) emit: - candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 7e2f4706..a401329a 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -10,10 +10,10 @@ 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_case_info // channel: [mandatory] [ val(case_info) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fai // channel: [mandatory] [ path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() @@ -55,7 +55,7 @@ workflow CALL_SNV_DEEPVARIANT { ch_versions = ch_versions.mix(TABIX_GL.out.versions) emit: - vcf = REMOVE_DUPLICATES_GL.out.vcf // channel: [ val(meta), path(vcf) ] - tabix = TABIX_GL.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = REMOVE_DUPLICATES_GL.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_GL.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 1339d96d..0b163740 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -13,18 +13,18 @@ include { BCFTOOLS_FILTER as BCF_FILTER_ONE } from '../../../modules/nf-c include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-core/bcftools/filter/main' 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_dbsnp // channel: [mandatory] [ val(meta), path(vcf) ] - ch_dbsnp_index // channel: [mandatory] [ val(meta), path(tbi) ] + take: + ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_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) ] ch_ml_model // channel: [mandatory] [ path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] - main: - ch_versions = Channel.empty() + main: + ch_versions = Channel.empty() SENTIEON_DNASCOPE ( ch_input, ch_fasta, ch_fai, ch_dbsnp, ch_dbsnp_index, ch_call_interval, ch_ml_model ) @@ -67,16 +67,16 @@ workflow CALL_SNV_SENTIEON { TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) - ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) - ch_versions = ch_versions.mix(BCFTOOLS_MERGE.out.versions.first()) - ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_SEN.out.versions.first()) - ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) - ch_versions = ch_versions.mix(TABIX_SEN.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_MERGE.out.versions.first()) + ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_SEN.out.versions.first()) + ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) + ch_versions = ch_versions.mix(TABIX_SEN.out.versions.first()) ch_versions = ch_versions.mix(BCF_FILTER_ONE.out.versions.first()) - emit: - vcf = REMOVE_DUPLICATES_SEN.out.vcf // channel: [ val(meta), path(vcf) ] - tabix = TABIX_SEN.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + emit: + vcf = REMOVE_DUPLICATES_SEN.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_SEN.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 9a10aa06..1fe5caf3 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_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) ] main: ch_bam.collect{it[1]} @@ -44,11 +44,11 @@ workflow CALL_SV_MANTA { ch_versions = MANTA.out.versions emit: - candidate_small_indels_vcf = MANTA.out.candidate_small_indels_vcf // channel: [ val(meta), path(vcf) ] - candidate_small_indels_vcf_tbi = MANTA.out.candidate_small_indels_vcf_tbi // channel: [ val(meta), path(tbi) ] - candidate_sv_vcf = MANTA.out.candidate_sv_vcf // channel: [ val(meta), path(vcf) ] - candidate_sv_vcf_tbi = MANTA.out.candidate_sv_vcf_tbi // channel: [ val(meta), path(tbi) ] - diploid_sv_vcf = MANTA.out.diploid_sv_vcf // channel: [ val(meta), path(vcf) ] - diploid_sv_vcf_tbi = MANTA.out.diploid_sv_vcf_tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions + candidate_small_indels_vcf = MANTA.out.candidate_small_indels_vcf // channel: [ val(meta), path(vcf) ] + candidate_small_indels_vcf_tbi = MANTA.out.candidate_small_indels_vcf_tbi // channel: [ val(meta), path(tbi) ] + candidate_sv_vcf = MANTA.out.candidate_sv_vcf // channel: [ val(meta), path(vcf) ] + candidate_sv_vcf_tbi = MANTA.out.candidate_sv_vcf_tbi // channel: [ val(meta), path(tbi) ] + diploid_sv_vcf = MANTA.out.diploid_sv_vcf // channel: [ val(meta), path(vcf) ] + diploid_sv_vcf_tbi = MANTA.out.diploid_sv_vcf_tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions } diff --git a/subworkflows/local/variant_calling/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf index 6729d304..329b11b4 100644 --- a/subworkflows/local/variant_calling/call_sv_tiddit.nf +++ b/subworkflows/local/variant_calling/call_sv_tiddit.nf @@ -7,10 +7,10 @@ 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_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_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 ) @@ -31,6 +31,6 @@ workflow CALL_SV_TIDDIT { ch_versions = ch_versions.mix(SVDB_MERGE_TIDDIT.out.versions) emit: - vcf = SVDB_MERGE_TIDDIT.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = SVDB_MERGE_TIDDIT.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From f1ea0154b3b8c3d2e576cedc4862fe60856bc482 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 14:27:30 +0100 Subject: [PATCH 1051/1921] mt and gens --- conf/modules/analyse_MT.config | 7 +++ conf/modules/call_snv_deepvariant.config | 2 + conf/modules/call_snv_sentieon.config | 2 + conf/modules/gens.config | 10 ++-- conf/modules/merge_annotate_MT.config | 61 ++++++------------------ conf/modules/raredisease.config | 3 +- 6 files changed, 33 insertions(+), 52 deletions(-) diff --git a/conf/modules/analyse_MT.config b/conf/modules/analyse_MT.config index 7c3adbb2..ec082bcd 100644 --- a/conf/modules/analyse_MT.config +++ b/conf/modules/analyse_MT.config @@ -15,6 +15,13 @@ // Liftover // +process { + withName: '.*ANALYSE_MT:.*' { + publishDir = [ + enabled: false + ] + } +} process { withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index 0312dded..af57cfe8 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -38,6 +38,7 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ + enabled: !params.dedicated_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -46,6 +47,7 @@ process { withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { publishDir = [ + enabled: !params.dedicated_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 46ba791d..67dec7aa 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -52,6 +52,7 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ + enabled: !params.dedicated_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -60,6 +61,7 @@ process { withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { publishDir = [ + enabled: !params.dedicated_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/conf/modules/gens.config b/conf/modules/gens.config index f1a8ec8f..b918a6b2 100644 --- a/conf/modules/gens.config +++ b/conf/modules/gens.config @@ -16,15 +16,15 @@ // process { - withName: '.*GENS:COLLECTREADCOUNTS' { - ext.args = '--interval-merging-rule OVERLAPPING_ONLY' - } - - withName: GENS { + withName: '.*GENS:.*' { publishDir = [ path: { "${params.outdir}/gens" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + + withName: '.*GENS:COLLECTREADCOUNTS' { + ext.args = '--interval-merging-rule OVERLAPPING_ONLY' + } } diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index d574fcaa..5287dc59 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -31,49 +31,15 @@ process { withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT' { - publishDir = [ - enabled: false - ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - path: { "${params.outdir}/gatk4" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT2' { - publishDir = [ - enabled: false - ] } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_MT' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:TABIX_TABIX_MT3' { - publishDir = [ - enabled: false - ] + ext.prefix = { "${meta.id}_merge_mt" } } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { @@ -92,29 +58,32 @@ process { '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', '--uniprot' ].join(' ') - publishDir = [ - path: { "${params.outdir}/mt_annotation_vep" }, - mode: params.publish_dir_mode - ] } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { + ext.prefix = { "${meta.id}_vep_vcfanno_mt" } publishDir = [ - enabled: false + path: { "${params.outdir}/annotate_mt" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { - ext.prefix = { "${meta.id}_mito_ann" } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { publishDir = [ - path: { "${params.outdir}/mt_annotation" }, + path: { "${params.outdir}/annotate_mt" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { - ext.prefix = { "${meta.id}_mito_ann" } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { + ext.prefix = { "${meta.id}_haplogrep" } + publishDir = [ + path: { "${params.outdir}/annotate_mt" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 47d94270..23604fc4 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -58,7 +58,8 @@ process { ext.prefix = { "${meta.id}_nomito" } ext.when = { params.annotate_snv_switch } publishDir = [ - path: { "${params.outdir}/glnexus/no_mito" }, + enabled: params.dedicated_mt_analysis, + path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] From 11e76e2724dda90d6831f13052eb1e408a82d3c9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:25:46 +0100 Subject: [PATCH 1052/1921] add multiqc --- conf/modules/call_structural_variants.config | 1 + conf/modules/raredisease.config | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config index 8bc1c6a4..f4a8c427 100644 --- a/conf/modules/call_structural_variants.config +++ b/conf/modules/call_structural_variants.config @@ -29,6 +29,7 @@ process { publishDir = [ path: { "${params.outdir}/call_sv" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 23604fc4..42c9b958 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -107,6 +107,10 @@ process { } } +// +// Filter out clincal and research variants +// + process { withName: '.*FILTER_VEP_SNV' { ext.prefix = { "${meta.id}_rankedvar_snv" } @@ -128,3 +132,17 @@ process { ] } } + +// +// Multiqc options +// + +process { + withName: '.*RAREDISEASE:MULTIQC' { + publishDir = [ + path: { "${params.outdir}/multiqc/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} From 9131d21fa0a5c7fd826fee080254cc997e9491ba Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:42:43 +0100 Subject: [PATCH 1053/1921] organize annotate_mt --- conf/modules/merge_annotate_MT.config | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index 5287dc59..d62cf73c 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -60,19 +60,12 @@ process { ].join(' ') } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:VCFANNO_MT' { - ext.prefix = { "${meta.id}_vep_vcfanno_mt" } - publishDir = [ - path: { "${params.outdir}/annotate_mt" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { + ext.prefix = { "${meta.id}_vep_vcfanno_mt" } publishDir = [ path: { "${params.outdir}/annotate_mt" }, mode: params.publish_dir_mode, + pattern: "*{vcf.gz,vcf.gz.tbi}", saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } From 7b5b5db1d800c4af008379b44840154bba456928 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 Mar 2023 21:22:38 +0100 Subject: [PATCH 1054/1921] compress vcf outputs --- subworkflows/local/annotate_consequence_pli.nf | 6 +++++- subworkflows/local/annotate_structural_variants.nf | 5 +++++ subworkflows/local/call_structural_variants.nf | 9 +++++++-- subworkflows/local/rank_variants.nf | 8 ++++++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index 93ab181b..aa0f257e 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -4,6 +4,7 @@ include { ADD_MOST_SEVERE_CSQ } from '../../modules/local/add_most_severe_consequence' include { ADD_MOST_SEVERE_PLI } from '../../modules/local/add_most_severe_pli' +include { TABIX_BGZIPTABIX } from '../../modules/nf-core/tabix/bgziptabix/main' workflow ANNOTATE_CSQ_PLI { take: @@ -17,10 +18,13 @@ workflow ANNOTATE_CSQ_PLI { ADD_MOST_SEVERE_PLI (ADD_MOST_SEVERE_CSQ.out.vcf) + TABIX_BGZIPTABIX (ADD_MOST_SEVERE_PLI.out.vcf) + ch_versions = ch_versions.mix(ADD_MOST_SEVERE_CSQ.out.versions) ch_versions = ch_versions.mix(ADD_MOST_SEVERE_PLI.out.versions) + ch_versions = ch_versions.mix(TABIX_BGZIPTABIX.out.versions) emit: - vcf_ann = ADD_MOST_SEVERE_PLI.out.vcf // channel: [ val(meta), path(vcf) ] + vcf_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, vcf ] }.collect() // channel: [ val(meta), path(vcf) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index ab170fcf..6af0519f 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -6,6 +6,7 @@ include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/m include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' +include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -57,12 +58,16 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { [] ) + TABIX_VEP (ENSEMBLVEP_SV.out.vcf_gz) + ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) + ch_versions = ch_versions.mix(TABIX_VEP.out.versions) emit: vcf_ann = ENSEMBLVEP_SV.out.vcf_gz // channel: [ val(meta), path(vcf) ] + tbi = TABIX_VEP.out.tbi // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 4e4a7d6f..17f6e593 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -6,6 +6,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_CNVPYTOR } from './variant_calling/call_cnv_cnvpytor' +include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -60,11 +61,15 @@ workflow CALL_STRUCTURAL_VARIANTS { // SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta","cnvpytor"] ) SVDB_MERGE (merge_input_vcfs, ["tiddit","manta"]) + 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(TABIX_TABIX.out.versions) // ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) emit: - vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] + tbi = TABIX_TABIX.out.tbi // channel: [ val(meta), path(vcf)] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index b9f63c42..b25371c8 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -6,6 +6,7 @@ include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' +include { TABIX_BGZIPTABIX } from '../../modules/nf-core/tabix/bgziptabix/main' workflow RANK_VARIANTS { @@ -26,12 +27,15 @@ workflow RANK_VARIANTS { GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) + TABIX_BGZIPTABIX (GENMOD_COMPOUND.out.vcf) + ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) + ch_versions = ch_versions.mix(TABIX_BGZIPTABIX.out.versions) emit: - vcf = GENMOD_COMPOUND.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, vcf ] }.collect() // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From ecf8e76308a1e579698722c8dad6ebcb440fe10e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Mar 2023 13:38:37 +0100 Subject: [PATCH 1055/1921] review suggestions --- conf/modules/annotate_consequence_pli.config | 25 ++++++++++++---- .../annotate_structural_variants.config | 10 ++++++- conf/modules/call_repeat_expansions.config | 14 +++++++-- conf/modules/call_structural_variants.config | 9 +++++- conf/modules/qc_bam.config | 1 - conf/modules/rank_variants.config | 12 ++++++-- conf/modules/raredisease.config | 4 +-- subworkflows/local/annotate_snvs.nf | 30 +++++++++---------- 8 files changed, 75 insertions(+), 30 deletions(-) diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index 61f0f260..cec9f942 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -16,9 +16,7 @@ process { withName: '.*ANN_CSQ_PLI_SV:.*' { ext.when = params.annotate_sv_switch publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } @@ -30,15 +28,22 @@ process { ext.prefix = { "${meta.id}_vep_csq_pli" } } + withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_vep_csq_pli" } + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + } process { withName: '.*ANN_CSQ_PLI_SNV:.*' { ext.when = params.annotate_snv_switch publishDir = [ - path: { "${params.outdir}/annotate_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } @@ -50,4 +55,12 @@ process { ext.prefix = { "${meta.id}_vep_csq_pli" } } + withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_vep_csq_pli" } + publishDir = [ + path: { "${params.outdir}/annotate_snv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index c37bc92a..4e508bcb 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -48,7 +48,15 @@ process { '--protein --offline --regulatory --sift p', '--symbol --tsl --uniprot --vcf' ].join(' ') - ext.prefix = { "${meta.id}_vep" } + ext.prefix = { "${meta.id}_svdbquery_vep" } + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:TABIX_VEP' { publishDir = [ path: { "${params.outdir}/annotate_sv" }, mode: params.publish_dir_mode, diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 6129ef7b..a03f605b 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -32,11 +32,21 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:RENAMESAMPLE_EXP' { - ext.prefix = { "${meta.id}_rename" } + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] } withName: '.*CALL_REPEAT_EXPANSIONS:TABIX_EXP_RENAME' { - ext.prefix = { "${meta.id}_tabix_rename" } + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : + filename.contains('_renam.vcf.gz.tbi') ? "${meta.id}_repeat_expansion.vcf.gz.tbi" : + filename }, + ] } withName: '.*CALL_REPEAT_EXPANSIONS:SPLIT_MULTIALLELICS_EXP' { diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config index f4a8c427..a8c10175 100644 --- a/conf/modules/call_structural_variants.config +++ b/conf/modules/call_structural_variants.config @@ -25,7 +25,14 @@ process { withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { ext.args = '--pass_only --same_order' - ext.prefix = { "${meta.id}_merged" } + publishDir = [ + path: { "${params.outdir}/call_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_STRUCTURAL_VARIANTS:TABIX_TABIX' { publishDir = [ path: { "${params.outdir}/call_sv" }, mode: params.publish_dir_mode, diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 360d479a..0f5f411f 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -43,7 +43,6 @@ process { withName: '.*QC_BAM:UCSC_WIGTOBIGWIG' { ext.args = '-clip' - ext.prefix = { "${meta.id}_wigtobigwig" } } withName: '.*QC_BAM:MOSDEPTH' { diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index fab5fdc7..8f17d2e2 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -34,7 +34,11 @@ process { } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_rankedvar_sv" } + ext.prefix = { "${meta.id}_ranked_sv" } + } + + withName: '.*RANK_VARIANTS_SV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_ranked_sv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, @@ -70,7 +74,11 @@ process { } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_rankedvar_snv" } + ext.prefix = { "${meta.id}_ranked_snv" } + } + + withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_ranked_snv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 42c9b958..3b18fa95 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -113,7 +113,7 @@ process { process { withName: '.*FILTER_VEP_SNV' { - ext.prefix = { "${meta.id}_rankedvar_snv" } + ext.prefix = { "${meta.id}_clinical_snv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, @@ -124,7 +124,7 @@ process { process { withName: '.*FILTER_VEP_SV' { - ext.prefix = { "${meta.id}_rankedvar_sv" } + ext.prefix = { "${meta.id}_clinical_sv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 30ee493b..d7e918de 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -18,18 +18,18 @@ include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/ga workflow ANNOTATE_SNVS { take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] - analysis_type // string: [mandatory] 'wgs' or 'wes' - ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] - ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] - ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] - 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_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) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] + analysis_type // string: [mandatory] 'wgs' or 'wes' + ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] + ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] + ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] + 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_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() @@ -118,7 +118,7 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: - vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] - tbi = ch_vep_index // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] + tbi = ch_vep_index // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From ef0856ad0a6b934749b870e49f11b82257d8f5b7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Mar 2023 13:46:35 +0100 Subject: [PATCH 1056/1921] rename rep exp vcf --- conf/modules/call_repeat_expansions.config | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index a03f605b..1f71bef6 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -35,7 +35,9 @@ process { publishDir = [ path: { "${params.outdir}/repeat_expansions" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : + filename.contains('_renam.vcf.gz') ? "${meta.id}_repeat_expansion.vcf.gz" : + filename }, ] } From 3119d65ea57c798e49ad2da460521584d73b6d22 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Mar 2023 13:48:26 +0100 Subject: [PATCH 1057/1921] review suggestions --- subworkflows/local/call_structural_variants.nf | 2 +- subworkflows/local/rank_variants.nf | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 17f6e593..803a9a20 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -70,6 +70,6 @@ workflow CALL_STRUCTURAL_VARIANTS { emit: vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] - tbi = TABIX_TABIX.out.tbi // channel: [ val(meta), path(vcf)] + tbi = TABIX_TABIX.out.tbi // channel: [ val(meta), path(tbi)] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index b25371c8..f1a9c788 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -2,11 +2,11 @@ // A subworkflow to score and rank variants. // -include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' -include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' -include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' -include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' -include { TABIX_BGZIPTABIX } from '../../modules/nf-core/tabix/bgziptabix/main' +include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' +include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' +include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' +include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' +include { TABIX_BGZIPTABIX } from '../../modules/nf-core/tabix/bgziptabix/main' workflow RANK_VARIANTS { From fefae879c13c522357a527790ddcbd1cece794bf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Mar 2023 14:51:03 +0100 Subject: [PATCH 1058/1921] review suggestion --- subworkflows/local/annotate_snvs.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index d7e918de..cfbb4b04 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -118,7 +118,7 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: - vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] - tbi = ch_vep_index // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] + tbi = ch_vep_index // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From ec813cca13711da4ed96e14a764a8a4d5548236e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Mar 2023 15:43:32 +0100 Subject: [PATCH 1059/1921] commit citations --- CITATIONS.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 4 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 4d6298e5..c23c02da 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,18 +10,107 @@ ## Pipeline tools +- [BCFtools](https://academic.oup.com/gigascience/article/10/2/giab008/6137722) + + > Danecek P, Bonfield JK, Liddle J, et al. Twelve years of SAMtools and BCFtools. GigaScience. 2021;10(2):giab008. doi:10.1093/gigascience/giab008 + +- [BWA-MEM](https://arxiv.org/abs/1303.3997) + + > Li H. Aligning sequence reads, clone sequences and assembly contigs with BWA-MEM. Published online May 26, 2013. Accessed March 14, 2023. http://arxiv.org/abs/1303.3997 + +- [BWA-MEM2](https://ieeexplore.ieee.org/abstract/document/8820962) + + > 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 + +- [CNVpytor](https://academic.oup.com/gigascience/article/10/11/giab074/6431715?login=true) + + > Suvakov M, Panda A, Diesh C, Holmes I, Abyzov A. CNVpytor: a tool for copy number variation detection and analysis from read depth and allele imbalance in whole-genome sequencing. GigaScience. 2021;10(11):giab074. doi:10.1093/gigascience/giab074 + +- [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 + +- [ExpansionHunter](https://academic.oup.com/bioinformatics/article/doi/10.1093/bioinformatics/btz431/5499079) + + > Dolzhenko E, Deshpande V, Schlesinger F, et al. ExpansionHunter: a sequence-graph-based tool to analyze variation in short tandem repeat regions. Birol I, ed. Bioinformatics. 2019;35(22):4754-4756. doi:10.1093/bioinformatics/btz431 + - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) -- [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) +- [GATK](https://genome.cshlp.org/content/20/9/1297) + + > McKenna A, Hanna M, Banks E, et al. The Genome Analysis Toolkit: A MapReduce framework for analyzing next-generation DNA sequencing data. Genome Res. 2010;20(9):1297-1303. doi:10.1101/gr.107524.110 + +- [Genmod](https://github.com/Clinical-Genomics/genmod) + + > Magnusson M, Hughes T, Glabilloy, Bitdeli Chef. genmod: Version 3.7.3. Published online November 15, 2018. doi:10.5281/ZENODO.3841142 + +- [GLnexus](https://academic.oup.com/bioinformatics/article/36/24/5582/6064144) + + > Yun T, Li H, Chang PC, Lin MF, Carroll A, McLean CY. Accurate, scalable cohort variant calls using DeepVariant and GLnexus. Robinson P, ed. Bioinformatics. 2021;36(24):5582-5589. doi:10.1093/bioinformatics/btaa1081 + +- [Haplocheck](https://genome.cshlp.org/content/31/2/309.long) + + > Weissensteiner H, Forer L, Fendt L, et al. Contamination detection in sequencing studies using the mitochondrial phylogeny. Genome Res. 2021;31(2):309-316. doi:10.1101/gr.256545.119 + +- [HaploGrep 2](https://academic.oup.com/nar/article/44/W1/W58/2499296) + + > Weissensteiner H, Pacher D, Kloss-Brandstätter A, et al. HaploGrep 2: mitochondrial haplogroup classification in the era of high-throughput sequencing. Nucleic Acids Res. 2016;44(W1):W58-W63. doi:10.1093/nar/gkw233 + +- [Hmtnote](https://www.biorxiv.org/content/10.1101/600619v1) + + > Preste R, Clima R, Attimonelli M. Human Mitochondrial Variant Annotation with HmtNote. Bioinformatics; 2019. doi:10.1101/600619 - > 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. +- [Manta](https://academic.oup.com/bioinformatics/article/32/8/1220/1743909?login=true) + + > Chen X, Schulz-Trieglaff O, Shaw R, et al. Manta: rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics. 2016;32(8):1220-1222. doi:10.1093/bioinformatics/btv710 + +- [Mosdepth](https://academic.oup.com/bioinformatics/article/34/5/867/4583630?login=true) + + > Pedersen BS, Quinlan AR. Mosdepth: quick coverage calculation for genomes and exomes. Hancock J, ed. Bioinformatics. 2018;34(5):867-868. doi:10.1093/bioinformatics/btx699 + +- [MultiQC](https://academic.oup.com/bioinformatics/article/32/19/3047/2196507) + + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016;32(19):3047-3048. doi:10.1093/bioinformatics/btw354 + +- [Picard](https://broadinstitute.github.io/picard/) + +- [Qualimap](https://academic.oup.com/bioinformatics/article/32/2/292/1744356?login=true) + + > Okonechnikov K, Conesa A, García-Alcalde F. Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data. Bioinformatics. 2016;32(2):292-294. doi:10.1093/bioinformatics/btv566 + +- [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 - [SMNCopyNumberCaller](https://www.nature.com/articles/s41436-020-0754-0) > Chen X, Sanchis-Juan A, French CE, Connel AJ, Delon I, Kingsbury Z, Chawla A, Halpern AL, Taft RJ, NIHR BioResource, Bentley DR, Butchbach MER, Raymond FL, Eberle MA. Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genet Med. February 2020:1-9. doi:10.1038/s41436-020-0754-0 -- [ExpansionHunter](https://academic.oup.com/bioinformatics/article/doi/10.1093/bioinformatics/btz431/5499079) - > Egor Dolzhenko, Viraj Deshpande, Felix Schlesinger, Peter Krusche, Roman Petrovski, Sai Chen, Dorothea Emig-Agius, Andrew Gross, Giuseppe Narzisi, Brett Bowman, Konrad Scheffler, Joke J F A van Vugt, Courtney French, Alba Sanchis-Juan, Kristina Ibáñez, Arianna Tucci, Bryan R Lajoie, Jan H Veldink, F Lucy Raymond, Ryan J Taft, David R Bentley, Michael A Eberle, ExpansionHunter: a sequence-graph-based tool to analyze variation in short tandem repeat regions, Bioinformatics, Volume 35, Issue 22, November 2019, Pages 4754–4756, https://doi.org/10.1093/bioinformatics/btz431 +- [stranger](https://github.com/Clinical-Genomics/stranger) + + > Nilsson D, Magnusson M. moonso/stranger v0.7.1. Published online February 18, 2021. doi:10.5281/ZENODO.4548873 + +- [svdb](https://github.com/J35P312/SVDB) + + > Eisfeldt J, Vezzi F, Olason P, Nilsson D, Lindstrand A. TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Res. 2017;6:664. doi:10.12688/f1000research.11168.2 + +- [Tabix](https://academic.oup.com/bioinformatics/article/27/5/718/262743) + + > Li H. Tabix: fast retrieval of sequence features from generic TAB-delimited files. Bioinformatics. 2011;27(5):718-719. doi:10.1093/bioinformatics/btq671 + +- [TIDDIT](https://f1000research.com/articles/6-664/v2) + + > Eisfeldt J, Vezzi F, Olason P, Nilsson D, Lindstrand A. TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Res. 2017;6:664. doi:10.12688/f1000research.11168.2 + +- [UCSC Bigwig and Bigbed](https://academic.oup.com/bioinformatics/article/26/17/2204/199001?login=true) + + > Kent WJ, Zweig AS, Barber G, Hinrichs AS, Karolchik D. BigWig and BigBed: enabling browsing of large distributed datasets. Bioinformatics. 2010;26(17):2204-2207. doi:10.1093/bioinformatics/btq351 + +- [Vcfanno](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-016-0973-5) + + > Pedersen BS, Layer RM, Quinlan AR. Vcfanno: fast, flexible annotation of genetic variants. Genome Biol. 2016;17(1):118. doi:10.1186/s13059-016-0973-5 ## Software packaging/containerisation tools From d2a83c80bb0bd35b373866fdc2d7ca962d787310 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:22:08 +0100 Subject: [PATCH 1060/1921] update readme --- README.md | 67 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 55d2598f..e4f6c7dd 100644 --- a/README.md +++ b/README.md @@ -28,19 +28,58 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary -1. Metrics: [`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/), [`MultiQC`](http://multiqc.info/) -2. Data preprocessing: [`bwamem2`](http://bio-bwa.sourceforge.net/bwa.shtml) (can [`merge`](http://www.htslib.org/doc/samtools-merge.html)), [`MarkDuplicates`](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) -3. Variant calling + multiple calls are aggregated: - 1. SNVs + short indels: [`DeepVariant`](https://github.com/google/deepvariant), [`DNAscope`](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) - 2. SVs: [`CNVpytor`](https://github.com/abyzovlab/CNVpytor/), [`ExpansionHunter`](https://github.com/Illumina/ExpansionHunter), [`MANTA`](https://github.com/Illumina/manta), [`tiddit/sv`](https://github.com/SciLifeLab/TIDDIT), - 3. Mitochondria: [`eKLIPse`](https://github.com/dooguypapua/eKLIPse), [`Mutect2`](https://gatk.broadinstitute.org/hc/en-us/articles/360037593851-Mutect2) -4. Annotation: [`VCFanno`](https://github.com/brentp/vcfanno),[`VEP`](https://www.ensembl.org/info/docs/tools/vep/index.html) - 1. SNVs: [`CADD`](https://cadd.gs.washington.edu/) - 2. SVs: - 3. Mitochondria: [`gnomAD_mt`](https://gnomad.broadinstitute.org/downloads#v3-mitochondrial-dna), [`Haplogrep`](https://github.com/seppinho/haplogrep-cmd/tree/v2.1.21), [`HmtNote`](https://github.com/robertopreste/HmtNote) -5. Variant ranking: something will be here - -> Databases: [`gnomAD`](https://gnomad.broadinstitute.org/) +**1. Metrics:** + +- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) +- [Mosdepth](https://github.com/brentp/mosdepth) +- [MultiQC](http://multiqc.info/) +- [Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) +- [Qualimap](http://qualimap.conesalab.org/) +- [TIDDIT's cov](https://github.com/J35P312/) + +**2. Alignment:** + +- [bwa](https://github.com/lh3/bwa) +- [bwamem2](http://bio-bwa.sourceforge.net/bwa.shtml) +- [Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) + +**3. Variant calling - SNV:** + +- [DeepVariant](https://github.com/google/deepvariant) +- [Sentieon DNAscope](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) + +**4. Variant calling - SV:** + +- [CNVpytor](https://github.com/abyzovlab/CNVpytor/) +- [MANTA](https://github.com/Illumina/manta) +- [TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) + +**5. Annotation - SNV:** + +- [bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) +- [VCFanno](https://github.com/brentp/vcfanno) +- [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + +**6. Annotation - SV:** + +- [VCFanno](https://github.com/brentp/vcfanno) +- [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + +**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-) +- Annotation: + - [VCFanno](https://github.com/brentp/vcfanno) + - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + +**8. Variant calling - repeat expansions:** + +- [ExpansionHunter](https://github.com/Illumina/ExpansionHunter) +- [stranger](https://github.com/Clinical-Genomics/stranger) + +**9. Rank variants - SV and SNV:** + +- [Genmod](https://github.com/Clinical-Genomics/genmod)

@@ -79,7 +118,7 @@ Note that some form of configuration will be needed so that Nextflow knows how t ```bash nextflow run nf-core/raredisease \ --input samplesheet.csv --outdir --genome GRCh38 \ - --analysis_type \ + --analysis_type \ -revision dev \ -profile ``` From 53f556e8186be727d64b29c61f71670a83460966 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 09:40:41 +0100 Subject: [PATCH 1061/1921] review suggestions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e4f6c7dd..7a0044fb 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - [MultiQC](http://multiqc.info/) - [Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) - [Qualimap](http://qualimap.conesalab.org/) +- [Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) - [TIDDIT's cov](https://github.com/J35P312/) **2. Alignment:** @@ -69,6 +70,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - [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-) - Annotation: + - [Haplogrep2](https://github.com/seppinho/haplogrep-cmd) - [VCFanno](https://github.com/brentp/vcfanno) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) From 862a32d87ba4223e5eaa330487269977eac19c37 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 09:53:36 +0100 Subject: [PATCH 1062/1921] review suggestions --- CITATIONS.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CITATIONS.md b/CITATIONS.md index c23c02da..7b554f04 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -30,6 +30,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 +- [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 + - [ExpansionHunter](https://academic.oup.com/bioinformatics/article/doi/10.1093/bioinformatics/btz431/5499079) > Dolzhenko E, Deshpande V, Schlesinger F, et al. ExpansionHunter: a sequence-graph-based tool to analyze variation in short tandem repeat regions. Birol I, ed. Bioinformatics. 2019;35(22):4754-4756. doi:10.1093/bioinformatics/btz431 @@ -84,6 +88,14 @@ > 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 + +- [Sentieon DNASeq](https://www.frontiersin.org/articles/10.3389/fgene.2019.00736/full) + + > Kendig KI, Baheti S, Bockol MA, et al. Sentieon DNASeq Variant Calling Workflow Demonstrates Strong Computational Performance and Accuracy. Front Genet. 2019;10:736. doi:10.3389/fgene.2019.00736 + - [SMNCopyNumberCaller](https://www.nature.com/articles/s41436-020-0754-0) > Chen X, Sanchis-Juan A, French CE, Connel AJ, Delon I, Kingsbury Z, Chawla A, Halpern AL, Taft RJ, NIHR BioResource, Bentley DR, Butchbach MER, Raymond FL, Eberle MA. Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genet Med. February 2020:1-9. doi:10.1038/s41436-020-0754-0 From 375cd30b16715b5a3f372c69102f7296fc545b79 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 16:20:55 +0100 Subject: [PATCH 1063/1921] switch to skip --- conf/modules/annotate_snvs.config | 8 ++++++-- .../annotate_structural_variants.config | 2 +- conf/modules/rank_variants.config | 4 ++-- conf/modules/raredisease.config | 2 +- conf/modules/scatter_genome.config | 4 ++-- docs/usage.md | 6 +++--- nextflow.config | 6 +++--- nextflow_schema.json | 18 +++++++++--------- workflows/raredisease.nf | 10 +++++----- 9 files changed, 32 insertions(+), 28 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 4587d6a7..9e9e2f0e 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -17,7 +17,11 @@ process { withName: '.*ANNOTATE_SNVS:.*' { - ext.when = params.annotate_snv_switch + ext.when = !params.skip_snv_annotation + } + + withName: '.*ANNOTATE_SNVS:VCFANNO' { + ext.prefix = { "${meta.id}_vcfanno" } publishDir = [ enabled: false ] @@ -44,7 +48,7 @@ process { withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { ext.prefix = { "${meta.id}_${intervals.simpleName}" } - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} + ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 4e508bcb..a951172e 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -17,7 +17,7 @@ process { withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { - ext.when = params.annotate_sv_switch + ext.when = !params.skip_sv_annotation publishDir = [ enabled: false ] diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 8f17d2e2..33a34733 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -17,7 +17,7 @@ process { withName: '.*RANK_VARIANTS_SV:.*' { - ext.when = params.annotate_sv_switch + ext.when = !params.skip_sv_annotation publishDir = [ enabled: false ] @@ -53,7 +53,7 @@ process { process { withName: '.*RANK_VARIANTS_SNV:.*' { - ext.when = params.annotate_snv_switch + ext.when = !params.skip_snv_annotation publishDir = [ enabled: false ] diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 3b18fa95..9b05ffbb 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -56,7 +56,7 @@ process { withName: '.*RAREDISEASE:GATK4_SELECTVARIANTS' { ext.args = "--exclude-intervals ${params.mt_contig_name}" ext.prefix = { "${meta.id}_nomito" } - ext.when = { params.annotate_snv_switch } + ext.when = { !params.skip_snv_annotation } publishDir = [ enabled: params.dedicated_mt_analysis, path: { "${params.outdir}/call_snv" }, diff --git a/conf/modules/scatter_genome.config b/conf/modules/scatter_genome.config index cb804163..f8ecf792 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.annotate_snv_switch && !(params.analysis_type == "wes")} + ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} } withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes")} + ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} ext.prefix = { "${meta.id}_genome_intervals" } publishDir = [ enabled: params.save_reference, diff --git a/docs/usage.md b/docs/usage.md index 0987e71e..59312a06 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -118,7 +118,7 @@ If you would like to see more examples of what a typical samplesheet looks like In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by setting `--annotate_snv_switch` flag to false). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by setting `--skip_snv_annotation` flag to true). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories: @@ -246,8 +246,8 @@ nextflow run nf-core/raredisease \ -profile test, \ --input samplesheet.csv \ --fasta reference.fasta \ - --annotate_snv_switch false \ - --annotate_sv_switch false \ + --skip_snv_annotation true \ + --skip_sv_annotation true \ --outdir ``` diff --git a/nextflow.config b/nextflow.config index a1ed8187..4c8783e0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,9 +22,9 @@ params { // Main options analysis_type = 'wgs' - annotate_snv_switch = true - annotate_sv_switch = true - dedicated_mt_analysis = true + skip_snv_annotation = false + skip_sv_annotation = false + skip_mt_analysis = false gens_switch = false platform = 'illumina' diff --git a/nextflow_schema.json b/nextflow_schema.json index 759512b5..b9cf716f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -388,22 +388,22 @@ "fa_icon": "fas fa-book", "enum": ["wgs", "wes", "mito"] }, - "annotate_snv_switch": { + "skip_snv_annotation": { "type": "boolean", - "default": true, - "description": "Specifies whether or not to run annotate SNV subworkflow.", + "default": false, + "description": "Specifies whether or not to skip annotate SNV subworkflow.", "fa_icon": "fas fa-book" }, - "annotate_sv_switch": { + "skip_sv_annotation": { "type": "boolean", - "default": true, - "description": "Specifies whether or not to run annotate structural variant subworkflow.", + "default": false, + "description": "Specifies whether or not to skip annotate structural variant subworkflow.", "fa_icon": "fas fa-book" }, - "dedicated_mt_analysis": { + "skip_mt_analysis": { "type": "boolean", - "default": true, - "description": "Specifies whether or not to run a separate subworkflow for mitochondrial analysis.", + "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": { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2a0851d3..f7e5fcbe 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -357,7 +357,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(GENS.out.versions) } - if (params.annotate_sv_switch) { + if (!params.skip_sv_annotation) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, @@ -391,7 +391,7 @@ workflow RAREDISEASE { } - if (params.dedicated_mt_analysis) { + if (!params.skip_mt_analysis) { ANALYSE_MT ( ch_mapped.bam_bai, ch_bwa_index, @@ -423,11 +423,11 @@ workflow RAREDISEASE { // VARIANT ANNOTATION - if (params.annotate_snv_switch) { + if (!params.skip_snv_annotation) { ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) - if (params.dedicated_mt_analysis) { + if (!params.skip_mt_analysis) { ch_vcf .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} .set { ch_selvar_in } @@ -456,7 +456,7 @@ workflow RAREDISEASE { ch_snv_annotate = ANNOTATE_SNVS.out.vcf_ann - if (params.dedicated_mt_analysis) { + if (!params.skip_mt_analysis) { ANNOTATE_SNVS.out.vcf_ann .concat(ANALYSE_MT.out.vcf) From 82cac1e2c99d5250d835ef61127588edcd08b8a7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 16:26:34 +0100 Subject: [PATCH 1064/1921] embed license --- bin/add_most_severe_consequence.py | 6 +++++- bin/add_most_severe_pli.py | 6 +++++- bin/check_samplesheet.py | 5 ++++- bin/sentieon_init.sh | 5 ++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bin/add_most_severe_consequence.py b/bin/add_most_severe_consequence.py index 08d7d66d..cb1538c7 100755 --- a/bin/add_most_severe_consequence.py +++ b/bin/add_most_severe_consequence.py @@ -1,4 +1,8 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 + +# Written by Ramprasad Neethiraj and released under the MIT license. +# See git repository (https://github.com/nf-core/raredisease) for full license text. + import argparse import gzip import sys diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py index 8f528389..ce36768e 100755 --- a/bin/add_most_severe_pli.py +++ b/bin/add_most_severe_pli.py @@ -1,4 +1,8 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 + +# Written by Ramprasad Neethiraj and released under the MIT license. +# See git repository (https://github.com/nf-core/raredisease) for full license text. + import argparse import gzip import sys diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 041b4e58..93ade86c 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -1,4 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 + +# Released under the MIT license. +# See git repository (https://github.com/nf-core/raredisease) for full license text. """Provide a command line tool to validate and transform tabular samplesheets.""" diff --git a/bin/sentieon_init.sh b/bin/sentieon_init.sh index ea8f393a..4508141d 100644 --- a/bin/sentieon_init.sh +++ b/bin/sentieon_init.sh @@ -1,5 +1,8 @@ #!/bin/bash -# + +# Written by Ramprasad Neethiraj and released under the MIT license. +# See git repository (https://github.com/nf-core/raredisease) for full license text. + # Sentieon initialization script # This script takes as input the name of a environment # variable holding the Sentieon license encoded as Base64 text From 621651cb5cb1d58390544cb0cd2b3c141892369c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:01:59 +0100 Subject: [PATCH 1065/1921] Credits --- README.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7a0044fb..c95caa97 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,17 @@ [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23raredisease-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/raredisease)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +####TOC + +- [Introduction](#introduction) +- [Pipeline summary](#pipeline-summary) + - [Work in progress flowchart](#work-in-progress-flowchart) +- [Quick Start](#quick-start) +- [Documentation](#documentation) +- [Credits](#credits) +- [Contributions and Support](#contributions-and-support) +- [Citations](#citations) + ## Introduction > NOTE @@ -131,9 +142,9 @@ The nf-core/raredisease pipeline comes with documentation about the pipeline [us ## Credits -nf-core/raredisease was originally written by Clinical Genomics Stockholm. +nf-core/raredisease was mostly written by [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. -Big thanks to the contributors for their extensive assistance in the development of this pipeline. +Big thanks to the [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid), [Lauri Mesilaakso](https://github.com/ljmesi), [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder), [Annick Renevey](https://github.com/rannick), [Peter Pruisscher](https://github.com/peterpru), [Lucas Taniguti](https://github.com/lmtani), [Ryan Kennedy](https://github.com/ryanjameskennedy), and the nf-core community for their extensive assistance in the development of this pipeline. ## Contributions and Support From 78a078139fa30500a2d8492aac8e341a39a475ea Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:16:49 +0100 Subject: [PATCH 1066/1921] pcrfree --- conf/modules/call_snv_sentieon.config | 4 ++-- nextflow.config | 2 +- nextflow_schema.json | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 67dec7aa..efea9301 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -24,8 +24,8 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.prefix = { "${meta.id}_dnascope" } ext.args2 = { [ - params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcrfree ? "--pcr_indel_model NONE" : '' + params.variant_type ? "--var_type ${params.variant_type}" : '', + params.pcr_amplification ? '' : "--pcr_indel_model NONE" ].join(" ") } } diff --git a/nextflow.config b/nextflow.config index 4c8783e0..ba98ae1c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,7 +39,7 @@ params { ml_model = '' // Dnascope SNV calling - pcrfree = true + pcr_amplification = false variant_type = 'snp,indel' // CNVpytor diff --git a/nextflow_schema.json b/nextflow_schema.json index b9cf716f..e63a7bf6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -456,10 +456,10 @@ "description": "Interval in the reference that will be used in the software", "hidden": true }, - "pcrfree": { + "pcr_amplification": { "type": "boolean", - "default": true, - "description": "indicates whether the sample is PCR Free or not. Set to true for PCR Free samples.", + "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" }, "variant_type": { From c64e99996f6ebd91e550822f24f4c9333b0a5370 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:25:17 +0100 Subject: [PATCH 1067/1921] update conf --- conf/modules/annotate_consequence_pli.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index cec9f942..ca4db826 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -14,7 +14,7 @@ process { withName: '.*ANN_CSQ_PLI_SV:.*' { - ext.when = params.annotate_sv_switch + ext.when = !params.skip_sv_annotation publishDir = [ enabled: false ] @@ -41,7 +41,7 @@ process { process { withName: '.*ANN_CSQ_PLI_SNV:.*' { - ext.when = params.annotate_snv_switch + ext.when = !params.skip_snv_annotation publishDir = [ enabled: false ] From 076051743cc9c842ccd9d67a19c8ea8fb9a8640a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:30:44 +0100 Subject: [PATCH 1068/1921] update configs --- conf/modules/call_snv_deepvariant.config | 4 ++-- conf/modules/call_snv_sentieon.config | 4 ++-- conf/modules/raredisease.config | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index af57cfe8..0493534e 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -38,7 +38,7 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - enabled: !params.dedicated_mt_analysis, + enabled: params.skip_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -47,7 +47,7 @@ process { withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { publishDir = [ - enabled: !params.dedicated_mt_analysis, + enabled: params.skip_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index efea9301..ec4d4480 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -52,7 +52,7 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } publishDir = [ - enabled: !params.dedicated_mt_analysis, + enabled: params.skip_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -61,7 +61,7 @@ process { withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { publishDir = [ - enabled: !params.dedicated_mt_analysis, + enabled: params.skip_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 9b05ffbb..a73ea3f4 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -58,7 +58,7 @@ process { ext.prefix = { "${meta.id}_nomito" } ext.when = { !params.skip_snv_annotation } publishDir = [ - enabled: params.dedicated_mt_analysis, + enabled: !params.skip_mt_analysis, path: { "${params.outdir}/call_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } From 7e622b441a2b732ba01e3ec26d98f4c1a1f7c8aa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 16 Mar 2023 21:06:46 +0100 Subject: [PATCH 1069/1921] update config --- conf/modules/annotate_snvs.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 9e9e2f0e..6046311f 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -87,7 +87,7 @@ process { withName: '.*ANNOTATE_SNVS:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes") } + ext.when = { !(params.analysis_type == "wes") } publishDir = [ enabled: !params.analysis_type.equals('wes'), path: { "${params.outdir}/annotate_snv" }, @@ -97,7 +97,7 @@ process { } withName: '.*ANNOTATE_SNVS:TABIX_BCFTOOLS_CONCAT' { - ext.when = { params.annotate_snv_switch && !(params.analysis_type == "wes") } + ext.when = { !(params.analysis_type == "wes") } publishDir = [ enabled: !params.analysis_type.equals('wes'), path: { "${params.outdir}/annotate_snv" }, From b9b6a6fa8eaddf6d66272f64dbe775da010bf862 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 06:53:05 +0100 Subject: [PATCH 1070/1921] alignment --- README.md | 3 +-- docs/output.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7a0044fb..e1b4dbf3 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,7 @@ On release, automated continuous integration tests run the pipeline on a full-si **2. Alignment:** -- [bwa](https://github.com/lh3/bwa) -- [bwamem2](http://bio-bwa.sourceforge.net/bwa.shtml) +- [Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) - [Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) **3. Variant calling - SNV:** diff --git a/docs/output.md b/docs/output.md index 36391053..e5e3f0c3 100644 --- a/docs/output.md +++ b/docs/output.md @@ -16,6 +16,53 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution +### Alignment + +#### Mapping + +##### Bwa-mem2 + +[Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) + +##### Sentieon + +[Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) + +#### Duplicate marking + +##### Picard's MarkDuplicates + +[Picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) + +##### Sentieon dedup + +[Sentieon dedup](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#remove-or-mark-duplicates) + +

+Output files from Alignment + +- `{outputdir}/alignment/` + - `*.bam`: FastQC report containing quality metrics. + - `*.bai`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + - `.metrics.txt`: Text file containing the dedup metrics. +
+ +### Quality control and metrics + +### Variant calling - SNV + +### Variant calling - SV + +### Variant calling - repeat expansions + +### Annotation - SNV + +### Annotation - SV + +### Mitochondrial analysis + +### Rank variants and filtering + ### FastQC
From 5ea52ab306e3ac62db45ed496d87c514b7d55f3c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 08:26:22 +0100 Subject: [PATCH 1071/1921] fix sentieon prefixes --- conf/modules/align_sentieon.config | 4 +++ modules/local/ensemblvep/main.nf | 30 +++++++++---------- modules/local/sentieon/bqsr.nf | 38 ++++++++++++------------ modules/local/sentieon/datametrics.nf | 14 ++++----- modules/local/sentieon/dedup.nf | 18 +++++------ modules/local/sentieon/dnamodelapply.nf | 14 ++++----- modules/local/sentieon/dnascope.nf | 14 ++++----- modules/local/sentieon/locuscollector.nf | 14 ++++----- modules/local/sentieon/readwriter.nf | 14 ++++----- modules/local/sentieon/tnscope.nf | 12 ++++---- modules/local/sentieon/wgsmetricsalgo.nf | 6 ++-- 11 files changed, 91 insertions(+), 87 deletions(-) diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index 549e2c6e..42073097 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -29,6 +29,10 @@ process { ext.prefix = { "${meta.id}_datametrics" } } + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_READWRITER' { + ext.prefix = { "${meta.id}_merged" } + } + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { ext.prefix = { "${meta.id}_locuscollector" } } diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index ecff7854..47219c5f 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -19,14 +19,14 @@ process ENSEMBLVEP { path extra_files output: - tuple val(meta), path("*.ann.vcf") , optional:true, emit: vcf - tuple val(meta), path("*.ann.tab") , optional:true, emit: tab - tuple val(meta), path("*.ann.json") , optional:true, emit: json - tuple val(meta), path("*.ann.vcf.gz") , optional:true, emit: vcf_gz - tuple val(meta), path("*.ann.tab.gz") , optional:true, emit: tab_gz - tuple val(meta), path("*.ann.json.gz") , optional:true, emit: json_gz - path "*.summary.html" , optional:true, emit: report - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf") , optional:true, emit: vcf + tuple val(meta), path("*.tab") , optional:true, emit: tab + tuple val(meta), path("*.json") , optional:true, emit: json + tuple val(meta), path("*.vcf.gz") , optional:true, emit: vcf_gz + tuple val(meta), path("*.tab.gz") , optional:true, emit: tab_gz + tuple val(meta), path("*.json.gz"), optional:true, emit: json_gz + path "*.summary.html" , optional:true, emit: report + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -43,7 +43,7 @@ process ENSEMBLVEP { """ vep \\ -i $vcf \\ - -o ${prefix}.ann.${file_extension}${compress_out} \\ + -o ${prefix}.${file_extension}${compress_out} \\ $args \\ $reference \\ --assembly $genome \\ @@ -64,12 +64,12 @@ process ENSEMBLVEP { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.ann.vcf - touch ${prefix}.ann.tab - touch ${prefix}.ann.json - touch ${prefix}.ann.vcf.gz - touch ${prefix}.ann.tab.gz - touch ${prefix}.ann.json.gz + touch ${prefix}.vcf + touch ${prefix}.tab + touch ${prefix}.json + touch ${prefix}.vcf.gz + touch ${prefix}.tab.gz + touch ${prefix}.json.gz touch ${prefix}.summary.html cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index 72ba06b4..dc659871 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -13,18 +13,18 @@ process SENTIEON_BQSR { tuple val(meta3), path(known_dbsnp_tbi) output: - tuple val(meta), path('*_recal.bam') , emit: bam - tuple val(meta), path('*_recal.bam.bai') , emit: bai - tuple val(meta), path('*_recal_data.table') , emit: recal_pre - tuple val(meta), path('*_recal_data.table_post') , emit: recal_post - tuple val(meta), path('*_recal_result.csv') , emit: recal_csv - path "versions.yml" , emit: versions + tuple val(meta), path('*.bam') , emit: bam + tuple val(meta), path('*.bam.bai') , emit: bai + tuple val(meta), path('*.table') , emit: recal_pre + tuple val(meta), path('*.table_post'), emit: recal_post + tuple val(meta), path('*.csv') , emit: recal_csv + 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 args2 = task.ext.args2 ?: '' def args3 = task.ext.args3 ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') @@ -43,27 +43,27 @@ process SENTIEON_BQSR { $input \\ --algo QualCal \\ $dbsnp \\ - ${prefix}_recal_data.table + ${prefix}.table sentieon driver \\ -t ${task.cpus} \\ -r $fasta \\ $args2 \\ $input \\ - -q ${prefix}_recal_data.table \\ + -q ${prefix}.table \\ --algo QualCal \\ $dbsnp \\ - ${prefix}_recal_data.table_post \\ - --algo ReadWriter ${prefix}_recal.bam + ${prefix}.table_post \\ + --algo ReadWriter ${prefix}.bam sentieon driver \\ -t ${task.cpus} \\ $args3 \\ --algo QualCal \\ --plot \\ - --before ${prefix}_recal_data.table \\ - --after ${prefix}_recal_data.table_post \\ - ${prefix}_recal_result.csv + --before ${prefix}.table \\ + --after ${prefix}.table_post \\ + ${prefix}.csv cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -74,11 +74,11 @@ process SENTIEON_BQSR { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_recal.bam - touch ${prefix}_recal.bam.bai - touch ${prefix}_recal_data.table - touch ${prefix}_recal_data.table_post - touch ${prefix}_recal_result.csv + touch ${prefix}.bam + touch ${prefix}.bam.bai + touch ${prefix}.table + touch ${prefix}.table_post + touch ${prefix}.csv cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 012054b7..498338f1 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -11,13 +11,13 @@ process SENTIEON_DATAMETRICS { path fai output: - tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics - tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics - tuple val(meta), path('*gc_summary.txt') , emit: gc_summary - tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics - tuple val(meta), path('*aln_metrics.txt') , emit: aln_metrics - tuple val(meta), path('*is_metrics.txt') , emit: is_metrics - path "versions.yml" , emit: versions + tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics + tuple val(meta), path('*qd_metrics.txt') , emit: qd_metrics + tuple val(meta), path('*gc_summary.txt') , emit: gc_summary + tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics + tuple val(meta), path('*aln_metrics.txt'), emit: aln_metrics + tuple val(meta), path('*is_metrics.txt') , emit: is_metrics + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 074df701..6730e7b5 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -11,10 +11,10 @@ process SENTIEON_DEDUP { path fai output: - tuple val(meta), path('*dedup.bam') , emit: bam - tuple val(meta), path('*dedup.bam.bai') , emit: bai - tuple val(meta), path('*dedup_metrics.txt') , emit: metrics_dedup - path "versions.yml" , emit: versions + tuple val(meta), path('*.bam') , emit: bam + tuple val(meta), path('*.bam.bai') , emit: bai + tuple val(meta), path('*_metrics.txt'), emit: metrics_dedup + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -36,8 +36,8 @@ process SENTIEON_DEDUP { $args \\ --algo Dedup \\ --score_info $score \\ - --metrics ${prefix}_dedup_metrics.txt \\ - ${prefix}_dedup.bam + --metrics ${prefix}_metrics.txt \\ + ${prefix}.bam cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -48,9 +48,9 @@ process SENTIEON_DEDUP { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_dedup.bam - touch ${prefix}_dedup.bam.bai - touch ${prefix}_dedup_metrics.txt + touch ${prefix}.bam + touch ${prefix}.bam.bai + touch ${prefix}_metrics.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf index 3da61591..d2aaebff 100644 --- a/modules/local/sentieon/dnamodelapply.nf +++ b/modules/local/sentieon/dnamodelapply.nf @@ -10,10 +10,10 @@ process SENTIEON_DNAMODELAPPLY { path ml_model output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*.vcf.gz.tbi") , emit: index - tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: index + tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi"), emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -28,7 +28,7 @@ process SENTIEON_DNAMODELAPPLY { --algo DNAModelApply \\ --model $ml_model \\ -v $vcf \\ - ${prefix}_dnascope_ml.vcf.gz + ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -39,8 +39,8 @@ process SENTIEON_DNAMODELAPPLY { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_dnascope_ml.vcf.gz - touch ${prefix}_dnascope_ml.vcf.gz.tbi + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index 5bd5ac15..f9896c76 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -13,10 +13,10 @@ process SENTIEON_DNASCOPE { path ml_model output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*.vcf.gz.tbi") , emit: index - tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: index + tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi"), emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -40,7 +40,7 @@ process SENTIEON_DNASCOPE { $interval \\ $args2 \\ $model \\ - ${prefix}_dnascope.vcf.gz + ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -51,8 +51,8 @@ process SENTIEON_DNASCOPE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_dnascope.vcf.gz - touch ${prefix}_dnascope.vcf.gz.tbi + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index c5448117..fa54756d 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -9,16 +9,16 @@ process SENTIEON_LOCUSCOLLECTOR { tuple val(meta), path(bam), path(bai) output: - tuple val(meta), path('*score.txt.gz') , emit: score , optional: true - tuple val(meta), path('*score.txt.gz.tbi') , emit: score_idx , optional: true - path "versions.yml" , emit: versions + tuple val(meta), path('*txt.gz') , emit: score , optional: true + tuple val(meta), path('*txt.gz.tbi'), emit: score_idx, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ? "${task.ext.prefix}_score.txt.gz" : "${meta.id}_score.txt.gz" + def prefix = task.ext.prefix ? "${task.ext.prefix}.txt.gz" : "${meta.id}.txt.gz" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" @@ -39,10 +39,10 @@ process SENTIEON_LOCUSCOLLECTOR { """ stub: - def prefix = task.ext.prefix ? "${task.ext.prefix}_score.gz" : "${meta.id}_score.gz" + def prefix = task.ext.prefix ? "${task.ext.prefix}.txt.gz" : "${meta.id}.txt.gz" """ - touch ${prefix}_score.txt.gz - touch ${prefix}_score.txt.gz.tbi + touch ${prefix}.txt.gz + touch ${prefix}.txt.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/readwriter.nf b/modules/local/sentieon/readwriter.nf index 3eaf8590..5490dd75 100644 --- a/modules/local/sentieon/readwriter.nf +++ b/modules/local/sentieon/readwriter.nf @@ -9,10 +9,10 @@ process SENTIEON_READWRITER { tuple val(meta), path(bam), path(bai) output: - tuple val(meta), path('*merged.bam') , emit: bam - tuple val(meta), path('*merged.bam.bai') , emit: bai - tuple val(meta), path('*merged.bam'), path('*merged.bam.bai') , emit: bam_bai - path "versions.yml" , emit: versions + tuple val(meta), path('*.bam') , emit: bam + tuple val(meta), path('*.bam.bai') , emit: bai + tuple val(meta), path('*.bam'), path('*.bam.bai'), emit: bam_bai + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -32,7 +32,7 @@ process SENTIEON_READWRITER { -t $task.cpus \\ $input \\ --algo ReadWriter \\ - ${prefix}_merged.bam + ${prefix}.bam cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -43,8 +43,8 @@ process SENTIEON_READWRITER { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_merged.bam - touch ${prefix}_merged.bam.bai + touch ${prefix}.bam + touch ${prefix}.bam.bai cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf index d16b5ab9..7cfc1c06 100644 --- a/modules/local/sentieon/tnscope.nf +++ b/modules/local/sentieon/tnscope.nf @@ -9,9 +9,9 @@ process SENTIEON_TNSCOPE { path fai output: - tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz") , emit: vcf - tuple val(meta), path("*_TNscope_MTcalls_unfiltered.vcf.gz.tbi") , emit: vcf_index - path "versions.yml" , emit: versions + tuple val(meta), path("*vcf.gz") , emit: vcf + tuple val(meta), path("*vcf.gz.tbi"), emit: vcf_index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,7 +30,7 @@ process SENTIEON_TNSCOPE { --algo TNscope \\ --tumor_sample ${meta.id} \\ $call_settings \\ - ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz + ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -41,8 +41,8 @@ process SENTIEON_TNSCOPE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz - touch ${prefix}_TNscope_MTcalls_unfiltered.vcf.gz.tbi + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 2165741c..12348b1f 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -12,8 +12,8 @@ process SENTIEON_WGSMETRICSALGO { path intervals_list output: - tuple val(meta), path('*wgs_metrics.txt'), emit: wgs_metrics - path "versions.yml" , emit: versions + tuple val(meta), path('*.txt'), emit: wgs_metrics + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -36,7 +36,7 @@ process SENTIEON_WGSMETRICSALGO { $input \\ $interval \\ $args \\ - --algo WgsMetricsAlgo ${prefix}_wgs_metrics.txt + --algo WgsMetricsAlgo ${prefix}.txt cat <<-END_VERSIONS > versions.yml "${task.process}": From d0a9f692d16a1d2832b59f80cc1477ce451a50b6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 11:02:42 +0100 Subject: [PATCH 1072/1921] add headings --- README.md | 2 +- docs/output.md | 112 ++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 103 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e1b4dbf3..f2eb9e39 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ On release, automated continuous integration tests run the pipeline on a full-si **4. Variant calling - SV:** - [CNVpytor](https://github.com/abyzovlab/CNVpytor/) -- [MANTA](https://github.com/Illumina/manta) +- [Manta](https://github.com/Illumina/manta) - [TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) **5. Annotation - SNV:** diff --git a/docs/output.md b/docs/output.md index e5e3f0c3..52bd5855 100644 --- a/docs/output.md +++ b/docs/output.md @@ -6,27 +6,21 @@ This document describes the output produced by the pipeline. Most of the plots a The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. - - ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -- [FastQC](#fastqc) - Raw read QC -- [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline -- [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution - ### Alignment #### Mapping ##### Bwa-mem2 -[Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) +[Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) used to map the reads to a reference genome. The aligned reads are coordinate sorted with samtools sort. These files are treated as intermediates and are not placed in the output folder by default. ##### Sentieon -[Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) +[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. It is not the default aligner, but it can be chosen over bwamem2 by setting `--aligner` option to sentieon. #### Duplicate marking @@ -44,25 +38,123 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `{outputdir}/alignment/` - `*.bam`: FastQC report containing quality metrics. - `*.bai`: Zip archive containing the FastQC report, tab-delimited data file and plot images. - - `.metrics.txt`: Text file containing the dedup metrics. + - `*.txt`: Text file containing the dedup metrics.
-### Quality control and metrics +### Quality control and reporting + +#### Quality control + +##### FastQC + +[FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + +##### Mosdepth + +[Mosdepth](https://github.com/brentp/mosdepth) + +##### Picardtools + +[Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) + +##### Qualimap + +[Qualimap](http://qualimap.conesalab.org/) + +##### Sention WgsMetricsAlgo + +[Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) + +#### TIDDIT cov + +[TIDDIT's cov](https://github.com/J35P312/) + +#### Reporting + +##### MultiQC + +[MultiQC](http://multiqc.info/) ### Variant calling - SNV +#### DeepVariant + +[DeepVariant](https://github.com/google/deepvariant) + +#### Sentieon DNAscope + +[Sentieon DNAscope](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) + ### Variant calling - SV +#### Manta + +[Manta](https://github.com/Illumina/manta) + +#### TIDDIT sv + +[TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) + ### Variant calling - repeat expansions +#### ExpansionsHunter + +[ExpansionHunter](https://github.com/Illumina/ExpansionHunter) + +#### stranger + +[stranger](https://github.com/Clinical-Genomics/stranger) + ### Annotation - SNV +#### bcftools roh + +[bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) + +#### VCFanno + +[VCFanno](https://github.com/brentp/vcfanno) + +#### VEP + +[VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + ### Annotation - SV +#### VCFanno + +[VCFanno](https://github.com/brentp/vcfanno) + +#### VEP + +[VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + ### Mitochondrial analysis +#### Alignment and variant calling + +[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-) + +#### Annotation: + +##### Haplogrep2 + +[Haplogrep2](https://github.com/seppinho/haplogrep-cmd) + +##### VCFanno + +[VCFanno](https://github.com/brentp/vcfanno) + +##### VEP + +[VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + ### Rank variants and filtering +#### Genmod + +[Genmod](https://github.com/Clinical-Genomics/genmod) + ### FastQC
From 0790d40575a1566b990e5078ce61e5ddb6add778 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 13:45:44 +0100 Subject: [PATCH 1073/1921] updates --- README.md | 2 +- conf/modules/align.config | 8 -------- conf/modules/align_bwamem2.config | 7 +++++-- conf/modules/align_sentieon.config | 3 +++ conf/modules/analyse_MT.config | 2 +- conf/modules/annotate_snvs.config | 2 +- docs/usage.md | 6 +++--- 7 files changed, 14 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index c95caa97..ee582359 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23raredisease-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/raredisease)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) -####TOC +#### TOC - [Introduction](#introduction) - [Pipeline summary](#pipeline-summary) diff --git a/conf/modules/align.config b/conf/modules/align.config index be3fee28..2812ef7f 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -10,11 +10,3 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ - -process{ - withName: '.*ALIGN:.*' { - publishDir = [ - enabled: false - ] - } -} diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config index c6310310..8d9a5473 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwamem2.config @@ -18,6 +18,9 @@ process { withName: '.*ALIGN_BWAMEM2:.*' { ext.when = params.aligner.equals("bwamem2") + publishDir = [ + enabled: false + ] } withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { @@ -37,7 +40,7 @@ process { publishDir = [ path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } @@ -45,7 +48,7 @@ process { publishDir = [ path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index 42073097..2943ccb5 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -18,6 +18,9 @@ process { withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") + publishDir = [ + enabled: false + ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { diff --git a/conf/modules/analyse_MT.config b/conf/modules/analyse_MT.config index ec082bcd..85568e3e 100644 --- a/conf/modules/analyse_MT.config +++ b/conf/modules/analyse_MT.config @@ -22,8 +22,8 @@ process { ] } } -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/annotate_snvs.config b/conf/modules/annotate_snvs.config index 6046311f..7df621a8 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -48,7 +48,7 @@ process { withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { ext.prefix = { "${meta.id}_${intervals.simpleName}" } - ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} + ext.when = { !(params.analysis_type == "wes") } } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { diff --git a/docs/usage.md b/docs/usage.md index 59312a06..e5fa333f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -118,7 +118,7 @@ If you would like to see more examples of what a typical samplesheet looks like In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by setting `--skip_snv_annotation` flag to true). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories: @@ -246,8 +246,8 @@ nextflow run nf-core/raredisease \ -profile test, \ --input samplesheet.csv \ --fasta reference.fasta \ - --skip_snv_annotation true \ - --skip_sv_annotation true \ + --skip_snv_annotation \ + --skip_sv_annotation \ --outdir ``` From a83724bcb575595cb442653392b488be4896a34a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 13:57:03 +0100 Subject: [PATCH 1074/1921] review suggestions --- README.md | 2 +- conf/modules/align.config | 8 -------- conf/modules/analyse_MT.config | 2 +- conf/modules/annotate_snvs.config | 2 +- docs/usage.md | 6 +++--- nextflow.config | 8 ++++---- 6 files changed, 10 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index c95caa97..ee582359 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23raredisease-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/raredisease)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) -####TOC +#### TOC - [Introduction](#introduction) - [Pipeline summary](#pipeline-summary) diff --git a/conf/modules/align.config b/conf/modules/align.config index be3fee28..2812ef7f 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -10,11 +10,3 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ - -process{ - withName: '.*ALIGN:.*' { - publishDir = [ - enabled: false - ] - } -} diff --git a/conf/modules/analyse_MT.config b/conf/modules/analyse_MT.config index ec082bcd..85568e3e 100644 --- a/conf/modules/analyse_MT.config +++ b/conf/modules/analyse_MT.config @@ -22,8 +22,8 @@ process { ] } } -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/annotate_snvs.config b/conf/modules/annotate_snvs.config index 6046311f..7df621a8 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -48,7 +48,7 @@ process { withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { ext.prefix = { "${meta.id}_${intervals.simpleName}" } - ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} + ext.when = { !(params.analysis_type == "wes") } } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { diff --git a/docs/usage.md b/docs/usage.md index 59312a06..e5fa333f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -118,7 +118,7 @@ If you would like to see more examples of what a typical samplesheet looks like In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by setting `--skip_snv_annotation` flag to true). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories: @@ -246,8 +246,8 @@ nextflow run nf-core/raredisease \ -profile test, \ --input samplesheet.csv \ --fasta reference.fasta \ - --skip_snv_annotation true \ - --skip_sv_annotation true \ + --skip_snv_annotation \ + --skip_sv_annotation \ --outdir ``` diff --git a/nextflow.config b/nextflow.config index ba98ae1c..857887e8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -245,17 +245,18 @@ manifest { // Load DSL2 module options from config files, where each file contains the options for modules used in the eponymous subworkflow. +includeConfig 'conf/modules/raredisease.config' +includeConfig 'conf/modules/align.config' +includeConfig 'conf/modules/analyse_MT.config' +includeConfig 'conf/modules/call_snv.config' includeConfig 'conf/modules/align_and_call_MT.config' includeConfig 'conf/modules/align_bwamem2.config' -includeConfig 'conf/modules/align.config' includeConfig 'conf/modules/align_sentieon.config' -includeConfig 'conf/modules/analyse_MT.config' includeConfig 'conf/modules/annotate_consequence_pli.config' includeConfig 'conf/modules/annotate_snvs.config' includeConfig 'conf/modules/annotate_structural_variants.config' includeConfig 'conf/modules/call_cnv_cnvpytor.config' includeConfig 'conf/modules/call_repeat_expansions.config' -includeConfig 'conf/modules/call_snv.config' includeConfig 'conf/modules/call_snv_deepvariant.config' includeConfig 'conf/modules/call_snv_sentieon.config' includeConfig 'conf/modules/call_structural_variants.config' @@ -269,7 +270,6 @@ includeConfig 'conf/modules/prepare_references.config' includeConfig 'conf/modules/prepare_vcf.config' includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' -includeConfig 'conf/modules/raredisease.config' includeConfig 'conf/modules/scatter_genome.config' // Function to ensure that resource requirements don't go beyond From 8ac99f9c3448a3ab2f29738b87c1497af76890ec Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 14:02:43 +0100 Subject: [PATCH 1075/1921] align config --- conf/modules/align.config | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/conf/modules/align.config b/conf/modules/align.config index 2812ef7f..be3fee28 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -10,3 +10,11 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ + +process{ + withName: '.*ALIGN:.*' { + publishDir = [ + enabled: false + ] + } +} From 922290c5d284774f8b229f71b6cc0125336b872e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 Mar 2023 14:04:30 +0100 Subject: [PATCH 1076/1921] update align configs --- conf/modules/align.config | 8 ++++++++ conf/modules/align_bwamem2.config | 3 --- conf/modules/align_sentieon.config | 3 --- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/conf/modules/align.config b/conf/modules/align.config index 2812ef7f..be3fee28 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -10,3 +10,11 @@ ext.when = Conditional clause ---------------------------------------------------------------------------------------- */ + +process{ + withName: '.*ALIGN:.*' { + publishDir = [ + enabled: false + ] + } +} diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config index 8d9a5473..f4f062e6 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwamem2.config @@ -18,9 +18,6 @@ process { withName: '.*ALIGN_BWAMEM2:.*' { ext.when = params.aligner.equals("bwamem2") - publishDir = [ - enabled: false - ] } withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index 2943ccb5..42073097 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -18,9 +18,6 @@ process { withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") - publishDir = [ - enabled: false - ] } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { From b10f5025d54c99991f7ae0af483c72c4d64cf021 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Mar 2023 09:48:30 +0100 Subject: [PATCH 1077/1921] mosdepth --- docs/output.md | 64 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/docs/output.md b/docs/output.md index 52bd5855..b673f43b 100644 --- a/docs/output.md +++ b/docs/output.md @@ -26,17 +26,17 @@ 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) +[Picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) is used for the removal of 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. ##### Sentieon dedup -[Sentieon dedup](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#remove-or-mark-duplicates) +[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.
Output files from Alignment - `{outputdir}/alignment/` - - `*.bam`: FastQC report containing quality metrics. + - `*.bam`: Bam file containing report containing quality metrics. - `*.bai`: Zip archive containing the FastQC report, tab-delimited data file and plot images. - `*.txt`: Text file containing the dedup metrics.
@@ -47,11 +47,44 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### FastQC -[FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). + +![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) + +![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) + +![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) + +> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. + +
+Output files + +- `{outputdir}/fastqc/{sampleid}_T*/` + - `*_fastqc.html`: FastQC report containing quality metrics. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +
##### Mosdepth -[Mosdepth](https://github.com/brentp/mosdepth) +[Mosdepth](https://github.com/brentp/mosdepth) is used to report quality control metrics such as coverage, and GC content from alignment files. The files generated by mosdepth are published as is, and passed to MultiQC for reporting as well. + +> **NB:** `*region*` files are generated using a a bed file provided using `--target_bed` parameter. + +
+Output files + +- `{outputdir}/qc_bam/` + - `_mosdepth.global.dist.txt`: This file contains a cumulative distribution indicating the proportion of total bases that were covered for at least a given coverage value across each chromosome and the whole genome. + - `_mosdepth.per-base.`: This file contains a coverage for each base in the genome. + - `_mosdepth.quantized.bed.gz>`: This file contains depth in [quantized bins](https://github.com/brentp/mosdepth#quantize). + - `_mosdepth.region.dist.txt`: This file contains a cumulative distribution indicating the proportion of total bases that were covered for in the regions specified using `--by` option. + - `_mosdepth.regions.bed.gz`: This file contains the mean coverage. + - `_mosdepth.summary.txt`: . + - `_mosdepth.thresholds.bed.gz`: . + +
##### Picardtools @@ -155,27 +188,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [Genmod](https://github.com/Clinical-Genomics/genmod) -### FastQC - -
-Output files - -- `fastqc/` - - `*_fastqc.html`: FastQC report containing quality metrics. - - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. - -
- -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). - -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. - ### MultiQC
From 542d4165428c1d0fad14edf604867f0a279b1e2e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:18:04 +0100 Subject: [PATCH 1078/1921] mosdepth --- subworkflows/local/qc_bam.nf | 1 + workflows/raredisease.nf | 1 + 2 files changed, 2 insertions(+) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 49564594..274d92be 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -69,6 +69,7 @@ workflow QC_BAM { tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(bw) ] d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(d4) ] + global_dist = MOSDEPTH.out.global_txt // channel: [ val(meta), path(txt) ] cov = ch_cov // channel: [ val(meta), path(metrics) ] cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] versions = ch_versions // channel: [ path(versions.yml) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f7e5fcbe..e9affa4a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -522,6 +522,7 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.global_dist.map{it[1]}.collect().ifEmpty([])) MULTIQC ( From c902b5b06b94765f4931e591e08411b708371bdd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:30:53 +0100 Subject: [PATCH 1079/1921] wgsmetrics --- workflows/raredisease.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e9affa4a..b8f684fc 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -523,6 +523,7 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.global_dist.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov.map{it[1]}.collect().ifEmpty([])) MULTIQC ( From c24d865d3ff8af2666c9894912682011779b47e9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:17:54 +0100 Subject: [PATCH 1080/1921] picardtools --- docs/output.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/docs/output.md b/docs/output.md index b673f43b..78d01317 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,27 +68,39 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Mosdepth -[Mosdepth](https://github.com/brentp/mosdepth) is used to report quality control metrics such as coverage, and GC content from alignment files. The files generated by mosdepth are published as is, and passed to MultiQC for reporting as well. +[Mosdepth](https://github.com/brentp/mosdepth) is used to report quality control metrics such as coverage, and GC content from alignment files. Global distribution file, generated by this program is passed to MultiQC for generating the following plots, -> **NB:** `*region*` files are generated using a a bed file provided using `--target_bed` parameter. +- Cumulative coverage distribution +- Coverage distribution +- Average coverage per contig
Output files - `{outputdir}/qc_bam/` - `_mosdepth.global.dist.txt`: This file contains a cumulative distribution indicating the proportion of total bases that were covered for at least a given coverage value across each chromosome and the whole genome. - - `_mosdepth.per-base.`: This file contains a coverage for each base in the genome. - - `_mosdepth.quantized.bed.gz>`: This file contains depth in [quantized bins](https://github.com/brentp/mosdepth#quantize). - - `_mosdepth.region.dist.txt`: This file contains a cumulative distribution indicating the proportion of total bases that were covered for in the regions specified using `--by` option. - - `_mosdepth.regions.bed.gz`: This file contains the mean coverage. - - `_mosdepth.summary.txt`: . - - `_mosdepth.thresholds.bed.gz`: . + - `_mosdepth.per-base.d4`: This file contains a coverage for each base in the genome in d4 format. + - `_mosdepth.summary.txt`: This file contains summary statistics, such as mean, minimum and maximum coverage per genomic contig.
##### Picardtools -[Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) +[Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) We use Picardtools' CollectWgsMetrics and CollectHsMetrics utilities to calculate metrics about coverage and performance of WGS & WES experiments. In addition to those metrics, we use CollectMultipleMetrics to gather information about alignment summary, insert size, GC content etc., The metrics generated by these three utilites are passed along to MultiQC to generate several plots as well. + +
+Output files + +- `{outputdir}/qc_bam/` + - `_hsmetrics.CollectHsMetrics.coverage_metrics`: + - `_multiplemetrics.CollectMultipleMetrics.alignment_summary_metrics`: + - `_multiplemetrics.CollectMultipleMetrics.base_distribution_by_cycle_metrics`: + - `_multiplemetrics.CollectMultipleMetrics.insert_size_metrics`: + - `_multiplemetrics.CollectMultipleMetrics.quality_by_cycle_metrics`: + - `_multiplemetrics.CollectMultipleMetrics.quality_distribution_metrics`: + - `_wgsmetrics.CollectWgsMetrics.coverage_metrics`: + - `_wgsmetrics_y.CollectWgsMetrics.coverage_metrics`: +
##### Qualimap From 4f52866198c40301f03bea7411f2fe6da527b4a8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 22 Mar 2023 11:38:54 +0100 Subject: [PATCH 1081/1921] update --- docs/output.md | 277 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 232 insertions(+), 45 deletions(-) diff --git a/docs/output.md b/docs/output.md index 78d01317..9fb4b18e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,6 +10,50 @@ 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: +- [Alignment](#alignment) + - [Mapping](#mapping) + - [Bwa-mem2](#bwa-mem2) + - [Sentieon](#sentieon) + - [Duplicate marking](#duplicate-marking) + - [Picard's MarkDuplicates](#picard-s-markduplicates) + - [Sentieon dedup](#sentieon-dedup) +- [Quality control and reporting](#quality-control-and-reporting) + - [Quality control](#quality-control) + - [FastQC](#fastqc) + - [Mosdepth](#mosdepth) + - [Picardtools](#picardtools) + - [Qualimap](#qualimap) + - [Sention WgsMetricsAlgo](#sention-wgsmetricsalgo) + - [TIDDIT's cov and UCSC WigToBigWig](#tiddit-s-cov-and-ucsc-wigtobigwig) + - [Reporting](#reporting) + - [MultiQC](#multiqc) +- [Variant calling - SNV](#variant-calling---snv) + - [DeepVariant](#deepvariant) + - [Sentieon DNAscope](#sentieon-dnascope) +- [Variant calling - SV](#variant-calling---sv) + - [Manta](#manta) + - [TIDDIT sv](#tiddit-sv) + - [SVDB merge](#svdb-merge) +- [Variant calling - repeat expansions](#variant-calling---repeat-expansions) + - [ExpansionsHunter](#expansionshunter) + - [stranger](#stranger) +- [Annotation - SNV](#annotation---snv) + - [bcftools roh](#bcftools-roh) + - [VCFanno](#vcfanno) + - [VEP](#vep) +- [Annotation - SV](#annotation---sv) + - [SVDB query](#svdb-query) + - [VEP](#vep-1) +- [Mitochondrial analysis](#mitochondrial-analysis) + - [Alignment and variant calling](#alignment-and-variant-calling) + - [Annotation:](#annotation-) + - [Haplogrep2](#haplogrep2) + - [VCFanno](#vcfanno-1) + - [VEP](#vep-2) +- [Rank variants and filtering](#rank-variants-and-filtering) + - [GENMOD](#genmod) +- [Pipeline information](#pipeline-information) + ### Alignment #### Mapping @@ -20,7 +64,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Sentieon -[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. It is not the default aligner, but it can be chosen over bwamem2 by setting `--aligner` option to sentieon. +[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen over bwamem2 by setting `--aligner` option to sentieon. #### Duplicate marking @@ -28,6 +72,15 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [Picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) is used for the removal of 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. +
+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. + - `*.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. @@ -49,14 +102,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) - -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) - -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) - -> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -
Output files @@ -91,7 +136,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
Output files -- `{outputdir}/qc_bam/` +- `{outputdir}/qc_bam/_qualimap/` - `_hsmetrics.CollectHsMetrics.coverage_metrics`: - `_multiplemetrics.CollectMultipleMetrics.alignment_summary_metrics`: - `_multiplemetrics.CollectMultipleMetrics.base_distribution_by_cycle_metrics`: @@ -104,120 +149,264 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Qualimap -[Qualimap](http://qualimap.conesalab.org/) +[Qualimap](http://qualimap.conesalab.org/) also allows you to assess the alignment coverage. Qualimap results are used by MultiQC to generate the following plots. + +- Coverage histogram +- Cumulative genome coverage +- Insert size histogram +- GC content distribution + +
+Output files + +- `{outputdir}/qc_bam/_qualimap/` this directory includes a qualimap report and associated raw statistic files. You can open the .html file in your internet browser to see the in-depth report. +
##### Sention WgsMetricsAlgo -[Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) +[Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) is the sentieon's equivalent of Picard's CollectWgsMetrics. -#### TIDDIT cov +
+Output files -[TIDDIT's cov](https://github.com/J35P312/) +- `{outputdir}/qc_bam/` + - `_wgsmetrics.txt`: +
+ +##### TIDDIT's cov and UCSC WigToBigWig + +[TIDDIT's cov](https://github.com/J35P312/) is used to analyse the read depth of a bam file and generates a coverage report in wig format. This file is later passed to [UCSC WigToBigWig](https://genome.ucsc.edu/goldenPath/help/bigWig.html) to convert the file into a bigwig. + +
+Output files + +- `{outputdir}/qc_bam/` + - `_tidditcov.wig`: + - `.bw`: +
#### Reporting ##### MultiQC -[MultiQC](http://multiqc.info/) +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. + +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + +
+Output files + +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + +
### Variant calling - SNV #### DeepVariant -[DeepVariant](https://github.com/google/deepvariant) +[DeepVariant](https://github.com/google/deepvariant) is a deep learning-based variant caller that takes aligned reads, produces pileup image tensors from them, classifies each tensor using a convolutional neural network and finally reports the results in a standard VCF or gVCF file. Variant calls generated by DeepVariant are joint genotyped using GLnexus, and then normalized using bcftools norm. Only the normalized vcfs are placed in the output folder by default. + +> **NB**: In case you are running the separate mitochondrial analysis, mitochondrial calls are filtered from the normalized vcfs before they are published using GATK SelectVariants. + +
+Output files + +- `call_snv/` + - `_split_rmdup.vcf.gz`: normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. + - `_split_rmdup.vcf.gz.tbi`: index of the normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. + - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. + - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. + +
#### Sentieon DNAscope -[Sentieon DNAscope](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) +The pipeline performs variant calling using [Sentieon DNAscope](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) with a machine learning model. This approach identifies the candidate sites with a higher accuracy, and calculates genotypes for each sample at that site. These files are treated as intermediates and are not placed in the output folder by default. DNAscope is not run by default. To use DNAscope instead of DeepVariant, set `--variant_caller` to sentieon. + +
+Output files + +- `call_snv/` + - `_split_rmdup.vcf.gz`: normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. + - `_split_rmdup.vcf.gz.tbi`: index of the normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. + - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. + - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. + +
### Variant calling - SV #### Manta -[Manta](https://github.com/Illumina/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. #### TIDDIT sv -[TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) +[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. + +#### 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. + +
+Output files + +- `call_sv/` + - `_sv_merge.vcf.gz`: file containing the merged variant calls. + - `_sv_merge.vcf.gz.tbi`: index of the file containing the merged variant calls. + +
### Variant calling - repeat expansions #### ExpansionsHunter -[ExpansionHunter](https://github.com/Illumina/ExpansionHunter) +[ExpansionHunter](https://github.com/Illumina/ExpansionHunter) aims to estimate sizes of repeat sequences by performing a targeted search through alignments that span, flank, and are fully contained in each repeat. + +
+Output files + +- `repeat_expansions/` + - `_repeat_expansion.vcf.gz`: file containing variant calls. + - `_repeat_expansion.vcf.gz.tbi`: index of the file containing variant calls. + +
#### stranger -[stranger](https://github.com/Clinical-Genomics/stranger) +[stranger](https://github.com/Clinical-Genomics/stranger) annotates output files from ExpansionHunter with the pathologic implications of the repeat sizes. + +
+Output files + +- `repeat_expansions/` + - `_repeat_expansion.vcf.gz`: file containing variant calls. + - `_repeat_expansion.vcf.gz.tbi`: index of the file containing variant calls. + +
### Annotation - SNV #### bcftools roh -[bcftools roh](https://samtools.github.io/bcftools/bcftools.html#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. #### VCFanno -[VCFanno](https://github.com/brentp/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. #### VEP -[VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) +[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. We recommend annotating with the following plugins: + +- LoFtool +- pLI +- SpliceAI +- MaxEntScan + +Based on VEP annotations, custom scripts used by the pipeline further annotate each record with the most severe consequence, and pli scores. + +> **NB**: Output files described below include mitochondrial annotations only if --skip_mt_analysis is set to true. + +
+Output files + +- `annotate_snv/` + - `_rohann_vcfanno_filter_vep.vcf.gz`: file containing bcftools roh, vcfanno, and vep annotations. + - `_rohann_vcfanno_filter_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. + - `_vep_csq_pli.vcf.gz`: file containing bcftools roh, vcfanno, vep, consequence and pli annotations. + - `_vep_csq_pli.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, vep, consequence and pli annotations. + +
### Annotation - SV -#### VCFanno +#### SVDB query -[VCFanno](https://github.com/brentp/vcfanno) +[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. #### VEP -[VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) +[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. We recommend annotating with pLI plugin, along with any other custom plugins you may want too use. Based on VEP annotations, custom scripts used by the pipeline further annotate each record with the most severe consequence, and pli scores. + +
+Output files + +- `annotate_sv/` + - `_svdbquery_vep.vcf.gz`: file containing svdb query, and vep annotations. + - `_svdbquery_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. + - `_vep_csq_pli.vcf.gz`: file containing bcftools roh, vcfanno, vep, consequence and pli annotations. + - `_vep_csq_pli.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, vep, consequence and pli annotations. + +
### Mitochondrial analysis +Mitochondrial analysis is run by default, to turn it off set `--skip_mt_analysis` to true. + #### Alignment and variant calling -[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-) +[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-) The mitochondrial genome poses several challenges to the identification and understanding of somatic variants. The circularity of the mitochondrial genome means that the breakpoint in the reference genome is at an arbitrary position in the non-coding control region, creating a challenge in analyzing variation. Additionally, insertions of mitochondrial DNA into the nuclear genome (NuMTs) complicate the mapping of the mitochondrial genome and the distinction between NuMTs and the mitochondrial contig of interest. Lastly, mitochondrial variants often have very low heteroplasmy. Such low allele fraction (AF) variants can thus be mistaken for inherent sequencer noise. + +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. #### Annotation: ##### Haplogrep2 -[Haplogrep2](https://github.com/seppinho/haplogrep-cmd) +[Haplogrep2](https://github.com/seppinho/haplogrep-cmd) allows detecting artificial recombinants and missing variants as well as annotating rare and phantom mutations in mitochondria. Haplogrep generates a text report, which is published by default. + +
+Output files + +- `annotate_mt/` + - `_haplogrep.txt`: file containing haplogroup information. + +
##### VCFanno -[VCFanno](https://github.com/brentp/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. ##### VEP -[VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) +[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. -### Rank variants and filtering +
+Output files + +- `annotate_mt/` + - `_vep_vcfanno_mt.vcf.gz`: file containing mitochondrial annotations. + - `_vep_vcfanno_mt.vcf.gz.tbi`: index of the file containing mitochondrial annotations. -#### Genmod +
+ +### Rank variants and filtering -[Genmod](https://github.com/Clinical-Genomics/genmod) +#### GENMOD -### MultiQC +[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. VCF file annotated by GENMOD are further filtered to separate clinically relevant variants.
Output files -- `multiqc/` - - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - - `multiqc_plots/`: directory containing static images from the report in various formats. +- `rank_and_filter/` + - `_clinical_snv.ann_filter.vcf.gz`: file containing clincal relevant SNVs. + - `_clinical_sv.ann_filter.vcf.gz`: file containing clincal relevant SVs. + - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores. + - `_ranked_snv.vcf.gz.tbi`: file containing SNV annotations with their rank scores. + - `_ranked_sv.ann_filter.vcf.gz`: file containing SV annotations with their rank scores. + - `_ranked_sv.ann_filter.vcf.gz.tbi`: file containing SV annotations with their rank scores.
-[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. - -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . - ### Pipeline information +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +
Output files @@ -227,5 +416,3 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`.
- -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. From 7d7a3e469fbfffc9579c3ad3f8f6109e22a581e3 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Thu, 23 Mar 2023 16:20:35 +0100 Subject: [PATCH 1082/1921] Changed case in tool names --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 2f807192..97a59e83 100644 --- a/README.md +++ b/README.md @@ -68,30 +68,30 @@ On release, automated continuous integration tests run the pipeline on a full-si **5. Annotation - SNV:** - [bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) -- [VCFanno](https://github.com/brentp/vcfanno) +- [vcfanno](https://github.com/brentp/vcfanno) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) **6. Annotation - SV:** -- [VCFanno](https://github.com/brentp/vcfanno) +- [vcfanno](https://github.com/brentp/vcfanno) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) **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-) - Annotation: - - [Haplogrep2](https://github.com/seppinho/haplogrep-cmd) - - [VCFanno](https://github.com/brentp/vcfanno) + - [HaploGrep2](https://github.com/seppinho/haplogrep-cmd) + - [vcfanno](https://github.com/brentp/vcfanno) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) **8. Variant calling - repeat expansions:** -- [ExpansionHunter](https://github.com/Illumina/ExpansionHunter) -- [stranger](https://github.com/Clinical-Genomics/stranger) +- [Expansion Hunter](https://github.com/Illumina/ExpansionHunter) +- [Stranger](https://github.com/Clinical-Genomics/stranger) **9. Rank variants - SV and SNV:** -- [Genmod](https://github.com/Clinical-Genomics/genmod) +- [GENMOD](https://github.com/Clinical-Genomics/genmod)

From d4bc9da181be8bce0b4d221d2bb807d25c1ec380 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Thu, 23 Mar 2023 16:31:16 +0100 Subject: [PATCH 1083/1921] Case change etc --- docs/output.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/output.md b/docs/output.md index 9fb4b18e..312ea3be 100644 --- a/docs/output.md +++ b/docs/output.md @@ -13,7 +13,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Alignment](#alignment) - [Mapping](#mapping) - [Bwa-mem2](#bwa-mem2) - - [Sentieon](#sentieon) + - [Sentieon bwa mem](#sentieon) - [Duplicate marking](#duplicate-marking) - [Picard's MarkDuplicates](#picard-s-markduplicates) - [Sentieon dedup](#sentieon-dedup) @@ -21,9 +21,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Quality control](#quality-control) - [FastQC](#fastqc) - [Mosdepth](#mosdepth) - - [Picardtools](#picardtools) + - [Picard tools](#picardtools) - [Qualimap](#qualimap) - - [Sention WgsMetricsAlgo](#sention-wgsmetricsalgo) + - [Sentieon WgsMetricsAlgo](#sention-wgsmetricsalgo) - [TIDDIT's cov and UCSC WigToBigWig](#tiddit-s-cov-and-ucsc-wigtobigwig) - [Reporting](#reporting) - [MultiQC](#multiqc) @@ -35,11 +35,11 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [TIDDIT sv](#tiddit-sv) - [SVDB merge](#svdb-merge) - [Variant calling - repeat expansions](#variant-calling---repeat-expansions) - - [ExpansionsHunter](#expansionshunter) - - [stranger](#stranger) + - [Expansion Hunter](#expansionshunter) + - [Stranger](#stranger) - [Annotation - SNV](#annotation---snv) - [bcftools roh](#bcftools-roh) - - [VCFanno](#vcfanno) + - [vcfanno](#vcfanno) - [VEP](#vep) - [Annotation - SV](#annotation---sv) - [SVDB query](#svdb-query) @@ -47,8 +47,8 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Mitochondrial analysis](#mitochondrial-analysis) - [Alignment and variant calling](#alignment-and-variant-calling) - [Annotation:](#annotation-) - - [Haplogrep2](#haplogrep2) - - [VCFanno](#vcfanno-1) + - [HaploGrep2](#haplogrep2) + - [vcfanno](#vcfanno-1) - [VEP](#vep-2) - [Rank variants and filtering](#rank-variants-and-filtering) - [GENMOD](#genmod) @@ -62,7 +62,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) used to map the reads to a reference genome. The aligned reads are coordinate sorted with samtools sort. These files are treated as intermediates and are not placed in the output folder by default. -##### Sentieon +##### Sentieon bwa mem [Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen over bwamem2 by setting `--aligner` option to sentieon. @@ -81,9 +81,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `*.txt`: Text file containing the dedup metrics.

-##### Sentieon dedup +##### 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.
Output files from Alignment @@ -129,7 +129,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d
-##### Picardtools +##### Picard tools [Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) We use Picardtools' CollectWgsMetrics and CollectHsMetrics utilities to calculate metrics about coverage and performance of WGS & WES experiments. In addition to those metrics, we use CollectMultipleMetrics to gather information about alignment summary, insert size, GC content etc., The metrics generated by these three utilites are passed along to MultiQC to generate several plots as well. From 67932ae6a96bdc880f7aaaf333e9128475894b5d Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Thu, 23 Mar 2023 16:38:13 +0100 Subject: [PATCH 1084/1921] Updated intralinks and case --- docs/output.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/output.md b/docs/output.md index 312ea3be..3b1a3ad7 100644 --- a/docs/output.md +++ b/docs/output.md @@ -13,7 +13,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Alignment](#alignment) - [Mapping](#mapping) - [Bwa-mem2](#bwa-mem2) - - [Sentieon bwa mem](#sentieon) + - [Sentieon bwa mem](#sentieon-bwa-mem) - [Duplicate marking](#duplicate-marking) - [Picard's MarkDuplicates](#picard-s-markduplicates) - [Sentieon dedup](#sentieon-dedup) @@ -21,10 +21,10 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Quality control](#quality-control) - [FastQC](#fastqc) - [Mosdepth](#mosdepth) - - [Picard tools](#picardtools) + - [Picard tools](#picard-tools) - [Qualimap](#qualimap) - [Sentieon WgsMetricsAlgo](#sention-wgsmetricsalgo) - - [TIDDIT's cov and UCSC WigToBigWig](#tiddit-s-cov-and-ucsc-wigtobigwig) + - [TIDDIT's cov and UCSC WigToBigWig](#tiddits-cov-and-ucsc-wigtobigwig) - [Reporting](#reporting) - [MultiQC](#multiqc) - [Variant calling - SNV](#variant-calling---snv) @@ -35,7 +35,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [TIDDIT sv](#tiddit-sv) - [SVDB merge](#svdb-merge) - [Variant calling - repeat expansions](#variant-calling---repeat-expansions) - - [Expansion Hunter](#expansionshunter) + - [Expansion Hunter](#expansion-hunter) - [Stranger](#stranger) - [Annotation - SNV](#annotation---snv) - [bcftools roh](#bcftools-roh) @@ -262,9 +262,9 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. ### Variant calling - repeat expansions -#### ExpansionsHunter +#### Expansion Hunter -[ExpansionHunter](https://github.com/Illumina/ExpansionHunter) aims to estimate sizes of repeat sequences by performing a targeted search through alignments that span, flank, and are fully contained in each repeat. +[Expansion Hunter](https://github.com/Illumina/ExpansionHunter) aims to estimate sizes of repeat sequences by performing a targeted search through alignments that span, flank, and are fully contained in each repeat.
Output files @@ -275,9 +275,9 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support.
-#### stranger +#### Stranger -[stranger](https://github.com/Clinical-Genomics/stranger) annotates output files from ExpansionHunter with the pathologic implications of the repeat sizes. +[Stranger](https://github.com/Clinical-Genomics/stranger) annotates output files from Expansion Hunter with the pathologic implications of the repeat sizes.
Output files @@ -294,9 +294,9 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. [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. -#### VCFanno +#### 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 vep for further annotation. #### VEP @@ -355,9 +355,9 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen #### Annotation: -##### Haplogrep2 +##### HaploGrep2 -[Haplogrep2](https://github.com/seppinho/haplogrep-cmd) allows detecting artificial recombinants and missing variants as well as annotating rare and phantom mutations in mitochondria. Haplogrep generates a text report, which is published by default. +[HaploGrep2](https://github.com/seppinho/haplogrep-cmd) allows detecting artificial recombinants and missing variants as well as annotating rare and phantom mutations in mitochondria. Haplogrep generates a text report, which is published by default.
Output files @@ -367,9 +367,9 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen
-##### VCFanno +##### 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 vep for further annotation. ##### VEP From 720948749afb244971c638cc50c5cd7198033a88 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Mar 2023 23:09:39 +0100 Subject: [PATCH 1085/1921] review suggestions --- README.md | 2 +- docs/output.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2f807192..4314298d 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ On release, automated continuous integration tests run the pipeline on a full-si **6. Annotation - SV:** -- [VCFanno](https://github.com/brentp/vcfanno) +- [SVDB query](https://github.com/J35P312/SVDB#Query) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) **7. Mitochondrial analysis:** diff --git a/docs/output.md b/docs/output.md index 9fb4b18e..42248cbf 100644 --- a/docs/output.md +++ b/docs/output.md @@ -70,7 +70,7 @@ 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 the removal of 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.
Output files from Alignment @@ -113,7 +113,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Mosdepth -[Mosdepth](https://github.com/brentp/mosdepth) is used to report quality control metrics such as coverage, and GC content from alignment files. Global distribution file, generated by this program is passed to MultiQC for generating the following plots, +[Mosdepth](https://github.com/brentp/mosdepth) is used to report quality control metrics such as coverage, and GC content from alignment files. The global distribution file, generated by this program is passed to MultiQC for generating the following plots, - Cumulative coverage distribution - Coverage distribution @@ -207,7 +207,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ #### DeepVariant -[DeepVariant](https://github.com/google/deepvariant) is a deep learning-based variant caller that takes aligned reads, produces pileup image tensors from them, classifies each tensor using a convolutional neural network and finally reports the results in a standard VCF or gVCF file. Variant calls generated by DeepVariant are joint genotyped using GLnexus, and then normalized using bcftools norm. Only the normalized vcfs are placed in the output folder by default. +[DeepVariant](https://github.com/google/deepvariant) is a deep learning-based variant caller that takes aligned reads, produces pileup image tensors from them, classifies each tensor using a convolutional neural network and finally reports the results in a standard VCF or gVCF file. Variant calls generated by DeepVariant are joint genotyped using [GLnexus](https://github.com/dnanexus-rnd/GLnexus), and then normalized using bcftools norm. Only the normalized vcfs are placed in the output folder by default. > **NB**: In case you are running the separate mitochondrial analysis, mitochondrial calls are filtered from the normalized vcfs before they are published using GATK SelectVariants. @@ -388,7 +388,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen #### GENMOD -[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. VCF file annotated by GENMOD are further filtered to separate clinically relevant variants. +[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. VCF file annotated by GENMOD are further filtered using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) to separate clinically relevant variants.
Output files From a9a20bb7f80474a4823a95dca59ed3aa565f4274 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Mar 2023 11:07:04 +0100 Subject: [PATCH 1086/1921] todo --- README.md | 2 -- conf/base.config | 2 -- 2 files changed, 4 deletions(-) diff --git a/README.md b/README.md index 818f55cd..1e096de7 100644 --- a/README.md +++ b/README.md @@ -156,8 +156,6 @@ For further information or help, don't hesitate to get in touch on the [Slack `# - - An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. You can cite the `nf-core` publication as follows: diff --git a/conf/base.config b/conf/base.config index d84b67a8..3479669b 100644 --- a/conf/base.config +++ b/conf/base.config @@ -10,7 +10,6 @@ process { - // TODO nf-core: Check the defaults for all processes cpus = { check_max( 1 * task.attempt, 'cpus' ) } memory = { check_max( 6.GB * task.attempt, 'memory' ) } time = { check_max( 4.h * task.attempt, 'time' ) } @@ -24,7 +23,6 @@ process { // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. // If possible, it would be nice to keep the same label naming convention when // adding in your local modules too. - // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_single { cpus = { check_max( 1 , 'cpus' ) } From 4c48853b1e9aa4cff887dda2deb29f13237564a8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Mar 2023 15:29:46 +0100 Subject: [PATCH 1087/1921] update modules --- modules.json | 90 +++++++++---------- modules/nf-core/bcftools/norm/main.nf | 22 +++-- modules/nf-core/bcftools/norm/meta.yml | 4 +- modules/nf-core/cat/cat/meta.yml | 4 +- modules/nf-core/cnvpytor/callcnvs/meta.yml | 1 + .../nf-core/cnvpytor/importreaddepth/meta.yml | 6 +- .../custom/dumpsoftwareversions/main.nf | 6 +- .../templates/dumpsoftwareversions.py | 3 +- modules/nf-core/deepvariant/meta.yml | 2 +- modules/nf-core/expansionhunter/meta.yml | 2 +- .../nf-core/gatk4/bedtointervallist/main.nf | 12 +-- .../gatk4/createsequencedictionary/main.nf | 10 +-- .../gatk4/createsequencedictionary/meta.yml | 34 +++---- .../nf-core/gatk4/filtermutectcalls/main.nf | 12 +-- .../nf-core/gatk4/intervallisttools/main.nf | 12 +-- .../nf-core/gatk4/mergebamalignment/main.nf | 12 +-- modules/nf-core/gatk4/mergevcfs/main.nf | 12 +-- modules/nf-core/gatk4/mutect2/main.nf | 12 +-- modules/nf-core/gatk4/printreads/main.nf | 12 +-- modules/nf-core/gatk4/revertsam/main.nf | 12 +-- modules/nf-core/gatk4/samtofastq/main.nf | 12 +-- modules/nf-core/gatk4/selectvariants/main.nf | 12 +-- modules/nf-core/gatk4/splitintervals/main.nf | 12 +-- modules/nf-core/gatk4/splitintervals/meta.yml | 1 + .../nf-core/gatk4/variantfiltration/main.nf | 12 +-- modules/nf-core/genmod/annotate/meta.yml | 2 +- modules/nf-core/genmod/compound/meta.yml | 2 +- modules/nf-core/genmod/models/meta.yml | 2 +- modules/nf-core/genmod/score/meta.yml | 2 +- modules/nf-core/glnexus/meta.yml | 4 +- modules/nf-core/haplogrep2/classify/meta.yml | 5 +- modules/nf-core/hmtnote/meta.yml | 4 +- modules/nf-core/mosdepth/main.nf | 5 +- .../picard/addorreplacereadgroups/main.nf | 14 +-- .../nf-core/picard/collecthsmetrics/main.nf | 12 +-- .../picard/collectmultiplemetrics/main.nf | 12 +-- .../nf-core/picard/collectwgsmetrics/main.nf | 12 +-- .../nf-core/picard/collectwgsmetrics/meta.yml | 2 + modules/nf-core/picard/liftovervcf/main.nf | 14 +-- modules/nf-core/picard/liftovervcf/meta.yml | 2 +- modules/nf-core/picard/markduplicates/main.nf | 12 +-- .../nf-core/picard/renamesampleinvcf/main.nf | 12 +-- .../nf-core/picard/renamesampleinvcf/meta.yml | 2 +- modules/nf-core/picard/sortvcf/main.nf | 12 +-- modules/nf-core/qualimap/bamqc/main.nf | 2 +- modules/nf-core/rhocall/annotate/meta.yml | 2 +- modules/nf-core/samtools/index/meta.yml | 2 +- modules/nf-core/samtools/merge/meta.yml | 2 +- modules/nf-core/samtools/sort/meta.yml | 2 +- modules/nf-core/samtools/stats/meta.yml | 14 +-- modules/nf-core/smncopynumbercaller/meta.yml | 2 +- modules/nf-core/ucsc/wigtobigwig/meta.yml | 5 +- modules/nf-core/vcfanno/meta.yml | 2 +- subworkflows/local/qc_bam.nf | 20 ++--- 54 files changed, 263 insertions(+), 251 deletions(-) diff --git a/modules.json b/modules.json index c7d7d205..c837fa25 100644 --- a/modules.json +++ b/modules.json @@ -22,7 +22,7 @@ }, "bcftools/norm": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "bcad95fb35e567ad25840d3297c3e17eff211a3a", "installed_by": ["modules"] }, "bcftools/reheader": { @@ -57,12 +57,12 @@ }, "cat/cat": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "cnvpytor/callcnvs": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "cnvpytor/histogram": { @@ -72,7 +72,7 @@ }, "cnvpytor/importreaddepth": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "cnvpytor/partition": { @@ -87,17 +87,17 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "b6d4d476aee074311c89d82a69c1921bd70c8180", "installed_by": ["modules"] }, "deepvariant": { "branch": "master", - "git_sha": "c62b41a07a00fee11ec73e2a0d4a1aec771a742b", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "fastqc": { @@ -107,92 +107,92 @@ }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "glnexus": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "haplocheck": { @@ -202,12 +202,12 @@ }, "haplogrep2/classify": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "hmtnote": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "manta/germline": { @@ -217,7 +217,7 @@ }, "mosdepth": { "branch": "master", - "git_sha": "def5f182583df0c20f43ec3d4355e8ebd341aaa9", + "git_sha": "783cc040350dbee673fd57f6a6300aea3d085b7c", "installed_by": ["modules"] }, "multiqc": { @@ -227,52 +227,52 @@ }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "28995552268a117551ded48dadcf42b0caf0e834", "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "samtools/faidx": { @@ -282,27 +282,27 @@ }, "samtools/index": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "smncopynumbercaller": { "branch": "master", - "git_sha": "c5620578276a1927f5b4afbc2b4266c9cf7b43ca", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "stranger": { @@ -342,7 +342,7 @@ }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, "untar": { @@ -352,7 +352,7 @@ }, "vcfanno": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] } } diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index ef95bee4..90387d6c 100644 --- a/modules/nf-core/bcftools/norm/main.nf +++ b/modules/nf-core/bcftools/norm/main.nf @@ -12,19 +12,25 @@ process BCFTOOLS_NORM { path(fasta) output: - tuple val(meta), path("*.gz") , emit: vcf - path "versions.yml" , emit: versions + 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 args = task.ext.args ?: '--output-type z' 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" + """ bcftools norm \\ --fasta-ref ${fasta} \\ - --output ${prefix}.vcf.gz \\ + --output ${prefix}.${extension}\\ $args \\ --threads $task.cpus \\ ${vcf} @@ -36,9 +42,15 @@ process BCFTOOLS_NORM { """ stub: + def args = task.ext.args ?: '--output-type z' 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" """ - touch ${prefix}.vcf.gz + touch ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/norm/meta.yml b/modules/nf-core/bcftools/norm/meta.yml index 2b3c8eae..c3ea2c03 100644 --- a/modules/nf-core/bcftools/norm/meta.yml +++ b/modules/nf-core/bcftools/norm/meta.yml @@ -42,8 +42,8 @@ output: e.g. [ id:'test', single_end:false ] - vcf: type: file - description: VCF normalized output file - pattern: "*.vcf.gz" + description: One of uncompressed VCF (.vcf), compressed VCF (.vcf.gz), compressed BCF (.bcf.gz) or uncompressed BCF (.bcf) normalized output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 5eeff5a6..8acc0bfa 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -7,9 +7,9 @@ keywords: tools: - cat: description: Just concatenation - homepage: None + documentation: https://man7.org/linux/man-pages/man1/cat.1.html - tool_dev_url: None + licence: ["GPL-3.0-or-later"] input: - meta: diff --git a/modules/nf-core/cnvpytor/callcnvs/meta.yml b/modules/nf-core/cnvpytor/callcnvs/meta.yml index 6ba46b6f..132defb3 100644 --- a/modules/nf-core/cnvpytor/callcnvs/meta.yml +++ b/modules/nf-core/cnvpytor/callcnvs/meta.yml @@ -1,5 +1,6 @@ name: cnvpytor_callcnvs description: command line tool for calling CNVs in whole genome sequencing data +keywords: - CNV calling tools: - cnvpytor: diff --git a/modules/nf-core/cnvpytor/importreaddepth/meta.yml b/modules/nf-core/cnvpytor/importreaddepth/meta.yml index 8b58887e..3f8e2136 100644 --- a/modules/nf-core/cnvpytor/importreaddepth/meta.yml +++ b/modules/nf-core/cnvpytor/importreaddepth/meta.yml @@ -31,9 +31,9 @@ input: description: specifies reference genome file (only for cram file without reference genome) pattern: "*.{fasta,fasta.gz,fa,fa.gz}" - fai: - type: file - description: Index of reference fasta file - pattern: "*.fai" + type: file + description: Index of reference fasta file + pattern: "*.fai" output: - meta: diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 3df21765..800a6099 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "bioconda::multiqc=1.13" + conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.13--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.13--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py index e55b8d43..da033408 100755 --- a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -4,11 +4,10 @@ """Provide functions to merge multiple versions.yml files.""" +import yaml import platform from textwrap import dedent -import yaml - def _make_versions_html(versions): """Generate a tabular HTML output of all versions for MultiQC.""" diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml index b2d480a3..7ecb40f2 100644 --- a/modules/nf-core/deepvariant/meta.yml +++ b/modules/nf-core/deepvariant/meta.yml @@ -9,7 +9,7 @@ tools: homepage: https://github.com/google/deepvariant documentation: https://github.com/google/deepvariant tool_dev_url: https://github.com/google/deepvariant - doi: "https://doi.org/10.1038/nbt.4235" + doi: "10.1038/nbt.4235" licence: ["BSD-3-clause"] input: diff --git a/modules/nf-core/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml index c5a89c10..ebb3016c 100644 --- a/modules/nf-core/expansionhunter/meta.yml +++ b/modules/nf-core/expansionhunter/meta.yml @@ -8,7 +8,7 @@ tools: description: A tool for estimating repeat sizes homepage: https://github.com/Illumina/ExpansionHunter documentation: https://github.com/Illumina/ExpansionHunter/blob/master/docs/01_Introduction.md - tool_dev_url: None + doi: "10.1093/bioinformatics/btz431" licence: ["Apache-2.0"] diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 41fab003..41830019 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -2,10 +2,10 @@ process GATK4_BEDTOINTERVALLIST { 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(bed) @@ -22,14 +22,14 @@ process GATK4_BEDTOINTERVALLIST { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK BedToIntervalList] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" BedToIntervalList \\ + gatk --java-options "-Xmx${avail_mem}M" BedToIntervalList \\ --INPUT $bed \\ --OUTPUT ${prefix}.interval_list \\ --SEQUENCE_DICTIONARY $dict \\ diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index bc324ada..1e78f017 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -2,10 +2,10 @@ process GATK4_CREATESEQUENCEDICTIONARY { 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: path fasta @@ -24,10 +24,10 @@ process GATK4_CREATESEQUENCEDICTIONARY { if (!task.memory) { log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" CreateSequenceDictionary \\ + gatk --java-options "-Xmx${avail_mem}M" CreateSequenceDictionary \\ --REFERENCE $fasta \\ --URI $fasta \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index bd247888..69c23581 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -5,28 +5,28 @@ keywords: - fasta tools: - gatk: - 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"] + 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: - fasta: - type: file - description: Input fasta file - pattern: "*.{fasta,fa}" + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" output: - dict: - type: file - description: gatk dictionary file - pattern: "*.{dict}" + type: file + description: gatk dictionary file + pattern: "*.{dict}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf index f3585bb3..09643857 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/main.nf +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -2,10 +2,10 @@ process GATK4_FILTERMUTECTCALLS { tag "$meta.id" label 'process_low' - 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(vcf), path(vcf_tbi), path(stats), path(orientationbias), path(segmentation), path(table), val(estimate) @@ -31,14 +31,14 @@ process GATK4_FILTERMUTECTCALLS { def estimate_command = estimate ? " --contamination-estimate ${estimate} " : '' def table_command = table ? " --contamination-table ${table} " : '' - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK FilterMutectCalls] 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" FilterMutectCalls \\ + gatk --java-options "-Xmx${avail_mem}M" FilterMutectCalls \\ --variant $vcf \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ diff --git a/modules/nf-core/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf index 84da7bf7..e221dc01 100644 --- a/modules/nf-core/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/gatk4/intervallisttools/main.nf @@ -2,10 +2,10 @@ process GATK4_INTERVALLISTTOOLS { 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) @@ -21,17 +21,17 @@ process GATK4_INTERVALLISTTOOLS { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK IntervalListTools] 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() } """ mkdir ${prefix}_split - gatk --java-options "-Xmx${avail_mem}g" IntervalListTools \\ + gatk --java-options "-Xmx${avail_mem}M" IntervalListTools \\ --INPUT $intervals \\ --OUTPUT ${prefix}_split \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf index 6bbab76c..9ee676ce 100644 --- a/modules/nf-core/gatk4/mergebamalignment/main.nf +++ b/modules/nf-core/gatk4/mergebamalignment/main.nf @@ -2,10 +2,10 @@ process GATK4_MERGEBAMALIGNMENT { tag "$meta.id" label 'process_low' - 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(aligned), path(unmapped) @@ -23,14 +23,14 @@ process GATK4_MERGEBAMALIGNMENT { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK MergeBamAlignment] 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" MergeBamAlignment \\ + gatk --java-options "-Xmx${avail_mem}M" MergeBamAlignment \\ --UNMAPPED_BAM $unmapped \\ --ALIGNED_BAM $aligned \\ --OUTPUT ${prefix}.bam \\ diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf index d418468f..d0f48757 100644 --- a/modules/nf-core/gatk4/mergevcfs/main.nf +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -2,10 +2,10 @@ process GATK4_MERGEVCFS { 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(vcf) @@ -25,14 +25,14 @@ process GATK4_MERGEVCFS { def input_list = vcf.collect{ "--INPUT $it"}.join(' ') def reference_command = dict ? "--SEQUENCE_DICTIONARY $dict" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK MergeVcfs] 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" MergeVcfs \\ + gatk --java-options "-Xmx${avail_mem}M" MergeVcfs \\ $input_list \\ --OUTPUT ${prefix}.vcf.gz \\ $reference_command \\ diff --git a/modules/nf-core/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf index c2085266..97e3408f 100644 --- a/modules/nf-core/gatk4/mutect2/main.nf +++ b/modules/nf-core/gatk4/mutect2/main.nf @@ -2,10 +2,10 @@ process GATK4_MUTECT2 { 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) @@ -35,14 +35,14 @@ process GATK4_MUTECT2 { def pon_command = panel_of_normals ? "--panel-of-normals $panel_of_normals" : "" def gr_command = germline_resource ? "--germline-resource $germline_resource" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK Mutect2] 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" Mutect2 \\ + gatk --java-options "-Xmx${avail_mem}M" Mutect2 \\ $inputs \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf index 26a70681..13e722bd 100644 --- a/modules/nf-core/gatk4/printreads/main.nf +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -2,10 +2,10 @@ process GATK4_PRINTREADS { 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(input), path(index) @@ -25,18 +25,18 @@ process GATK4_PRINTREADS { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + 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.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } 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}g" PrintReads \\ + gatk --java-options "-Xmx${avail_mem}M" PrintReads \\ $args \\ --reference $fasta \\ --input $input \\ diff --git a/modules/nf-core/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf index 9fe041c4..5481ea49 100644 --- a/modules/nf-core/gatk4/revertsam/main.nf +++ b/modules/nf-core/gatk4/revertsam/main.nf @@ -2,10 +2,10 @@ process GATK4_REVERTSAM { 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(bam) @@ -21,14 +21,14 @@ process GATK4_REVERTSAM { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK RevertSam] 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" RevertSam \\ + gatk --java-options "-Xmx${avail_mem}M" RevertSam \\ --INPUT $bam \\ --OUTPUT ${prefix}.reverted.bam \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf index 9ba5ea8d..585fc582 100644 --- a/modules/nf-core/gatk4/samtofastq/main.nf +++ b/modules/nf-core/gatk4/samtofastq/main.nf @@ -2,10 +2,10 @@ process GATK4_SAMTOFASTQ { 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(bam) @@ -22,14 +22,14 @@ process GATK4_SAMTOFASTQ { def prefix = task.ext.prefix ?: "${meta.id}" def output = meta.single_end ? "--FASTQ ${prefix}.fastq.gz" : "--FASTQ ${prefix}_1.fastq.gz --SECOND_END_FASTQ ${prefix}_2.fastq.gz" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK SamToFastq] 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" SamToFastq \\ + gatk --java-options "-Xmx${avail_mem}M" SamToFastq \\ --INPUT $bam \\ $output \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index 0c4fcceb..001b7f68 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -2,10 +2,10 @@ process GATK4_SELECTVARIANTS { 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(vcf), path(vcf_idx), path (intervals) @@ -22,14 +22,14 @@ process GATK4_SELECTVARIANTS { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def interval = intervals ? "--intervals ${intervals}" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK SelectVariants] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.toGiga() + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}G" SelectVariants \\ + gatk --java-options "-Xmx${avail_mem}M" SelectVariants \\ --variant $vcf \\ --output ${prefix}.selectvariants.vcf.gz \\ $interval \\ diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index 1640806b..a40abe45 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -2,10 +2,10 @@ process GATK4_SPLITINTERVALS { tag "$meta.id" label 'process_low' - 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,15 +25,15 @@ process GATK4_SPLITINTERVALS { def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference $fasta" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK SplitIntervals] 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" SplitIntervals \\ + gatk --java-options "-Xmx${avail_mem}M" SplitIntervals \\ --output ${prefix} \\ --intervals $intervals \\ $reference \\ diff --git a/modules/nf-core/gatk4/splitintervals/meta.yml b/modules/nf-core/gatk4/splitintervals/meta.yml index ba557544..701c6893 100644 --- a/modules/nf-core/gatk4/splitintervals/meta.yml +++ b/modules/nf-core/gatk4/splitintervals/meta.yml @@ -1,4 +1,5 @@ name: gatk4_splitintervals +description: Split intervals into sub-interval files. keywords: - interval - bed diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index e2837a91..cc03ff3c 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -2,10 +2,10 @@ process GATK4_VARIANTFILTRATION { 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(vcf), path(tbi) @@ -25,14 +25,14 @@ process GATK4_VARIANTFILTRATION { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK VariantFiltration] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.toGiga() + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}G" VariantFiltration \\ + gatk --java-options "-Xmx${avail_mem}M" VariantFiltration \\ --variant $vcf \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ diff --git a/modules/nf-core/genmod/annotate/meta.yml b/modules/nf-core/genmod/annotate/meta.yml index 5df7f666..b142f96b 100644 --- a/modules/nf-core/genmod/annotate/meta.yml +++ b/modules/nf-core/genmod/annotate/meta.yml @@ -9,7 +9,7 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - doi: "" + licence: "['MIT']" input: - meta: diff --git a/modules/nf-core/genmod/compound/meta.yml b/modules/nf-core/genmod/compound/meta.yml index 27fb3cdf..831ba341 100644 --- a/modules/nf-core/genmod/compound/meta.yml +++ b/modules/nf-core/genmod/compound/meta.yml @@ -9,7 +9,7 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - doi: "" + licence: "['MIT']" input: - meta: diff --git a/modules/nf-core/genmod/models/meta.yml b/modules/nf-core/genmod/models/meta.yml index 42c80f7a..240f79df 100644 --- a/modules/nf-core/genmod/models/meta.yml +++ b/modules/nf-core/genmod/models/meta.yml @@ -9,7 +9,7 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - doi: "" + licence: "['MIT']" input: - meta: diff --git a/modules/nf-core/genmod/score/meta.yml b/modules/nf-core/genmod/score/meta.yml index 3c0ae932..26bb22ae 100644 --- a/modules/nf-core/genmod/score/meta.yml +++ b/modules/nf-core/genmod/score/meta.yml @@ -9,7 +9,7 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - doi: "" + licence: "['MIT']" input: - meta: diff --git a/modules/nf-core/glnexus/meta.yml b/modules/nf-core/glnexus/meta.yml index 0fc19452..89e4c74e 100644 --- a/modules/nf-core/glnexus/meta.yml +++ b/modules/nf-core/glnexus/meta.yml @@ -8,8 +8,8 @@ tools: description: scalable gVCF merging and joint variant calling for population sequencing projects. homepage: https://github.com/dnanexus-rnd/GLnexus documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started - tool_dev_url: None - doi: https://doi.org/10.1101/343970 + + doi: 10.1101/343970 licence: ["Apache-2.0"] input: diff --git a/modules/nf-core/haplogrep2/classify/meta.yml b/modules/nf-core/haplogrep2/classify/meta.yml index b4c2ec66..d21cc9b5 100644 --- a/modules/nf-core/haplogrep2/classify/meta.yml +++ b/modules/nf-core/haplogrep2/classify/meta.yml @@ -8,7 +8,7 @@ tools: homepage: "https://github.com/seppinho/haplogrep-cmd" documentation: "https://github.com/seppinho/haplogrep-cmd" tool_dev_url: "https://github.com/seppinho/haplogrep-cmd" - doi: "" + licence: "['MIT']" input: @@ -22,7 +22,8 @@ input: description: valid options are hsd, vcf, or fasta files pattern: "*.{vcf,vcf.gz,fasta,hsd}" - format: - type: stringformat of file either vcf fasta or hsd + type: string + description: either "vcf", "fasta" or "hsd" output: - meta: diff --git a/modules/nf-core/hmtnote/meta.yml b/modules/nf-core/hmtnote/meta.yml index 92b4be1b..4221ff2b 100644 --- a/modules/nf-core/hmtnote/meta.yml +++ b/modules/nf-core/hmtnote/meta.yml @@ -7,8 +7,8 @@ tools: description: Human mitochondrial variants annotation using HmtVar. homepage: https://github.com/robertopreste/HmtNote documentation: https://hmtnote.readthedocs.io/en/latest/usage.html - tool_dev_url: None - doi: "https://doi.org/10.1101/600619" + + doi: "10.1101/600619" licence: ["MIT"] input: diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index be4be831..827c489e 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -8,9 +8,8 @@ process MOSDEPTH { 'quay.io/biocontainers/mosdepth:0.3.3--hdfd78af_1'}" input: - tuple val(meta), path(bam), path(bai) - tuple val(meta2), path(bed) - tuple val(meta3), path(fasta) + tuple val(meta), path(bam), path(bai), path(bed) + tuple val(meta2), path(fasta) output: tuple val(meta), path('*.global.dist.txt') , emit: global_txt diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index 01a97428..c6b1be37 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -2,10 +2,10 @@ process PICARD_ADDORREPLACEREADGROUPS { tag "$meta.id" label 'process_low' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam) @@ -21,15 +21,15 @@ process PICARD_ADDORREPLACEREADGROUPS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[Picard AddOrReplaceReadGroups] 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() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ AddOrReplaceReadGroups \\ $args \\ --INPUT ${bam} \\ @@ -37,7 +37,7 @@ process PICARD_ADDORREPLACEREADGROUPS { cat <<-END_VERSIONS > versions.yml "${task.process}": - picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o -E '[[:digit:]]+\\.[[:digit:]]+\\.[[:digit:]]+') + picard: \$(picard AddOrReplaceReadGroups --version 2>&1 | grep -o 'Version:.*' | cut -f2- -d:) END_VERSIONS """ diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index ee8116ec..5f1e9c90 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTHSMETRICS { tag "$meta.id" label 'process_single' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam), path(bai) @@ -26,15 +26,15 @@ process PICARD_COLLECTHSMETRICS { def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[Picard CollectHsMetrics] 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() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ CollectHsMetrics \\ $args \\ $reference \\ diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 73cdaf3a..ed88dbe7 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTMULTIPLEMETRICS { tag "$meta.id" label 'process_single' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta) , path(bam), path(bai) @@ -24,15 +24,15 @@ process PICARD_COLLECTMULTIPLEMETRICS { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[Picard CollectMultipleMetrics] 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() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ CollectMultipleMetrics \\ $args \\ --INPUT $bam \\ diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index b767b99c..5d2a39b8 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTWGSMETRICS { tag "$meta.id" label 'process_single' - conda "bioconda::picard=2.27.4 r::r-base" + 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:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam), path(bai) @@ -23,16 +23,16 @@ process PICARD_COLLECTWGSMETRICS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 def interval = intervallist ? "--INTERVALS ${intervallist}" : '' if (!task.memory) { log.info '[Picard CollectWgsMetrics] 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() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ CollectWgsMetrics \\ $args \\ --INPUT $bam \\ diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index 57ab9cfe..2f8dbd3c 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -29,6 +29,7 @@ input: description: (Optional) Aligned reads file index pattern: "*.{bai,crai}" - meta2: + type: map description: | Groovy Map containing reference information e.g. [ id:'genome' ] @@ -37,6 +38,7 @@ input: description: Genome fasta file pattern: "*.{fa,fasta,fna}" - meta2: + type: map description: | Groovy Map containing reference information e.g. [ id:'genome' ] diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf index 04336271..935fb544 100644 --- a/modules/nf-core/picard/liftovervcf/main.nf +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -2,10 +2,10 @@ process PICARD_LIFTOVERVCF { tag "$meta.id" label 'process_low' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(input_vcf) @@ -24,15 +24,15 @@ process PICARD_LIFTOVERVCF { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 1 + def avail_mem = 3072 if (!task.memory) { - log.info '[Picard LiftoverVcf] Available memory not known - defaulting to 1GB. Specify process memory requirements to change this.' + log.info '[Picard LiftoverVcf] 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() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ LiftoverVcf \\ $args \\ --INPUT $input_vcf \\ diff --git a/modules/nf-core/picard/liftovervcf/meta.yml b/modules/nf-core/picard/liftovervcf/meta.yml index 55f04963..be42aba4 100644 --- a/modules/nf-core/picard/liftovervcf/meta.yml +++ b/modules/nf-core/picard/liftovervcf/meta.yml @@ -9,7 +9,7 @@ tools: homepage: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard tool_dev_url: https://github.com/broadinstitute/picard - doi: "" + licence: ["MIT"] input: diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index 14800392..1fe6ee2d 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam) @@ -24,15 +24,15 @@ process PICARD_MARKDUPLICATES { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[Picard MarkDuplicates] 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() } """ picard \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ MarkDuplicates \\ $args \\ --INPUT $bam \\ diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf index 5fadbd40..646a953d 100644 --- a/modules/nf-core/picard/renamesampleinvcf/main.nf +++ b/modules/nf-core/picard/renamesampleinvcf/main.nf @@ -3,10 +3,10 @@ process PICARD_RENAMESAMPLEINVCF { tag "$meta.id" label 'process_single' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(vcf) @@ -22,17 +22,17 @@ process PICARD_RENAMESAMPLEINVCF { def args = task.ext.args ?: '' def extended_args = args.contains("--NEW_SAMPLE_NAME") ? $args : "${args} --NEW_SAMPLE_NAME ${meta.id}" def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[Picard RenameSampleInVcf] 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() } """ picard \\ RenameSampleInVcf \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ --INPUT $vcf \\ --OUTPUT ${prefix}_renam.vcf.gz \\ $extended_args diff --git a/modules/nf-core/picard/renamesampleinvcf/meta.yml b/modules/nf-core/picard/renamesampleinvcf/meta.yml index 8f3ed6b4..ac678983 100644 --- a/modules/nf-core/picard/renamesampleinvcf/meta.yml +++ b/modules/nf-core/picard/renamesampleinvcf/meta.yml @@ -11,7 +11,7 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ tool_dev_url: "https://github.com/broadinstitute/picard" - doi: "" + licence: "['MIT']" input: diff --git a/modules/nf-core/picard/sortvcf/main.nf b/modules/nf-core/picard/sortvcf/main.nf index d3a32a52..0269b0f4 100644 --- a/modules/nf-core/picard/sortvcf/main.nf +++ b/modules/nf-core/picard/sortvcf/main.nf @@ -2,10 +2,10 @@ process PICARD_SORTVCF { tag "$meta.id" label 'process_medium' - conda "bioconda::picard=2.27.4" + conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:2.27.4--hdfd78af_0' : - 'quay.io/biocontainers/picard:2.27.4--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : + 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(vcf) @@ -24,17 +24,17 @@ process PICARD_SORTVCF { def prefix = task.ext.prefix ?: "${meta.id}" def seq_dict = sequence_dict ? "--SEQUENCE_DICTIONARY $sequence_dict" : "" def reference = reference ? "--REFERENCE_SEQUENCE $reference" : "" - def avail_mem = 3 + 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.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ picard \\ SortVcf \\ - -Xmx${avail_mem}g \\ + -Xmx${avail_mem}M \\ --INPUT $vcf \\ $args \\ $seq_dict \\ diff --git a/modules/nf-core/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf index 936471ba..810cf402 100644 --- a/modules/nf-core/qualimap/bamqc/main.nf +++ b/modules/nf-core/qualimap/bamqc/main.nf @@ -23,7 +23,7 @@ process QUALIMAP_BAMQC { prefix = task.ext.prefix ?: "${meta.id}" def collect_pairs = meta.single_end ? '' : '--collect-overlap-pairs' - def memory = task.memory.toGiga() + "G" + def memory = (task.memory.mega*0.8).intValue() + 'M' def regions = gff ? "--gff $gff" : '' def strandedness = 'non-strand-specific' diff --git a/modules/nf-core/rhocall/annotate/meta.yml b/modules/nf-core/rhocall/annotate/meta.yml index 4ece9d2b..618d0017 100644 --- a/modules/nf-core/rhocall/annotate/meta.yml +++ b/modules/nf-core/rhocall/annotate/meta.yml @@ -9,7 +9,7 @@ tools: homepage: "https://github.com/dnil/rhocall" documentation: "https://github.com/dnil/rhocall" tool_dev_url: "https://github.com/dnil" - doi: "" + licence: "['GPL v3']" input: diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index e5cadbc2..8bd2fa6f 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -12,7 +12,7 @@ tools: 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: hhttp://www.htslib.org/doc/samtools.html + documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] input: diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 5bd84bc5..644b768b 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -12,7 +12,7 @@ tools: 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: hhttp://www.htslib.org/doc/samtools.html + documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] input: diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 09289751..07328431 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -12,7 +12,7 @@ tools: 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: hhttp://www.htslib.org/doc/samtools.html + documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] input: diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index cac50b1c..1d68a5d8 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -13,7 +13,7 @@ tools: 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: hhttp://www.htslib.org/doc/samtools.html + documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] input: @@ -23,13 +23,13 @@ input: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" - fasta: type: optional file description: Reference file the CRAM was created with diff --git a/modules/nf-core/smncopynumbercaller/meta.yml b/modules/nf-core/smncopynumbercaller/meta.yml index 21f057fa..6d4e10b3 100644 --- a/modules/nf-core/smncopynumbercaller/meta.yml +++ b/modules/nf-core/smncopynumbercaller/meta.yml @@ -8,7 +8,7 @@ tools: homepage: "https://github.com/Illumina/SMNCopyNumberCaller" documentation: "https://github.com/Illumina/SMNCopyNumberCaller" tool_dev_url: "https://github.com/Illumina/SMNCopyNumberCaller" - doi: "https://doi.org/10.1038/s41436-020-0754-0" + doi: "10.1038/s41436-020-0754-0" licence: "Apache License Version 2.0" input: diff --git a/modules/nf-core/ucsc/wigtobigwig/meta.yml b/modules/nf-core/ucsc/wigtobigwig/meta.yml index 8eed29bb..a597fde0 100644 --- a/modules/nf-core/ucsc/wigtobigwig/meta.yml +++ b/modules/nf-core/ucsc/wigtobigwig/meta.yml @@ -8,10 +8,7 @@ tools: description: | Convert ascii format wig file (in fixedStep, variableStep or bedGraph format) to binary big wig format - homepage: None - documentation: None - tool_dev_url: None - doi: "" + homepage: http://www.genome.ucsc.edu/goldenPath/help/bigWig.html licence: ["varies; see http://genome.ucsc.edu/license"] input: diff --git a/modules/nf-core/vcfanno/meta.yml b/modules/nf-core/vcfanno/meta.yml index ea4dacce..9e6c1d72 100644 --- a/modules/nf-core/vcfanno/meta.yml +++ b/modules/nf-core/vcfanno/meta.yml @@ -10,7 +10,7 @@ keywords: tools: - vcfanno: description: annotate a VCF with other VCFs/BEDs/tabixed files - homepage: None + documentation: https://github.com/brentp/vcfanno#vcfanno tool_dev_url: https://github.com/brentp/vcfanno doi: "10.1186/s13059-016-0973-5" diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 274d92be..5e3f046b 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -40,14 +40,8 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, ch_chrom_sizes) - MOSDEPTH (ch_bam_bai, Channel.value([[], []]), Channel.value([[], []])) - - ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) - ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) - ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) - ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) - ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) - ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) + ch_bam_bai.map{ meta, bam, bai -> [meta, bam, bai, []]}.set{ch_mosdepth_in} + MOSDEPTH (ch_mosdepth_in, ch_fasta) // COLLECT WGS METRICS PICARD_COLLECTWGSMETRICS ( ch_bam_bai, ch_fasta, ch_fai, ch_intervals_wgs ) @@ -59,8 +53,14 @@ workflow QC_BAM { 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) - ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions, SENTIEON_WGSMETRICS.out.versions) - ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions, SENTIEON_WGSMETRICS_Y.out.versions) + ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) + ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) + ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) + ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first(), SENTIEON_WGSMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions.first(), SENTIEON_WGSMETRICS_Y.out.versions.first()) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] From 57b22bc6049f92741bd3a7fa79d61f67aa0b1f00 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Mar 2023 15:42:28 +0100 Subject: [PATCH 1088/1921] remove todo from ci.yml --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3625c69..f7883268 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,8 +39,5 @@ jobs: version: "${{ matrix.NXF_VER }}" - name: Run pipeline with test data - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix run: | nextflow run ${GITHUB_WORKSPACE} ${{ matrix.parameters }} -stub --outdir ./results From 5734937abc5ca5bbb2ffd618268736d7564909e0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Mar 2023 22:33:57 +0100 Subject: [PATCH 1089/1921] update readme --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 1e096de7..ef0b5768 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,6 @@ ## Introduction -> NOTE -> -> This pipeline is under development and no stable release has been made yet. -> -> You can follow the work in the [dev](https://github.com/nf-core/raredisease/tree/dev) branch. - **nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for call and score variants from WGS/WES of rare disease patients. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! From 3f77b052a85780f5eaf4a4ee57381511b24f7304 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:21:48 +0100 Subject: [PATCH 1090/1921] remove unused modules --- CITATIONS.md | 4 -- README.md | 1 - conf/genomes.config | 2 - conf/modules/call_cnv_cnvpytor.config | 48 --------------- conf/modules/prepare_vcf.config | 55 ----------------- modules.json | 25 -------- modules/local/check_input_vcf.nf | 60 ------------------- modules/nf-core/cnvpytor/callcnvs/main.nf | 43 ------------- modules/nf-core/cnvpytor/callcnvs/meta.yml | 43 ------------- modules/nf-core/cnvpytor/histogram/main.nf | 44 -------------- modules/nf-core/cnvpytor/histogram/meta.yml | 46 -------------- .../nf-core/cnvpytor/importreaddepth/main.nf | 49 --------------- .../nf-core/cnvpytor/importreaddepth/meta.yml | 55 ----------------- modules/nf-core/cnvpytor/partition/main.nf | 43 ------------- modules/nf-core/cnvpytor/partition/meta.yml | 46 -------------- modules/nf-core/cnvpytor/view/main.nf | 60 ------------------- modules/nf-core/cnvpytor/view/meta.yml | 56 ----------------- nextflow.config | 12 +--- nextflow_schema.json | 23 ------- .../local/call_structural_variants.nf | 17 ------ .../variant_calling/call_cnv_cnvpytor.nf | 54 ----------------- workflows/raredisease.nf | 3 +- 22 files changed, 4 insertions(+), 785 deletions(-) delete mode 100644 conf/modules/call_cnv_cnvpytor.config delete mode 100644 conf/modules/prepare_vcf.config delete mode 100644 modules/local/check_input_vcf.nf delete mode 100644 modules/nf-core/cnvpytor/callcnvs/main.nf delete mode 100644 modules/nf-core/cnvpytor/callcnvs/meta.yml delete mode 100644 modules/nf-core/cnvpytor/histogram/main.nf delete mode 100644 modules/nf-core/cnvpytor/histogram/meta.yml delete mode 100644 modules/nf-core/cnvpytor/importreaddepth/main.nf delete mode 100644 modules/nf-core/cnvpytor/importreaddepth/meta.yml delete mode 100644 modules/nf-core/cnvpytor/partition/main.nf delete mode 100644 modules/nf-core/cnvpytor/partition/meta.yml delete mode 100644 modules/nf-core/cnvpytor/view/main.nf delete mode 100644 modules/nf-core/cnvpytor/view/meta.yml delete mode 100644 subworkflows/local/variant_calling/call_cnv_cnvpytor.nf diff --git a/CITATIONS.md b/CITATIONS.md index 7b554f04..8c6d5631 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -22,10 +22,6 @@ > 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 -- [CNVpytor](https://academic.oup.com/gigascience/article/10/11/giab074/6431715?login=true) - - > Suvakov M, Panda A, Diesh C, Holmes I, Abyzov A. CNVpytor: a tool for copy number variation detection and analysis from read depth and allele imbalance in whole-genome sequencing. GigaScience. 2021;10(11):giab074. doi:10.1093/gigascience/giab074 - - [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/README.md b/README.md index ef0b5768..5d0273ec 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,6 @@ On release, automated continuous integration tests run the pipeline on a full-si **4. Variant calling - SV:** -- [CNVpytor](https://github.com/abyzovlab/CNVpytor/) - [Manta](https://github.com/Illumina/manta) - [TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) diff --git a/conf/genomes.config b/conf/genomes.config index 6fab2691..1878bd8f 100644 --- a/conf/genomes.config +++ b/conf/genomes.config @@ -16,7 +16,6 @@ params { bwa_index = "" bwamem2_index = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" - gnomad_vcf = "${params.local_genomes}/grch37_gnomad_reformated_-r2.1.1-.vcf.gz" gnomad_af = "" gnomad_af_idx = "" intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" @@ -51,7 +50,6 @@ params { bwa_index = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" bwamem2_index = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" call_interval = "" - gnomad_vcf = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.vcf.gz" gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" gnomad_af_idx = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" diff --git a/conf/modules/call_cnv_cnvpytor.config b/conf/modules/call_cnv_cnvpytor.config deleted file mode 100644 index cce0b1ee..00000000 --- a/conf/modules/call_cnv_cnvpytor.config +++ /dev/null @@ -1,48 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ - -// -// cnvpytor calling options -// - -process { - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:GENERATE_PYTOR" { - ext.args = { params.cnvpytor_chr ? "-chrom ${params.cnvpytor_chr}" : '' } - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:HISTOGRAMS" { - publishDir = [ - enabled: false - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:PARTITIONS" { - publishDir = [ - enabled: false - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:CALL_CNVS" { - publishDir = [ - enabled: false - ] - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_CNVPYTOR:VIEW" { - ext.prefix = { "${meta.id}_cnvpytor" } - publishDir = [ - path: { "${params.outdir}/sv_caller" }, - mode: params.publish_dir_mode, - ] - } -} diff --git a/conf/modules/prepare_vcf.config b/conf/modules/prepare_vcf.config deleted file mode 100644 index 56856837..00000000 --- a/conf/modules/prepare_vcf.config +++ /dev/null @@ -1,55 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ - -// -// Normalize and index vcf files -// - -process { - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:CHECK_INPUT_VCF' { - ext.when = {params.gnomad_vcf} - publishDir = [ - enabled: false, - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:SPLIT_MULTIALLELICS_PV' { - ext.when = {params.gnomad_vcf} - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - publishDir = [ - enabled: false - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:REMOVE_DUPLICATES_PV' { - ext.when = {params.gnomad_vcf} - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*PREPARE_REFERENCES:CHECK_VCF:TABIX_PV' { - ext.when = {params.gnomad_vcf} - publishDir = [ - path: { "${params.outdir}/processed_references" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} diff --git a/modules.json b/modules.json index c837fa25..3ccfbc8c 100644 --- a/modules.json +++ b/modules.json @@ -60,31 +60,6 @@ "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, - "cnvpytor/callcnvs": { - "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] - }, - "cnvpytor/histogram": { - "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] - }, - "cnvpytor/importreaddepth": { - "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] - }, - "cnvpytor/partition": { - "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] - }, - "cnvpytor/view": { - "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] - }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "b6d4d476aee074311c89d82a69c1921bd70c8180", diff --git a/modules/local/check_input_vcf.nf b/modules/local/check_input_vcf.nf deleted file mode 100644 index bc020ff1..00000000 --- a/modules/local/check_input_vcf.nf +++ /dev/null @@ -1,60 +0,0 @@ -process CHECK_INPUT_VCF { - tag "check_vcf" - label 'process_single' - - conda "conda-forge::python=3.9.5" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.9--1' : - 'quay.io/biocontainers/python:3.9--1' }" - - input: - path vcf - - output: - path '*.csv' , emit: csv - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ - """ - export INPUT_FILE=${vcf} - export OUTPUT_FILE="checked_vcfs.csv" - - python3 < versions.yml - "${task.process}": - change_input_vcf: v1.0 - END_VERSIONS - """ - - stub: - """ - touch checked_vcfs.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - check_input_vcf: v1.0 - END_VERSIONS - """ -} diff --git a/modules/nf-core/cnvpytor/callcnvs/main.nf b/modules/nf-core/cnvpytor/callcnvs/main.nf deleted file mode 100644 index 2a92a3d2..00000000 --- a/modules/nf-core/cnvpytor/callcnvs/main.nf +++ /dev/null @@ -1,43 +0,0 @@ -process CNVPYTOR_CALLCNVS { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::cnvpytor=1.2.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': - 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" - - input: - tuple val(meta), path(pytor) - val bin_sizes - - output: - tuple val(meta), path("${pytor.baseName}.pytor") , emit: pytor - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def bins = bin_sizes ?: '1000' - """ - cnvpytor \\ - -root $pytor \\ - -call $bin_sizes - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ - - stub: - """ - touch ${pytor.baseName}.pytor - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/cnvpytor/callcnvs/meta.yml b/modules/nf-core/cnvpytor/callcnvs/meta.yml deleted file mode 100644 index 132defb3..00000000 --- a/modules/nf-core/cnvpytor/callcnvs/meta.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: cnvpytor_callcnvs -description: command line tool for calling CNVs in whole genome sequencing data -keywords: - - CNV calling -tools: - - cnvpytor: - description: calling CNVs using read depth - homepage: https://github.com/abyzovlab/CNVpytor - documentation: https://github.com/abyzovlab/CNVpytor - tool_dev_url: https://github.com/abyzovlab/CNVpytor - doi: "10.1101/2021.01.27.428472v1" - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - pytor: - type: file - description: pytor file containing partitions of read depth histograms using mean-shift method - pattern: "*.{pytor}" - - bin_sizes: - type: string - description: list of binsizes separated by space e.g. "1000 10000" and "1000" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pytor: - type: file - description: pytor files containing cnv calls - pattern: "*.{pytor}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@sima-r" diff --git a/modules/nf-core/cnvpytor/histogram/main.nf b/modules/nf-core/cnvpytor/histogram/main.nf deleted file mode 100644 index aebb4f89..00000000 --- a/modules/nf-core/cnvpytor/histogram/main.nf +++ /dev/null @@ -1,44 +0,0 @@ -process CNVPYTOR_HISTOGRAM { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::cnvpytor=1.2.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': - 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" - - input: - tuple val(meta), path(pytor) - val bin_sizes - - - output: - tuple val(meta), path("${pytor.baseName}.pytor") , emit: pytor - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def bins = bin_sizes ?: '1000' - """ - cnvpytor \\ - -root $pytor \\ - -his $bins - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ - - stub: - """ - touch ${pytor.baseName}.pytor - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/cnvpytor/histogram/meta.yml b/modules/nf-core/cnvpytor/histogram/meta.yml deleted file mode 100644 index ecd48b9a..00000000 --- a/modules/nf-core/cnvpytor/histogram/meta.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: cnvpytor_histogram -description: calculates read depth histograms -keywords: - - cnv calling - - histogram -tools: - - cnvpytor: - description: calling CNVs using read depth - homepage: https://github.com/abyzovlab/CNVpytor - documentation: https://github.com/abyzovlab/CNVpytor - tool_dev_url: https://github.com/abyzovlab/CNVpytor - doi: "10.1101/2021.01.27.428472v1" - licence: ["MIT"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pytor: - type: file - description: pytor file containing read depth data - pattern: "*.{pytor}" - - bin_sizes: - type: string - description: list of binsizes separated by space e.g. "1000 10000" and "1000" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pytor: - type: file - description: pytor file containing read depth histograms binned based on given bin size(s) - pattern: "*.{pytor}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@sima-r" - - "@ramprasadn" diff --git a/modules/nf-core/cnvpytor/importreaddepth/main.nf b/modules/nf-core/cnvpytor/importreaddepth/main.nf deleted file mode 100644 index 860f4f74..00000000 --- a/modules/nf-core/cnvpytor/importreaddepth/main.nf +++ /dev/null @@ -1,49 +0,0 @@ -process CNVPYTOR_IMPORTREADDEPTH { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::cnvpytor=1.2.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': - 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" - - input: - tuple val(meta), path(input_file), path(index) - path fasta - path fai - - output: - tuple val(meta), path("*.pytor") , emit: pytor - 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 ? "-T ${fasta}" : '' - """ - cnvpytor \\ - -root ${prefix}.pytor \\ - -rd $input_file \\ - $args \\ - $reference - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.pytor - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/cnvpytor/importreaddepth/meta.yml b/modules/nf-core/cnvpytor/importreaddepth/meta.yml deleted file mode 100644 index 3f8e2136..00000000 --- a/modules/nf-core/cnvpytor/importreaddepth/meta.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: cnvpytor_importreaddepth -description: command line tool for CNV/CNA analysis. This step imports the read depth data into a root pytor file. -keywords: - - read depth - - cnv calling -tools: - - cnvpytor -rd: - description: calling CNVs using read depth - homepage: https://github.com/abyzovlab/CNVpytor - documentation: https://github.com/abyzovlab/CNVpytor - tool_dev_url: https://github.com/abyzovlab/CNVpytor - doi: "10.1101/2021.01.27.428472v1" - licence: ["MIT"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - input_file: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram}" - - index: - type: file - description: bam file index - pattern: "*.{bai,crai}" - - fasta: - type: file - description: specifies reference genome file (only for cram file without reference genome) - pattern: "*.{fasta,fasta.gz,fa,fa.gz}" - - fai: - type: file - description: Index of reference fasta file - pattern: "*.fai" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pytor: - type: file - description: read depth root file in which read depth data binned to 100 base pair bins will be stored. - pattern: "*.{pytor}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@sima-r" - - "@ramprasadn" diff --git a/modules/nf-core/cnvpytor/partition/main.nf b/modules/nf-core/cnvpytor/partition/main.nf deleted file mode 100644 index 46b46401..00000000 --- a/modules/nf-core/cnvpytor/partition/main.nf +++ /dev/null @@ -1,43 +0,0 @@ -process CNVPYTOR_PARTITION { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::cnvpytor=1.2.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': - 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" - - input: - tuple val(meta), path(pytor) - val bin_sizes - - output: - tuple val(meta), path("${pytor.baseName}.pytor"), emit: pytor - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def bins = bin_sizes ?: '1000' - """ - cnvpytor \\ - -root $pytor \\ - -partition $bins - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ - - stub: - """ - touch ${pytor.baseName}.pytor - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/cnvpytor/partition/meta.yml b/modules/nf-core/cnvpytor/partition/meta.yml deleted file mode 100644 index 17b5e199..00000000 --- a/modules/nf-core/cnvpytor/partition/meta.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: cnvpytor_partition -description: partitioning read depth histograms -keywords: - - cnv calling - - partition histograms -tools: - - cnvpytor: - description: calling CNVs using read depth - homepage: https://github.com/abyzovlab/CNVpytor - documentation: https://github.com/abyzovlab/CNVpytor - tool_dev_url: https://github.com/abyzovlab/CNVpytor - doi: "10.1101/2021.01.27.428472v1" - licence: ["MIT"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pytor: - type: file - description: pytor file containing read depth data - pattern: "*.{pytor}" - - bin_sizes: - type: string - description: list of binsizes separated by space e.g. "1000 10000" and "1000" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - partitions: - type: file - description: pytor file containing partitions of read depth histograms using mean-shift method - pattern: "*.{pytor}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@sima-r" - - "@ramprasadn" diff --git a/modules/nf-core/cnvpytor/view/main.nf b/modules/nf-core/cnvpytor/view/main.nf deleted file mode 100644 index bf1edc92..00000000 --- a/modules/nf-core/cnvpytor/view/main.nf +++ /dev/null @@ -1,60 +0,0 @@ -process CNVPYTOR_VIEW { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::cnvpytor=1.2.1" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cnvpytor:1.2.1--pyhdfd78af_0': - 'quay.io/biocontainers/cnvpytor:1.2.1--pyhdfd78af_0' }" - - input: - tuple val(meta), path(pytor_files) - val bin_sizes - val output_format - - output: - tuple val(meta), path("*.vcf"), emit: vcf , optional: true - tuple val(meta), path("*.tsv"), emit: tsv , optional: true - tuple val(meta), path("*.xls"), emit: xls , optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def output_suffix = output_format ?: 'vcf' - def bins = bin_sizes ?: '1000' - def input = pytor_files.join(" ") - def prefix = task.ext.prefix ?: "${meta.id}" - """ - - python3 < versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ - - stub: - def output_suffix = output_format ?: 'vcf' - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.${output_suffix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cnvpytor: \$(echo \$(cnvpytor --version 2>&1) | sed 's/CNVpytor //' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/cnvpytor/view/meta.yml b/modules/nf-core/cnvpytor/view/meta.yml deleted file mode 100644 index e4e68fad..00000000 --- a/modules/nf-core/cnvpytor/view/meta.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: cnvpytor_view -description: view function to generate vcfs -keywords: - - cnv calling -tools: - - cnvpytor: - description: calling CNVs using read depth - homepage: https://github.com/abyzovlab/CNVpytor - documentation: https://github.com/abyzovlab/CNVpytor - tool_dev_url: https://github.com/abyzovlab/CNVpytor - doi: "10.1101/2021.01.27.428472v1" - licence: ["MIT"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - pytor_files: - type: file - description: pytor file containing cnv calls. To merge calls from multiple samples use a list of files. - pattern: "*.{pytor}" - - bin_sizes: - type: string - description: list of binsizes separated by space e.g. "1000 10000" and "1000" - - output_format: - type: string - description: output format of the cnv calls. Valid entries are "tsv", "vcf", and "xls" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - tsv: - type: file - description: tsv file containing cnv calls - pattern: "*.{tsv}" - - vcf: - type: file - description: vcf file containing cnv calls - pattern: "*.{vcf}" - - xls: - type: file - description: xls file containing cnv calls - pattern: "*.{xls}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - -authors: - - "@sima-r" - - "@ramprasadn" diff --git a/nextflow.config b/nextflow.config index 857887e8..b1e22a23 100644 --- a/nextflow.config +++ b/nextflow.config @@ -42,10 +42,6 @@ params { pcr_amplification = false variant_type = 'snp,indel' - // CNVpytor - cnvpytor_chr = null - cnvpytor_binsizes = '1000' - // MultiQC options multiqc_config = null multiqc_title = null @@ -249,17 +245,16 @@ includeConfig 'conf/modules/raredisease.config' includeConfig 'conf/modules/align.config' includeConfig 'conf/modules/analyse_MT.config' includeConfig 'conf/modules/call_snv.config' +includeConfig 'conf/modules/call_structural_variants.config' +includeConfig 'conf/modules/annotate_snvs.config' +includeConfig 'conf/modules/annotate_structural_variants.config' includeConfig 'conf/modules/align_and_call_MT.config' includeConfig 'conf/modules/align_bwamem2.config' includeConfig 'conf/modules/align_sentieon.config' includeConfig 'conf/modules/annotate_consequence_pli.config' -includeConfig 'conf/modules/annotate_snvs.config' -includeConfig 'conf/modules/annotate_structural_variants.config' -includeConfig 'conf/modules/call_cnv_cnvpytor.config' includeConfig 'conf/modules/call_repeat_expansions.config' includeConfig 'conf/modules/call_snv_deepvariant.config' includeConfig 'conf/modules/call_snv_sentieon.config' -includeConfig 'conf/modules/call_structural_variants.config' includeConfig 'conf/modules/call_sv_manta.config' includeConfig 'conf/modules/call_sv_tiddit.config' includeConfig 'conf/modules/check_input.config' @@ -267,7 +262,6 @@ includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' includeConfig 'conf/modules/gens.config' includeConfig 'conf/modules/merge_annotate_MT.config' includeConfig 'conf/modules/prepare_references.config' -includeConfig 'conf/modules/prepare_vcf.config' includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index e63a7bf6..c9537bbd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -478,26 +478,6 @@ } } }, - "sv_caller_options": { - "title": "Structural variant calling options", - "type": "object", - "fa_icon": "fas fa-map-signs", - "description": "Options to adjust parameters and filtering criteria for structural variant callers.", - "properties": { - "cnvpytor_chr": { - "type": "string", - "default": null, - "description": "Chromosome names must be specified the same way as they are described in the sam/bam/cram header, e.g., chrX or X. One can specify multiple chromosomes separated by space.", - "fa_icon": "fas fa-map-signs" - }, - "cnvpytor_binsizes": { - "type": "string", - "default": "1000", - "description": "List of binsizes separated by space e.g. '1000 10000' and '1000'", - "fa_icon": "fas fa-map-signs" - } - } - }, "annotation_options": { "title": "Annotation options", "type": "object", @@ -718,9 +698,6 @@ { "$ref": "#/definitions/alignment_options" }, - { - "$ref": "#/definitions/sv_caller_options" - }, { "$ref": "#/definitions/variant_calling_options" }, diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 803a9a20..e5708a65 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -5,7 +5,6 @@ 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_CNVPYTOR } from './variant_calling/call_cnv_cnvpytor' include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -20,7 +19,6 @@ workflow CALL_STRUCTURAL_VARIANTS { 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) ] - val_cnvpytor_bins // string: [optional] binsizes for cnvpytor default: 1000 main: ch_versions = Channel.empty() @@ -35,19 +33,6 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - //cnvpytor - // CALL_CNV_CNVPYTOR ( bam, bai, case_info, cnvpytor_bins, fasta_no_meta, fai) - // .candidate_cnvs_vcf - // .collect{it[1]} - // .set {cnvpytor_vcf } - - // //merge - // tiddit_vcf - // .combine(manta_vcf) - // .combine(cnvpytor_vcf) - // .toList() - // .set { vcf_list } - //merge tiddit_vcf .combine(manta_vcf) @@ -58,7 +43,6 @@ workflow CALL_STRUCTURAL_VARIANTS { .combine(vcf_list) .set { merge_input_vcfs } - // SVDB_MERGE ( merge_input_vcfs, ["tiddit","manta","cnvpytor"] ) SVDB_MERGE (merge_input_vcfs, ["tiddit","manta"]) TABIX_TABIX (SVDB_MERGE.out.vcf) @@ -66,7 +50,6 @@ 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(TABIX_TABIX.out.versions) - // ch_versions = ch_versions.mix(CALL_CNV_CNVPYTOR.out.versions) emit: vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] diff --git a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf b/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf deleted file mode 100644 index 975d139c..00000000 --- a/subworkflows/local/variant_calling/call_cnv_cnvpytor.nf +++ /dev/null @@ -1,54 +0,0 @@ -// -// CNVpytor workflow - Calling CNVs -// - -include { CNVPYTOR_IMPORTREADDEPTH as GENERATE_PYTOR } from '../../../modules/nf-core/cnvpytor/importreaddepth/main' -include { CNVPYTOR_HISTOGRAM as HISTOGRAMS } from '../../../modules/nf-core/cnvpytor/histogram/main' -include { CNVPYTOR_PARTITION as PARTITIONS } from '../../../modules/nf-core/cnvpytor/partition/main' -include { CNVPYTOR_CALLCNVS as CALL_CNVS } from '../../../modules/nf-core/cnvpytor/callcnvs/main' -include { CNVPYTOR_VIEW as VIEW } from '../../../modules/nf-core/cnvpytor/view/main' - -workflow CALL_CNV_CNVPYTOR { - take: - ch_bam // channel: [mandatory] [ val(meta), path(bam)] - ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - val_binsizes // string: [optional] binsizes for cnvpytor default: 1000 - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] - - - main: - ch_versions = Channel.empty() - - GENERATE_PYTOR(ch_bam.join(ch_bai, by: [0]), ch_fasta, ch_fai) - - HISTOGRAMS(GENERATE_PYTOR.out.pytor, binsizes) - - PARTITIONS(HISTOGRAMS.out.pytor, binsizes) - - CALL_CNVS(PARTITIONS.out.pytor, binsizes) - - CALL_CNVS.out - .pytor - .collect{it[1]} - .toList() - .set { file_list } - - ch_case_info - .combine(file_list) - .set { ch_pytor } - - VIEW(ch_pytor, val_binsizes, "vcf") - - ch_versions = ch_versions.mix(GENERATE_PYTOR.out.versions.first()) - ch_versions = ch_versions.mix(HISTOGRAMS.out.versions.first()) - ch_versions = ch_versions.mix(PARTITIONS.out.versions.first()) - ch_versions = ch_versions.mix(CALL_CNVS.out.versions.first()) - ch_versions = ch_versions.mix(VIEW.out.versions.first()) - - emit: - candidate_cnvs_vcf = VIEW.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] -} - diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b8f684fc..15555a4d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -336,8 +336,7 @@ workflow RAREDISEASE { ch_genome_fasta_meta, ch_genome_fai_no_meta, CHECK_INPUT.out.case_info, - ch_target_bed, - params.cnvpytor_binsizes + ch_target_bed ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From 7ba5bbfec549ef30692fbb57840eff7c7873cb2c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:41:46 +0100 Subject: [PATCH 1091/1921] bump version --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index b1e22a23..597dd35a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -235,7 +235,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=22.10.1' - version = '1.0dev' + version = '1.0.0' doi = '' } From 7590a2f216e10960ab3fc720cdc502d5edb2a900 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 25 Mar 2023 00:28:11 +0100 Subject: [PATCH 1092/1921] update changelog --- CHANGELOG.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b18325f..6ba65790 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0dev - [date] +## nf-core/raredisease version 1.0.0 - [2023-03-25] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. - -### `Added` - -### `Fixed` - -### `Dependencies` - -### `Deprecated` From 8e275a94518580383df8c10dbbcb3ac7087277f1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 25 Mar 2023 10:41:13 +0100 Subject: [PATCH 1093/1921] convert TODOs into issues --- .github/workflows/awsfulltest.yml | 2 +- README.md | 4 +--- assets/methods_description_template.yml | 2 +- conf/test_full.config | 2 -- lib/WorkflowMain.groovy | 2 +- subworkflows/local/check_input.nf | 1 - subworkflows/local/mitochondria/align_and_call_MT.nf | 3 --- workflows/raredisease.nf | 2 +- 8 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index c6fab293..621336b4 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Launch workflow via tower uses: nf-core/tower-action@v3 - # TODO nf-core: You can customise AWS full pipeline tests as required + # 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 with: diff --git a/README.md b/README.md index 5d0273ec..6b3779a7 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! - - On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/raredisease/results). ## Pipeline summary @@ -146,7 +144,7 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index de040a07..d6ebfa6c 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -3,7 +3,7 @@ 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 +## nf-core: Update the HTML below to your prefered methods description, e.g. add publication citation for this pipeline ## You inject any metadata in the Nextflow '${workflow}' object data: |

Methods

diff --git a/conf/test_full.config b/conf/test_full.config index a33b4721..74c4aa73 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,8 +15,6 @@ params { config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' // Genome references diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 9f34c54a..cc2deaca 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -9,7 +9,7 @@ class WorkflowMain { // public static String citation(workflow) { return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - // TODO nf-core: Add Zenodo DOI for pipeline after first release + // nf-core: Add Zenodo DOI for pipeline after first release //"* The pipeline\n" + //" https://doi.org/10.5281/zenodo.XXXXXXX\n\n" + "* The nf-core framework\n" + diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 0faa087c..80709c16 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -37,7 +37,6 @@ def create_fastq_channel(LinkedHashMap row) { meta.paternal = row.paternal_id meta.phenotype = row.phenotype meta.single_end = row.single_end.toBoolean() - //TODO: think about adding LB and PU, make sure only illumina will be used, ID can also contain a flowcell id meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index a20726de..95dcca1c 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -49,9 +49,6 @@ workflow ALIGN_AND_CALL_MT { GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) - // Haplocheck - // TODO: probably it will be outside this subworkflow as we want to run - // with the VCF with the variants from the shifted alignment (to solve the mt circularity issue) HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) // Filter Mutect2 calls diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 15555a4d..67dfdc93 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -500,7 +500,7 @@ workflow RAREDISEASE { // MODULE: Pipeline reporting // - // TODO The template v2.7.1 template update introduced: ch_versions.unique{ it.text }.collectFile(name: 'collated_versions.yml') + // The template v2.7.1 template update introduced: ch_versions.unique{ it.text }.collectFile(name: 'collated_versions.yml') // This caused the pipeline to stall CUSTOM_DUMPSOFTWAREVERSIONS ( ch_versions.unique().collectFile(name: 'collated_versions.yml') From c1692b94306aef9eb7e25aaee29833366d146771 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 25 Mar 2023 22:35:07 +0100 Subject: [PATCH 1094/1921] update readme --- README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/README.md b/README.md index 6b3779a7..32ba06f8 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ - [Introduction](#introduction) - [Pipeline summary](#pipeline-summary) - - [Work in progress flowchart](#work-in-progress-flowchart) - [Quick Start](#quick-start) - [Documentation](#documentation) - [Credits](#credits) @@ -91,12 +90,6 @@ On release, automated continuous integration tests run the pipeline on a full-si Note that it is possible to include/exclude certain tools or steps. -### Work in progress flowchart - -![nf-core/raredisease work in progress](https://docs.google.com/drawings/d/e/2PACX-1vTam7xjHBQTo1QsOpMUpd5F2vUZK5aXuf51OpSBaaV_2xMwfS1oN6GgVeQEJHjNNXRtCVHdGjCVFyzO/pub?w=2268&h=2268) - -Note that this chart is meant as a tool to help with coordination during pipeline development and hence is modified regularly. Some tools might be added or removed as suitable. If you would like to modify the flowchart, please contact us on the slack channel (see "Contributions and Support" further down). - ## Quick Start 1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=22.10.1`) @@ -144,7 +137,7 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. From dc57013cdd002a42b02aba7fba1e8c0e7aec6356 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 26 Mar 2023 22:35:53 +0200 Subject: [PATCH 1095/1921] update usage --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index e5fa333f..5a225570 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -66,7 +66,7 @@ The above command downloads the pipeline from github, caches it, and tests it on > When you run the command again, it will fetch the pipeline from cache even if a more recent version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. -Test profile runs the pipeline with a proband containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. +Test profile runs the pipeline with a case containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. Running the command creates the following files in your working directory: From 26c14d7381ac5a37aea3b405205be66f6252edba Mon Sep 17 00:00:00 2001 From: sima-r Date: Tue, 28 Mar 2023 13:09:34 +0200 Subject: [PATCH 1096/1921] updated peddy module --- modules.json | 2 +- modules/nf-core/peddy/main.nf | 14 +++++++------- modules/nf-core/peddy/meta.yml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules.json b/modules.json index 1fbd2e08..2ffa4b84 100644 --- a/modules.json +++ b/modules.json @@ -222,7 +222,7 @@ }, "peddy": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "21e6e085967902fb393b27b2e7590ac4c85fab8e", "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { diff --git a/modules/nf-core/peddy/main.nf b/modules/nf-core/peddy/main.nf index 6bed1621..5d1cfe2f 100644 --- a/modules/nf-core/peddy/main.nf +++ b/modules/nf-core/peddy/main.nf @@ -40,14 +40,14 @@ process PEDDY { """ stub: + def prefix = task.ext.prefix ?: "${meta.id}" """ - filename=\$(basename $vcf) - touch \$filename.ped_check.csv - touch \$filename.vs.html - touch \$filename.het_check.csv - touch \$filename.sex_check.csv - touch \$filename.peddy.ped - touch \$filename.html + touch ${prefix}.ped_check.csv + touch ${prefix}.vs.html + touch ${prefix}.het_check.csv + touch ${prefix}.sex_check.csv + touch ${prefix}.peddy.ped + touch ${prefix}.html touch versions.yml """ diff --git a/modules/nf-core/peddy/meta.yml b/modules/nf-core/peddy/meta.yml index b3f40bb5..4c72b286 100644 --- a/modules/nf-core/peddy/meta.yml +++ b/modules/nf-core/peddy/meta.yml @@ -11,7 +11,7 @@ tools: homepage: https://github.com/brentp/peddy documentation: https://peddy.readthedocs.io/en/latest/ tool_dev_url: https://github.com/brentp/peddy - doi: "https://doi.org/10.1016/j.ajhg.2017.01.017" + doi: "10.1016/j.ajhg.2017.01.017" licence: ["MIT"] input: From 078183f6d78e102c0844f6e7a3cadc2fae36b68c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 28 Mar 2023 13:39:10 +0200 Subject: [PATCH 1097/1921] update docs --- docs/output.md | 4 +- docs/usage.md | 135 +++++++++++++++++++++++++------------------------ 2 files changed, 70 insertions(+), 69 deletions(-) diff --git a/docs/output.md b/docs/output.md index f4557bbe..ec189a02 100644 --- a/docs/output.md +++ b/docs/output.md @@ -394,8 +394,8 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen Output files - `rank_and_filter/` - - `_clinical_snv.ann_filter.vcf.gz`: file containing clincal relevant SNVs. - - `_clinical_sv.ann_filter.vcf.gz`: file containing clincal relevant SVs. + - `_clinical_snv.ann_filter.vcf.gz`: file containing clincally relevant SNVs. + - `_clinical_sv.ann_filter.vcf.gz`: file containing clincally relevant SVs. - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores. - `_ranked_snv.vcf.gz.tbi`: file containing SNV annotations with their rank scores. - `_ranked_sv.ann_filter.vcf.gz`: file containing SV annotations with their rank scores. diff --git a/docs/usage.md b/docs/usage.md index 5a225570..18a763ca 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -37,7 +37,7 @@ Table of contents: ## Introduction -nf-core/raredisease is a bioinformatics best-practice analysis pipeline to call, annotate and score variants from WGS/WES of rare disease patients. The pipeline is built using nextflow. +nf-core/raredisease is a bioinformatics best-practice analysis pipeline to call, annotate and score variants from WGS/WES of rare disease patients. The pipeline is built using Nextflow. ## Prerequisites @@ -59,10 +59,10 @@ nextflow run nf-core/raredisease \ --outdir ``` -> Check [nf-core/configs](https://github.com/nf-core/configs/tree/master/conf) to see if a custom config file to run nf-core pipelines already exists for your institute. If so, you can simply use `-profile test,` in your command. This enables the appropirate package manager and sets the appropriate execution settings for your machine. +> Check [nf-core/configs](https://github.com/nf-core/configs/tree/master/conf) to see if a custom config file to run nf-core pipelines already exists for your institute. If so, you can simply use `-profile test,` in your command. This enables the appropriate package manager and sets the appropriate execution settings for your machine. > NB: The order of profiles is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -The above command downloads the pipeline from github, caches it, and tests it on the test dataset. +The above command downloads the pipeline from GitHub, caches it, and tests it on the test dataset. > When you run the command again, it will fetch the pipeline from cache even if a more recent version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. @@ -71,10 +71,10 @@ Test profile runs the pipeline with a case containing three samples, but if you Running the command creates the following files in your working directory: ``` -work # Directory containing the nextflow working files +work # Directory containing the Nextflow working files # Finished results in specified location (defined with --outdir) .nextflow_log # Log file from Nextflow -# Other nextflow hidden files, like history of pipeline logs. +# Other Nextflow hidden files, like history of pipeline logs. ``` ## Run nf-core/raredisease with your data @@ -87,23 +87,23 @@ Running the pipeline involves three steps: #### Samplesheet -A samplesheet is used to pass the information about the sample(s), such as the path to the fastq files and other meta data (gender, phenotype, etc.,) to the pipeline in csv format. +A samplesheet is used to pass the information about the sample(s), such as the path to the FASTQ files and other meta data (gender, phenotype, etc.,) to the pipeline in csv format. nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). | Fields | Description | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `lane` | Used to generate seperate channels during the alignment step | -| `fastq_1` | Absolute path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Absolute path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `gender` | Sex (1=male; 2=female; other=unknown) | -| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected) | +| `lane` | Used to generate separate channels during the alignment step. | +| `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `gender` | Sex (1=male; 2=female; other=unknown). | +| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | | `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | | `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | -| `case_id` | Case ID, for the analysis used when generating a family VCF | +| `case_id` | Case ID, for the analysis used when generating a family VCF. | -It is also possible to include multiple runs of the same sample in a samplesheet. For example, when you have re-sequenced the same sample more than once to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across 2 lanes: +It is also possible to include multiple runs of the same sample in a samplesheet. For example, when you have re-sequenced the same sample more than once to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across two lanes: | sample | lane | fastq_1 | fastq_2 | gender | phenotype | paternal_id | maternal_id | case_id | | -------- | ---- | -------------------------------- | -------------------------------- | ------ | --------- | ----------- | ----------- | ------- | @@ -118,24 +118,24 @@ If you would like to see more examples of what a typical samplesheet looks like In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools (example, you can align with either bwamem2 or sentieon, call SNVs with DeepVariant or sentieon). You also have the option to turn off sections of the pipeline if you do not want to run them (example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file). This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by sentieon. +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools. For example, you can align with either bwamem2 or Sentieon BWA mem and call SNVs with either DeepVariant or Sentieon DNAscope. You also have the option to turn off sections of the pipeline if you do not want to run the. For example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file. This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by Sentieon DNAscope. -nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following catergories: +nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following categories: -1. Alignment (bwamem2/sentieon) +1. Alignment (bwamem2/Sentieon BWA mem) 2. QC stats from the alignment files -3. Repeat expansions (Expansionshunter & Stranger) -4. Variant calling - SNV (DeepVariant/Sentieon-haplotypecaller) -5. Variant calling - Structural variants (Tiddit & Manta) -6. SNV annotation & ranking (rohcall, vcfanno, ensemblvep, genmod) -7. SV annotation & ranking (svdb query, ensemblvep, genmod) +3. Repeat expansions (ExpansionsHunter & Stranger) +4. Variant calling - SNV (DeepVariant/Sentieon DNAscope) +5. Variant calling - Structural variants (SV) (Tiddit & Manta) +6. SNV annotation & ranking (rohcall, vcfanno, ensembl VEP, GENMOD) +7. SV annotation & ranking (SVDB query, ensembl VEP, GENMOD) 8. Mitochondrial analysis -> We have only listed the groups that require at least one input from the user. For example, the pipeline also runs smncopynumbercaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check [README](../README.md). +> We have only listed the groups that require at least one input from the user. For example, the pipeline also runs SMNCopyNumberCaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check the [README](../README.md). The mandatory and optional parameters for each category are tabulated below. -> Alignment, qc stats, repeat expansions, snv & sv variant calling are run by default. Hence, the mandatory parameters used by those features will always have to be provided to the pipeline. +> Alignment, QC stats, repeat expansions, SNV & SV variant calling are run by default. Hence, the mandatory parameters used by those features will always have to be provided to the pipeline. ##### 1. Alignment @@ -146,19 +146,20 @@ The mandatory and optional parameters for each category are tabulated below. | platform | known_dbsnp3 | | | known_dbsnp_tbi3 | -1Default value is bwamem2, but if you have a valid license for sentieon, you have the option to use sentieon as well.
+1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
2fasta_fai and bwamem2_index, if not provided by the user, will be generated by the pipeline when necessary.
-3Used only by sentieon.
+3Used only by Sentieon.
##### 2. QC stats from the alignment files | Mandatory | Optional | | ------------------------------------------------------------ | -------- | -| intervals_wgs | | -| intervals_y | | -| target_bed / (bait_intervals & target_intervals)1 | | +| intervals_wgs1 | | +| intervals_y1 | | +| target_bed / (bait_intervals & target_intervals)2 | | -1 If a target_bed file is provided, bait_intervals and target_intervals can be generated by the pipeline. +1These files are Picard's style interval list files, comprising the entire genome or only the chromosome Y. A version of these files for GRCh37 and for GRCh38 is supplied in the pipeline assets. These files are not necessary if you are using Sentieon. +2 If a target_bed file is provided, bait_intervals and target_intervals can be generated by the pipeline. ##### 3. Repeat expansions @@ -172,11 +173,11 @@ The mandatory and optional parameters for each category are tabulated below. | -------------------------- | --------------------------- | | variant_caller1 | known_dbsnp2 | | ml_model2 | known_dbsnp_tbi2 | -| analysis_type 3 | call_interval2 | +| analysis_type3 | call_interval2 | | | known_dbsnp_tbi2 | -1Default variant caller is DeepVariant, but you have the option to use sentieon as well.
-2These parameters are only used by sentieon.
+1Default variant caller is DeepVariant, but you have the option to use Sentieon as well.
+2These parameters are only used by Sentieon.
3Default is WGS, but you have the option to choose WES as well.
##### 5. Variant calling - Structural variants @@ -196,13 +197,13 @@ The mandatory and optional parameters for each category are tabulated below. | vep_cache_version | vep_filters6 | | vep_cache | score_config_snv7 | -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).
-3Path to a vcfanno configration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
-4Gnomad vcf file can be downloaded from [here] (https://gnomad.broadinstitute.org/downloads).
-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(HGNC ids) that is used to split the variants into a 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).
+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).
+3Path to a vcfanno configuration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
+4GnomAD VCF file can be downloaded from [here] (https://gnomad.broadinstitute.org/downloads).
+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).
##### 7. SV annotation & Ranking @@ -213,32 +214,32 @@ The mandatory and optional parameters for each category are tabulated below. | vep_cache_version | vep_filters | | vep_cache | | -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). +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 -| Mandatory | Optional | -| ------------------------------- | -------- | -| genome | | -| mt_backchain_shift 1 | | -| mt_contig_name | | -| mt_fasta_shift | | -| mt_intervals | | -| mt_intervals_shift | | -| vcfanno_resources | | -| vcfanno_toml | | -| vep_cache_version | | -| vep_cache | | - -1 Can 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 | | +| mt_backchain_shift1 | | +| mt_contig_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). #### Run the pipeline -You can directly supply the parameters in the command line (cli) or use a config file from which the pipeline can import the parameters. +You can directly supply the parameters in the command line (CLI) or use a config file from which the pipeline can import the parameters. -##### Direct input in cli +##### Direct input in CLI -All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed using the cli. For example, you can provide the samplesheet, reference fasta, and turn off annotations for SNVs and SVs by running, +All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed using the CLI. For example, you can provide the samplesheet, reference FASTA, and turn off annotations for SNVs and SVs by running, ``` nextflow run nf-core/raredisease \ @@ -269,7 +270,7 @@ A sample config file can be found [here](https://github.com/nf-core/raredisease/ - **Singularity cache:** If you are using singularity, use the nf-core download command to download images first, before running the pipeline. Define [NXF_SINGULARITY_CACHEDIR](https://nextflow.io/docs/latest/config.html?highlight=nxf_singularity_cachedir#environment-variables) or singularity.cacheDir Nextflow options to store and re-use the images from a central location for future pipeline runs. -- **Save references:** While the pipeline can generate indices for the fasta and some vcf files when they are not provided, it can be benficial to supply them to the pipeline as it saves computing resources. You can use the `--save_reference` parameter to publish those files, and then update your config file with the paths to these files for your subsequent runs. +- **Save references:** While the pipeline can generate indices for the FASTA and some VCF files when they are not provided, it can be benficial to supply them to the pipeline as it saves computing resources. You can use the `--save_reference` parameter to publish those files, and then update your config file with the paths to these files for your subsequent runs. - **Update pipeline:** If you would like to update the pipeline code stored in cache, in addition to running the command with `-latest` option, you can also run the command below: @@ -277,7 +278,7 @@ A sample config file can be found [here](https://github.com/nf-core/raredisease/ nextflow pull nf-core/raredisease ``` -- **Reproducibility:** Specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r`, for example, `-r 1.3.1`. You can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline. For example, you can view the version number at the bottom of the MultiQC reports. +- **Reproducibility:** Specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (e.g. `1.3.1`). Then specify this when running the pipeline with `-r`, for example, `-r 1.3.1`. You can switch to another version by changing the number after the `-r` flag. The version number will be logged in reports when you run the pipeline. For example, you can view the version number at the bottom of the MultiQC reports. - **Restart a previous run:** Add `-resume` to your command when restarting a pipeline. Nextflow will use cached results from any pipeline steps where inputs are the same, and resume the run from where it terminated previously. For input to be considered the same, names and the files' contents must be identical. For more info about `-resume`, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. @@ -323,7 +324,7 @@ Tip: you can replicate the issue by changing to the process work dir and enterin ##### For beginners -nf-core/raredisease provides you with options to increase the amount of CPUs(`--max_cpus`), memory(`--max_memory`), and time (`--max_time`) for the whole pipeline. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of raredisease](https://nf-co.re/raredisease/dev/parameters) and click `show hidden params` button in the right panel to get the default value for `--max_memory`. Run the pipeline with updated max_memory value `--max_memory xxxGB -resume` to skip all process, that were already calculated. If you can not increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. +nf-core/raredisease provides you with options to increase the amount of CPUs (`--max_cpus`), memory (`--max_memory`), and time (`--max_time`) for the whole pipeline. Based on the error above, you have to increase the amount of memory. Therefore you can go to the [parameter documentation of raredisease](https://nf-co.re/raredisease/dev/parameters) and click `show hidden params` button in the right panel to get the default value for `--max_memory`. Run the pipeline with updated max_memory value `--max_memory xxxGB` and `-resume` to skip all processes that were already calculated. If you cannot increase the resource of the complete pipeline, you can try to adapt the resource for a single process as mentioned below. ##### Advanced option on process level @@ -396,21 +397,21 @@ See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -### Run sentieon +### Run Sentieon -To use sentieon you have to: +To use Sentieon you have to: -1. Ensure that sentieon executable is in path. -2. If necessary, store license information as a secret in nextflow's local store. +1. Ensure that Sentieon executable is in path. +2. If necessary, store license information as a secret in Nextflow's local store. 3. Set environmental variable `NXF_ENABLE_SECRETS` to an appropriate value. -To elaborate more on item #2 in the list above, if you are running nf-core/raredisease with sentieon on AWS or on a local machine where do not want other users to know your license details, we recommend that you use [nextflow's secrets feature](https://www.nextflow.io/docs/latest/secrets.html) to pass the that information. To do that run the command below after replacing LICENSE with the value corresponding to your license server (ex:1.1.1.1:4000) +To elaborate more on item #2 in the list above, if you are running nf-core/raredisease with Sentieon on AWS or on a local machine and you do not want other users to know your license details, we recommend that you use [Nextflow's secrets feature](https://www.nextflow.io/docs/latest/secrets.html) to pass the that information. To do that run the command below after replacing LICENSE with the value corresponding to your license server (for example, 1.1.1.1:4000) ``` nextflow secrets set SENTIEON_LICENSE_BASE64 ``` -If you are using nextflow secrets, you have to set the environment variable `NXF_ENABLE_SECRETS` to true. This will see to it that the pipeline can retrieve the secret from nextflow's secrets store during the pipeline execution. Keep in mind that versions of nextflow Version 22.09.2-edge and onwards have NXF_ENABLE_SECRETS to true by default. If you are not using secrets set `NXF_ENABLE_SECRETS` to false, but make sure that the environmental variable [`SENTIEON_LICENSE`](`NXF_ENABLE_SECRETS`) is set to reflect the value of your license server on your machine. +If you are using Nextflow secrets, you have to set the environment variable `NXF_ENABLE_SECRETS` to true. This will see to it that the pipeline can retrieve the secret from Nextflow's secrets store during the pipeline execution. Keep in mind that versions of Nextflow Version 22.09.2-edge and onwards have NXF_ENABLE_SECRETS to true by default. If you are not using secrets set `NXF_ENABLE_SECRETS` to false, but make sure that the environment variable [`SENTIEON_LICENSE`](`NXF_ENABLE_SECRETS`) is set to reflect the value of your license server on your machine. ### Azure Resource Requests @@ -427,7 +428,7 @@ Nextflow handles job submissions and supervises the running jobs. The Nextflow p The Nextflow `-bg` flag launches Nextflow in the background, detached from your terminal so that the workflow does not stop if you log out of your session. The logs are saved to a file. Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. -Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). +Some HPC setups also allow you to run Nextflow within a cluster job submitted to your job scheduler (from where it submits more jobs). ### Nextflow memory requirements From f759f23b5ed6e5903dbe2b66857f47aa8e43a7bd Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Tue, 28 Mar 2023 17:00:53 +0200 Subject: [PATCH 1098/1921] Typo --- docs/output.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/output.md b/docs/output.md index ec189a02..bafda861 100644 --- a/docs/output.md +++ b/docs/output.md @@ -164,7 +164,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Sention WgsMetricsAlgo -[Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) is the sentieon's equivalent of Picard's CollectWgsMetrics. +[Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) is the Sentieon's equivalent of Picard's CollectWgsMetrics.
Output files @@ -394,8 +394,8 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen Output files - `rank_and_filter/` - - `_clinical_snv.ann_filter.vcf.gz`: file containing clincally relevant SNVs. - - `_clinical_sv.ann_filter.vcf.gz`: file containing clincally relevant SVs. + - `_clinical_snv.ann_filter.vcf.gz`: file containing clinically relevant SNVs. + - `_clinical_sv.ann_filter.vcf.gz`: file containing clinically relevant SVs. - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores. - `_ranked_snv.vcf.gz.tbi`: file containing SNV annotations with their rank scores. - `_ranked_sv.ann_filter.vcf.gz`: file containing SV annotations with their rank scores. From 099affe6a1aeef9cd3fecb4682b0e244bae51c65 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Tue, 28 Mar 2023 17:48:42 +0200 Subject: [PATCH 1099/1921] Updated pipeline overview --- docs/images/raredisease_workflow_v1.0.0dev.png | Bin 0 -> 291890 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/raredisease_workflow_v1.0.0dev.png diff --git a/docs/images/raredisease_workflow_v1.0.0dev.png b/docs/images/raredisease_workflow_v1.0.0dev.png new file mode 100644 index 0000000000000000000000000000000000000000..f8afc373af0fddcffdd8eedc8ab24f55b4449c2e GIT binary patch literal 291890 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

dyYn^o(4z(^_+Q(88IdyjNuJM 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%0AngLV{^)fI1JAt<6)3V;Y_Xmc*59vX=KxOwn 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%0A7lql#V7Wo&4IS8+p;^ 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 VA7$?lU{e0yJYD@<);T3K0RSu_N1y-z literal 0 HcmV?d00001 From 4c038a289e5323d3ca2508a0222c3abfd1005007 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Tue, 28 Mar 2023 17:49:22 +0200 Subject: [PATCH 1100/1921] Updated overview --- docs/images/raredisease_workflow.svg | 1047 ++++++++++++++------------ 1 file changed, 553 insertions(+), 494 deletions(-) diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg index 012f2c59..38612ac2 100755 --- a/docs/images/raredisease_workflow.svg +++ b/docs/images/raredisease_workflow.svg @@ -3,8 +3,8 @@ + originx="5.7885097" + originy="24.449992" /> + + + transform="translate(5.7885085,24.449993)"> + - - - - bam - - - - Preprocessing, mapping etc + id="g52268"> + + + + + + + + bam + + + + + + Preprocessing and mapping bwamem2, MarkDuplicates + x="135.63867" + y="154.69126" + id="tspan55925">bwa-mem2, MarkDuplicates Sentieon: bwamem, Locuscollector, Dedup - - - - Reports + x="95.970703" + y="169.69126" + id="tspan55929">Sentieon: bwamem, Locuscollector, Dedup + + + + + Reports and metrics MultiQC, Peddy, plink, rhocall - - - - - Variant calling - - FastQC, MultiQC, Mosdepth, QualiMap, Picard, tiddit/cov, ... + + + + Variant calling + SV + repeat SV + id="tspan55951">expansions ExpansionHunter, CNVpytor, Manta, tiddit/sv - MitochondriaManta, tiddit/sv, Expansion Hunter, Stranger + Mitochondria + id="tspan55961"> According to GATK Best Practices + x="473.05078" + y="263.66196" + id="tspan55967">According to GATK Best Practices Mutect2, eKLIPse - SNV + short indelsMutect2 + SNV + short indels + id="tspan55977"> Deepvariant -Sentieon: DNAscope, DNAModelApply - - - - Variant annotation and prioritization - - SV + x="48.398438" + y="263.66196" + id="tspan55983">DeepVariant VCFanno, VEP, Gens - Sentieon: DNAscope, DNAModelApply + + + + + Variant annotation and ranking + + Mitochondria + id="tspan55997">SV Haplogrep, HmtNote, gnomAD_mt - svdb query, VEP, GENMOD + SNV + short indels + id="tspan56005">Mitochondria VCFanno, CADD, VEP - - - - - Outputs + x="482.41797" + y="383.87485" + id="tspan56009">HaploGrep2, vcfanno, VEP + SNV + short indels +bcftools roh, vcfanno, VEP, GENMOD + + + + + + Outputs VCFs, inputs for scout, Gens - - - - - vcf - - - - + x="73.898438" + y="482.35532" + id="tspan56029">VCFs, inputs for scout + + + + + vcf + + + + + + vcf + + + + + + vcf + + + - + + + fastq + + + + + vcf - + transform="matrix(0.26458333,0,0,0.26458333,50.69795,-26.102348)" + id="text1581" + style="font-size:18.6667px;white-space:pre;shape-inside:url(#rect1583);fill:#ff0000" /> + + - - - - vcf - + transform="matrix(0.26458333,0,0,0.26458333,75.380932,-16.666737)" + id="text49873" + style="font-size:18.6667px;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro';text-align:center;white-space:pre;shape-inside:url(#rect49875);fill:#b3deb2;stroke:#000000;stroke-width:1.88976;stroke-linejoin:round">1.0.0dev - - - - fastq - - - - dev - - - From 01b08cd8ec6aaa5ae09a069ae4d914b6a34e44fd Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Tue, 28 Mar 2023 17:50:24 +0200 Subject: [PATCH 1101/1921] Updated path to pipeline overview --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 32ba06f8..da131744 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ On release, automated continuous integration tests run the pipeline on a full-si

- +

Note that it is possible to include/exclude certain tools or steps. From d8ad823be5d8454e98a568f2ba0ebfa7058ba640 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 28 Mar 2023 18:29:51 +0200 Subject: [PATCH 1102/1921] remove hmtnote --- CITATIONS.md | 4 -- modules.json | 5 --- modules/nf-core/hmtnote/main.nf | 45 ------------------- modules/nf-core/hmtnote/meta.yml | 39 ---------------- .../local/mitochondria/merge_annotate_MT.nf | 5 --- 5 files changed, 98 deletions(-) delete mode 100644 modules/nf-core/hmtnote/main.nf delete mode 100644 modules/nf-core/hmtnote/meta.yml diff --git a/CITATIONS.md b/CITATIONS.md index 8c6d5631..f961d579 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -56,10 +56,6 @@ > Weissensteiner H, Pacher D, Kloss-Brandstätter A, et al. HaploGrep 2: mitochondrial haplogroup classification in the era of high-throughput sequencing. Nucleic Acids Res. 2016;44(W1):W58-W63. doi:10.1093/nar/gkw233 -- [Hmtnote](https://www.biorxiv.org/content/10.1101/600619v1) - - > Preste R, Clima R, Attimonelli M. Human Mitochondrial Variant Annotation with HmtNote. Bioinformatics; 2019. doi:10.1101/600619 - - [Manta](https://academic.oup.com/bioinformatics/article/32/8/1220/1743909?login=true) > Chen X, Schulz-Trieglaff O, Shaw R, et al. Manta: rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics. 2016;32(8):1220-1222. doi:10.1093/bioinformatics/btv710 diff --git a/modules.json b/modules.json index 3ccfbc8c..b31639d6 100644 --- a/modules.json +++ b/modules.json @@ -180,11 +180,6 @@ "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, - "hmtnote": { - "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] - }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", diff --git a/modules/nf-core/hmtnote/main.nf b/modules/nf-core/hmtnote/main.nf deleted file mode 100644 index 415a44b0..00000000 --- a/modules/nf-core/hmtnote/main.nf +++ /dev/null @@ -1,45 +0,0 @@ -process HMTNOTE { - tag "$meta.id" - label 'process_low' - - conda "bioconda::hmtnote=0.7.2" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/hmtnote:0.7.2--pyhdfd78af_0': - 'quay.io/biocontainers/hmtnote:0.7.2--pyhdfd78af_0' }" - - input: - tuple val(meta), path(vcf) - - output: - tuple val(meta), path("*_annotated.vcf"), 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}" - - """ - hmtnote \\ - annotate \\ - $vcf \\ - ${prefix}_annotated.vcf \\ - $args - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) - END_VERSIONS - """ - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_annotated.vcf - cat <<-END_VERSIONS > versions.yml - "${task.process}": - hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) - END_VERSIONS - """ -} diff --git a/modules/nf-core/hmtnote/meta.yml b/modules/nf-core/hmtnote/meta.yml deleted file mode 100644 index 4221ff2b..00000000 --- a/modules/nf-core/hmtnote/meta.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: hmtnote -description: Human mitochondrial variants annotation using HmtVar. -keywords: - - hmtnote mitochondria annotation -tools: - - hmtnote: - description: Human mitochondrial variants annotation using HmtVar. - homepage: https://github.com/robertopreste/HmtNote - documentation: https://hmtnote.readthedocs.io/en/latest/usage.html - - doi: "10.1101/600619" - licence: ["MIT"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - - vcf: - type: file - description: vcf file - pattern: "*.vcf" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - vcf: - type: file - description: annotated vcf - pattern: "*_annotated.vcf" - -authors: - - "@sysbiocoder" diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 36f95ff3..33886f4e 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -9,7 +9,6 @@ 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 { HMTNOTE as HMTNOTE_MT } from '../../../modules/nf-core/hmtnote/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' @@ -88,10 +87,6 @@ workflow MERGE_ANNOTATE_MT { ch_in_vep = ch_merged_vcf.mix(ch_case_vcf.single) - // Annotating with Hmtnote - //HMTNOTE_MT(ch_in_vep) - //ch_versions = ch_versions.mix(HMTNOTE_MT.out.versions.first()) - // Annotating with ensembl Vep ENSEMBLVEP_MT( ch_in_vep, val_vep_genome, From 45ce4038169dd2a25080b1ecdd3c06599a167d0b Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 29 Mar 2023 16:45:21 +0200 Subject: [PATCH 1103/1921] updates peddy scritps --- CITATIONS.md | 4 ++++ conf/modules/peddy_check.config | 26 ++++++++++++++++++++++++++ conf/test.config | 7 +++++++ subworkflows/local/peddy_check.nf | 20 +++++++++----------- workflows/raredisease.nf | 6 +++--- 5 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 conf/modules/peddy_check.config diff --git a/CITATIONS.md b/CITATIONS.md index 7b554f04..25a96c12 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -76,6 +76,10 @@ > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016;32(19):3047-3048. doi:10.1093/bioinformatics/btw354 +- [Peddy](https://www.cell.com/action/showFullTextImages?pii=S0002-9297(17)30017-4) + + > Pedersen, B. S. and Quinlan, A. R. (2017) ‘Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy’, The American Journal of Human Genetics, 100(3), pp. 406–413. doi: https://doi.org/10.1016/j.ajhg.2017.01.017. + - [Picard](https://broadinstitute.github.io/picard/) - [Qualimap](https://academic.oup.com/bioinformatics/article/32/2/292/1744356?login=true) diff --git a/conf/modules/peddy_check.config b/conf/modules/peddy_check.config new file mode 100644 index 00000000..bbd7eef2 --- /dev/null +++ b/conf/modules/peddy_check.config @@ -0,0 +1,26 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Gens options +// + +process { + withName: '.*:PEDDY_CHECK:PEDDY' { + publishDir = [ + path: { "${params.outdir}/peddy_check" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/test.config b/conf/test.config index de810af2..5fb4c9e8 100644 --- a/conf/test.config +++ b/conf/test.config @@ -49,4 +49,11 @@ params { vep_cache_version = 107 } +process { + // Peddy needs a bigger test set in order to run + withName: '.*:PEDDY_CHECK:PEDDY' { + ext.when = { workflow.stubRun } + } +} + diff --git a/subworkflows/local/peddy_check.nf b/subworkflows/local/peddy_check.nf index 3d9adbc2..101bc4a2 100644 --- a/subworkflows/local/peddy_check.nf +++ b/subworkflows/local/peddy_check.nf @@ -6,19 +6,17 @@ include { PEDDY } from '../../modules/nf-core/peddy/main' workflow PEDDY_CHECK { take: - vcf // channel: [ val(meta), path(vcf), path(vcf_index) ] - ped - + ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] + ch_ped // channel: [mandatory] [ path(ped) ] + main: ch_versions = Channel.empty() - PEDDY(vcf, ped) - ch_versions = ch_versions.mix(PEDDY.out.versions) - + PEDDY( ch_vcf, ch_ped ) + ch_versions = ch_versions.mix(PEDDY.out.versions.first()) + emit: - ped = PEDDY.out.ped - csv = PEDDY.out.csv - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] + ped = PEDDY.out.ped // channel: [ val(meta), path(ped) ] + csv = PEDDY.out.csv // channel: [ val(meta), path(csv) ] + versions = ch_versions // channel: [ versions.yml ] } - - diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 13ab1f30..65d3bab5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -343,10 +343,8 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) // ped correspondence, sex check, ancestry check - ch_vcf_peddy = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) - PEDDY_CHECK ( - ch_vcf_peddy, + CALL_SNV.out.vcf.join(CALL_SNV.out.tabix), MAKE_PED.out.ped ) ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) @@ -534,6 +532,8 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.global_dist.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PEDDY_CHECK.out.ped.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PEDDY_CHECK.out.csv.map{it[1]}.collect().ifEmpty([])) MULTIQC ( From bdaa31c51cde34b4db079a4716f9a87d264b3845 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 30 Mar 2023 09:11:24 +0200 Subject: [PATCH 1104/1921] prettier on CITATIONS.md --- CITATIONS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index 25a96c12..914e7eef 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -76,7 +76,7 @@ > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016;32(19):3047-3048. doi:10.1093/bioinformatics/btw354 -- [Peddy](https://www.cell.com/action/showFullTextImages?pii=S0002-9297(17)30017-4) +- [Peddy]() > Pedersen, B. S. and Quinlan, A. R. (2017) ‘Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy’, The American Journal of Human Genetics, 100(3), pp. 406–413. doi: https://doi.org/10.1016/j.ajhg.2017.01.017. From 8c8b41e10a2d8dbc0bbddc04f41687d989f443f9 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Thu, 30 Mar 2023 09:13:37 +0200 Subject: [PATCH 1105/1921] Update conf/modules/peddy_check.config Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- conf/modules/peddy_check.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/peddy_check.config b/conf/modules/peddy_check.config index bbd7eef2..922737e1 100644 --- a/conf/modules/peddy_check.config +++ b/conf/modules/peddy_check.config @@ -12,7 +12,7 @@ */ // -// Gens options +// Peddy options // process { From 94a4ca0475d7545df23c704c4ec781c422b629ea Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Thu, 30 Mar 2023 10:34:06 +0200 Subject: [PATCH 1106/1921] Update CITATIONS.md Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- CITATIONS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index 914e7eef..8181353d 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -78,7 +78,7 @@ - [Peddy]() - > Pedersen, B. S. and Quinlan, A. R. (2017) ‘Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy’, The American Journal of Human Genetics, 100(3), pp. 406–413. doi: https://doi.org/10.1016/j.ajhg.2017.01.017. + > Pedersen BS, Quinlan AR. Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy. The American Journal of Human Genetics. 2017;100(3):406-413. doi:10.1016/j.ajhg.2017.01.017 - [Picard](https://broadinstitute.github.io/picard/) From 77e699e0437c33711788f8ee36d534c9def74766 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Thu, 30 Mar 2023 12:56:26 +0200 Subject: [PATCH 1107/1921] Updated version --- docs/images/raredisease_workflow.svg | 975 ++++++++++---------- docs/images/raredisease_workflow_v1.0.0.png | Bin 0 -> 289934 bytes 2 files changed, 479 insertions(+), 496 deletions(-) create mode 100644 docs/images/raredisease_workflow_v1.0.0.png diff --git a/docs/images/raredisease_workflow.svg b/docs/images/raredisease_workflow.svg index 38612ac2..c7aa89a1 100755 --- a/docs/images/raredisease_workflow.svg +++ b/docs/images/raredisease_workflow.svg @@ -28,7 +28,7 @@ inkscape:document-units="mm" showgrid="false" inkscape:zoom="0.87610518" - inkscape:cx="201.45983" + inkscape:cx="184.3386" inkscape:cy="337.28827" inkscape:window-width="1792" inkscape:window-height="989" @@ -437,545 +437,528 @@ id="text47805" style="font-size:18.6667px;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro';text-align:center;white-space:pre;shape-inside:url(#rect47807);fill:#b3deb2;stroke:#000000;stroke-width:1.88976;stroke-linejoin:round" /> + id="g3610"> + id="g42158"> + + + + + + bam + + + id="g32762" + transform="translate(0,-4.8563979)"> + id="g102520" + transform="translate(0,0.41424555)"> + style="opacity:1;fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" + id="rect100673" + width="108.49908" + height="16.095213" + x="-5.38061" + y="23.966454" + inkscape:path-effect="#path-effect101654" + sodipodi:type="rect" + inkscape:transform-center-x="-15.430978" + inkscape:transform-center-y="-13.397346" /> + Preprocessing and mapping +bwa-mem2, MarkDuplicates +Sentieon: bwamem, Locuscollector, Dedup - - - - bam - - - - - - Preprocessing and mapping + + + + Reports and metrics +FastQC, MultiQC, Mosdepth, QualiMap, Picard, tiddit/cov, ... + + + + Variant calling + SV + repeat expansions +Manta, tiddit/sv, Expansion Hunter, Stranger + Mitochondria bwa-mem2, MarkDuplicates + x="473.05078" + y="263.66196" + id="tspan3833">According to GATK Best Practices Sentieon: bwamem, Locuscollector, Dedup - - - - - Reports and metrics + x="473.05078" + y="293.66196" + id="tspan3841">Mutect2 + SNV + short indels FastQC, MultiQC, Mosdepth, QualiMap, Picard, tiddit/cov, ... - + x="48.398438" + y="263.66196" + id="tspan3849">DeepVariant +Sentieon: DNAscope, DNAModelApply + + + + + Variant annotation and ranking - + id="g1631" + transform="translate(0,-0.44417142)"> Variant calling - SV + repeat expansions + id="tspan3863">SV Manta, tiddit/sv, Expansion Hunter, svdb query, VEP, Stranger - Mitochondria -According to GATK Best Practices -Mutect2 + y="283.34555" + id="tspan3869">GENMOD SNV + short indels -DeepVariant -Sentieon: DNAscope, DNAModelApply - - - - - Variant annotation and ranking - - SV + id="tspan3871">Mitochondria svdb query, VEP, GENMOD - Mitochondria -HaploGrep2, vcfanno, VEP - HaploGrep2, vcfanno, VEP + SNV + short indels + id="tspan3879">SNV + short indels bcftools roh, vcfanno, VEP, GENMOD - - + x="55" + y="377.35532" + id="tspan3883">bcftools roh, vcfanno, VEP, GENMOD - - - Outputs + + + + + Outputs VCFs, inputs for scout - - - - - vcf - - - - - - vcf - - - - - - vcf - - - + x="73.898438" + y="482.35532" + id="tspan3895">VCFs, inputs for scout + + + + + vcf + style="fill:#ffffff" + id="path11012-4" + d="m 722.03649,1354.7469 h 47.5386 v -20.9983 c 0,-1.1338 0.91983,-2.0521 2.05208,-2.0521 h 18.12807 v -10.2809 h -67.71875 z m 67.71894,-95.336 h -67.71894 v 19.7705 h 67.71875 v -19.7705 z" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsscccccccccc" /> + + + id="g11016-1"> + d="m 541.81401,1267.1111 h -2.51304 v 12.1255 c 0,0.076 -0.0119,0.1518 -0.0221,0.2284 -0.004,0.4815 -0.15713,0.9544 -0.48679,1.3291 l -20.17826,23.0502 c -0.006,0.01 -0.0118,0.01 -0.0161,0.014 -0.12027,0.1343 -0.2605,0.246 -0.4087,0.3427 -0.0439,0.029 -0.0882,0.054 -0.13415,0.08 -0.12844,0.07 -0.26468,0.1282 -0.40491,0.1702 -0.038,0.011 -0.0722,0.026 -0.1102,0.036 -0.15238,0.036 -0.31066,0.059 -0.47103,0.059 h -49.59068 c -2.26452,0 -4.10417,-1.8417 -4.10417,-4.1044 v -33.3298 h -2.51247 c -3.23944,0 -5.86611,-2.6255 -5.86611,-5.8661 v -30.5048 c 0,-3.2383 2.62667,-5.8655 5.86611,-5.8655 h 2.51266 v -20.8815 c 0,-2.2624 1.83965,-4.1043 4.10417,-4.1043 h 67.71875 c 2.26242,0 4.10417,1.8417 4.10417,4.1043 v 20.8815 h 2.51304 c 3.23849,0 5.86573,2.6272 5.86573,5.8655 v 30.5039 c -1.9e-4,3.2404 -2.62743,5.8661 -5.86592,5.8661 z m -74.33596,33.33 h 47.5386 v -20.9983 c 0,-1.1338 0.91983,-2.0521 2.05208,-2.0521 h 18.12807 v -10.2809 h -67.71875 z m 67.71894,-95.336 h -67.71894 v 19.7705 h 67.71875 v -19.7705 z" + id="path11018-4" /> fastq + id="flowPara11026-6" + style="font-size:32px;line-height:1.25">vcf - - - + + + transform="matrix(1,0,0,-1,257.80291,3175.6791)">vcf + - + + + + 1.0.0dev + id="flowRoot5864-2" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0.01%;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + transform="matrix(1,0,0,-1,45.034643,3759.351)">fastq + + + + + + + 1.0.0 diff --git a/docs/images/raredisease_workflow_v1.0.0.png b/docs/images/raredisease_workflow_v1.0.0.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c108181e4dda43fc6f42e41e930d37a6c2d628 GIT binary patch literal 289934 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
    2Kr_0GNU-{O0z|Q=7gEJqn|cN9?E_Cw5%)! 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 Date: Thu, 30 Mar 2023 12:56:54 +0200 Subject: [PATCH 1108/1921] Delete raredisease_workflow_v1.0.0dev.png --- docs/images/raredisease_workflow_v1.0.0dev.png | Bin 291890 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/raredisease_workflow_v1.0.0dev.png diff --git a/docs/images/raredisease_workflow_v1.0.0dev.png b/docs/images/raredisease_workflow_v1.0.0dev.png deleted file mode 100644 index f8afc373af0fddcffdd8eedc8ab24f55b4449c2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291890 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

    dyYn^o(4z(^_+Q(88IdyjNuJM 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%0AngLV{^)fI1JAt<6)3V;Y_Xmc*59vX=KxOwn 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%0A7lql#V7Wo&4IS8+p;^ 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 VA7$?lU{e0yJYD@<);T3K0RSu_N1y-z From 8759b605ec772063b7b4b90d3646af1d12dab9b7 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Thu, 30 Mar 2023 12:57:24 +0200 Subject: [PATCH 1109/1921] Updated version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da131744..173c940d 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ On release, automated continuous integration tests run the pipeline on a full-si

    - +

    Note that it is possible to include/exclude certain tools or steps. From 5882d363e49674be404b7766c6a34c9800613ad7 Mon Sep 17 00:00:00 2001 From: Gwenna Breton Date: Fri, 31 Mar 2023 09:30:08 +0200 Subject: [PATCH 1110/1921] Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 173c940d..749bd632 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ The nf-core/raredisease pipeline comes with documentation about the pipeline [us nf-core/raredisease was mostly written by [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. -Big thanks to the [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid), [Lauri Mesilaakso](https://github.com/ljmesi), [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder), [Annick Renevey](https://github.com/rannick), [Peter Pruisscher](https://github.com/peterpru), [Lucas Taniguti](https://github.com/lmtani), [Ryan Kennedy](https://github.com/ryanjameskennedy), and the nf-core community for their extensive assistance in the development of this pipeline. +Big thanks to [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid), [Lauri Mesilaakso](https://github.com/ljmesi), [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder), [Annick Renevey](https://github.com/rannick), [Peter Pruisscher](https://github.com/peterpru), [Lucas Taniguti](https://github.com/lmtani), [Ryan Kennedy](https://github.com/ryanjameskennedy), and the nf-core community for their extensive assistance in the development of this pipeline. ## Contributions and Support From 2cff89829d2fcdaaa3ed2b91d240053bf4b7cb4f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:19:43 +0200 Subject: [PATCH 1111/1921] remove _index suffix from params bwa and bwamem2 --- conf/modules/prepare_references.config | 8 ++++---- docs/usage.md | 6 +++--- main.nf | 4 ++-- nextflow_schema.json | 4 ++-- workflows/raredisease.nf | 12 ++++++------ 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 5acc1062..8ea76ec6 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -26,7 +26,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { - ext.when = {!params.bwamem2_index && params.aligner == "bwamem2"} + ext.when = {!params.bwamem2 && params.aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_SHIFT_MT' { @@ -34,7 +34,7 @@ process { } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { - ext.when = {!params.bwa_index && params.aligner == "sentieon"} + ext.when = {!params.bwa && params.aligner == "sentieon"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_SHIFT_MT' { @@ -42,7 +42,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { - ext.when = {!params.bwa_index && !(params.aligner == "sentieon")} + ext.when = {!params.bwa && !(params.aligner == "sentieon")} } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { @@ -103,7 +103,7 @@ process { } withName: '.*PREPARE_REFERENCES:UNTAR_VEP_CACHE' { - ext.when = { params.vep_cache.endsWith("tar.gz") } + ext.when = { (params.vep_cache && params.vep_cache.endsWith("tar.gz")) } publishDir = [ enabled: false ] diff --git a/docs/usage.md b/docs/usage.md index 18a763ca..eb4cc508 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -142,12 +142,12 @@ The mandatory and optional parameters for each category are tabulated below. | Mandatory | Optional | | ------------------- | --------------------------- | | aligner1 | fasta_fai2 | -| fasta | bwamem2_index2 | +| fasta | bwamem22 | | platform | known_dbsnp3 | | | known_dbsnp_tbi3 | 1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
    -2fasta_fai and bwamem2_index, if not provided by the user, will be generated by the pipeline when necessary.
    +2fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
    3Used only by Sentieon.
    ##### 2. QC stats from the alignment files @@ -185,7 +185,7 @@ The mandatory and optional parameters for each category are tabulated below. | Mandatory | Optional | | --------- | ---------- | | | target_bed | -| | bwa_index | +| | bwa | ##### 6. SNV annotation & Ranking diff --git a/main.nf b/main.nf index 7e3a865a..64368429 100644 --- a/main.nf +++ b/main.nf @@ -20,8 +20,8 @@ nextflow.enable.dsl = 2 params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') -params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa_index') -params.bwamem2_index = WorkflowMain.getGenomeAttribute(params, 'bwamem2') +params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') +params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') diff --git a/nextflow_schema.json b/nextflow_schema.json index c9537bbd..9cebc236 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -87,7 +87,7 @@ "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`." }, - "bwa_index": { + "bwa": { "type": "string", "format": "directory-path", "description": "Directory for pre-built bwa index.", @@ -95,7 +95,7 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "bwamem2_index": { + "bwamem2": { "type": "string", "format": "directory-path", "description": "Directory for pre-built bwamem2 index.", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index af7003fc..eb917010 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -11,8 +11,8 @@ WorkflowRaredisease.initialise(params, log) // Check input path parameters to see if they exist def checkPathParamList = [ - params.bwa_index, - params.bwamem2_index, + params.bwa, + params.bwamem2, params.call_interval, params.fasta, params.fasta_fai, @@ -183,7 +183,7 @@ workflow RAREDISEASE { : Channel.value([]) ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(params.vcfanno_toml).collect() : Channel.value([]) - ch_vep_cache_unprocessed = params.vep_cache.endsWith("tar.gz") ? Channel.fromPath(params.vep_cache).map { it -> [[id:'vep_cache'], it] }.collect() + 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([]) @@ -211,11 +211,11 @@ workflow RAREDISEASE { // Gather built indices or get them from the params ch_bait_intervals = ch_references.bait_intervals - ch_bwa_index = params.bwa_index ? Channel.fromPath(params.bwa_index).map {it -> [[id:it[0].simpleName], it]}.collect() + 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_index ? Channel.fromPath(params.bwamem2_index).map {it -> [[id:it[0].simpleName], it]}.collect() + 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_references.bwamem2_index_mt_shift @@ -240,7 +240,7 @@ workflow RAREDISEASE { : 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.endsWith("tar.gz") ? ch_references.vep_resources + 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) From c3d4393f30bb0f336cfff9ba76b0b5c12cb0ae14 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 31 Mar 2023 15:42:31 +0200 Subject: [PATCH 1112/1921] update test_full.config --- conf/genomes.config | 82 ------------------------------------------- conf/test_full.config | 25 +++++++++++-- nextflow.config | 2 +- 3 files changed, 24 insertions(+), 85 deletions(-) delete mode 100644 conf/genomes.config diff --git a/conf/genomes.config b/conf/genomes.config deleted file mode 100644 index 1878bd8f..00000000 --- a/conf/genomes.config +++ /dev/null @@ -1,82 +0,0 @@ -/* -======================================================================================== - Nextflow config file for local reference genomes -======================================================================================== - Defines reference genomes without using iGenomes. - Can be used by any config that customises the base path using: - $params.local_genomes / --local_genomes ----------------------------------------------------------------------------------------- -*/ - -params { - genomes { - 'GRCh37' { - fasta = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta" - fai = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.fai" - bwa_index = "" - bwamem2_index = "${params.local_genomes}/grch37_homo_sapiens_-d5-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - call_interval = "" - gnomad_af = "" - gnomad_af_idx = "" - intervals_wgs = "${projectDir}/assets/1-22XYMT_grch37.interval_list" - intervals_y = "${projectDir}/assets/Y_grch37.interval_list" - known_dbsnp = "" - known_dbsnp_tbi = "" - ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - mt_backchain_shift = "${params.local_genomes}/ShiftBack.chain" - mt_bwamem2_index_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - mt_fasta_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" - mt_fai_shift = "${params.local_genomes}/grch37.chrM.shifted8000.fa" - mt_intervals = "" - mt_intervals_shift = "" - mt_sequence_dictionary_shift = "" - reduced_penetrance = "${params.local_genomes}/grch37_cust003-cmms-red-pen_-2017-.tsv" - score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" - score_config_sv = "${params.local_genomes}/svrank_model_-v1.8-.ini" - sequence_dictionary = "" - select_feature_file = "${params.local_genomes}/hgnc.txt" - svdb_query_dbs = "${params.local_genomes}/grch37_sv_svdb_query_db_files.csv" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg19.bed" - variant_catalog = "${params.local_genomes}/variant_catalog_grch37.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch37/grch37_vcfanno_resources.txt" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch37.toml" - vep_cache = "${params.local_genomes}/vep_cache" - vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = 107 - } - 'GRCh38' { - fasta = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta" - fai = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.fai" - bwa_index = "${params.local_genomes}/bwa/grch38_homo_sapiens_-assembly-.fasta.{amb,ann,bwt,pac,sa}" - bwamem2_index = "${params.local_genomes}/grch38_homo_sapiens_-assembly-.fasta.{0123,amb,ann,bwt.2bit.64,pac}" - call_interval = "" - gnomad_af = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz" - gnomad_af_idx = "${params.local_genomes}/grch38_gnomad_reformated_-r3.1.1-_split_rmdup.tab.gz.tbi" - intervals_wgs = "${projectDir}/assets/chr1-chr22chrXchrYchrM_grch38.interval_list" - intervals_y = "${projectDir}/assets/chrY_grch38.interval_list" - known_dbsnp = "${params.local_genomes}/grch38_dbsnp_-146-.vcf.gz" - known_dbsnp_tbi = "" - ml_model = "${params.local_genomes}/SentieonDNAscopeModel1.0.model" - mt_backchain_shift = "${params.local_genomes}/grch38_ShiftBack.chain" - mt_bwamem2_index_shift = "${params.local_genomes}/bwa/hg38.chrM.shifted8000.fa.{0123,amb,ann,bwt.2bit.64,pac}" - mt_fasta_shift = "${params.local_genomes}/hg38.chrM.shifted8000.fa" - mt_fai_shift = "" - mt_intervals = "${params.local_genomes}/non_control_region.chrM.interval_list" - mt_intervals_shift = "${params.local_genomes}/control_region_shifted.chrM.interval_list" - mt_sequence_dictionary_shift = "" - reduced_penetrance = "" - score_config_snv = "${params.local_genomes}/rank_model_-v1.34-.ini" - score_config_sv = "${params.local_genomes}/grch38_sv_rank_model_-v0.1-.ini" - sequence_dictionary = "" - select_feature_file = "${params.local_genomes}/hgnc.txt" - svdb_query_dbs = "${params.local_genomes}/grch38_sv_svdb_query_db_files.csv" - target_bed = "${params.local_genomes}/Twist_ComprehensiveExome_targets_hg38.bed" - variant_catalog = "${params.local_genomes}/variant_catalog_grch38.json" - vcfanno_resources = "${params.local_genomes}/vcfanno_resources_grch38/grch38_vcfanno_resources.txt" - vcfanno_toml = "${params.local_genomes}/vcfanno_toml-grch38.toml" - vep_cache = "${params.local_genomes}/vep_cache" - vep_filters = "${params.local_genomes}/gene_panels.bed" - vep_cache_version = 107 - } - } -} diff --git a/conf/test_full.config b/conf/test_full.config index 74c4aa73..df535862 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,8 +15,29 @@ params { config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + input = '/home/ramprasad.neethiraj/nextflow/samplesheet_hugelymodelbat.csv' + intervals_wgs = '/home/ramprasad.neethiraj/nextflow/test_full/genome.interval_list' + intervals_y = '/home/ramprasad.neethiraj/nextflow/test_full/genomeY.interval_list' + target_bed = '/home/ramprasad.neethiraj/nextflow/test_full/target.bed' + fasta = '/home/ramprasad.neethiraj/nextflow/test_full/genome.fa' + variant_catalog = 'https://raw.githubusercontent.com/Clinical-Genomics/reference-files/e436e059f544202f46c34a8cc15f8bece5f7c6b2/rare-disease/disease_loci/ExpansionHunter-v4.0.2/variant_catalog_hg38.json' + bwamem2 = '/home/ramprasad.neethiraj/nextflow/test_full/bwamem2' // Genome references - genome = 'R64-1-1' + genome = 'GRCh38' + + // Skip annotation + skip_mt_analysis = true + skip_snv_annotation = true + skip_sv_annotation = true +} + +process { + withName: 'MARKDUPLICATES' { + memory = { check_max( 90.GB * task.attempt, 'memory' ) } + } + withName: 'DEEPVARIANT' { + cpus = 24 + memory = { check_max( 90.GB * task.attempt, 'memory' ) } + } } diff --git a/nextflow.config b/nextflow.config index 597dd35a..c0cbfbac 100644 --- a/nextflow.config +++ b/nextflow.config @@ -175,7 +175,7 @@ profiles { if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } else { - includeConfig 'conf/genomes.config' + params.genomes = [:] } // Load nf-core/raredisease custom config From 05b31795411f8cac89f0409a91b4090d48c3ce26 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 31 Mar 2023 15:51:06 +0200 Subject: [PATCH 1113/1921] update tiddit module --- modules.json | 4 ++-- modules/nf-core/tiddit/sv/main.nf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index de40528d..fa00b5f6 100644 --- a/modules.json +++ b/modules.json @@ -62,7 +62,7 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "b6d4d476aee074311c89d82a69c1921bd70c8180", + "git_sha": "7101db4432d3268b7fcb5b8f75fa0a022dc5561b", "installed_by": ["modules"] }, "deepvariant": { @@ -312,7 +312,7 @@ }, "tiddit/sv": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0367c23758d83fc6973a8cd35ecba40a0cfcf2af", "installed_by": ["modules"] }, "ucsc/wigtobigwig": { diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 45f9588a..27b6450a 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -23,7 +23,7 @@ process TIDDIT_SV { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def bwa_command = bwa_index ? "[[ -d $bwa_index ]] && for i in $bwa_index/*; do [[ -f $fasta && ! \"\$i\" =~ .*\"$fasta\".* ]] && ln -s \$i ${fasta}.\${i##*.} || ln -s \$i .; done" : "" + def bwa_command = bwa_index ? "[[ -d $bwa_index ]] && for i in $bwa_index/*; do [[ -f $fasta && ! \"\$i\" =~ .*\"$fasta.\".* ]] && ln -s \$i ${fasta}.\${i##*.} || ln -s \$i .; done" : "" """ $bwa_command From b62b8b021a54b4d19171e7d1b811ae3f232eb78a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 31 Mar 2023 16:45:12 +0200 Subject: [PATCH 1114/1921] update test full --- conf/test_full.config | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index df535862..dcf02d95 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,13 +15,11 @@ params { config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test - input = '/home/ramprasad.neethiraj/nextflow/samplesheet_hugelymodelbat.csv' - intervals_wgs = '/home/ramprasad.neethiraj/nextflow/test_full/genome.interval_list' - intervals_y = '/home/ramprasad.neethiraj/nextflow/test_full/genomeY.interval_list' - target_bed = '/home/ramprasad.neethiraj/nextflow/test_full/target.bed' - fasta = '/home/ramprasad.neethiraj/nextflow/test_full/genome.fa' - variant_catalog = 'https://raw.githubusercontent.com/Clinical-Genomics/reference-files/e436e059f544202f46c34a8cc15f8bece5f7c6b2/rare-disease/disease_loci/ExpansionHunter-v4.0.2/variant_catalog_hg38.json' - bwamem2 = '/home/ramprasad.neethiraj/nextflow/test_full/bwamem2' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_full.csv' + intervals_wgs = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/test_full/genome.interval_list' + intervals_y = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/test_full/genomeY.interval_list' + target_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/test_full/target.bed' + variant_catalog = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/test_full/variant_catalog_hg38.json' // Genome references genome = 'GRCh38' From 28c760645de33db773c26e71f407b7a7a6cdc31f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 31 Mar 2023 17:11:51 +0200 Subject: [PATCH 1115/1921] update readme --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 749bd632..a55e0d37 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ ## Introduction -**nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for call and score variants from WGS/WES of rare disease patients. +**nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for calling and scoring variants from WGS/WES data of rare disease patients. This pipeline is heavily inspired by [MIP](https://github.com/Clinical-Genomics/MIP). The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! @@ -125,9 +125,11 @@ The nf-core/raredisease pipeline comes with documentation about the pipeline [us ## Credits -nf-core/raredisease was mostly written by [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. +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. -Big thanks to [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid), [Lauri Mesilaakso](https://github.com/ljmesi), [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder), [Annick Renevey](https://github.com/rannick), [Peter Pruisscher](https://github.com/peterpru), [Lucas Taniguti](https://github.com/lmtani), [Ryan Kennedy](https://github.com/ryanjameskennedy), and the nf-core community for their extensive assistance in the development of this pipeline. +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). + +We thank the nf-core community for their extensive assistance in the development of this pipeline. ## Contributions and Support @@ -149,3 +151,7 @@ You can cite the `nf-core` publication as follows: > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > > _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). + +You can read more about MIP's use in healthcare in, + +> Stranneheim H, Lagerstedt-Robinson K, Magnusson M, et al. Integration of whole genome sequencing into a healthcare setting: high diagnostic rates across multiple clinical entities in 3219 rare disease patients. Genome Med. 2021;13(1):40. doi:10.1186/s13073-021-00855-5 From 296e5077b34ff81a153fcc2e5acd0c8137c35530 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 31 Mar 2023 17:18:22 +0200 Subject: [PATCH 1116/1921] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ba65790..878482a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,6 @@ 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). -## nf-core/raredisease version 1.0.0 - [2023-03-25] +## nf-core/raredisease version 1.0.0 - [2023-03-31] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. 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 1117/1921] 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 1944318abff6e2cd5ac2cf116552db384f7fe7cd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 2 Apr 2023 04:45:41 +0200 Subject: [PATCH 1118/1921] update configs --- conf/modules/convert_mt_bam_to_fastq.config | 2 +- conf/modules/peddy_check.config | 1 + conf/modules/raredisease.config | 2 +- conf/test.config | 14 ++++---------- conf/test_one_sample.config | 5 ++++- docs/usage.md | 2 +- nextflow.config | 3 ++- nextflow_schema.json | 2 +- 8 files changed, 15 insertions(+), 16 deletions(-) diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config index 47e1f5bf..5cba99b5 100644 --- a/conf/modules/convert_mt_bam_to_fastq.config +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -23,7 +23,7 @@ process { withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { beforeScript = {"mkdir ./tmp"} ext.args = [ - "-L ${params.mt_contig_name}", + "-L ${params.mito_name}", "--read-filter MateOnSameContigOrNoMappedMateReadFilter", "--read-filter MateUnmappedAndUnmappedReadFilter" ].join(" ").trim() diff --git a/conf/modules/peddy_check.config b/conf/modules/peddy_check.config index 922737e1..b3d4e6da 100644 --- a/conf/modules/peddy_check.config +++ b/conf/modules/peddy_check.config @@ -17,6 +17,7 @@ process { withName: '.*:PEDDY_CHECK:PEDDY' { + ext.when = { !(workflow.profile.contains("test")) || workflow.stubRun } publishDir = [ path: { "${params.outdir}/peddy_check" }, mode: params.publish_dir_mode, diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index a73ea3f4..cf5dea7b 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -54,7 +54,7 @@ process { process { withName: '.*RAREDISEASE:GATK4_SELECTVARIANTS' { - ext.args = "--exclude-intervals ${params.mt_contig_name}" + ext.args = "--exclude-intervals ${params.mito_name}" ext.prefix = { "${meta.id}_nomito" } ext.when = { !params.skip_snv_annotation } publishDir = [ diff --git a/conf/test.config b/conf/test.config index 5fb4c9e8..805f84d6 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 + mito_name = 'MT' // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' @@ -48,12 +51,3 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } - -process { - // Peddy needs a bigger test set in order to run - withName: '.*:PEDDY_CHECK:PEDDY' { - ext.when = { workflow.stubRun } - } -} - - diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 9db27703..e4f73a33 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.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 + mito_name = 'MT' // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_single.csv' diff --git a/docs/usage.md b/docs/usage.md index eb4cc508..65e13464 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -222,7 +222,7 @@ The mandatory and optional parameters for each category are tabulated below. | ------------------------------ | -------- | | genome | | | mt_backchain_shift1 | | -| mt_contig_name | | +| mito_name | | | mt_fasta_shift | | | mt_intervals | | | mt_intervals_shift | | diff --git a/nextflow.config b/nextflow.config index c0cbfbac..db9dfa5c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -18,7 +18,7 @@ params { igenomes_ignore = false local_genomes = null save_reference = false - mt_contig_name = 'chrM' + mito_name = 'chrM' // Main options analysis_type = 'wgs' @@ -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/peddy_check.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..ab50b9a5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -135,7 +135,7 @@ "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." }, - "mt_contig_name": { + "mito_name": { "type": "string", "format": "path", "description": "Name of the mitochondrial contig in the reference fasta file", 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 1119/1921] 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 b10dfb9d30c38c502009f583bd1948e136c4d117 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Apr 2023 09:39:25 +0200 Subject: [PATCH 1120/1921] review suggestions --- conf/modules/peddy_check.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules/peddy_check.config b/conf/modules/peddy_check.config index b3d4e6da..fcd75a21 100644 --- a/conf/modules/peddy_check.config +++ b/conf/modules/peddy_check.config @@ -17,7 +17,8 @@ process { withName: '.*:PEDDY_CHECK:PEDDY' { - ext.when = { !(workflow.profile.contains("test")) || workflow.stubRun } + // Peddy needs a bigger test set in order to run so we skip it for the two test profiles + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } publishDir = [ path: { "${params.outdir}/peddy_check" }, mode: params.publish_dir_mode, 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 1121/1921] 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 1122/1921] 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 1123/1921] 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 1124/1921] 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 1125/1921] 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 1126/1921] 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 1127/1921] 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 1128/1921] 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 1129/1921] 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 1130/1921] 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 1131/1921] 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 a12dc25b0db5e557111b17d5a8cc08b151121cca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 8 Apr 2023 08:39:10 +0200 Subject: [PATCH 1132/1921] fix --- subworkflows/local/variant_calling/call_sv_manta.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 1fe5caf3..2fbf4bec 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -34,7 +34,7 @@ workflow CALL_SV_MANTA { .set { manta_input } MANTA ( manta_input, ch_fasta, ch_fai ) } else { - case_info.combine(bam_file_list) + ch_case_info.combine(bam_file_list) .combine(bai_file_list) .combine(bed_input) .set { manta_input } From 58d65ba1d657d57f52744ccbfe89c918110d0819 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Wed, 12 Apr 2023 16:53:17 +0200 Subject: [PATCH 1133/1921] 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 1134/1921] 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 1135/1921] 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 1136/1921] 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 1137/1921] 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 1138/1921] 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 1139/1921] 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 1140/1921] 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 1141/1921] 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 1142/1921] 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 1143/1921] 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 1144/1921] 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 1145/1921] 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 1146/1921] 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 1147/1921] 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 1148/1921] 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 1149/1921] 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 1150/1921] 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 1151/1921] 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 1152/1921] 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 8286b0a679c76fa324600a3eef1da13424529568 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Apr 2023 16:53:46 +0200 Subject: [PATCH 1153/1921] move make_ped to raredisease.nf --- modules/local/create_pedfile.nf | 35 -------------------------------- workflows/raredisease.nf | 36 +++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 41 deletions(-) delete mode 100644 modules/local/create_pedfile.nf diff --git a/modules/local/create_pedfile.nf b/modules/local/create_pedfile.nf deleted file mode 100644 index d5940829..00000000 --- a/modules/local/create_pedfile.nf +++ /dev/null @@ -1,35 +0,0 @@ -process MAKE_PED { - tag "make_ped" - label 'process_single' - - conda "conda-forge::python=3.9.5" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.9--1' : - 'quay.io/biocontainers/python:3.9--1' }" - - input: - val(samples) - - output: - path '*.ped' , emit: ped - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - exec: - def pedfile = task.workDir.resolve('family.ped') - pedfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') - def samples_list = [] - for(int i = 0; i Date: Tue, 25 Apr 2023 16:55:45 +0200 Subject: [PATCH 1154/1921] remove blank line --- workflows/raredisease.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index bbab03f5..bf8d9cc4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -567,7 +567,6 @@ workflow.onComplete { def make_ped(samples) { def case_name = samples[0].case_id - def outfile = workDir.resolve("$case_name" + '.ped') outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') def samples_list = [] From b2e5b05b76b937ed29fa273a1092eef1d26083c7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Apr 2023 21:19:43 +0200 Subject: [PATCH 1155/1921] remove meta.clone --- subworkflows/local/alignment/align_bwamem2.nf | 5 ++--- subworkflows/local/alignment/align_sentieon.nf | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 72283556..e887b6ed 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -33,9 +33,8 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index BWAMEM2_MEM.out.bam .map{ meta, bam -> - new_meta = meta.clone() - new_meta.id = new_meta.id.split('_')[0] - new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + val_platform + "\\tSM:" + new_meta.id + "\'" + new_id = meta.id.split('_')[0] + new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] [new_meta, bam] } .groupTuple(by: 0) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index c0903c9d..1f29a001 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -31,9 +31,8 @@ workflow ALIGN_SENTIEON { .bam .join(SENTIEON_BWAMEM.out.bai) .map{ meta, bam, bai -> - new_meta = meta.clone() - new_meta.id = new_meta.id.split('_')[0] - new_meta.read_group = "\'@RG\\tID:" + new_meta.id + "\\tPL:" + val_platform + "\\tSM:" + new_meta.id + "\'" + new_id = meta.id.split('_')[0] + new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] [new_meta, bam, bai] } .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] From 7a84e66a4e2d38eda4bb4a68abc97e52ed3a301f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Apr 2023 23:46:26 +0200 Subject: [PATCH 1156/1921] add groupkey --- subworkflows/local/alignment/align_bwamem2.nf | 4 +-- .../local/alignment/align_sentieon.nf | 4 +-- subworkflows/local/check_input.nf | 35 ++++++++++++------- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index e887b6ed..11b782bb 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -35,9 +35,9 @@ workflow ALIGN_BWAMEM2 { .map{ meta, bam -> new_id = meta.id.split('_')[0] new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - [new_meta, bam] + [groupKey(new_meta, new_meta.num_lanes), bam] } - .groupTuple(by: 0) + .groupTuple() .branch{ single: it[1].size() == 1 multiple: it[1].size() > 1 diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 1f29a001..4f8908ba 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -33,9 +33,9 @@ workflow ALIGN_SENTIEON { .map{ meta, bam, bai -> new_id = meta.id.split('_')[0] new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - [new_meta, bam, bai] + [groupKey(new_meta, new_meta.num_lanes), bam, bai] } - .groupTuple(by: 0) // group them bam paths with the same [ [samplename], [bam path, bam path, ..] ] + .groupTuple() .branch{ single: it[1].size() == 1 multiple: it[1].size() > 1 diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 80709c16..4199196a 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -14,10 +14,18 @@ workflow CHECK_INPUT { .splitCsv ( header:true, sep:',' ) .set { sheet } - case_info = sheet.first() - .map { create_case_channel(it) } - reads = sheet.map { create_fastq_channel(it) } - samples = sheet.map { create_samples_channel(it) } + case_info = sheet.first() + .map { create_case_channel(it) } + reads = sheet.map { row -> [[row.sample.split('_')[0]], row] } + .groupTuple() + .map { meta, rows -> + [rows, rows.size()] + } + .transpose() + .map { row, numLanes -> + create_fastq_channel(row + [num_lanes:numLanes]) + } + samples = sheet.map { create_samples_channel(it) } emit: case_info // channel: [ val(case_info) ] @@ -29,15 +37,16 @@ workflow CHECK_INPUT { // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] def create_fastq_channel(LinkedHashMap row) { // create meta map - def meta = [:] - meta.case_id = row.case_id - meta.gender = row.gender - meta.id = row.sample - meta.maternal = row.maternal_id - meta.paternal = row.paternal_id - meta.phenotype = row.phenotype - meta.single_end = row.single_end.toBoolean() - meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" + def meta = [:] + meta.case_id = row.case_id + meta.gender = row.gender + meta.id = row.sample + meta.maternal = row.maternal_id + meta.paternal = row.paternal_id + meta.phenotype = row.phenotype + meta.single_end = row.single_end.toBoolean() + meta.num_lanes = row.num_lanes + meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" // add path(s) of the fastq file(s) to the meta map From 8572aa2639d22ba4bf046dcd7c728a3c8a05e4ea Mon Sep 17 00:00:00 2001 From: peterpru Date: Wed, 26 Apr 2023 09:21:48 +0200 Subject: [PATCH 1157/1921] Fix review comments asp8200 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a55e0d37..e1fbf900 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,11 @@ ## Introduction -**nf-core/raredisease** is a bioinformatics best-practice analysis pipeline for calling and scoring variants from WGS/WES data of rare disease patients. This pipeline is heavily inspired by [MIP](https://github.com/Clinical-Genomics/MIP). +**nf-core/raredisease** is a best-practice bioinformatic pipeline for calling and scoring variants from WGS/WES data from rare disease patients. This pipeline is heavily inspired by [MIP](https://github.com/Clinical-Genomics/MIP). The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources.The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/raredisease/results). +On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/raredisease/results). ## Pipeline summary From acef1f9f95cb16b9a7895795ca44955cff0cd461 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Apr 2023 10:12:49 +0200 Subject: [PATCH 1158/1921] update join statements --- subworkflows/local/align.nf | 2 +- subworkflows/local/alignment/align_bwamem2.nf | 2 +- subworkflows/local/alignment/align_sentieon.nf | 8 ++++---- subworkflows/local/annotate_snvs.nf | 8 ++++++-- subworkflows/local/call_repeat_expansions.nf | 8 +++++--- .../local/mitochondria/align_and_call_MT.nf | 8 ++++---- .../local/mitochondria/merge_annotate_MT.nf | 14 ++++++++++---- .../local/variant_calling/call_snv_sentieon.nf | 2 +- workflows/raredisease.nf | 8 ++++---- 9 files changed, 36 insertions(+), 24 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 354f1a4b..4d53765f 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -39,7 +39,7 @@ 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, by: [0]) + ch_bam_bai = ch_marked_bam.join(ch_marked_bai, failOnMismatch:true, failOnDuplicate:true) ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) emit: diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 11b782bb..3857c8e0 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -27,7 +27,7 @@ workflow ALIGN_BWAMEM2 { SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) // Get stats for each demultiplexed read pair. - bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai) + bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai, failOnMismatch:true, failOnDuplicate:true) SAMTOOLS_STATS ( bam_sorted_indexed, [] ) // Merge multiple lane samples and index diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 4f8908ba..a161cb1d 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -29,7 +29,7 @@ workflow ALIGN_SENTIEON { SENTIEON_BWAMEM.out .bam - .join(SENTIEON_BWAMEM.out.bai) + .join(SENTIEON_BWAMEM.out.bai, failOnMismatch:true, failOnDuplicate:true) .map{ meta, bam, bai -> new_id = meta.id.split('_')[0] new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] @@ -50,15 +50,15 @@ workflow ALIGN_SENTIEON { SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) ch_bam_bai - .join(SENTIEON_LOCUSCOLLECTOR.out.score) - .join(SENTIEON_LOCUSCOLLECTOR.out.score_idx) + .join(SENTIEON_LOCUSCOLLECTOR.out.score, failOnMismatch:true, failOnDuplicate:true) + .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 ) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam - .join(SENTIEON_DEDUP.out.bai) + .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 ) ch_bqsr_bam = SENTIEON_BQSR.out.bam diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index cfbb4b04..dd927d81 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -66,7 +66,10 @@ 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, failOnMismatch:true, failOnDuplicate:true) + .collect() + .set { ch_vcf_scatter_in } GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(ch_split_intervals)).vcf.set { ch_vep_in } @@ -88,7 +91,7 @@ workflow ANNOTATE_SNVS { if (params.analysis_type == 'wgs') { ENSEMBLVEP_SNV.out.vcf_gz - .join(TABIX_VEP.out.tbi) + .join(TABIX_VEP.out.tbi, failOnMismatch:true, failOnDuplicate:true) .groupTuple() .map { meta, vcfs, tbis -> def sortedvcfs = vcfs.sort { it.baseName } @@ -104,6 +107,7 @@ workflow ANNOTATE_SNVS { 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/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 4741272f..66dea07d 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -40,7 +40,7 @@ workflow CALL_REPEAT_EXPANSIONS { // Split multi allelelic SPLIT_MULTIALLELICS_EXP ( - RENAMESAMPLE_EXP.out.vcf.join(TABIX_EXP_RENAME.out.tbi), + RENAMESAMPLE_EXP.out.vcf.join(TABIX_EXP_RENAME.out.tbi, failOnMismatch:true, failOnDuplicate:true), ch_fasta ) @@ -62,6 +62,8 @@ workflow CALL_REPEAT_EXPANSIONS { ) INDEX_STRANGER ( COMPRESS_STRANGER.out.vcf ) + ch_vcf_idx = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi, failOnMismatch:true, failOnDuplicate:true) + ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_EXP.out.versions.first()) ch_versions = ch_versions.mix(RENAMESAMPLE_EXP.out.versions.first() ) @@ -73,6 +75,6 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) emit: - vcf = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi) // channel: [ val(meta), path(vcf), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = ch_vcf_idx // channel: [ val(meta), path(vcf), path(tbi) ] + 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 95dcca1c..7feb58bb 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -33,7 +33,7 @@ workflow ALIGN_AND_CALL_MT { SENTIEON_BWAMEM_MT ( ch_fastq, ch_fasta, ch_fai, ch_index_bwa ) 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, by: [0]) + ch_fastq_ubam = ch_mt_bam.join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, ch_fasta, ch_dict) @@ -44,7 +44,7 @@ workflow ALIGN_AND_CALL_MT { SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, by: [0]) + 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) GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) @@ -52,8 +52,8 @@ workflow ALIGN_AND_CALL_MT { HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) // Filter Mutect2 calls - ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, by: [0]) - ch_mutect_out = ch_mutect_vcf.join(GATK4_MUTECT2_MT.out.stats, by: [0]) + ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + ch_mutect_out = ch_mutect_vcf.join(GATK4_MUTECT2_MT.out.stats, failOnMismatch:true, failOnDuplicate:true) ch_to_filt = ch_mutect_out.map { meta, vcf, tbi, stats -> return [meta, vcf, tbi, stats, [], [], [], []] diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 33886f4e..6e3db396 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -41,16 +41,22 @@ workflow MERGE_ANNOTATE_MT { GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, ch_genome_dict_meta) // Filtering Variants - GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf.join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, by:[0]).set { ch_filt_vcf } + 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) // Spliting multiallelic calls - GATK4_VARIANTFILTRATION_MT.out.vcf.join(GATK4_VARIANTFILTRATION_MT.out.tbi, by:[0]).set { ch_in_split } + GATK4_VARIANTFILTRATION_MT.out.vcf + .join(GATK4_VARIANTFILTRATION_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .set { ch_in_split } SPLIT_MULTIALLELICS_MT (ch_in_split, ch_genome_fasta) TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) // Removing duplicates and merging if there is more than one sample - SPLIT_MULTIALLELICS_MT.out.vcf.join(TABIX_TABIX_MT.out.tbi).set { ch_in_remdup } + SPLIT_MULTIALLELICS_MT.out.vcf + .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .set { ch_in_remdup } REMOVE_DUPLICATES_MT(ch_in_remdup, ch_genome_fasta) TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) @@ -98,7 +104,7 @@ 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, by: [0]) + ch_in_vcfanno = ENSEMBLVEP_MT.out.vcf_gz.join(TABIX_TABIX_MT3.out.tbi, failOnMismatch:true, failOnDuplicate:true) VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) ZIP_TABIX_VCFANNO(VCFANNO_MT.out.vcf) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 0b163740..03b6c684 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -36,7 +36,7 @@ workflow CALL_SNV_SENTIEON { TABIX_BCFTOOLS ( BCF_FILTER_TWO.out.vcf ) - BCF_FILTER_TWO.out.vcf.join(TABIX_BCFTOOLS.out.tbi) + BCF_FILTER_TWO.out.vcf.join(TABIX_BCFTOOLS.out.tbi, failOnMismatch:true, failOnDuplicate:true) .map { meta,vcf,tbi -> return [vcf,tbi] } .set { ch_vcf_idx } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eb917010..64957c95 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -343,7 +343,7 @@ workflow RAREDISEASE { // ped correspondence, sex check, ancestry check PEDDY_CHECK ( - CALL_SNV.out.vcf.join(CALL_SNV.out.tabix), + CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, failOnMismatch:true, failOnDuplicate:true), MAKE_PED.out.ped ) ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) @@ -432,7 +432,7 @@ workflow RAREDISEASE { if (!params.skip_snv_annotation) { - ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, by: [0]) + ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, failOnMismatch:true, failOnDuplicate:true) if (!params.skip_mt_analysis) { ch_vcf @@ -441,7 +441,7 @@ workflow RAREDISEASE { GATK4_SELECTVARIANTS(ch_selvar_in) // remove mitochondrial variants - ch_vcf = GATK4_SELECTVARIANTS.out.vcf.join(GATK4_SELECTVARIANTS.out.tbi, by: [0]) + ch_vcf = GATK4_SELECTVARIANTS.out.vcf.join(GATK4_SELECTVARIANTS.out.tbi, failOnMismatch:true, failOnDuplicate:true) ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) } @@ -475,7 +475,7 @@ workflow RAREDISEASE { .groupTuple() .set { ch_merged_tbi } - ch_merged_vcf.join(ch_merged_tbi).set {ch_concat_in} + ch_merged_vcf.join(ch_merged_tbi, failOnMismatch:true, failOnDuplicate:true).set {ch_concat_in} BCFTOOLS_CONCAT (ch_concat_in) ch_snv_annotate = BCFTOOLS_CONCAT.out.vcf From f906129844cb70f9931bdf65b6d1fff1589a8678 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Apr 2023 13:53:34 +0200 Subject: [PATCH 1159/1921] fix error --- 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 dd927d81..54d09e95 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -91,7 +91,7 @@ workflow ANNOTATE_SNVS { if (params.analysis_type == 'wgs') { ENSEMBLVEP_SNV.out.vcf_gz - .join(TABIX_VEP.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .join(TABIX_VEP.out.tbi, failOnMismatch:true) .groupTuple() .map { meta, vcfs, tbis -> def sortedvcfs = vcfs.sort { it.baseName } From 35aeeea2246f7d42f035a1b019331dc65e91f6aa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Apr 2023 17:29:15 +0200 Subject: [PATCH 1160/1921] update docs and lint config --- .github/CONTRIBUTING.md | 12 ------------ .github/PULL_REQUEST_TEMPLATE.md | 7 ++++--- .nf-core.yml | 4 ---- 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4b1a4fa3..47df952f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -94,18 +94,6 @@ Please use the following naming schemes, to make it easy to understand what is g - initial process channel: `ch_output_from_` - intermediate and terminal channels: `ch__for_` -* subworkflows: `verb_noun` or `verb_variant_noun` - - `verb_noun` : `align_bwamem2.nf` - - `verb_variant_noun` : `call_snv_deepvariant.nf` - -### Reusing modules in the workflow - -Occasionally, you might find yourself wanting to reuse a module with options that are different from what has already been defined in [conf/modules.config](../conf/modules.config). In that case, we recommend importing the module using an unique alias within the subworkflow, and then defining the options for the alias in [conf/modules.config](../conf/modules.config). - -For a working example, please have a look at how we have reused `bcftools norm` in both [subworkflows/local/call_snv_deepvariant.nf](../subworkflows/local/call_snv_deepvariant.nf) and [subworkflows/local/prepare_vcf.nf](../subworkflows/local/prepare_vcf.nf), and defined its subworkflow-specific options in [conf/modules.config](../conf/modules.config). - -You can find more information about aliases in the nextflow documentation [here](https://www.nextflow.io/docs/edge/dsl2.html#module-aliases). - ### Nextflow version bumping If you are using a new feature from core Nextflow, you may bump the minimum required version of nextflow in the pipeline with: `nf-core bump-version --nextflow . [min-nf-version]` diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d848b01e..386c57f4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -15,10 +15,11 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rare - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md)- [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/raredisease/tree/master/.github/CONTRIBUTING.md) +- [ ] If necessary, also make a PR on the nf-core/raredisease _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint`). -- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir -stub`). -- [ ] Ensure the test suite passes (`nextflow run . -profile test_one_sample,docker --outdir -stub`). +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). +- [ ] Ensure the test suite passes (`nextflow run . -profile test_one_sample,docker --outdir `). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. diff --git a/.nf-core.yml b/.nf-core.yml index a22ef6f7..321436fe 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,11 +2,7 @@ lint: files_exist: - conf/modules.config files_unchanged: - - .github/CONTRIBUTING.md - - .github/ISSUE_TEMPLATE/bug_report.yml - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml - .github/workflows/linting.yml - - .github/workflows/linting_comment.yml - - .github/workflows/branch.yml repository_type: pipeline From 516e916def981b4b13fb8ae928f9e2a077940b26 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Apr 2023 17:52:09 +0200 Subject: [PATCH 1161/1921] update schema inputs --- assets/schema_input.json | 43 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 4ba2de4c..3258d7eb 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -29,8 +29,49 @@ "maxLength": 0 } ] + }, + "gender": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Gender must be provided and cannot contain spaces" + }, + "phenotype": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Phenotype must be provided and cannot contain spaces" + }, + "paternal_id": { + "errorMessage": "Paternal ID cannot contain spaces", + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+$" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "maternal_id": { + "errorMessage": "Maternal ID cannot contain spaces", + "anyOf": [ + { + "type": "string", + "pattern": "^\\S+$" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "case_id": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Case name must be provided and cannot contain spaces" } }, - "required": ["sample", "fastq_1"] + "required": ["sample", "fastq_1", "gender", "phenotype", "case_id"] } } From 9b3059f1c74490ef25f3ed14eafdeca888519d6a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Apr 2023 17:52:22 +0200 Subject: [PATCH 1162/1921] remove awstest2 --- .github/workflows/awstest2.yml | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 .github/workflows/awstest2.yml diff --git a/.github/workflows/awstest2.yml b/.github/workflows/awstest2.yml deleted file mode 100644 index 469bf2ba..00000000 --- a/.github/workflows/awstest2.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: nf-core AWS test single sample -# This workflow can be triggered manually with the GitHub actions workflow dispatch button. -# It runs the -profile 'test2samples' on AWS batch - -on: - workflow_dispatch: -jobs: - run-tower: - name: Run AWS tests single sample - if: github.repository == 'nf-core/raredisease' - runs-on: ubuntu-latest - steps: - # Launch workflow using Tower CLI tool action - - name: Launch workflow via tower - uses: nf-core/tower-action@v3 - with: - workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} - access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} - compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} - workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} - parameters: | - { - "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test2samples-${{ github.sha }}" - } - profiles: test_one_sample,aws_tower - - uses: actions/upload-artifact@v3 - with: - name: Tower debug log file - path: tower_action_*.log From 65198d4d0cd470ab4df298f891445bef592e56fa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Apr 2023 17:55:36 +0200 Subject: [PATCH 1163/1921] remove change_name.nf --- modules/local/change_name.nf | 49 ------------------------------------ 1 file changed, 49 deletions(-) delete mode 100644 modules/local/change_name.nf diff --git a/modules/local/change_name.nf b/modules/local/change_name.nf deleted file mode 100644 index 38ee7c95..00000000 --- a/modules/local/change_name.nf +++ /dev/null @@ -1,49 +0,0 @@ -process CHANGE_NAME { - tag "$meta.id" - label 'process_low' - label 'process_single' - - conda "conda-forge::python=3.9.5" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.9--1' : - 'quay.io/biocontainers/python:3.9--1' }" - - input: - tuple val(meta), path(input_file) - - output: - tuple val(meta), path( "*.${file_type}"), emit: file - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - file_type = task.ext.file_type ?: input_file.getExtension() - def prefix = task.ext.prefix ?: "${meta.id}" - - """ - mv \\ - $input_file \\ - ${prefix}.${file_type} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - change_name: v1.0 - END_VERSIONS - """ - - stub: - def args = task.ext.args ?: '' - file_type = task.ext.file_type ?: input_file.getExtension() - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.${file_type} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - change_name: v1.0 - END_VERSIONS - """ -} From 7ba68d7d3889f7c11bce636ad541bc4938c09ab7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 27 Apr 2023 14:41:23 +0200 Subject: [PATCH 1164/1921] comments --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index bf8d9cc4..6b32e808 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -188,7 +188,7 @@ workflow RAREDISEASE { : Channel.value([]) // Generate pedigree file - pedfile = CHECK_INPUT.out.samples.toList().map { make_ped(it) } + pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } // Input QC FASTQC (CHECK_INPUT.out.reads) @@ -564,7 +564,7 @@ workflow.onComplete { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -def make_ped(samples) { +def makePed(samples) { def case_name = samples[0].case_id def outfile = workDir.resolve("$case_name" + '.ped') From 67ec2a7b8e91e82ee40815b613777f9d887ed4ab Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 11:02:12 +0200 Subject: [PATCH 1165/1921] fix docs --- README.md | 109 ++++++++++---- docs/usage.md | 389 ++++++++++++++++++++++++++++++++++-------------- modules.json | 310 ++++++++++++++++++++++++++++++++++++++ nextflow.config | 7 + 4 files changed, 675 insertions(+), 140 deletions(-) diff --git a/README.md b/README.md index 1d4dabc1..670cf2ae 100644 --- a/README.md +++ b/README.md @@ -10,22 +10,85 @@ [![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23raredisease-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/raredisease)[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core)[![Follow on Mastodon](https://img.shields.io/badge/mastodon-nf__core-6364ff?labelColor=FFFFFF&logo=mastodon)](https://mstdn.science/@nf_core)[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +#### TOC + +- [Introduction](#introduction) +- [Pipeline summary](#pipeline-summary) +- [Usage](#usage) +- [Pipeline output](#pipeline-output) +- [Credits](#credits) +- [Contributions and Support](#contributions-and-support) +- [Citations](#citations) + ## Introduction -**nf-core/raredisease** is a bioinformatics pipeline that ... +**nf-core/raredisease** is a best-practice bioinformatic pipeline for calling and scoring variants from WGS/WES data from rare disease patients. This pipeline is heavily inspired by [MIP](https://github.com/Clinical-Genomics/MIP). + +The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! + +On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/raredisease/results). + +## Pipeline summary + +**1. Metrics:** + +- [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) +- [Mosdepth](https://github.com/brentp/mosdepth) +- [MultiQC](http://multiqc.info/) +- [Picard's CollectMutipleMetrics, CollectHsMetrics, and CollectWgsMetrics](https://broadinstitute.github.io/picard/) +- [Qualimap](http://qualimap.conesalab.org/) +- [Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) +- [TIDDIT's cov](https://github.com/J35P312/) + +**2. Alignment:** + +- [Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) +- [Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) + +**3. Variant calling - SNV:** + +- [DeepVariant](https://github.com/google/deepvariant) +- [Sentieon DNAscope](https://support.sentieon.com/manual/DNAscope_usage/dnascope/) + +**4. Variant calling - SV:** + +- [Manta](https://github.com/Illumina/manta) +- [TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) + +**5. Annotation - SNV:** - +- [bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) +- [vcfanno](https://github.com/brentp/vcfanno) +- [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) - - +**6. Annotation - SV:** -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) +- [SVDB query](https://github.com/J35P312/SVDB#Query) +- [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + +**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-) +- Annotation: + - [HaploGrep2](https://github.com/seppinho/haplogrep-cmd) + - [vcfanno](https://github.com/brentp/vcfanno) + - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) + +**8. Variant calling - repeat expansions:** + +- [Expansion Hunter](https://github.com/Illumina/ExpansionHunter) +- [Stranger](https://github.com/Clinical-Genomics/stranger) + +**9. Rank variants - SV and SNV:** + +- [GENMOD](https://github.com/Clinical-Genomics/genmod) + + +

    + +

    + +Note that it is possible to include/exclude certain tools or steps. ## Usage @@ -34,26 +97,21 @@ > to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) > with `-profile test` before running the workflow on actual data. - +Second, ensure that you have defined the path to reference files and parameters required for the type of analysis that you want to perform. More information about this can be found [here](https://github.com/nf-core/raredisease/blob/dev/docs/usage.md). Now, you can run the pipeline using: - - ```bash nextflow run nf-core/raredisease \ -profile \ @@ -70,17 +128,16 @@ For more details, please refer to the [usage documentation](https://nf-co.re/rar ## 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. For more details about the output files and reports, please refer to the [output documentation](https://nf-co.re/raredisease/output). ## Credits -nf-core/raredisease was originally written by Clinical Genomics Stockholm. +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. -We thank the following people for their extensive assistance in the development of this pipeline: +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). - +We thank the nf-core community for their extensive assistance in the development of this pipeline. ## Contributions and Support @@ -93,8 +150,6 @@ For further information or help, don't hesitate to get in touch on the [Slack `# - - An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. You can cite the `nf-core` publication as follows: @@ -104,3 +159,7 @@ You can cite the `nf-core` publication as follows: > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > > _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). + +You can read more about MIP's use in healthcare in, + +> Stranneheim H, Lagerstedt-Robinson K, Magnusson M, et al. Integration of whole genome sequencing into a healthcare setting: high diagnostic rates across multiple clinical entities in 3219 rare disease patients. Genome Med. 2021;13(1):40. doi:10.1186/s13073-021-00855-5 diff --git a/docs/usage.md b/docs/usage.md index 94e500a7..a02b86d6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,171 +1,314 @@ # nf-core/raredisease: Usage -## :warning: Please read this documentation on the nf-core website: [https://nf-co.re/raredisease/usage](https://nf-co.re/raredisease/usage) - -> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ +**We recommend reading this documentation on the nf-core website: [https://nf-co.re/raredisease/usage](https://nf-co.re/raredisease/usage)** + +Table of contents: + +- [nf-core/raredisease: Usage](#nf-coreraredisease-usage) + - [Introduction](#introduction) + - [Prerequisites](#prerequisites) + - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) + - [Updating the pipeline](#updating-the-pipeline) + - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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) + - [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) + - [Best practices](#best-practices) + - [Custom configuration](#custom-configuration) + - [Changing resources](#changing-resources) + - [Custom Containers](#custom-containers) + - [Custom Tool Arguments](#custom-tool-arguments) + - [nf-core/configs](#nf-coreconfigs) + - [Run Sentieon](#run-sentieon) + - [Azure Resource Requests](#azure-resource-requests) + - [Running in the background](#running-in-the-background) + - [Nextflow memory requirements](#nextflow-memory-requirements) ## Introduction - +nf-core/raredisease is a bioinformatics best-practice analysis pipeline to call, annotate and score variants from WGS/WES of rare disease patients. The pipeline is built using Nextflow. -## Samplesheet input +## Prerequisites -You will need to create a samplesheet with information about the samples you would like to analyse 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 as shown in the examples below. +1. Install Nextflow (>=22.10.1) using the instructions [here.](https://nextflow.io/docs/latest/getstarted.html#installation) +2. Install one of the following technologies for full pipeline reproducibility: Docker, Singularity, Podman, Shifter or Charliecloud. + > Almost all nf-core pipelines give you the option to use conda as well. However, some tools used in the raredisease pipeline do not have a conda package so we do not support conda at the moment. -```bash ---input '[path to samplesheet file]' +## Run nf-core/raredisease with test data + +Before running the pipeline with your data, we recommend running it with the test dataset available [here](https://github.com/nf-core/test-datasets/tree/raredisease). You do not need to download the data as the pipeline is configured to fetch that data automatically for you when you use the test profile. + +Run the following command, where YOURPROFILE is the package manager you installed on your machine. For example, `-profile test,docker` or `-profile test,singularity`: + +``` +nextflow run nf-core/raredisease \ + -revision dev -profile test, \ + --outdir ``` -### Multiple runs of the same sample +> Check [nf-core/configs](https://github.com/nf-core/configs/tree/master/conf) to see if a custom config file to run nf-core pipelines already exists for your institute. If so, you can simply use `-profile test,` in your command. This enables the appropriate package manager and sets the appropriate execution settings for your machine. +> NB: The order of profiles is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: +Running the command creates the following files in your working directory: -```console -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +``` +work # Directory containing the Nextflow working files + # Finished results in specified location (defined with --outdir) +.nextflow_log # Log file from Nextflow +# Other Nextflow hidden files, like history of pipeline logs. ``` -### Full samplesheet +Test profile runs the pipeline with a case containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. -The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. +### Updating the pipeline -A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. +The above command downloads the pipeline from GitHub, caches it, and tests it on the test dataset. When you run the command again, it will fetch the pipeline from cache even if a more recent version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. -```console -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, -TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, -TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, -``` +## Run nf-core/raredisease with your data -| Column | Description | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +Running the pipeline involves three steps: -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +1. Prepare a samplesheet +2. Gather all required references +3. Supply samplesheet and references, and run the command -## Running the pipeline +#### Samplesheet -The typical command for running the pipeline is as follows: +A samplesheet is used to pass the information about the sample(s), such as the path to the FASTQ files and other meta data (gender, phenotype, etc.,) to the pipeline in csv format. -```bash -nextflow run nf-core/raredisease --input samplesheet.csv --outdir --genome GRCh37 -profile docker -``` +nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). -This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. +| Fields | Description | +| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `lane` | Used to generate separate channels during the alignment step. | +| `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `gender` | Sex (1=male; 2=female; other=unknown). | +| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | +| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | +| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | +| `case_id` | Case ID, for the analysis used when generating a family VCF. | -Note that the pipeline will create the following files in your working directory: +It is also possible to include multiple runs of the same sample in a samplesheet. For example, when you have re-sequenced the same sample more than once to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across two lanes: -```bash -work # Directory containing the nextflow working files - # Finished results in specified location (defined with --outdir) -.nextflow_log # Log file from Nextflow -# Other nextflow hidden files, eg. history of pipeline runs and old logs. -``` +| sample | lane | fastq_1 | fastq_2 | gender | phenotype | paternal_id | maternal_id | case_id | +| -------- | ---- | -------------------------------- | -------------------------------- | ------ | --------- | ----------- | ----------- | ------- | +| AEG588A1 | 2 | AEG588A1_S1_L002_R1_001.fastq.gz | AEG588A1_S1_L002_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | +| AEG588A1 | 3 | AEG588A1_S1_L003_R1_001.fastq.gz | AEG588A1_S1_L003_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | +| AEG588A2 | 4 | AEG588A2_S1_L004_R1_001.fastq.gz | AEG588A2_S1_L004_R2_001.fastq.gz | 2 | 1 | | | fam_1 | +| AEG588A3 | 4 | AEG588A3_S1_L004_R1_001.fastq.gz | AEG588A3_S1_L004_R2_001.fastq.gz | 1 | 1 | | | fam_1 | -If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. +If you would like to see more examples of what a typical samplesheet looks like for a singleton and a trio, follow these links, [singleton](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_single.csv) and [trio](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_trio.csv). -Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. +#### Reference files and parameters -> ⚠️ 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: +In nf-core/raredisease, references can be supplied using parameters listed [here](https://nf-co.re/raredisease/dev/parameters). -```bash -nextflow run nf-core/raredisease -profile docker -params-file params.yaml -``` +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools. For example, you can align with either bwamem2 or Sentieon BWA mem and call SNVs with either DeepVariant or Sentieon DNAscope. You also have the option to turn off sections of the pipeline if you do not want to run the. For example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file. This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by Sentieon DNAscope. -with `params.yaml` containing: +nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following categories: -```yaml -input: './samplesheet.csv' -outdir: './results/' -genome: 'GRCh37' -input: 'data' -<...> -``` +1. Alignment (bwamem2/Sentieon BWA mem) +2. QC stats from the alignment files +3. Repeat expansions (ExpansionsHunter & Stranger) +4. Variant calling - SNV (DeepVariant/Sentieon DNAscope) +5. Variant calling - Structural variants (SV) (Tiddit & Manta) +6. SNV annotation & ranking (rohcall, vcfanno, ensembl VEP, GENMOD) +7. SV annotation & ranking (SVDB query, ensembl VEP, GENMOD) +8. Mitochondrial analysis -You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). +> We have only listed the groups that require at least one input from the user. For example, the pipeline also runs SMNCopyNumberCaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check the [README](../README.md). -### Updating the pipeline +The mandatory and optional parameters for each category are tabulated below. -When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: +> Alignment, QC stats, repeat expansions, SNV & SV variant calling are run by default. Hence, the mandatory parameters used by those features will always have to be provided to the pipeline. -```bash -nextflow pull nf-core/raredisease -``` +##### 1. Alignment -### Reproducibility +| Mandatory | Optional | +| ------------------- | --------------------------- | +| aligner1 | fasta_fai2 | +| fasta | bwamem22 | +| platform | known_dbsnp3 | +| | known_dbsnp_tbi3 | -It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
    +2fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
    +3Used only by Sentieon.
    -First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. +##### 2. QC stats from the alignment files -This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. +| Mandatory | Optional | +| ------------------------------------------------------------ | -------- | +| intervals_wgs1 | | +| intervals_y1 | | +| target_bed / (bait_intervals & target_intervals)2 | | -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +1These files are Picard's style interval list files, comprising the entire genome or only the chromosome Y. A version of these files for GRCh37 and for GRCh38 is supplied in the pipeline assets. These files are not necessary if you are using Sentieon.
    +2 If a target_bed file is provided, bait_intervals and target_intervals can be generated by the pipeline.
    -> 💡 If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. +##### 3. Repeat expansions -## Core Nextflow arguments +| Mandatory | Optional | +| --------------- | -------- | +| variant_catalog | | -> **NB:** These options are part of Nextflow and use a _single_ hyphen (pipeline parameters use a double-hyphen). +##### 4. Variant calling - SNV -### `-profile` +| Mandatory | Optional | +| -------------------------- | --------------------------- | +| variant_caller1 | known_dbsnp2 | +| ml_model2 | known_dbsnp_tbi2 | +| analysis_type3 | call_interval2 | +| | known_dbsnp_tbi2 | -Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. +1Default variant caller is DeepVariant, but you have the option to use Sentieon as well.
    +2These parameters are only used by Sentieon.
    +3Default is WGS, but you have the option to choose WES as well.
    -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. +##### 5. Variant calling - Structural variants -> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +| Mandatory | Optional | +| --------- | ---------- | +| | target_bed | +| | bwa | -The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). +##### 6. SNV annotation & Ranking -Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! -They are loaded in sequence, so later profiles can overwrite earlier profiles. +| Mandatory | Optional | +| ----------------------------- | ------------------------------ | +| genome1 | gnomad_af4 | +| vcfanno_resources2 | reduced_penetrance5 | +| vcfanno_toml3 | vcfanno_lua | +| vep_cache_version | vep_filters6 | +| vep_cache | score_config_snv7 | -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +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).
    +3Path to a vcfanno configuration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
    +4GnomAD VCF file can be downloaded from [here] (https://gnomad.broadinstitute.org/downloads).
    +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).
    -- `test` - - A profile with a complete configuration for automated testing - - Includes links to test data so needs no other parameters -- `docker` - - A generic configuration profile to be used with [Docker](https://docker.com/) -- `singularity` - - A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) -- `podman` - - A generic configuration profile to be used with [Podman](https://podman.io/) -- `shifter` - - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) -- `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) -- `apptainer` - - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) -- `conda` - - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. +##### 7. SV annotation & Ranking -### `-resume` +| Mandatory | Optional | +| -------------------------- | ------------------ | +| genome | reduced_penetrance | +| svdb_query_dbs1 | score_config_sv | +| vep_cache_version | vep_filters | +| vep_cache | | -Specify this when restarting a pipeline. Nextflow will use cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. For input to be considered the same, not only the names must be identical but the files' contents as well. For more info about this parameter, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). +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). -You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. +##### 8. Mitochondrial analysis -### `-c` +| 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 | | -Specify the path to a specific config file (this is a core Nextflow command). See the [nf-core website documentation](https://nf-co.re/usage/configuration) for more information. +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). -## Custom configuration +#### Run the pipeline + +You can directly supply the parameters in the command line (CLI) or use a config file from which the pipeline can import the parameters. + +##### Direct input in CLI + +All of the pipeline parameters listed [here](https://nf-co.re/raredisease/dev/parameters) can be passed using the CLI. For example, you can provide the samplesheet, reference FASTA, and turn off annotations for SNVs and SVs by running, + +``` +nextflow run nf-core/raredisease \ + -revision dev \ + -profile test, \ + --input samplesheet.csv \ + --fasta reference.fasta \ + --skip_snv_annotation \ + --skip_sv_annotation \ + --outdir +``` + +##### Import from a config file (recommended) + +To input or change the default parameters, we recommend using a config file instead. Create a config file that contains all the parameters and supply that file as shown below. + +``` +nextflow run nf-core/raredisease \ + -revision dev \ + -profile test, \ + -c \ + --outdir +``` + +A sample config file can be found [here](https://github.com/nf-core/raredisease/blob/dev/conf/test.config). + +## Best practices + +- **Singularity cache:** If you are using singularity, use the nf-core download command to download images first, before running the pipeline. Define [NXF_SINGULARITY_CACHEDIR](https://nextflow.io/docs/latest/config.html?highlight=nxf_singularity_cachedir#environment-variables) or singularity.cacheDir Nextflow options to store and re-use the images from a central location for future pipeline runs. + +- **Save references:** While the pipeline can generate indices for the FASTA and some VCF files when they are not provided, it can be benficial to supply them to the pipeline as it saves computing resources. You can use the `--save_reference` parameter to publish those files, and then update your config file with the paths to these files for your subsequent runs. + +- **Update pipeline:** If you would like to update the pipeline code stored in cache, in addition to running the command with `-latest` option, you can also run the command below: + +```bash +nextflow pull nf-core/raredisease +``` + +- **Reproducibility:** Specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/raredisease releases page](https://github.com/nf-core/raredisease/releases) and find the latest pipeline version - numeric only (e.g. `1.3.1`). Then specify this when running the pipeline with `-r`, for example, `-r 1.3.1`. You can switch to another version by changing the number after the `-r` flag. The version number will be logged in reports when you run the pipeline. For example, you can view the version number at the bottom of the MultiQC reports. + +To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. + +> 💡 If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. + +- **Restart a previous run:** Add `-resume` to your command when restarting a pipeline. Nextflow will use cached results from any pipeline steps where inputs are the same, and resume the run from where it terminated previously. For input to be considered the same, names and the files' contents must be identical. For more info about `-resume`, see [this blog post](https://www.nextflow.io/blog/2019/demystifying-nextflow-resume.html). You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. + +- **Reusing parameters:** If you wish to repeatedly use the same parameters for multiple runs, rather than specifying each flag in the command, you can specify these in a params file. + +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: + +```bash +nextflow run nf-core/raredisease -profile docker -params-file params.yaml +``` + +with `params.yaml` containing: + +```yaml +input: './samplesheet.csv' +outdir: './results/' +genome: 'GRCh37' +input: 'data' +<...> +``` + +You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). -### Resource requests +## Custom configuration -Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. +### Changing resources To change the resource requests, please see the [max resources](https://nf-co.re/docs/usage/configuration#max-resources) and [tuning workflow resources](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources) section of the nf-core website. @@ -181,15 +324,31 @@ A pipeline might not always support every possible argument or option of a parti To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. -### nf-core/configs +#### nf-core/configs -In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. +In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information about creating your own configuration files. If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests +### Run Sentieon + +To use Sentieon you have to: + +1. Ensure that Sentieon executable is in path. +2. If necessary, store license information as a secret in Nextflow's local store. +3. Set environmental variable `NXF_ENABLE_SECRETS` to an appropriate value. + +To elaborate more on item #2 in the list above, if you are running nf-core/raredisease with Sentieon on AWS or on a local machine and you do not want other users to know your license details, we recommend that you use [Nextflow's secrets feature](https://www.nextflow.io/docs/latest/secrets.html) to pass the that information. To do that run the command below after replacing LICENSE with the value corresponding to your license server (for example, 1.1.1.1:4000) + +``` +nextflow secrets set SENTIEON_LICENSE_BASE64 +``` + +If you are using Nextflow secrets, you have to set the environment variable `NXF_ENABLE_SECRETS` to true. This will see to it that the pipeline can retrieve the secret from Nextflow's secrets store during the pipeline execution. Keep in mind that versions of Nextflow Version 22.09.2-edge and onwards have NXF_ENABLE_SECRETS to true by default. If you are not using secrets set `NXF_ENABLE_SECRETS` to false, but make sure that the environment variable [`SENTIEON_LICENSE`](`NXF_ENABLE_SECRETS`) is set to reflect the value of your license server on your machine. + +### Azure Resource Requests To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. @@ -197,16 +356,16 @@ We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by de Note that the choice of VM size depends on your quota and the overall workload during the analysis. For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). -## Running in the background +### Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. The Nextflow `-bg` flag launches Nextflow in the background, detached from your terminal so that the workflow does not stop if you log out of your session. The logs are saved to a file. Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. -Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). +Some HPC setups also allow you to run Nextflow within a cluster job submitted to your job scheduler (from where it submits more jobs). -## Nextflow memory requirements +### Nextflow memory requirements In some cases, the Nextflow Java virtual machines can start to request a large amount of memory. We recommend adding the following line to your environment to limit this (typically in `~/.bashrc` or `~./bash_profile`): diff --git a/modules.json b/modules.json index 8588dadf..58618dca 100644 --- a/modules.json +++ b/modules.json @@ -5,20 +5,330 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bcftools/concat": { + "branch": "master", + "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", + "installed_by": ["modules"] + }, + "bcftools/filter": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "bcftools/merge": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "bcftools/norm": { + "branch": "master", + "git_sha": "bcad95fb35e567ad25840d3297c3e17eff211a3a", + "installed_by": ["modules"] + }, + "bcftools/reheader": { + "branch": "master", + "git_sha": "bd4b60c7f9358c7146ac198fd0c4ae6355ddd086", + "installed_by": ["modules"] + }, + "bcftools/roh": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "bcftools/view": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "bwa/index": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "bwamem2/index": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "bwamem2/mem": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "cat/cat": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "76cc4938c1f6ea5c7d83fed1eeffc146787f9543", "installed_by": ["modules"] }, + "deepvariant": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "expansionhunter": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, + "gatk4/bedtointervallist": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/createsequencedictionary": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/filtermutectcalls": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/intervallisttools": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/mergebamalignment": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/mergevcfs": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/mutect2": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/printreads": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/revertsam": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/samtofastq": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/selectvariants": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/splitintervals": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "gatk4/variantfiltration": { + "branch": "master", + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": ["modules"] + }, + "genmod/annotate": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "genmod/compound": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "genmod/models": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "genmod/score": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "glnexus": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "haplocheck": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "haplogrep2/classify": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "manta/germline": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "mosdepth": { + "branch": "master", + "git_sha": "783cc040350dbee673fd57f6a6300aea3d085b7c", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "f2d63bd5b68925f98f572eed70993d205cc694b7", "installed_by": ["modules"] + }, + "peddy": { + "branch": "master", + "git_sha": "21e6e085967902fb393b27b2e7590ac4c85fab8e", + "installed_by": ["modules"] + }, + "picard/addorreplacereadgroups": { + "branch": "master", + "git_sha": "28995552268a117551ded48dadcf42b0caf0e834", + "installed_by": ["modules"] + }, + "picard/collecthsmetrics": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "picard/collectmultiplemetrics": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "picard/collectwgsmetrics": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "picard/liftovervcf": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "picard/markduplicates": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "picard/renamesampleinvcf": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "picard/sortvcf": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "qualimap/bamqc": { + "branch": "master", + "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "installed_by": ["modules"] + }, + "rhocall/annotate": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "samtools/index": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "samtools/merge": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "samtools/sort": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "samtools/stats": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "smncopynumbercaller": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "stranger": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "svdb/merge": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "svdb/query": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "tabix/bgziptabix": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "tabix/tabix": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "tiddit/cov": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, + "tiddit/sv": { + "branch": "master", + "git_sha": "0367c23758d83fc6973a8cd35ecba40a0cfcf2af", + "installed_by": ["modules"] + }, + "ucsc/wigtobigwig": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, + "untar": { + "branch": "master", + "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", + "installed_by": ["modules"] + }, + "vcfanno": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] } } } diff --git a/nextflow.config b/nextflow.config index e15d3d7e..46e65afa 100644 --- a/nextflow.config +++ b/nextflow.config @@ -154,6 +154,13 @@ profiles { shifter.enabled = false apptainer.enabled = false } + apptainer { + apptainer.enabled = true + conda.enabled = false + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false apptainer { apptainer.enabled = true conda.enabled = false From 6440a13000bd619e67b814ddd1c867dde33fecaf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 11:31:53 +0200 Subject: [PATCH 1166/1921] fix error --- nextflow.config | 7 ------- 1 file changed, 7 deletions(-) diff --git a/nextflow.config b/nextflow.config index 2fd60a73..f97aeb1d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -179,13 +179,6 @@ profiles { shifter.enabled = false apptainer.enabled = false } - apptainer { - apptainer.enabled = true - conda.enabled = false - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false apptainer { apptainer.enabled = true conda.enabled = false From f2cee3e45c6a155e211debad754263e358219deb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 11:36:35 +0200 Subject: [PATCH 1167/1921] fix lint error --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 22ba8008..3456f5fe 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,6 @@ On release, automated continuous integration tests run the pipeline on a full-si Note that it is possible to include/exclude certain tools or steps. ## Usage -======= > **Note** > If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how From 2518da2d20e14faa1bb71038ad269da9971cf55d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 13:49:44 +0200 Subject: [PATCH 1168/1921] update untar --- modules.json | 2 +- modules/nf-core/untar/main.nf | 2 +- modules/nf-core/untar/meta.yml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index 58618dca..bd084ffe 100644 --- a/modules.json +++ b/modules.json @@ -322,7 +322,7 @@ }, "untar": { "branch": "master", - "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", + "git_sha": "b9829e1064382745d8dff7f1d74d2138d2864f71", "installed_by": ["modules"] }, "vcfanno": { 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: | From 36bdb514e9ff1f589254aacf69ec8bed3cfcbbbc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 15:00:11 +0200 Subject: [PATCH 1169/1921] update deepvariant --- modules.json | 2 +- modules/nf-core/deepvariant/main.nf | 3 ++- modules/nf-core/deepvariant/meta.yml | 5 +++++ subworkflows/local/variant_calling/call_snv_deepvariant.nf | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index bd084ffe..6ef589a1 100644 --- a/modules.json +++ b/modules.json @@ -67,7 +67,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "b9829e1064382745d8dff7f1d74d2138d2864f71", "installed_by": ["modules"] }, "expansionhunter": { 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/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index a401329a..fa240b1e 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -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() From fc2a6185e668a0273f7c911d882dec7c2f1f5b6d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 15:13:01 +0200 Subject: [PATCH 1170/1921] update uri --- modules/local/ensemblvep/main.nf | 2 +- modules/local/filter_vep.nf | 2 +- modules/local/gens/main.nf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 47219c5f..7ccf9fc6 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -7,7 +7,7 @@ process ENSEMBLVEP { exit 1, "Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead." } - container "ensemblorg/ensembl-vep:release_107.0" + container "docker.io/ensemblorg/ensembl-vep:release_107.0" input: tuple val(meta), path(vcf) diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 4f3d8f59..0d067c37 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -6,7 +6,7 @@ process FILTER_VEP { if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { exit 1, "Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead." } - container "ensemblorg/ensembl-vep:release_107.0" + container "docker.io/ensemblorg/ensembl-vep:release_107.0" input: tuple val(meta), path(vcf) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index f4e113c5..2aad32b3 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -2,7 +2,7 @@ process GENS { tag "$meta.id" label 'process_medium' - container 'raysloks/gens_preproc:1.0.1' + container 'docker.io/raysloks/gens_preproc:1.0.1' input: tuple val(meta), path(read_counts) 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 1171/1921] 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 1172/1921] 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 1173/1921] 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 e66e33150e9b8c4b9a8c401d58bb016257e89487 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 8 May 2023 21:11:38 +0200 Subject: [PATCH 1174/1921] change fasta_fai to fai --- conf/modules/prepare_references.config | 2 +- main.nf | 2 +- nextflow_schema.json | 2 +- workflows/raredisease.nf | 43 ++++++++++++++++++++++++-- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 8ea76ec6..7f4b27cd 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -46,7 +46,7 @@ process { } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { - ext.when = {!params.fasta_fai} + ext.when = {!params.fai} } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { diff --git a/main.nf b/main.nf index b14028c2..93def192 100644 --- a/main.nf +++ b/main.nf @@ -18,7 +18,7 @@ nextflow.enable.dsl = 2 */ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') diff --git a/nextflow_schema.json b/nextflow_schema.json index ab50b9a5..b461fb1e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -63,7 +63,7 @@ "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" }, - "fasta_fai": { + "fai": { "type": "string", "format": "file-path", "help_text": "If none provided, will be generated automatically from the FASTA reference", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8d38371b..9918d2e1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -15,7 +15,7 @@ def checkPathParamList = [ params.bwamem2, params.call_interval, params.fasta, - params.fasta_fai, + params.fai, params.gens_gnomad_pos, params.gens_interval_list, params.gens_pon, @@ -54,6 +54,43 @@ def checkPathParamList = [ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CHECK MANDATORY PARAMETERS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +def mandatoryParams = [ + "aligner", + "analysis_type", + "fasta", + "input", + "intervals_wgs", + "intervals_y", + "platform", + "variant_catalog", + "variant_caller" +] + +if (!params.skip_snv_annotation) { + mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version"] +} + +if (!params.skip_sv_annotation) { + mandatoryParams += ["genome", "svdb_query_dbs", "vep_cache", "vep_cache_version"] +} + +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"] +} + +if (params.analysis_type.equals("wes")) { + mandatoryParams += ["target_bed"] +} + +for (param in mandatoryParams.unique()) { if (params[param] == null) { exit 1, "params." + param + " not set." } } + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CONFIG FILES @@ -218,9 +255,9 @@ workflow RAREDISEASE { 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_chrom_sizes = ch_references.chrom_sizes - ch_genome_fai_no_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() + ch_genome_fai_no_meta = params.fai ? Channel.fromPath(params.fai).collect() : ch_references.fasta_fai - ch_genome_fai_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).map {it -> [[id:it[0].simpleName], it]}.collect() + 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 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 1175/1921] 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 1176/1921] 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 1177/1921] 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 1178/1921] 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 1179/1921] 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 1180/1921] 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 d4fb645d066a5e79366f4ac1a51f4c0e8049bed4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 13:04:06 +0200 Subject: [PATCH 1181/1921] change gender to sex --- README.md | 2 +- assets/samplesheet.csv | 2 +- assets/schema_input.json | 6 ++-- bin/check_samplesheet.py | 2 +- conf/modules/call_repeat_expansions.config | 1 + docs/usage.md | 18 +++++------ modules.json | 2 +- modules/nf-core/expansionhunter/main.nf | 34 ++++++++++++-------- modules/nf-core/expansionhunter/meta.yml | 21 +++++++++--- subworkflows/local/call_repeat_expansions.nf | 7 ++-- subworkflows/local/check_input.nf | 4 +-- workflows/raredisease.nf | 6 ++-- 12 files changed, 65 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 3456f5fe..22a4ab00 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ First, prepare a samplesheet with your input data that looks as follows: `samplesheet.csv`: ```csv -sample,lane,fastq_1,fastq_2,gender,phenotype,paternal_id,maternal_id,case_id +sample,lane,fastq_1,fastq_2,sex,phenotype,paternal_id,maternal_id,case_id hugelymodelbat,1,reads_1.fastq.gz,reads_2.fastq.gz,1,2,,,justhusky ``` diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index d8fcccca..e4a3d013 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,4 +1,4 @@ -sample,lane,fastq_1,fastq_2,gender,phenotype,paternal_id,maternal_id,case_id +sample,lane,fastq_1,fastq_2,sex,phenotype,paternal_id,maternal_id,case_id 1234N,1,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L001_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L001_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey 1234N,4,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L004_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L004_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey 1234N,2,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L002_R1_xxx.fastq.gz,https://raw.githubusercontent.com/nf-core/test-datasets/sarek/testdata/tiny/normal/tiny_n_L002_R2_xxx.fastq.gz,2,1,caseyupper,caseyupperlamb,caseydonkey diff --git a/assets/schema_input.json b/assets/schema_input.json index 3258d7eb..602ec301 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -30,10 +30,10 @@ } ] }, - "gender": { + "sex": { "type": "string", "pattern": "^\\S+$", - "errorMessage": "Gender must be provided and cannot contain spaces" + "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { "type": "string", @@ -72,6 +72,6 @@ "errorMessage": "Case name must be provided and cannot contain spaces" } }, - "required": ["sample", "fastq_1", "gender", "phenotype", "case_id"] + "required": ["sample", "fastq_1", "sex", "phenotype", "case_id"] } } diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 5648dd1b..ac46acd3 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -196,7 +196,7 @@ def check_samplesheet(file_in, file_out): "lane", "fastq_1", "fastq_2", - "gender", + "sex", "phenotype", "paternal_id", "maternal_id", diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 1f71bef6..0509d1e2 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -24,6 +24,7 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { + ext.args = { ("${meta.sex}" == '1') ? '--sex male' : '--sex female' } ext.prefix = { "${meta.id}_exphunter" } } diff --git a/docs/usage.md b/docs/usage.md index a02b86d6..412273c6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -84,9 +84,9 @@ Running the pipeline involves three steps: #### Samplesheet -A samplesheet is used to pass the information about the sample(s), such as the path to the FASTQ files and other meta data (gender, phenotype, etc.,) to the pipeline in csv format. +A samplesheet is used to pass the information about the sample(s), such as the path to the FASTQ files and other meta data (sex, phenotype, etc.,) to the pipeline in csv format. -nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex/gender and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). +nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). | Fields | Description | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -94,7 +94,7 @@ nf-core/raredisease will auto-detect whether a sample is single- or paired-end u | `lane` | Used to generate separate channels during the alignment step. | | `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `gender` | Sex (1=male; 2=female; other=unknown). | +| `sex` | Sex (1=male; 2=female; other=unknown). | | `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | | `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | | `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | @@ -102,12 +102,12 @@ nf-core/raredisease will auto-detect whether a sample is single- or paired-end u It is also possible to include multiple runs of the same sample in a samplesheet. For example, when you have re-sequenced the same sample more than once to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across two lanes: -| sample | lane | fastq_1 | fastq_2 | gender | phenotype | paternal_id | maternal_id | case_id | -| -------- | ---- | -------------------------------- | -------------------------------- | ------ | --------- | ----------- | ----------- | ------- | -| AEG588A1 | 2 | AEG588A1_S1_L002_R1_001.fastq.gz | AEG588A1_S1_L002_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | -| AEG588A1 | 3 | AEG588A1_S1_L003_R1_001.fastq.gz | AEG588A1_S1_L003_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | -| AEG588A2 | 4 | AEG588A2_S1_L004_R1_001.fastq.gz | AEG588A2_S1_L004_R2_001.fastq.gz | 2 | 1 | | | fam_1 | -| AEG588A3 | 4 | AEG588A3_S1_L004_R1_001.fastq.gz | AEG588A3_S1_L004_R2_001.fastq.gz | 1 | 1 | | | fam_1 | +| sample | lane | fastq_1 | fastq_2 | sex | phenotype | paternal_id | maternal_id | case_id | +| -------- | ---- | -------------------------------- | -------------------------------- | --- | --------- | ----------- | ----------- | ------- | +| AEG588A1 | 2 | AEG588A1_S1_L002_R1_001.fastq.gz | AEG588A1_S1_L002_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | +| AEG588A1 | 3 | AEG588A1_S1_L003_R1_001.fastq.gz | AEG588A1_S1_L003_R2_001.fastq.gz | 1 | 2 | AEG588A3 | AEG588A2 | fam_1 | +| AEG588A2 | 4 | AEG588A2_S1_L004_R1_001.fastq.gz | AEG588A2_S1_L004_R2_001.fastq.gz | 2 | 1 | | | fam_1 | +| AEG588A3 | 4 | AEG588A3_S1_L004_R1_001.fastq.gz | AEG588A3_S1_L004_R2_001.fastq.gz | 1 | 1 | | | fam_1 | If you would like to see more examples of what a typical samplesheet looks like for a singleton and a trio, follow these links, [singleton](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_single.csv) and [trio](https://github.com/nf-core/test-datasets/blob/raredisease/testdata/samplesheet_trio.csv). diff --git a/modules.json b/modules.json index 6ef589a1..981605d8 100644 --- a/modules.json +++ b/modules.json @@ -72,7 +72,7 @@ }, "expansionhunter": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "5e4835b5798eaef33d23d9a2939f2ca9d3a07d4d", "installed_by": ["modules"] }, "fastqc": { diff --git a/modules/nf-core/expansionhunter/main.nf b/modules/nf-core/expansionhunter/main.nf index 5db8794a..b5339bf6 100644 --- a/modules/nf-core/expansionhunter/main.nf +++ b/modules/nf-core/expansionhunter/main.nf @@ -5,47 +5,55 @@ process EXPANSIONHUNTER { conda "bioconda::expansionhunter=4.0.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/expansionhunter:4.0.2--he785bd8_0' : - 'quay.io/biocontainers/expansionhunter:4.0.2--he785bd8_0' }" + 'biocontainers/expansionhunter:4.0.2--he785bd8_0' }" input: tuple val(meta), path(bam), path(bai) - path fasta - path variant_catalog + tuple val(meta2), path(fasta) + tuple val(meta3), path(fasta_fai) + tuple val(meta4), path(variant_catalog) output: - tuple val(meta), path("*.vcf"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.json.gz") , emit: json + 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 gender = (meta.gender == 'male' || meta.gender == 1 || meta.gender == 'XY') ? "male" : "female" + """ ExpansionHunter \\ - $args \\ - --reads $bam \\ - --output-prefix $prefix \\ - --reference $fasta \\ - --variant-catalog $variant_catalog \\ - --sex $gender + ${args} \\ + --reads ${bam} \\ + --output-prefix ${prefix} \\ + --reference ${fasta} \\ + --variant-catalog ${variant_catalog} + + bgzip --threads ${task.cpus} ${args2} ${prefix}.vcf + bgzip --threads ${task.cpus} ${args2} ${prefix}.json cat <<-END_VERSIONS > versions.yml "${task.process}": expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + bgzip: \$(echo \$(bgzip -h 2>&1) | sed 's/^.*Version: //;s/Usage:.*//') END_VERSIONS """ stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf + touch ${prefix}.vcf.gz + touch ${prefix}.json.gz cat <<-END_VERSIONS > versions.yml "${task.process}": expansionhunter: \$( echo \$(ExpansionHunter --version 2>&1) | sed 's/^.*ExpansionHunter v//') + bgzip: \$(echo \$(bgzip -h 2>&1) | sed 's/^.*Version: //;s/Usage:.*//') END_VERSIONS """ } diff --git a/modules/nf-core/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml index ebb3016c..645f751b 100644 --- a/modules/nf-core/expansionhunter/meta.yml +++ b/modules/nf-core/expansionhunter/meta.yml @@ -3,12 +3,15 @@ description: Estimate repeat sizes using NGS data keywords: - STR - repeat_expansions + - bam + - cram + - vcf + - json tools: - expansionhunter: description: A tool for estimating repeat sizes homepage: https://github.com/Illumina/ExpansionHunter documentation: https://github.com/Illumina/ExpansionHunter/blob/master/docs/01_Introduction.md - doi: "10.1093/bioinformatics/btz431" licence: ["Apache-2.0"] @@ -25,11 +28,15 @@ input: - fasta: type: file description: Reference genome - pattern: "*.{fa,fasta}" + pattern: "*.{fna,fa,fasta}" + - fasta: + type: file + description: Reference genome index + pattern: "*.fai" - variant_catalog: type: file - description: json file with repeat expansion sites to genotype - pattern: "*.{json}" + description: JSON file with repeat expansion sites to genotype + pattern: "*.json" output: - meta: @@ -44,7 +51,11 @@ output: - vcf: type: file description: VCF with repeat expansions - pattern: "*.{vcf}" + pattern: "*.vcf.gz" + - json: + type: file + description: JSON with repeat expansions + pattern: "*.json.gz" authors: - "@jemten" diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 66dea07d..ceb3a8b5 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -20,14 +20,17 @@ workflow CALL_REPEAT_EXPANSIONS { 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) ] main: ch_versions = Channel.empty() EXPANSIONHUNTER ( ch_bam, - ch_fasta, - ch_variant_catalog + ch_fasta_meta, + ch_fai_meta, + ch_variant_catalog.map { it -> [[id:it[0].simpleName],it]} ) // Fix header and rename sample diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 4199196a..3c5ab0cf 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -39,7 +39,7 @@ def create_fastq_channel(LinkedHashMap row) { // create meta map def meta = [:] meta.case_id = row.case_id - meta.gender = row.gender + meta.sex = row.sex meta.id = row.sample meta.maternal = row.maternal_id meta.paternal = row.paternal_id @@ -69,7 +69,7 @@ def create_fastq_channel(LinkedHashMap row) { def create_samples_channel(LinkedHashMap row) { def sample = [:] sample.id = row.sample - sample.gender = row.gender + sample.sex = row.sex sample.phenotype = row.phenotype sample.maternal = row.maternal_id sample.paternal = row.paternal_id diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9918d2e1..f0ca78de 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -325,7 +325,9 @@ workflow RAREDISEASE { ch_variant_catalog, CHECK_INPUT.out.case_info, ch_genome_fasta_no_meta, - ch_genome_fai_no_meta + ch_genome_fai_no_meta, + ch_genome_fasta_meta, + ch_genome_fai_meta ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) @@ -612,7 +614,7 @@ def makePed(samples) { sample_tokenized.removeLast() sample_name = sample_tokenized.join("_") if (!samples_list.contains(sample_name)) { - outfile.append('\n' + [samples[i].case_id, sample_name, samples[i].paternal, samples[i].maternal, samples[i].gender, samples[i].phenotype].join('\t')); + outfile.append('\n' + [samples[i].case_id, sample_name, samples[i].paternal, samples[i].maternal, samples[i].sex, samples[i].phenotype].join('\t')); samples_list.add(sample_name) } } From fa676efeaa24db761545f6c06c6b883720300a02 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 13:15:51 +0200 Subject: [PATCH 1182/1921] manta conf --- conf/modules/call_sv_manta.config | 1 + subworkflows/local/annotate_snvs.nf | 4 ++-- subworkflows/local/call_repeat_expansions.nf | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/conf/modules/call_sv_manta.config b/conf/modules/call_sv_manta.config index f55581af..3fa83f3b 100644 --- a/conf/modules/call_sv_manta.config +++ b/conf/modules/call_sv_manta.config @@ -17,6 +17,7 @@ process { withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_MANTA:MANTA' { + ext.args = { (params.analysis_type == "wes") ? '--exome' : '' } ext.prefix = { "${meta.id}_manta" } } } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 54d09e95..5bc27d26 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -106,6 +106,8 @@ workflow ANNOTATE_SNVS { ch_vep_ann = BCFTOOLS_CONCAT.out.vcf ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi + ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) + ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) } ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions) @@ -118,8 +120,6 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions.first()) 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) - ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) emit: vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index ceb3a8b5..52343806 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -51,10 +51,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 From 79680707cf24923cb1f267686a5d5f3c89250196 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 13:34:37 +0200 Subject: [PATCH 1183/1921] bait padding --- conf/modules/prepare_references.config | 2 +- nextflow.config | 1 + nextflow_schema.json | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 7f4b27cd..8504a34c 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -91,7 +91,7 @@ process { withName: '.*PREPARE_REFERENCES:GATK_ILT' { ext.when = { params.target_bed } - ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' + ext.args = { "--PADDING ${params.bait_padding} -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2" } publishDir = [ enabled: false ] diff --git a/nextflow.config b/nextflow.config index f97aeb1d..e127d869 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,6 +22,7 @@ params { // Main options analysis_type = 'wgs' + bait_padding = 100 skip_snv_annotation = false skip_sv_annotation = false skip_mt_analysis = false diff --git a/nextflow_schema.json b/nextflow_schema.json index b461fb1e..f8e5fdea 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -48,6 +48,15 @@ "fa_icon": "fas fa-dna", "description": "Reference genome related files and options required for the workflow.", "properties": { + "bait_padding": { + "type": "number", + "default": 100, + "fa_icon": "fas fa-greater-than", + "pattern": "^\\S+\\.bed(\\.gz)?$", + "description": "The amount to pad each end of the target intervals to create bait intervals.", + "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 + }, "genome": { "type": "string", "description": "Name of iGenomes reference.", From 169dd381871ecc22a6375e97906c1a8c20875410 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 17:45:16 +0200 Subject: [PATCH 1184/1921] review suggestions --- assets/multiqc_config.yml | 23 +++++++++++++++++++ modules/local/add_most_severe_consequence.nf | 8 ++++--- modules/local/add_most_severe_pli.nf | 8 ++++--- modules/local/ensemblvep/main.nf | 2 +- modules/local/filter_vep.nf | 2 +- modules/local/gatk4/collectreadcounts/main.nf | 12 +++++----- modules/local/gatk4/denoisereadcounts/main.nf | 12 +++++----- modules/local/gens/main.nf | 6 ----- nextflow_schema.json | 2 +- subworkflows/local/check_input.nf | 4 ++-- workflows/raredisease.nf | 23 +++++++++++++++---- 11 files changed, 68 insertions(+), 34 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index a0ce1f4d..c2b26325 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -15,3 +15,26 @@ report_section_order: order: -1002 export_plots: true + +run_modules: + - fastqc + - qualimap + - picard + - mosdepth + +module_order: + - fastqc: + name: "FastQC" + path_filters: + - "*.zip" + - picard: + name: "Picard" + - qualimap: + name: "Qualimap" + - mosdepth: + name: "Mosdepth" + +extra_fn_clean_exts: + - "_sorted_md" + - type: regex + pattern: "_T[0-9]" diff --git a/modules/local/add_most_severe_consequence.nf b/modules/local/add_most_severe_consequence.nf index c70eedeb..0c572811 100644 --- a/modules/local/add_most_severe_consequence.nf +++ b/modules/local/add_most_severe_consequence.nf @@ -2,10 +2,10 @@ process ADD_MOST_SEVERE_CSQ { tag "$meta.id" label 'process_low' - conda "conda-forge::python=3.9.5" + conda "conda-forge::python=3.8.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.9--1' : - 'quay.io/biocontainers/python:3.9--1' }" + 'https://depot.galaxyproject.org/singularity/python:3.8.3' : + 'biocontainers/python:3.8.3' }" input: tuple val(meta), path(vcf) @@ -27,6 +27,7 @@ process ADD_MOST_SEVERE_CSQ { cat <<-END_VERSIONS > versions.yml "${task.process}": add_most_severe_consequence: v1.0 + python: \$(python --version | sed 's/Python //g') END_VERSIONS """ @@ -38,6 +39,7 @@ process ADD_MOST_SEVERE_CSQ { cat <<-END_VERSIONS > versions.yml "${task.process}": add_most_severe_consequence: v1.0 + python: \$(python --version | sed 's/Python //g') END_VERSIONS """ } diff --git a/modules/local/add_most_severe_pli.nf b/modules/local/add_most_severe_pli.nf index 1167a1b1..f2975a22 100644 --- a/modules/local/add_most_severe_pli.nf +++ b/modules/local/add_most_severe_pli.nf @@ -2,10 +2,10 @@ process ADD_MOST_SEVERE_PLI { tag "$meta.id" label 'process_low' - conda "conda-forge::python=3.9.5" + conda "conda-forge::python=3.8.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.9--1' : - 'quay.io/biocontainers/python:3.9--1' }" + 'https://depot.galaxyproject.org/singularity/python:3.8.3' : + 'biocontainers/python:3.8.3' }" input: tuple val(meta), path(vcf) @@ -26,6 +26,7 @@ process ADD_MOST_SEVERE_PLI { cat <<-END_VERSIONS > versions.yml "${task.process}": add_most_severe_pli: v1.0 + python: \$(python --version | sed 's/Python //g') END_VERSIONS """ @@ -37,6 +38,7 @@ process ADD_MOST_SEVERE_PLI { cat <<-END_VERSIONS > versions.yml "${task.process}": add_most_severe_pli: v1.0 + python: \$(python --version | sed 's/Python //g') END_VERSIONS """ } diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 7ccf9fc6..11ef4651 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -4,7 +4,7 @@ process ENSEMBLVEP { // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead." + error("Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead.") } container "docker.io/ensemblorg/ensembl-vep:release_107.0" diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index 0d067c37..d2ffb904 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -4,7 +4,7 @@ process FILTER_VEP { // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - exit 1, "Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead." + error("Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead.") } container "docker.io/ensemblorg/ensembl-vep:release_107.0" diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf index b9690e0b..f424d20e 100644 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ b/modules/local/gatk4/collectreadcounts/main.nf @@ -2,10 +2,10 @@ process GATK4_COLLECTREADCOUNTS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.2.4.1" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_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(bam), path(bai) @@ -21,14 +21,14 @@ process GATK4_COLLECTREADCOUNTS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 12 + def avail_mem = 12288 if (!task.memory) { log.info '[GATK CollectReadCounts] Available memory not known - defaulting to 12GB. 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 \\ -I $bam \\ --read-index $bai \\ -R $fasta \\ diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/local/gatk4/denoisereadcounts/main.nf index 48d3da82..c18a7763 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/local/gatk4/denoisereadcounts/main.nf @@ -2,10 +2,10 @@ process GATK4_DENOISEREADCOUNTS { tag "$meta.id" label 'process_high' - conda "bioconda::gatk4=4.2.4.1" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.2.4.1--hdfd78af_0' : - 'quay.io/biocontainers/gatk4:4.2.4.1--hdfd78af_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(read_counts) @@ -19,14 +19,14 @@ process GATK4_DENOISEREADCOUNTS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 12 + def avail_mem = 12288 if (!task.memory) { log.info '[GATK DenoiseReadCounts] Available memory not known - defaulting to 12GB. 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" DenoiseReadCounts \\ + gatk --java-options "-Xmx${avail_mem}M" DenoiseReadCounts \\ -I $read_counts \\ --count-panel-of-normals $panel_of_normals \\ --standardized-copy-ratios ${prefix}.standardizedCR.tsv \\ diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 2aad32b3..34399885 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -16,12 +16,6 @@ process GENS { script: def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 6 - if (!task.memory) { - log.info '[Gens] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.giga - } """ generate_gens_data.pl \\ $read_counts \\ diff --git a/nextflow_schema.json b/nextflow_schema.json index f8e5fdea..88cd28e5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -468,7 +468,7 @@ "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.", + "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" }, "variant_type": { diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 3c5ab0cf..c7a490dc 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -52,13 +52,13 @@ def create_fastq_channel(LinkedHashMap row) { // add path(s) of the fastq file(s) to the meta map def fastq_meta = [] if (!file(row.fastq_1).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" + error("ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}") } if (meta.single_end) { fastq_meta = [ meta, [ file(row.fastq_1) ] ] } else { if (!file(row.fastq_2).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" + error("ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}") } fastq_meta = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f0ca78de..d88d94f5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -89,8 +89,21 @@ if (params.analysis_type.equals("wes")) { mandatoryParams += ["target_bed"] } -for (param in mandatoryParams.unique()) { if (params[param] == null) { exit 1, "params." + param + " not set." } } +if (params.variant_caller.equals("sentieon")) { + mandatoryParams += ["ml_model"] +} +def missingParamsCount = 0 +for (param in mandatoryParams.unique()) { + if (params[param] == null) { + println("params." + param + " not set.") + missingParamsCount += 1 + } +} + +if (missingParamsCount>0) { + error("\nSet the missing parameters.") +} /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CONFIG FILES @@ -168,18 +181,18 @@ workflow RAREDISEASE { CHECK_INPUT (ch_input) ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) } else { - exit 1, 'Input samplesheet not specified!' + error('Input samplesheet not specified!') } if (params.variant_caller.equals("sentieon") && !params.ml_model) { - exit 1, 'Machine learning model not specified!' + error('Machine learning model not specified!') } // Initialize all file channels including unprocessed vcf, bed and tab files 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() - : ( exit 1, 'Genome fasta not specified!' ) + : ( 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([[],[]]) @@ -189,7 +202,7 @@ workflow RAREDISEASE { : 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.ml_model ? Channel.fromPath(params.ml_model).collect() + 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([]) From 0797c0766f3a17308e03483414cd5eafc8a96a85 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 18:26:15 +0200 Subject: [PATCH 1185/1921] fix typo --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d88d94f5..e06b1d27 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -202,7 +202,7 @@ workflow RAREDISEASE { : 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() + 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([]) From 48cfc0d4f8927d089fee33dacc03afe9a61c19a1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 18:58:08 +0200 Subject: [PATCH 1186/1921] update conditionals --- workflows/raredisease.nf | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e06b1d27..9b5c9b87 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -102,7 +102,7 @@ for (param in mandatoryParams.unique()) { } if (missingParamsCount>0) { - error("\nSet the missing parameters.") + error("\nSet missing parameters and restart the run.") } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -176,17 +176,9 @@ workflow RAREDISEASE { ch_versions = Channel.empty() // Initialize input channels - if (params.input) { - ch_input = Channel.fromPath(params.input) - CHECK_INPUT (ch_input) - ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) - } else { - error('Input samplesheet not specified!') - } - - if (params.variant_caller.equals("sentieon") && !params.ml_model) { - error('Machine learning model not specified!') - } + ch_input = Channel.fromPath(params.input) + 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_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() From baf7af84abd3ce85ab8fb5d46889dc0092623f62 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 15 May 2023 19:16:00 +0200 Subject: [PATCH 1187/1921] remove help_text for bait padding --- nextflow_schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 88cd28e5..f568a865 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -54,7 +54,6 @@ "fa_icon": "fas fa-greater-than", "pattern": "^\\S+\\.bed(\\.gz)?$", "description": "The amount to pad each end of the target intervals to create bait intervals.", - "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 }, "genome": { From 790f4f9b1e66d284ed73563aac84d815c42f3a8b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 May 2023 14:21:53 +0200 Subject: [PATCH 1188/1921] review suggestions --- CHANGELOG.md | 13 +++++++++++++ conf/modules/check_input.config | 12 ------------ nextflow.config | 1 - tower.yml | 5 ++++- workflows/raredisease.nf | 3 +-- 5 files changed, 18 insertions(+), 16 deletions(-) delete mode 100644 conf/modules/check_input.config diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dd49a55..23a719c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,3 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## v1.0.0 - [2023-03-31] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. + +### `Added` + +- FastQC read quality control +- Read mapping with BWAmem2/Sentieon +- Qualimap & Picard tools quality control metrics +- Call repeat expansions with ExpansionHunter and Stranger +- SNV calling with DeepVariant/Sentieon +- SV calling with Manta and TIDDIT +- SNV annotation with bcftools roh, vcfanno, and vep +- 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 diff --git a/conf/modules/check_input.config b/conf/modules/check_input.config deleted file mode 100644 index 2812ef7f..00000000 --- a/conf/modules/check_input.config +++ /dev/null @@ -1,12 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ diff --git a/nextflow.config b/nextflow.config index e127d869..a653f2e8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -285,7 +285,6 @@ includeConfig 'conf/modules/call_snv_deepvariant.config' includeConfig 'conf/modules/call_snv_sentieon.config' includeConfig 'conf/modules/call_sv_manta.config' includeConfig 'conf/modules/call_sv_tiddit.config' -includeConfig 'conf/modules/check_input.config' includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' includeConfig 'conf/modules/gens.config' includeConfig 'conf/modules/merge_annotate_MT.config' diff --git a/tower.yml b/tower.yml index 787aedfe..2d5717b0 100644 --- a/tower.yml +++ b/tower.yml @@ -1,5 +1,8 @@ reports: multiqc_report.html: display: "MultiQC HTML report" - samplesheet.csv: + samplesheet.valid.csv: display: "Auto-created samplesheet with collated metadata and FASTQ paths" + "*.ped": + display: "Auto-created pedigree file" + mimeType: "text" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9b5c9b87..000e973f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -611,7 +611,7 @@ workflow.onComplete { def makePed(samples) { def case_name = samples[0].case_id - def outfile = workDir.resolve("$case_name" + '.ped') + def outfile = file("${params.outdir}/pipeline_info/${case_name}" + '.ped') outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') def samples_list = [] for(int i = 0; i Date: Mon, 22 May 2023 16:17:19 +0200 Subject: [PATCH 1189/1921] 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 6d2fee5ef1930c2f07b22d570b82c21c92e1f073 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 23 May 2023 15:32:17 +0200 Subject: [PATCH 1190/1921] align_comments --- subworkflows/local/align.nf | 4 ++-- subworkflows/local/call_snv.nf | 4 ++-- subworkflows/local/variant_calling/call_sv_manta.nf | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 4d53765f..44d86c8b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -19,7 +19,7 @@ workflow ALIGN { main: ch_versions = Channel.empty() - ALIGN_BWAMEM2 ( + ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 ch_reads_input, ch_index_bwamem2, ch_fasta, @@ -27,7 +27,7 @@ workflow ALIGN { val_platform ) - ALIGN_SENTIEON ( + ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon ch_reads_input, ch_fasta, ch_fai, diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index c8493a49..28eeee0b 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -23,14 +23,14 @@ workflow CALL_SNV { ch_vcf = Channel.empty() ch_tabix = Channel.empty() - CALL_SNV_DEEPVARIANT ( + CALL_SNV_DEEPVARIANT ( // triggered only when params.variant_caller is set as deepvariant ch_input, ch_fasta, ch_fai, ch_case_info ) - CALL_SNV_SENTIEON( + CALL_SNV_SENTIEON( // triggered only when params.variant_caller is set as sentieon ch_input, ch_fasta, ch_fai, diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 2fbf4bec..c7e13c3d 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -27,7 +27,7 @@ workflow CALL_SV_MANTA { return [bed_file, index]} .set { bed_input } - if (params.analysis_type.toUpperCase() == "WGS" ) { + if (params.analysis_type == "wgs" ) { ch_case_info.combine(bam_file_list) .combine(bai_file_list) .map { it -> it + [ [], [] ] } 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 1191/1921] 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 1192/1921] 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 1193/1921] 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 1194/1921] 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 1195/1921] 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 1196/1921] 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 1197/1921] 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 1198/1921] 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 12f38e18c0b48a7548f791542176c6dd694a37c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Thu, 25 May 2023 15:19:55 +0200 Subject: [PATCH 1199/1921] Move options to Mandatory, describe gnomAD AF format --- docs/usage.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 412273c6..3581333c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -188,19 +188,22 @@ The mandatory and optional parameters for each category are tabulated below. | Mandatory | Optional | | ----------------------------- | ------------------------------ | -| genome1 | gnomad_af4 | -| vcfanno_resources2 | reduced_penetrance5 | -| vcfanno_toml3 | vcfanno_lua | -| vep_cache_version | vep_filters6 | -| vep_cache | score_config_snv7 | +| genome1 | reduced_penetrance6 | +| vcfanno_resources2 | vcfanno_lua | +| vcfanno_toml3 | vep_filters7 | +| vep_cache_version | | +| vep_cache | | +| gnomad_af4 | | +| score_config_snv5 | | 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).
    3Path to a vcfanno configuration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
    -4GnomAD VCF file can be downloaded from [here] (https://gnomad.broadinstitute.org/downloads).
    -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).
    +4 GnomAD VCF files can be downloaded from [here](https://gnomad.broadinstitute.org/downloads). The option `gnomad_af` expects a tab-delimited file with +no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
    +5Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
    +6Used 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).
    +7 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).
    ##### 7. SV annotation & Ranking From 23656781af9b33f8f14e0daa193f60b24e5bef30 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Thu, 25 May 2023 15:57:21 +0200 Subject: [PATCH 1200/1921] 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 1201/1921] 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 1202/1921] 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 1203/1921] 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 96ad150c80497e5311dc3155ca966418d1c7f0cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Fri, 26 May 2023 10:15:57 +0200 Subject: [PATCH 1204/1921] Add information about VEP cache --- docs/usage.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 3581333c..32bcaee8 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -188,22 +188,25 @@ The mandatory and optional parameters for each category are tabulated below. | Mandatory | Optional | | ----------------------------- | ------------------------------ | -| genome1 | reduced_penetrance6 | +| genome1 | reduced_penetrance7 | | vcfanno_resources2 | vcfanno_lua | -| vcfanno_toml3 | vep_filters7 | +| vcfanno_toml3 | vep_filters8 | | vep_cache_version | | -| vep_cache | | -| gnomad_af4 | | -| score_config_snv5 | | +| vep_cache4 | | +| gnomad_af5 | | +| score_config_snv6 | | 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).
    3Path to a vcfanno configuration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
    -4 GnomAD VCF files can be downloaded from [here](https://gnomad.broadinstitute.org/downloads). The option `gnomad_af` expects a tab-delimited file with +4 VEP caches can be downloaded [here](https://www.ensembl.org/info/docs/tools/vep/script/vep_cache.html#cache). +VEP plugins and associated files may be installed in the cache directory, and the plugin pLI is mandatory to install. +See example cache [here](https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz).
    +5 GnomAD VCF files can be downloaded from [here](https://gnomad.broadinstitute.org/downloads). The option `gnomad_af` expects a tab-delimited file with no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
    -5Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
    -6Used 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).
    -7 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).
    +6Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
    +7Used 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).
    +8 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).
    ##### 7. SV annotation & Ranking 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 1205/1921] 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 1206/1921] 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 1207/1921] 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 1208/1921] 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 1209/1921] 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 1210/1921] 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 1211/1921] 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 a5b2c447e0c822b8f0ea046f6289b722e2587f41 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Mon, 29 May 2023 10:26:08 +0200 Subject: [PATCH 1212/1921] feat added hmtnote annotation --- CITATIONS.md | 4 ++ conf/modules/merge_annotate_MT.config | 11 +++++ modules.json | 5 +++ modules/nf-core/hmtnote/annotate/main.nf | 45 +++++++++++++++++++ modules/nf-core/hmtnote/annotate/meta.yml | 41 +++++++++++++++++ .../local/mitochondria/merge_annotate_MT.nf | 7 ++- 6 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/hmtnote/annotate/main.nf create mode 100644 modules/nf-core/hmtnote/annotate/meta.yml diff --git a/CITATIONS.md b/CITATIONS.md index b4bc88d1..80e78ee8 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -56,6 +56,10 @@ > Weissensteiner H, Pacher D, Kloss-Brandstätter A, et al. HaploGrep 2: mitochondrial haplogroup classification in the era of high-throughput sequencing. Nucleic Acids Res. 2016;44(W1):W58-W63. doi:10.1093/nar/gkw233 +- [Hmtnote](https://doi.org/10.1101/600619) + + > Preste R, Clima R, Attimonelli M. Human mitochondrial variant annotation with HmtNote. bioRxiv 600619; doi:10.1101/600619 + - [Manta](https://academic.oup.com/bioinformatics/article/32/8/1220/1743909?login=true) > Chen X, Schulz-Trieglaff O, Shaw R, et al. Manta: rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics. 2016;32(8):1220-1222. doi:10.1093/bioinformatics/btv710 diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index d62cf73c..d7c7c7e7 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -70,6 +70,17 @@ process { ] } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_ANNOTATE' { + 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 } + ] + } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { ext.prefix = { "${meta.id}_haplogrep" } publishDir = [ diff --git a/modules.json b/modules.json index 981605d8..f7c5ca45 100644 --- a/modules.json +++ b/modules.json @@ -180,6 +180,11 @@ "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, + "hmtnote/annotate": { + "branch": "master", + "git_sha": "a746b933e61f43f8932aa2f867d5ec7f0ded352b", + "installed_by": ["modules"] + }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", diff --git a/modules/nf-core/hmtnote/annotate/main.nf b/modules/nf-core/hmtnote/annotate/main.nf new file mode 100644 index 00000000..d523d047 --- /dev/null +++ b/modules/nf-core/hmtnote/annotate/main.nf @@ -0,0 +1,45 @@ +process HMTNOTE_ANNOTATE { + tag "$meta.id" + label 'process_low' + + conda "bioconda::hmtnote=0.7.2" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/hmtnote:0.7.2--pyhdfd78af_1': + 'biocontainers/hmtnote:0.7.2--pyhdfd78af_1' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*_annotated.vcf"), 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}" + + """ + hmtnote \\ + annotate \\ + $vcf \\ + ${prefix}_annotated.vcf \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) + END_VERSIONS + """ + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_annotated.vcf + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) + END_VERSIONS + """ +} diff --git a/modules/nf-core/hmtnote/annotate/meta.yml b/modules/nf-core/hmtnote/annotate/meta.yml new file mode 100644 index 00000000..44cf88ca --- /dev/null +++ b/modules/nf-core/hmtnote/annotate/meta.yml @@ -0,0 +1,41 @@ +name: hmtnote_annotate +description: Human mitochondrial variants annotation using HmtVar. Contains .plk file with annotation, so can be run offline +keywords: + - hmtnote + - mitochondria + - annotation +tools: + - hmtnote: + description: Human mitochondrial variants annotation using HmtVar. + homepage: https://github.com/robertopreste/HmtNote + documentation: https://hmtnote.readthedocs.io/en/latest/usage.html + + doi: "10.1101/600619" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + - vcf: + type: file + description: vcf file + pattern: "*.vcf" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: annotated vcf + pattern: "*_annotated.vcf" + +authors: + - "@sysbiocoder" diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 6e3db396..38d5dab9 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -14,6 +14,7 @@ include { ENSEMBLVEP as ENSEMBLVEP_MT } from '../../.. 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 { HMTNOTE_ANNOTATE as HMTNOTE_ANNOTATE } from '../../../modules/nf-core/hmtnote/annotate/main' workflow MERGE_ANNOTATE_MT { take: @@ -106,7 +107,10 @@ workflow MERGE_ANNOTATE_MT { 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) VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) - ZIP_TABIX_VCFANNO(VCFANNO_MT.out.vcf) + + // HMTNOTE ANNOTATE + HMTNOTE_ANNOTATE(VCFANNO_MT.out.vcf) + ZIP_TABIX_VCFANNO(HMTNOTE_ANNOTATE.out.vcf) // Prepare output ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } @@ -122,6 +126,7 @@ workflow MERGE_ANNOTATE_MT { ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.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(HMTNOTE_ANNOTATE.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) emit: 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 1213/1921] 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 1214/1921] 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 4940347018d889278ddf20466abd1bf1cb626de9 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 29 May 2023 12:28:36 +0200 Subject: [PATCH 1215/1921] Update subworkflows/local/mitochondria/merge_annotate_MT.nf Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- 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 38d5dab9..1ca748a7 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -110,7 +110,7 @@ workflow MERGE_ANNOTATE_MT { // HMTNOTE ANNOTATE HMTNOTE_ANNOTATE(VCFANNO_MT.out.vcf) - ZIP_TABIX_VCFANNO(HMTNOTE_ANNOTATE.out.vcf) + ZIP_TABIX_HMTNOTE(HMTNOTE_ANNOTATE.out.vcf) // Prepare output ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } From b1bbe480fa445b6462f8bafb53fc41e09c147aea Mon Sep 17 00:00:00 2001 From: Lucpen Date: Mon, 29 May 2023 12:28:43 +0200 Subject: [PATCH 1216/1921] Update subworkflows/local/mitochondria/merge_annotate_MT.nf Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- 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 1ca748a7..45785476 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -13,7 +13,7 @@ include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../.. 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 { 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' workflow MERGE_ANNOTATE_MT { From 5a2bf6ea97d56bbd888ed1cd43aaebe6856bff58 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Mon, 29 May 2023 12:31:12 +0200 Subject: [PATCH 1217/1921] feat fix line --- subworkflows/local/mitochondria/merge_annotate_MT.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 45785476..16eb4438 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -113,8 +113,8 @@ workflow MERGE_ANNOTATE_MT { ZIP_TABIX_HMTNOTE(HMTNOTE_ANNOTATE.out.vcf) // Prepare output - ch_vcf_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } - ch_tbi_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } + ch_vcf_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } + ch_tbi_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") From 5efb2e3c488073ac40641c037a3ff615eb05d4c2 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Mon, 29 May 2023 13:57:15 +0200 Subject: [PATCH 1218/1921] fix naming --- conf/modules/merge_annotate_MT.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index d7c7c7e7..367fbe7c 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -60,8 +60,8 @@ process { ].join(' ') } - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_VCFANNO' { - ext.prefix = { "${meta.id}_vep_vcfanno_mt" } + withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_HMTNOTE' { + ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } publishDir = [ path: { "${params.outdir}/annotate_mt" }, mode: params.publish_dir_mode, From 6f0c5133930b099f2b696c3936595c4e547f88b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 May 2023 16:07:28 +0200 Subject: [PATCH 1219/1921] update workflow --- docs/usage.md | 3 ++- workflows/raredisease.nf | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 32bcaee8..8e76910f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -213,9 +213,10 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl | Mandatory | Optional | | -------------------------- | ------------------ | | genome | reduced_penetrance | -| svdb_query_dbs1 | score_config_sv | +| svdb_query_dbs1 | | | vep_cache_version | vep_filters | | vep_cache | | +| score_config_sv | | 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). diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 000e973f..6ab05e3e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -73,11 +73,12 @@ def mandatoryParams = [ ] if (!params.skip_snv_annotation) { - mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version"] + mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version", + "gnomad_af", "score_config_snv"] } if (!params.skip_sv_annotation) { - mandatoryParams += ["genome", "svdb_query_dbs", "vep_cache", "vep_cache_version"] + mandatoryParams += ["genome", "svdb_query_dbs", "vep_cache", "vep_cache_version", "score_config_sv"] } if (!params.skip_mt_analysis) { 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 1220/1921] 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 1221/1921] 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 8cc189a738d99e947c71bf82eb489025be56c2f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Tue, 30 May 2023 09:51:05 +0200 Subject: [PATCH 1222/1921] Fix documentation string for VEP cache version --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f568a865..3da8d7be 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -495,7 +495,7 @@ "vep_cache_version": { "type": "integer", "default": "107", - "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", + "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", "fa_icon": "fas fa-book", "enum": [107] } From b741e6d42830084f3caad1eb91dd64ff17de964d Mon Sep 17 00:00:00 2001 From: EmmaCAndersson Date: Tue, 30 May 2023 10:41:15 +0200 Subject: [PATCH 1223/1921] 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 1224/1921] 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 1225/1921] 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 1226/1921] Retry the test From 90d8956abe0960056f90e119b01e4f485657c457 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Jun 2023 14:04:56 +0200 Subject: [PATCH 1227/1921] Update CHANGELOG.md [skip ci] --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23a719c8..c7e7df70 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 - [2023-03-31] +## v1.0.0 - [2023-06-01] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. @@ -18,4 +18,4 @@ Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co - SNV annotation with bcftools roh, vcfanno, and vep - 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 +- Call copy number variants in the SMN gene using SMNCopyNumberCallerx From ae36d769f13c92709b3e53c9f2f80b2f11ab7fd7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Jun 2023 14:09:54 +0200 Subject: [PATCH 1228/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7e7df70..eabbc201 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,4 +18,4 @@ Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co - SNV annotation with bcftools roh, vcfanno, and vep - SV annotation with SVDB query and vep - Separate workflow for analysing and annotating mitochondrial variants -- Call copy number variants in the SMN gene using SMNCopyNumberCallerx +- Call copy number variants in the SMN gene using SMNCopyNumberCaller 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 1229/1921] 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 1230/1921] 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 1231/1921] 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 1232/1921] 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 a37f28a050f455fc35df594bba3a7a196b773250 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 1233/1921] 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 2445c7b56a626752fb3ed8e31bd9e190a27d2a4e 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 1234/1921] 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 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 1235/1921] 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 1236/1921] 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 1237/1921] 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 1238/1921] 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 1239/1921] 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 1240/1921] 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 1241/1921] 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 1242/1921] 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 1243/1921] 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 1244/1921] 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 1245/1921] 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. +

Yf*O7e^!FIFr{mBZVq-%^YWv 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

+ +### 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 1246/1921] 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 1247/1921] 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 1248/1921] 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 1249/1921] 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 1250/1921] 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 1251/1921] 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 1252/1921] 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 1253/1921] 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 1254/1921] 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 1255/1921] 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 1256/1921] 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 1257/1921] 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 1258/1921] 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 1259/1921] 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 1260/1921] 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 1261/1921] 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 1262/1921] 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 1263/1921] 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 1264/1921] 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 1265/1921] 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 1266/1921] 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 1267/1921] 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 1268/1921] 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 1269/1921] 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 1270/1921] 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 1271/1921] 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 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 1272/1921] 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 1273/1921] 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 1274/1921] 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 1275/1921] 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 1276/1921] 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 1277/1921] 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 1278/1921] 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 1279/1921] 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 1280/1921] 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 1281/1921] 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 1282/1921] 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 1283/1921] 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 1284/1921] 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 1285/1921] 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 1286/1921] 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 1287/1921] 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 1288/1921] 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 1289/1921] 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 1290/1921] 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 1291/1921] 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 1292/1921] 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 1293/1921] 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` From 4e1e8dc80a46a84de2a08b151cbe4181f8231e83 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jul 2023 15:37:54 +0200 Subject: [PATCH 1294/1921] bumpversion on dev --- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 8388320b..73191ec7 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 9faa8055..185940df 100644 --- a/nextflow.config +++ b/nextflow.config @@ -271,7 +271,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '1.1.0' + version = '1.2.0dev' doi = '' } From d0065c8ccabca8597d12e19fc3d573095be68a95 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jul 2023 15:42:03 +0200 Subject: [PATCH 1295/1921] update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c92d787..6a5f5f94 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). +## v1.2.0 - Genie [xxxx-xx-xx] + +### `Added` + +### `Fixed` + ## v1.1.0 - Abu [2023-07-21] ### `Added` From b7a795cb89f57508dc3f99e006a48c9b348375d6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jul 2023 15:42:03 +0200 Subject: [PATCH 1296/1921] update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c92d787..6a5f5f94 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). +## v1.2.0 - Genie [xxxx-xx-xx] + +### `Added` + +### `Fixed` + ## v1.1.0 - Abu [2023-07-21] ### `Added` From a917003b921a82821c2add3918b27ee5181f8337 Mon Sep 17 00:00:00 2001 From: Anders Sune Pedersen Date: Sun, 23 Jul 2023 15:27:43 +0200 Subject: [PATCH 1297/1921] Updating tiddit to v3.6.1 --- modules.json | 4 ++-- modules/nf-core/tiddit/cov/main.nf | 6 +++--- modules/nf-core/tiddit/sv/main.nf | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index da9ac319..ef81841f 100644 --- a/modules.json +++ b/modules.json @@ -367,12 +367,12 @@ }, "tiddit/cov": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", "installed_by": ["modules"] }, "ucsc/wigtobigwig": { diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf index 647f35a2..f4b1d675 100644 --- a/modules/nf-core/tiddit/cov/main.nf +++ b/modules/nf-core/tiddit/cov/main.nf @@ -2,10 +2,10 @@ process TIDDIT_COV { tag "$meta.id" label 'process_low' - conda "bioconda::tiddit=3.3.2" + conda "bioconda::tiddit=3.6.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tiddit:3.3.2--py310hc2b7f4b_0' : - 'biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" + 'https://depot.galaxyproject.org/singularity/tiddit:3.6.1--py38h24c8ff8_0' : + 'biocontainers/tiddit:3.6.1--py38h24c8ff8_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 1ebc8565..67a0670d 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -2,10 +2,10 @@ process TIDDIT_SV { tag "$meta.id" label 'process_medium' - conda "bioconda::tiddit=3.3.2" + conda "bioconda::tiddit=3.6.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tiddit:3.3.2--py310hc2b7f4b_0' : - 'biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" + 'https://depot.galaxyproject.org/singularity/tiddit:3.6.1--py38h24c8ff8_0' : + 'biocontainers/tiddit:3.6.1--py38h24c8ff8_0' }" input: tuple val(meta), path(input), path(input_index) From 492f69660842f429d00fc80577b716efea7b34bb Mon Sep 17 00:00:00 2001 From: Anders Sune Pedersen Date: Sun, 23 Jul 2023 15:48:24 +0200 Subject: [PATCH 1298/1921] Updating tiddit to v3.6.1 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c92d787..2d216e05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - 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) +### Changed + +- [#385](https://github.com/nf-core/sarek/pull/385) - Updating tiddit to v3.6.1 + ### 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) From 515c24b102bba19e2097dc11fddfe050952e5280 Mon Sep 17 00:00:00 2001 From: Anders Sune Pedersen Date: Mon, 24 Jul 2023 11:54:50 +0200 Subject: [PATCH 1299/1921] Adding section for v1.2.0dev in changelog --- CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d216e05..51bc1ad6 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). +## v1.2.0dev + +### Changed + +- Tiddit updated to v3.6.1 [#385](https://github.com/nf-core/sarek/pull/385) + ## v1.1.0 - Abu [2023-07-21] ### `Added` @@ -16,10 +22,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - 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) -### Changed - -- [#385](https://github.com/nf-core/sarek/pull/385) - Updating tiddit to v3.6.1 - ### 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) From b270d2c398e6b1c0e1300512a12f84ff70c04278 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jul 2023 21:49:30 +0200 Subject: [PATCH 1300/1921] switch to validation --- assets/schema_input.json | 13 ++++ conf/modules/raredisease.config | 8 -- modules/local/samplesheet_check.nf | 31 -------- nextflow_schema.json | 8 +- pyproject.toml | 2 +- subworkflows/local/check_input.nf | 116 ----------------------------- tower.yml | 2 - workflows/raredisease.nf | 96 +++++++++++++++++++----- 8 files changed, 99 insertions(+), 177 deletions(-) delete mode 100644 modules/local/samplesheet_check.nf delete mode 100644 subworkflows/local/check_input.nf diff --git a/assets/schema_input.json b/assets/schema_input.json index 602ec301..165a1830 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -9,11 +9,19 @@ "properties": { "sample": { "type": "string", + "exists": true, + "meta": ["id"], "pattern": "^\\S+$", "errorMessage": "Sample name must be provided and cannot contain spaces" }, + "lane": { + "type": "number", + "meta": ["lane"] + }, "fastq_1": { "type": "string", + "format": "file-path", + "exists": true, "pattern": "^\\S+\\.f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, @@ -32,16 +40,19 @@ }, "sex": { "type": "string", + "meta": ["sex"], "pattern": "^\\S+$", "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { "type": "string", + "meta": ["phenotype"], "pattern": "^\\S+$", "errorMessage": "Phenotype must be provided and cannot contain spaces" }, "paternal_id": { "errorMessage": "Paternal ID cannot contain spaces", + "meta": ["paternal"], "anyOf": [ { "type": "string", @@ -55,6 +66,7 @@ }, "maternal_id": { "errorMessage": "Maternal ID cannot contain spaces", + "meta": ["maternal"], "anyOf": [ { "type": "string", @@ -68,6 +80,7 @@ }, "case_id": { "type": "string", + "meta": ["case_id"], "pattern": "^\\S+$", "errorMessage": "Case name must be provided and cannot contain spaces" } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index cf5dea7b..845d5a55 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -17,14 +17,6 @@ process { - withName: '.*CHECK_INPUT:SAMPLESHEET_CHECK' { - publishDir = [ - path: { "${params.outdir}/pipeline_info" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: 'CUSTOM_DUMPSOFTWAREVERSIONS' { publishDir = [ path: { "${params.outdir}/pipeline_info" }, diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf deleted file mode 100644 index 4dc269ea..00000000 --- a/modules/local/samplesheet_check.nf +++ /dev/null @@ -1,31 +0,0 @@ -process SAMPLESHEET_CHECK { - tag "$samplesheet" - label 'process_single' - - conda "conda-forge::python=3.8.3" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/python:3.8.3' : - 'biocontainers/python:3.8.3' }" - - input: - path samplesheet - - output: - path '*.csv' , emit: csv - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: // This script is bundled with the pipeline, in nf-core/raredisease/bin/ - """ - check_samplesheet.py \\ - $samplesheet \\ - samplesheet.valid.csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - python: \$(python --version | sed 's/Python //g') - END_VERSIONS - """ -} diff --git a/nextflow_schema.json b/nextflow_schema.json index 5367ada4..0a4039f9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,12 +10,13 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["input", "outdir"], + "required": ["outdir"], "properties": { "input": { "type": "string", "format": "file-path", "exists": true, + "schema": "assets/schema_input.json", "mimetype": "text/csv", "pattern": "^\\S+\\.csv$", "description": "Path to comma-separated file containing information about the samples in the experiment.", @@ -621,18 +622,23 @@ "multiqc_config": { "type": "string", "format": "file-path", + "exists": true, "description": "Custom config file to supply to MultiQC.", "fa_icon": "fas fa-cog", "hidden": true }, "multiqc_logo": { "type": "string", + "format": "file-path", + "exists": true, "description": "Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file", "fa_icon": "fas fa-image", "hidden": true }, "multiqc_methods_description": { "type": "string", + "format": "file-path", + "exists": true, "description": "Custom MultiQC yaml file containing HTML including a methods description.", "fa_icon": "fas fa-cog", "hidden": true diff --git a/pyproject.toml b/pyproject.toml index 0d62beb6..bc01239b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,4 @@ -# Config file for Python. Mostly used to configure linting of bin/check_samplesheet.py with Black. +# Config file for Python. Mostly used to configure linting of bin/*.py with Black. # Should be kept the same as nf-core/tools to avoid fighting with template synchronisation. [tool.black] line-length = 120 diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf deleted file mode 100644 index 3c862df2..00000000 --- a/subworkflows/local/check_input.nf +++ /dev/null @@ -1,116 +0,0 @@ -// -// Check input samplesheet and get read, sample, and case channels -// - -include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' - -workflow CHECK_INPUT { - take: - ch_samplesheet // channel: [mandatory] [ path(csv) ] - - main: - SAMPLESHEET_CHECK ( ch_samplesheet ) - .csv - .splitCsv ( header:true, sep:',' ) - .set { sheet } - - case_info = sheet - .toList() - .map {create_case_channel(it)} - - - reads = sheet.map { row -> [[row.sample.split('_')[0]], row] } - .groupTuple() - .map { meta, rows -> - [rows, rows.size()] - } - .transpose() - .map { row, numLanes -> - create_fastq_channel(row + [num_lanes:numLanes]) - } - - samples = sheet.map { create_samples_channel(it) } - - emit: - case_info // channel: [ val(case_info) ] - reads // channel: [ val(meta), [ path(reads) ] ] - samples // channel: [ val(sample_id), val(sex), val(phenotype), val(paternal_id), val(maternal_id), val(case_id) ] - versions = SAMPLESHEET_CHECK.out.versions // channel: [ path(versions.yml) ] -} - -// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def create_fastq_channel(LinkedHashMap row) { - // create meta map - def meta = [:] - meta.case_id = row.case_id - meta.sex = row.sex - meta.id = row.sample - meta.maternal = row.maternal_id - meta.paternal = row.paternal_id - meta.phenotype = row.phenotype - meta.single_end = row.single_end.toBoolean() - meta.num_lanes = row.num_lanes - meta.read_group = "\'@RG\\tID:"+ row.fastq_1.split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+row.sample.split('_')[0]+"\'" - - - // add path(s) of the fastq file(s) to the meta map - def fastq_meta = [] - if (!file(row.fastq_1).exists()) { - error("ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}") - } - if (meta.single_end) { - fastq_meta = [ meta, [ file(row.fastq_1) ] ] - } else { - if (!file(row.fastq_2).exists()) { - error("ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}") - } - fastq_meta = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] - } - return fastq_meta -} - -// Function to get a list of metadata (e.g. pedigree, case id) from the sample; [ meta ] -def create_samples_channel(LinkedHashMap row) { - def sample = [:] - sample.id = row.sample - sample.sex = row.sex - sample.phenotype = row.phenotype - sample.maternal = row.maternal_id - sample.paternal = row.paternal_id - sample.case_id = row.case_id - - return sample -} - -// 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 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 = 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 -} - diff --git a/tower.yml b/tower.yml index 2d5717b0..2eb333f8 100644 --- a/tower.yml +++ b/tower.yml @@ -1,8 +1,6 @@ reports: multiqc_report.html: display: "MultiQC HTML report" - samplesheet.valid.csv: - display: "Auto-created samplesheet with collated metadata and FASTQ paths" "*.ped": display: "Auto-created pedigree file" mimeType: "text" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e5497222..2c0bec10 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -4,7 +4,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryLog; paramsSummaryMap; fromSamplesheet } from 'plugin/nf-validation' def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) def citation = '\n' + WorkflowMain.citation(workflow) + '\n' @@ -76,9 +76,9 @@ if (missingParamsCount>0) { */ ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config, checkIfExists: true ) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo, checkIfExists: true ) : Channel.empty() -ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath( params.multiqc_config ) : Channel.empty() +ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath( params.multiqc_logo ) : Channel.empty() +ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description ) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -117,7 +117,6 @@ include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/an include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' -include { CHECK_INPUT } from '../subworkflows/local/check_input' include { GENS } from '../subworkflows/local/gens' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { QC_BAM } from '../subworkflows/local/qc_bam' @@ -140,10 +139,41 @@ workflow RAREDISEASE { ch_versions = Channel.empty() - // Initialize input channels + // Initialize read, sample, and case_info channels ch_input = Channel.fromPath(params.input) - CHECK_INPUT (ch_input) - ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) + Channel.fromSamplesheet("input") + .tap { ch_original_input } + .map { meta, fastq1, fastq2 -> meta.id } + .reduce([:]) { counts, sample -> //get counts of each sample in the samplesheet - for groupTuple + counts[sample] = (counts[sample] ?: 0) + 1 + counts + } + .combine( ch_original_input ) + .map { counts, meta, fastq1, fastq2 -> + new_meta = meta + [num_lanes:counts[meta.id], + read_group:"\'@RG\\tID:"+ fastq1.toString().split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+meta.id+"\'"] + if (!fastq2) { + return [ new_meta + [ single_end:true ], [ fastq1 ] ] + } else { + return [ new_meta + [ single_end:false ], [ fastq1, fastq2 ] ] + } + } + .tap{ ch_input_counts } + .map { meta, fastqs -> fastqs } + .reduce([:]) { counts, fastqs -> //get line number for each row to construct unique sample ids + counts[fastqs] = counts.size() + 1 + return counts + } + .combine( ch_input_counts ) + .map { lineno, meta, fastqs -> //append line number to sampleid + new_meta = meta + [id:meta.id+"_T"+lineno[fastqs]] + return [ new_meta, fastqs ] + } + .set { ch_reads } + + ch_samples = ch_reads.map { meta, fastqs -> meta} + ch_pedfile = ch_samples.toList().map { makePed(it) } + ch_case_info = ch_samples.toList().map { create_case_channel(it) } // Initialize file channels for PREPARE_REFERENCES subworkflow ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() @@ -239,8 +269,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) } // SV caller priority if (params.skip_cnv_calling) { @@ -250,7 +278,7 @@ workflow RAREDISEASE { } // Input QC - FASTQC (CHECK_INPUT.out.reads) + FASTQC (ch_reads) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // CREATE CHROMOSOME BED AND INTERVALS @@ -265,7 +293,7 @@ workflow RAREDISEASE { // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( - CHECK_INPUT.out.reads, + ch_reads, ch_genome_fasta, ch_genome_fai, ch_genome_bwaindex, @@ -296,7 +324,7 @@ workflow RAREDISEASE { CALL_REPEAT_EXPANSIONS ( ch_mapped.bam_bai, ch_variant_catalog, - CHECK_INPUT.out.case_info, + ch_case_info, ch_genome_fasta, ch_genome_fai ) @@ -313,7 +341,7 @@ workflow RAREDISEASE { .toList() .set { ch_bai_list } - CHECK_INPUT.out.case_info + ch_case_info .combine(ch_bam_list) .combine(ch_bai_list) .set { ch_bams_bais } @@ -332,7 +360,7 @@ workflow RAREDISEASE { ch_dbsnp_tbi, ch_call_interval, ch_ml_model, - CHECK_INPUT.out.case_info + ch_case_info ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) @@ -343,7 +371,7 @@ workflow RAREDISEASE { ch_genome_bwaindex, ch_genome_fasta, ch_genome_fai, - CHECK_INPUT.out.case_info, + ch_case_info, ch_target_bed, ch_genome_dictionary, ch_svcaller_priority, @@ -370,7 +398,7 @@ workflow RAREDISEASE { file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), - CHECK_INPUT.out.case_info, + ch_case_info, ch_genome_dictionary ) ch_versions = ch_versions.mix(GENS.out.versions) @@ -433,7 +461,7 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - CHECK_INPUT.out.case_info + ch_case_info ) ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) @@ -598,6 +626,38 @@ def makePed(samples) { return outfile } +// 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 probands = [] + def upd_children = [] + def father = "" + def mother = "" + + for (item in rows) { + if (item.phenotype == "2") { + probands.add(item.id.split("_T")[0]) + } + if ( (item.paternal!="0") && (item.paternal!="") && (item.maternal!="0") && (item.maternal!="") ) { + upd_children.add(item.id.split("_T")[0]) + } + if ( (item.paternal!="0") && (item.paternal!="") ) { + father = item.paternal + } + if ( (item.maternal!="0") && (item.maternal!="") ) { + mother = item.maternal + } + } + + 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 +} + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ THE END From e55102ad929a3ff628fe816a6ddf1d6b84ad7f32 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jul 2023 21:57:32 +0200 Subject: [PATCH 1301/1921] changelog update --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d4b086b..8d000c78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) + ### `Changed` -- Tiddit updated to v3.6.1 [#385](https://github.com/nf-core/sarek/pull/385) +- Tiddit updated to v3.6.1 [#385](https://github.com/nf-core/raredisease/pull/385) ### `Fixed` From 562d97bdcb75cb2da0be9577ea8a5e7ac680023f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jul 2023 22:00:37 +0200 Subject: [PATCH 1302/1921] update lint --- .nf-core.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.nf-core.yml b/.nf-core.yml index 321436fe..93aadae1 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -5,4 +5,5 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - assets/multiqc_config.yaml - .github/workflows/linting.yml + - pyproject.toml repository_type: pipeline From 6c3e41549eee8b8f0726ee19d532a470e8f515c6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Jul 2023 17:42:23 +0200 Subject: [PATCH 1303/1921] fix bcftools errors --- conf/modules/merge_annotate_MT.config | 1 + conf/modules/raredisease.config | 3 +-- lib/WorkflowRaredisease.groovy | 19 +++++++++++++++++++ .../local/mitochondria/merge_annotate_MT.nf | 6 +++++- workflows/raredisease.nf | 15 ++++----------- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index 027c6805..ae2601b6 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -36,6 +36,7 @@ process { } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { + ext.args = '--output-type z' ext.prefix = { "${meta.id}_merge_mt" } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index cf5dea7b..c2d84968 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -71,9 +71,8 @@ process { // process { - withName: '.*RAREDISEASE:BCFTOOLS_CONCAT' { + withName: '.*RAREDISEASE:GATK4_MERGEVCFS' { ext.prefix = { "${meta.id}_mito_genome_merged" } - ext.args = " -a " } } diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index 99e5f500..9abe7dcb 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -16,6 +16,25 @@ class WorkflowRaredisease { } + // + // Replace spaces in vcf INFO fields with underscore + // + public static String replaceSpacesInInfoColumn(vcf_file, parent_dir, base_name) { + def outfile = new File(parent_dir + '/' + base_name + '_formatted.vcf') + def writer = outfile.newWriter() + vcf_file.eachLine { line -> + if (line.startsWith("#")) { + writer << line + "\n" + } else { + def split_str = line.tokenize("\t") + split_str[7] = split_str.getAt(7).replaceAll(" ","_") + writer << split_str.join("\t") + "\n" + } + } + writer.close() + return outfile + } + // // Get workflow summary for MultiQC // diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 8a78ed27..43edd93b 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -143,7 +143,11 @@ workflow MERGE_ANNOTATE_MT { // HMTNOTE ANNOTATE HMTNOTE_ANNOTATE(VCFANNO_MT.out.vcf) - ZIP_TABIX_HMTNOTE(HMTNOTE_ANNOTATE.out.vcf) + HMTNOTE_ANNOTATE.out.vcf.map{meta, vcf -> + return [meta, WorkflowRaredisease.replaceSpacesInInfoColumn(vcf, vcf.parent.toString(), vcf.baseName)] + } + .set { ch_hmtnote_reformatted } + ZIP_TABIX_HMTNOTE(ch_hmtnote_reformatted) // Prepare output ch_vcf_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e5497222..5bff2aeb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -97,7 +97,7 @@ include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_ // MODULE: Installed directly from nf-core/modules // -include { BCFTOOLS_CONCAT } from '../modules/nf-core/bcftools/concat/main' +include { GATK4_MERGEVCFS } from '../modules/nf-core/gatk4/mergevcfs/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { GATK4_SELECTVARIANTS } from '../modules/nf-core/gatk4/selectvariants/main' @@ -483,16 +483,9 @@ workflow RAREDISEASE { .groupTuple() .set { ch_merged_vcf } - ANNOTATE_SNVS.out.tbi - .concat(ANALYSE_MT.out.tbi) - .groupTuple() - .set { ch_merged_tbi } - - ch_merged_vcf.join(ch_merged_tbi, failOnMismatch:true, failOnDuplicate:true).set {ch_concat_in} - - BCFTOOLS_CONCAT (ch_concat_in) - ch_snv_annotate = BCFTOOLS_CONCAT.out.vcf - ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) + GATK4_MERGEVCFS (ch_merged_vcf, [[],[]]) + ch_snv_annotate = GATK4_MERGEVCFS.out.vcf + ch_versions = ch_versions.mix(GATK4_MERGEVCFS.out.versions) } ANN_CSQ_PLI_SNV ( From 8d82f2e07cd5fbbe378fce4795c7401dd7ae5da5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Jul 2023 17:46:37 +0200 Subject: [PATCH 1304/1921] bump version --- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 8388320b..ebb33ec8 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 9faa8055..6ff7e6ce 100644 --- a/nextflow.config +++ b/nextflow.config @@ -271,7 +271,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '1.1.0' + version = '1.1.1' doi = '' } From 914cb742009d6727ce9e0fb217450f0d78254a6a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Jul 2023 17:59:09 +0200 Subject: [PATCH 1305/1921] update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c92d787..ad0966ec 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). +## v1.1.1 - Abu (Patch) [xxxx-xx-xx] + +### `Fixed` + +- Avoids errors thrown by bcftools concat due to sample names in input vcf files not being in same order [#388](https://github.com/nf-core/raredisease/pull/388) + ## v1.1.0 - Abu [2023-07-21] ### `Added` From f2dcba3ab5631c2cf79b68094e90b6032f78e0dc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jul 2023 09:48:56 +0200 Subject: [PATCH 1306/1921] pass seq dict to mergevcfs --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5bff2aeb..7d01dd2e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -483,7 +483,7 @@ workflow RAREDISEASE { .groupTuple() .set { ch_merged_vcf } - GATK4_MERGEVCFS (ch_merged_vcf, [[],[]]) + GATK4_MERGEVCFS (ch_merged_vcf, ch_genome_dictionary) ch_snv_annotate = GATK4_MERGEVCFS.out.vcf ch_versions = ch_versions.mix(GATK4_MERGEVCFS.out.versions) } From 5c89cd18ba5a9d2e2d384dd47a567c32fd7b9211 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jul 2023 10:37:36 +0200 Subject: [PATCH 1307/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad0966ec..061bab78 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.1 - Abu (Patch) [xxxx-xx-xx] +## v1.1.1 - Abu (Patch) [2023-07-26] ### `Fixed` From f8a7ee8d5c1accf1ffa0f9afac7a13f0291089a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Wed, 26 Jul 2023 10:44:37 +0200 Subject: [PATCH 1308/1921] Add documentation about running offline --- docs/usage.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index 5b7f7aa6..96fa08a4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -393,3 +393,33 @@ We recommend adding the following line to your environment to limit this (typica ```bash NXF_OPTS='-Xms1g -Xmx4g' ``` + +### Running the pipeline without Internet access + +The pipeline and container images can be downloaded using [nf-core tools](https://nf-co.re/docs/usage/offline). +Here is an example command to download pipeline version 1.1.0 with singularity images: + +``` +nf-core download \ + --container singularity \ + --compress none \ + --revision 1.1.0 \ + raredisease +``` +For running offline, you of course have to make all the reference data available locally, and specify `--fasta`, etc., see [above](#reference-files-and-parameters). + +Contrary to the paragraph about Nextflow on the nf-core tools page, it is not possible to use the "-all" packaged version of Nextflow. The online version of nextflow is necessary to support the nextflow plugins used for this pipeline. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-validation plugin explicitly: + +``` +./nextflow plugin install nf-validation +``` + +Now you can transfer the `nextflow` binary as well as its directory `$HOME/.nextflow` to the system without Internet access, and use it there. It is necessary to use an explicit version of `nf-validation` offline, or Nextflow will check for the most recent version online. Find the version of nf-validation you downloaded in `$HOME/.nextflow/plugins`, then specify this version for `nf-validation` in your configuration file: + +``` +plugins { + // Set the plugin version explicitly, otherwise nextflow will look for the newest version online. + id 'nf-validation@0.3.1' +} +``` +This should go in your Nexflow confgiguration file, specified with `-c ` when running the pipeline. From d6e7394f209ccbdb6f62da15990a860d98687860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Wed, 26 Jul 2023 12:20:29 +0200 Subject: [PATCH 1309/1921] Use the correct name for new container system --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 96fa08a4..c6ca7078 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -401,7 +401,7 @@ Here is an example command to download pipeline version 1.1.0 with singularity i ``` nf-core download \ - --container singularity \ + --container-system singularity \ --compress none \ --revision 1.1.0 \ raredisease From 7bdd5d862a0a7c7409b91d3965e24deb8c824538 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Wed, 26 Jul 2023 12:29:58 +0200 Subject: [PATCH 1310/1921] Correct typo --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index c6ca7078..e989218f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -422,4 +422,4 @@ plugins { id 'nf-validation@0.3.1' } ``` -This should go in your Nexflow confgiguration file, specified with `-c ` when running the pipeline. +This should go in your Nextflow confgiguration file, specified with `-c ` when running the pipeline. From f3deb8d979d915007d20106bffd1845ae6d41ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Wed, 26 Jul 2023 12:35:33 +0200 Subject: [PATCH 1311/1921] Point to the documentation to download Nextflow --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index e989218f..95ccf5ac 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -408,7 +408,7 @@ nf-core download \ ``` For running offline, you of course have to make all the reference data available locally, and specify `--fasta`, etc., see [above](#reference-files-and-parameters). -Contrary to the paragraph about Nextflow on the nf-core tools page, it is not possible to use the "-all" packaged version of Nextflow. The online version of nextflow is necessary to support the nextflow plugins used for this pipeline. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-validation plugin explicitly: +Contrary to the paragraph about [Nextflow](https://nf-co.re/docs/usage/offline#nextflow) on the page linked above, it is not possible to use the "-all" packaged version of Nextflow. The online version of nextflow is necessary to support the nextflow plugins used for this pipeline. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-validation plugin explicitly: ``` ./nextflow plugin install nf-validation From eaa4ca53174e02185d2f467977be4e5c8c9e7a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Wed, 26 Jul 2023 13:35:10 +0200 Subject: [PATCH 1312/1921] Removed the example and rephrased for clarity --- docs/usage.md | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 95ccf5ac..06ce8cd6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -396,19 +396,9 @@ NXF_OPTS='-Xms1g -Xmx4g' ### Running the pipeline without Internet access -The pipeline and container images can be downloaded using [nf-core tools](https://nf-co.re/docs/usage/offline). -Here is an example command to download pipeline version 1.1.0 with singularity images: +The pipeline and container images can be downloaded using [nf-core tools](https://nf-co.re/docs/usage/offline). For running offline, you of course have to make all the reference data available locally, and specify `--fasta`, etc., see [above](#reference-files-and-parameters). -``` -nf-core download \ - --container-system singularity \ - --compress none \ - --revision 1.1.0 \ - raredisease -``` -For running offline, you of course have to make all the reference data available locally, and specify `--fasta`, etc., see [above](#reference-files-and-parameters). - -Contrary to the paragraph about [Nextflow](https://nf-co.re/docs/usage/offline#nextflow) on the page linked above, it is not possible to use the "-all" packaged version of Nextflow. The online version of nextflow is necessary to support the nextflow plugins used for this pipeline. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-validation plugin explicitly: +Contrary to the paragraph about [Nextflow](https://nf-co.re/docs/usage/offline#nextflow) on the page linked above, it is not possible to use the "-all" packaged version of Nextflow for this pipeline. The online version of Nextflow is necessary to support the necessary nextflow plugins. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-validation plugin explicitly: ``` ./nextflow plugin install nf-validation From 6304e718d3c5d9641d6db0cdb31c3c1d9e4ab4cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Wed, 26 Jul 2023 13:58:00 +0200 Subject: [PATCH 1313/1921] Spelling configuration Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- docs/usage.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/usage.md b/docs/usage.md index 06ce8cd6..70790df4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -412,4 +412,5 @@ plugins { id 'nf-validation@0.3.1' } ``` + This should go in your Nextflow confgiguration file, specified with `-c ` when running the pipeline. From fd521c5639f0eab7907cc8f6162aa8339285b18b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jul 2023 15:17:32 +0200 Subject: [PATCH 1314/1921] version --- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index ebb33ec8..73191ec7 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 6ff7e6ce..1b503202 100644 --- a/nextflow.config +++ b/nextflow.config @@ -271,7 +271,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '1.1.1' + version = '1.2.0dev' doi = '' } From de8b2cc3d88e0059f6afce22a42fcce72fc4d2f1 Mon Sep 17 00:00:00 2001 From: Adam Talbot Date: Thu, 27 Jul 2023 11:10:53 +0100 Subject: [PATCH 1315/1921] Update GATK4 container to correct URI --- CHANGELOG.md | 2 ++ modules.json | 4 ++-- modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf | 2 +- modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de47d466..7399915b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Invalid GATK4 container which caused incorrect singularity downloads with nf-core download [nf-core/modules #3668](https://github.com/nf-core/modules/issues/3668) + ## v1.1.1 - Abu (Patch) [2023-07-26] ### `Fixed` diff --git a/modules.json b/modules.json index ef81841f..38548e9b 100644 --- a/modules.json +++ b/modules.json @@ -117,7 +117,7 @@ }, "gatk4/determinegermlinecontigploidy": { "branch": "master", - "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", + "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { @@ -152,7 +152,7 @@ }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "39ca55cc30514169f8420162bafe4ecf673f4b9a", + "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", "installed_by": ["modules"] }, "gatk4/preprocessintervals": { diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf index 593c8968..407cc34c 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf @@ -4,7 +4,7 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { label 'process_single' //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 - container "quay.io/nf-core/gatk:4.4.0.0" //Biocontainers is missing a package + container "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) { diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index 8faf0121..d1a03fc1 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 "quay.io/nf-core/gatk:4.4.0.0" //Biocontainers is missing a package + container "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) { From a1c7ed2affc9797fe68d353db09a75296357b86c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 31 Jul 2023 15:36:50 +0200 Subject: [PATCH 1316/1921] update markduplicates default prefix --- conf/modules/align.config | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/modules/align.config b/conf/modules/align.config index 249dc81e..54dae858 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -19,8 +19,9 @@ process{ } withName: '.*ALIGN:SAMTOOLS_VIEW' { - ext.args = { '--output-fmt cram --write-index' } - ext.when = params.save_mapped_as_cram + ext.args = { '--output-fmt cram --write-index' } + ext.prefix = { "${meta.id}_sorted_md" } + ext.when = params.save_mapped_as_cram publishDir = [ path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, From 7817473c5efa4ea841f8c89ac731a8e0d059b632 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 31 Jul 2023 15:49:27 +0200 Subject: [PATCH 1317/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7399915b..ab9e831b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` - Invalid GATK4 container which caused incorrect singularity downloads with nf-core download [nf-core/modules #3668](https://github.com/nf-core/modules/issues/3668) +- Make the default cram prefix same as markduplicates prefix [#392](https://github.com/nf-core/raredisease/pull/392) ## v1.1.1 - Abu (Patch) [2023-07-26] From ac0e9a529de22d0401c3e965e31aff6129b84560 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:14:43 +0200 Subject: [PATCH 1318/1921] sort SVs --- conf/modules/rank_variants.config | 14 +++++- modules.json | 10 +++++ modules/nf-core/bcftools/sort/main.nf | 60 ++++++++++++++++++++++++++ modules/nf-core/bcftools/sort/meta.yml | 43 ++++++++++++++++++ modules/nf-core/tabix/bgzip/main.nf | 54 +++++++++++++++++++++++ modules/nf-core/tabix/bgzip/meta.yml | 47 ++++++++++++++++++++ subworkflows/local/rank_variants.nf | 16 ++++--- 7 files changed, 237 insertions(+), 7 deletions(-) create mode 100644 modules/nf-core/bcftools/sort/main.nf create mode 100644 modules/nf-core/bcftools/sort/meta.yml create mode 100644 modules/nf-core/tabix/bgzip/main.nf create mode 100644 modules/nf-core/tabix/bgzip/meta.yml diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 33a34733..1eee3385 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -37,14 +37,20 @@ process { ext.prefix = { "${meta.id}_ranked_sv" } } - withName: '.*RANK_VARIANTS_SV:TABIX_BGZIPTABIX' { + withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { + ext.args = "--output-type z" ext.prefix = { "${meta.id}_ranked_sv" } + ext.when = true publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + + withName: '.*RANK_VARIANTS_SV:TABIX_BGZIP' { + ext.when = false + } } // @@ -77,7 +83,11 @@ process { ext.prefix = { "${meta.id}_ranked_snv" } } - withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIPTABIX' { + withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { + ext.when = false + } + + withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIP' { ext.prefix = { "${meta.id}_ranked_snv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, diff --git a/modules.json b/modules.json index 38548e9b..dbdc3daf 100644 --- a/modules.json +++ b/modules.json @@ -40,6 +40,11 @@ "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, + "bcftools/sort": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": ["modules"] + }, "bcftools/view": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", @@ -355,6 +360,11 @@ "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, + "tabix/bgzip": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": ["modules"] + }, "tabix/bgziptabix": { "branch": "master", "git_sha": "591b71642820933dcb3c954c934b397bd00d8e5e", diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf new file mode 100644 index 00000000..ef41fd25 --- /dev/null +++ b/modules/nf-core/bcftools/sort/main.nf @@ -0,0 +1,60 @@ +process BCFTOOLS_SORT { + tag "$meta.id" + label 'process_medium' + + 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': + 'biocontainers/bcftools:1.17--haef29d1_0' }" + + input: + tuple val(meta), path(vcf) + + 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 ?: '--output-type z' + 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" + + """ + bcftools \\ + sort \\ + --output ${prefix}.${extension} \\ + $args \\ + $vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '--output-type z' + 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 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/sort/meta.yml b/modules/nf-core/bcftools/sort/meta.yml new file mode 100644 index 00000000..0c244a48 --- /dev/null +++ b/modules/nf-core/bcftools/sort/meta.yml @@ -0,0 +1,43 @@ +name: bcftools_sort +description: Sorts VCF files +keywords: + - sorting + - VCF + - variant calling +tools: + - sort: + description: Sort VCF files by coordinates. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: http://www.htslib.org/doc/bcftools.html + tool_dev_url: https://github.com/samtools/bcftools + doi: "10.1093/bioinformatics/btp352" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: The VCF/BCF file to be sorted + pattern: "*.{vcf.gz,vcf,bcf}" + +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: Sorted VCF file + pattern: "*.{vcf.gz}" + +authors: + - "@Gwennid" diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf new file mode 100644 index 00000000..8c47d9e2 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -0,0 +1,54 @@ +process TABIX_BGZIP { + tag "$meta.id" + label 'process_single' + + 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' : + 'biocontainers/tabix:1.11--hdfd78af_0' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("${output}") , emit: output + tuple val(meta), path("${output}.gzi"), emit: gzi, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + in_bgzip = ["gz", "bgz", "bgzf"].contains(input.getExtension()) + extension = in_bgzip ? input.getBaseName().tokenize(".")[-1] : input.getExtension() + output = in_bgzip ? "${prefix}.${extension}" : "${prefix}.${extension}.gz" + command = in_bgzip ? '-d' : '' + // Name the index according to $prefix, unless a name has been requested + if ((args.matches("(^| )-i\\b") || args.matches("(^| )--index(\$| )")) && !args.matches("(^| )-I\\b") && !args.matches("(^| )--index-name\\b")) { + args = args + " -I ${output}.gzi" + } + """ + bgzip $command -c $args -@${task.cpus} $input > ${output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + in_bgzip = ["gz", "bgz", "bgzf"].contains(input.getExtension()) + output = in_bgzip ? input.getBaseName() : "${prefix}.${input.getExtension()}.gz" + + """ + touch ${output} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/tabix/bgzip/meta.yml b/modules/nf-core/tabix/bgzip/meta.yml new file mode 100644 index 00000000..c3ea2107 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/meta.yml @@ -0,0 +1,47 @@ +name: tabix_bgzip +description: Compresses/decompresses files +keywords: + - compress + - decompress + - bgzip + - tabix +tools: + - bgzip: + description: | + Bgzip compresses or decompresses files in a similar manner to, and compatible with, gzip. + homepage: https://www.htslib.org/doc/tabix.html + documentation: http://www.htslib.org/doc/bgzip.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: file to compress or to decompress +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - output: + type: file + description: Output compressed/decompressed file + pattern: "*." + - gzi: + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" + - "@nvnieuwk" diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index e274de33..3049626f 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -6,7 +6,8 @@ include { GENMOD_ANNOTATE } from '../../modules/nf-core/genmod/annotate/main' include { GENMOD_MODELS } from '../../modules/nf-core/genmod/models/main' include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' -include { TABIX_BGZIPTABIX } from '../../modules/nf-core/tabix/bgziptabix/main' +include { BCFTOOLS_SORT } from '../../modules/nf-core/bcftools/sort/main' +include { TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip/main' workflow RANK_VARIANTS { @@ -27,15 +28,20 @@ workflow RANK_VARIANTS { GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) - TABIX_BGZIPTABIX (GENMOD_COMPOUND.out.vcf) + BCFTOOLS_SORT(GENMOD_COMPOUND.out.vcf) // SV file needs to be sorted before indexing + + TABIX_BGZIP(GENMOD_COMPOUND.out.vcf) //run only for SNVs + + ch_vcf = TABIX_BGZIP.out.output.mix(BCFTOOLS_SORT.out.vcf) ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) - ch_versions = ch_versions.mix(TABIX_BGZIPTABIX.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_SORT.out.versions) + ch_versions = ch_versions.mix(TABIX_BGZIP.out.versions) emit: - vcf = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, vcf ] }.collect() // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = ch_vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 525d80984a88f9579604c8535d2942b607904fff Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:38:27 +0200 Subject: [PATCH 1319/1921] Update documentation --- docs/usage.md | 2 ++ nextflow_schema.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 5b7f7aa6..02ec085a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -71,6 +71,8 @@ work # Directory containing the Nextflow working files Test profile runs the pipeline with a case containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. +> Note that the default cpu and memory configurations used in raredisease are written keeping the test profile (&dataset, which is tiny) in mind. You should override these values in configs to get it to work on larger datasets. Check the section `custom-configuration` below to know more about how to configure resources for your platform. + ### Updating the pipeline The above command downloads the pipeline from GitHub, caches it, and tests it on the test dataset. When you run the command again, it will fetch the pipeline from cache even if a more recent version of the pipeline is available. To make sure that you're running the latest version of the pipeline, update the cached version of the pipeline by including `-latest` in the command. diff --git a/nextflow_schema.json b/nextflow_schema.json index 0a4039f9..f5216d76 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -310,7 +310,7 @@ "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.", + "help_text": "Should be Stranger's extended JSON as described at https://github.com/Clinical-Genomics/stranger/blob/master/stranger/resources/variant_catalog_grch37.json. This file is used by both ExpansionHunter and Stranger", "fa_icon": "fas fa-file" }, "vcfanno_resources": { From 8f664f8a723ee1734b885d21bf1a56f33831d456 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:41:24 +0200 Subject: [PATCH 1320/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab9e831b..f3b839b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Invalid GATK4 container which caused incorrect singularity downloads with nf-core download [nf-core/modules #3668](https://github.com/nf-core/modules/issues/3668) - Make the default cram prefix same as markduplicates prefix [#392](https://github.com/nf-core/raredisease/pull/392) +- Sort ranked SV vcf before indexing with tabix [#393](https://github.com/nf-core/raredisease/pull/393) ## v1.1.1 - Abu (Patch) [2023-07-26] From 1b0773f81cdd6df6097c2602506a28890d7a3ed5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Aug 2023 18:22:17 +0200 Subject: [PATCH 1321/1921] update configs --- conf/modules/prepare_references.config | 10 +++++----- conf/modules/qc_bam.config | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 7d40508c..ab2b2ccf 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -86,20 +86,20 @@ process { } withName: '.*PREPARE_REFERENCES:TABIX_PT' { - ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } + ext.when = { !params.target_bed.equals(null) && params.target_bed.endsWith(".gz") } } withName: '.*PREPARE_REFERENCES:TABIX_PBT' { - ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } + ext.when = { !params.target_bed.equals(null) && !params.target_bed.endsWith(".gz") } } withName: '.*PREPARE_REFERENCES:GATK_BILT' { - ext.when = { params.target_bed } + ext.when = { !params.target_bed.equals(null) } ext.prefix = { "${meta.id}_target" } } withName: '.*PREPARE_REFERENCES:GATK_ILT' { - ext.when = { params.target_bed } + ext.when = { !params.target_bed.equals(null) } ext.args = { "--PADDING ${params.bait_padding} -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2" } publishDir = [ enabled: false @@ -107,7 +107,7 @@ process { } withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { - ext.when = { params.target_bed } + ext.when = { !params.target_bed.equals("null") } ext.prefix = { "${meta.id}" } } diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 080f988f..86780b72 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.target_bed } + ext.when = { !params.target_bed.equals(null) } ext.prefix = { "${meta.id}_hsmetrics" } } From 8a6c184bf9e465ccbc569bb87ababfff1dc19bd4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Aug 2023 18:33:09 +0200 Subject: [PATCH 1322/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab9e831b..68eac568 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Invalid GATK4 container which caused incorrect singularity downloads with nf-core download [nf-core/modules #3668](https://github.com/nf-core/modules/issues/3668) - Make the default cram prefix same as markduplicates prefix [#392](https://github.com/nf-core/raredisease/pull/392) +- Make target bed file optional for WGS mode (Issue [#375](https://github.com/nf-core/raredisease/issues/375)) [#395](https://github.com/nf-core/raredisease/pull/395) ## v1.1.1 - Abu (Patch) [2023-07-26] From 0b083eee887f88df4fd23c3283226fa842488cae Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Aug 2023 00:53:10 +0200 Subject: [PATCH 1323/1921] fix typo --- conf/modules/prepare_references.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index ab2b2ccf..2532052d 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -107,7 +107,7 @@ process { } withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { - ext.when = { !params.target_bed.equals("null") } + ext.when = { !params.target_bed.equals(null) } ext.prefix = { "${meta.id}" } } From 783bcdac7504df66476f4e7f06b4479af41360c1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Aug 2023 17:18:49 +0200 Subject: [PATCH 1324/1921] update config --- conf/modules/qc_bam.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 080f988f..f0296709 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -52,22 +52,22 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { - ext.when = params.aligner.equals("bwamem2") + ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("bwamem2") } ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { - ext.when = params.aligner.equals("bwamem2") + ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("bwamem2") } ext.prefix = { "${meta.id}_wgsmetrics_y" } } withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { - ext.when = params.aligner.equals("sentieon") + ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { - ext.when = params.aligner.equals("sentieon") + ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics_y" } } } From cb2dfafffc6adcbee260fa5e0d3020c633aef193 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Aug 2023 17:20:20 +0200 Subject: [PATCH 1325/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab9e831b..bb9bc7bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Invalid GATK4 container which caused incorrect singularity downloads with nf-core download [nf-core/modules #3668](https://github.com/nf-core/modules/issues/3668) - Make the default cram prefix same as markduplicates prefix [#392](https://github.com/nf-core/raredisease/pull/392) +- Added constraints to block the pipeline from running CollectWgsMetrics on WES samples [#396](https://github.com/nf-core/raredisease/pull/396) ## v1.1.1 - Abu (Patch) [2023-07-26] From c7828d824c35c27eff043a805e5364ec1fa22a3e Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 7 Aug 2023 17:19:02 +0000 Subject: [PATCH 1326/1921] Updating module for sentieon bwamem --- modules.json | 5 +++ .../sentieon/bwaindex/main.nf} | 32 ++++++++++----- modules/nf-core/sentieon/bwaindex/meta.yml | 41 +++++++++++++++++++ subworkflows/local/prepare_references.nf | 5 +-- 4 files changed, 69 insertions(+), 14 deletions(-) rename modules/{local/sentieon/bwamemindex.nf => nf-core/sentieon/bwaindex/main.nf} (51%) create mode 100644 modules/nf-core/sentieon/bwaindex/meta.yml diff --git a/modules.json b/modules.json index da9ac319..e2c0bb2f 100644 --- a/modules.json +++ b/modules.json @@ -335,6 +335,11 @@ "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", "installed_by": ["modules"] }, + "sentieon/bwaindex": { + "branch": "master", + "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", + "installed_by": ["modules"] + }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/nf-core/sentieon/bwaindex/main.nf similarity index 51% rename from modules/local/sentieon/bwamemindex.nf rename to modules/nf-core/sentieon/bwaindex/main.nf index 4b030975..0dde28d7 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -3,32 +3,32 @@ process SENTIEON_BWAINDEX { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' + container 'nf-core/sentieon:202112.06' input: tuple val(meta), path(fasta) output: - tuple val(meta), path("bwa/"), emit: index - path "versions.yml" , emit: versions + tuple val(meta), path(bwa), emit: index + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "bwa/${task.ext.prefix}" : "bwa/${fasta.baseName}" """ mkdir bwa - if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then - echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon bwa index \\ + sentieon \\ + bwa index \\ $args \\ - -p $prefix \\ + -p bwa/${fasta.baseName} \\ $fasta cat <<-END_VERSIONS > versions.yml @@ -39,9 +39,19 @@ process SENTIEON_BWAINDEX { """ stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } """ mkdir bwa + touch bwa/genome.amb + touch bwa/genome.ann + touch bwa/genome.bwt + touch bwa/genome.pac + touch bwa/genome.sa + cat <<-END_VERSIONS > versions.yml "${task.process}": sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") diff --git a/modules/nf-core/sentieon/bwaindex/meta.yml b/modules/nf-core/sentieon/bwaindex/meta.yml new file mode 100644 index 00000000..5d91e225 --- /dev/null +++ b/modules/nf-core/sentieon/bwaindex/meta.yml @@ -0,0 +1,41 @@ +name: sentieon_bwaindex +description: Create BWA index for reference genome +keywords: + - index + - fasta + - genome + - reference + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ +input: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file +output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@maxulysse" diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 45e20a24..9752b3f3 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -17,8 +17,8 @@ include { GET_CHROM_SIZES } from '../../modul 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_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_MT_SHIFT } from '../../modules/local/sentieon/bwamemindex' +include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_GENOME } from '../../modules/nf-core/sentieon/bwaindex/main' +include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_MT_SHIFT } from '../../modules/nf-core/sentieon/bwaindex/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' @@ -144,4 +144,3 @@ workflow PREPARE_REFERENCES { versions = ch_versions // channel: [ path(versions.yml) ] } - From fd75f359d543097653db851996e58aaecfd27833 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 7 Aug 2023 17:26:08 +0000 Subject: [PATCH 1327/1921] Setting output path using the prefix parameter --- modules/nf-core/sentieon/bwaindex/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/sentieon/bwaindex/main.nf b/modules/nf-core/sentieon/bwaindex/main.nf index 0dde28d7..38e1d3a3 100644 --- a/modules/nf-core/sentieon/bwaindex/main.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -28,7 +28,7 @@ process SENTIEON_BWAINDEX { sentieon \\ bwa index \\ $args \\ - -p bwa/${fasta.baseName} \\ + -p $prefix \\ $fasta cat <<-END_VERSIONS > versions.yml From 6469c8aef6b8a5c5794c8aca3ba0cc3486a2f03e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 8 Aug 2023 01:05:45 +0200 Subject: [PATCH 1328/1921] compressed outputs --- conf/modules/rank_variants.config | 16 ++++++++++++++++ conf/modules/raredisease.config | 8 ++++++++ modules/local/filter_vep.nf | 8 ++++---- subworkflows/local/rank_variants.nf | 4 ++++ workflows/raredisease.nf | 8 ++++++++ 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 1eee3385..352d618f 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -51,6 +51,14 @@ process { withName: '.*RANK_VARIANTS_SV:TABIX_BGZIP' { ext.when = false } + + withName: '.*RANK_VARIANTS_SV:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } // @@ -95,4 +103,12 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } + + withName: '.*RANK_VARIANTS_SNV:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index db82ef14..69419687 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -105,6 +105,10 @@ process { process { withName: '.*FILTER_VEP_SNV' { ext.prefix = { "${meta.id}_clinical_snv" } + } + + withName: '.*BGZIPTABIX_SNV' { + ext.prefix = { "${meta.id}_clinical_snv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, @@ -116,6 +120,10 @@ process { process { withName: '.*FILTER_VEP_SV' { ext.prefix = { "${meta.id}_clinical_sv" } + } + + withName: '.*BGZIPTABIX_SV' { + ext.prefix = { "${meta.id}_clinical_sv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf index d2ffb904..3fbe8dad 100644 --- a/modules/local/filter_vep.nf +++ b/modules/local/filter_vep.nf @@ -13,8 +13,8 @@ process FILTER_VEP { path (select_feature_file) output: - tuple val(meta), path("*.ann_filter.vcf.gz"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.ann_filter.vcf"), emit: vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -26,7 +26,7 @@ process FILTER_VEP { filter_vep \\ --format vcf \\ --input_file $vcf \\ - --output_file ${prefix}.ann_filter.vcf.gz \\ + --output_file ${prefix}.ann_filter.vcf \\ --only_matched \\ --filter \"HGNC_ID in ${select_feature_file}\" @@ -39,7 +39,7 @@ process FILTER_VEP { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.ann_filter.vcf.gz + touch ${prefix}.ann_filter.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index 3049626f..cf8c6a8d 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -8,6 +8,7 @@ include { GENMOD_SCORE } from '../../modules/nf-core/genmod/score/main' include { GENMOD_COMPOUND } from '../../modules/nf-core/genmod/compound/main' include { BCFTOOLS_SORT } from '../../modules/nf-core/bcftools/sort/main' include { TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip/main' +include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow RANK_VARIANTS { @@ -34,12 +35,15 @@ workflow RANK_VARIANTS { ch_vcf = TABIX_BGZIP.out.output.mix(BCFTOOLS_SORT.out.vcf) + TABIX_TABIX (ch_vcf) + ch_versions = ch_versions.mix(GENMOD_ANNOTATE.out.versions) ch_versions = ch_versions.mix(GENMOD_MODELS.out.versions) ch_versions = ch_versions.mix(GENMOD_SCORE.out.versions) ch_versions = ch_versions.mix(GENMOD_COMPOUND.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_SORT.out.versions) ch_versions = ch_versions.mix(TABIX_BGZIP.out.versions) + ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) emit: vcf = ch_vcf // channel: [ val(meta), path(vcf) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dfdff09e..abd34e39 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -92,6 +92,8 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' +include { TABIX_BGZIPTABIX as BGZIPTABIX_SNV } from '../modules/nf-core/tabix/bgziptabix' +include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix/bgziptabix' // // MODULE: Installed directly from nf-core/modules @@ -436,6 +438,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(FILTER_VEP_SV.out.versions) + BGZIPTABIX_SV(FILTER_VEP_SV.out.vcf) + ch_versions = ch_versions.mix(BGZIPTABIX_SV.out.versions) + } if (!params.skip_mt_analysis) { @@ -536,6 +541,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(FILTER_VEP_SNV.out.versions) + BGZIPTABIX_SNV(FILTER_VEP_SNV.out.vcf) + ch_versions = ch_versions.mix(BGZIPTABIX_SNV.out.versions) + } // From 9f8ddf2b92addaebbf22b0d3a3465d22d0b95499 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 8 Aug 2023 11:45:17 +0200 Subject: [PATCH 1329/1921] review suggestion --- conf/modules/rank_variants.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 352d618f..64b7a53b 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -40,7 +40,6 @@ process { withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { ext.args = "--output-type z" ext.prefix = { "${meta.id}_ranked_sv" } - ext.when = true publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, From afb19e7d862ed4b42e1d7021954fd4e3cf5e3f5e Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 8 Aug 2023 12:49:36 +0000 Subject: [PATCH 1330/1921] Adding sentieon/bwaindex to modules.json --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index e2c0bb2f..30fc4d9d 100644 --- a/modules.json +++ b/modules.json @@ -337,7 +337,7 @@ }, "sentieon/bwaindex": { "branch": "master", - "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", + "git_sha": "49af8ed458e28729e483bc96e5a57c28163b9ea0", "installed_by": ["modules"] }, "smncopynumbercaller": { From c6b9ff67e99e9224ebf81b5098c469f96791dd49 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 9 Aug 2023 15:30:35 +0200 Subject: [PATCH 1331/1921] module update --- modules.json | 17 ++++-- modules/local/gatk4/collectreadcounts/main.nf | 56 ------------------ .../local/gatk4/collectreadcounts/meta.yml | 57 ------------------ .../local/gatk4/denoisereadcounts/meta.yml | 44 -------------- modules/nf-core/deepvariant/main.nf | 13 ++-- .../gatk4/denoisereadcounts/main.nf | 39 ++++++------ .../nf-core/gatk4/denoisereadcounts/meta.yml | 59 +++++++++++++++++++ .../determinegermlinecontigploidy/main.nf | 13 ++-- .../nf-core/gatk4/germlinecnvcaller/main.nf | 15 +++-- .../gatk4/postprocessgermlinecnvcalls/main.nf | 13 ++-- modules/nf-core/multiqc/main.nf | 6 +- modules/nf-core/untar/main.nf | 2 +- subworkflows/local/gens.nf | 4 +- 13 files changed, 131 insertions(+), 207 deletions(-) delete mode 100644 modules/local/gatk4/collectreadcounts/main.nf delete mode 100644 modules/local/gatk4/collectreadcounts/meta.yml delete mode 100644 modules/local/gatk4/denoisereadcounts/meta.yml rename modules/{local => nf-core}/gatk4/denoisereadcounts/main.nf (55%) create mode 100644 modules/nf-core/gatk4/denoisereadcounts/meta.yml diff --git a/modules.json b/modules.json index 38548e9b..5297fca0 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "4b7d4863a5883b76e6bff13b6e52468fab090c5b", + "git_sha": "ed67f2fadd6d2a155b296f728e6b1f8c92ddc1a6", "installed_by": ["modules"] }, "eklipse": { @@ -115,9 +115,14 @@ "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, + "gatk4/denoisereadcounts": { + "branch": "master", + "git_sha": "38c559b2a8b9a8cda62fa215521f581eb979c773", + "installed_by": ["modules"] + }, "gatk4/determinegermlinecontigploidy": { "branch": "master", - "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", + "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { @@ -127,7 +132,7 @@ }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "f6b848c6e1af9a9ecf4975aa8c8edad05e75e784", + "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", "installed_by": ["modules"] }, "gatk4/intervallisttools": { @@ -152,7 +157,7 @@ }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", + "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", "installed_by": ["modules"] }, "gatk4/preprocessintervals": { @@ -247,7 +252,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "a6e11ac655e744f7ebc724be669dd568ffdc0e80", "installed_by": ["modules"] }, "peddy": { @@ -382,7 +387,7 @@ }, "untar": { "branch": "master", - "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", + "git_sha": "d0b4fc03af52a1cc8c6fb4493b921b57352b1dd8", "installed_by": ["modules"] }, "upd": { diff --git a/modules/local/gatk4/collectreadcounts/main.nf b/modules/local/gatk4/collectreadcounts/main.nf deleted file mode 100644 index f424d20e..00000000 --- a/modules/local/gatk4/collectreadcounts/main.nf +++ /dev/null @@ -1,56 +0,0 @@ -process GATK4_COLLECTREADCOUNTS { - 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(bam), path(bai) - path fasta - path fai - path sequence_dict - path interval_list - - output: - tuple val(meta), path('*.hdf5'), emit: read_counts - path "versions.yml" , emit: versions - - script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def avail_mem = 12288 - if (!task.memory) { - log.info '[GATK CollectReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() - } - """ - gatk --java-options "-Xmx${avail_mem}M" CollectReadCounts \\ - -I $bam \\ - --read-index $bai \\ - -R $fasta \\ - -L $interval_list \\ - -O ${prefix}.hdf5 \\ - $args \\ - --tmp-dir . - - 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}.hdf5 - - 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/collectreadcounts/meta.yml b/modules/local/gatk4/collectreadcounts/meta.yml deleted file mode 100644 index 6da91b16..00000000 --- a/modules/local/gatk4/collectreadcounts/meta.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: gatk4_collectreadcounts -description: -keywords: - - bam - - interval list - - hdf5 -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'] - - bam: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - bai: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - fasta: - type: file - description: The reference fasta file - pattern: "*.fasta" - - fai: - type: file - description: Index of reference fasta file - pattern: "fasta.fai" - - sequence_dict: - type: file - description: GATK sequence dictionary - pattern: "*.dict" - - interval_list: - type: file - description: Binning intervals file - pattern: "*.interval_list" -output: - - read_counts: - type: file - description: gatk read count file - pattern: "*.hdf5" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@raysloks" diff --git a/modules/local/gatk4/denoisereadcounts/meta.yml b/modules/local/gatk4/denoisereadcounts/meta.yml deleted file mode 100644 index 6e343e8e..00000000 --- a/modules/local/gatk4/denoisereadcounts/meta.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: gatk4_denoisereadcounts -description: -keywords: - - hdf5 - - interval list -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'] - - read_counts: - type: file - description: Input read counts file - pattern: "*.hdf5" - - read_counts_panel: - type: file - description: Panel of normals - pattern: "*.hdf5" - - interval_list: - type: file - description: Binning intervals file - pattern: "*.interval_list" -output: - - read_counts: - type: file - description: gatk read count file - pattern: "*.hdf5" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@raysloks" diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index 1a24ba34..2d5c480c 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -4,11 +4,6 @@ process DEEPVARIANT { 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) { - exit 1, "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple val(meta), path(input), path(index), path(intervals) tuple val(meta2), path(fasta) @@ -26,6 +21,10 @@ process DEEPVARIANT { task.ext.when == null || task.ext.when script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def regions = intervals ? "--regions=${intervals}" : "" @@ -48,6 +47,10 @@ process DEEPVARIANT { """ stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.vcf.gz diff --git a/modules/local/gatk4/denoisereadcounts/main.nf b/modules/nf-core/gatk4/denoisereadcounts/main.nf similarity index 55% rename from modules/local/gatk4/denoisereadcounts/main.nf rename to modules/nf-core/gatk4/denoisereadcounts/main.nf index c18a7763..e60aeda1 100644 --- a/modules/local/gatk4/denoisereadcounts/main.nf +++ b/modules/nf-core/gatk4/denoisereadcounts/main.nf @@ -1,38 +1,42 @@ process GATK4_DENOISEREADCOUNTS { tag "$meta.id" - label 'process_high' + 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': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: - tuple val(meta), path(read_counts) - path panel_of_normals + tuple val(meta), path(counts) + tuple val(meta2), path(pon) output: - tuple val(meta), path('*.standardizedCR.tsv'), emit: standardized_read_counts - tuple val(meta), path('*.denoisedCR.tsv') , emit: denoised_read_counts - path "versions.yml" , emit: versions + tuple val(meta), path("*_standardizedCR.tsv"), emit: standardized + tuple val(meta), path("*_denoisedCR.tsv") , emit: denoised + 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 avail_mem = 12288 + + def avail_mem = 3072 if (!task.memory) { - log.info '[GATK DenoiseReadCounts] Available memory not known - defaulting to 12GB. Specify process memory requirements to change this.' + log.info '[GATK DenoiseReadCounts] 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" DenoiseReadCounts \\ - -I $read_counts \\ - --count-panel-of-normals $panel_of_normals \\ - --standardized-copy-ratios ${prefix}.standardizedCR.tsv \\ - --denoised-copy-ratios ${prefix}.denoisedCR.tsv \\ - $args \\ - --tmp-dir . + ${args} \\ + --tmp-dir . \\ + --input ${counts} \\ + --count-panel-of-normals ${pon} \\ + --standardized-copy-ratios ${prefix}_standardizedCR.tsv \\ + --denoised-copy-ratios ${prefix}_denoisedCR.tsv cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -41,10 +45,11 @@ process GATK4_DENOISEREADCOUNTS { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.standardizedCR.tsv - touch ${prefix}.denoisedCR.tsv + touch ${prefix}_standardizedCR.tsv + touch ${prefix}_denoisedCR.tsv cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/denoisereadcounts/meta.yml b/modules/nf-core/gatk4/denoisereadcounts/meta.yml new file mode 100644 index 00000000..0bb2f389 --- /dev/null +++ b/modules/nf-core/gatk4/denoisereadcounts/meta.yml @@ -0,0 +1,59 @@ +name: "gatk4_denoisereadcounts" +description: Denoises read counts to produce denoised copy ratios +keywords: + - gatk4 + - denoisereadcounts + - copyratios +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 + tool_dev_url: "https://github.com/broadinstitute/gatk" + licence: ["Apache-2.0"] + +input: + - meta: + type: map + 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 ]` + - counts: + type: file + description: Read counts in hdf5 or tsv format. + pattern: "*.{hdf5,tsv}" + - pon: + type: file + description: Panel of normals file hdf5 or tsv format. + pattern: "*.{hdf5}" + +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" + - standardized: + type: file + description: Standardized copy ratios file. + pattern: "*.{tsv}" + - denoised: + type: file + description: Denoised copy ratios file + pattern: "*.{tsv}" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf index 407cc34c..3c21e743 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf @@ -6,11 +6,6 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 container "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) { - 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) tuple val(meta2), path(ploidy_model) @@ -25,6 +20,10 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { task.ext.when == null || task.ext.when script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GATK4_DETERMINEGERMLINECONTIGPLOIDY module does not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def intervals = bed ? "--intervals ${bed}" : "" @@ -58,6 +57,10 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { """ stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GATK4_DETERMINEGERMLINECONTIGPLOIDY module does not support Conda. Please use Docker / Singularity / Podman instead." + } prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}-calls diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index 9b31c56d..973a0d3b 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/main.nf +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -3,12 +3,7 @@ process GATK4_GERMLINECNVCALLER { label 'process_single' //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 - 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) { - exit 1, "GATK4_GERMLINECNVCALLER module does not support Conda. Please use Docker / Singularity / Podman instead." - } + container "nf-core/gatk:4.4.0.0" //Biocontainers is missing a package input: tuple val(meta), path(tsv), path(intervals), path(ploidy), path(model) @@ -22,6 +17,10 @@ process GATK4_GERMLINECNVCALLER { task.ext.when == null || task.ext.when script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GATK4_GERMLINECNVCALLER module does not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def intervals_command = intervals ? "--intervals ${intervals}" : "" @@ -53,6 +52,10 @@ process GATK4_GERMLINECNVCALLER { """ stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GATK4_GERMLINECNVCALLER module does not support Conda. Please use Docker / Singularity / Podman instead." + } def prefix = task.ext.prefix ?: "${meta.id}" """ mkdir -p ${prefix}-cnv-calls/${prefix}-calls diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index d1a03fc1..d6223043 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -5,11 +5,6 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 container "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) { - exit 1, "GATK4_POSTPROCESSGERMLINECNVCALLS module does not support Conda. Please use Docker / Singularity / Podman instead." - } - input: tuple val(meta), path(calls), path(model), path(ploidy) @@ -23,6 +18,10 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { task.ext.when == null || task.ext.when script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GATK4_POSTPROCESSGERMLINECNVCALLS module does not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def calls_command = calls ? calls.collect{"--calls-shard-path $it"}.join(' ') : "" @@ -51,6 +50,10 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { """ stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "GATK4_POSTPROCESSGERMLINECNVCALLS module does not support Conda. Please use Docker / Singularity / Podman instead." + } def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_genotyped_intervals.vcf.gz diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 1fc387be..65d7dd0d 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_single' - conda "bioconda::multiqc=1.14" + conda "bioconda::multiqc=1.15" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.15--pyhdfd78af_0' : + 'biocontainers/multiqc:1.15--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 8cd1856c..61461c39 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -2,7 +2,7 @@ process UNTAR { tag "$archive" label 'process_single' - conda "conda-forge::sed=4.7 bioconda::grep=3.4 conda-forge::tar=1.34" + conda "conda-forge::sed=4.7 conda-forge::grep=3.11 conda-forge::tar=1.34" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : 'nf-core/ubuntu:20.04' }" diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 8e47cac7..fdee366d 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -2,8 +2,8 @@ // A preprocessing workflow for Gens // -include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/local/gatk4/collectreadcounts/main' -include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/local/gatk4/denoisereadcounts/main' +include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/nf-core/gatk4/collectreadcounts/main' +include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/nf-core/gatk4/denoisereadcounts/main' include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' workflow GENS { From 90e1861d08ec947a088cab879832f945c9b60885 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Wed, 9 Aug 2023 14:39:18 +0000 Subject: [PATCH 1332/1921] Installing and calling nf-core/modules version of sentieon/bwamem --- conf/modules/align_sentieon.config | 5 ++ modules.json | 5 ++ modules/local/sentieon/bwamem.nf | 68 ---------------- modules/nf-core/sentieon/bwamem/main.nf | 78 +++++++++++++++++++ modules/nf-core/sentieon/bwamem/meta.yml | 63 +++++++++++++++ .../local/alignment/align_sentieon.nf | 7 +- .../local/mitochondria/align_and_call_MT.nf | 6 +- 7 files changed, 157 insertions(+), 75 deletions(-) delete mode 100644 modules/local/sentieon/bwamem.nf create mode 100644 modules/nf-core/sentieon/bwamem/main.nf create mode 100644 modules/nf-core/sentieon/bwamem/meta.yml diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index a882a017..b2af6b6e 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -16,6 +16,11 @@ // process { + withLabel: 'sentieon' { + ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 + ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 + } + withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") } diff --git a/modules.json b/modules.json index 0b3f5084..106948ad 100644 --- a/modules.json +++ b/modules.json @@ -345,6 +345,11 @@ "git_sha": "49af8ed458e28729e483bc96e5a57c28163b9ea0", "installed_by": ["modules"] }, + "sentieon/bwamem": { + "branch": "master", + "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", + "installed_by": ["modules"] + }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf deleted file mode 100644 index 60ca36d6..00000000 --- a/modules/local/sentieon/bwamem.nf +++ /dev/null @@ -1,68 +0,0 @@ -process SENTIEON_BWAMEM { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - secret 'SENTIEON_LICENSE_BASE64' - - input: - tuple val(meta), path(reads) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(index) - - output: - tuple val(meta), path('*.bam'), emit: bam - tuple val(meta), path('*.bai'), emit: bai - 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}" - """ - INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` - - if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then - echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon bwa mem \\ - -t $task.cpus \\ - \$INDEX \\ - $reads \\ - $args \\ - | sentieon \\ - util \\ - sort \\ - -r $fasta \\ - -o ${prefix}.bam \\ - -t $task.cpus \\ - $args2 \\ - --sam2bam \\ - -i - - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam - touch ${prefix}.bai - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') - END_VERSIONS - """ -} diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf new file mode 100644 index 00000000..aeca2825 --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -0,0 +1,78 @@ +process SENTIEON_BWAMEM { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + container 'nf-core/sentieon:202112.06' + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + path(fasta) + path(fasta_fai) + + output: + tuple val(meta), path("*.bam"), path("*.bai"), emit: bam_and_bai + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + + """ + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" + fi + + INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` + + sentieon bwa mem \\ + $args \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + | sentieon util sort -r $fasta -t $task.cpus -o ${prefix}.bam --sam2bam - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + touch ${prefix}.bam.bai + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + bwa: \$(echo \$(sentieon bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/sentieon/bwamem/meta.yml b/modules/nf-core/sentieon/bwamem/meta.yml new file mode 100644 index 00000000..3d1546c5 --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/meta.yml @@ -0,0 +1,63 @@ +name: sentieon_bwamem +description: Performs fastq alignment to a fasta reference using Sentieon's BWA MEM +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ +input: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Genome fastq files (single-end or paired-end) + - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - fasta_fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" +output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@asp8200" diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index e4094edf..796aeaa4 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -2,7 +2,7 @@ // A subworkflow to annotate structural variants. // -include { SENTIEON_BWAMEM } from '../../../modules/local/sentieon/bwamem' +include { SENTIEON_BWAMEM } from '../../../modules/nf-core/sentieon/bwamem/main' include { SENTIEON_DATAMETRICS } from '../../../modules/local/sentieon/datametrics' include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' @@ -25,11 +25,10 @@ workflow ALIGN_SENTIEON { ch_bqsr_bai = Channel.empty() ch_bqsr_csv = Channel.empty() - SENTIEON_BWAMEM ( ch_reads_input, ch_genome_fasta, ch_genome_fai, ch_bwa_index ) + SENTIEON_BWAMEM ( ch_reads_input, ch_bwa_index, ch_genome_fasta.map{ meta, fasta -> fasta }, ch_genome_fai.map{ meta, fai -> fai }) SENTIEON_BWAMEM.out - .bam - .join(SENTIEON_BWAMEM.out.bai, failOnMismatch:true, failOnDuplicate:true) + .bam_and_bai .map{ meta, bam, bai -> new_id = meta.id.split('_')[0] new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index be060a7d..fb00739a 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -2,7 +2,7 @@ // Align and call MT // -include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/local/sentieon/bwamem' +include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' @@ -32,10 +32,10 @@ workflow ALIGN_AND_CALL_MT { BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) - SENTIEON_BWAMEM_MT ( ch_fastq, ch_fasta, ch_fai, ch_bwaindex ) + SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta.map{ meta, fasta -> fasta }, ch_fai.map{ meta, fai -> fai } ) Channel.empty() - .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam) + .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] }) .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) .set {ch_bam_ubam} From 78eaee681429eb3cada860854d4e61d7b672a80e Mon Sep 17 00:00:00 2001 From: asp8200 Date: Wed, 9 Aug 2023 15:30:13 +0000 Subject: [PATCH 1333/1921] Moving setup of sentieon-secrets to test.config --- conf/modules/align_sentieon.config | 4 ---- conf/test.config | 7 +++++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index b2af6b6e..5d89f69c 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -16,10 +16,6 @@ // process { - withLabel: 'sentieon' { - ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 - ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 - } withName: '.*ALIGN_SENTIEON:.*' { ext.when = params.aligner.equals("sentieon") diff --git a/conf/test.config b/conf/test.config index 8065aa8a..9093bfb6 100644 --- a/conf/test.config +++ b/conf/test.config @@ -50,3 +50,10 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } + +process { + withLabel: 'sentieon' { + ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 + ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 + } +} From 219fc4221aaac26d1664b3e85ec19fc1ed22b1de Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 09:13:35 +0000 Subject: [PATCH 1334/1921] Replace local version of SENTIEON_READWRITER with nf-core version --- modules.json | 5 ++ modules/local/sentieon/readwriter.nf | 54 ------------ modules/nf-core/sentieon/readwriter/main.nf | 84 +++++++++++++++++++ modules/nf-core/sentieon/readwriter/meta.yml | 71 ++++++++++++++++ .../local/alignment/align_sentieon.nf | 5 +- 5 files changed, 162 insertions(+), 57 deletions(-) delete mode 100644 modules/local/sentieon/readwriter.nf create mode 100644 modules/nf-core/sentieon/readwriter/main.nf create mode 100644 modules/nf-core/sentieon/readwriter/meta.yml diff --git a/modules.json b/modules.json index 106948ad..5f9df891 100644 --- a/modules.json +++ b/modules.json @@ -350,6 +350,11 @@ "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", "installed_by": ["modules"] }, + "sentieon/readwriter": { + "branch": "master", + "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", + "installed_by": ["modules"] + }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/local/sentieon/readwriter.nf b/modules/local/sentieon/readwriter.nf deleted file mode 100644 index cc90fd25..00000000 --- a/modules/local/sentieon/readwriter.nf +++ /dev/null @@ -1,54 +0,0 @@ -process SENTIEON_READWRITER { - tag "$meta.id" - label 'process_medium' - label 'sentieon' - - secret 'SENTIEON_LICENSE_BASE64' - - input: - tuple val(meta), path(bam), path(bai) - - output: - tuple val(meta), path('*.bam') , emit: bam - tuple val(meta), path('*.bam.bai') , emit: bai - tuple val(meta), path('*.bam'), path('*.bam.bai'), emit: bam_bai - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - 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" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon \\ - driver \\ - -t $task.cpus \\ - $input \\ - --algo ReadWriter \\ - ${prefix}.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam - touch ${prefix}.bam.bai - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ -} diff --git a/modules/nf-core/sentieon/readwriter/main.nf b/modules/nf-core/sentieon/readwriter/main.nf new file mode 100644 index 00000000..080b3ad7 --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/main.nf @@ -0,0 +1,84 @@ +process SENTIEON_READWRITER { + tag "$meta.id" + label 'process_medium' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + container 'nf-core/sentieon:202112.06' + + input: + tuple val(meta), path(input), path(index) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + + output: + tuple val(meta), path("*.${format}"), emit: output + tuple val(meta), path("*.${index}") , emit: index + tuple val(meta), path("*.${format}"), path("*.${index}"), emit: output_index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def input_str = input.sort().collect{"-i $it"}.join(' ') + def reference = fasta ? "-r $fasta" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + format = input.extension == "bam" ? "bam" : "cram" + index = format == "bam" ? "bam.bai" : "cram.crai" + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + """ + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" + fi + + sentieon \\ + driver \\ + -t $task.cpus \\ + $reference \\ + $args \\ + $input_str \\ + --algo ReadWriter \\ + $args2 \\ + ${prefix}.${format} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + format = input.extension == "bam" ? "bam" : "cram" + index = format == "bam" ? "bam.bai" : "cram.crai" + """ + touch ${prefix}.${format} + touch ${prefix}.${index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/sentieon/readwriter/meta.yml b/modules/nf-core/sentieon/readwriter/meta.yml new file mode 100644 index 00000000..23dcfcab --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/meta.yml @@ -0,0 +1,71 @@ +name: sentieon_readwriter +description: Merges BAM files, and/or convert them into cram files. Also, outputs the result of applying the Base Quality Score Recalibration to a file. +keywords: + - merge + - convert + - readwriter + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ +input: + - meta: + type: map + description: | + Groovy Map containing sample information. + e.g. [ id:'test', single_end:false ] + - 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' ] + - input: + type: file + description: BAM/CRAM file. + pattern: "*.{bam,cram}" + - index: + type: file + description: BAI/CRAI file. + pattern: "*.{bai,crai}" + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" + +output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - output: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - output_index: + type: file + description: BAM/CRAM alignment and the corresponding index file + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 796aeaa4..2f172714 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -7,8 +7,7 @@ include { SENTIEON_DATAMETRICS } from '../../../modules/local/sentieon/datame include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' -include { SENTIEON_READWRITER } from '../../../modules/local/sentieon/readwriter' - +include { SENTIEON_READWRITER } from '../../../modules/nf-core/sentieon/readwriter/main' workflow ALIGN_SENTIEON { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] @@ -41,7 +40,7 @@ workflow ALIGN_SENTIEON { } .set{ merge_bams_in } - SENTIEON_READWRITER (merge_bams_in.multiple) + SENTIEON_READWRITER ( merge_bams_in.multiple, ch_genome_fasta, ch_genome_fai ) ch_bam_bai = merge_bams_in.single.mix(SENTIEON_READWRITER.out.bam_bai) SENTIEON_DATAMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai ) From 82ec0b23eb9fd7b18bb6cd3ae37e116976055b6c Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 09:23:05 +0000 Subject: [PATCH 1335/1921] Fixing name of output-channel from SENTIEON_READWRITER --- subworkflows/local/alignment/align_sentieon.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 2f172714..25673f2e 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -41,7 +41,7 @@ workflow ALIGN_SENTIEON { .set{ merge_bams_in } SENTIEON_READWRITER ( merge_bams_in.multiple, ch_genome_fasta, ch_genome_fai ) - ch_bam_bai = merge_bams_in.single.mix(SENTIEON_READWRITER.out.bam_bai) + ch_bam_bai = merge_bams_in.single.mix(SENTIEON_READWRITER.out.output_index) SENTIEON_DATAMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai ) From ec080027ed3dd0248e6484824b7448a07dedaa76 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 10:51:50 +0000 Subject: [PATCH 1336/1921] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c89755f3..467e2e05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` - Tiddit updated to v3.6.1 [#385](https://github.com/nf-core/raredisease/pull/385) +- Installed the nf-core version of the sentieon/bwamemindex module [#397](https://github.com/nf-core/raredisease/pull/397) +- Installed the nf-core version of the sentieon/bwamem module [#398](https://github.com/nf-core/raredisease/pull/398) +- Installed the nf-core version of the sentieon/readwriter module [#399](https://github.com/nf-core/raredisease/pull/399) ### `Fixed` From 719f56e65e3fa832898dc8f6bbe08b9b1fb36c52 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 11:39:41 +0000 Subject: [PATCH 1337/1921] Replace local version of SENTIEON_DATAMETRICS with nf-core version --- modules.json | 5 ++ .../sentieon/datametrics/main.nf} | 29 +++++-- modules/nf-core/sentieon/datametrics/meta.yml | 84 +++++++++++++++++++ .../local/alignment/align_sentieon.nf | 2 +- 4 files changed, 114 insertions(+), 6 deletions(-) rename modules/{local/sentieon/datametrics.nf => nf-core/sentieon/datametrics/main.nf} (54%) create mode 100644 modules/nf-core/sentieon/datametrics/meta.yml diff --git a/modules.json b/modules.json index 5f9df891..2974defc 100644 --- a/modules.json +++ b/modules.json @@ -350,6 +350,11 @@ "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", "installed_by": ["modules"] }, + "sentieon/datametrics": { + "branch": "master", + "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", + "installed_by": ["modules"] + }, "sentieon/readwriter": { "branch": "master", "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", diff --git a/modules/local/sentieon/datametrics.nf b/modules/nf-core/sentieon/datametrics/main.nf similarity index 54% rename from modules/local/sentieon/datametrics.nf rename to modules/nf-core/sentieon/datametrics/main.nf index 37ca6312..831a8f68 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/nf-core/sentieon/datametrics/main.nf @@ -1,10 +1,12 @@ process SENTIEON_DATAMETRICS { tag "$meta.id" - label 'process_high' + label 'process_medium' label 'sentieon' secret 'SENTIEON_LICENSE_BASE64' + container 'nf-core/sentieon:202112.06' + input: tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) @@ -23,13 +25,30 @@ process SENTIEON_DATAMETRICS { task.ext.when == null || task.ext.when script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def input = bam.sort().collect{"-i $it"}.join(' ') + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' """ - if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then - echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" fi sentieon \\ @@ -51,7 +70,7 @@ process SENTIEON_DATAMETRICS { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_mq_metrics.txt touch ${prefix}_qd_metrics.txt diff --git a/modules/nf-core/sentieon/datametrics/meta.yml b/modules/nf-core/sentieon/datametrics/meta.yml new file mode 100644 index 00000000..bac58b9a --- /dev/null +++ b/modules/nf-core/sentieon/datametrics/meta.yml @@ -0,0 +1,84 @@ +name: "sentieon_datametrics" +description: Collects multiple quality metrics from a bam file +keywords: + - metrics + - bam + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ + +input: + - meta: + type: map + 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 ]` + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index of th sorted BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - mq_metrics: + type: file + description: File containing the information about mean base quality score for each sequencing cycle + pattern: "*.txt" + - qd_metrics: + type: file + description: File containing the information about number of bases with a specific base quality score + pattern: "*.txt" + - gc_summary: + type: file + description: File containing the information about GC bias in the reference and the sample + pattern: "*.txt" + - gc_metrics: + type: file + description: File containing the information about GC bias in the reference and the sample + pattern: "*.txt" + - aln_metrics: + type: file + description: File containing the statistics about the alignment of the reads + pattern: "*.txt" + - is_metrics: + type: file + description: File containing the information about statistical distribution of insert sizes + pattern: "*.txt" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 25673f2e..8cbc122b 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -3,7 +3,7 @@ // include { SENTIEON_BWAMEM } from '../../../modules/nf-core/sentieon/bwamem/main' -include { SENTIEON_DATAMETRICS } from '../../../modules/local/sentieon/datametrics' +include { SENTIEON_DATAMETRICS } from '../../../modules/nf-core/sentieon/datametrics/main' include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' From ee1206a079de270fd76e018cc17d6e572ba73132 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 11:59:48 +0000 Subject: [PATCH 1338/1921] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 467e2e05..4975544f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/bwamemindex module [#397](https://github.com/nf-core/raredisease/pull/397) - Installed the nf-core version of the sentieon/bwamem module [#398](https://github.com/nf-core/raredisease/pull/398) - Installed the nf-core version of the sentieon/readwriter module [#399](https://github.com/nf-core/raredisease/pull/399) +- Installed the nf-core version of the sentieon/datametrics module [#400](https://github.com/nf-core/raredisease/pull/400) ### `Fixed` From 864e2e9d7a94d67eb7090662262957012812e8b6 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 12:38:00 +0000 Subject: [PATCH 1339/1921] Replace local version of sentieon-locuscollector and sentieon-dedup with nf-core versions --- conf/modules/align_sentieon.config | 4 -- modules.json | 5 ++ modules/local/sentieon/dedup.nf | 60 ------------------- modules/local/sentieon/locuscollector.nf | 52 ---------------- .../local/alignment/align_sentieon.nf | 10 +--- 5 files changed, 7 insertions(+), 124 deletions(-) delete mode 100644 modules/local/sentieon/dedup.nf delete mode 100644 modules/local/sentieon/locuscollector.nf diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index 5d89f69c..e3dd1cc2 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -34,10 +34,6 @@ process { ext.prefix = { "${meta.id}_merged" } } - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_LOCUSCOLLECTOR' { - ext.prefix = { "${meta.id}_locuscollector" } - } - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { ext.args = { $params.rmdup ? "--rmdup" : '' } ext.prefix = { "${meta.id}_dedup" } diff --git a/modules.json b/modules.json index 2974defc..9e427d30 100644 --- a/modules.json +++ b/modules.json @@ -355,6 +355,11 @@ "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", "installed_by": ["modules"] }, + "sentieon/dedup": { + "branch": "master", + "git_sha": "915a0b16ba3e40ef59e7b44843b3118e17a9c906", + "installed_by": ["modules"] + }, "sentieon/readwriter": { "branch": "master", "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf deleted file mode 100644 index bb738985..00000000 --- a/modules/local/sentieon/dedup.nf +++ /dev/null @@ -1,60 +0,0 @@ -process SENTIEON_DEDUP { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - secret 'SENTIEON_LICENSE_BASE64' - - input: - tuple val(meta), path(bam), path(bai), path(score), path(score_idx) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - - output: - tuple val(meta), path('*.bam') , emit: bam - tuple val(meta), path('*.bam.bai') , emit: bai - tuple val(meta), path('*_metrics.txt'), emit: metrics_dedup - 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 = bam.sort().collect{"-i $it"}.join(' ') - """ - if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then - echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon \\ - driver \\ - -t $task.cpus \\ - $input \\ - $args \\ - --algo Dedup \\ - --score_info $score \\ - --metrics ${prefix}_metrics.txt \\ - ${prefix}.bam - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam - touch ${prefix}.bam.bai - touch ${prefix}_metrics.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ -} diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf deleted file mode 100644 index 9335b0ec..00000000 --- a/modules/local/sentieon/locuscollector.nf +++ /dev/null @@ -1,52 +0,0 @@ -process SENTIEON_LOCUSCOLLECTOR { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - secret 'SENTIEON_LICENSE_BASE64' - - input: - tuple val(meta), path(bam), path(bai) - - output: - tuple val(meta), path('*txt.gz') , emit: score , optional: true - tuple val(meta), path('*txt.gz.tbi'), emit: score_idx, optional: true - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - 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 - echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon \\ - driver \\ - -t $task.cpus \\ - $input \\ - --algo LocusCollector \\ - --fun score_info $prefix - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ? "${task.ext.prefix}.txt.gz" : "${meta.id}.txt.gz" - """ - touch ${prefix}.txt.gz - touch ${prefix}.txt.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ -} diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 8cbc122b..041255b2 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -5,6 +5,7 @@ include { SENTIEON_BWAMEM } from '../../../modules/nf-core/sentieon/bwamem/main' include { SENTIEON_DATAMETRICS } from '../../../modules/nf-core/sentieon/datametrics/main' include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' +include { SENTIEON_DEDUP } from '../../../modules/nf-core/sentieon/dedup/main' include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' include { SENTIEON_READWRITER } from '../../../modules/nf-core/sentieon/readwriter/main' @@ -45,14 +46,7 @@ workflow ALIGN_SENTIEON { SENTIEON_DATAMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai ) - SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) - - ch_bam_bai - .join(SENTIEON_LOCUSCOLLECTOR.out.score, failOnMismatch:true, failOnDuplicate:true) - .join(SENTIEON_LOCUSCOLLECTOR.out.score_idx, failOnMismatch:true, failOnDuplicate:true) - .set { ch_bam_bai_score } - - SENTIEON_DEDUP ( ch_bam_bai_score, ch_genome_fasta, ch_genome_fai ) + SENTIEON_DEDUP ( ch_bam_bai, ch_genome_fasta, ch_genome_fai ) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam From e887f5143ca9a005fc8abd08cdbe4e033b08ccc3 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 12:41:46 +0000 Subject: [PATCH 1340/1921] The new modules --- modules/nf-core/sentieon/dedup/main.nf | 86 ++++++++++++++++++++++++ modules/nf-core/sentieon/dedup/meta.yml | 88 +++++++++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 modules/nf-core/sentieon/dedup/main.nf create mode 100644 modules/nf-core/sentieon/dedup/meta.yml diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf new file mode 100644 index 00000000..c83d5e55 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -0,0 +1,86 @@ +process SENTIEON_DEDUP { + tag "$meta.id" + label 'process_medium' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + container 'nf-core/sentieon:202112.06' + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fasta_fai) + + output: + tuple val(meta), path("*.cram") , emit: cram, optional: true + tuple val(meta), path("*.crai") , emit: crai, optional: true + tuple val(meta), path("*.bam") , emit: bam , optional: true + tuple val(meta), path("*.bai") , emit: bai + tuple val(meta), path("*.score") , emit: score + tuple val(meta), path("*.metrics") , emit: metrics + tuple val(meta), path("*.metrics.multiqc.tsv"), emit: metrics_multiqc_tsv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def args3 = task.ext.args3 ?: '' + def args4 = task.ext.args4 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: ".cram" // The suffix should be either ".cram" or ".bam". + def metrics = task.ext.metrics ?: "${prefix}${suffix}.metrics" + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + def input_list = bam.collect{"-i $it"}.join(' ') + + """ + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" + fi + + sentieon driver $args $input_list -r ${fasta} --algo LocusCollector $args2 --fun score_info ${prefix}.score + sentieon driver $args3 -t $task.cpus $input_list -r ${fasta} --algo Dedup $args4 --score_info ${prefix}.score --metrics ${metrics} ${prefix}${suffix} + # This following tsv-file is produced in order to get a proper tsv-file with Dedup-metrics for importing in MultiQC as "custom content". + # It should be removed once MultiQC has a module for displaying Dedup-metrics. + head -3 ${metrics} > ${metrics}.multiqc.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.cram + touch ${prefix}.cram.crai + touch ${prefix}.metrics + touch ${prefix}.score + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/sentieon/dedup/meta.yml b/modules/nf-core/sentieon/dedup/meta.yml new file mode 100644 index 00000000..ec0565d9 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/meta.yml @@ -0,0 +1,88 @@ +name: sentieon_dedup +description: Runs the sentieon tool LocusCollector followed by Dedup. LocusCollector collects read information that is used by Dedup which in turn marks or removes duplicate reads. +keywords: + - mem + - dedup + - map + - bam + - cram + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ +input: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta_fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" +output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - cram: + type: file + description: CRAM file + pattern: "*.cram" + - crai: + type: file + description: CRAM index file + pattern: "*.crai" + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - score: + type: file + description: The score file indicates which reads LocusCollector finds are likely duplicates. + pattern: "*.score" + - metrics: + type: file + description: Output file containing Dedup metrics incl. histogram data. + pattern: "*.metrics" + - metrics_multiqc_tsv: + type: file + description: Output tsv-file containing Dedup metrics excl. histogram data. + pattern: "*.metrics.multiqc.tsv" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@asp8200" From 08a86ec2a2783b8771b3de6a05543e2786281765 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 12:42:08 +0000 Subject: [PATCH 1341/1921] Remove includes of old modules --- subworkflows/local/alignment/align_sentieon.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 041255b2..a5b09ccd 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -4,9 +4,7 @@ include { SENTIEON_BWAMEM } from '../../../modules/nf-core/sentieon/bwamem/main' include { SENTIEON_DATAMETRICS } from '../../../modules/nf-core/sentieon/datametrics/main' -include { SENTIEON_LOCUSCOLLECTOR } from '../../../modules/local/sentieon/locuscollector' include { SENTIEON_DEDUP } from '../../../modules/nf-core/sentieon/dedup/main' -include { SENTIEON_DEDUP } from '../../../modules/local/sentieon/dedup' include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' include { SENTIEON_READWRITER } from '../../../modules/nf-core/sentieon/readwriter/main' workflow ALIGN_SENTIEON { From 64b7a8dc5239f7d4beeb2112e42ed0ea181d75c3 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 13:53:16 +0000 Subject: [PATCH 1342/1921] Delete legacy reference to SENTIEON_LOCUSCOLLECTOR.out.versions --- subworkflows/local/alignment/align_sentieon.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index a5b09ccd..b7387a44 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -59,7 +59,6 @@ workflow ALIGN_SENTIEON { ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions.first()) ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions.first()) - ch_versions = ch_versions.mix(SENTIEON_LOCUSCOLLECTOR.out.versions.first()) ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) emit: From 5e7fce73bc2a9b6f4b7a226fef89122ee4d93654 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 14:32:49 +0000 Subject: [PATCH 1343/1921] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4975544f..487d77c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/bwamem module [#398](https://github.com/nf-core/raredisease/pull/398) - Installed the nf-core version of the sentieon/readwriter module [#399](https://github.com/nf-core/raredisease/pull/399) - Installed the nf-core version of the sentieon/datametrics module [#400](https://github.com/nf-core/raredisease/pull/400) +- Installed the nf-core version of the sentieon/dedup module. The dedup module also contains a call to Sentieon's LocusCollector [#401](https://github.com/nf-core/raredisease/pull/401) ### `Fixed` From d972f6eae1c8f1e3f35b7cc07ed9ea80f7a1e593 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 14 Aug 2023 16:58:42 +0200 Subject: [PATCH 1344/1921] update mosdepth --- modules.json | 2 +- modules/nf-core/mosdepth/main.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index 5297fca0..47ed9c2b 100644 --- a/modules.json +++ b/modules.json @@ -247,7 +247,7 @@ }, "mosdepth": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "ebb27711cd5f4de921244bfa81c676504072d31c", "installed_by": ["modules"] }, "multiqc": { diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index c17e4e65..74db3a27 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -35,10 +35,10 @@ process MOSDEPTH { def reference = fasta ? "--fasta ${fasta}" : "" def interval = bed ? "--by ${bed}" : "" if (bed && args.contains("--by")) { - exit 1, "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition" + error "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition" } if (!bed && args.contains("--thresholds")) { - exit 1, "'--thresholds' can only be specified in conjunction with '--by'" + error "'--thresholds' can only be specified in conjunction with '--by'" } """ From 6eb3284fc8eb232dfcaf920b9a49acd58e952469 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 16:28:13 +0000 Subject: [PATCH 1345/1921] Remove sentieon BQSR --- conf/modules/align_sentieon.config | 3 - modules/local/sentieon/bqsr.nf | 88 ------------------- .../local/alignment/align_sentieon.nf | 20 ----- 3 files changed, 111 deletions(-) delete mode 100644 modules/local/sentieon/bqsr.nf diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index e3dd1cc2..b39bad3c 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -45,7 +45,4 @@ process { ] } - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BQSR' { - ext.prefix = { "${meta.id}_bqsr" } - } } diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf deleted file mode 100644 index 390108e1..00000000 --- a/modules/local/sentieon/bqsr.nf +++ /dev/null @@ -1,88 +0,0 @@ -process SENTIEON_BQSR { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - secret 'SENTIEON_LICENSE_BASE64' - - input: - tuple val(meta), path(bam), path(bai) - 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 - tuple val(meta), path('*.bam.bai') , emit: bai - tuple val(meta), path('*.table') , emit: recal_pre - tuple val(meta), path('*.table_post'), emit: recal_post - tuple val(meta), path('*.csv') , emit: recal_csv - 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 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" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon driver \\ - -t ${task.cpus} \\ - -r $fasta \\ - $args \\ - $input \\ - --algo QualCal \\ - $dbsnp \\ - ${prefix}.table - - sentieon driver \\ - -t ${task.cpus} \\ - -r $fasta \\ - $args2 \\ - $input \\ - -q ${prefix}.table \\ - --algo QualCal \\ - $dbsnp \\ - ${prefix}.table_post \\ - --algo ReadWriter ${prefix}.bam - - sentieon driver \\ - -t ${task.cpus} \\ - $args3 \\ - --algo QualCal \\ - --plot \\ - --before ${prefix}.table \\ - --after ${prefix}.table_post \\ - ${prefix}.csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam - touch ${prefix}.bam.bai - touch ${prefix}.table - touch ${prefix}.table_post - touch ${prefix}.csv - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ -} diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index b7387a44..86447e81 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -5,7 +5,6 @@ include { SENTIEON_BWAMEM } from '../../../modules/nf-core/sentieon/bwamem/main' include { SENTIEON_DATAMETRICS } from '../../../modules/nf-core/sentieon/datametrics/main' include { SENTIEON_DEDUP } from '../../../modules/nf-core/sentieon/dedup/main' -include { SENTIEON_BQSR } from '../../../modules/local/sentieon/bqsr' include { SENTIEON_READWRITER } from '../../../modules/nf-core/sentieon/readwriter/main' workflow ALIGN_SENTIEON { take: @@ -13,15 +12,10 @@ workflow ALIGN_SENTIEON { 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 main: ch_versions = Channel.empty() - ch_bqsr_bam = Channel.empty() - ch_bqsr_bai = Channel.empty() - ch_bqsr_csv = Channel.empty() SENTIEON_BWAMEM ( ch_reads_input, ch_bwa_index, ch_genome_fasta.map{ meta, fasta -> fasta }, ch_genome_fai.map{ meta, fai -> fai }) @@ -46,17 +40,6 @@ workflow ALIGN_SENTIEON { SENTIEON_DEDUP ( ch_bam_bai, 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_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 - ch_versions = ch_versions.mix(SENTIEON_BQSR.out.versions.first()) - } - ch_versions = ch_versions.mix(SENTIEON_BWAMEM.out.versions.first()) ch_versions = ch_versions.mix(SENTIEON_DATAMETRICS.out.versions.first()) ch_versions = ch_versions.mix(SENTIEON_DEDUP.out.versions.first()) @@ -64,9 +47,6 @@ workflow ALIGN_SENTIEON { emit: marked_bam = SENTIEON_DEDUP.out.bam // channel: [ val(meta), path(bam) ] marked_bai = SENTIEON_DEDUP.out.bai // channel: [ val(meta), path(bai) ] - recal_bam = ch_bqsr_bam.ifEmpty(null) // channel: [ val(meta), path(bam) ] - recal_bai = ch_bqsr_bai.ifEmpty(null) // channel: [ val(meta), path(bai) ] - recal_csv = ch_bqsr_csv.ifEmpty(null) // channel: [ val(meta), path(csv) ] mq_metrics = SENTIEON_DATAMETRICS.out.mq_metrics.ifEmpty(null) // channel: [ val(meta), path(mq_metrics) ] qd_metrics = SENTIEON_DATAMETRICS.out.qd_metrics.ifEmpty(null) // channel: [ val(meta), path(qd_metrics) ] gc_metrics = SENTIEON_DATAMETRICS.out.gc_metrics.ifEmpty(null) // channel: [ val(meta), path(gc_metrics) ] From ef8f621f2580f1acea51463cd685535a9b183d6c Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 16:46:18 +0000 Subject: [PATCH 1346/1921] Removing dbsnp as argument to ALIGN and ALIGN_SENTIEON --- subworkflows/local/align.nf | 4 ---- workflows/raredisease.nf | 2 -- 2 files changed, 6 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index bab66216..3455c3b9 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -13,8 +13,6 @@ workflow ALIGN { 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 main: @@ -33,8 +31,6 @@ workflow ALIGN { ch_genome_fasta, ch_genome_fai, ch_bwa_index, - ch_known_dbsnp, - ch_known_dbsnp_tbi, val_platform ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index abd34e39..0704b202 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -300,8 +300,6 @@ workflow RAREDISEASE { ch_genome_fai, ch_genome_bwaindex, ch_genome_bwamem2index, - ch_dbsnp, - ch_dbsnp_tbi, params.platform ) .set { ch_mapped } From bf5e5ea7eebff673ceab5f693fb5502d9b2b2e08 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Mon, 14 Aug 2023 17:04:48 +0000 Subject: [PATCH 1347/1921] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 487d77c1..e7e1480a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/readwriter module [#399](https://github.com/nf-core/raredisease/pull/399) - Installed the nf-core version of the sentieon/datametrics module [#400](https://github.com/nf-core/raredisease/pull/400) - Installed the nf-core version of the sentieon/dedup module. The dedup module also contains a call to Sentieon's LocusCollector [#401](https://github.com/nf-core/raredisease/pull/401) +- Removing Sentieon-based BQSR. Recent Illumina sequencers tend to provide well-calibrated BQs, so BQSR may not provide much benefit [#402](https://github.com/nf-core/raredisease/pull/402) ### `Fixed` From 004a003d440774448275055b3933aecdc56856e5 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 07:53:28 +0000 Subject: [PATCH 1348/1921] Replace local version of SENTIEON_DNAMODELAPPLY with nf-core version --- modules.json | 5 ++ modules/local/sentieon/dnamodelapply.nf | 50 ------------ .../nf-core/sentieon/dnamodelapply/main.nf | 81 +++++++++++++++++++ .../nf-core/sentieon/dnamodelapply/meta.yml | 78 ++++++++++++++++++ .../variant_calling/call_snv_sentieon.nf | 4 +- 5 files changed, 166 insertions(+), 52 deletions(-) delete mode 100644 modules/local/sentieon/dnamodelapply.nf create mode 100644 modules/nf-core/sentieon/dnamodelapply/main.nf create mode 100644 modules/nf-core/sentieon/dnamodelapply/meta.yml diff --git a/modules.json b/modules.json index 9e427d30..b4e2c848 100644 --- a/modules.json +++ b/modules.json @@ -360,6 +360,11 @@ "git_sha": "915a0b16ba3e40ef59e7b44843b3118e17a9c906", "installed_by": ["modules"] }, + "sentieon/dnamodelapply": { + "branch": "master", + "git_sha": "43ef68091a1188fd8dc4c03f9341b556803c7514", + "installed_by": ["modules"] + }, "sentieon/readwriter": { "branch": "master", "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf deleted file mode 100644 index 32582b2c..00000000 --- a/modules/local/sentieon/dnamodelapply.nf +++ /dev/null @@ -1,50 +0,0 @@ -process SENTIEON_DNAMODELAPPLY { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - input: - tuple val(meta), path(vcf), path(vcf_idx) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - path ml_model - - output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*.vcf.gz.tbi") , emit: index - tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi"), emit: vcf_index - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def prefix = task.ext.prefix ?: "${meta.id}" - - """ - sentieon driver \\ - -t $task.cpus \\ - -r $fasta \\ - --algo DNAModelApply \\ - --model $ml_model \\ - -v $vcf \\ - ${prefix}.vcf.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.vcf.gz - touch ${prefix}.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf new file mode 100644 index 00000000..3fe9a28f --- /dev/null +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -0,0 +1,81 @@ +process SENTIEON_DNAMODELAPPLY { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + container 'nf-core/sentieon:202112.06' + + input: + tuple val(meta), path(vcf), path(idx) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(ml_model) + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + + """ + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" + fi + + sentieon driver \\ + -t $task.cpus \\ + -r $fasta \\ + $args \\ + --algo DNAModelApply \\ + --model $ml_model \\ + -v $vcf \\ + ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/sentieon/dnamodelapply/meta.yml b/modules/nf-core/sentieon/dnamodelapply/meta.yml new file mode 100644 index 00000000..ec429bea --- /dev/null +++ b/modules/nf-core/sentieon/dnamodelapply/meta.yml @@ -0,0 +1,78 @@ +name: "sentieon_dnamodelapply" +description: modifies the input VCF file by adding the MLrejected FILTER to the variants +keywords: + - dnamodelapply + - vcf + - filter + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - 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' ]` + - vcf: + type: file + description: INPUT VCF file + pattern: "*.{vcf,vcf.gz}" + - idx: + type: file + description: Index of the input VCF file + pattern: "*.{tbi}" + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - ml_model: + type: file + description: machine learning model file + pattern: "*.model" + +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: INPUT VCF file + pattern: "*.{vcf,vcf.gz}" + - index: + type: file + description: Index of the input VCF file + pattern: "*.{tbi}" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index d1b8bbb2..bbcdbc19 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -3,7 +3,7 @@ // include { SENTIEON_DNASCOPE } from '../../../modules/local/sentieon/dnascope' -include { SENTIEON_DNAMODELAPPLY } from '../../../modules/local/sentieon/dnamodelapply' +include { SENTIEON_DNAMODELAPPLY } from '../../../modules/nf-core/sentieon/dnamodelapply/main' include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge/main' include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' include { BCFTOOLS_NORM as REMOVE_DUPLICATES_SEN } from '../../../modules/nf-core/bcftools/norm/main' @@ -28,7 +28,7 @@ workflow CALL_SNV_SENTIEON { 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_genome_fasta, ch_genome_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 ) From c1600352d247ee10c0c08bb2bdb25d5401fa75e9 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 08:22:44 +0000 Subject: [PATCH 1349/1921] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7e1480a..31781c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/datametrics module [#400](https://github.com/nf-core/raredisease/pull/400) - Installed the nf-core version of the sentieon/dedup module. The dedup module also contains a call to Sentieon's LocusCollector [#401](https://github.com/nf-core/raredisease/pull/401) - Removing Sentieon-based BQSR. Recent Illumina sequencers tend to provide well-calibrated BQs, so BQSR may not provide much benefit [#402](https://github.com/nf-core/raredisease/pull/402) +- Installed the nf-core version of the sentieon/dnamodelapply module [#403](https://github.com/nf-core/raredisease/pull/403) ### `Fixed` From 2640c83167e15a712e497b81fb835b8ccc4c63b8 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 12:02:54 +0000 Subject: [PATCH 1350/1921] Replace local version of SENTIEON_WGSMETRICS with nf-core version --- modules.json | 5 ++ modules/local/sentieon/wgsmetricsalgo.nf | 57 -------------- modules/nf-core/sentieon/wgsmetrics/main.nf | 81 ++++++++++++++++++++ modules/nf-core/sentieon/wgsmetrics/meta.yml | 73 ++++++++++++++++++ subworkflows/local/qc_bam.nf | 8 +- 5 files changed, 163 insertions(+), 61 deletions(-) delete mode 100644 modules/local/sentieon/wgsmetricsalgo.nf create mode 100644 modules/nf-core/sentieon/wgsmetrics/main.nf create mode 100644 modules/nf-core/sentieon/wgsmetrics/meta.yml diff --git a/modules.json b/modules.json index b4e2c848..5e1764b9 100644 --- a/modules.json +++ b/modules.json @@ -370,6 +370,11 @@ "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", "installed_by": ["modules"] }, + "sentieon/wgsmetrics": { + "branch": "master", + "git_sha": "b1e9314b919f498e116bfc1417b7185185e99261", + "installed_by": ["modules"] + }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf deleted file mode 100644 index 3663947d..00000000 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ /dev/null @@ -1,57 +0,0 @@ -process SENTIEON_WGSMETRICSALGO { - tag "$meta.id" - label 'process_medium' - label 'sentieon' - - secret 'SENTIEON_LICENSE_BASE64' - - input: - tuple val(meta), path(bam), path(bai) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - path intervals_list - - output: - tuple val(meta), path('*.txt'), emit: wgs_metrics - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" - def interval = intervals_list ? "--interval ${intervals_list}" : "" - """ - if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then - echo "Initializing SENTIEON_LICENSE env variable" - source sentieon_init.sh SENTIEON_LICENSE_BASE64 - fi - - sentieon \\ - driver \\ - -t $task.cpus \\ - -r $fasta \\ - $input \\ - $interval \\ - $args \\ - --algo WgsMetricsAlgo ${prefix}.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}_wgs_metrics.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ -} diff --git a/modules/nf-core/sentieon/wgsmetrics/main.nf b/modules/nf-core/sentieon/wgsmetrics/main.nf new file mode 100644 index 00000000..fd7fdae5 --- /dev/null +++ b/modules/nf-core/sentieon/wgsmetrics/main.nf @@ -0,0 +1,81 @@ +process SENTIEON_WGSMETRICS { + tag "$meta.id" + label 'process_medium' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + container 'nf-core/sentieon:202112.06' + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(intervals_list) + + + output: + tuple val(meta), path('*.txt'), emit: wgs_metrics + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def input = bam.sort().collect{"-i $it"}.join(' ') + def prefix = task.ext.prefix ?: "${meta.id}" + def interval = intervals_list ? "--interval ${intervals_list}" : "" + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + """ + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" + fi + + sentieon \\ + driver \\ + -t $task.cpus \\ + -r $fasta \\ + $input \\ + $interval \\ + $args \\ + --algo WgsMetricsAlgo ${prefix}.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/sentieon/wgsmetrics/meta.yml b/modules/nf-core/sentieon/wgsmetrics/meta.yml new file mode 100644 index 00000000..09fb9eca --- /dev/null +++ b/modules/nf-core/sentieon/wgsmetrics/meta.yml @@ -0,0 +1,73 @@ +name: "sentieon_wgsmetrics" +description: Collects whole genome quality metrics from a bam file +keywords: + - metrics + - bam + - sentieon +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - 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' ]` + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index of th sorted BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - interval_list: + type: file + description: bed or interval_list file containing interval in the reference that will be used in the analysis + pattern: "*.{bed,interval_list}" + +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" + - wgs_metrics: + type: file + description: File containing the information about mean base quality score for each sequencing cycle + pattern: "*.txt" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 06b55422..d593bac9 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -10,8 +10,8 @@ include { MOSDEPTH } from '../../m include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' -include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS } from '../../modules/local/sentieon/wgsmetricsalgo' -include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../modules/local/sentieon/wgsmetricsalgo' +include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' workflow QC_BAM { @@ -52,8 +52,8 @@ workflow QC_BAM { 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_genome_fasta, ch_genome_fai, ch_intervals_wgs ) - SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_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) From 50cd408ce015a7ad2088dd655c8f87382dbec154 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 12:07:22 +0000 Subject: [PATCH 1351/1921] SENTIEON_WGSMETRICSALGO replaced by SENTIEON_WGSMETRICS --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index d593bac9..9519c2a1 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -10,8 +10,8 @@ include { MOSDEPTH } from '../../m include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' -include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' -include { SENTIEON_WGSMETRICSALGO as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' workflow QC_BAM { From d2e74922522b7790c36f4fdabb0261c9065dbed4 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 12:19:00 +0000 Subject: [PATCH 1352/1921] Trying to fix input-channel with intervals for sentieon-wgsmetrics module --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 9519c2a1..8308c221 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -52,8 +52,8 @@ workflow QC_BAM { 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_genome_fasta, ch_genome_fai, [[:], ch_intervals_wgs] ) - SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, [[:], ch_intervals_y] ) + SENTIEON_WGSMETRICS ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_wgs.map{ interval -> [[:] interval]} ) + SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:] interval]} ) 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) From d8094c27bbec07c576946ef8606f9c32dac145c4 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 12:21:36 +0000 Subject: [PATCH 1353/1921] Fixing typo --- subworkflows/local/qc_bam.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 8308c221..a86cd7ee 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -52,8 +52,8 @@ workflow QC_BAM { 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_genome_fasta, ch_genome_fai, ch_intervals_wgs.map{ interval -> [[:] interval]} ) - SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:] interval]} ) + SENTIEON_WGSMETRICS ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_wgs.map{ interval -> [[:], interval]} ) + SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:], interval]} ) 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) From 3c1291a606834627e8c3845c64043fd108db77a4 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 12:59:58 +0000 Subject: [PATCH 1354/1921] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31781c81..2b548c69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/dedup module. The dedup module also contains a call to Sentieon's LocusCollector [#401](https://github.com/nf-core/raredisease/pull/401) - Removing Sentieon-based BQSR. Recent Illumina sequencers tend to provide well-calibrated BQs, so BQSR may not provide much benefit [#402](https://github.com/nf-core/raredisease/pull/402) - Installed the nf-core version of the sentieon/dnamodelapply module [#403](https://github.com/nf-core/raredisease/pull/403) +- Installed the nf-core version of the sentieon/wgsmetricsalgo module [#404](https://github.com/nf-core/raredisease/pull/404) + ### `Fixed` From a9993518db2f98ebe3bccacc23c4b26731303202 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 15 Aug 2023 13:07:21 +0000 Subject: [PATCH 1355/1921] prettier --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b548c69..244eda8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/dnamodelapply module [#403](https://github.com/nf-core/raredisease/pull/403) - Installed the nf-core version of the sentieon/wgsmetricsalgo module [#404](https://github.com/nf-core/raredisease/pull/404) - ### `Fixed` - Invalid GATK4 container which caused incorrect singularity downloads with nf-core download [nf-core/modules #3668](https://github.com/nf-core/modules/issues/3668) From cc653d32fab318b59499c0c8750ada8f509f2730 Mon Sep 17 00:00:00 2001 From: Anders Sune Pedersen <37172585+asp8200@users.noreply.github.com> Date: Tue, 15 Aug 2023 15:11:44 +0200 Subject: [PATCH 1356/1921] Update subworkflows/local/qc_bam.nf Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- subworkflows/local/qc_bam.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index a86cd7ee..9331523e 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -10,7 +10,7 @@ include { MOSDEPTH } from '../../m include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' -include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' workflow QC_BAM { From dc9e4465c07e852a7201832dc7db7a1e5b547e14 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Aug 2023 18:15:18 +0200 Subject: [PATCH 1357/1921] add filtervep --- modules.json | 7 ++++++- modules/nf-core/sentieon/bwamem/main.nf | 4 ++-- modules/nf-core/sentieon/bwamem/meta.yml | 10 ++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/modules.json b/modules.json index bd9dc135..ba35fbad 100644 --- a/modules.json +++ b/modules.json @@ -95,6 +95,11 @@ "git_sha": "39656f68219340420f03bd54a68e111c86e107e6", "installed_by": ["modules"] }, + "ensemblvep/filtervep": { + "branch": "master", + "git_sha": "29984d70aea47d06f0062a1785d76c357dd40ea9", + "installed_by": ["modules"] + }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", @@ -352,7 +357,7 @@ }, "sentieon/bwamem": { "branch": "master", - "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", + "git_sha": "149b4746c6e16ef84f64db5bb245d5b9495fdc3f", "installed_by": ["modules"] }, "sentieon/datametrics": { diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index aeca2825..b58835fd 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -10,8 +10,8 @@ process SENTIEON_BWAMEM { input: tuple val(meta), path(reads) tuple val(meta2), path(index) - path(fasta) - path(fasta_fai) + tuple val(meta3), path(fasta) + tuple val(meta4), path(fasta_fai) output: tuple val(meta), path("*.bam"), path("*.bai"), emit: bam_and_bai diff --git a/modules/nf-core/sentieon/bwamem/meta.yml b/modules/nf-core/sentieon/bwamem/meta.yml index 3d1546c5..9987e8c9 100644 --- a/modules/nf-core/sentieon/bwamem/meta.yml +++ b/modules/nf-core/sentieon/bwamem/meta.yml @@ -33,10 +33,20 @@ input: type: file description: BWA genome index files pattern: "*.{amb,ann,bwt,pac,sa}" + - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] - fasta: type: file description: Genome fasta file pattern: "*.{fa,fasta}" + - meta4: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] - fasta_fai: type: file description: The index of the FASTA reference. From c0136b8acad08d7016b4dd3d6f0d849821b74120 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Aug 2023 18:21:49 +0200 Subject: [PATCH 1358/1921] add filtervep2 --- modules/nf-core/ensemblvep/filtervep/main.nf | 50 +++++++++++++++++++ modules/nf-core/ensemblvep/filtervep/meta.yml | 47 +++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 modules/nf-core/ensemblvep/filtervep/main.nf create mode 100644 modules/nf-core/ensemblvep/filtervep/meta.yml diff --git a/modules/nf-core/ensemblvep/filtervep/main.nf b/modules/nf-core/ensemblvep/filtervep/main.nf new file mode 100644 index 00000000..7fa2477a --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/main.nf @@ -0,0 +1,50 @@ +process ENSEMBLVEP_FILTERVEP { + tag "$meta.id" + label 'process_single' + + conda "bioconda::ensembl-vep=110.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ensembl-vep:110.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" + + input: + tuple val(meta), path(input) + path (feature_file) + + output: + tuple val(meta), path("*.${extension}"), emit: output + 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}" + extension = task.ext.suffix ?: "vcf" + """ + filter_vep \\ + $args \\ + --input_file $input \\ + --output_file ${prefix}.${extension} \\ + --only_matched + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + extension = task.ext.suffix ?: "vcf" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ +} + diff --git a/modules/nf-core/ensemblvep/filtervep/meta.yml b/modules/nf-core/ensemblvep/filtervep/meta.yml new file mode 100644 index 00000000..603c0040 --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/meta.yml @@ -0,0 +1,47 @@ +name: "ensemblvep_filtervep" +description: Filter variants based on Ensembl Variant Effect Predictor (VEP) annotations. +keywords: + - annotation + - vcf + - tab + - filter +tools: + - ensemblvep: + description: | + VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs + or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. + homepage: https://www.ensembl.org/info/docs/tools/vep/index.html + documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - input: + type: file + description: VCF/TAB file annotated with vep + pattern: "*.{vcf,tab,tsv,txt}" + - feature_file: + type: file + description: File containing features on separate lines. To be used with --filter option. + +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" + - output: + type: file + description: VCF/TAB file + pattern: "*.{vcf,tab,txt,tsv}" + +authors: + - "@ramprasadn" From 96ee2146fa375decbeb0d32cc2e53f8594214e51 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Aug 2023 23:01:06 +0200 Subject: [PATCH 1359/1921] move filtervep --- modules/local/filter_vep.nf | 49 ------------------------------------- workflows/raredisease.nf | 24 ++++++++---------- 2 files changed, 10 insertions(+), 63 deletions(-) delete mode 100644 modules/local/filter_vep.nf diff --git a/modules/local/filter_vep.nf b/modules/local/filter_vep.nf deleted file mode 100644 index 3fbe8dad..00000000 --- a/modules/local/filter_vep.nf +++ /dev/null @@ -1,49 +0,0 @@ -process FILTER_VEP { - tag "$meta.id" - label 'process_low' - - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error("Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead.") - } - container "docker.io/ensemblorg/ensembl-vep:release_107.0" - - input: - tuple val(meta), path(vcf) - path (select_feature_file) - - output: - tuple val(meta), path("*.ann_filter.vcf"), 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}" - """ - filter_vep \\ - --format vcf \\ - --input_file $vcf \\ - --output_file ${prefix}.ann_filter.vcf \\ - --only_matched \\ - --filter \"HGNC_ID in ${select_feature_file}\" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.ann_filter.vcf - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS - """ -} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0704b202..71cd9b8e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -86,14 +86,6 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// -// MODULE: local modules -// - -include { FILTER_VEP as FILTER_VEP_SNV } from '../modules/local/filter_vep' -include { FILTER_VEP as FILTER_VEP_SV } from '../modules/local/filter_vep' -include { TABIX_BGZIPTABIX as BGZIPTABIX_SNV } from '../modules/nf-core/tabix/bgziptabix' -include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix/bgziptabix' // // MODULE: Installed directly from nf-core/modules @@ -105,6 +97,10 @@ include { FASTQC } from '../modules/nf-core/fastq include { GATK4_SELECTVARIANTS } from '../modules/nf-core/gatk4/selectvariants/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' +include { ENSEMBLVEP_FILTERVEP as FILTERVEP_SNV } from '../modules/nf-core/ensemblvep/filtervep' +include { ENSEMBLVEP_FILTERVEP as FILTERVEP_SV } from '../modules/nf-core/ensemblvep/filtervep' +include { TABIX_BGZIPTABIX as BGZIPTABIX_SNV } from '../modules/nf-core/tabix/bgziptabix' +include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix/bgziptabix' // // SUBWORKFLOWS @@ -430,13 +426,13 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) - FILTER_VEP_SV( + FILTERVEP_SV( RANK_VARIANTS_SV.out.vcf, ch_vep_filters ) - ch_versions = ch_versions.mix(FILTER_VEP_SV.out.versions) + ch_versions = ch_versions.mix(FILTERVEP_SV.out.versions) - BGZIPTABIX_SV(FILTER_VEP_SV.out.vcf) + BGZIPTABIX_SV(FILTERVEP_SV.out.output) ch_versions = ch_versions.mix(BGZIPTABIX_SV.out.versions) } @@ -533,13 +529,13 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) - FILTER_VEP_SNV( + FILTERVEP_SNV( RANK_VARIANTS_SNV.out.vcf, ch_vep_filters ) - ch_versions = ch_versions.mix(FILTER_VEP_SNV.out.versions) + ch_versions = ch_versions.mix(FILTERVEP_SNV.out.versions) - BGZIPTABIX_SNV(FILTER_VEP_SNV.out.vcf) + BGZIPTABIX_SNV(FILTERVEP_SNV.out.output) ch_versions = ch_versions.mix(BGZIPTABIX_SNV.out.versions) } From b33a2f7527df090bd7686b725bc70146967a67ce Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 16 Aug 2023 23:59:10 +0200 Subject: [PATCH 1360/1921] fix sentieon call --- subworkflows/local/alignment/align_sentieon.nf | 2 +- subworkflows/local/mitochondria/align_and_call_MT.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 86447e81..044b0fb6 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -17,7 +17,7 @@ workflow ALIGN_SENTIEON { main: ch_versions = Channel.empty() - SENTIEON_BWAMEM ( ch_reads_input, ch_bwa_index, ch_genome_fasta.map{ meta, fasta -> fasta }, ch_genome_fai.map{ meta, fai -> fai }) + SENTIEON_BWAMEM ( ch_reads_input, ch_bwa_index, ch_genome_fasta, ch_genome_fai ) SENTIEON_BWAMEM.out .bam_and_bai diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index fb00739a..d857b11a 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -32,7 +32,7 @@ workflow ALIGN_AND_CALL_MT { BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) - SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta.map{ meta, fasta -> fasta }, ch_fai.map{ meta, fai -> fai } ) + SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) Channel.empty() .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] }) From 31e72fb3c4516e16959e7a7feccddb3544e7261c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:07:24 +0200 Subject: [PATCH 1361/1921] add sentieon config --- conf/test.config | 7 ----- conf/test_sentieon.config | 59 +++++++++++++++++++++++++++++++++++++++ nextflow.config | 1 + 3 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 conf/test_sentieon.config diff --git a/conf/test.config b/conf/test.config index 9093bfb6..8065aa8a 100644 --- a/conf/test.config +++ b/conf/test.config @@ -50,10 +50,3 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } - -process { - withLabel: 'sentieon' { - ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 - ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 - } -} diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config new file mode 100644 index 00000000..9093bfb6 --- /dev/null +++ b/conf/test_sentieon.config @@ -0,0 +1,59 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/raredisease -profile test, --outdir + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run on GitHub Actions + max_cpus = 2 + max_memory = '6.GB' + max_time = '2.h' + + // reference 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" + 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" + 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" + 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" + svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" + target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" + variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" + vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" + vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" + vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" + vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" + vep_cache_version = 107 +} + +process { + withLabel: 'sentieon' { + ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 + ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 + } +} diff --git a/nextflow.config b/nextflow.config index 185940df..2ec6a4df 100644 --- a/nextflow.config +++ b/nextflow.config @@ -196,6 +196,7 @@ profiles { test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } test_one_sample { includeConfig 'conf/test_one_sample.config' } + test_sentieon { includeConfig 'conf/test_sentieon.config' } } // Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile From 6e99425ff919574b69832fe8624cb64623545b7e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:16:57 +0200 Subject: [PATCH 1362/1921] add dnascope --- modules.json | 353 +++++++++++++----- modules/local/sentieon/dnascope.nf | 62 --- modules/nf-core/sentieon/dnascope/main.nf | 91 +++++ modules/nf-core/sentieon/dnascope/meta.yml | 103 +++++ .../variant_calling/call_snv_sentieon.nf | 6 +- workflows/raredisease.nf | 4 +- 6 files changed, 465 insertions(+), 154 deletions(-) delete mode 100644 modules/local/sentieon/dnascope.nf create mode 100644 modules/nf-core/sentieon/dnascope/main.nf create mode 100644 modules/nf-core/sentieon/dnascope/meta.yml diff --git a/modules.json b/modules.json index b4e2c848..961708a2 100644 --- a/modules.json +++ b/modules.json @@ -8,435 +8,614 @@ "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": "bd4e0df3319c171072d09dade42e3c06fa373779", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/merge": { "branch": "master", "git_sha": "f7219b428dc69f93aa19f219fb7ce8eae8720400", - "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/sort": { "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" + ] }, "chromograph": { "branch": "master", "git_sha": "aad210ba51500be029740d088b4b4827f6f41509", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "deepvariant": { "branch": "master", "git_sha": "4b7d4863a5883b76e6bff13b6e52468fab090c5b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "eklipse": { "branch": "master", "git_sha": "39656f68219340420f03bd54a68e111c86e107e6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "bd8092b67b5103bdd52e300f75889442275c3117", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/collectreadcounts": { "branch": "master", "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/germlinecnvcaller": { "branch": "master", "git_sha": "f6b848c6e1af9a9ecf4975aa8c8edad05e75e784", - "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/postprocessgermlinecnvcalls": { "branch": "master", "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/preprocessintervals": { "branch": "master", "git_sha": "1226419498a14d17f98d12d6488d333b0dbd0418", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/printreads": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "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": "541811d779026c5d395925895fa5ed35e7216cc0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/shiftfasta": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "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": "80dbd95c558a0ebb2123d95f50c093a7f714a0d7", - "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": "a0f7be95788366c1923171e358da7d049eb440f9", - "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" + ] }, "sentieon/bwaindex": { "branch": "master", "git_sha": "49af8ed458e28729e483bc96e5a57c28163b9ea0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "sentieon/bwamem": { "branch": "master", "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "sentieon/datametrics": { "branch": "master", "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "sentieon/dedup": { "branch": "master", "git_sha": "915a0b16ba3e40ef59e7b44843b3118e17a9c906", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "sentieon/dnamodelapply": { "branch": "master", "git_sha": "43ef68091a1188fd8dc4c03f9341b556803c7514", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "sentieon/dnascope": { + "branch": "master", + "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", + "installed_by": [ + "modules" + ] }, "sentieon/readwriter": { "branch": "master", "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", - "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/bgzip": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "591b71642820933dcb3c954c934b397bd00d8e5e", - "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": "1c90a501d102b800c27697f5ef39a6e217ab1915", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/sv": { "branch": "master", "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "66290981ab6038ea86177ade40b9449bc790b0ce", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "untar": { "branch": "master", "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "upd": { "branch": "master", "git_sha": "9b159849d74f0eef251168c81c16da08215bbad5", - "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/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf deleted file mode 100644 index d03fe2d4..00000000 --- a/modules/local/sentieon/dnascope.nf +++ /dev/null @@ -1,62 +0,0 @@ -process SENTIEON_DNASCOPE { - tag "$meta.id" - label 'process_high' - label 'sentieon' - - input: - tuple val(meta), path(bam), path(bai) - 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 - - output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*.vcf.gz.tbi") , emit: index - tuple val(meta), path("*.vcf.gz"), path("*.vcf.gz.tbi"), emit: vcf_index - 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 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}" - - """ - sentieon driver \\ - -t $task.cpus \\ - -r $fasta \\ - $args \\ - -i $bam \\ - --algo DNAscope \\ - $dbsnp \\ - $interval \\ - $args2 \\ - $model \\ - ${prefix}.vcf.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.vcf.gz - touch ${prefix}.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf new file mode 100644 index 00000000..acc0ca7b --- /dev/null +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -0,0 +1,91 @@ +process SENTIEON_DNASCOPE { + tag "$meta.id" + label 'process_high' + label 'sentieon' + + secret 'SENTIEON_LICENSE_BASE64' + + container 'nf-core/sentieon:202112.06' + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dbsnp) + tuple val(meta5), path(dbsnp_tbi) + tuple val(meta6), path(call_interval) + tuple val(meta7), path(ml_model) + + output: + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def interval = call_interval ? "--interval ${call_interval}" : '' + def dbsnp_str = dbsnp ? "-d ${dbsnp}" : '' + def model = ml_model ? "--model ${ml_model}" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' + def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + + """ + if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. + export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) + else # Localhost license file + # The license file is stored as a nextflow variable like, for instance, this: + # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) + export SENTIEON_LICENSE=\$(mktemp) + echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE + fi + + if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then + # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. + export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) + export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) + echo "Decoded and exported Sentieon test-license system environment variables" + fi + + sentieon driver \\ + -t $task.cpus \\ + -r $fasta \\ + $args \\ + $interval \\ + -i $bam \\ + --algo DNAscope \\ + $dbsnp_str \\ + $args2 \\ + $model \\ + ${prefix}.vcf.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + } + """ + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g" ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/sentieon/dnascope/meta.yml b/modules/nf-core/sentieon/dnascope/meta.yml new file mode 100644 index 00000000..82154b38 --- /dev/null +++ b/modules/nf-core/sentieon/dnascope/meta.yml @@ -0,0 +1,103 @@ +name: sentieon_dnascope +description: DNAscope algorithm performs an improved version of Haplotype variant calling. +keywords: + - dnascope + - sentieon + - variant_calling +tools: + - sentieon: + description: | + Sentieon® provides complete solutions for secondary DNA/RNA analysis for a variety of sequencing platforms, including short and long reads. + Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. + homepage: https://www.sentieon.com/ + documentation: https://www.sentieon.com/ +input: + - meta: + type: map + description: | + Groovy Map containing sample information. + e.g. [ id:'test', single_end:false ] + - 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' ] + - meta5: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test' ] + - meta6: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test' ] + - meta7: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test' ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - dbsnp: + type: file + description: Single Nucleotide Polymorphism database (dbSNP) file + pattern: "*.vcf.gz" + - dbsnp_tbi: + type: file + description: Index of the Single Nucleotide Polymorphism database (dbSNP) file + pattern: "*.vcf.gz.tbi" + - call_interval: + type: file + description: bed or interval_list file containing interval in the reference that will be used in the analysis + pattern: "*.{bed,interval_list}" + - ml_model: + type: file + description: machine learning model file + pattern: "*.model" + +output: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf.gz}" + - index: + type: file + description: Index of the VCF file + pattern: "*.vcf.gz.tbi" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index bbcdbc19..b121a919 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -2,7 +2,7 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { SENTIEON_DNASCOPE } from '../../../modules/local/sentieon/dnascope' +include { SENTIEON_DNASCOPE } from '../../../modules/nf-core/sentieon/dnascope/main' include { SENTIEON_DNAMODELAPPLY } from '../../../modules/nf-core/sentieon/dnamodelapply/main' include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge/main' include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' @@ -20,7 +20,7 @@ workflow CALL_SNV_SENTIEON { ch_dbsnp // channel: [mandatory] [ val(meta), path(vcf) ] ch_dbsnp_index // channel: [mandatory] [ val(meta), path(tbi) ] ch_call_interval // channel: [mandatory] [ path(interval) ] - ch_ml_model // channel: [mandatory] [ path(model) ] + ch_ml_model // channel: [mandatory] [ val(meta), path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] main: @@ -28,7 +28,7 @@ workflow CALL_SNV_SENTIEON { 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_genome_fasta, ch_genome_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 ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0704b202..53321013 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -234,8 +234,8 @@ workflow RAREDISEASE { : Channel.empty() ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() : Channel.empty() - ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).collect() - : Channel.value([]) + ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals ch_mtshift_backchain = ch_references.mtshift_backchain ch_mtshift_bwaindex = ch_references.mtshift_bwa_index From 1e2f1880f5b833750729370f4ca3b774bf37c662 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:18:19 +0200 Subject: [PATCH 1363/1921] prettier --- modules.json | 350 +++++++++++++-------------------------------------- 1 file changed, 88 insertions(+), 262 deletions(-) diff --git a/modules.json b/modules.json index 961708a2..88716fda 100644 --- a/modules.json +++ b/modules.json @@ -8,614 +8,440 @@ "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": "bd4e0df3319c171072d09dade42e3c06fa373779", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", "git_sha": "f7219b428dc69f93aa19f219fb7ce8eae8720400", - "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/sort": { "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"] }, "chromograph": { "branch": "master", "git_sha": "aad210ba51500be029740d088b4b4827f6f41509", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "deepvariant": { "branch": "master", "git_sha": "4b7d4863a5883b76e6bff13b6e52468fab090c5b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "eklipse": { "branch": "master", "git_sha": "39656f68219340420f03bd54a68e111c86e107e6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "bd8092b67b5103bdd52e300f75889442275c3117", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/collectreadcounts": { "branch": "master", "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/germlinecnvcaller": { "branch": "master", "git_sha": "f6b848c6e1af9a9ecf4975aa8c8edad05e75e784", - "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/postprocessgermlinecnvcalls": { "branch": "master", "git_sha": "c6257c167fb88d18f3c2797e1af331d28f7b8ae7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/preprocessintervals": { "branch": "master", "git_sha": "1226419498a14d17f98d12d6488d333b0dbd0418", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "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": "541811d779026c5d395925895fa5ed35e7216cc0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", - "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": "80dbd95c558a0ebb2123d95f50c093a7f714a0d7", - "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": "a0f7be95788366c1923171e358da7d049eb440f9", - "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"] }, "sentieon/bwaindex": { "branch": "master", "git_sha": "49af8ed458e28729e483bc96e5a57c28163b9ea0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "sentieon/bwamem": { "branch": "master", "git_sha": "b9172e8c26a3db5009f7872654c44587e254f094", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "sentieon/datametrics": { "branch": "master", "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "sentieon/dedup": { "branch": "master", "git_sha": "915a0b16ba3e40ef59e7b44843b3118e17a9c906", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "sentieon/dnamodelapply": { "branch": "master", "git_sha": "43ef68091a1188fd8dc4c03f9341b556803c7514", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "sentieon/dnascope": { "branch": "master", "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "sentieon/readwriter": { "branch": "master", "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", - "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/bgzip": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "591b71642820933dcb3c954c934b397bd00d8e5e", - "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": "1c90a501d102b800c27697f5ef39a6e217ab1915", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "66290981ab6038ea86177ade40b9449bc790b0ce", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "untar": { "branch": "master", "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "upd": { "branch": "master", "git_sha": "9b159849d74f0eef251168c81c16da08215bbad5", - "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 249bf0dec531aef877bbec1b410a05988209e56a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:21:46 +0200 Subject: [PATCH 1364/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 244eda8d..00d4752e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removing Sentieon-based BQSR. Recent Illumina sequencers tend to provide well-calibrated BQs, so BQSR may not provide much benefit [#402](https://github.com/nf-core/raredisease/pull/402) - Installed the nf-core version of the sentieon/dnamodelapply module [#403](https://github.com/nf-core/raredisease/pull/403) - Installed the nf-core version of the sentieon/wgsmetricsalgo module [#404](https://github.com/nf-core/raredisease/pull/404) +- Installed the nf-core version of the sentieon/dnascope module [#406](https://github.com/nf-core/raredisease/pull/406) ### `Fixed` From 71a6c2b27421dfbaca4a2d2c187b03993695908d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 17 Aug 2023 11:32:28 +0200 Subject: [PATCH 1365/1921] fix error --- subworkflows/local/variant_calling/call_snv_sentieon.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index b121a919..50de505e 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -28,7 +28,9 @@ workflow CALL_SNV_SENTIEON { 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_genome_fasta, ch_genome_fai, ch_ml_model ) + ch_dnamodelapply_in = SENTIEON_DNASCOPE.out.vcf.join(SENTIEON_DNASCOPE.out.index, failOnMismatch:true, failOnDuplicate:true) + + SENTIEON_DNAMODELAPPLY ( ch_dnamodelapply_in, ch_genome_fasta, ch_genome_fai, ch_ml_model ) BCF_FILTER_ONE (SENTIEON_DNAMODELAPPLY.out.vcf ) From 3d0b9bb8a46e6d3854319a3a61a33eb2fb2e7038 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 17 Aug 2023 17:59:09 +0200 Subject: [PATCH 1366/1921] update suffix --- conf/modules/align_sentieon.config | 1 + subworkflows/local/variant_calling/call_snv_sentieon.nf | 8 ++++---- workflows/raredisease.nf | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index b39bad3c..3e002cb6 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -37,6 +37,7 @@ process { withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { ext.args = { $params.rmdup ? "--rmdup" : '' } ext.prefix = { "${meta.id}_dedup" } + ext.suffix = ".bam" publishDir = [ enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 50de505e..f7a36daf 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -15,11 +15,11 @@ include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-c workflow CALL_SNV_SENTIEON { take: 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_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), 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) ] + ch_call_interval // channel: [mandatory] [ val(meta), path(interval) ] ch_ml_model // channel: [mandatory] [ val(meta), path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] @@ -28,7 +28,7 @@ workflow CALL_SNV_SENTIEON { SENTIEON_DNASCOPE ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_dbsnp, ch_dbsnp_index, ch_call_interval, ch_ml_model ) - ch_dnamodelapply_in = SENTIEON_DNASCOPE.out.vcf.join(SENTIEON_DNASCOPE.out.index, failOnMismatch:true, failOnDuplicate:true) + ch_dnamodelapply_in = SENTIEON_DNASCOPE.out.vcf.join(SENTIEON_DNASCOPE.out.index) SENTIEON_DNAMODELAPPLY ( ch_dnamodelapply_in, ch_genome_fasta, ch_genome_fai, ch_ml_model ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 53321013..88a657d4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -209,8 +209,8 @@ workflow RAREDISEASE { 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_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).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_gcnvcaller_model = params.gcnvcaller_model ? Channel.fromPath(params.gcnvcaller_model).splitCsv ( header:true ) From 060f93294afc8be8db85b9d694165a2a9c9112bb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 18 Aug 2023 16:40:53 +0200 Subject: [PATCH 1367/1921] fix --- assets/schema_input.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/schema_input.json b/assets/schema_input.json index 165a1830..555f2c0a 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -53,6 +53,7 @@ "paternal_id": { "errorMessage": "Paternal ID cannot contain spaces", "meta": ["paternal"], + "default": "0", "anyOf": [ { "type": "string", @@ -67,6 +68,7 @@ "maternal_id": { "errorMessage": "Maternal ID cannot contain spaces", "meta": ["maternal"], + "default": "0", "anyOf": [ { "type": "string", From eda6ad7c5181bd75ba8dc50beb96b734d9519baa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 19 Aug 2023 12:14:27 +0200 Subject: [PATCH 1368/1921] update config --- conf/modules/raredisease.config | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 69419687..c4bab3d1 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -103,8 +103,9 @@ process { // process { - withName: '.*FILTER_VEP_SNV' { + withName: '.*FILTERVEP_SNV' { ext.prefix = { "${meta.id}_clinical_snv" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*BGZIPTABIX_SNV' { @@ -118,8 +119,9 @@ process { } process { - withName: '.*FILTER_VEP_SV' { + withName: '.*FILTERVEP_SV' { ext.prefix = { "${meta.id}_clinical_sv" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*BGZIPTABIX_SV' { From 94c95d31bf902b00e26c7d53667f5f6df875e355 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 19 Aug 2023 14:01:53 +0200 Subject: [PATCH 1369/1921] fix storage error --- conf/test.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/conf/test.config b/conf/test.config index 8065aa8a..9a13845b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -50,3 +50,9 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } + +process { + withName: '.*FILTERVEP.*' { + container = "docker.io/ensemblorg/ensembl-vep:release_107.0" + } +} From 087863861a112c9fc46c33e6bec4a4ac82e529c3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 20 Aug 2023 00:43:13 +0200 Subject: [PATCH 1370/1921] update configs --- conf/test_one_sample.config | 6 ++++++ conf/test_sentieon.config | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 7ffe7ba7..4fe746cc 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -50,3 +50,9 @@ params { vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 } + +process { + withName: '.*FILTERVEP.*' { + container = "docker.io/ensemblorg/ensembl-vep:release_107.0" + } +} diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index 9093bfb6..f729c35e 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -56,4 +56,8 @@ process { ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 } + + withName: '.*FILTERVEP.*' { + container = "docker.io/ensemblorg/ensembl-vep:release_107.0" + } } From a6a5ee347d9b880695d3a62bc21f992474fa4035 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:19:41 +0200 Subject: [PATCH 1371/1921] update configs --- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- conf/test_sentieon.config | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 9a13845b..145c44b2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -53,6 +53,6 @@ params { process { withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_107.0" + container = "docker.io/ensemblorg/ensembl-vep:release_110.1" } } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 4fe746cc..c83c8bd4 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -53,6 +53,6 @@ params { process { withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_107.0" + container = "docker.io/ensemblorg/ensembl-vep:release_110.1" } } diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index f729c35e..d3c4957b 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -58,6 +58,6 @@ process { } withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_107.0" + container = "docker.io/ensemblorg/ensembl-vep:release_110.1" } } From 7e3fe1bddb5c7173395ccdd379b2543b5764c1ff Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:21:06 +0200 Subject: [PATCH 1372/1921] review suggestion --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 2ec6a4df..04b1b670 100644 --- a/nextflow.config +++ b/nextflow.config @@ -196,7 +196,7 @@ profiles { test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } test_one_sample { includeConfig 'conf/test_one_sample.config' } - test_sentieon { includeConfig 'conf/test_sentieon.config' } + test_sentieon { includeConfig 'conf/test_sentieon.config' } } // Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile From c5fe695854b4d8935dbc2dc743e98d4d603de450 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Aug 2023 13:04:03 +0200 Subject: [PATCH 1373/1921] test to 107 --- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- conf/test_sentieon.config | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 145c44b2..9a13845b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -53,6 +53,6 @@ params { process { withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_110.1" + container = "docker.io/ensemblorg/ensembl-vep:release_107.0" } } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index c83c8bd4..4fe746cc 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -53,6 +53,6 @@ params { process { withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_110.1" + container = "docker.io/ensemblorg/ensembl-vep:release_107.0" } } diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index d3c4957b..f729c35e 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -58,6 +58,6 @@ process { } withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_110.1" + container = "docker.io/ensemblorg/ensembl-vep:release_107.0" } } From 9119dd40eae463350da04b964ffd864b6d0da544 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Aug 2023 14:07:13 +0200 Subject: [PATCH 1374/1921] dumpsoftwareversions --- modules.json | 2 +- modules/nf-core/custom/dumpsoftwareversions/main.nf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index 8341a899..2109f33a 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "05c280924b6c768d484c7c443dad5e605c4ff4b4", "installed_by": ["modules"] }, "deepvariant": { diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index ebc87273..c9d014b1 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { label 'process_single' // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container - conda "bioconda::multiqc=1.14" + conda "bioconda::multiqc=1.15" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.15--pyhdfd78af_0' : + 'biocontainers/multiqc:1.15--pyhdfd78af_0' }" input: path versions From 1c89bd464dc501f2c6730a41dd2783a3c3d66bf4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Aug 2023 15:42:00 +0200 Subject: [PATCH 1375/1921] update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00d4752e..8bdca814 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Make target bed file optional for WGS mode (Issue [#375](https://github.com/nf-core/raredisease/issues/375)) [#395](https://github.com/nf-core/raredisease/pull/395) - Added constraints to block the pipeline from running CollectWgsMetrics on WES samples [#396](https://github.com/nf-core/raredisease/pull/396) +### `Updated` + +| Tool | Old version | New version | +| ------------ | ----------- | ----------- | +| `filter_vep` | 107 | 110 | +| `multiqc` | 1.14 | 1.15 | +| `untar` | (grep 3.4) | (grep 3.11) | + ## v1.1.1 - Abu (Patch) [2023-07-26] ### `Fixed` From a2dfa8129fc53993cb99aa1e5b4b834a5428d866 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 21 Aug 2023 15:46:11 +0200 Subject: [PATCH 1376/1921] Update CHANGELOG.md Co-authored-by: Anders Sune Pedersen <37172585+asp8200@users.noreply.github.com> --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bdca814..4c483148 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Sort ranked SV vcf before indexing with tabix [#393](https://github.com/nf-core/raredisease/pull/393) - Make target bed file optional for WGS mode (Issue [#375](https://github.com/nf-core/raredisease/issues/375)) [#395](https://github.com/nf-core/raredisease/pull/395) - Added constraints to block the pipeline from running CollectWgsMetrics on WES samples [#396](https://github.com/nf-core/raredisease/pull/396) +- Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) ### `Updated` From f6c17a1246cb5769aaf80ab5062b958866c4c91d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Aug 2023 13:52:41 +0200 Subject: [PATCH 1377/1921] add skip_vep_filter --- conf/modules/raredisease.config | 22 ++++++++++++++++++++++ nextflow.config | 1 + nextflow_schema.json | 7 ++++++- workflows/raredisease.nf | 4 ++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index c4bab3d1..a1b98f2a 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -103,12 +103,23 @@ process { // process { + withName: '.*RANK_VARIANTS_SNV' { + publishDir = [ + enabled: params.skip_vep_filter, + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*FILTERVEP_SNV' { + ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_clinical_snv" } ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*BGZIPTABIX_SNV' { + ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_clinical_snv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, @@ -119,12 +130,23 @@ process { } process { + withName: '.*RANK_VARIANTS_SV' { + publishDir = [ + enabled: params.skip_vep_filter, + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*FILTERVEP_SV' { + ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_clinical_sv" } ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*BGZIPTABIX_SV' { + ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_clinical_sv" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, diff --git a/nextflow.config b/nextflow.config index 04b1b670..bd904b04 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,6 +27,7 @@ params { skip_cnv_calling = false skip_snv_annotation = false skip_sv_annotation = false + skip_vep_filter = false skip_mt_analysis = false gens_switch = false cadd_resources = null diff --git a/nextflow_schema.json b/nextflow_schema.json index f5216d76..ea742d93 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -386,7 +386,7 @@ "skip_cnv_calling": { "type": "boolean", "description": "Specifies whether or not to skip CNV calling.", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-toggle-on" }, "skip_mt_analysis": { "type": "boolean", @@ -402,6 +402,11 @@ "type": "boolean", "description": "Specifies whether or not to skip annotate structural variant subworkflow.", "fa_icon": "fas fa-toggle-on" + }, + "skip_vep_filter": { + "type": "boolean", + "description": "Specifies whether or not to skip filtering based on vep results.", + "fa_icon": "fas fa-toggle-on" } } }, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a2966fe7..1d1d8ddd 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -58,6 +58,10 @@ if (!params.skip_cnv_calling) { mandatoryParams += ["ploidy_model", "gcnvcaller_model"] } +if (!params.skip_vep_filter) { + mandatoryParams += ["vep_filters"] +} + def missingParamsCount = 0 for (param in mandatoryParams.unique()) { if (params[param] == null) { From f4ff764880dfbc33cb6632a1145486d1ebbf294e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Aug 2023 15:47:23 +0200 Subject: [PATCH 1378/1921] update docs --- docs/output.md | 2 +- docs/usage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 6d07a3bd..48a63012 100644 --- a/docs/output.md +++ b/docs/output.md @@ -437,7 +437,7 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files #### GENMOD -[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. VCF file annotated by GENMOD are further filtered using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) to separate clinically relevant variants. +[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. VCF file annotated by GENMOD are further filtered using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) to separate clinically relevant variants. You can skip the filtering step by setting --skip_vep_filter to true.
Output files diff --git a/docs/usage.md b/docs/usage.md index 57ad8780..24da77cd 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -224,7 +224,7 @@ See example cache [here](https://raw.githubusercontent.com/nf-core/test-datasets no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
6Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
7Used 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).
-8 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).
+8 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). Not required if --skip_vep_filter is set to true.
9Path 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>") From 53c5b9682e9523b9e47904e36c27e72015026b11 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Aug 2023 15:55:07 +0200 Subject: [PATCH 1379/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c483148..b834f2fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` - Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) +- A new parameter to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) ### `Changed` From 3abdb850836d56b80f4a2f4d71b998a7d438c7f2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Aug 2023 22:13:48 +0200 Subject: [PATCH 1380/1921] align --- subworkflows/local/align.nf | 93 ++++++++++++++----- subworkflows/local/alignment/align_MT.nf | 56 +++++++++++ subworkflows/local/convert_mt_bam_to_fastq.nf | 36 +++++++ workflows/raredisease.nf | 30 +++--- 4 files changed, 182 insertions(+), 33 deletions(-) create mode 100644 subworkflows/local/alignment/align_MT.nf create mode 100644 subworkflows/local/convert_mt_bam_to_fastq.nf diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 3455c3b9..f08ae7df 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -2,49 +2,100 @@ // Map to reference // -include { ALIGN_BWAMEM2 } from './alignment/align_bwamem2' -include { ALIGN_SENTIEON } from './alignment/align_sentieon' -include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' +include { ALIGN_BWAMEM2 } from './alignment/align_bwamem2' +include { ALIGN_SENTIEON } from './alignment/align_sentieon' +include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' +include { ALIGN_MT } from './alignment/align_MT' +include { ALIGN_MT as ALIGN_MT_SHIFT } from './alignment/align_MT' +include { CONVERT_MT_BAM_TO_FASTQ } from './convert_mt_bam_to_fastq' workflow ALIGN { take: - ch_reads_input // channel: [mandatory] [ val(meta), [path(reads)] ] - 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) ] - val_platform // string: [mandatory] illumina or a different technology + ch_reads // channel: [mandatory] [ val(meta), [path(reads)] ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_bwaindex // channel: [mandatory] [ val(meta), path(index) ] + ch_genome_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] + ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + 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_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] + val_platform // string: [mandatory] illumina or a different technology main: ch_versions = Channel.empty() ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 - ch_reads_input, - ch_bwamem2_index, + ch_reads, + ch_genome_bwamem2index, ch_genome_fasta, ch_genome_fai, val_platform ) ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon - ch_reads_input, + ch_reads, ch_genome_fasta, ch_genome_fai, - ch_bwa_index, + ch_genome_bwaindex, val_platform ) - 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) + ch_genome_marked_bam = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bam, ALIGN_SENTIEON.out.marked_bam) + ch_genome_marked_bai = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bai, ALIGN_SENTIEON.out.marked_bai) + ch_genome_bam_bai = ch_genome_marked_bam.join(ch_genome_marked_bai, failOnMismatch:true, failOnDuplicate:true) - SAMTOOLS_VIEW( ch_bam_bai, ch_genome_fasta, [] ) + // PREPARING READS FOR MT ALIGNMENT + CONVERT_MT_BAM_TO_FASTQ ( + ch_genome_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_genome_dictionary + ) + + ALIGN_MT ( + CONVERT_MT_BAM_TO_FASTQ.out.fastq, + CONVERT_MT_BAM_TO_FASTQ.out.bam, + ch_genome_bwaindex, + ch_genome_bwamem2index, + ch_genome_fasta, + ch_genome_dictionary, + ch_genome_fai + ) + + ALIGN_MT_SHIFT ( + CONVERT_MT_BAM_TO_FASTQ.out.fastq, + CONVERT_MT_BAM_TO_FASTQ.out.bam, + ch_mtshift_bwaindex, + ch_mtshift_bwamem2index, + ch_mtshift_fasta, + ch_mtshift_dictionary, + ch_mtshift_fai + ) + + ch_mt_marked_bam = Channel.empty().mix(ALIGN_MT.out.marked_bam, ALIGN_MT.out.marked_bam) + ch_mt_marked_bai = Channel.empty().mix(ALIGN_MT.out.marked_bai, ALIGN_MT.out.marked_bai) + ch_mt_bam_bai = ch_mt_marked_bam.join(ch_mt_marked_bai, failOnMismatch:true, failOnDuplicate:true) + + ch_mtshift_marked_bam = Channel.empty().mix(ALIGN_MT_SHIFT.out.marked_bam, ALIGN_MT_SHIFT.out.marked_bam) + ch_mtshift_marked_bai = Channel.empty().mix(ALIGN_MT_SHIFT.out.marked_bai, ALIGN_MT_SHIFT.out.marked_bai) + ch_mtshift_bam_bai = ch_mtshift_marked_bam.join(ch_mtshift_marked_bai, failOnMismatch:true, failOnDuplicate:true) + + SAMTOOLS_VIEW( ch_genome_bam_bai, ch_genome_fasta, [] ) ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) emit: - marked_bam = ch_marked_bam // channel: [ val(meta), path(bam) ] - marked_bai = ch_marked_bai // channel: [ val(meta), path(bai) ] - bam_bai = ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] - versions = ch_versions // channel: [ path(versions.yml) ] + genome_marked_bam = ch_genome_marked_bam // channel: [ val(meta), path(bam) ] + genome_marked_bai = ch_genome_marked_bai // channel: [ val(meta), path(bai) ] + genome_bam_bai = ch_genome_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + mt_marked_bam = ch_mt_marked_bam // channel: [ val(meta), path(bam) ] + mt_marked_bai = ch_mt_marked_bai // channel: [ val(meta), path(bai) ] + mt_bam_bai = ch_mt_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + mtshift_marked_bam = ch_mtshift_marked_bam // channel: [ val(meta), path(bam) ] + mtshift_marked_bai = ch_mtshift_marked_bai // channel: [ val(meta), path(bai) ] + mtshift_bam_bai = ch_mtshift_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf new file mode 100644 index 00000000..5ae8ace7 --- /dev/null +++ b/subworkflows/local/alignment/align_MT.nf @@ -0,0 +1,56 @@ +// +// Align and call MT +// + +include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' +include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' +include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' +include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' +include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../../modules/nf-core/picard/markduplicates/main' +include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../../modules/nf-core/samtools/sort/main' + +workflow ALIGN_MT { + take: + 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) ] + + main: + ch_versions = Channel.empty() + + BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) + + SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) + + Channel.empty() + .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] }) + .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) + .set {ch_bam_ubam} + + GATK4_MERGEBAMALIGNMENT_MT (ch_bam_ubam, ch_fasta, ch_dict) + + PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) + + PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, ch_fasta, ch_fai) + + SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) + + SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) + + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) + 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()) + + emit: + marked_bam = SAMTOOLS_SORT_MT.out.bam // channel: [ val(meta), path(bam) ] + marked_bai = SAMTOOLS_INDEX_MT.out.bai // channel: [ val(meta), path(bai) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/local/convert_mt_bam_to_fastq.nf b/subworkflows/local/convert_mt_bam_to_fastq.nf new file mode 100644 index 00000000..ca19ea82 --- /dev/null +++ b/subworkflows/local/convert_mt_bam_to_fastq.nf @@ -0,0 +1,36 @@ +// +// Prepare bam files for MT allignment +// + +include { GATK4_PRINTREADS as GATK4_PRINTREADS_MT } from '../../modules/nf-core/gatk4/printreads/main' +include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/gatk4/revertsam/main' +include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/gatk4/samtofastq/main' + +workflow CONVERT_MT_BAM_TO_FASTQ { + take: + 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_bai, ch_genome_fasta, ch_genome_fai, ch_genome_dict ) + + // Removes alignment information + GATK4_REVERTSAM_MT ( GATK4_PRINTREADS_MT.out.bam ) + + // Outputs fastq files + GATK4_SAMTOFASTQ_MT ( GATK4_REVERTSAM_MT.out.bam ) + + ch_versions = ch_versions.mix(GATK4_PRINTREADS_MT.out.versions.first()) + ch_versions = ch_versions.mix(GATK4_REVERTSAM_MT.out.versions.first()) + ch_versions = ch_versions.mix(GATK4_SAMTOFASTQ_MT.out.versions.first()) + + emit: + fastq = GATK4_SAMTOFASTQ_MT.out.fastq // channel: [ val(meta), [ path(fastq) ] ] + bam = GATK4_REVERTSAM_MT.out.bam // channel: [ val(meta), path(bam) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a2966fe7..ce35c6bb 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -296,6 +296,12 @@ workflow RAREDISEASE { ch_genome_fai, ch_genome_bwaindex, ch_genome_bwamem2index, + ch_genome_dictionary, + ch_mtshift_bwaindex, + ch_mtshift_bwamem2index, + ch_mtshift_fasta, + ch_mtshift_dictionary, + ch_mtshift_fai, params.platform ) .set { ch_mapped } @@ -303,9 +309,9 @@ workflow RAREDISEASE { // BAM QUALITY CHECK QC_BAM ( - ch_mapped.marked_bam, - ch_mapped.marked_bai, - ch_mapped.bam_bai, + ch_mapped.genome_marked_bam, + ch_mapped.genome_marked_bai, + ch_mapped.genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_bait_intervals, @@ -318,7 +324,7 @@ workflow RAREDISEASE { // EXPANSIONHUNTER AND STRANGER CALL_REPEAT_EXPANSIONS ( - ch_mapped.bam_bai, + ch_mapped.genome_bam_bai, ch_variant_catalog, ch_case_info, ch_genome_fasta, @@ -327,12 +333,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) // STEP 1.7: SMNCOPYNUMBERCALLER - ch_mapped.bam_bai + ch_mapped.genome_bam_bai .collect{it[1]} .toList() .set { ch_bam_list } - ch_mapped.bam_bai + ch_mapped.genome_bam_bai .collect{it[2]} .toList() .set { ch_bai_list } @@ -349,7 +355,7 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING CALL_SNV ( - ch_mapped.bam_bai, + ch_mapped.genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_dbsnp, @@ -361,9 +367,9 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CALL_SNV.out.versions) CALL_STRUCTURAL_VARIANTS ( - ch_mapped.marked_bam, - ch_mapped.marked_bai, - ch_mapped.bam_bai, + ch_mapped.genome_marked_bam, + ch_mapped.genome_marked_bai, + ch_mapped.genome_bam_bai, ch_genome_bwaindex, ch_genome_fasta, ch_genome_fai, @@ -387,7 +393,7 @@ workflow RAREDISEASE { // GENS if (params.gens_switch) { GENS ( - ch_mapped.bam_bai, + ch_mapped.genome_bam_bai, CALL_SNV.out.vcf, ch_genome_fasta, ch_genome_fai, @@ -439,7 +445,7 @@ workflow RAREDISEASE { if (!params.skip_mt_analysis) { ANALYSE_MT ( - ch_mapped.bam_bai, + ch_mapped.genome_bam_bai, ch_cadd_header, ch_cadd_resources, ch_genome_bwaindex, From 1bdbbf68f4bbe23af14ab56e574c7530f1dd59c3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 23 Aug 2023 22:17:05 +0200 Subject: [PATCH 1381/1921] comment --- subworkflows/local/alignment/align_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 5ae8ace7..17ecc362 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -1,5 +1,5 @@ // -// Align and call MT +// Align MT // include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' From 698e067bdbb2e28d8ee72973a342fcb65a0dd5c8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 00:37:05 +0200 Subject: [PATCH 1382/1921] update versions --- subworkflows/local/align.nf | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index f08ae7df..a705f16e 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -75,17 +75,20 @@ workflow ALIGN { ch_mtshift_fai ) - ch_mt_marked_bam = Channel.empty().mix(ALIGN_MT.out.marked_bam, ALIGN_MT.out.marked_bam) - ch_mt_marked_bai = Channel.empty().mix(ALIGN_MT.out.marked_bai, ALIGN_MT.out.marked_bai) + ch_mt_marked_bam = ALIGN_MT.out.marked_bam + ch_mt_marked_bai = ALIGN_MT.out.marked_bai ch_mt_bam_bai = ch_mt_marked_bam.join(ch_mt_marked_bai, failOnMismatch:true, failOnDuplicate:true) - ch_mtshift_marked_bam = Channel.empty().mix(ALIGN_MT_SHIFT.out.marked_bam, ALIGN_MT_SHIFT.out.marked_bam) - ch_mtshift_marked_bai = Channel.empty().mix(ALIGN_MT_SHIFT.out.marked_bai, ALIGN_MT_SHIFT.out.marked_bai) + ch_mtshift_marked_bam = ALIGN_MT_SHIFT.out.marked_bam + ch_mtshift_marked_bai = ALIGN_MT_SHIFT.out.marked_bai ch_mtshift_bam_bai = ch_mtshift_marked_bam.join(ch_mtshift_marked_bai, failOnMismatch:true, failOnDuplicate:true) SAMTOOLS_VIEW( ch_genome_bam_bai, ch_genome_fasta, [] ) - ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) + ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, + ALIGN_SENTIEON.out.versions, + ALIGN_MT.out.versions, + ALIGN_MT_SHIFT.out.versions) emit: genome_marked_bam = ch_genome_marked_bam // channel: [ val(meta), path(bam) ] From 97796fa2cf2af16d314bf84f0b4f6c988970c9d8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 00:38:15 +0200 Subject: [PATCH 1383/1921] mt snv calling --- subworkflows/local/call_snv.nf | 84 ++++++++++++++----- .../local/variant_calling/call_snv_MT.nf | 50 +++++++++++ workflows/raredisease.nf | 13 ++- 3 files changed, 124 insertions(+), 23 deletions(-) create mode 100644 subworkflows/local/variant_calling/call_snv_MT.nf diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 7b63825e..75be4080 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -2,21 +2,31 @@ // call Single-nucleotide Varinats // -include { CALL_SNV_DEEPVARIANT } from './variant_calling/call_snv_deepvariant' -include { CALL_SNV_SENTIEON } from './variant_calling/call_snv_sentieon' -include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' - +include { CALL_SNV_DEEPVARIANT } from './variant_calling/call_snv_deepvariant' +include { CALL_SNV_SENTIEON } from './variant_calling/call_snv_sentieon' +include { CALL_SNV_MT } from './variant_calling/call_snv_MT' +include { CALL_SNV_MT as CALL_SNV_MT_SHIFT } from './variant_calling/call_snv_MT' +include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' workflow CALL_SNV { take: - 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) ] - ch_ml_model // channel: [mandatory] [ path(model) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_genome_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_mt_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_mtshift_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_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + ch_mt_intervals // channel: [optional] [ path(interval_list) ] + ch_mtshift_fasta // channel: [optional] [ val(meta), path(fasta) ] + ch_mtshift_fai // channel: [optional] [ val(meta), path(fai) ] + ch_mtshift_dictionary // channel: [optional] [ val(meta), path(dict) ] + ch_mtshift_intervals // channel: [optional] [ path(interval_list) ] + ch_mtshift_backchain // channel: [mandatory] [ val(meta), path(back_chain) ] + ch_dbsnp // channel: [optional] [ val(meta), path(vcf) ] + ch_dbsnp_tbi // channel: [optional] [ val(meta), path(tbi) ] + ch_call_interval // channel: [mandatory] [ path(intervals) ] + ch_ml_model // channel: [mandatory] [ path(model) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() @@ -24,31 +34,63 @@ workflow CALL_SNV { ch_tabix = Channel.empty() CALL_SNV_DEEPVARIANT ( // triggered only when params.variant_caller is set as deepvariant - ch_bam_bai, + ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info ) CALL_SNV_SENTIEON( // triggered only when params.variant_caller is set as sentieon - ch_bam_bai, + ch_genome_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, ch_case_info ) - ch_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) - ch_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) + CALL_SNV_MT( + ch_mt_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_genome_dictionary, + ch_mt_intervals + ) + + CALL_SNV_MT_SHIFT( + ch_mtshift_bam_bai, + ch_mtshift_fasta, + ch_mtshift_fai, + ch_mtshift_dictionary, + ch_mtshift_intervals + ) + + // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT + PICARD_LIFTOVERVCF ( + CALL_SNV_MT_SHIFT.out.vcf, + ch_genome_dictionary, + ch_genome_fasta, + ch_mtshift_backchain, + ) + + ch_genome_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) + ch_genome_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) + + ch_mt_vcf = CALL_SNV_MT.out.vcf + ch_mtshift_vcf = PICARD_LIFTOVERVCF.out.vcf_lifted ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) + ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) + ch_versions = ch_versions.mix(CALL_SNV_MT_SHIFT.out.versions) + ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) emit: - vcf = ch_vcf // channel: [ val(meta), path(vcf) ] - tabix = ch_tabix // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] + genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] + mt_vcf = ch_mt_vcf // channel: [ val(meta), path(vcf) ] + mtshift_vcf = ch_mtshift_vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_snv_MT.nf b/subworkflows/local/variant_calling/call_snv_MT.nf new file mode 100644 index 00000000..e91718ad --- /dev/null +++ b/subworkflows/local/variant_calling/call_snv_MT.nf @@ -0,0 +1,50 @@ +// +// Call SNV MT +// + +include { HAPLOCHECK as HAPLOCHECK_MT } from '../../../modules/nf-core/haplocheck/main' +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 { MT_DELETION } from '../../../modules/local/mt_deletion_script' +include { EKLIPSE as EKLIPSE_MT } from '../../../modules/nf-core/eklipse/main' + +workflow CALL_SNV_MT { + take: + 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_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_intervals // channel: [mandatory] [ path(interval_list) ] + + main: + ch_versions = Channel.empty() + + ch_bam_bai_int = ch_bam_bai.combine(ch_intervals) + + GATK4_MUTECT2_MT (ch_bam_bai_int, ch_fasta, ch_fai, ch_dict, [], [], [],[]) + + HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) + + // Filter Mutect2 calls + ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + ch_mutect_out = ch_mutect_vcf.join(GATK4_MUTECT2_MT.out.stats, failOnMismatch:true, failOnDuplicate:true) + ch_to_filt = ch_mutect_out.map { + meta, vcf, tbi, stats -> + return [meta, vcf, tbi, stats, [], [], [], []] + } + + GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, ch_fasta, ch_fai, ch_dict) + + 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) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ce35c6bb..5112553b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -356,8 +356,17 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING CALL_SNV ( ch_mapped.genome_bam_bai, + ch_mapped.mt_bam_bai, + ch_mapped.mtshift_bam_bai, ch_genome_fasta, ch_genome_fai, + ch_genome_dictionary, + ch_mt_intervals, + ch_mtshift_fasta, + ch_mtshift_fai, + ch_mtshift_dictionary, + ch_mtshift_intervals, + ch_mtshift_backchain, ch_dbsnp, ch_dbsnp_tbi, ch_call_interval, @@ -385,7 +394,7 @@ workflow RAREDISEASE { // ped correspondence, sex check, ancestry check PEDDY_CHECK ( - CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, failOnMismatch:true, failOnDuplicate:true), + CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true), ch_pedfile ) ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) @@ -477,7 +486,7 @@ workflow RAREDISEASE { if (!params.skip_snv_annotation) { - ch_vcf = CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, failOnMismatch:true, failOnDuplicate:true) + ch_vcf = CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true) if (!params.skip_mt_analysis) { ch_vcf From 0c61ea688d12f3f9650e150f432e755d79f9af4f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 10:38:54 +0200 Subject: [PATCH 1384/1921] Update nextflow_schema.json --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index ea742d93..af85e653 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -405,7 +405,7 @@ }, "skip_vep_filter": { "type": "boolean", - "description": "Specifies whether or not to skip filtering based on vep results.", + "description": "Specifies whether or not to filter results based on a list of candidate genes specified in 'vep_filters'.", "fa_icon": "fas fa-toggle-on" } } From a4320bb64381556ec9777a7290df409fb3defa2e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 15:37:10 +0200 Subject: [PATCH 1385/1921] SV config --- conf/modules/align_MT.config | 98 +++++++++++++++++++ conf/modules/call_snv_MT.config | 43 ++++++++ conf/modules/call_sv_MT.config | 51 ++++++++++ nextflow.config | 3 + .../local/call_structural_variants.nf | 31 +++--- .../local/variant_calling/call_sv_MT.nf | 29 ++++++ workflows/raredisease.nf | 3 + 7 files changed, 247 insertions(+), 11 deletions(-) create mode 100644 conf/modules/align_MT.config create mode 100644 conf/modules/call_snv_MT.config create mode 100644 conf/modules/call_sv_MT.config create mode 100644 subworkflows/local/variant_calling/call_sv_MT.nf diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config new file mode 100644 index 00000000..a01bfc60 --- /dev/null +++ b/conf/modules/align_MT.config @@ -0,0 +1,98 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Mitochondria alignment options +// + +process { + + withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + } + + withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { + ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } + ext.prefix = { "${meta.id}.sorted" } + } + + withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.prefix = { "${meta.id}_merged" } + } + + withName: '.*ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.args = { [ + "--VALIDATION_STRINGENCY LENIENT", + "--RGLB lib", + "--RGPL ILLUMINA", + "--RGPU barcode", + "--RGSM ${meta.id}" + ].join(' ').trim() } + } + + withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.prefix = { "${meta.id}_markduplicates" } + } + + withName: '.*ALIGN_MT:SAMTOOLS_SORT_MT' { + ext.prefix = { "${meta.id}_sorted" } + } + +} + +// +// Shifted mitochondria alignment options +// + +process { + + withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + } + + withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { + ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } + ext.prefix = { "${meta.id}.sorted" } + } + + withName: '.*ALIGN_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { + ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.prefix = { "${meta.id}_merged_shifted" } + } + + withName: '.*ALIGN_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { + ext.args = { [ + "--VALIDATION_STRINGENCY LENIENT", + "--RGLB lib", + "--RGPL ${params.platform}", + "--RGPU barcode", + "--RGSM ${meta.id}" + ].join(' ').trim() } + } + + withName: '.*ALIGN_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { + ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.prefix = { "${meta.id}_markduplicates_shifted" } + } + + withName: '.*ALIGN_MT_SHIFT:SAMTOOLS_SORT_MT' { + ext.prefix = { "${meta.id}_sorted_shifted" } + } + +} diff --git a/conf/modules/call_snv_MT.config b/conf/modules/call_snv_MT.config new file mode 100644 index 00000000..420929e5 --- /dev/null +++ b/conf/modules/call_snv_MT.config @@ -0,0 +1,43 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Call SNVs in mitochondria +// + +process { + + withName: '.*CALL_SNV_MT:GATK4_MUTECT2_MT' { + ext.args = '--mitochondria-mode TRUE' + } + + withName: '.*CALL_SNV_MT:GATK4_FILTERMUTECTCALLS_MT' { + ext.prefix = { "${meta.id}_filtered" } + } +} + +// +// Call SNVs in shifted mitochondria +// + +process { + + withName: '.*CALL_SNV_MT_SHIFT:GATK4_MUTECT2_MT' { + ext.args = '--mitochondria-mode TRUE' + } + + withName: '.*CALL_SNV_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { + ext.prefix = { "${meta.id}_filtered_shifted" } + } + +} diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config new file mode 100644 index 00000000..6b769e5c --- /dev/null +++ b/conf/modules/call_sv_MT.config @@ -0,0 +1,51 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Call SV in mitochondria +// + +process { + + withName: '.*CALL_SV_MT:MT_DELETION' { + ext.args = '-s --insert-size 16000' + publishDir = [ + path: { "${params.outdir}/mt_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_SV_MT:EKLIPSE' { + publishDir = [ + path: { "${params.outdir}/mt_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + +// +// Call SV in shifted mitochondria +// + +process { + + withName: '.*CALL_SV_MT_SHIFT:MT_DELETION' { + ext.when = false + } + + withName: '.*CALL_SV_MT_SHIFT:EKLIPSE_MT' { + ext.when = false + } +} diff --git a/nextflow.config b/nextflow.config index 04b1b670..1cd04d19 100644 --- a/nextflow.config +++ b/nextflow.config @@ -281,6 +281,9 @@ manifest { includeConfig 'conf/modules/raredisease.config' includeConfig 'conf/modules/align.config' includeConfig 'conf/modules/analyse_MT.config' +includeConfig 'conf/modules/align_MT.config' +includeConfig 'conf/modules/call_snv_MT.config' +includeConfig 'conf/modules/call_sv_MT.config' includeConfig 'conf/modules/call_snv.config' includeConfig 'conf/modules/call_structural_variants.config' includeConfig 'conf/modules/annotate_snvs.config' diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 65016260..9e749add 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -2,21 +2,26 @@ // 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 { CALL_SV_GERMLINECNVCALLER } from './variant_calling/call_sv_germlinecnvcaller' -include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' +include { CALL_SV_MANTA } from './variant_calling/call_sv_manta' +include { CALL_SV_MT } from './variant_calling/call_sv_MT' +include { CALL_SV_MT as CALL_SV_MT_SHIFT } from './variant_calling/call_sv_MT' +include { CALL_SV_TIDDIT } from './variant_calling/call_sv_tiddit' +include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' +include { CALL_SV_GERMLINECNVCALLER } from './variant_calling/call_sv_germlinecnvcaller' +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_genome_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_genome_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_genome_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_mt_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_mtshift_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_mtshift_fasta // channel: [mandatory] [ val(meta), path(fasta) ] 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) ] @@ -28,21 +33,25 @@ workflow CALL_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() - CALL_SV_MANTA (ch_bam, ch_bai, ch_genome_fasta, ch_genome_fai, ch_case_info, ch_target_bed) + CALL_SV_MANTA (ch_genome_bam, ch_genome_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_genome_fasta, ch_bwa_index, ch_case_info) + CALL_SV_TIDDIT (ch_genome_bam_bai, ch_genome_fasta, ch_bwa_index, ch_case_info) .vcf .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) + CALL_SV_GERMLINECNVCALLER (ch_genome_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 } + CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) + + CALL_SV_MT_SHIFT (ch_mtshift_bam_bai, ch_mtshift_fasta) + //merge if (params.skip_cnv_calling) { tiddit_vcf diff --git a/subworkflows/local/variant_calling/call_sv_MT.nf b/subworkflows/local/variant_calling/call_sv_MT.nf new file mode 100644 index 00000000..c8fdff45 --- /dev/null +++ b/subworkflows/local/variant_calling/call_sv_MT.nf @@ -0,0 +1,29 @@ +// +// Call SV MT +// + +include { MT_DELETION } from '../../../modules/local/mt_deletion_script' +include { EKLIPSE } from '../../../modules/nf-core/eklipse/main' + +workflow CALL_SV_MT { + take: + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + + main: + ch_versions = Channel.empty() + + EKLIPSE(ch_bam_bai,[]) + + MT_DELETION(ch_bam_bai, ch_fasta) + + ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) + ch_versions = ch_versions.mix(MT_DELETION.out.versions.first()) + + emit: + eklipse_del = EKLIPSE.out.deletions // channel: [ val(meta), path(csv) ] + eklipse_genes = EKLIPSE.out.genes // channel: [ val(meta), path(csv) ] + eklipse_circos = EKLIPSE.out.circos // channel: [ val(meta), path(png) ] + mt_del_result = MT_DELETION.out.mt_del_result // channel: [ val(meta), path(txt) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5112553b..e88686e5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -379,9 +379,12 @@ workflow RAREDISEASE { ch_mapped.genome_marked_bam, ch_mapped.genome_marked_bai, ch_mapped.genome_bam_bai, + ch_mapped.mt_bam_bai, + ch_mapped.mtshift_bam_bai, ch_genome_bwaindex, ch_genome_fasta, ch_genome_fai, + ch_mtshift_fasta, ch_case_info, ch_target_bed, ch_genome_dictionary, From 58d70e067373f37e9ae9c17233da6a9225fcb446 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 17:23:12 +0200 Subject: [PATCH 1386/1921] postprocess --- ...nvs.config => annotate_genome_snvs.config} | 28 ++--- conf/modules/postptocess_MT_calls.config | 43 +++++++ nextflow.config | 4 +- ...notate_snvs.nf => annotate_genome_snvs.nf} | 5 +- subworkflows/local/annotate_mt_snvs.nf | 112 ++++++++++++++++++ subworkflows/local/call_snv.nf | 20 ++-- .../variant_calling/postprocess_MT_calls.nf | 112 ++++++++++++++++++ 7 files changed, 295 insertions(+), 29 deletions(-) rename conf/modules/{annotate_snvs.config => annotate_genome_snvs.config} (85%) create mode 100644 conf/modules/postptocess_MT_calls.config rename subworkflows/local/{annotate_snvs.nf => annotate_genome_snvs.nf} (98%) create mode 100644 subworkflows/local/annotate_mt_snvs.nf create mode 100644 subworkflows/local/variant_calling/postprocess_MT_calls.nf diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_genome_snvs.config similarity index 85% rename from conf/modules/annotate_snvs.config rename to conf/modules/annotate_genome_snvs.config index 093e94a1..0cbf5496 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -16,43 +16,43 @@ // process { - withName: '.*ANNOTATE_SNVS:.*' { + withName: '.*ANNOTATE_GENOME_SNVS:.*' { ext.when = !params.skip_snv_annotation } - withName: '.*ANNOTATE_SNVS:VCFANNO' { + withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { ext.prefix = { "${meta.id}_vcfanno" } publishDir = [ enabled: false ] } - withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { ext.args = { "--samples ${meta.probands.join(",")} --skip-indels " } ext.prefix = { "${meta.id}_roh" } } - withName: '.*ANNOTATE_SNVS:RHOCALL_ANNOTATE' { + withName: '.*ANNOTATE_GENOME_SNVS:RHOCALL_ANNOTATE' { ext.args = { "--v14 " } ext.prefix = { "${meta.id}_rohann" } } - withName: '.*ANNOTATE_SNVS:VCFANNO' { + withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { ext.prefix = { "${meta.id}_rohann_vcfanno" } } - withName: '.*ANNOTATE_SNVS:UPD_SITES' { + withName: '.*ANNOTATE_GENOME_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' { + withName: '.*ANNOTATE_GENOME_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 --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' { + withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_SITES' { ext.prefix = { "${meta7.id}_rohann_vcfanno_upd_sites_chromograph" } ext.args = { "--euploid" } tag = {"${meta7.id}"} @@ -63,7 +63,7 @@ process { ] } - withName: '.*ANNOTATE_SNVS:CHROMOGRAPH_REGIONS' { + withName: '.*ANNOTATE_GENOME_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 } @@ -75,16 +75,16 @@ process { ] } - withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { + withName: '.*ANNOTATE_GENOME_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" ' } } - withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { + withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { ext.prefix = { "${meta.id}_${intervals.simpleName}" } } - withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { + withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } ext.args = [ '--dir_plugins vep_cache/Plugins', @@ -103,7 +103,7 @@ process { ].join(' ') } - withName: '.*ANNOTATE_SNVS:BCFTOOLS_CONCAT' { + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } publishDir = [ path: { "${params.outdir}/annotate_snv" }, @@ -112,7 +112,7 @@ process { ] } - withName: '.*ANNOTATE_SNVS:TABIX_BCFTOOLS_CONCAT' { + withName: '.*ANNOTATE_GENOME_SNVS:TABIX_BCFTOOLS_CONCAT' { publishDir = [ path: { "${params.outdir}/annotate_snv" }, mode: params.publish_dir_mode, diff --git a/conf/modules/postptocess_MT_calls.config b/conf/modules/postptocess_MT_calls.config new file mode 100644 index 00000000..3119012e --- /dev/null +++ b/conf/modules/postptocess_MT_calls.config @@ -0,0 +1,43 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Mitochondrial annotation options +// + +process { + + withName: '.*POSTPROCESS_MT_CALLS:GATK4_MERGEVCFS_LIFT_UNLIFT_MT' { + ext.prefix = { "${meta.id}_merged" } + } + + withName: '.*POSTPROCESS_MT_CALLS:GATK4_VARIANTFILTRATION_MT' { + ext.prefix = { "${meta.id}_filt" } + } + + withName: '.*POSTPROCESS_MT_CALLS:SPLIT_MULTIALLELICS_MT' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + } + + withName: '.*POSTPROCESS_MT_CALLS:REMOVE_DUPLICATES_MT' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + } + + withName: '.*POSTPROCESS_MT_CALLS:BCFTOOLS_MERGE_MT' { + ext.args = '--output-type z' + ext.prefix = { "${meta.id}_merge_mt" } + } + +} diff --git a/nextflow.config b/nextflow.config index 1cd04d19..7c494c77 100644 --- a/nextflow.config +++ b/nextflow.config @@ -284,9 +284,11 @@ includeConfig 'conf/modules/analyse_MT.config' includeConfig 'conf/modules/align_MT.config' includeConfig 'conf/modules/call_snv_MT.config' includeConfig 'conf/modules/call_sv_MT.config' +includeConfig 'conf/modules/annotate_mt_snvs.config' includeConfig 'conf/modules/call_snv.config' +includeConfig 'conf/modules/postprocess_MT_calls.config' includeConfig 'conf/modules/call_structural_variants.config' -includeConfig 'conf/modules/annotate_snvs.config' +includeConfig 'conf/modules/annotate_genome_snvs.config' includeConfig 'conf/modules/annotate_structural_variants.config' includeConfig 'conf/modules/align_and_call_MT.config' includeConfig 'conf/modules/align_bwamem2.config' diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf similarity index 98% rename from subworkflows/local/annotate_snvs.nf rename to subworkflows/local/annotate_genome_snvs.nf index bd5fdfb8..06267872 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -1,5 +1,5 @@ // -// A subworkflow to annotate snvs +// A subworkflow to annotate snvs in the genome // include { VCFANNO } from '../../modules/nf-core/vcfanno/main' @@ -20,7 +20,7 @@ include { TABIX_TABIX as TABIX_BCFTOOLS_VIEW } from '../../modules/nf-core/ta include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' include { ANNOTATE_CADD } from './annotation/annotate_cadd' -workflow ANNOTATE_SNVS { +workflow ANNOTATE_GENOME_SNVS { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] @@ -46,7 +46,6 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (ch_vcf, BCFTOOLS_ROH.out.roh, []) - ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) ZIP_TABIX_ROHCALL.out.gz_tbi diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf new file mode 100644 index 00000000..400a58c1 --- /dev/null +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -0,0 +1,112 @@ +// +// Merge and annotate MT +// + +include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' +include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' +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 { ANNOTATE_CADD } from '../annotation/annotate_cadd' +include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../../modules/nf-core/tabix/bgziptabix/main' +include { HMTNOTE_ANNOTATE } from '../../../modules/nf-core/hmtnote/annotate/main' + +workflow ANNOTATE_MT_SNVS { + 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_resources // channel: [mandatory] [ path(annotation) ] + ch_genome_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_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() + + // Annotating with CADD + ANNOTATE_CADD ( + ch_annotation_in, + TABIX_TABIX_MERGE.out.tbi, + ch_cadd_header, + ch_cadd_resources + ) + + // 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_vep_in, + ch_genome_fasta, + val_vep_genome, + "homo_sapiens", + val_vep_cache_version, + ch_vep_cache, + [] + ) + + // Running vcfanno + TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) + 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) + + // HMTNOTE ANNOTATE + HMTNOTE_ANNOTATE(VCFANNO_MT.out.vcf) + HMTNOTE_ANNOTATE.out.vcf.map{meta, vcf -> + return [meta, WorkflowRaredisease.replaceSpacesInInfoColumn(vcf, vcf.parent.toString(), vcf.baseName)] + } + .set { ch_hmtnote_reformatted } + ZIP_TABIX_HMTNOTE(ch_hmtnote_reformatted) + + // Prepare output + ch_vcf_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } + ch_tbi_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } + + // Running haplogrep2 + 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(HMTNOTE_ANNOTATE.out.versions) + ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) + + emit: + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] + vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] + tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] + report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 75be4080..eb1d2ebf 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -6,7 +6,7 @@ include { CALL_SNV_DEEPVARIANT } from './variant_calling/call_snv_de include { CALL_SNV_SENTIEON } from './variant_calling/call_snv_sentieon' include { CALL_SNV_MT } from './variant_calling/call_snv_MT' include { CALL_SNV_MT as CALL_SNV_MT_SHIFT } from './variant_calling/call_snv_MT' -include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' +include { POSTPROCESS_MT_CALLS } from './variant_calling/postprocess_MT_calls' workflow CALL_SNV { take: @@ -67,30 +67,28 @@ workflow CALL_SNV { ch_mtshift_intervals ) - // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT - PICARD_LIFTOVERVCF ( - CALL_SNV_MT_SHIFT.out.vcf, - ch_genome_dictionary, + POSTPROCESS_MT_CALLS( + CALL_SNV_MT.out.vcf, + PICARD_LIFTOVERVCF.out.vcf_lifted, ch_genome_fasta, - ch_mtshift_backchain, + ch_genome_dictionary, + ch_genome_fai, + ch_case_info ) ch_genome_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) ch_genome_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) - - ch_mt_vcf = CALL_SNV_MT.out.vcf - ch_mtshift_vcf = PICARD_LIFTOVERVCF.out.vcf_lifted + ch_mt_vcf = POSTPROCESS_MT_CALLS.out.vcf ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_MT_SHIFT.out.versions) - ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) + ch_versions = ch_versions.mix(POSTPROCESS_MT_CALLS.out.versions) emit: genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] mt_vcf = ch_mt_vcf // channel: [ val(meta), path(vcf) ] - mtshift_vcf = ch_mtshift_vcf // channel: [ val(meta), path(vcf) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf new file mode 100644 index 00000000..6c9b7628 --- /dev/null +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -0,0 +1,112 @@ +// +// Merge and annotate MT +// + +include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' +include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' +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 { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' + +workflow POSTPROCESS_MT_CALLS { + take: + ch_mt_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_mtshift_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_genome_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_case_info // channel: [mandatory] [ val(case_info) ] + + main: + ch_versions = Channel.empty() + + // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT + PICARD_LIFTOVERVCF ( + ch_mtshift_vcf, + ch_genome_dictionary, + ch_genome_fasta, + ch_mtshift_backchain, + ) + + ch_vcfs = ch_vcf1 + .join(ch_vcf2, remainder: true) + .map{ meta, vcf1, vcf2 -> + [meta, [vcf1, vcf2]] + } + 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) + + // Spliting multiallelic calls + GATK4_VARIANTFILTRATION_MT.out.vcf + .join(GATK4_VARIANTFILTRATION_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .set { ch_in_split } + SPLIT_MULTIALLELICS_MT (ch_in_split, ch_genome_fasta) + TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) + + // Removing duplicates and merging if there is more than one sample + SPLIT_MULTIALLELICS_MT.out.vcf + .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .set { ch_in_remdup } + REMOVE_DUPLICATES_MT(ch_in_remdup, ch_genome_fasta) + TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) + + REMOVE_DUPLICATES_MT.out.vcf + .collect{it[1]} + .ifEmpty([]) + .toList() + .set { file_list_vcf } + + TABIX_TABIX_MT2.out.tbi + .collect{it[1]} + .ifEmpty([]) + .toList() + .set { file_list_tbi } + + ch_case_info + .combine(file_list_vcf) + .combine(file_list_tbi) + .set { ch_rem_dup_vcf_tbi } + + ch_rem_dup_vcf_tbi.branch { + meta, vcf, tbi -> + single: vcf.size() == 1 + return [meta, vcf] + multiple: vcf.size() > 1 + return [meta, vcf, tbi] + }.set { ch_case_vcf } + + BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, + ch_genome_fasta, + ch_genome_fai, + [] + ) + + BCFTOOLS_MERGE_MT.out.merged_variants + .mix(ch_case_vcf.single) + .set { ch_annotation_in } + + TABIX_TABIX_MERGE(ch_annotation_in) + + ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) + 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) + + emit: + haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] + vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] + tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] + report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} From 6bafacf60986d32d03b55dd16301d1cbee2053f2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 17:42:41 +0200 Subject: [PATCH 1387/1921] postprocess --- ...lls.config => postprocess_MT_calls.config} | 0 subworkflows/local/call_snv.nf | 3 ++- .../variant_calling/postprocess_MT_calls.nf | 19 +++++++++---------- workflows/raredisease.nf | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) rename conf/modules/{postptocess_MT_calls.config => postprocess_MT_calls.config} (100%) diff --git a/conf/modules/postptocess_MT_calls.config b/conf/modules/postprocess_MT_calls.config similarity index 100% rename from conf/modules/postptocess_MT_calls.config rename to conf/modules/postprocess_MT_calls.config diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index eb1d2ebf..e11b598f 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -69,10 +69,11 @@ workflow CALL_SNV { POSTPROCESS_MT_CALLS( CALL_SNV_MT.out.vcf, - PICARD_LIFTOVERVCF.out.vcf_lifted, + CALL_SNV_MT_SHIFT.out.vcf, ch_genome_fasta, ch_genome_dictionary, ch_genome_fai, + ch_mtshift_backchain, ch_case_info ) diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index 6c9b7628..81738085 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -10,15 +10,16 @@ include { BCFTOOLS_NORM as REMOVE_DUPLICATES_MT } from '../../.. 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 { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' +include { PICARD_LIFTOVERVCF } from '../../../modules/nf-core/picard/liftovervcf/main' workflow POSTPROCESS_MT_CALLS { take: ch_mt_vcf // channel: [mandatory] [ val(meta), path(vcf) ] ch_mtshift_vcf // channel: [mandatory] [ val(meta), path(vcf) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - 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_mtshift_backchain // channel: [mandatory] [ val(meta), path(backchain) ] ch_case_info // channel: [mandatory] [ val(case_info) ] main: @@ -32,18 +33,18 @@ workflow POSTPROCESS_MT_CALLS { ch_mtshift_backchain, ) - ch_vcfs = ch_vcf1 - .join(ch_vcf2, remainder: true) + ch_vcfs = ch_mt_vcf + .join(PICARD_LIFTOVERVCF.out.vcf_lifted, remainder: true) .map{ meta, vcf1, vcf2 -> [meta, [vcf1, vcf2]] } - GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, ch_genome_dict) + GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, ch_genome_dictionary) // 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) + GATK4_VARIANTFILTRATION_MT (ch_filt_vcf, ch_genome_fasta, ch_genome_fai, ch_genome_dictionary) // Spliting multiallelic calls GATK4_VARIANTFILTRATION_MT.out.vcf @@ -104,9 +105,7 @@ workflow POSTPROCESS_MT_CALLS { ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) emit: - haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] - vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] - tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] - report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] + vcf = ch_annotation_in // channel: [ val(meta), path(vcf) ] + tbi = TABIX_TABIX_MERGE.out.tbi // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e88686e5..70c1422a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -110,7 +110,7 @@ include { ALIGN } from '../subworkflows/local/al include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' -include { ANNOTATE_SNVS } from '../subworkflows/local/annotate_snvs' +include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/annotate_genome_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' @@ -502,7 +502,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) } - ANNOTATE_SNVS ( + ANNOTATE_GENOME_SNVS ( ch_vcf, params.analysis_type, ch_cadd_header, @@ -519,11 +519,11 @@ workflow RAREDISEASE { ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) - ch_snv_annotate = ANNOTATE_SNVS.out.vcf_ann + ch_snv_annotate = ANNOTATE_GENOME_SNVS.out.vcf_ann if (!params.skip_mt_analysis) { - ANNOTATE_SNVS.out.vcf_ann + ANNOTATE_GENOME_SNVS.out.vcf_ann .concat(ANALYSE_MT.out.vcf) .groupTuple() .set { ch_merged_vcf } From 7c5909d63428aafe85e93d1bbf5289fd386bcae1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 24 Aug 2023 20:43:31 +0200 Subject: [PATCH 1388/1921] move annotate --- conf/modules/annotate_mt_snvs.config | 66 ++++++ conf/modules/call_sv_MT.config | 14 -- subworkflows/local/annotate_mt_snvs.nf | 50 ++-- subworkflows/local/call_snv.nf | 29 ++- .../local/call_structural_variants.nf | 2 +- workflows/raredisease.nf | 216 +++++++++--------- 6 files changed, 221 insertions(+), 156 deletions(-) create mode 100644 conf/modules/annotate_mt_snvs.config diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config new file mode 100644 index 00000000..68e01af1 --- /dev/null +++ b/conf/modules/annotate_mt_snvs.config @@ -0,0 +1,66 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Mitochondrial annotation options +// + +process { + + + withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { + ext.args = [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--distance 0', + '--buffer_size 20000', + '--format vcf --fork 4 --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', + '--uniprot' + ].join(' ') + } + + withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { + ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } + publishDir = [ + path: { "${params.outdir}/annotate_mt" }, + mode: params.publish_dir_mode, + pattern: "*{vcf.gz,vcf.gz.tbi}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { + ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } + ext.args = '--offline' + publishDir = [ + enabled: false + ] + } + + withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { + ext.prefix = { "${meta.id}_haplogrep" } + publishDir = [ + path: { "${params.outdir}/annotate_mt" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + +} diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config index 6b769e5c..288ca425 100644 --- a/conf/modules/call_sv_MT.config +++ b/conf/modules/call_sv_MT.config @@ -35,17 +35,3 @@ process { } } -// -// Call SV in shifted mitochondria -// - -process { - - withName: '.*CALL_SV_MT_SHIFT:MT_DELETION' { - ext.when = false - } - - withName: '.*CALL_SV_MT_SHIFT:EKLIPSE_MT' { - ext.when = false - } -} diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 400a58c1..d6ce5659 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -2,51 +2,48 @@ // Merge and annotate MT // -include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' -include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' -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 { ANNOTATE_CADD } from '../annotation/annotate_cadd' -include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../../modules/nf-core/tabix/bgziptabix/main' -include { HMTNOTE_ANNOTATE } from '../../../modules/nf-core/hmtnote/annotate/main' +include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../modules/nf-core/gatk4/mergevcfs/main' +include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../modules/nf-core/gatk4/variantfiltration/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' +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 { ANNOTATE_CADD } from './annotation/annotate_cadd' +include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../modules/nf-core/tabix/bgziptabix/main' +include { HMTNOTE_ANNOTATE } from '../../modules/nf-core/hmtnote/annotate/main' workflow ANNOTATE_MT_SNVS { take: - ch_vcf1 // channel: [mandatory] [ val(meta), path(vcf) ] - ch_vcf2 // channel: [mandatory] [ val(meta), path(vcf) ] + ch_mt_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_mt_tbi // channel: [mandatory] [ val(meta), path(tbi) ] ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_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_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() // Annotating with CADD ANNOTATE_CADD ( - ch_annotation_in, - TABIX_TABIX_MERGE.out.tbi, + ch_mt_vcf, + ch_mt_tbi, ch_cadd_header, ch_cadd_resources ) // Pick input for vep - ch_annotation_in + ch_mt_vcf .combine(ANNOTATE_CADD.out.vcf.ifEmpty("null")) .branch { it -> merged: it[2].equals("null") @@ -92,11 +89,6 @@ workflow ANNOTATE_MT_SNVS { // Running haplogrep2 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) @@ -105,7 +97,7 @@ workflow ANNOTATE_MT_SNVS { emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] - vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] + vcf_ann = ch_vcf_out // channel: [ val(meta), path(vcf) ] tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] versions = ch_versions // channel: [ path(versions.yml) ] diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index e11b598f..d8cb9744 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -7,6 +7,7 @@ include { CALL_SNV_SENTIEON } from './variant_calling/call_snv_se include { CALL_SNV_MT } from './variant_calling/call_snv_MT' include { CALL_SNV_MT as CALL_SNV_MT_SHIFT } from './variant_calling/call_snv_MT' include { POSTPROCESS_MT_CALLS } from './variant_calling/postprocess_MT_calls' +include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' workflow CALL_SNV { take: @@ -51,6 +52,19 @@ workflow CALL_SNV { ch_case_info ) + ch_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) + ch_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) + + ch_vcf + .join(ch_tabix, failOnMismatch:true, failOnDuplicate:true) + .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} + .set {ch_selvar_in} + GATK4_SELECTVARIANTS(ch_selvar_in) // remove mitochondrial variants + + ch_genome_vcf = GATK4_SELECTVARIANTS.out.vcf + ch_genome_tabix = GATK4_SELECTVARIANTS.out.tbi + ch_genome_vcf_tabix = ch_genome_vcf.join(ch_genome_tabix, failOnMismatch:true, failOnDuplicate:true) + CALL_SNV_MT( ch_mt_bam_bai, ch_genome_fasta, @@ -77,19 +91,18 @@ workflow CALL_SNV { ch_case_info ) - ch_genome_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) - ch_genome_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) - ch_mt_vcf = POSTPROCESS_MT_CALLS.out.vcf - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(POSTPROCESS_MT_CALLS.out.versions) + ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) emit: - genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] - genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] - mt_vcf = ch_mt_vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] + genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] + genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] + genome_vcf_tabix = ch_genome_vcf_tabix // channel: [ val(meta), path(vcf), path(tbi) ] + mt_vcf = POSTPROCESS_MT_CALLS.out.vcf // channel: [ val(meta), path(vcf) ] + mt_tabix = POSTPROCESS_MT_CALLS.out.tbi // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 9e749add..d614ef7c 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -50,7 +50,7 @@ workflow CALL_STRUCTURAL_VARIANTS { CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) - CALL_SV_MT_SHIFT (ch_mtshift_bam_bai, ch_mtshift_fasta) +// CALL_SV_MT_SHIFT (ch_mtshift_bam_bai, ch_mtshift_fasta) //merge if (params.skip_cnv_calling) { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 70c1422a..2a5fb036 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -94,11 +94,12 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil include { GATK4_MERGEVCFS } from '../modules/nf-core/gatk4/mergevcfs/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' -include { GATK4_SELECTVARIANTS } from '../modules/nf-core/gatk4/selectvariants/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' +include { ENSEMBLVEP_FILTERVEP as FILTERVEP_MT } from '../modules/nf-core/ensemblvep/filtervep' include { ENSEMBLVEP_FILTERVEP as FILTERVEP_SNV } from '../modules/nf-core/ensemblvep/filtervep' include { ENSEMBLVEP_FILTERVEP as FILTERVEP_SV } from '../modules/nf-core/ensemblvep/filtervep' +include { TABIX_BGZIPTABIX as BGZIPTABIX_MT } from '../modules/nf-core/tabix/bgziptabix' include { TABIX_BGZIPTABIX as BGZIPTABIX_SNV } from '../modules/nf-core/tabix/bgziptabix' include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix/bgziptabix' @@ -108,9 +109,11 @@ include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix include { ALIGN } from '../subworkflows/local/align' include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_MT } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/annotate_genome_snvs' +include { ANNOTATE_MT_SNVS } from '../subworkflows/local/annotate_mt_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' @@ -118,6 +121,7 @@ include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/ca include { GENS } from '../subworkflows/local/gens' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { QC_BAM } from '../subworkflows/local/qc_bam' +include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' @@ -289,7 +293,9 @@ workflow RAREDISEASE { ch_scatter_split_intervals = ch_scatter.split_intervals ?: Channel.empty() + // // ALIGNING READS, FETCH STATS, AND MERGE. + // ALIGN ( ch_reads, ch_genome_fasta, @@ -307,7 +313,9 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) + // // BAM QUALITY CHECK + // QC_BAM ( ch_mapped.genome_marked_bam, ch_mapped.genome_marked_bai, @@ -322,7 +330,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(QC_BAM.out.versions) + // // EXPANSIONHUNTER AND STRANGER + // CALL_REPEAT_EXPANSIONS ( ch_mapped.genome_bam_bai, ch_variant_catalog, @@ -332,28 +342,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) - // STEP 1.7: SMNCOPYNUMBERCALLER - ch_mapped.genome_bam_bai - .collect{it[1]} - .toList() - .set { ch_bam_list } - - ch_mapped.genome_bam_bai - .collect{it[2]} - .toList() - .set { ch_bai_list } - - ch_case_info - .combine(ch_bam_list) - .combine(ch_bai_list) - .set { ch_bams_bais } - - SMNCOPYNUMBERCALLER ( - ch_bams_bais - ) - ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) - - // STEP 2: VARIANT CALLING + // + // SNV CALLING + // CALL_SNV ( ch_mapped.genome_bam_bai, ch_mapped.mt_bam_bai, @@ -375,6 +366,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) + // + // SV CALLING + // CALL_STRUCTURAL_VARIANTS ( ch_mapped.genome_marked_bam, ch_mapped.genome_marked_bai, @@ -395,29 +389,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) - // ped correspondence, sex check, ancestry check - PEDDY_CHECK ( - CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true), - ch_pedfile - ) - ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) - - // GENS - if (params.gens_switch) { - GENS ( - ch_mapped.genome_bam_bai, - CALL_SNV.out.vcf, - ch_genome_fasta, - ch_genome_fai, - file(params.gens_interval_list), - file(params.gens_pon), - file(params.gens_gnomad_pos), - ch_case_info, - ch_genome_dictionary - ) - ch_versions = ch_versions.mix(GENS.out.versions) - } - + // + // ANNOTATE STRUCTURAL VARIANTS + // if (!params.skip_sv_annotation) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, @@ -455,55 +429,13 @@ workflow RAREDISEASE { } - if (!params.skip_mt_analysis) { - ANALYSE_MT ( - ch_mapped.genome_bam_bai, - ch_cadd_header, - ch_cadd_resources, - ch_genome_bwaindex, - ch_genome_bwamem2index, - ch_genome_fasta, - ch_genome_fai, - ch_genome_dictionary, - ch_mt_intervals, - 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, - params.vep_cache_version, - ch_vep_cache, - ch_case_info - ) - - ch_versions = ch_versions.mix(ANALYSE_MT.out.versions) - - } - - // VARIANT ANNOTATION - + // + // ANNOTATE GENOME SNVs + // if (!params.skip_snv_annotation) { - ch_vcf = CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true) - - if (!params.skip_mt_analysis) { - ch_vcf - .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} - .set { ch_selvar_in } - - GATK4_SELECTVARIANTS(ch_selvar_in) // remove mitochondrial variants - - ch_vcf = GATK4_SELECTVARIANTS.out.vcf.join(GATK4_SELECTVARIANTS.out.tbi, failOnMismatch:true, failOnDuplicate:true) - ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) - } - ANNOTATE_GENOME_SNVS ( - ch_vcf, + CALL_SNV.out.genome_vcf_tabix, params.analysis_type, ch_cadd_header, ch_cadd_resources, @@ -521,18 +453,6 @@ workflow RAREDISEASE { ch_snv_annotate = ANNOTATE_GENOME_SNVS.out.vcf_ann - if (!params.skip_mt_analysis) { - - ANNOTATE_GENOME_SNVS.out.vcf_ann - .concat(ANALYSE_MT.out.vcf) - .groupTuple() - .set { ch_merged_vcf } - - GATK4_MERGEVCFS (ch_merged_vcf, ch_genome_dictionary) - ch_snv_annotate = GATK4_MERGEVCFS.out.vcf - ch_versions = ch_versions.mix(GATK4_MERGEVCFS.out.versions) - } - ANN_CSQ_PLI_SNV ( ch_snv_annotate, ch_variant_consequences @@ -558,6 +478,94 @@ workflow RAREDISEASE { } + // + // ANNOTATE MT SNVs + // + if (!params.skip_mt_annotation) { + + ANNOTATE_MT_SNVS ( + CALL_SNV.out.mt_vcf, + CALL_SNV.out.mt_tabix, + ch_cadd_header, + ch_cadd_resources, + ch_genome_fasta, + ch_vcfanno_resources, + ch_vcfanno_toml, + params.genome, + params.vep_cache_version, + ch_vep_cache, + ).set {ch_mt_annotate} + ch_versions = ch_versions.mix(ch_mt_annotate.versions) + + ANN_CSQ_PLI_MT ( + ch_mt_annotate.vcf_ann, + ch_variant_consequences + ) + ch_versions = ch_versions.mix(ANN_CSQ_PLI_MT.out.versions) + + RANK_VARIANTS_MT ( + ANN_CSQ_PLI_MT.out.vcf_ann, + ch_pedfile, + ch_reduced_penetrance, + ch_score_config_snv + ) + ch_versions = ch_versions.mix(RANK_VARIANTS_MT.out.versions) + + FILTERVEP_MT( + RANK_VARIANTS_MT.out.vcf, + ch_vep_filters + ) + ch_versions = ch_versions.mix(FILTERVEP_MT.out.versions) + + BGZIPTABIX_MT(FILTERVEP_MT.out.output) + ch_versions = ch_versions.mix(BGZIPTABIX_MT.out.versions) + + } + + // STEP 1.7: SMNCOPYNUMBERCALLER + ch_mapped.genome_bam_bai + .collect{it[1]} + .toList() + .set { ch_bam_list } + + ch_mapped.genome_bam_bai + .collect{it[2]} + .toList() + .set { ch_bai_list } + + ch_case_info + .combine(ch_bam_list) + .combine(ch_bai_list) + .set { ch_bams_bais } + + SMNCOPYNUMBERCALLER ( + ch_bams_bais + ) + ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) + + // ped correspondence, sex check, ancestry check + PEDDY_CHECK ( + CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true), + ch_pedfile + ) + ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) + + // GENS + if (params.gens_switch) { + GENS ( + ch_mapped.genome_bam_bai, + CALL_SNV.out.vcf, + ch_genome_fasta, + ch_genome_fai, + file(params.gens_interval_list), + file(params.gens_pon), + file(params.gens_gnomad_pos), + ch_case_info, + ch_genome_dictionary + ) + ch_versions = ch_versions.mix(GENS.out.versions) + } + // // MODULE: Pipeline reporting // From d711b05f7babeb25292fc9c4d2b890f2eb65b6d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 26 Aug 2023 11:55:35 +0200 Subject: [PATCH 1389/1921] update configs --- conf/modules/align_MT.config | 8 +- conf/modules/align_and_call_MT.config | 126 ------------------- conf/modules/analyse_MT.config | 31 ----- conf/modules/annotate_consequence_pli.config | 32 ++++- conf/modules/annotate_genome_snvs.config | 8 +- conf/modules/annotate_mt_snvs.config | 4 +- conf/modules/call_snv.config | 10 ++ conf/modules/call_snv_deepvariant.config | 14 --- conf/modules/call_snv_sentieon.config | 14 --- conf/modules/call_structural_variants.config | 4 +- conf/modules/call_sv_MT.config | 4 +- conf/modules/convert_mt_bam_to_fastq.config | 6 +- conf/modules/merge_annotate_MT.config | 88 ------------- conf/modules/postprocess_MT_calls.config | 15 ++- conf/modules/prepare_references.config | 10 +- conf/modules/rank_variants.config | 52 ++++++++ conf/modules/raredisease.config | 33 +++-- conf/test.config | 1 + conf/test_full.config | 2 +- docs/output.md | 8 +- main.nf | 1 + nextflow.config | 5 +- nextflow_schema.json | 11 +- workflows/raredisease.nf | 6 +- 24 files changed, 162 insertions(+), 331 deletions(-) delete mode 100644 conf/modules/align_and_call_MT.config delete mode 100644 conf/modules/analyse_MT.config delete mode 100644 conf/modules/merge_annotate_MT.config diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index a01bfc60..35d91ee3 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -18,13 +18,13 @@ process { withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } + ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2" } ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } + ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon" } ext.prefix = { "${meta.id}.sorted" } } @@ -61,13 +61,13 @@ process { process { withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } + ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2" } ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } + ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon" } ext.prefix = { "${meta.id}.sorted" } } diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config deleted file mode 100644 index 1a2993f5..00000000 --- a/conf/modules/align_and_call_MT.config +++ /dev/null @@ -1,126 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ - -// -// ANALYSE_MT:ALIGN_AND_CALL_MT -// - -process { - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { - 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.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } - ext.prefix = { "${meta.id}.sorted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.args = { [ - "--VALIDATION_STRINGENCY LENIENT", - "--RGLB lib", - "--RGPL ILLUMINA", - "--RGPU barcode", - "--RGSM ${meta.id}" - ].join(' ' ).trim() } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_SORT_MT' { - ext.prefix = { "${meta.id}_sorted" } - } - - 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, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria-mode TRUE' - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_FILTERMUTECTCALLS_MT' { - ext.prefix = { "${meta.id}_filtered" } - } -} - -// -// ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT -// - -process { - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { - 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.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } - ext.prefix = { "${meta.id}.sorted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { - ext.args = { [ - "--VALIDATION_STRINGENCY LENIENT", - "--RGLB lib", - "--RGPL ${params.platform}", - "--RGPU barcode", - "--RGSM ${meta.id}" - ].join(' ' ).trim() } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SAMTOOLS_SORT_MT' { - ext.prefix = { "${meta.id}_sorted_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_MUTECT2_MT' { - ext.args = '--mitochondria-mode TRUE' - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:HAPLOCHECK_MT' { - ext.prefix = { "${meta.id}_shifted" } - } - - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:GATK4_FILTERMUTECTCALLS_MT' { - ext.prefix = { "${meta.id}_filtered_shifted" } - } - -} diff --git a/conf/modules/analyse_MT.config b/conf/modules/analyse_MT.config deleted file mode 100644 index 4ee1b693..00000000 --- a/conf/modules/analyse_MT.config +++ /dev/null @@ -1,31 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ - -// -// Liftover -// - -process { - withName: '.*ANALYSE_MT:.*' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") } - publishDir = [ - enabled: false - ] - } -} - -process { - withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { - ext.prefix = { "${meta.id}_liftover" } - } -} diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index ca4db826..eed623a6 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -21,15 +21,15 @@ process { } withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_vep_csq" } + ext.prefix = { "${meta.id}_genome_vep_csq" } } withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_vep_csq_pli" } + ext.prefix = { "${meta.id}_genome_vep_csq_pli" } } withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_vep_csq_pli" } + ext.prefix = { "${meta.id}_genome_vep_csq_pli" } publishDir = [ path: { "${params.outdir}/annotate_sv" }, mode: params.publish_dir_mode, @@ -64,3 +64,29 @@ process { ] } } + +process { + withName: '.*ANN_CSQ_PLI_MT:.*' { + ext.when = !params.skip_mt_annotation + publishDir = [ + enabled: false + ] + } + + withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_mt_vep_csq" } + } + + withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_mt_vep_csq_pli" } + } + + withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_mt_vep_csq_pli" } + publishDir = [ + path: { "${params.outdir}/annotate_snv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 0cbf5496..96503d82 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -57,7 +57,7 @@ process { ext.args = { "--euploid" } tag = {"${meta7.id}"} publishDir = [ - path: { "${params.outdir}/annotate_snv" }, + path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -69,7 +69,7 @@ process { ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } tag = {"${meta6.id}"} publishDir = [ - path: { "${params.outdir}/annotate_snv" }, + path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -106,7 +106,7 @@ process { withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } publishDir = [ - path: { "${params.outdir}/annotate_snv" }, + path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -114,7 +114,7 @@ process { withName: '.*ANNOTATE_GENOME_SNVS:TABIX_BCFTOOLS_CONCAT' { publishDir = [ - path: { "${params.outdir}/annotate_snv" }, + path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 68e01af1..40101033 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -39,7 +39,7 @@ process { withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } publishDir = [ - path: { "${params.outdir}/annotate_mt" }, + path: { "${params.outdir}/annotate_snv/mitochondria" }, mode: params.publish_dir_mode, pattern: "*{vcf.gz,vcf.gz.tbi}", saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -57,7 +57,7 @@ process { withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { ext.prefix = { "${meta.id}_haplogrep" } publishDir = [ - path: { "${params.outdir}/annotate_mt" }, + path: { "${params.outdir}/annotate_snv/mitochondria" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config index 53cc78b4..17926228 100644 --- a/conf/modules/call_snv.config +++ b/conf/modules/call_snv.config @@ -19,4 +19,14 @@ process { ] } + withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { + ext.args = "--exclude-intervals ${params.mito_name}" + ext.prefix = { "${meta.id}_nomito" } + ext.when = { !params.skip_snv_annotation } + publishDir = [ + path: { "${params.outdir}/call_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index 0493534e..329bc15f 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -37,20 +37,6 @@ process { withName: '.*CALL_SNV_DEEPVARIANT:REMOVE_DUPLICATES_GL' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - enabled: params.skip_mt_analysis, - path: { "${params.outdir}/call_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } - withName: '.*CALL_SNV_DEEPVARIANT:TABIX_GL' { - publishDir = [ - enabled: params.skip_mt_analysis, - path: { "${params.outdir}/call_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } } diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index ec4d4480..b4443546 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -51,20 +51,6 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } - publishDir = [ - enabled: params.skip_mt_analysis, - path: { "${params.outdir}/call_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } - withName: '.*CALL_SNV_SENTIEON:TABIX_SEN' { - publishDir = [ - enabled: params.skip_mt_analysis, - path: { "${params.outdir}/call_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } } diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config index a8c10175..3a59868d 100644 --- a/conf/modules/call_structural_variants.config +++ b/conf/modules/call_structural_variants.config @@ -26,7 +26,7 @@ process { withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { ext.args = '--pass_only --same_order' publishDir = [ - path: { "${params.outdir}/call_sv" }, + path: { "${params.outdir}/call_sv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -34,7 +34,7 @@ process { withName: '.*CALL_STRUCTURAL_VARIANTS:TABIX_TABIX' { publishDir = [ - path: { "${params.outdir}/call_sv" }, + path: { "${params.outdir}/call_sv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config index 288ca425..44b0e581 100644 --- a/conf/modules/call_sv_MT.config +++ b/conf/modules/call_sv_MT.config @@ -20,7 +20,7 @@ process { withName: '.*CALL_SV_MT:MT_DELETION' { ext.args = '-s --insert-size 16000' publishDir = [ - path: { "${params.outdir}/mt_sv" }, + path: { "${params.outdir}/call_sv/mitochondria" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -28,7 +28,7 @@ process { withName: '.*CALL_SV_MT:EKLIPSE' { publishDir = [ - path: { "${params.outdir}/mt_sv" }, + path: { "${params.outdir}/call_sv/mitochondria" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config index 9a683b6e..0365c452 100644 --- a/conf/modules/convert_mt_bam_to_fastq.config +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -17,7 +17,7 @@ process { - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { + withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { beforeScript = {"mkdir ./tmp"} ext.args = [ "-L ${params.mito_name}", @@ -26,11 +26,11 @@ process { ].join(" ").trim() } - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { + withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { + withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { ext.args = '--VALIDATION_STRINGENCY LENIENT' } } diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config deleted file mode 100644 index ae2601b6..00000000 --- a/conf/modules/merge_annotate_MT.config +++ /dev/null @@ -1,88 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 ----------------------------------------------------------------------------------------- -*/ - -// -// Mitochondrial annotation options -// - -process { - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_MERGEVCFS_LIFT_UNLIFT_MT' { - ext.prefix = { "${meta.id}_merged" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_VARIANTFILTRATION_MT' { - ext.prefix = { "${meta.id}_filt" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:SPLIT_MULTIALLELICS_MT' { - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:REMOVE_DUPLICATES_MT' { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:BCFTOOLS_MERGE_MT' { - ext.args = '--output-type z' - ext.prefix = { "${meta.id}_merge_mt" } - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ENSEMBLVEP_MT' { - ext.args = [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', - '--distance 0', - '--buffer_size 20000', - '--format vcf --fork 4 --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', - '--uniprot' - ].join(' ') - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:ZIP_TABIX_HMTNOTE' { - ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } - publishDir = [ - path: { "${params.outdir}/annotate_mt" }, - mode: params.publish_dir_mode, - pattern: "*{vcf.gz,vcf.gz.tbi}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HMTNOTE_ANNOTATE' { - ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } - ext.args = '--offline' - publishDir = [ - enabled: false - ] - } - - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:HAPLOGREP2_CLASSIFY_MT' { - ext.prefix = { "${meta.id}_haplogrep" } - publishDir = [ - path: { "${params.outdir}/annotate_mt" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - -} diff --git a/conf/modules/postprocess_MT_calls.config b/conf/modules/postprocess_MT_calls.config index 3119012e..c97ea43d 100644 --- a/conf/modules/postprocess_MT_calls.config +++ b/conf/modules/postprocess_MT_calls.config @@ -37,7 +37,20 @@ process { withName: '.*POSTPROCESS_MT_CALLS:BCFTOOLS_MERGE_MT' { ext.args = '--output-type z' - ext.prefix = { "${meta.id}_merge_mt" } + ext.prefix = { "${meta.id}_mitochondria" } + publishDir = [ + path: { "${params.outdir}/call_snv/mitochondria" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*POSTPROCESS_MT_CALLS:TABIX_TABIX_MERGE' { + publishDir = [ + path: { "${params.outdir}/call_snv/mitochondria" }, + 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 2532052d..101824ef 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -30,7 +30,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2"} + ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { @@ -38,7 +38,7 @@ process { } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon"} + ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { @@ -51,11 +51,11 @@ process { 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} + ext.when = {!params.mt_fasta} } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_MT_SHIFT' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes")} + ext.when = { !(params.analysis_type == "wes")} } withName: '.*PREPARE_REFERENCES:GATK_SD' { @@ -67,7 +67,7 @@ process { } withName: '.*PREPARE_REFERENCES:GATK_SD_MT_SHIFT' { - ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes")} + ext.when = { !(params.analysis_type == "wes")} } withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 64b7a53b..f5882da1 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -111,3 +111,55 @@ process { ] } } + +// +// Score and rank MT SNVs +// + +process { + withName: '.*RANK_VARIANTS_MT:.*' { + ext.when = !params.skip_snv_annotation + publishDir = [ + enabled: false + ] + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_ANNOTATE' { + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + } + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { + ext.args = " --whole_gene " + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { + ext.args = " --rank_results " + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_ranked_mt" } + } + + withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { + ext.when = false + } + + withName: '.*RANK_VARIANTS_MT:TABIX_BGZIP' { + ext.prefix = { "${meta.id}_ranked_mt" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_MT:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index c4bab3d1..f77e8a66 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -40,23 +40,6 @@ process { } } -// -// Remove mitochondrial variants -// - -process { - withName: '.*RAREDISEASE:GATK4_SELECTVARIANTS' { - ext.args = "--exclude-intervals ${params.mito_name}" - ext.prefix = { "${meta.id}_nomito" } - ext.when = { !params.skip_snv_annotation } - publishDir = [ - enabled: !params.skip_mt_analysis, - path: { "${params.outdir}/call_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} // // Merge mitochondrial and genomic vcfs @@ -134,6 +117,22 @@ process { } } +process { + withName: '.*FILTERVEP_MT' { + ext.prefix = { "${meta.id}_clinical_snv" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + } + + withName: '.*BGZIPTABIX_MT' { + ext.prefix = { "${meta.id}_clinical_snv" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + // // Multiqc options // diff --git a/conf/test.config b/conf/test.config index 9a13845b..83edbe24 100644 --- a/conf/test.config +++ b/conf/test.config @@ -38,6 +38,7 @@ params { 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" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" + score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" 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" svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" diff --git a/conf/test_full.config b/conf/test_full.config index dcf02d95..587b8600 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -25,7 +25,7 @@ params { genome = 'GRCh38' // Skip annotation - skip_mt_analysis = true + skip_mt_annotation = true skip_snv_annotation = true skip_sv_annotation = true } diff --git a/docs/output.md b/docs/output.md index 6d07a3bd..6cfac5e6 100644 --- a/docs/output.md +++ b/docs/output.md @@ -98,7 +98,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `{outputdir}/alignment/` - `*.bam|*.cram`: Alignment file in bam/cram format. - `*.bai|*.crai`: Index of the corresponding bam/cram file. - - `*.txt`: Text file containing the dedup metrics. + - `*.metrics`: Text file containing the dedup metrics.
### Quality control and reporting @@ -222,8 +222,6 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ Output files - `call_snv/` - - `_split_rmdup.vcf.gz`: normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. - - `_split_rmdup.vcf.gz.tbi`: index of the normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -237,8 +235,6 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. Output files - `call_snv/` - - `_split_rmdup.vcf.gz`: normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. - - `_split_rmdup.vcf.gz.tbi`: index of the normalized vcf file containing MT variants. Only published when `--skip_mt_analysis` is set. - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -326,7 +322,7 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Based on VEP annotations, custom scripts used by the pipeline further annotate each record with the most severe consequence, and pli scores. -> **NB**: Output files described below include mitochondrial annotations only if --skip_mt_analysis is set to true. +> **NB**: Output files described below include mitochondrial annotations only if --skip_mt_annotation is set to true.
Output files diff --git a/main.nf b/main.nf index fcce4cc7..12cdadc0 100644 --- a/main.nf +++ b/main.nf @@ -39,6 +39,7 @@ params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 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_mt = WorkflowMain.getGenomeAttribute(params, 'score_config_mt') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') diff --git a/nextflow.config b/nextflow.config index 7c494c77..cbcdd6a6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,7 +27,7 @@ params { skip_cnv_calling = false skip_snv_annotation = false skip_sv_annotation = false - skip_mt_analysis = false + skip_mt_annotation = false gens_switch = false cadd_resources = null platform = 'illumina' @@ -280,7 +280,6 @@ manifest { includeConfig 'conf/modules/raredisease.config' includeConfig 'conf/modules/align.config' -includeConfig 'conf/modules/analyse_MT.config' includeConfig 'conf/modules/align_MT.config' includeConfig 'conf/modules/call_snv_MT.config' includeConfig 'conf/modules/call_sv_MT.config' @@ -290,7 +289,6 @@ includeConfig 'conf/modules/postprocess_MT_calls.config' includeConfig 'conf/modules/call_structural_variants.config' includeConfig 'conf/modules/annotate_genome_snvs.config' includeConfig 'conf/modules/annotate_structural_variants.config' -includeConfig 'conf/modules/align_and_call_MT.config' includeConfig 'conf/modules/align_bwamem2.config' includeConfig 'conf/modules/align_sentieon.config' includeConfig 'conf/modules/annotate_consequence_pli.config' @@ -301,7 +299,6 @@ includeConfig 'conf/modules/call_sv_manta.config' includeConfig 'conf/modules/call_sv_tiddit.config' includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' includeConfig 'conf/modules/gens.config' -includeConfig 'conf/modules/merge_annotate_MT.config' includeConfig 'conf/modules/prepare_references.config' includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index f5216d76..27a3365e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -266,6 +266,13 @@ "help_text": "The saved references can be used for future pipeline runs, reducing processing times.", "fa_icon": "fas fa-save" }, + "score_config_mt": { + "type": "string", + "exists": true, + "format": "path", + "fa_icon": "fas fa-file", + "description": "MT rank model config file for genmod." + }, "score_config_snv": { "type": "string", "exists": true, @@ -388,9 +395,9 @@ "description": "Specifies whether or not to skip CNV calling.", "fa_icon": "fas fa-book" }, - "skip_mt_analysis": { + "skip_mt_annotation": { "type": "boolean", - "description": "Specifies whether or not to skip the subworkflow that analyses mitochondrial genome separate from the nuclear genome.", + "description": "Specifies whether or not to skip annotation of mitochondrial variants.", "fa_icon": "fas fa-toggle-on" }, "skip_snv_annotation": { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 2a5fb036..327aced4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -42,7 +42,7 @@ if (!params.skip_sv_annotation) { mandatoryParams += ["genome", "svdb_query_dbs", "vep_cache", "vep_cache_version", "score_config_sv"] } -if (!params.skip_mt_analysis) { +if (!params.skip_mt_annotation) { mandatoryParams += ["genome", "mito_name", "vcfanno_resources", "vcfanno_toml", "vep_cache_version", "vep_cache"] } @@ -250,6 +250,8 @@ workflow RAREDISEASE { : ( ch_references.readcount_intervals ?: Channel.empty() ) ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) + ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).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() @@ -507,7 +509,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_MT.out.vcf_ann, ch_pedfile, ch_reduced_penetrance, - ch_score_config_snv + ch_score_config_mt ) ch_versions = ch_versions.mix(RANK_VARIANTS_MT.out.versions) From 0c8c8709ad59678b6166b78944fb2a540843c5f4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 26 Aug 2023 11:59:03 +0200 Subject: [PATCH 1390/1921] update raredisease config --- conf/modules/raredisease.config | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index e2300b5c..4531294c 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -51,17 +51,6 @@ process { } } -// -// SENTIEON_TNSCOPE_MT_CALL -// - -process { - withName: '.*SENTIEON_TNSCOPE' { - ext.args = { (params.genome == "GRCh37") ? " --interval MT " : "--interval chrM" } - ext.args2 = " --min_init_normal_lod 0,5 --min_normal_lod 2,0 --min_init_tumor_lod 1,0 --min_tumor_lod 2,8 --trim_soft_clip " - ext.when = params.variant_caller.equals("sentieon") - } -} // // Smncopynumbercaller options @@ -141,12 +130,14 @@ process { process { withName: '.*FILTERVEP_MT' { - ext.prefix = { "${meta.id}_clinical_snv" } + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_clinical_mt" } ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*BGZIPTABIX_MT' { - ext.prefix = { "${meta.id}_clinical_snv" } + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_clinical_mt" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, From 37be3a76a87f11a960ceede7f8ba98ae13fd4879 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 26 Aug 2023 12:11:54 +0200 Subject: [PATCH 1391/1921] remove skip_mt_analysis --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index b428710e..294fdbe8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -29,7 +29,6 @@ params { skip_sv_annotation = false skip_mt_annotation = false skip_vep_filter = false - skip_mt_analysis = false gens_switch = false cadd_resources = null platform = 'illumina' From 637692ef5ff88025da858a63d218bbb53972eeae Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 26 Aug 2023 17:02:49 +0200 Subject: [PATCH 1392/1921] update output --- docs/output.md | 44 +++++++----- nextflow.config | 30 ++++---- subworkflows/local/analyse_MT.nf | 118 ------------------------------- workflows/raredisease.nf | 1 - 4 files changed, 42 insertions(+), 151 deletions(-) delete mode 100644 subworkflows/local/analyse_MT.nf diff --git a/docs/output.md b/docs/output.md index 8cc6e4ab..2a7949dc 100644 --- a/docs/output.md +++ b/docs/output.md @@ -221,7 +221,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ
Output files -- `call_snv/` +- `call_snv/genome` - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -234,7 +234,7 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support.
Output files -- `call_snv/` +- `call_snv/genome` - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -261,7 +261,7 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support.
Output files -- `call_sv/` +- `call_sv/genome` - `_sv_merge.vcf.gz`: file containing the merged variant calls. - `_sv_merge.vcf.gz.tbi`: index of the file containing the merged variant calls. @@ -322,12 +322,12 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Based on VEP annotations, custom scripts used by the pipeline further annotate each record with the most severe consequence, and pli scores. -> **NB**: Output files described below include mitochondrial annotations only if --skip_mt_annotation is set to true. +> **NB**: Output files described below do not include mitochondrial annotations only if --skip_mt_annotation is set to true.
Output files -- `annotate_snv/` +- `annotate_snv/genome` - `_rohann_vcfanno_filter_vep.vcf.gz`: file containing bcftools roh, vcfanno, and vep annotations. - `_rohann_vcfanno_filter_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. - `_vep_csq_pli.vcf.gz`: file containing bcftools roh, vcfanno, vep, consequence and pli annotations. @@ -346,9 +346,9 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e
Output files -- `annotate_snv/*sites_chromograph` +- `annotate_snv/genome/*sites_chromograph` - `_rohann_vcfanno_upd_sites_.png`: file containing a plot showing upd sites across chromosomes. -- `annotate_snv/*regions_chromograph` +- `annotate_snv/genome/*regions_chromograph` - `_rohann_vcfanno_upd_regions_.png`: file containing a plot showing upd regions across chromosomes.
@@ -376,7 +376,7 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e ### Mitochondrial analysis -Mitochondrial analysis is run by default, to turn it off set `--skip_mt_analysis` to true. +Mitochondrial analysis is run by default. If you want to turn off annotations set `--skip_mt_annotation` to true. #### Alignment and variant calling @@ -388,6 +388,10 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen [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. +- `call_sv/mitochondria` + - `_svdbquery_vep.vcf.gz`: file containing svdb query, and vep annotations. + - `_svdbquery_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. + #### Annotation: ##### HaploGrep2 @@ -397,7 +401,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen
Output files -- `annotate_mt/` +- `annotate_snv/mitochondria` - `_haplogrep.txt`: file containing haplogroup information.
@@ -423,9 +427,9 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files
Output files -- `annotate_mt/` - - `_vep_vcfanno_mt.vcf.gz`: file containing mitochondrial annotations. - - `_vep_vcfanno_mt.vcf.gz.tbi`: index of the file containing mitochondrial annotations. +- `annotate_snv/mitochondria` + - `_vep_vcfanno_hmtnote_mt.vcf.gz`: file containing mitochondrial annotations. + - `_vep_vcfanno_hmtnote_mt.vcf.gz.tbi`: index of the file containing mitochondrial annotations.
@@ -439,12 +443,18 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Output files - `rank_and_filter/` - - `_clinical_snv.ann_filter.vcf.gz`: file containing clinically relevant SNVs. - - `_clinical_sv.ann_filter.vcf.gz`: file containing clinically relevant SVs. + - `_clinical_mt.vcf.gz`: file containing clinically relevant mitochondrial SNVs. + - `_clinical_mt.vcf.gz.tbi`: index of the file containing clinically relevant mitochondrial SNVs. + - `_clinical_snv.vcf.gz`: file containing clinically relevant SNVs. + - `_clinical_snv.vcf.gz.tbi`: index of the file containing clinically relevant SNVs. + - `_clinical_sv.vcf.gz`: file containing clinically relevant SVs. + - `_clinical_sv.vcf.gz.tbi`: index of the file containing clinically relevant SVs. + - `_ranked_mt.vcf.gz`: file containing mitochondrial SNV annotations with their rank scores. + - `_ranked_mt.vcf.gz.tbi`: index of the file containing mitochondrial SNV annotations with their rank scores. - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores. - - `_ranked_snv.vcf.gz.tbi`: file containing SNV annotations with their rank scores. - - `_ranked_sv.ann_filter.vcf.gz`: file containing SV annotations with their rank scores. - - `_ranked_sv.ann_filter.vcf.gz.tbi`: file containing SV annotations with their rank scores. + - `_ranked_snv.vcf.gz.tbi`: index of the file containing SNV annotations with their rank scores. + - `_ranked_sv.vcf.gz`: file containing SV annotations with their rank scores. + - `_ranked_sv.vcf.gz.tbi`: index of the file containing SV annotations with their rank scores.
diff --git a/nextflow.config b/nextflow.config index 294fdbe8..e4554ce7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -281,32 +281,32 @@ manifest { includeConfig 'conf/modules/raredisease.config' includeConfig 'conf/modules/align.config' -includeConfig 'conf/modules/align_MT.config' -includeConfig 'conf/modules/call_snv_MT.config' -includeConfig 'conf/modules/call_sv_MT.config' -includeConfig 'conf/modules/annotate_mt_snvs.config' -includeConfig 'conf/modules/call_snv.config' -includeConfig 'conf/modules/postprocess_MT_calls.config' -includeConfig 'conf/modules/call_structural_variants.config' +includeConfig 'conf/modules/annotate_consequence_pli.config' includeConfig 'conf/modules/annotate_genome_snvs.config' +includeConfig 'conf/modules/annotate_mt_snvs.config' includeConfig 'conf/modules/annotate_structural_variants.config' -includeConfig 'conf/modules/align_bwamem2.config' -includeConfig 'conf/modules/align_sentieon.config' -includeConfig 'conf/modules/annotate_consequence_pli.config' includeConfig 'conf/modules/call_repeat_expansions.config' -includeConfig 'conf/modules/call_snv_deepvariant.config' -includeConfig 'conf/modules/call_snv_sentieon.config' -includeConfig 'conf/modules/call_sv_manta.config' -includeConfig 'conf/modules/call_sv_tiddit.config' +includeConfig 'conf/modules/call_snv.config' +includeConfig 'conf/modules/call_structural_variants.config' includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' includeConfig 'conf/modules/gens.config' +includeConfig 'conf/modules/peddy_check.config' 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/align_MT.config' +includeConfig 'conf/modules/align_bwamem2.config' +includeConfig 'conf/modules/align_sentieon.config' includeConfig 'conf/modules/annotate_cadd.config' -includeConfig 'conf/modules/peddy_check.config' +includeConfig 'conf/modules/call_snv_MT.config' +includeConfig 'conf/modules/call_snv_deepvariant.config' +includeConfig 'conf/modules/call_snv_sentieon.config' +includeConfig 'conf/modules/call_sv_MT.config' includeConfig 'conf/modules/call_sv_germlinecnvcaller.config' +includeConfig 'conf/modules/call_sv_manta.config' +includeConfig 'conf/modules/call_sv_tiddit.config' +includeConfig 'conf/modules/postprocess_MT_calls.config' // Function to ensure that resource requirements don't go beyond // a maximum limit diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf deleted file mode 100644 index af5cebff..00000000 --- a/subworkflows/local/analyse_MT.nf +++ /dev/null @@ -1,118 +0,0 @@ -// -// Analyse MT -// -include { CONVERT_MT_BAM_TO_FASTQ } from './mitochondria/convert_mt_bam_to_fastq' -include { ALIGN_AND_CALL_MT } from './mitochondria/align_and_call_MT' -include { ALIGN_AND_CALL_MT as ALIGN_AND_CALL_MT_SHIFT } from './mitochondria/align_and_call_MT' -include { PICARD_LIFTOVERVCF } from '../../modules/nf-core/picard/liftovervcf/main' -include { MERGE_ANNOTATE_MT } from './mitochondria/merge_annotate_MT' - -workflow ANALYSE_MT { - take: - 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_bai, - ch_genome_fasta, - ch_genome_fai, - ch_genome_dict - ) - - // MT ALIGNMENT AND VARIANT CALLING - ALIGN_AND_CALL_MT ( - CONVERT_MT_BAM_TO_FASTQ.out.fastq, - CONVERT_MT_BAM_TO_FASTQ.out.bam, - ch_genome_bwa_index, - ch_genome_bwamem2_index, - ch_genome_fasta, - ch_genome_dict, - ch_genome_fai, - ch_mt_intervals - ) - - ALIGN_AND_CALL_MT_SHIFT ( - CONVERT_MT_BAM_TO_FASTQ.out.fastq, - CONVERT_MT_BAM_TO_FASTQ.out.bam, - 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_genome_fasta, - ch_mtshift_backchain, - ) - - // MT MERGE AND ANNOTATE VARIANTS - MERGE_ANNOTATE_MT( - ALIGN_AND_CALL_MT.out.vcf, - PICARD_LIFTOVERVCF.out.vcf_lifted, - ch_cadd_header, - ch_cadd_resources, - ch_genome_fasta, - ch_genome_dict, - ch_genome_fai, - ch_vcfanno_resources, - ch_vcfanno_toml, - val_vep_genome, - val_vep_cache_version, - ch_vep_cache, - ch_case_info - ) - - ch_versions = ch_versions.mix(CONVERT_MT_BAM_TO_FASTQ.out.versions) - ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT.out.versions) - ch_versions = ch_versions.mix(ALIGN_AND_CALL_MT_SHIFT.out.versions) - ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) - 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) ] - 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/workflows/raredisease.nf b/workflows/raredisease.nf index cdd26dba..b1b6afb7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -112,7 +112,6 @@ include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix // include { ALIGN } from '../subworkflows/local/align' -include { ANALYSE_MT } from '../subworkflows/local/analyse_MT' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_MT } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' From d71250c0352a29c8a32fd14bc1420fedc417341a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 27 Aug 2023 01:02:57 +0200 Subject: [PATCH 1393/1921] warn --- conf/modules/raredisease.config | 26 -------------------------- workflows/raredisease.nf | 1 - 2 files changed, 27 deletions(-) diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 4531294c..5fef3537 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -41,16 +41,6 @@ process { } -// -// Merge mitochondrial and genomic vcfs -// - -process { - withName: '.*RAREDISEASE:GATK4_MERGEVCFS' { - ext.prefix = { "${meta.id}_mito_genome_merged" } - } -} - // // Smncopynumbercaller options @@ -75,14 +65,6 @@ process { // process { - withName: '.*RANK_VARIANTS_SNV' { - publishDir = [ - enabled: params.skip_vep_filter, - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } withName: '.*FILTERVEP_SNV' { ext.when = !params.skip_vep_filter @@ -102,14 +84,6 @@ process { } process { - withName: '.*RANK_VARIANTS_SV' { - publishDir = [ - enabled: params.skip_vep_filter, - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } withName: '.*FILTERVEP_SV' { ext.when = !params.skip_vep_filter diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b1b6afb7..fce42b35 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -95,7 +95,6 @@ ch_multiqc_custom_methods_description = params.multiqc_methods_description ? fil // MODULE: Installed directly from nf-core/modules // -include { GATK4_MERGEVCFS } from '../modules/nf-core/gatk4/mergevcfs/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' From 12bb6ae725e46b0583db295b595c69fe12c00793 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 27 Aug 2023 01:21:28 +0200 Subject: [PATCH 1394/1921] update output --- conf/modules/annotate_consequence_pli.config | 4 ++-- docs/output.md | 25 +++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index eed623a6..68b11951 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -58,7 +58,7 @@ process { withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { ext.prefix = { "${meta.id}_vep_csq_pli" } publishDir = [ - path: { "${params.outdir}/annotate_snv" }, + path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] @@ -84,7 +84,7 @@ process { withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { ext.prefix = { "${meta.id}_mt_vep_csq_pli" } publishDir = [ - path: { "${params.outdir}/annotate_snv" }, + path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] diff --git a/docs/output.md b/docs/output.md index 2a7949dc..c977f0db 100644 --- a/docs/output.md +++ b/docs/output.md @@ -51,6 +51,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Mitochondrial analysis](#mitochondrial-analysis) - [Alignment and variant calling](#alignment-and-variant-calling) - [MT deletion script](#mt-deletion-script) + - [eKLIPse](#eklipse) - [Annotation:](#annotation-) - [HaploGrep2](#haplogrep2) - [vcfanno](#vcfanno-1) @@ -384,13 +385,25 @@ Mitochondrial analysis is run by default. If you want to turn off annotations se 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. +- `call_snv/mitochondria` + - `_mitochondria.vcf.gz`: normalized vcf file containing MT variants. + - `_mitochondria.vcf.gz.tbi`: index of the vcf file containing MT 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. - `call_sv/mitochondria` - - `_svdbquery_vep.vcf.gz`: file containing svdb query, and vep annotations. - - `_svdbquery_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. + - `.txt`: file containing deletions. + +##### eKLIPse + +[eKLIPse](https://github.com/dooguypapua/eKLIPse) allows the detection and quantification of large mtDNA rearrangements. + +- `call_sv/mitochondria` + - `eKLIPse_deletions.csv`: file containing all predicted deletions. + - `eKLIPse_genes.csv`: file summarizing cumulated deletions per mtDNA gene. + - `eKLIPse_.png`: circos plot. #### Annotation: @@ -445,15 +458,15 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files - `rank_and_filter/` - `_clinical_mt.vcf.gz`: file containing clinically relevant mitochondrial SNVs. - `_clinical_mt.vcf.gz.tbi`: index of the file containing clinically relevant mitochondrial SNVs. - - `_clinical_snv.vcf.gz`: file containing clinically relevant SNVs. + - `_clinical_snv.vcf.gz`: file containing clinically relevant SNVs (does not include mitochondrial variants). - `_clinical_snv.vcf.gz.tbi`: index of the file containing clinically relevant SNVs. - - `_clinical_sv.vcf.gz`: file containing clinically relevant SVs. + - `_clinical_sv.vcf.gz`: file containing clinically relevant SVs (includes mitochondrial variants). - `_clinical_sv.vcf.gz.tbi`: index of the file containing clinically relevant SVs. - `_ranked_mt.vcf.gz`: file containing mitochondrial SNV annotations with their rank scores. - `_ranked_mt.vcf.gz.tbi`: index of the file containing mitochondrial SNV annotations with their rank scores. - - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores. + - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores (does not include mitochondrial variants). - `_ranked_snv.vcf.gz.tbi`: index of the file containing SNV annotations with their rank scores. - - `_ranked_sv.vcf.gz`: file containing SV annotations with their rank scores. + - `_ranked_sv.vcf.gz`: file containing SV annotations with their rank scores (includes mitochondrial variants). - `_ranked_sv.vcf.gz.tbi`: index of the file containing SV annotations with their rank scores.
From d24123734ebe929e5347a178dbbc9e5980a16fba Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 27 Aug 2023 02:00:01 +0200 Subject: [PATCH 1395/1921] update usage --- docs/usage.md | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 24da77cd..7d1e8f12 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -20,7 +20,7 @@ Table of contents: - [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) + - [9. Mitochondrial annotation](#9-mitochondrial-annotation) - [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) @@ -133,7 +133,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con 5. Variant calling - Structural variants (SV) (Tiddit & Manta) 6. SNV annotation & ranking (rohcall, vcfanno, ensembl VEP, GENMOD) 7. SV annotation & ranking (SVDB query, ensembl VEP, GENMOD) -8. Mitochondrial analysis +8. Mitochondrial annotation > We have only listed the groups that require at least one input from the user. For example, the pipeline also runs SMNCopyNumberCaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check the [README](../README.md). @@ -143,16 +143,17 @@ The mandatory and optional parameters for each category are tabulated below. ##### 1. Alignment -| Mandatory | Optional | -| ------------------- | --------------------------- | -| aligner1 | fasta_fai2 | -| fasta | bwamem22 | -| platform | known_dbsnp3 | -| | known_dbsnp_tbi3 | +| Mandatory | Optional | +| ------------------------------ | --------------------------- | +| aligner1 | fasta_fai3 | +| fasta | bwamem23 | +| platform | known_dbsnp4 | +| mito_name/mt_fasta2 | known_dbsnp_tbi4 | 1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
-2fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
-3Used only by Sentieon.
+2f If mito_name is provided, mt_fasta can be generated by the pipeline.
+3fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
+4Used only by Sentieon.
##### 2. QC stats from the alignment files @@ -241,16 +242,17 @@ 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). -##### 9. Mitochondrial analysis - -| Mandatory | Optional | -| ----------------- | -------- | -| genome | | -| mito_name | | -| vcfanno_resources | | -| vcfanno_toml | | -| vep_cache_version | | -| vep_cache | | +##### 9. Mitochondrial annotation + +| Mandatory | Optional | +| ----------------- | ----------- | +| genome | vep_filters | +| mito_name | | +| vcfanno_resources | | +| vcfanno_toml | | +| vep_cache_version | | +| vep_cache | | +| score_config_mt | | #### Run the pipeline From 93b47320e3190a9e3b8c929ebb0fd8182bab8bb5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Sep 2023 09:10:55 +0200 Subject: [PATCH 1396/1921] remove duplicate probands and children in meta --- workflows/raredisease.nf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1d1d8ddd..233699f4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -647,13 +647,16 @@ def create_case_channel(List rows) { mother = item.maternal } } + println(probands) case_info.father = father case_info.mother = mother - case_info.probands = probands - case_info.upd_children = upd_children + case_info.probands = probands.unique() + case_info.upd_children = upd_children.unique() case_info.id = rows[0].case_id + println(case_info) + return case_info } From 06f717c526e353da3570f777b9b80f69591d6d26 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Sep 2023 09:14:07 +0200 Subject: [PATCH 1397/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b834f2fe..01f4cca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Make target bed file optional for WGS mode (Issue [#375](https://github.com/nf-core/raredisease/issues/375)) [#395](https://github.com/nf-core/raredisease/pull/395) - Added constraints to block the pipeline from running CollectWgsMetrics on WES samples [#396](https://github.com/nf-core/raredisease/pull/396) - Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) +- If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) ### `Updated` From 32418865a1ee0d93fa9ccb8cad0735ed5ca189ce Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Sep 2023 09:18:37 +0200 Subject: [PATCH 1398/1921] Update raredisease.nf --- workflows/raredisease.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 233699f4..a3e1050d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -647,7 +647,6 @@ def create_case_channel(List rows) { mother = item.maternal } } - println(probands) case_info.father = father case_info.mother = mother @@ -655,8 +654,6 @@ def create_case_channel(List rows) { case_info.upd_children = upd_children.unique() case_info.id = rows[0].case_id - println(case_info) - return case_info } From e0d7007f7c0cf53f5cc6e1a562cef6949ca176d8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:54:42 +0200 Subject: [PATCH 1399/1921] switch from combine to join --- subworkflows/local/annotate_snvs.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index bd5fdfb8..dbf62822 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -102,12 +102,12 @@ workflow ANNOTATE_SNVS { // 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")) // 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") + .join(ANNOTATE_CADD.out.vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` + .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] + selvar: it[2].equals(null) return [it[0], it[1]] - cadd: !(it[2].equals("null")) - return [it[2], it[3]] + cadd: !(it[2].equals(null)) + return [it[0], it[2]] } .set { ch_for_mix } From 1ac1a4831054195db35bb2de06ce881cb0e6ad64 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Sep 2023 13:58:10 +0200 Subject: [PATCH 1400/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01f4cca1..bb277017 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added constraints to block the pipeline from running CollectWgsMetrics on WES samples [#396](https://github.com/nf-core/raredisease/pull/396) - Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) - If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) +- Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) ### `Updated` From c1640fc151dbde9bbd7f1785899c9c3e1fa816dc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Sep 2023 09:01:47 +0200 Subject: [PATCH 1401/1921] update headers --- subworkflows/local/align.nf | 4 +++- subworkflows/local/alignment/align_MT.nf | 1 + subworkflows/local/annotate_mt_snvs.nf | 15 ++++----------- subworkflows/local/call_structural_variants.nf | 1 + subworkflows/local/variant_calling/call_snv_MT.nf | 2 -- 5 files changed, 9 insertions(+), 14 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index a705f16e..e7314f2a 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -88,7 +88,9 @@ workflow ALIGN { ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions, ALIGN_MT.out.versions, - ALIGN_MT_SHIFT.out.versions) + ALIGN_MT_SHIFT.out.versions, + CONVERT_MT_BAM_TO_FASTQ.out.versions, + SAMTOOLS_VIEW.out.versions) emit: genome_marked_bam = ch_genome_marked_bam // channel: [ val(meta), path(bam) ] diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 17ecc362..dec73e67 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -43,6 +43,7 @@ workflow ALIGN_MT { SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index d6ce5659..5a6b65b5 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -1,16 +1,8 @@ // -// Merge and annotate MT +// Annotate MT // -include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../modules/nf-core/gatk4/mergevcfs/main' -include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../modules/nf-core/gatk4/variantfiltration/main' -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../modules/nf-core/bcftools/norm/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' -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' @@ -66,9 +58,9 @@ workflow ANNOTATE_MT_SNVS { ) // Running vcfanno - TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) + TABIX_TABIX_MT(ENSEMBLVEP_MT.out.vcf_gz) ENSEMBLVEP_MT.out.vcf_gz - .join(TABIX_TABIX_MT3.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} .set { ch_in_vcfanno } @@ -91,6 +83,7 @@ workflow ANNOTATE_MT_SNVS { ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) + ch_versions = ch_versions.mix(TABIX_TABIX_MT.out.versions) ch_versions = ch_versions.mix(VCFANNO_MT.out.versions) ch_versions = ch_versions.mix(HMTNOTE_ANNOTATE.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index d614ef7c..d0846e6e 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -75,6 +75,7 @@ workflow CALL_STRUCTURAL_VARIANTS { TABIX_TABIX (SVDB_MERGE.out.vcf) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) + ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_MT.nf b/subworkflows/local/variant_calling/call_snv_MT.nf index e91718ad..d55d1965 100644 --- a/subworkflows/local/variant_calling/call_snv_MT.nf +++ b/subworkflows/local/variant_calling/call_snv_MT.nf @@ -5,8 +5,6 @@ include { HAPLOCHECK as HAPLOCHECK_MT } from '../../../modules/nf-core/haplocheck/main' 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 { MT_DELETION } from '../../../modules/local/mt_deletion_script' -include { EKLIPSE as EKLIPSE_MT } from '../../../modules/nf-core/eklipse/main' workflow CALL_SNV_MT { take: From fd9c26fadfc9075b25c5ef73b62c7c0188c13153 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Sep 2023 09:10:23 +0200 Subject: [PATCH 1402/1921] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01f4cca1..6ef40309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of the sentieon/dnamodelapply module [#403](https://github.com/nf-core/raredisease/pull/403) - Installed the nf-core version of the sentieon/wgsmetricsalgo module [#404](https://github.com/nf-core/raredisease/pull/404) - Installed the nf-core version of the sentieon/dnascope module [#406](https://github.com/nf-core/raredisease/pull/406) +- Breaks down mitochondrial analysis workflow into smaller subworkflows that are more modular [#419](https://github.com/nf-core/raredisease/pull/419) +- Replaced the parameter skip_mt_analysis which was used to turn on/off the mitochondrial workflow [#419](https://github.com/nf-core/raredisease/pull/419) +- Adds a new parameter skip_mt_annotation which can be used to turn on/off annotation and ranking for mitochondrial SNVs [#419](https://github.com/nf-core/raredisease/pull/419) ### `Fixed` From 13eab83930e6089e3a2650ab7b62af98cb302209 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 5 Sep 2023 14:50:31 +0000 Subject: [PATCH 1403/1921] Updating sentieon-dnascope module. Replacing parameter pcr_amplification with sentieon_dnascope_pcr_indel_model --- conf/modules/annotate_snvs.config | 2 +- conf/modules/call_snv_sentieon.config | 7 +- conf/modules/peddy_check.config | 2 +- modules.json | 2 +- modules/nf-core/sentieon/dnascope/main.nf | 59 +++++++----- modules/nf-core/sentieon/dnascope/meta.yml | 94 +++++++++++-------- nextflow.config | 12 +-- nextflow_schema.json | 11 ++- subworkflows/local/call_snv.nf | 6 +- .../variant_calling/call_snv_sentieon.nf | 37 +++++--- workflows/raredisease.nf | 3 +- 11 files changed, 140 insertions(+), 95 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 093e94a1..6eb9fdda 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -66,7 +66,7 @@ process { 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 } + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } tag = {"${meta6.id}"} publishDir = [ path: { "${params.outdir}/annotate_snv" }, diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index ec4d4480..6ae12dea 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -23,10 +23,9 @@ process { withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { ext.prefix = { "${meta.id}_dnascope" } - ext.args2 = { [ - params.variant_type ? "--var_type ${params.variant_type}" : '', - params.pcr_amplification ? '' : "--pcr_indel_model NONE" - ].join(" ") } + ext.args2 = { + params.variant_type ? "--var_type ${params.variant_type}" : '' + } } withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { diff --git a/conf/modules/peddy_check.config b/conf/modules/peddy_check.config index fcd75a21..48917af1 100644 --- a/conf/modules/peddy_check.config +++ b/conf/modules/peddy_check.config @@ -18,7 +18,7 @@ process { withName: '.*:PEDDY_CHECK:PEDDY' { // Peddy needs a bigger test set in order to run so we skip it for the two test profiles - ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } publishDir = [ path: { "${params.outdir}/peddy_check" }, mode: params.publish_dir_mode, diff --git a/modules.json b/modules.json index 2109f33a..6416e6a1 100644 --- a/modules.json +++ b/modules.json @@ -377,7 +377,7 @@ }, "sentieon/dnascope": { "branch": "master", - "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", + "git_sha": "4fb6fdc8046ec09cd30f92a2a252e9a0ba4a6309", "installed_by": ["modules"] }, "sentieon/readwriter": { diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index acc0ca7b..6be42a17 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -8,18 +8,22 @@ process SENTIEON_DNASCOPE { container 'nf-core/sentieon:202112.06' input: - tuple val(meta), path(bam), path(bai) + tuple val(meta), path(bam), path(bai), path(intervals) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) tuple val(meta4), path(dbsnp) tuple val(meta5), path(dbsnp_tbi) - tuple val(meta6), path(call_interval) - tuple val(meta7), path(ml_model) + tuple val(meta6), path(ml_model) + val(pcr_indel_model) + val(emit_vcf) + val(emit_gvcf) output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*.vcf.gz.tbi") , emit: index - path "versions.yml" , emit: versions + tuple val(meta), path("*.unfiltered.vcf.gz") , optional:true, emit: vcf // added the substring ".unfiltered" in the filename of the vcf-files since without that the g.vcf.gz-files were ending up in the vcf-channel + tuple val(meta), path("*.unfiltered.vcf.gz.tbi"), optional:true, emit: vcf_tbi + tuple val(meta), path("*.g.vcf.gz") , optional:true, emit: gvcf // these output-files have to have the extension ".vcf.gz", otherwise the subsequent GATK-MergeVCFs will fail. + tuple val(meta), path("*.g.vcf.gz.tbi") , optional:true, emit: gvcf_tbi + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -29,14 +33,27 @@ process SENTIEON_DNASCOPE { if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." } - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def interval = call_interval ? "--interval ${call_interval}" : '' - def dbsnp_str = dbsnp ? "-d ${dbsnp}" : '' - def model = ml_model ? "--model ${ml_model}" : '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' // options for the driver + def args2 = task.ext.args2 ?: '' // options for the vcf generation + def args3 = task.ext.args3 ?: '' // options for the gvcf generation + def interval = intervals ? "--interval ${intervals}" : '' + def dbsnp_cmd = dbsnp ? "-d ${dbsnp}" : '' + def model_cmd = ml_model ? " --model ${ml_model}" : '' + def pcr_indel_model_cmd = pcr_indel_model ? " --pcr_indel_model ${pcr_indel_model}" : '' + def prefix = task.ext.prefix ?: "${meta.id}" def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + def vcf_cmd = "" + def gvcf_cmd = "" + def base_cmd = '--algo DNAscope ' + dbsnp_cmd + ' ' + + if (emit_vcf) { // emit_vcf can be the empty string, 'variant', 'confident' or 'all' but NOT 'gvcf' + vcf_cmd = base_cmd + args2 + ' ' + model_cmd + pcr_indel_model_cmd + ' --emit_mode ' + emit_vcf + ' ' + prefix + '.unfiltered.vcf.gz' + } + + if (emit_gvcf) { // emit_gvcf can be either true or false + gvcf_cmd = base_cmd + args3 + ' ' + model_cmd + pcr_indel_model_cmd + ' --emit_mode gvcf ' + prefix + '.g.vcf.gz' + } """ if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. @@ -55,17 +72,7 @@ process SENTIEON_DNASCOPE { echo "Decoded and exported Sentieon test-license system environment variables" fi - sentieon driver \\ - -t $task.cpus \\ - -r $fasta \\ - $args \\ - $interval \\ - -i $bam \\ - --algo DNAscope \\ - $dbsnp_str \\ - $args2 \\ - $model \\ - ${prefix}.vcf.gz + sentieon driver $args -r $fasta -t $task.cpus -i $bam $interval $vcf_cmd $gvcf_cmd cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -80,8 +87,10 @@ process SENTIEON_DNASCOPE { error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." } """ - touch ${prefix}.vcf.gz - touch ${prefix}.vcf.gz.tbi + touch ${prefix}.unfiltered.vcf.gz + touch ${prefix}.unfiltered.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/sentieon/dnascope/meta.yml b/modules/nf-core/sentieon/dnascope/meta.yml index 82154b38..34e0b97b 100644 --- a/modules/nf-core/sentieon/dnascope/meta.yml +++ b/modules/nf-core/sentieon/dnascope/meta.yml @@ -17,36 +17,6 @@ input: description: | Groovy Map containing sample information. e.g. [ id:'test', single_end:false ] - - 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' ] - - meta5: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test' ] - - meta6: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test' ] - - meta7: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test' ] - bam: type: file description: BAM file. @@ -55,31 +25,69 @@ input: type: file description: BAI file pattern: "*.bai" + - intervals: + type: file + description: bed or interval_list file containing interval in the reference that will be used in the analysis + pattern: "*.{bed,interval_list}" + - meta2: + type: map + description: | + Groovy Map containing meta information for fasta. - fasta: type: file description: Genome fasta file pattern: "*.{fa,fasta}" + - meta3: + type: map + description: | + Groovy Map containing meta information for fasta index. - fai: type: file description: Index of the genome fasta file pattern: "*.fai" + - meta4: + type: map + description: | + Groovy Map containing meta information for dbsnp. - dbsnp: type: file description: Single Nucleotide Polymorphism database (dbSNP) file pattern: "*.vcf.gz" + - meta5: + type: map + description: | + Groovy Map containing meta information for dbsnp_tbi. - dbsnp_tbi: type: file description: Index of the Single Nucleotide Polymorphism database (dbSNP) file pattern: "*.vcf.gz.tbi" - - call_interval: + - meta6: + type: map + description: | + Groovy Map containing meta information for machine learning model for Dnascope. + - ml_model: type: file - description: bed or interval_list file containing interval in the reference that will be used in the analysis - pattern: "*.{bed,interval_list}" + description: machine learning model file + pattern: "*.model" - ml_model: type: file description: machine learning model file pattern: "*.model" - + - pcr_indel_model: + type: string + description: | + Controls the option pcr_indel_model for Dnascope. + The possible options are "NONE" (used for PCR free samples), and "HOSTILE", "AGGRESSIVE" and "CONSERVATIVE". + See Sentieons documentation for further explanation. + - emit_vcf: + type: string + description: | + Controls the vcf output from Dnascope. + Possible options are "all", "confident" and "variant". + See Sentieons documentation for further explanation. + - emit_gvcf: + type: boolean + description: If true, the haplotyper will output a gvcf output: - meta: type: map @@ -88,12 +96,20 @@ output: e.g. [ id:'test', single_end:false ] - vcf: type: file - description: VCF file - pattern: "*.{vcf.gz}" - - index: + description: Compressed VCF file + pattern: "*.unfiltered.vcf.gz" + - vcf_tbi: type: file - description: Index of the VCF file - pattern: "*.vcf.gz.tbi" + description: Index of VCF file + pattern: "*.unfiltered.vcf.gz.tbi" + - gvcf: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - gvcf_tbi: + type: file + description: Index of GVCF file + pattern: "*.g.vcf.gz.tbi" - versions: type: file description: File containing software versions diff --git a/nextflow.config b/nextflow.config index bd904b04..2db5bcb3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -44,14 +44,14 @@ params { ml_model = '' // Dnascope SNV calling - pcr_amplification = false - variant_type = 'snp,indel' + sentieon_dnascope_pcr_indel_model = 'CONSERVATIVE' + variant_type = 'snp,indel' // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' multiqc_methods_description = null // Boilerplate options diff --git a/nextflow_schema.json b/nextflow_schema.json index af85e653..d32b393d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -442,10 +442,13 @@ "fa_icon": "fas fa-align-center", "description": "Interval in the reference that will be used in the software" }, - "pcr_amplification": { - "type": "boolean", - "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" + "sentieon_dnascope_pcr_indel_model": { + "type": "string", + "default": "CONSERVATIVE", + "fa_icon": "fas fa-bacon", + "description": "Option for selecting the PCR indel model used by Sentieon Dnascope.", + "help_text": "PCR indel model used to weed out false positive indels more or less aggressively. The possible MODELs are: NONE (used for PCR free samples), and HOSTILE, AGGRESSIVE and CONSERVATIVE, in order of decreasing aggressiveness. The default value is CONSERVATIVE.", + "pattern": "^(NONE|HOSTILE|AGGRESSIVE|CONSERVATIVE)(? [meta, bam, bai, interval] + } - ch_dnamodelapply_in = SENTIEON_DNASCOPE.out.vcf.join(SENTIEON_DNASCOPE.out.index) + SENTIEON_DNASCOPE( + bam_bai_intervals, + ch_genome_fasta, + ch_genome_fai, + ch_dbsnp, + ch_dbsnp_index, + ch_ml_model, + ch_pcr_indel_model, + 'VARIANT', + false) + + ch_dnamodelapply_in = SENTIEON_DNASCOPE.out.vcf.join(SENTIEON_DNASCOPE.out.vcf_tbi) SENTIEON_DNAMODELAPPLY ( ch_dnamodelapply_in, ch_genome_fasta, ch_genome_fai, ch_ml_model ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a3e1050d..3499344e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -360,7 +360,8 @@ workflow RAREDISEASE { ch_dbsnp_tbi, ch_call_interval, ch_ml_model, - ch_case_info + ch_case_info, + Channel.value(params.sentieon_dnascope_pcr_indel_model) ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) From 2a548e9b594fda268a1889905bef83aa15f834bf Mon Sep 17 00:00:00 2001 From: Anders Sune Pedersen <37172585+asp8200@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:31:49 +0200 Subject: [PATCH 1404/1921] Update subworkflows/local/call_snv.nf Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- subworkflows/local/call_snv.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 1f143610..2ea9f627 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -17,7 +17,7 @@ workflow CALL_SNV { ch_call_interval // channel: [mandatory] [ path(intervals) ] ch_ml_model // channel: [mandatory] [ path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_pcr_indel_model // channel: [mandatory] [ val(sentieon_dnascope_pcr_indel_model) ] + ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] main: ch_versions = Channel.empty() From e86782954987e078a6ed3aa20dd87ad0c144ee2d Mon Sep 17 00:00:00 2001 From: Anders Sune Pedersen <37172585+asp8200@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:31:58 +0200 Subject: [PATCH 1405/1921] Update subworkflows/local/variant_calling/call_snv_sentieon.nf Co-authored-by: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> --- subworkflows/local/variant_calling/call_snv_sentieon.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index aa736ee9..a9f5d4f8 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -22,7 +22,8 @@ workflow CALL_SNV_SENTIEON { ch_call_interval // channel: [mandatory] [ val(meta), path(interval) ] ch_ml_model // channel: [mandatory] [ val(meta), path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_pcr_indel_model // channel: [mandatory] [ val(sentieon_dnascope_pcr_indel_model) ] + ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] + main: ch_versions = Channel.empty() From 8ca4f8d83e3ccdcec392eebd57b45af5e8faaa42 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:21:03 +0200 Subject: [PATCH 1406/1921] Lucia's comment --- docs/usage.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 7d1e8f12..6ce21435 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -131,9 +131,10 @@ nf-core/raredisease consists of several tools used for various purposes. For con 3. Repeat expansions (ExpansionsHunter & Stranger) 4. Variant calling - SNV (DeepVariant/Sentieon DNAscope) 5. Variant calling - Structural variants (SV) (Tiddit & Manta) -6. SNV annotation & ranking (rohcall, vcfanno, ensembl VEP, GENMOD) -7. SV annotation & ranking (SVDB query, ensembl VEP, GENMOD) -8. Mitochondrial annotation +6. Copy number variant calling (GATK's GermlineCNVCaller) +7. SNV annotation & ranking (rohcall, vcfanno, ensembl VEP, GENMOD) +8. SV annotation & ranking (SVDB query, ensembl VEP, GENMOD) +9. Mitochondrial annotation > We have only listed the groups that require at least one input from the user. For example, the pipeline also runs SMNCopyNumberCaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check the [README](../README.md). From ee105a8b60869ad588a9a212a5193b85c25c0881 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:21:22 +0200 Subject: [PATCH 1407/1921] Update subworkflows/local/call_snv.nf [skip ci] Co-authored-by: Anders Jemt --- subworkflows/local/call_snv.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index d8cb9744..96320986 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -103,6 +103,6 @@ workflow CALL_SNV { genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] genome_vcf_tabix = ch_genome_vcf_tabix // channel: [ val(meta), path(vcf), path(tbi) ] mt_vcf = POSTPROCESS_MT_CALLS.out.vcf // channel: [ val(meta), path(vcf) ] - mt_tabix = POSTPROCESS_MT_CALLS.out.tbi // channel: [ val(meta), path(vcf) ] + mt_tabix = POSTPROCESS_MT_CALLS.out.tbi // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } From 4eeab25d49c56b29dc79ed82de7247cfc2661ad0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:23:01 +0200 Subject: [PATCH 1408/1921] Update subworkflows/local/variant_calling/postprocess_MT_calls.nf [skip ci] Co-authored-by: Anders Jemt --- subworkflows/local/variant_calling/postprocess_MT_calls.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index 81738085..2d10cfaa 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -25,7 +25,7 @@ workflow POSTPROCESS_MT_CALLS { main: ch_versions = Channel.empty() - // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT + // LIFTOVER SHIFTED VCF TO REFERENCE MT POSITIONS PICARD_LIFTOVERVCF ( ch_mtshift_vcf, ch_genome_dictionary, From 9c1f1c0e0e4aea525e73e7e47fe4bfc7449ac1df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:48:52 +0200 Subject: [PATCH 1409/1921] comments --- assets/schema_input.json | 2 +- subworkflows/local/align.nf | 2 +- subworkflows/local/annotate_mt_snvs.nf | 10 +- .../local/call_structural_variants.nf | 2 - subworkflows/local/convert_mt_bam_to_fastq.nf | 36 ---- .../local/mitochondria/align_and_call_MT.nf | 96 ---------- .../local/mitochondria/merge_annotate_MT.nf | 176 ------------------ .../variant_calling/postprocess_MT_calls.nf | 4 +- 8 files changed, 9 insertions(+), 319 deletions(-) delete mode 100644 subworkflows/local/convert_mt_bam_to_fastq.nf delete mode 100644 subworkflows/local/mitochondria/align_and_call_MT.nf delete mode 100644 subworkflows/local/mitochondria/merge_annotate_MT.nf diff --git a/assets/schema_input.json b/assets/schema_input.json index 555f2c0a..191f1394 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -10,7 +10,7 @@ "sample": { "type": "string", "exists": true, - "meta": ["id"], + "meta": ["id", "sample"], "pattern": "^\\S+$", "errorMessage": "Sample name must be provided and cannot contain spaces" }, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index e7314f2a..17a6252b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -7,7 +7,7 @@ include { ALIGN_SENTIEON } from './alignment/align_sentieon' include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' include { ALIGN_MT } from './alignment/align_MT' include { ALIGN_MT as ALIGN_MT_SHIFT } from './alignment/align_MT' -include { CONVERT_MT_BAM_TO_FASTQ } from './convert_mt_bam_to_fastq' +include { CONVERT_MT_BAM_TO_FASTQ } from './mitochondria/convert_mt_bam_to_fastq' workflow ALIGN { take: diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 5a6b65b5..8f449e7b 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -36,12 +36,12 @@ workflow ANNOTATE_MT_SNVS { // Pick input for vep ch_mt_vcf - .combine(ANNOTATE_CADD.out.vcf.ifEmpty("null")) - .branch { it -> - merged: it[2].equals("null") + .join(ANNOTATE_CADD.out.vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` + .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] + merged: it[2].equals(null) return [it[0], it[1]] - cadd: !(it[2].equals("null")) - return [it[2], it[3]] + cadd: !(it[2].equals(null)) + return [it[0], it[2]] } .set { ch_for_mix } ch_vep_in = ch_for_mix.merged.mix(ch_for_mix.cadd) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index d0846e6e..28f4e8db 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -50,8 +50,6 @@ workflow CALL_STRUCTURAL_VARIANTS { CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) -// CALL_SV_MT_SHIFT (ch_mtshift_bam_bai, ch_mtshift_fasta) - //merge if (params.skip_cnv_calling) { tiddit_vcf diff --git a/subworkflows/local/convert_mt_bam_to_fastq.nf b/subworkflows/local/convert_mt_bam_to_fastq.nf deleted file mode 100644 index ca19ea82..00000000 --- a/subworkflows/local/convert_mt_bam_to_fastq.nf +++ /dev/null @@ -1,36 +0,0 @@ -// -// Prepare bam files for MT allignment -// - -include { GATK4_PRINTREADS as GATK4_PRINTREADS_MT } from '../../modules/nf-core/gatk4/printreads/main' -include { GATK4_REVERTSAM as GATK4_REVERTSAM_MT } from '../../modules/nf-core/gatk4/revertsam/main' -include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../modules/nf-core/gatk4/samtofastq/main' - -workflow CONVERT_MT_BAM_TO_FASTQ { - take: - 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_bai, ch_genome_fasta, ch_genome_fai, ch_genome_dict ) - - // Removes alignment information - GATK4_REVERTSAM_MT ( GATK4_PRINTREADS_MT.out.bam ) - - // Outputs fastq files - GATK4_SAMTOFASTQ_MT ( GATK4_REVERTSAM_MT.out.bam ) - - ch_versions = ch_versions.mix(GATK4_PRINTREADS_MT.out.versions.first()) - ch_versions = ch_versions.mix(GATK4_REVERTSAM_MT.out.versions.first()) - ch_versions = ch_versions.mix(GATK4_SAMTOFASTQ_MT.out.versions.first()) - - emit: - fastq = GATK4_SAMTOFASTQ_MT.out.fastq // channel: [ val(meta), [ path(fastq) ] ] - bam = GATK4_REVERTSAM_MT.out.bam // channel: [ val(meta), path(bam) ] - 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 deleted file mode 100644 index d857b11a..00000000 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ /dev/null @@ -1,96 +0,0 @@ -// -// Align and call MT -// - -include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' -include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' -include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' -include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' -include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../../modules/nf-core/picard/markduplicates/main' -include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MT } from '../../../modules/nf-core/samtools/index/main' -include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } from '../../../modules/nf-core/samtools/sort/main' -include { HAPLOCHECK as HAPLOCHECK_MT } from '../../../modules/nf-core/haplocheck/main' -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 { MT_DELETION } from '../../../modules/local/mt_deletion_script' -include { EKLIPSE as EKLIPSE_MT } from '../../../modules/nf-core/eklipse/main' - -workflow ALIGN_AND_CALL_MT { - take: - 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_bwamem2index, true) - - SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) - - Channel.empty() - .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] }) - .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) - .set {ch_bam_ubam} - - GATK4_MERGEBAMALIGNMENT_MT (ch_bam_ubam, ch_fasta, ch_dict) - - PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) - - PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, ch_fasta, ch_fai) - - SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) - - 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) - - 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, [], [], [],[]) - - HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) - - // Filter Mutect2 calls - ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) - ch_mutect_out = ch_mutect_vcf.join(GATK4_MUTECT2_MT.out.stats, failOnMismatch:true, failOnDuplicate:true) - ch_to_filt = ch_mutect_out.map { - meta, vcf, tbi, stats -> - return [meta, vcf, tbi, stats, [], [], [], []] - } - - GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, ch_fasta, ch_fai, ch_dict) - - ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) - ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) - ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) - 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) ] - 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) ] -} diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf deleted file mode 100644 index 43edd93b..00000000 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ /dev/null @@ -1,176 +0,0 @@ -// -// Merge and annotate MT -// - -include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' -include { GATK4_VARIANTFILTRATION as GATK4_VARIANTFILTRATION_MT } from '../../../modules/nf-core/gatk4/variantfiltration/main' -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_MT } from '../../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' -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 { ANNOTATE_CADD } from '../annotation/annotate_cadd' -include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../../modules/nf-core/tabix/bgziptabix/main' -include { HMTNOTE_ANNOTATE } from '../../../modules/nf-core/hmtnote/annotate/main' - -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_resources // channel: [mandatory] [ path(annotation) ] - ch_genome_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_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() - - ch_vcfs = ch_vcf1 - .join(ch_vcf2, remainder: true) - .map{ meta, vcf1, vcf2 -> - [meta, [vcf1, vcf2]] - } - 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) - - // Spliting multiallelic calls - GATK4_VARIANTFILTRATION_MT.out.vcf - .join(GATK4_VARIANTFILTRATION_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) - .set { ch_in_split } - SPLIT_MULTIALLELICS_MT (ch_in_split, ch_genome_fasta) - TABIX_TABIX_MT(SPLIT_MULTIALLELICS_MT.out.vcf) - - // Removing duplicates and merging if there is more than one sample - SPLIT_MULTIALLELICS_MT.out.vcf - .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) - .set { ch_in_remdup } - REMOVE_DUPLICATES_MT(ch_in_remdup, ch_genome_fasta) - TABIX_TABIX_MT2(REMOVE_DUPLICATES_MT.out.vcf) - - REMOVE_DUPLICATES_MT.out.vcf - .collect{it[1]} - .ifEmpty([]) - .toList() - .set { file_list_vcf } - - TABIX_TABIX_MT2.out.tbi - .collect{it[1]} - .ifEmpty([]) - .toList() - .set { file_list_tbi } - - ch_case_info - .combine(file_list_vcf) - .combine(file_list_tbi) - .set { ch_rem_dup_vcf_tbi } - - ch_rem_dup_vcf_tbi.branch { - meta, vcf, tbi -> - single: vcf.size() == 1 - return [meta, vcf] - multiple: vcf.size() > 1 - return [meta, vcf, tbi] - }.set { ch_case_vcf } - - BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, - ch_genome_fasta, - ch_genome_fai, - [] - ) - - 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_resources - ) - - // 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_vep_in, - ch_genome_fasta, - val_vep_genome, - "homo_sapiens", - val_vep_cache_version, - ch_vep_cache, - [] - ) - - // Running vcfanno - TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) - 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) - - // HMTNOTE ANNOTATE - HMTNOTE_ANNOTATE(VCFANNO_MT.out.vcf) - HMTNOTE_ANNOTATE.out.vcf.map{meta, vcf -> - return [meta, WorkflowRaredisease.replaceSpacesInInfoColumn(vcf, vcf.parent.toString(), vcf.baseName)] - } - .set { ch_hmtnote_reformatted } - ZIP_TABIX_HMTNOTE(ch_hmtnote_reformatted) - - // Prepare output - ch_vcf_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } - ch_tbi_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } - - // Running haplogrep2 - 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(HMTNOTE_ANNOTATE.out.versions) - ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) - - emit: - haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] - vcf = ch_vcf_out // channel: [ val(meta), path(vcf) ] - tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] - report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] - versions = ch_versions // channel: [ path(versions.yml) ] -} diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index 81738085..cb14c9b7 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -1,5 +1,5 @@ // -// Merge and annotate MT +// Merge and normalize MT variants // include { GATK4_MERGEVCFS as GATK4_MERGEVCFS_LIFT_UNLIFT_MT } from '../../../modules/nf-core/gatk4/mergevcfs/main' @@ -25,7 +25,7 @@ workflow POSTPROCESS_MT_CALLS { main: ch_versions = Channel.empty() - // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT + // LIFTOVER SHIFTED VCF TO REFERENCE MT POSITIONS PICARD_LIFTOVERVCF ( ch_mtshift_vcf, ch_genome_dictionary, From 1fe33557026ded3437da8a4f7fd92da6a9836a6c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Sep 2023 17:09:35 +0200 Subject: [PATCH 1410/1921] add sample to meta --- assets/schema_input.json | 2 +- subworkflows/local/alignment/align_bwamem2.nf | 2 +- subworkflows/local/alignment/align_sentieon.nf | 2 +- workflows/raredisease.nf | 8 +++----- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 555f2c0a..191f1394 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -10,7 +10,7 @@ "sample": { "type": "string", "exists": true, - "meta": ["id"], + "meta": ["id", "sample"], "pattern": "^\\S+$", "errorMessage": "Sample name must be provided and cannot contain spaces" }, diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index d35fd9de..75bd723e 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -33,7 +33,7 @@ workflow ALIGN_BWAMEM2 { // Merge multiple lane samples and index BWAMEM2_MEM.out.bam .map{ meta, bam -> - new_id = meta.id.split('_')[0] + new_id = meta.sample new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] [groupKey(new_meta, new_meta.num_lanes), bam] } diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 044b0fb6..366f6cd9 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -22,7 +22,7 @@ workflow ALIGN_SENTIEON { SENTIEON_BWAMEM.out .bam_and_bai .map{ meta, bam, bai -> - new_id = meta.id.split('_')[0] + new_id = meta.sample new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] [groupKey(new_meta, new_meta.num_lanes), bam, bai] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3499344e..e85813df 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -615,9 +615,7 @@ def makePed(samples) { outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') def samples_list = [] for(int i = 0; i Date: Wed, 13 Sep 2023 17:18:10 +0200 Subject: [PATCH 1411/1921] update changelog [skip ci] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb277017..40644917 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) - If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) - Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) +- Removed logic where we added an arbitrary substring to keep file names unique after alignment, and then split those string to get at the original string before merging with a simple copy operation. ### `Updated` From 416f3d5d9f74ffe83d81f1daa6ad0406fad3df65 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Sep 2023 17:20:18 +0200 Subject: [PATCH 1412/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40644917..aad514d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) - If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) - Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) -- Removed logic where we added an arbitrary substring to keep file names unique after alignment, and then split those string to get at the original string before merging with a simple copy operation. +- Removed logic where we added an arbitrary substring to keep file names unique after alignment, and then split those string to get at the original string before merging with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) ### `Updated` From f08fab2ae7cd117bd54d2bf7dfe557bfa21269f7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:03:45 +0200 Subject: [PATCH 1413/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aad514d1..786e2829 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) - If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) - Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) -- Removed logic where we added an arbitrary substring to keep file names unique after alignment, and then split those string to get at the original string before merging with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) +- Replaced the logic where we added an arbitrary substring to keep file names unique after alignment which we then removed using a split operator, with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) ### `Updated` From e9bdbfcd37d88a6e0ebccddee2f5a1382e39c849 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 15 Sep 2023 14:37:40 +0200 Subject: [PATCH 1414/1921] skip mt analysis --- conf/test.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/test.config b/conf/test.config index 9a13845b..652849a6 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,6 +25,7 @@ params { // analysis params skip_cnv_calling = true + skip_mt_analysis = true // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' From 29c9c85ea9daf0b83fe6437c1ae9b23055d80eb1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 15 Sep 2023 23:36:59 +0200 Subject: [PATCH 1415/1921] update test config --- conf/test.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 10e89c43..c7593f76 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,8 +24,8 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true - skip_mt_analysis = true + skip_cnv_calling = true + skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' From e072032a9138390712bdef4069125b5a55c6e0f0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:38:32 +0200 Subject: [PATCH 1416/1921] add metromap --- docs/images/raredisease_metromap.png | Bin 0 -> 266073 bytes docs/images/raredisease_metromap.svg | 1441 ++++++++++++++++++++++++++ 2 files changed, 1441 insertions(+) create mode 100644 docs/images/raredisease_metromap.png create mode 100644 docs/images/raredisease_metromap.svg diff --git a/docs/images/raredisease_metromap.png b/docs/images/raredisease_metromap.png new file mode 100644 index 0000000000000000000000000000000000000000..508570c65fb21c6dab2bdb0084bce36504092302 GIT binary patch literal 266073 zcmeFY_dlCaA3rQ&@08Z2_NJOzHPT@eRYg%XYeel;Ge&ffS}ke>r7dc&A~tEQB1Y97 zk=nJln0cc2-TV7}{)6X-C$D&2FS*Wj&gY!-{=7fyTyGve(4wc|pdle4q1V2rZb(8x z*+fD@HcLf8{G|hS_=0$$_Pl52LqfvPdhrM7^vJg-{>c7ZVH(>GK&NJy@dXsh3T6p*nt?H`PFXd-NnEPD^%KJ(q{t-^+B(`k8q%rW)=5h_4S9v#6XZZD-TZ(ZA1Qi3<)z3fHY-pc<5$HNQ zI@@lF=F{`n++5rbR&mDcH#LtQ`s9h}Z63<;gX0CY6aM=x;7B^IC;8vM+6f~`pKAWE z+s^Dky8qg0Cln_C|2O~tMYzDj|A&zfWT}pCeovG!$Ne`%`af76lHj*pMbz^1FOupC z%#MP#JDN)`aBb)tjagge_)nv%_-KS`cotwEy?;x23-IwufGPC6kg+F`c>7U1U6asX zH5tn0{|pFVdQ8;_24@vkZIVvWSCKS0EJlZz=3WfyY&YFX zfdAkPLPnzvrhG%DI5=2W{gkQpGM>C#w-c?*kDZCm)geAIaj$mJ{O`!xt5W=aG(f4sO=sGk58gzQ%>H*J# zD?k?$L9%p;9Ao4G)c6)mW2Jx5-}%Y@?>T3UHhHuY%hUZVxQD}HVv>s~P{eN;OFBh% zDszoOkr^KZ%^Z&wxpS<;Y6Wqutr zDQ*#?QtB^}LX>WZm+il-x$gt2aDb{!YQRY7(RM7~_L1liv;lfa+zsZim|etna?M73 zs~OYyiL(3egZ=-9jrTtw@SZgu*2dZKySpvf~61H^YFYxXg%qh(^5F5j3`K362 z9{*?R8MOC5Jr+{SjkJy;j-C@*i24T{!>lKdkA}wznkdHT$C&Y(3rqeoDacXHHbvYu z95-5Dz?RBWtektRzME}^LM_u>LG%Kgk^f*+kcB`*AQU0|*k7NHIBb?M86c3kj0Xk- zA!RjDD>3hSXI&bsQtREX5>+xl2{bk7P?Z8t*6;dW;NMUy^N-YDXbkDAw~68aAIZn$ zz}9P?>k{Y!v^!F%XmEsTiZO=NDhtWz$KgRz&XyXFj6Ccsx&VESsrP>oX$Xl&R)*^X z%>mY%&yNmSB&uXq2f}3A$EShtF3``TrW}J?B>IPsdWmBuRNaigUR(vW&w6svmS}2_ z7kZ}y)5xAm(f-Q15L_Ws4gBW{HH;N5D=)B z1bM`W3${_l`Sg@IE*hal!h7M-%2oZjj~7&_@RzrwaMox=pvT37A-zfe6`3;}F-C!> z@H7z`+6X?gLw`alp>_hfx3p|nZ8kBdcXL(Y)+Bb}FR$-*a(C3S2Pk;nfri#-S^p)8 z627~CyGzK4y`{cJIYn`LWlRLz!(BQI*oF68-;H5d_aNE$G**8Kxn5a4*etbWiX*qF z!B{+WnkgKtp<7Ep_V0JNT##LkvDd$)h`j~HGFVWq(PvEk*>S%mpm7zuoe3dHAt}op z8wn0PnPZvEd`r0x(zq82@ia8Ssu#M3g>r8B;i{2GHZqMjE*9vC*#BmBPo0b0 zf^jMh8EG;hP2S{4`)_vQ%pgh<1pwear6$k=c+Rkvj+9YX zr>+H#u?AcPTXTZ+lKKzJPA7o1lx$f@!ty>V|Hbl5qyNjL1ySm4Mes0^Fbal#46DRC zb9fJ&9jR10hyri1;*@MsFcw2j#d_g&NVARhl)tP!T{!eVV^wmWYz3ZulMLG`ijvm< zD8$b}BEIAomT4=5Kl(t~jbWv4yqK!7vgv=x%{U&B3W({$s7hqDu;PUWC^FKJkd>hp z20XBwb1NBhYAKTj433efcEM>eAi;r=Wgr1nsWYdm=$KDs`AxX zKri71Ma$ln(9p7)l?!isNZI-1pPOBhj%j4Attnd_gAV~Hi)W85n~V{}HaXZiuQ`zjsG}PDq#mU6g3#~iO4M|Url%scUEO=BnF4MKt zvv4Zi#`VKeCwK5S_epZkf|!1Fa^Aji39+k{8U9&OlS=^})x#!hmHldT?AKo*!H(Wb zAN;?%j?-|m(36(FMNETt+cQf|FV-k1ofz^I%#8a@x^ZeUI;WaM1-QUqN9Ma$Y5oTx z{VJ8uj;a?sjvGF+l*u?^M@^)&!VV!k%|hVHvejfkr@J7KkPW{lsi*4JOH6R7essd| zz58j8I8+zM`HEIee_?NaEG?O;stUMSjY(-6rlf_hi{AN48@?+r+k+kj`*>xU zdMYB)-cjaqc{y~$*rdY$*k zgHQVvtjk;hjJ#?YlO8P}ru}C^UZ2#A+0vHQEpqscJ*DhZTFNlBa0&6onww`m*&3-Y zQFiFvj?yZjWk4R@`ABTj7pP4y2f03a@W2&C7Fu zAw?dX@~!WtG=4ryHh2HM)yinyWl4~CpHd_ub~_67DRQj?D$-P7zB={pJ*)IWg$R+M!U)Q?S&xNies^k1VJ}-XO}cJHg&t?-E<0~ZkM!RPL;OgadRw1Et_u;vLWV4 z@|w!`xmzY1rMg>QpI$$^x<&E$cxzXJ3=3PY9_1j%l31Uun2IG?9gXyVhV*Tqj)~n9 zVfB>A4J)Sn0b#-mLhHI;4t=GFqe*`C`zyKTFrp4D_IiZwN=!V-O4FL8jUH)` zzo4FpcL87g6{z^r@*XJO%nr7?0PqHk_?@XG{9FJ6U%$0bANcd0t zj!H~SWSZYv-}&XOG)?ms~+$BYMp&w;31u8((eikrnyv$2rC2V zxj4TXWiW#x#p8wF^+CA^Mb=a@3&vnsFkzxoX#dSs+s;38kOaA08FIR{)u3aYlSUzl zs#rEz+ma48CGU9}H#Z+suD^s*h@4C>%XV`|*81*NQKx8$h0(6jc^wyj67Vk-OY(o& zNINS*yAp9)61ajFIIcI@k3opGk5yEIerE~n>k4)A=0>AAukwrZXJyIkd273TtP;4D z+{0<(mXNc-1gZvYXMwz&)w!;KVnZx{b@1~a#373KXTt<$s}T8S8i!@1Z%MOa5rC#g zw!_f~%W$9YGW*4o6Bk_5wA5U>f2#aB>Xpa9Tj1u#tcCu??w^HAG>s0XN(hgrwrGSR zE@froI}hhk6N6!pz^w&B;qyQ$#r(kIF3NX-)F7j@JiXc`uH0XaZyOq|o1a$5j%{aC zj>rU_K~J>qI!We^y%d#u+q~WO32DH}i*+Ag=6n#Ge2FoMwHm9o^lH<3WOQFg)$Li^ zHI7x0()pdigP3So^+&n)@#dF#KNRz8b7mvPIBTzr72Mt31223H1BvClLQ^5K149_5MuYgpY8dwnz@%>I z^M+BGw`rgc&@$I|_sk;oLq8TZgF7v~CW-5`v3+{wi0_AXt|Xx#aN<=_N;N8LcMoI= znQ2IJv2=rN|Gqm}Gd6!8i`s89)N=}0TJ2%H7B?}NjNZuY-~zG*xnz%y40zI9%jt>k zB1l>_20%AWs-VuFtEg{@+3LdClu>>?*%59}tR8Y0nx?$0^tx3LqP_YxZ6d=oY%{uF zEwoo=`p_VOXwzc=#E_qyi~cl;|JEs&r;mDLCl0o*(UyrWK`)}s(Eg%+bPbmkrTNbl zzraOh0jQnr9*``M4alY8g*x=s(r9Z&j@N&mHg;`bXGRr^`6#s`w+izo zy|-xG{IP*cPhMkN&iBhqpA}8pwtM|`h|^wAT9jZ>3i`pmFujx4w;O49o+c171M%~m zqkHG^MsInoj5s`{yCTDnm=dA%+}rEHCxLFNk5MDP5UX)YAE7p_{@JL#Lb)c96qK6U zYQ9U&YFB+u^A!*6ARA5zFM}@5h!@p|=~WcM>L|lE zO(yzDu(UBf81^P}-~REZ$FH(Un|mc%&o;i&J+7iSdqS05iZZ><`^?(1>{VS6r#QcP z*Wh>KEBg(|)~w?}!un{%daOsVK+DPWrir;Y`Yxktn{>n4ojQxqx)NwOSu29UM5 zUhzp~Mp1Fea&oj-#qpcZW@*+>dPhs7df3~XTih2emH4_XB#of9;{$I9}7M`wSE7&hnqej1C{U4^}EST z|2~Jg^4Gw5z|V)UYq?{Q6N7OEQPTaPF$aUxp4uyVpb9Zh3#ippL6bDtT*6UPhV+a5qO9dqm~cD$ zFYA5`7?!&%eg%{+lf}gZnj!h(uqY#u#S64xP@y|z!{6|9gJ#wyR7jIQpx}^4C3UUx z^RI}aaFDcF7rfxsm8ff51DMmm1+L>ml9%BP;N511!xnZteS22q=DzpQwELu!2t!G1 zz3x>=d8j~p?0!#oo{DGNytIh*qe?`6?$|fm-MDpynPBi{=wX8?j8N+}mnv)b`Uu48 zxY$`=@`L`qIvvntzscsW)9?0*uBm~^|9&C2s(&9Puuq?jVf$s8Vdl};CsVbC;|9~R zz+?Q~d(z>=e1U=C&5)6&DUbS(l_Gu)_jII~JBMN?4&~;uz0hVu@6$$u;NHocndy@^@oyY=+ox+v+;|_iK(#`v zk_Z-|?%(1oAvYG{t3$sCI(<-YlS5OZeaxgEEN81QCDoL`?_sB>;FT$;; z%RSLxpLIgtvKIfW1y0?jVQueiJ3^7Zma3Kqf3>|0rz|SG-+YmZY!66;`-I0MkL>$R zT7E|(qT!6Dp?ZCo7{s)wpFlpquOD-n(MEbh${=Gugr$A6->B)4-`laL9e97u4ttxn zn~axKcs;uzj7>Yq8%3_I%%CMe*7_Lg&zJO_XzSA#s)tiPxrZU=yID(9KK<)cQx7Uu z+ci&kUj40P3_(h2Ke#|@dWWb_Vl$PO^wA5{Z&SJ(9TuOOa*bMsE1)r6i5_l6CF4nm z%J3S>g%$<3zDA2DZUHq%U=2?)k@xifzw&hDN}~S_v99KYtj*RZVaS zV}HrfT=^he;g*<=E{em1aGLsoqU|e6&N|S9b z%E}pIIEKI>B=%6+Eq$97#MtNE-lWw-(rk$$;c9O=v^<(qS>6QoriG-ILs1x<^61XC zJ^)~G1*B&gGdl9euH`bQRqXo)EqJ$^A(1A+=>7!Uwg+FjF-?nS_oUnU?aa{Vf7(@% zzIMaz`$GJ--H5;z1Kx{%K~>=Z-7stZoW{#Kcw3_*j=RU$)KbHIQi2e0v5Z_{r`wi9 zj}$VN3jCXDI!pQF-+ll|Q>-WYDu38d`JdjS*i82wn^#ah-;fBKWbTLU;CjrVaSgK) z)z!I{;RS-cW~i!d-pTu_fv?xuhGFs$m#l9?qg<1tzV|pkBM_G)W-iJ191Uah?S>q* z;za2=kBitIo+P`om!lpzb50D^%Gapt#l+}wx^wydjCb+P5_Fn=WI|<4fw1FA;Ndd(s`|Jg-`Y zdVSp=@_%Ll@kSx~{hViH`9JUcSq;A#<@Wmxf)C`S)GodWG0e~+>@pl~Tn71Twt>+e zVx-%x*LMpu!!%UwBH8C=zJKk2ICx)gw}0a+E0g$!z~#Sio1nN?SV&J8)r2;aWK7hB zY)sX~@Io@<1+;dshs`P5bDfoh^AoW5{JqkKjr!7vG@xtMWZK`%^UU#?c;vLZiZ}Xn z;?riI;R!ZZl$%EK-VS1XPME+`y0*Op3EEnyL^U0>%}quQjc9lVP^7ql?YpZbm)p>!Xe?M+NyM>{sNtIM_Wl|8V3s4-O5K zL#};UEef>m8O(*O|KYHmO|6foTvHQr)(HuXxiyq@VAIp_7GS-$`b5yljumt_T%W`t z3b#**JSuxI-Ao=s`5+bnaa>H|-XMgrn0xAP$PHM~Vm?I5+5oBoDw_P-Q*RZik}m>%usw?(oZVRkM7Wcj2EkiJGQ5=TuCeJ=wV# z)kQ|qDqzdC^`U!dvkOzuLm7oog`b4a0Q(=Vd0zw8N`q4lzPtSK%XU}Eu6T+*-F=~$ zxQ`6ZI#tO&%h6(J2=Y5LHs!wVqodyVM*7aGV^&CVx<_-M?_EhUYzmTdx^C$rd>}hJ zy}!9wAi{h9z09jI(6jJH+5qM@^wqLwJtIC#T<6oQL0==>zI-^%6l|ezr9E;)NQIjM z)V(2c3%|06yKQ}7Pk&rvFq(y5Fuc2NRJ+<^r>zSBdk8+Cq(i5?#~;zN!7Cqxuo?4))ZAW$31Wse*ANDsYZgl zA87jlP6;QCGb5%)>&lI?ro~Kp-D&QVhmx-Wxad`A)?9GA9^8G@R;0vK+^ETfK7g1c zwO{0wa1(i$Ard0fF27_aids3RZ6B@fxx5Fe2!yK5WXsqC4aQ%bDxmMO6s7u;N(0mq zkSRd84uGVJqXWFx(2C~L?DA%OEXW=nou}XNiZ~=k26}fAS@w>NR+J@u;lxE?wXW#) zJv{L@%fGV#j)^-SBjBy(Jc~G0ULOB;(_+dcwHHQOTRl{mKX?10 zuUM|^%;r0X*GtdS$7@oAkz>`j((h~DYK%fuQr7fM?p`=@U6@wku(FcUD&}j{vuM{P z-rip#!FHWlTn*a(L!U}Du6b8~NQlfjN-MfK+@d~`(be5&8Pk}rfRg+$YT-{(ox7MB z+BXq3k@oVqoxO_QL3b_e=l&8m!mD~373Sv{GAs=ayCYjS`xuwU(m*L`N&z);&1&(7@+2V7 z+?50V#>M(AV^|eoJ@HtqPhW+gHBeq;_KW<4+WCC#<$gf4vhZ*m(V=(=SQ2s7?BHgv z3qe1_$$vhpLe7EDe$dct)94LNyUo-` z%8uAX-pCB~?aH;A)U{bLbA-UL%VB>ycI2HwvhQbMD}S)5@9O!Y5q#(@lb;Km$Utq6 zVFBVE75KaEeL9o}Kj6@X{h6inqdaE<cq1G zVWfwKeZL%=VMLXk$2ynqr!Y)4`t9;H3_h+AsLtiqX+y+}CD=S0de6b<{MEur(>%~> zsIBt-?zXr2QRt%7`FaN94E|Z^f`SiMt(|K1U8{-}o1vc#sx0)rMHcHHdL}m0&dyF| zelE0!sip@WuC==ubw&`qO|MCg0NQw%uq$naFO#17NPN{h$*Tc80XGu0M5_q}xw-ou zt0zz$_4jEjD^|L0PLiOqp7~*bfT&5wkV(A*RGM!Vc@KK&=+?tyw`3iENsHPoVOxa@Ca&dtDS3z7?OmJ$) z%D6HX$I=ZNuKN|21L@1%pncZu>ph)#mG+hSnTKS{T0jqqxGoHDsbdIG45dFqAE4El z1s0gCW|@4U01$Clq)$4q6fbk)D|dnRnPqW|l=nTc8QLL%(I01#2Ga)6C|(5<*g<)K zECA{U##?=j>^{)%W9pV)C^Ynoqt)&GC`3?{G0Nj(YU=5FoOzvAn}7J6XrE3?arBAS zLsw7>>wu1z$=PLMX`8is6Qn%jJ?OVCm+JyNuzdS;;;Kx(wLD>pGA?zn?4|hyg$z!N zKfAjL`UO!ely_+%IRfCsUg-C7C>+7MCYo^T(2Ob{b0uk-SxYAUcS_MV);JABf4}pG zlM)r%Zki$piRN^0cU0(e?CoIjO%{{DdH0P7YES9%&Qd zQN`~R2KfjIb1T`*kI0ope*k~-iN|)O4I&UJFZ<+D-dC2KZB`|hSt>RxbhGxS zebr0^Y0luk@oI^6G=HuTUg4|9ey?lY6-{Xf27YO*I(sv&W!-S>^G$&y-Sul1bOGfc zlE9_4ExbO#4{CBH*M&lI+7H{f0pYE#lu}did)RtD*&l0I{PQ5S zfj-~dZ^EQ?+$S;IH}~qL9md@&QYWX0gu=kWrjXckWh0=Hq)rdV3s*5mC+UUy9i8)& z^1VMPsIbMMbRP5cQDQFCQaw1swrEF0Ot|TcMNtSmx|}hA5Cx0^Iv=HF0@YB>;r>Lplm~gEJlOoE#Uw4B zWZ>4eZNo5c6R<_Kj^v<8eNG793tBPZm&L317?ZQl@LG&bD_D1l z2Snf{40*Ud|8!_V@V77u(LF%vC`r)UjW=Xuas z*A+uXY9+#&8aJ;fga$mcoBpa#;+XiJkDy-h+D>_^dTq%c) zj#eKnZr2zv zpZG7$`8ci4RmRo(HEeKIHfX4~q9YS%a%S4hDf09$nLnd7PhP7i?3dM0cI(&$k@-{mv z+}ymea_IYBzO1ZF$rcSyOKItok#=!W-u@}#<51MB`wpgXql!m9_!>brUp9g+-x6D< z;^N*DVhTC?Ztd=7HidzwRd9>^c<2jd;?QY=YlNN7fjtL8xor+eYsm8a00L2X6LbhR^TUGx!cW zE)I4RAe49&&)d+@&w~eIQ36Rf9}Lygv(>1uy+r`w=Ay!DO)qVW)@iTrerM>Xj=}|N zmbTA##F{yL{$?s>@{ABa8@w?C%rkN&hp2)XR|g0oEDcPjT#BM#bAeemv;thgKO_HP z397*%*hf#SRCvroHKL2E)Z&qN$XeG+nX==uHy4$u0uR?4pZu9*gI2URdl6-(eKY3< zLt8&Z80x%ZQOD-YcBQG04=?iLIG=Yw<_#KK)*n)EUIXbYA}q4P%Dyi$BI`n!(hr8B z*5Zxyu?50Aq)}3Qj?5XA(h?J}iRD#&MG=aj;0!~jXEG|%KHmm?97AyRyQaehkO=Hc zqCx64{6q1=vLSGJhDaWbqlGus+dhWJ?vIjt1t>sZbt95XTC7rLU%wy3OZ*yo1d+b3 zMp*$nOsZHJXeg-g3MQMOpm;t54*YaK#>L6$&&V8ud@S47;)>8k9bqj=F=k~{Rn;DT zq=Y29G#C!O(J);>8UDU8#sIXy;rMJJLNS&)%*%^n=-K0x}M9$H~F>;`kRbL~2k z`Z;da{$5ZZILcU!9G`0~zQ4k1zTE8k7U0{{$5WxCOz#}fzS*15-V?fay1UySI6X#d zr50s7KdiOM{gSiUs<0>!jP|3Q>^R>UbJmx|UnAN(VmZ$HZKA{(^b6X`eAcw*AVYKH#mxBHy&}YKJI)GgWZZ?9^`Jbsr}O zZ*-n0s+AG<1JhX1sydT57K>A}Vc3$!g+_fK4GONw$gG-++17gJrL-!GlXS2}i^@aX-!ED}u zHeRtlsUjf%i?H{J6QX_J8Wi{+m?!$QjcV=gB{F`@U}avbM>)Pej35S<=l3hBVKQAr ze|`RkQfCO^OVY?t|DDZmv9Tu(^HS5*^$m%}5m=DH%+SEKSlkEIt+lvIJ29`Nbfv8< zJHvsLYsQ}!d93Pa3YB#pJ1whv+O%rvw6zzXne4dCwm*|;ar-uy%lLd0{*r>>RB+z3 zzCO8YUL%@Sf4S7Lq;FYFq>*>F4RzF`w!im^_uT1-^T7Q6P49=TeZUqD-|EQfUh8A5 zi2kWn3ZW!qwz=O5{OsWwbq}OvVLT-{^mkp#3c#69pGWQaA8K>@qB5~2+moGxltomq zYo6>oRPng6I-K7D_gM z;BO(GZ8fZZ=3W;TDJQgO&i~cKqrrqdLEzlw)!On4}uEF5wKp>$pfU2SJ}C!QA}|5TPI-| zoA@TZO|WOUB1h|h!&zyU6|GN)=y2c++q?`Z#r}YR340JD$Jo|og#N)mrLs$2#^#e+ z`>uW>tq>jUnY53T!ky2#gB0X$aIxj4GOT*KpFL55{hZD9=*CF5ERAZa-;kG+SGn)i z;q2)4(+V3xgh-h6%u;c|Z(dc;MAnw0L~_fBevs^5Wh8yzpT+`->7e~m>x_!&zH9}U zsEz^c!v{OBBB3>EKSxY_e&5Q{1H< z+7)TdJ$W6thQDUi8fGYPZ zY+dNvH}qm-^GbZfE!oBfJS8nDv4Tq33P2AytMt+KX(_1(9D^|?X2(y~!hYN7non9~ zQW?<9{t{4FN^`4`_P-oZgF->h4T1&rtYO~fN1L)G2vKWa#4A!CNZb_8i$xlP}lcpGv9i2R{myfh{ z*;C*MVEvm~QPs#lqsApBt>es^Uu4?uA5h)Q*nF@pcP`<1XJKkD#bNQ3STLyh;5R$K zou`NAVK;hQhE{ejwoY#N&uPhodh_Ae*xp~lr=81x=EAtQ?joj1AG{8bzn*uC>qG8N zEAdva-=vGa>v91H3VHKs%TJ%BQ?WN5chneV6LBSEVQ*)9>qB}x^%MHZ1ACWM7f+i5 zSK2~Ml(%j=XNK+oh{qw$mB7u(TZgY;R1CtE06gWqQ1+5qp!Mz$HDTOH?s<{7bZ+&T zOkGZh4k}5e2esqx?KHVRK5=f^T|6v)p4O3;l&SmJ-7QQ!r5ZA^%~~9K>MA3%5gjm+)y*YhInqj27L7P{NegMDo* z&1uy9rpCY9--nz0~XMxAF}^NrVKouBs1maw8Eu}(i{h0IYRlK|^aik#2ox*bba zdQas*AYTBl^*AtL&~()CwE3&O(`qj_By9g<1YlA@Zpe4ICf8v+g;DKjCmCCCKSBOM zQu*;T`Zn5(C5$yLN73Wh6Swf@2{Mqion}iGJ^J}t0zbStKYb+-sB!hEUAnYMmcNgj zA(yIVCK0IxUEHxb0keGCQA(2f)`e*SDj1M;Flx40!?O%C-iByG`z*&_mF(|PMwR{Q z5jS_x&rx*$)4jkc)MD>U_a6M|`hQ@?Bx(%t_@?85{&HD!9AtpWJ8M$QZ3j42L z9PAQwOD%-LcK@9kaQBLn-{lkT<+wRJnZ48-%E~@Nmi7iOM1r&n{}%vH8@J}O&-sfw z{E4>b0USw!z}nb*JAy)LsxDLWo9jVyAYUS^GKtlRud=@t1RFHV*@=;IRZ4&G+H|6$ zpO)%mucFh^f%l&~xLXJ%?IY|}EO`~sTB3&Gyn9VR+G0v2<)4}Iy&5(UxblJ6x*-gNjN2|efBd!$R7$# z0l28&kdwQy_5l=0sT61XS~q1fosr|lGl}kXa5%taYs;fX((3q)aS7b%*|V_%`B~_T z=@Hz%O5?Nb1XD+73N!o2bJ*_v2Ub-9+et24D*T`QwrnCW#N$Mg9-P+&<=tG|QtKv? z4v@P&2FLx$$;mTi#kxjDt)Jq(Xxr!0k{FHqh{2Yb_juaSR8lx_^{uEu+TcEJs@ZdU z)?M|=$C|10If8TO`h&6{SE1YJo{5PGg70P-RDm-{cd$Mh;qj0xLLb=Di%C?r;AEJh zq$4NRcss?{_0S(!%%dP072<(n#CIZ232PtxgN^r(I%l$cJmf`R%-WEtPXSA^eTS!c zP43;&HZS^^z?Y90x>Lj?S`oJ3#>C4u?4(Fm!3WY!wPOsR+5cRFQ9|L%4PA} zBA_vN3ker*||Az!F_63u=jb?DCVE&F$V%E`AMf3m8lCVzV>axp}f(KNmDM zUq;g;G_SeMeWMAd!(~p?FDGTi)-Rd&%&6_s4z?OJkW@;9vm`Fk9(;Gzzu%ANORo(M z@Je?9ZtS%!$Gq=;Kf^CgPB(+)FRzKVl`j!b*y%LRcApvWyiW+U^N-)uqwv1%qIXaj zW0%g!EQ5R-GZQy4p&Ktvx^h3ru$enQqZW4*v$-XppHCw_J$Z zWM+~{2iMzWOQS=pBbklqvfMhsg3Xt9QB6ZR6;k`v_o|%h+?L(5p&I5Zv~Mmq2?Z+0 zK)(1Jt^cf^d39D;zuATvLKj~x`AslvabXT^@8--rDy)-h$j!BUS*sGaRe0M@qOg$1 zRZlY^XMXSfd**nCg8ag?uU;_CClim~uuJvYjkP8j%Z=+%57BGu>u=6I^#JIprOfmd zE%RNzTLgB`T2$7&IQ&rdsRp@QtCO(@2)+J%J$izXE%rAA$!GjVZeNBa$kQd#z_H*t5QK-z(~ zKumm0jy(#_ybSLz*@t933OnO-60s2v_rybRL16Q#I4^p>AMdT`xE_0`N;~PlsGluB zhe8jmnCCXhJ4ohw*ZK~kB;;!-*KWTnIeXe#Kgqd2nPu|}ErW3#(R5R#b{+o(53wCt zxHrKQK*2_3pB7Sc+rvfRfUAl26j+-RZW-8`_9quAUr2n31egrq|508hSiVl6_KZTR zCYLiWU!~}kQXJepg*mmcf4p2QH^}h*+yAc<%I5x$*{qEXEvtK#_T{ zpl6XOcQ*ay`0zvGsKWdoj&d-(|F#VLjBc6X7?$u_+UojjpYe97OwM_3og?X}-P$XB z7JCSb{Rhk;mGzeP!H1r-^lU<71!YfT0h<=v6Y(`8oTv@?Y}8IMdl+~Y272^(d7t;| zEL}_siSpG=C$p-&Prz^mSr6NB#2*=X1+A8&x#NKN;5KwyiJ=KD9P6 z8BrOU@Ns_Q{>O=tRIh`r6`{^J_0YWG>Up4%4C(ZcAp~4noL_isWaq{$6y&d~3nTsM z>I8VX(_Of7dwVSEOI{xD;?uIKfszqg)6Kzab1GK#dAZzu9TCMzlZ8 ziv_A=qm4EYwgNq}ok}sgey|XlOAaZ2jZFpYcJQRv5u$2jH^6IP_P2KDUJ-tzG~KLw zs#QYYIBkx^{7WT!q&eK08Gu*9_13eh)?LnYcjKI$Tup7;7krw($RB&FgeU~>nx&NH zvK~FBzf3S=V{W|tn@NWzJBLY!;dkyUYLQ5)b}~<024+3&@A_`d_x*Hqx^K-gHOlhn zzQS>*pP&_wC5!WmT#}ey-q8*d$vhtU`qF$Y@s?n&`Md33!H~7A?UA3wg@r-f_^+?s zyF%S`()*@gq!q=^&RMo7(PBv!E5GKd>8hQ7&ebEoFbfDiCsu7!oqFrR;e=ygTeD0D zz!-f)dzzD74S?sUH5iQJW?Gd`5Z<2F#PkTtO?e(UzMxy7PGE3zWdNT{^Y&cOQfIF(*#6WH>ElxteT-EmliR0hl8Zm<*2JVv zrv)ZE>V;Li-fn3H*}d}nu6X%vUU++|WsRECq(8;`#Sc?sW1+j9`(2Vm8{}B5fpI>kuw)|$2Q`QJ( z5^FCgM4$X5e}NwVFgY!)-du%{o0GHVT%Ob3p8N6%w}gLf>H7=BQokttnBmmD#;(U3zc)!BGBhi&31m2S@vjmzB?9+Axx~ z;y%Ld@;^4g%)6IK{B>6Bpt`+l!r+EsjGEq*m|*gSzeABSuP1w&!t!{nCMo6Y;j9uPV^V64A`wM7y*WH=xzm;35{eyBvg6;vU@QC66O$jo zWYtmt1}`aJbGv`hx~{vEdFLl>&)1EkkIjqKhnBso1lx0_0Vd*>&lk?f@B|U+^_2RP z^6rF>Gz8j;rK1|@;*C}%>3=VbtbA;@49>!OA>3Lmv}Cg`qadE@b;Z? zbZ{`?``38?utu?MHmJRSYnNRm!ShlO1#>IpmGoG9J7|vt>q^rE_P@&3&VJ z!T`+25c%ax0fnBKVZ&mCdP*NKy#fHIg(&z85n1olY;+Bh7;7*4@>NRV^xm`5X$6;Y`I(DAf{7}uADEYJ)`YJ~Mf<_b zZD+(P=#2v5`tOX-RC}J$it2eD#Z=nKE)3IRWu=A6&(5=R0Q7Oz8t*QLzRqd7$E6P% zQq8K}K1v_w_?U5(wprHdt*X4U7f<@!LW$*8sYr4XLDBPxYpdqjwg{EH6_;K)fD~*_ z9m7`}7jkFNS|~Q<1|?o$OKq#DZ{pFo71xRD(*RGW^W2?1;qkwL`Y(U=R625@T-&C-hMnA{di0xIyv$4t;ymP8 zT$_-w*T$6-RO#ot9=#0UReWSCH~7Y3yj?_^(_jiEIi!deY`~8bYv!T$U%XP+5o@=; zRoI>65NZs6^gqSDNrO(EXCa^?gXb$+}+8SKKI`H z{r*O-BS+?(nKf(H%(+5=X=rcsBGy%;a+SN~MswckSv>6*M-iIccu>{QsS(f70{FIs z&A@dc8nZ>l#cJ`t#rWQwwv+e&pTqV2vBk^-x;Se%ql_XL?#{~w6Igi>GX|{f&;p;^ z?vAfaJ}H9&RZFR!fS6p>bTU8VjzXEr%iF!idD&GLa3JOS)1mY>P+FyXvmU+h@K9Fn z8?I)Ob1bFQ!*)~=`@H~PtCQJm#g$cSTbBLk^0H#|Lu?U&&>K`XqqRWkjWH0h#A_$X zw-hXy_dmX*{e7blipDIXNlh=@j0#94AZMiCF+^?>$OEpS${1O=7!)0MjrZn9GukOT z8H?t-@r>?&!UxYHd8>opjbr~F9)`Sg18)CpWH17VcU&}%<8JJ)82Qs3o~i3Gxm^Ao z7xf>7ITgXDmxfREB|+VJ-RheHn;5(+aMTro=YV68ZF@7iS}ocu`kcpj_rT3396_KC zjhz6O(hLc28>iQ^WXc4p65%^Ntz2AsYdBGXhR*Ell120&QK7Bwu?)r5l^{fruLV25()E+#vT~>GFh*@qatYqW)O$a!kyQ@lH8&``gJ)AdBXTL&!cSo) zN}2<+D5Zm3HWyxhuOv{Zr%2lAdrez@jrq};Ashi^+mB!3MdBYXLlLjSy04j9N~Q~z zfg!1Rm`gb;m)wij(w$`mDT!;LZ7VYRq&U zfqll06J+{H8BqzE-8&XO6)c9v($nX%PF}F5sG@K%x)S*iHV=;F$MSEWJYx)}UKeJI zW10b>NuNcM=$VJcfb)|!z!M!E5bu(ws`IY%_x3ItQ7^($?yp-IYQ#Uqc23!Qk%#Mi zwey36RJ4C{A3D$c@qK0b zg6Osw4FUZ#pqXcW06+f=s8p@MWO2z&gxruUkH$~=6>Tc{%Ywxx-X(Jd?>kAe0bf{A z!;oR~wrlE=?Wg5t7shSemm)!QY<^fb{!YaUZj1K&EEbfh-$xzWqO^zGED@OTcU-Xj z>(0__W}}VR%kD1p7ZhILtz~piTbOrp0;&$Wd!U->$e!FLUG1XOZ!@hYMkjxru9gSF z%tR)?>L2_DAOC^sNcLyO%}=n;84Zgl}Fa!;AFw@f0|G*8E z1-21jM=tbxc=rr#e0O3k_szBMF3dQqZxbO`Yn<3(a=>{Wnvy?hX{_~3nbVA)%b#gf zQl?mx@o4zn_CtL8@YCbXeuK-f7MLhMrJWXcsZ6rAJiPZGKg030q$0qSnv(HAf!ELi z=$UegIzfwW{P-sx#p7lF{D80QJ<~41*xI!ihhj@Z0Ir^ ziPRft8pgH}A^c52B&D$PK9wD9UJ@2<*M{$1KUD?hQ6B|KBDi^1%Fp;9n6EHGs@w=% z!%B>JpDMFu>30akOl4DWxWJDaLffGQ2u(_UBV(NhaUKdtZRxx5IFX;p^zKx$b_oOW zI?D5cqeRGmzGq})Oq(vN_Gh_{USPPvOLn%4c#nmTb}J*_+r!C)`JVcaWnA=sPOd;= z;=1XlpfhFtcFs!X+4J06-b3Y0DFN8$>d$0O)$uYL^HeTVD!@Jn1^^K|@pOs-?`F~WAnit9-F~crX z^E)u3g+cQ|oBaXIec^F9SbUC0*99n*38UmR=$Bq3w-_b z^ve!@J4EREubSlzk0`RKPIa@A%!>cpbO0eCr8@0g>5spNEBp(o`%Cta39;NFUCP5RNWsVY3ET7E8w|kk6aeW(c)m)E=Uk%|!R{*#IRLxLtS;`aBEZ*}$MF@;9t!r1SBr zma#*Xub!Nn@Ma3fQ#6W8z*}>|j|r$5Ir{pJ&jNKm*6 zbCs+?x|mdll;ErN@)c1h-U`bj`Z6xYmc_keyc@{(#e`|BE&)Y}n|#weU*&(<>mN!+ z9#igxNFb~bs_v{}s#Yd!1sbR3wA$~Q0(E|gg~D<=y9s0U%Rel8G5m!rV(gfPmx$Dh z(X~kJ@5@+A%i>Lbpvg*AVgWmrO~&7y%IZ_vxGR-*cq~z1x_c9 z$v`{9SPbhxW^7^05GEbjcZU^!+*xlruWtQKpEQ|6q@Byq$BOr zr>p*1;U5aWfpJD;53@(G2ReT>IHB%$il&Y5{3sSF)KkRv?;u)F`dS)xSeh!ps08^) zn%AgqtGGMt&XfbLxU%z?j**G{z=l8Z7PDjZEFFKFFg3n{5Ss0>R-FcX4P=B;W;p?A$Bz|xbFo&X%!tL2se$nMh%)H?=el&_C;=bTi611p z)yVYXn!LY#L>FLM!wNwE<_Ltsc1WNdS8kwkqh}VvB-I7qDYPmCIhjfaCQ~*$g~{zf;^0=`_L&kTSy!HVZ!}MU2W>+DeF#)WFKm6lJk$ zpJYH=M=AKdcrM!)iz%XYp7B?4S$QTX<=aThTXk5vQprjJe|&u?JDEL#@#~#KQqqDO zxD8KdI{(o+2?@Ocoby))sXF?Bo6YED6j_3Q<~oHVg~wYpMaUBtrn8F#;jHy}Dc8-@ zn}}_TrlddkrtIciznS@A_h&gW`-g9_>~j$$q{VmW#uU88ZYHwjV3r+6rQ8U~^!9;4 zk^RId;^67epJdfe&VP7Q+tSnuLVkaFW#8sC^MfMlv}Xu6Z4UcbR1jzO;X@I_9K!@d zpypVF+KSKZY;E`b^;P~kZ}xQJn$M2vtF|zA{G-Cw2ZVa!(hG^X8MGfvD*NwWVWi<| z7u}s~i9Ufw|5JA&l7q@)SN-vpxi#(CI*t9J)40MP!RVIuhHj06gWvk-7~4OI{G&T~ zQc`YR#!D!_DT=K;s-U;{QgF`C&+qiVe?|=C(bN(Zn-vx3zxh;HLAvMxs;q3va@;E_ z3cLPW;%XG!)c0L|Wfc|Xk(Ru&Gc742bh2pn3U{d0kn)vuqz{*}DM3hhV2A`#7BUvi zu*55#5H?8$ljs$RL@g_9I~61ElTK3X5}<(M$;OTCiJZ4BwA=l~auba@a`W-I3TY5s z`sC^)q;LG#h?h)-x)B$_*}eo?CxvnjDnUiB->2=K96PRxcWjEvT`C|T3(DLR4=b6Z zBAh#WHBl^uJY7?U-Hk>=>PW-loN==>I7@P}H?ldTPkOpj!2Vbqzn{oT^&MxvppC2k zYzQQdXUf@d?rEUMu*2#>iNp=@4pF0{n9t@GCXiQERoxH6toM3&KDxuL{#qY3wlaaf z_FtvfDDzyN`A7C6qF>-!aXRR8a+_LC+Uy^64VTCi!$;1$<5>HIybY;5NP+xMhNZMkM|jm6A!iO&#FIe3$7P)c&z;SwL)Ul z0HVm?H89H-7c?9!0p<%{sP=H@&CQ_&)1ArxEASHeMr#eiH8)+&xMr-^juuY4*edU* zeG1B~Y0J6*Fz%YK{!i}*v!T!qW<53P!7iRczAnY5b=Z+PP0>#gH151(sTJJsBFQEZ z4QI$${JB;mR=I!Sv+efTNx%_uE_}Y>^ElG(&%={~>pUv5*6O*!Ov~>XVCe)Dd$)LL z?&99Qw0>}K5J2{-x2PEQlG%?B>NQ;Y`Gj}ppPWkucv^R?zo{Hu@E;+Wh zD$`xR_%o`9|2*A_@w~a*a>q%IBJ7~R8PW+a*&x)*@6t zOS0C?ZAx|ebwr6F8q$3Q@K!b4IT*nNX|SKInao}3_yWi5jkLg1P+ir|*|b97B|D{} zB6a~UFY8{L3aLCF_i+Yf+YNj0g}6C^y3Ief{IShY@pY=U_l$M|5@DzFj}J3p1OTz&HQbitLrMH{vA=YD@EpTRi#y z6+Dh_?}HTTUC%(R`_kJ(HYXbDTw)zyOLrjwo7RYZuLX zV6OGa(tDD#O+y@uJab$N0kOk_@UfJ3<`H{&_`fb21QB_rS z^i0-sc}6=d=kV1k`!zi|<90}IZ6c#ABMnA0%QszLEA!515)FT-A+RxT`}OPZpJ;J1 zC%#uL4UH!`u`5Ro$64{4v~JMUGp7 zTCW&lIxfak+g@Sg`Iht)i^Ey;Nc1*-0%Ep6-7I~LB0)R4oSwwIy7AMi%TncArYVTc zdk!q|ls7kD*nYF*tR(zt$bqNBM8q|(%87RAG%N(+7+Uc~ zYm?UCaQvgCk82G9>&^2bG5$OGaCXEq%`q?8XB-87yUwsrDdJq>+fj~NmwyJ%__{tE z?F$AQQE?J<5FKMp*;}2NljCT=e?i}Xk{tM%QJ*su3Cc-sGV`{T2lU6?<%n;jtd2@A zCZ)}RkN3Q*oU2`~uKsqYxQ72ytSUY2xHMgDGi~>{EeM>TP{N3Js4(3zHHGYs&P2K` zIouYcHknY41H&KF8-9$cb#aQW3yBgcD!#L0b_v@GGQnoC7PC2T-L$+qChN|u$yW%( zf~tQnfD`2>`DObNFi#mjzQ`_q@;=NU=7Q~2?@e`0b#+jM`NDkT3dp8}VTbtgGrimT zFz?cROw6HZuDzPFvM38(zKa_rZC4QpBvgH$TWDyoTpa!VCrLf2Wq!{ULtxV1C(}h= zlOJbK75RH7``Oq6OYeCo5+UK;GlbNd8h||f(Lo1-|MmNoF&w1?2f0*N)d4pJI{hm@ znAy@YGq0i&Q&T^xhKHz;dvJWY^PIx}k(vo4%;xc63F-o`^< zr<_2!O77YSL0YeS{br+$dnl<4jja)uPW#B>Pf*>`62cvgxbdd?^tRSqUMuhzdZc zJi8imw62=0LF=z0;3bPy@m4BpkL9v*`@iU-37|fgzqZQHtRs=(WFS5X{u0joEObub z`ZN2bdb?Pa+&^u%VAIl@Fpb`p)nUBZO3}+r!+)TGS%DN~4Dpl)>_*mbgU|_QBEW0o z(fQ6}-B)<6==(5r?3XrguYU;lU&&w`ug*k@u3r+c{A)%{RFnvIx{F3ni}=S#dX8aQ z6iRgYXJsx9_{b#66n)e1-zGDUvD`dKL>N#qUTpmKufDV+^<`aI(aj_EK(SSq+mf>O zzu1Ih#~AM_3N;D+e;>a`%IdJaEW&VZXUDCYj|DQ&p7YlJoH-A)Jm)yM0UYiFR!W&YIWje%wLZj z@=`tkk4}$zKqkwIM3Y(7_0ls$%hU6jlpt)pWriK< z?*A2_9^3E2x{TWp3CW!KczI1VIYMg#qe}M19F4hhs)$XLmr)3VtG!Kn0kI9AG}*1(OnL4Gh)p*5s%Oufir4c-Uso`GnCnfu8zWR(5{ zCyoxUUa(W*fwyP38$IRK99T0@-+iX4-ENGn$c(h*X=Lp?cC4Z(NZ5>RgknS?`Wjl| z5b`1HZtO?h11g@L)gpn_R~P*2TybW0e&02#DVHTWR6%j+xj~M1`t3z)VJn|svBl&z zchAMgjvW*W5ZGI_gj*RRBO}+#Orb8+wl+n^w;5^w@%!>+1o2;bH9oWv870lK%90VS z`5hJW=TW5g)d^4SIO*%=^K{hzYu3p7xWxHpy)2t?<*y;M$GA}e{Ygp9_Kz=-1992O zl1X~n@^^}zK`f&ztrCY|!5Km`{mTQ6?SM}Y3Q_1!6+Q7V8Y6tPK86ssM2)lb_+1S< z)O3TEi=+P+F{GzADDi?%FF1S+iP*cwu&IWyy@`W`l@*HVB|9ok*!P%|bJy)`KTaau zYKFHj)dOd62iyN<|2JDdvjtDjRO<@}!LR#1iL_eMoq=YtS$8&=tzOEx>49<6} zja5yJohIm$sloGvK9Qx#zQe6TbWWf1*#0_p?8U2GQrMK!?fjsExsL66GA3X z{gHh1?*#G!q0yCN{1|F}(l3X;@RY{X&ru~3@p0J*Y{)^xqvzFoBAeo7DJ7WnZ{ex% ztfUjU!2{^R;W)taK3_@I|I^@q&F%cx;MX63HZ?n-uiq5Jnqz}+1ZiN32E>oY3&@)j?!+GweAl(}HS zP2j(#@8sZXw@aavV?&zh8N^!c5_2ZoQ~9%56h_BsRm>%d5KVg9`qd+OhZZ)OkGwax zpk3hasg{}PwR>_gA7|5@}=vNJZ2Om#P_M#16EMu?HZa(-ZskJf% zPT^2lOZY781Uiq~^-gG!)~}doN&bvIerlT3UCh6lzFfvv){Q6&Y+-n~{!#Fyj2&7J z^mL+|feg>3ohvG@w_bvJdq32;T+~Ee`|lr<>wiD}zghr-8u^jph>p;Wqy5>YwaIB% z>|I7z6sI@lI8anv6nGOce*A7z0%0$4aAe>UvI*)$`e&;l8FD;AVO;oEXP~m6eJ82U z8=)L(e^OpUoacmY_l~|AZ;R~97AYi%oaUw6NhKPOPE+xP!9fk;%ebQsYQ)OhY!oZJ zIRTe_OAmw||Eq*})GU4aBwRYgfg3VG3!S|dq#z-!P%3zDc>kOwNdjL2ik==>WW{jh z%hJuOqQdE!4{n$BR2bO$eC_*0#a9BNESr$QO}gj&q>^?T z5mxL?FV+2@gW#x|75OoO)<56dWWxD_)Aj3Tp++15vgx*bwffis{tCG6)OZ2M#&<53 zt)FULwAT%@=^uE#^D>((i!6rO#wGuZQam?VxBi}z47KEVeN7-e4ABu#DdR{FopM7l+2Gia@&rQ#(>o zi(mM_hpvDdh0RDL4#JzdSQggGU{~H2Rx_ZEK7behm=h`6GcSzoGr9^%aqdNCsWX?? z+xEX{XPO^AENA~Jap-+%d?|q*d#oQorG z7pdUI+zSR~qUWMEjy$2GSCRKeHpo)qrnXfV>RYl_%;W3w$=7%mJQXB+Thaz8DYtNe(ig#*; z(bWcBe^5~)%Sxt#l+dA?`4f!HpTDQ{TGA@6<2%#=^8`TewOc!BtY=~Xza>rU#SVrO zN3;@*wetf884Kt)n(aL=b>E*%XF*=pmLGw$lOz9dX|K2xMrgE9h!hezlGv0~`3p*x zRIMAh&T$#JdoskdfgeqAjZP)~vlp$?d&MCI5!>QYYoy$3)m5geCW&h3z~k}aW)@Yf zha|7z%7Rbs2Ti@1g3!Crqfl0Ko{2prrFhR=1h)6(+iMVhXiGQBrhuZ|3B@*W0x2wK zUr@=u+4ms;;povWUVjmhm~bwmOHT9SUM4HrI&G>Y|Gc1KLSQ48STi3~6BmlT+1)rn z>oauqLd7}3(z-4;e#nwbZUYDCHm-|16GU4j_i_e~nb!^3kW!|7{w&|7DP$n0usyVQ zjGx}5Y%{d=KT5l=jvnvlRpZ0;X#SI0maBW)feDO2>Ibs>4VB*%e-BKiL~b*Jxb~+< z>vFeMHmy3k%-0CLL333Z*KA(0zB@R7^aVu%-nXHQLXeko`Yd z#|9Yo82CI4jBPt2R}u|>m~QqgLmG^^{4LboRYO`6))9^T6U{zAg4^zpq@=!4J7q|? zL6ut--Ojv4&e7nbl6<-F<2Iy+*sGU#$AxWH8K+$D= z=#67#0fFxRX_5OGCg#nxb#x|_K%n)NI0xGTzX%Bk0xyQ$t}wPD@vPN_SlhrDXytuI z1kDnQW9mA1+#=LaZdE{9M|baa0Y<)ZgqOglZ9ny4ZM$B+8Pu5sfTjr)<4} zWEdtV6sP2SyKP`z^Jubf@$l+ng$v_i#AOu-N58xsU{^1%ojQ`V8hD5I%3CCO&R0}6 zRv+5*DUM~5#d)sU_u>4Va%a5aYMffaW^kc3&?|`UH`Eh$B>pF1UdYM2&4yL-`#*C- zr4^{M>WVkv#Lf!-BypJdja<8jjHRsllpW(a8qf1-m3w;xK7(3o40vsI;z zyJ|Fh`7b68YHD(5IOiOJw!ey6S@qzZ3F?+p?-1|2)fAT&KYUN+7RBL4f`kqV_Gi6I zkG_i(=bSAj167(j$Eq9X>pzgXy4%|y7S`_N#Vjcf2O%wI>>>}9_b~G0U+qY00sv2X zhLHw}qiD`W0vnufd^^~$n)>a*{M~O;s(&jek0Ov^kgK_BHML+X0@c~UKMEJIOcHX$ zO|`VZLcoV*rhmjHI(O^WU6+(f`#^tSIPb=xeOGy4JGc+# zvkCD+ahp$n-}CyzHb=r_5MrBXn+%GHxl1E@S3;X*-9JHc~^b zTIy#eE@C}pYHdn|+R#&Y#Xido8(nxw)EGMU=&zP=3L+S=-LWklTaGx2PXuV?UA*8U zQt~eJdwSQ_5{EIz24Nej2=wcjgNyX>aV4Tx^u6gPWmI|YbP2HOxROW|s85|)IL{&!b#)v8pb zCHbcFon?mAqz`y4%t78F0TtVrdN5l*btj4L2chGB3-9e2+oqQpF+$~2EFtmFV*bB> z|3>(ozFAr<`g8jKozRSED*6_~#F!U3sMmEHFO&yd1m1QNYQ?aZqg5oyrf=a4X@_B1 z+GUdoIsyNRblrbl*#DuA<2~d6x~KqYv)Eyt z&3&u)G(HZkV9dq9;+_>v2}JpZ6o6=-u4hb@x|xX5Aq7QQffqvZSrNu{8XSlmECtKjlenDzv*AC75ZFqmw0HPmlpdcezjT z)6w6sJv~rVuJA-zUVYF^bpHLjP3GgmI9nP6^OkJ!5gYj{sJ{L(HY?DUX5j`VZG1!s z{9)??R?mSs+-OZk&CTVD8tdU<27Pb+FV?zofy1|7OHMc*I>y?a^YtN_rUwt8YjKzO zlFN~ikx9cR5v!6PFB)4hgUeP%;7$-|y0KcJEBM=uASeGp+(bej=X)`5+no~~fTRk%-rU=Ol`V1`h*7d2k8`OW*5ZZ7J@vE>e=sFI-&DDCj-1TEyR zXIOS1E%R6El>nyDeNSD-F&_l!BL@Wh0C-orP|q9PZu1l7DM3R27mww>u>~az!nuzH zSncxX-#TUsgK-hauAR`17c%KZ2FLLg2c$S$*JJ52BZHw8S;PH{R&u$`YQ7&^-^%hY_ETK*fRfaaE zh@4G(-^717rDr@M{z2?6Oi{Nr@UPCaea=zXi(SWurnc6waGuPOz)Y)?SYi}rFeIO& zAIPw$9d^7erg)dT6pKBSwX{K(r<&v@UKFY))M4VNinm9A)<1xhF^4*2A7cqqhz#~G z*Q8$8X8+^^i_!rQ1@WUdZk}_yX~h17dB;80%OvZ)T)gY1MDpx#;RZ7yWsd?Id&U+N zM5yjj&k4g|du?G`KilOICt>?24`D%!F(pXtJjYb+yt8MFNJ#|op7C5Nyu#U8={zC+ zi2?tD5vKgTl2cxlGh1BOk?2`mQkHuozG&jsK%CO}-qk=Pvrwj+tUGa>jnqTCnQuYj z$5-Yr1C+5Ld|~5EspD1kUtbecsiDtWcisO_I4K`xW}<1G*QKVaIw1-MjxVRpSm6v2 z^<=2ewrOM}=3J=!>!_Q|t*C9uepmcL5&xhIhuKqltG0Z*_WI*N5^YVc5(C;Hza}SXh(I8 z*W^ivvo7Fy)GXBgr=y3p-(zFHZJxLa859Yy(-ZH{`&6E;z^**lqadAPxIEAg4xXv` z`dl`P5dBCc-)SUy4aNj|ra}Hex(yoUk23=)M0jXD6-YP5eQ@0H0>se-b3Cd}Ryl4k z#MzkD!8M*fY>R8*IZ#7azVw`t-O-@&l-VtV5c+V7GIR$2NH8}ckxKpKZ5t@QaVs;U zM*pHZGfl?N9w+{a>61=<6(GsmRuQ_H2j5O-_oTP#5!wU1HS-^8X(1S0sJ5Y&jz1g} zcwAFD7uypIU>~bO5{faKmBx21$yQM^>Zcg$mY-a=bG37>*pyi2@X3|YP;$C_jcqI4 z>>xZR4OQ+H3!A(u2=RNm{eY1B1f$_*`}wE_C^HG7ce*^oycdhidZVT9*KhME{v%mo zktyQA#6FP%A_~(2&HbyA^Tvr-{T8o&SIiP~jIvP1I0`XEv^#{d@Kz%=rZ08z!h9?8 z=vlVgYHE}Olj{pQh%U$k)~>YBUl6CFqhlb#6K)|1^?{_s0H9j!!$%rj^Gu6+KL)*E8O+l(IY6jd5HVzcf=vq7RHZ*|L zRJRoX=22_N1&@j|P+>tt{)wi77^co9Hlq)17Dpuc5N^;2Yz!$}xX4HPaCH~GZw zkWY{IC*J{&w=Qb|P7;v=UX=%&D44TrU=|#fb8zG4!hg!2f|Gh}su-AKTY&T2+4KD| zz8_KGlx#&IN#4x*wIiMkcw3*nldT_`-SO)JGM?OXW&P&Xc~`;bx2IjVVw3 z-ev1RlmJF(fwx^hQ#veEP5SIg*2Eivfq`w$32B5oP>!|LRpua zeL;Us1Nomi8T{LSPCXs&F#4$|Xt)RBhA!GGq6z7B5EH{F!by;F)Yps8I$^9Om5SA; z^_<~Ovo6Gyjed>ZT{s7>F2*fd*lKsu4M$s;G^Z9eao`dV&Tf7z;&Mz`Xb$&hqC6yoIZ@$qPP|OA+9g{+Oy+X$(qm<-6eD??fDwj*tx4aUBi-aS4op; z*q?Z|8dzC(*ou0jqf6fUoOze8FK~KRxkCC+l+71a;zYN`ad6Dg`U&wCVS)#oI)3cZ zEi3iTHN9kw?D~aPTIVl)%I$^^4R5X;FtOo^8IBq@R&5y;r-}>ts9B)LoN82v!vvf4 z-iW^F7TH|T6W>iRLvh98q9||Dmz4CP?3Zb&vUVMprPl_4$@h&qoO3<@3CX!&5vf@VScBEdiwIffT*PdWR)XU9%HwV>c(fIl$ul zTiq~gr)a%>>W;;!kGK)P{Lj8^P@P4X#%WN~3F2)`Uac~oPqg#eoUV#ykKKJcdq-tj z&iIpD=ycm1v-%r;@u zXv(ixAS6@a`cr>FZ{p22MeTLg2vwvI4R}!8?U%KE|_gz&FroLx!C*FOZK|2yo zmNHv#=kKP=bX4un9^4nUt7i6?+!BMuu=V;j`3uvH_RcQ$pJNU()WoM>MV8D(fWeyv zLsf-9hC|`lkZQC^iuj*x0~Qt92CR=JcAQ1)+vyam)3w(3qN6yDYs-dLG?V3Js6o!g z*z#RB0wh9N;5`VUV${S| zLjrrhY&>6q*ah3g%X)D~Eb5+T4#MjwyA)+g?h(3(Pw_Uj0D&F0MgR}47dJw#5B2xk z4_Pt8aD%U63<5SZ?uezNSGNDJI+2QRg58eAC#J>t3fclJL85~S3hZbCF@c~TEUMv^y{;gTvUmDb&TDY@! z;BCK%wTR6j;Y#hYSrl2>3h)y9pY5M%(Cv>5T__AX>icT-STHL#Zv%g%q$Tsn$*dId z0ZPQVMlYHz*Q^hCafIL5N^qZ8$#=Yq4v0H!$^L!t{A5{+u+Qj0)>^JY+x)_NVK%l+H6*if;;RM6?|5Y=G2OM`Yp zE##4dLD&NBTk8ckHR3VWTpI<3%(ZcLDYy?b;t9Rj~L|0vYa2%Qh*wG0$%iP!ogZq@H@ijWo= z5<`OtSE&PRG-EL+(zVmzv{9iywV+^JCjX(6t7qsX{J6d;m7|;+d zy6aD~W}?8mL}p;UmaV|N)ajn~U%>e^`PlNXL+>|w|2>q*`6pVhcG_%+(WWB44ey~i zNS*4hsj5)GS?l{6C)QDkpcvp;86T$5CDZ{fEj z`Z!}r{!X+6=4W|p^des=mrv;`-}Y=*;t_{_awz}%eFVxfGC2vyrjvGa)XuZb4J)1# z-&igRS7CunT*eBg6rsKnRLv}~j^P9EqYl`+x5N%%+r$KP6s9@N4?(g~xx%)Ig4-EN zxBL{b63S4|JE-nHM(N$X`NY46@F{p5!&~oC_F*yv%q`wpi6~8N3<#$C5HpGeV4W~2=87MMxfP=8d0_ZG%g7B#lZ zYM;axKbj6)H*l~nfmYi@gaaLY2LL9~3NUfRCsTj;UCR_#;Nw>g!%(5ZAD~k<>(}ut zq}2D^SS#*n&!^tHi)_(EujP?nb~4BRD)I(rf+f8b#&hP^kAqb=EKmKc>-5-&Mmgbi zi^vLsU%Rr?DWV1l99U+9?1?~BmG0b>=1Gc$x^m(=jMgP_j!(bOwk#-;icAq{#cy7> z6gMSg3XnQ_J;Ezfc{Jr3ANOvo2^M2LdgblDDiUg)VG6M!zQlJ2;8uJLU9^LWUNIRN zR4+fix4R8e0++=HZR z9>+_dP?E*oqV{n!AdbBSvk)X2BHZoU*=&@OLxSH#G$=qCyxysYwk{!icNXkL{l@@bc+&I-@j%shY%!=UB#7j@5qEH6+z{OdZSou->teWA~Ej0MB1AF3cx*N6#7&AtG^^J zEg3#4y-*j2q~>BuAD=4Aoi;3zWw0V_>Y^l$^sObMjOnk2LEz2tnjzKlo= z`6o~SoDc4ObCJc(-2-mi$!!7m?Z{-M{dW)$K^KlPiGxN`q4lOx;|#&x63I^)J>bF} z;hbidw=&D*GP0XwBcltR%Sc87FS$*o#L&%L3vgF{=mc8+1aJTyssoIvo{E`+mxHoq zI3<1sOAH65y||ni;kS6)6kcQMQiPwB%FvQ}9p*N;058Od zR9_Wz@$HysDoBp55H?u=4McH6=zT6-$4H!q+LgybY<1@IBV!9~UZ+3xm+POO5xhq- z!3FDJ{|)vYDYH@ZanhGM{j0${go(p>va?vZVu5TJVA5mDAldeXfB(jX@C|#H5X;M; zhq3!(T0Exe{#RG_4<7-la#<`}{qHZGHRVQ1hzP$Fys7kAz*Q}1|Lz6Om&%cjA2Anb@)1GAb5JCE}-O0xI7-bju70i}Ld*=;qdr1>PTR`jWudZ_#j z^jRt(3ZI1y?=yvKW4Ha#_OG$Ob$vM2+%Esl8_e~XiBFNd;MLOclAu^ssIN3MC-B-g zmT}E%=vnV+e$%+~m-g06!tQF7h~s+Ay~NR$$%!4dGGpkB zX1+q!I(Z0*?ys;<0O5RFS8|E zLIm4y&-y9y4%uE0M=b7vydCklPus5mQ7pW!V}c<0BIr_PR7ofTvf zV8gnr(kNaQB{p$?r0973{8(*smM~ihP#cbpprt4c6okg;4LSbrUqn7HPtWiIyo})V zS$w4*>JKNQ;O-qIPka6Hu|yoCR&=d1|Hu-6F(WUtOAm{w!Z4T13XpDqMk@f_A0f7S zqSRuze)RcwIYrR7-z4EW$P-%>-!WU}#C3h|QFAKWd9qW1;p#y+UhbFHJv6?%`m0=< z#Jq_K$)LY)sv(rI9}xmB0=Ldx@O_D+nF3gqBxOPGjdHV}N0^T|lsV`9rv9Bkn6Wiq z%MZOaoeObFH5+Z8;gV4LEkQ}Krz^Z9kJ1?H~H!3!CC?x6`dRNIZ|I+oQzP=p@vVILP zOyFJiv~B6dM$X*b-8B`0KJ5f5acp#*b;IEcyN(>J1x*Eg*DaW^q!?Q2^qzbrTc}xa z|8Pvx_}~8+K|IX5XoE;JS~tP{-jBGB7;6gmI=yS{LI7gz-NI|pZ{@SH(=JG_MKZJ6H_j2np=2MO&Hnc}9&7DdTa&XoJ6IGr zq&VDnj|1!kXcO`u-iVz4=2`OHi;y}kN$+RTH%((uB-AuP1r{&ErzeI25jxZZX*kIb zvxJ#m;zvM~wg0*H1AQ^b1+D9Qhna>uACTl8srmn$=Ldpozlwq~nQdhUdlyLp^K@IZO88JUEK5S) z((HXd#^0|Q33w|IDp3hK8{o~@vV~9)Cj(`}K_aFAXf?=E+cUT8B{t+P)QMag*S<^S>W)Se-0xEk2}Xq@ z)An?~@C@j=WQpsz=zE1^N|{P#c#*Jf+erljDD>A6GNGO8SXBdb=y3=Vgvn*G11;#y zRJJnAMQxxU#5mX`W*n@O_aM^O2W8~T5OETl(3yo??6^T~{|(cT%V!KM-qK&WNi%L& z>ngKSRHz@KzNw4gPchm%d#f4>3kB-?4(jSWpWWqU-NMC&em3Ko(g%3oR|Y0j*g{D> zPJ|T!Fsg4W?B%9=L-w!y+oFu^M5h(|6_ztoYA034eEmwD_{Cz4n%`CLV!sfZ5}_e^ z$%xndNjPb9$o#el_AawSM|U$NBKqP#{;lzR3nKf!C_Y*z%}4548YFsFUjf_G^{b0F zuQ|y{+45n)^;68ctQ8KaXhjcB8R~Ez%`c)Iy0i*tmz*Oz3NLE>Q*Dn|8SQW$b)d`x z@d&}B_WIn18%#hT6<J`frV;Vw z9&)fWP_tknz`^?kUY~78$;ik^3;*F+y+(>!Jtw~6e*l78R%QZm*W%Ho3xkay`6(vj zX`wS1B}cRB>=)=1;S|mufit6i?UBYkFZvVWYg9$6*d1D>O$~DXAOxG1hF|8dubEOE zXb(@ld9BgOW^HESKd%L)q{8;!+T3++oUW$_UOhJC=2F1u zscqRj`=(WQySx!d6Rh}2u$v|`Q$5Ub1ztj?t5H^HA2B{iP9aSRicjjJMx-#5iY@#J zCv)iMp}Z(T+zs7vMWrO%p~~-5NL!*FZ%0IS0?*piZl7Y6nZ54nMW9Gk#?76w^J--J4zMy8T01G9JUZ1{F<2PLWL2TK{a@kJ(4j0FGmki(ZGU5 zF^PFOX({6!UL5_sC5^jt-FyKm5TQ@DBzW4aE`N?VL-YMQ#_V<*<~h^UM?fYyP3a-c z%y-C?LpS**1O5Z8oERleKv=~l%4~5{b+pkvVeZQ^bm?*L);Rw@a6%G=169tV|8SO7L_3+1{OCAD9k@yJ$8k=gWJ*}JCZ+XS zXP_xdYs|CgIG{pZ065Oo!FG#}v#Wi}y8MA=$;FO55>|Fj{yoB^GIe$@!zN%S8u1wu zf@=g&@`uCK`kjZ{&Pj6@qd<%=tRiF5YxIj zr9pBD>2L|@5RfiiM5KkKOOOUB=?0OdC8SH5rMp8~I;6W5grz&~;dk#n|FO@r=dj=T zX6BuD-ft!_#BlOG?9z8+Lfv9i`*x)5Uz!bSK*zy+txYakiC**7eP^cwQI=lxIlXXH zwar5tnii*S148fU>XD%s86IwDc=qi6B#T;KPn#&JIAY_!SeRE;2rKqH0MNN)9^z;) zv9!6qYTn2FXE#fT;h>4gy~wsK5~4}yYvr|_^oJ=6M*O994<3R#&9 zSQ4h^ymMPsh@|@^-d5#!ueB20Cyc>2en=EunZMnVh^K5Y$_e z$(3`vtW-oB-YvO1AtNh2sgaM^>Y6kK1qTGD=cOC}SaWXHzTVqRd;y@~q2aRf%)~mN zlI=dr^5)(b*>`Jq$XbEIm?4#m0Q>E7+>gpZb8E1sWwTe#GZ*|kR>PNMO%`-l`Cznp z2zE#*zyX!>A&+o6NMxO1E*OVIEIO;@WVCxnaQJC=1F?Q2xa9_=-gFW3Uj3gl$xkM* zdy?Uwym`;!U8a@kHr}U4eSsv;^YOypeth=FKWBDG6ii#;sd`OY%TH*n zjZgCTbD&K1K7E>9qwRlwOJ#~=T~JTiFhxZ}vr7w93=Z}DsRWC+YHg=ZWzY@UT~A2( z^SK%<2ev6Aj!#|~( zKUaDyCZTy`t4JqgvytUk0NLcwC1F4|*ScewoG2Cm>532=;~7EUcR|+rA45dX$c5$B z-hpJaIO#73?vv0z{x2RkK_NJoj6%Cd(=SC_`A!{qbZJYa{SLJIs*Dc2EbiX*+b0hXMGzF!bYUG-RT6c2*(DX4-|Bh8?6jRn8Zht!1h!n2X8E_>7IXC|$F zqquKbYf5EGE^GiUWn(_!T?~V&{{(DI_{*s3-vIX&7PDM$(!33VX<$ELbov+fdPp{^+t;ziSb2H9hK9vQ7GJ0LMC7^XVC4(j3z`AfqU_BcD)AE z&66B_G<1U2?7RV0ZK6*E-+ov9U0>grDt^8#WV3u(G<2qyq0?w`*UF_Q*eU^FYv2tg z*L>Q~C)=C(L`e|^rRoV@Jfjt@&loFIYnAx!jQ+TWA~e(GON+K$UrW&-YnH9nQzQvz zf2NKGRr@1pJoC34lEl1zQR*zX;y+qB3hcLmfZvvZQp)cK=Mq!4!*wcDJ(E_WaOMOW zx9`h&6$;`7w1-p!9`Gh0zfL1}`DiuqWi48W#?R(#fS^j;>gBUq1AtNqDfA6cmHY7I zl^ZN2U@=*zK!+#7F7H2F^)x(>SZylZH`tBl5Uh%2dUjKZ_!>aX_i|?g+I_Y|3PST& z7*IdteyXkkRqkHoY1@n*hE08^Xx{awSIO#bv6U+0qd2~eW)xUg@}kKvxs@=zIJibq%x z9wO|6m!Dpex{JI7>#>Jt!AtS3gV)fRu#9&`S|i_a?@j02rFC~-s&oa%lmRYMk({jU+CsxYnZ`WKc*9OHeL zK2720?LVV$sOPfK`I?-Nvc7pS zkOK?)5wAiO>dR#L!PDIy{mr%f3t926;KmS;7cUpSD5_uassq>e{WyY&c1!buM*Yp%q$lBYG#_B{#(#SW(UtBeG zKAP<#s=c(%hkqIy@Bb?JtR!|7UzRyjs%7K1!)=%GG^WK)&uyvJVze!Z+=gzfP|31F z!wT^`n1f%$=isZ%#)z~FYawphk50S*{rH)<7oXCWy-ntSeW%@tf#kdq0bJ@=5A;Mv zC!S6k@EqGfa8@;}R?ghXbADT)?_bG3ZLWk3d_JEZf{Xtu6AC(icOS%OITp&}eQ4BC z?ge|liX|)t7LE8Q0~7;wJ3Y`r?-}^7ssJmbog_v9#T(_bY>c$7jQ-c6)eKm6$YCl) z_~m3+q|eR+4Hv{tb`zqA;c2@10oJ-*;FBLX_ZTRSErHxp}z^Ft^m&ElG3D~dsx;=z6Lxmb_ zL+I1&bhA@b_hXV^_F*r9_UvMR@X9WdYHFF%;nNEF-c)%j52+I);EL}i9MehwkUW#8 zFzqUGn!qX5b6u1Im9P<8S^{o*@BE4?f1NDh-24M;MeTYcePhXb?jKkuMl`iZ?LJ%6C zPZRR+CX>9ByhCHuf~+;r3aBq=eeKBr1!lB7Bmr3 zBK(yk4t6HE>b&{{OsO$&934;}P|Y`eF1v99J5z>9sKAg_E0qY9Koj64KdY*8ok|wB znhpn8r9@bHMv~+1-z6-=7k^3=tfx!P%>}6J_$(4UK=kzVw%9LDAP3A92X%z9p1E!qK^>8Q2VR!BKNyG&|y9; zvFqi$Dbej>&m?Q?(fcK644f`4pp!urg5iulF6o2Aad zz7pqCg{k}sUYayMyPw~0stENDJPZvOi0SE5rrS)5$zye2F1?>Sf?+&vx?lS3XY!68 zRf?yFzfKkEaM^F4%I@sXw%u$;rR%LsZFg@ck6WG^8|}b2`1Q&S8`tjNGEL-b?o&Pd zbF;3mfBj4dwF2<$yDq!Ghl*NqM9v=pz_P?m@k|Nq&VLV+aG8&prPqEAQE6i)7NC*+3p4js~jhzD^ z$bX63QcSZmZcP;qRHIrzs?eiR$$YA+HaH@KBKu_Z!V5B4C&-1dHcS0;E=p*V47b?X zIr}hsY;mKvyonS+5f60kv=m?d z&ZIws7{CPO0Q@Zv)X6y`nhUMV=ua%cSEP)>z&xd}675zJcT~nUfT|XQ!DKfTRs~?K z($Ka(ja0X8_*r`o_TuE7J1*~3UpdS;t&a>cK{RRO!O%M(iFH}{_7GEbsuZZ>^U}HF zsQ2H)V!)HsvFP4b#MUXNtEw&XV@Rw#d8BW(eVg%rCKF0P}U6;~O-O z+}R;l<|1xM1f*CK03vvJ@;2zJOXh5)>BSPYkZo(d(!%x(tT;i{0q{6dNe_3&c6#;y z8YF3=KI5UMl>o#^o6`WL#J%3HkpGauV>n_n8u4wa;9X=S-5F7atLVpO8qGeFYCjwT z9E_pbSBv>rKY4NWCUwa{D!)2422ZG`|C zx&WueLx4<1L9J{qz}b8{mS380TLjX*C0fzilzJ=E>9(}AMHv9_EPwi4xSX+ma)R4A zhBq1i&^~ji6IBAKy4g1n7?Q(0)3jU=zHJs#|v=ZF4 z)+opRB=l|eUXww9GGyWnEVam50t__4KhjVXoFoA2lq14v`jQheGu!j^3D5f+0l2I$ z2HVH~{C-MP`t{Heu4)#-OZFp41r*xG&C1FeSKA7Q?=>y)5iT{GA|$CWf__3faDrc5 zbtoIBBSuJK$~)H%|E-@VY=y#q6QHA7V4?;{BIfB#8+C9U0(dLPXA2Pu{`QP9{WT2@ z4Pn@MokTJ2GcL{Ww_>9wRHk&|?B94Ga~V5!xag=hxVX4l2%&U!0^x%yIO<(VLIq9_Ng-|Li8S~C6K}D|}1;8<$2whs|ww$EYGESJmhVV#W zXJ=;-LifWj$$PhQB_?9vSc9@NtTecB`-?1-9MrYY+FY2%Fds1&GH*zEzB1&pR2?8G zJ-*X!&P##!_0GS4W!yy$_;zJoS9xe)c!CV^6hl1yEB^q^icXrY@i#QF*nYzQqXp zqTLI~1T~}63`!fuz54P6+jsfLDxK?VB+3^lw1Ax1-vVTtd0!Y9LQ@oQ{y4Arvk^4uY1vT$83+Ekbm@yD#tMOnk$@-gTLsggEF#_o6vVD!zY}iBm3_0D`I1|B4c~7mY4vwRL9e~% zH+N+{*p$5N&3H4W;|wDQpqJZyF;8?El=Apr42*yPrM@-iG&A1O^70 zg*3Mt^SW2>H3^}X`hL2(KbC~NAnkBjIxE|2BMOBYYEI?U)q=q|m_c^|V!-2x;9~K; zx}-+D6pQN~%iWmdrdQFT<;F*<4=~fpuT9UO$WQGtf$^5+E_;a zuLTgMp({ps$bo~X@i1?~`=wWHXI#WoJ71g@j5NbZTb~=UlBVF_0^LC$6ku+Nf*B?Y z3BaB6;rg_Am^??~<)ItGSQmP_-er4lfYpG&?ih%$TfPHc@|g9U9xwP+V)1Ti*S)`9B`dEJn|GTh6cd{&i!mT#-5c*bO)n=6&>>&qh z=ixhhX$(3nfqQRjEtI1kL>rt|<~+(6lo^ruil~-4zpyA9J@0W;dXABOuh+ttZg_WU zh=k=}^*4juDBCEbq5Vv-rL~1Q!Y-z7EzA%t&~szrW0u0*-|s|-2Ki)U7`_pSn@cVw zFn;K*!5~M@w(TgxlpJWD4-Ot#e_E(J*?9B^n2d1y#R?Y=m6O6 z^7Z=UU#)!r#R&lgkkrK=ro}HFmP~<+tmoHUrk5cDg|?CYA*S$F%_n-541sEwk^99T zC)?c3RS$DMhF3*)+62)61B-VqUM{&R5>?#{)L^9C^C_{>TY8nK#M^jt-#rP;o{^j8H z*=@h^Jecyj_@`n}WjXv>Ddpu`v9k!ejpsh1tqQ)rG7s{ZqZCUeI$e&z!7;lF)vg9) z1aivO&L$^%qHZFUin4Zcue+bEjoIjM_C1%IEdIwj7DpZAF5FMBs3z{R3XrMVN_V&>XMgjN@{$JXNYJM%_SEili?qzvA*X34wugg* zBX2gV9MkVvx!3e?7X4t<0rNGRj+xMd-O%((rmM1kj@xVExO-PdkFy*iqX708a9NTC z3`70v6_)(lx0aN6m{Lz;cw|2k<#*m!fMfEL?t``hH~^Jaf0q=XNRtY@OapGB&P$<> z--1ApcYIh;)X%Hz*`Xw}`aBk#)6c-dZAWO%sOZ*sQ*C@bmiM$>^Cr8b5A4b{Cvm=8EDQ|uOkwt{vQPoEypPI@N?y++{(aO0!= zt^j3f)uzb__>koF-JVyziNn7-oVJT)RdE%WB>6Xi{urFke&Y&|4cAg2m_c;q7dPIW zdn}wWL=%QOzCQhAU+cRU#sh`M3!z09BJR$@qCdS7NE|#%s07YKO=S-sMHL^x-!N?Z z7X2i&nB36{cSR#oy9h_Bk-OjijVfU(qh|DZn{&1s2d>YCWcNMeFW?dP^O`=mF%W7f zv8i{}G8Fw&GRV_(8c_pzobppuyW^fQZT-99eoq!?BO5Dgql}3Us`6dhj^!c*66m}k z_YAF3@SM?n6>3rvYKwV;Drz?T@GjeV%=&8JtuThS9ts5l9vN(B?+|a-& z-OxwWN2}VrR){giat|=qmb0FM$v3|DziL9-QUp%g0aN@6&=Z&Ub35s`GqGf=Py2_5 z#e_(m$e-dYgQDOWbL|(YfIK1&67#lMr247RF8oiC#b-YzZf*g7eTsv+Py5?`w#)Hn z+QKw{^~()Qci3MazO2+8UwH3Q#5A6IZ^Eu9n$?nL>7sTgz{a@Mm3v`tOIytFint%0 zD3`0>10W49@p38GeE=Ie{;+ouk|;kbPU>io`u^c>z_@Nv!79_&r(pw-FO#HH3jVuf zm7|%AR_ljG`<8#W(0rb1M;zlr60>U1JD#6L)fod ze29HCHIImwlPYqA5Hl!|?tp3K)zuSV8;eGrRKoQ!w@%vVOxmXcf37ws?Us9PRs2eT z90T$B9mn9u8J8QmoN*C|6L`zZkUga<3*?T z8AQTI$Y(>pb&oP1)}ISlmmTG{q|zMvMP^O{;(pv^sS${(=~17ZSV^yGdw0(?q7F{T z4>|Ip3Xj=HpWG=!+qVDERguRqK%%jNe!4+7FOP5PwK=x};ldE7Qg|AUJ|3R>R5i?n z*MV>ho?>0AEk&%LJb*k^hkDy6 zHvAt@VH3SgOJCxnQmcfNuzb?0m^)FS(wT+dx6<0yC-?>j`P*`2piLh}7D77;lAa(% zlj@Y1JuoKA@7TeO4VJ2~b`)LIC4Ux#=gqkAy*2_f3hu+|nWm;qL2v+26LrSC6=e@1 zKKEl)XE>?v^mwSw*6+>;S^Dkf8%oEgxqwNuii(#tY8%&t7YCCb8YSz1?hY1`E_VKV z{#)aj90q29e;ipTRPT{I)%|7m$Xx(x3Sg|LVXK{<>+fi#Tv(8$z;20lTigEPoWh89 ztMzLR|J^B)6JY2AZ?SzlcR42NNd7-STrgcSKUTH5c)xQ>yHM!Z8iI;qp=W6LQv?G8 zqoAp*nX|}jQfyQbxoLqG(7_k8=)oBSkZ_(E(@r!68g3&5>AKM}*vO@7KcXaO$7R`q z<;fP=4KKvZTkm@F(%o`5(V}6Og7mqQ*4a1r4~08D(Nuznsv4Q_yjMjv8Ove5kher@ z^?}uIdc5SmeWbC_ndpvBB`uWCUR_}e^X&Fd0IKhY81hgr z_nU9zQS%cbV+|~V<@=>attq$&F|veEMho_T7>y*S8j4%*6fMtIY6!-qPbp=%QKuP1 z=`P8#3MHSd4{6rub9VrNg9GxgaY-!d7d0QX(Xs>B(wc+&zzS1|T`exIC4&<1xH@{|JZ6VnYHSPUKs$@wj5x8ir>7anD z;(_Q85HT&b0T>o%t7X5+DSOAmh>3;ed~kSp$z7O4f95U+F8=DuFo@s=6EG4i?-_q5 zStz%gfe>dtR`GCKt+uaD?g!|8YX=tM+Pu&HK%}+8Gio1q{HAt@24E^7geB};t_9sxm8&q zp$O}n8`_i^-j^3USLLx>AMU?2uF$hVNML8isWcB4{ack!1T?WBb}zmbz`IsNnr_CJ z(bGN@bJMC%P_<1QmJY@FOQG)hpJ=#L!)rQcze_Pe=&!#o`iqQ0VxMq!Gg)WkB5v-? zg6|u8Q2oijSFymg*+T`3U)G$7m#SB5*1BzMY;;Q18iwbxto)m6<+1BKU#eHRb2T(! zA}*@+TL~}OB_a^dGBkUiTM+$e}@wKZNKB+&cWldKc%>WCkh-n98N7 zm;DGn?lu>_=d{0M`S&z>Y~dS}ZpV@_&m>NrmVD>!rs0b>knw3ys*s(Jkb@8$&P)Wf8il7o7k?h2zN9p$8JJdv3$ z&m;~6Z~Z+sucRT-FnJkL%>tANyob6axBD?NoGP3wIHB#Yky8tJ7)9+!Sdb( z9SK>7Zo=AywtifyJvEhuK-QZ+iEi<@ldl!-4g&6*mXJSV8}cG!L*vkuX6IX`!Hmm; z%oXlPNHARZr}1IrlSMyi*hBKSZ>mpiZlB0NQ-G#ddY|U)r&+$C+RnH^X~TS{p#m^y6xMODU;s`GF`#lsRGN1AB=*#&rB^&L#hR zU-6y`ezJ|1lem-Ap3s=peI6-)u#U68T%NY<4}@|bQ_v^WY>E$~PT053nZSuaBhr|8 z;1(t$UNmnGORO(;q_X~3pC#;Fg>A}u<5T#*@~pn3Ra#VYGQM6+M zmEN)VO(-`bUzvDxH?QrW4F$pO=A07&6+prxACPa^S(fgF99T|u z4uV(Ln-*xgY5!a>sia}^rT;VT;eoN!@X5hy48M$(6Z;}v$nA>cQE&?~Xs)M63dg3W zr#lZno+~8F%#4ep&P+`7vt}Tgoz0cMGx+XI+D9J#v~0J|{Oqe=Auyo`v-V-S#3Sd1 zm}El=;2qKvxef0+AFHEipZAyVZ@R6I=tH_<;{FrmXJ6T9+AF4rTW#;lKGX+ZJXD*V zoMUGCyf`}oik?wM!hStskAGDfh+WXx)+T+UxTxLnz;Dm2{j@LMJ)#j{J&7zKlweNVUx4cOyr*F$EN-6eH{mEWp;nWwrRH##sOK3bm$f} zAFMT!kL&rnkq2E^-}g8LsKJAURr}~Yypq+8SE5g$w-U@4Aq3)Pt+d5qk*~2i3i~)X zx^aP|3zdgn#$**CGEwbKVxK5So7q-wc89WcL5Ov*Po=_!OGw61im~!mDtEJYo(!axcga{;~$P|>(f!US}|Q8wA*h1H*b zr6`}Y8~HjiQQ0j+ihdy z%=Z!K&OMUa{I4<95o~S!-gLd&n^L9)>O^1E_-! zmDc=_iPs6_$tnNq#^3&KdW+IvC`|^61C8$*B45Q5=1cpYZ!SZ$nB2&mM(7}Bxb`9s zq>Ktj`KAngY5ub7s)H3IZS*@E5)U{3Ifr(H_^?e1d1t;&17YudK>fsG{*oj{%wKb8 zam@*Z8&VaP-2k;%8~J4JD+`-iG9w(7fpVGYWONUecg~Sli1xmV{hX7{nke4QEl1h| zh6*S}^P9~kc~JZN1Tu7s(L|wwvKg=qL0>^h=oZnPz1`w}aIJg6K67L$?heGndNtThDhLl3_(lQYxEj0A6n7tVt!{TaBCs!0H*l}x1QcpSx2I@Nmp(VT?`B9JvGoEd$KqBsw?P%cwA^m->5ZZFeo6gfAxj) zGq41xK;tR|Do_?CeUs?$E(Z&QT`V98#?`5)#M5|d%V z?Ojw9`cKV)4suEn1hn%XQ-_aHQitiBEFVIT%&Kb1!PIdAE1$G(*u$EJC##jB3M^97 zxgDlDI##KSZ_2R@E9Y#x;9mlt4yXD|`AL@tff$I64%K9k_jPB|NZjC_YURwZrGu5e zi&OuA)(fkYjh-53o$#va#g^ad*5osBMy}$8#@{D|mQ>ANZfE*`cUv{&oSTik`}iAJ ztVm^$PVdcqGw_Xnj9%bMTF7{jQ>|bUn{>3`u38}m;##|2B@#1cKSQ@xFDT)}JapPY zzMe@!_as>r`x%eYsqAkdCNOkLfa|08Qttugm^L<#&qYs%v)BL0c$)?U<{f8s#nd&5 z8UFNO-OrA~@^e9q^D~LGI%OJOcKOewCl2&P%jEl=;g$7ewgR!#P=TpW_4E@~9Ip!$ zpYdlhW}gkUsKKUMw@^wE6}qL5GnK$;Q|f}4FOo%);N4YNa$3QhgRjHF!bbj9a>apK zHzgC8{?h$Xz`j&eiys^C<#(p@cY)T(#^y?aE@ya0y9%?NiczCq8xf`Udo__g<_Set~(YQ)jHcjcj*RmgV z2+X%FhLorq+2-ySjml`kvlr3Y$3pv{2Wq2D^xq{vaY?B&Rl<0 zgFxgAvbS)Q*k?C#bUIte%qxhu_To6sbiReY~=X7WI zA3o3?sKo!IwX;K-yu9T&EXyk2rU|37_MKZhH+{M!nb0b*7bn4eBOfu(k&dJenji1m zPWl5U-rp2H<&v1DcwdK!iK(T~d|oQV%$&c}UsAhE{pZ4<$N6cv&fo0?v!mocU%ulw z7LB@|?2C_@@NuAFT`YZ1)pKAHec>BFoL^I|y;+md+I;Y7ZX)NUwcCtfUfy|?=2O`7 zf-6_#@vkBh3wwY(P6MrKfe!c9XlH(yE{K_!#@;kE>N(wcy7$2Z&pmT;b2TJAnXFCZ z<*nR`r=034vfL3NAvX^g=-0GZptxVT_;gei?ia|l){~Pb$k1qoxv5&coy{Lz*LKVG zJ4tLD{K)Z$(-Lz2iS$=(fef3UkB;>;JRVsFXnqYRXn?t04KLLrGv9f6?oq z9(pA~Gz{sLWN`xB604VP8kVQT>uDB%k|xc%Zfl|1%By?~q8K|}UlK|6e%XTFH~I{Q zya5flLgopKdHqvCh{_i&%f=aaSxFs6Xq~*g5BMD~znOkmKUGl{YLIeyt0UcS7&K=E z@ib72M;7CL*2>MzWde7gRdHs5vg9;(FhO(yorxIb^aP6;09-{5x-B zPeEW9`4}enE*P$xfHBCCX~Qi4{`;L0LK`U}tM+uSf}>WOGZk<~{aF`g&md~COcGP= zYTwb8VQLASCzxO^9^3;rgt=WTllL6yJR!;WsNj%bI(%`!Gf)!? zZFXeHz7Ww=+*He9Qoj&QG`?Ataq8@XcT{x11it#Kqeb+^PH--Mf6WUr&k(lm4)JUg z^@726h}4uaYuWw9IIvncN(Z5*xvXK6@WQ4q37S=$D|oBzf+bdfS>XR1x`LiE_(y^? ziN=S?IEs=*V&R_gzu+_ETdgf2XqTgAwsdH`C>`%1*F_~gm;;{pJe<`<=VBo;`^MYY z5ZxyQLw8arEvqJpyZG&A&I?r^b!DLS`b&y6%iLkO#LxYHXRYj&W136KK*LeQ33mkV zE%HtPdtU+JJ%{j^m${t@1la_qznVNyb-7#L+xh-2J^i8lw5EidcwIfQpup_lDKlSb zL&N9z?J@CGj|Lwx6OFONvh&G~j;z0vKm>ZNlib)&N}i}378OR%Zwm#=j7qJy&2I|Q z2XE_uFmWE>^Zed-<4-^)igMA(<8E{fom7H%210B$|2BNcW_@~ryX)BT@r4y=tWtg9 zcVWM99`LxNt~G5n-xivc0|Vk5<-R;Ngl9~)X|?&Myt_b8I;(yO0rM9xs`O|@+;drN@3I5=?>$qC;I*!V|>;bz6=_ z{N7A1c4ekV3V^;e|6IiE0HK}-_M=LZ7K(#@HHQ+7uF5lXKcV{id_-HY;0Nk*&HYP~ zv=>XptGw8$l-_|devB3A0vWNwre~M=bcfSuU@kRM=6>_)(n;#WGI%yCJ=&~Z&X4LR z+VwOpKJPVksB*hLTM5dXNU4!-xq+Tr^E&e}t(k(4nHH7z4;%g|s z%TVnc5c{S-XmMh9T8RGp%$!U?L7}h5d%^+(qt%R2Tz*&uNx=p9119pv8*K77gB;7cJcVC*&XDV;8k=}5z>$frBFb6tl;rhoT$ zl0_|A0-#g+vAx$aL{0!KLP{li z-pAS&$-KVtHF<%-%B^qWTd~0$R!tFdZJd)YC-TW3Pa+2ESejdCGGUpd~4PxkLYlY6=PP1f6Q9 zp1fN5qBni}TlKzyDs{L{MkNdBR1sH^!iDlX8_V4XXh--7I($)=%{p-5xx7F)DB9L zg*t-PQ54Y*pZbeYbr0@EyeQfW7`iPh_9?RQp5d_^H&y@h?&lmNUvs6L{V3g-_&P1U z@(uFh{*9bYAhOkg#l%-r$LeeHB*KRN5ysdNkCpdT%B#PT?QsY&;FaW`EAt-!T}Zj!yB6vf;n>aB4cO1Lop}xY^MydR ze+_J;3OaM_uWvPy;;DOjx;k`ut_XXt5=@(qy)BB34J=(w^J> zvdOfdt~{!V?Xps(d>f&1 z0uo<7Ysb|TRg7|j^F_)>KF<#YX;!WuX-||Q<3Yu{3uGW^0Gf-XqI;?{w2=%^GTbH# zz6A|KR&yaZrT}&yvL>>i;)8ySF>7q@TKmI}{fZi-31SCt*`y>O5WAG-l17dZ4A{R! zH(a%77K=?!H9VgGs#@%^ed#vN|0Cb3QLtw$sd2z1v@klV-Ker_?NTY4hkLWi4`f~^ z9~&;d}R&0Q>{h?J?7KZbKbwm|5}f!`j{vPfre2u?)9hur@6uFj0u)_l7;)3)$BJK z64jkzBy4hgYIccml?kK*5<(N!hJ}*`HRa$ue`=UOm-?y?_r>&!*E1J$gWvihEJjDP zmw2V-fi+oHfpVaTgDeL9>kaOF}m79oB^A^cf|-{>I# zgU!8eK8x?9ED7L4RQk@?xw%`{ygkoX%ydLw0y8iy7MDt2Mkd$U&t1Hi54HOTcusq2 z57R@@%raVa{)y_ukGU2S^d#w*YM#2&4}v!466&g|zmc86>y+7+VSs0B9hvg7j+lM7 zAM{S3w3aC}=4a6Lt(xzmb?t2PjYlgT8D+aD-?M#6qjqlRQq93k43`n~XzFDJl|fHQ z5jKfJ(*jq|Cn1mC;2R6cDfe^7?SUo34?j4tFX4i|Vc4&6ZgHhQ8GAmjPTxR5;-B0n z3p)>Ae?5GDU(S&ude>l_P-rd7&>-@fr$z#ByVmiMWw^k{9ZDLt7K*4DD6{CD(a=MS z{PsW)Z?<;UmpzeHC1@4rV6}i!vwCbUc=>*=#ImTWpfDv^C%fW;94#@NeKfjaa>aI$Y7 z2JfF1gj!PbKWM4N2UT&3eP&Y9xM9eIpU+gSiYLJXlRb)<jgRnzJOU%UhziaHXNCmR{ z@?Xi~T(;%AI3_;pq048Z^09wFpyH|9f8&g5ndTXz9!wGvdszVEK?B0ZKJ~ik|1o(t zYOyJv@;%wBL1{sgoOy#9#s0ahEVH?r+a9x>FpoZKU3V`Nm)Y0g9H_XZ zWyi!)b0^xd6YdU6ci#QlWU2bVw{QNXas-*&$_m5Y*$fYzX@R%6psdD5ojN?42{(`M zr^8{?o_>+()bll*mdH6zkNL(DEp!>yLhm*?p3Lf<5i?(dZ+;&}05rS32t@0YupPiY zW)p}KskSCd<1${+0;YzU{|lp)=PT6z2_*%Zv}v|IwgCF7JwQ#=^POzS^UtJxu1!2c z3Fx=!@~MVq=Yd)%XJ!3Cy&9N3#B1c{`em7YEFiSmay=h9Z9BiEQR=GIHPD)&Fp5@3WxGT&5(SVYYHWy4XZSzrizN znAqeJw&;^Q^0HYyuTz?KJ>8ffB>YA%*`Ntq&CK$;Po&Eiqw%t&_%E;yCzLkM7 zdMiF2o_<$5ND$Azh z86*oW=pb6L+CfFQib2fxC7R>>J=ZbeE1$kK5sYA2b-4&C2bIADI$3}9 zfyLpa*o~Pku`*y2(PxhKdnm_t_m?e+8s+NGR^`d5^(pT!zmr!sA||7JsL`5!V2PpB;UohzCUHXFDgXN&gd>h^W1-|0HA5JTmd(VLrfsy(mVBDtj`E#G$7n+>2d zBHpu55ECC>+3OK5Yk%`wLju6h?ex!ITD_wd@L^kg)%iR1RSm4#hS~I8RnTq6(3{vp z!FMEto@k)V_rDyQ``4+vy~&eCWr*(4dNm+lyh4I~5n-KD<$3QckQHObJSp`wU)J!V zP)sGjN+Bm-ePsL9ANDPuNy>lr!D<~gKiP+#Vx$Gsa0J3dQU2skwp5A>*sNu{EP)zw z-jAiit#7|EW-C}HNn-v!k=WVwAl>14^ODy9z zd3*Sv&3G+$v<_#j#y6376@$~o=gX$sujFHw87yMQrWjBfa5|KLK>9jiO9XH!euBP@ zyM|Dm8%(rEa|lUR2(^6b-v#nz$relUNG-m5VLAVK$)j9$NT?N0#{G$4JwZ`atD^VC z++Uj!)Z)DX3E+E=SCCBnu**hjjP`$QF}VMWfadS#gDHb!Vq_;@`b>>D`_c{ zy50yPn8@ZnJ-JM(SQ{rLsmJs?A^LR-=pOURM!VpQq9^cBNAG=Yos$5P)tx1xa~q*8 zg%Ize)61OVJx;)Rw(l=yhix?NqHcJ2NjW;8yW9E|3}CxSc1JQ$!$9$4k-BiunyUXM zUbg$2f%^lL@EUT#TrRYthw?AGrcWS3NYHv{w&`L7#Ah$B%pynDORxDLBQyVMPRD13 zr3Bj1)%n)JFTk(v8^@9O_&HYh-c^v#W}#+O6im34($~)t1QHcqA8xgy`C8l*LY8?} z2$IoWb=`ZvkzL!(&W<+sbftW30;}G9_5Cf%a0)>;hLu>3^5x28m5Z)DlEV;1I!gO#pLw@aq%lMJrs&c}-)4>Gm z`A=RJjjts20wffdcANY#Fps}Hxm^vWtJTjHX^|9HXX}{UA&PHS(D{tsJ=0~kmAiCj z9yR7uh|nqMGzaLr)BP>+9Y`~5fzPD$%Yf9v-{`Rw^}tkwpHnI)w^@XS>XqTcYO+Lf z&YuQgoiL_O)}}!A5VqQ3`J_sR-X}I{M4+8HL$IT0Wd}!3I7z}cyOixGJCpPEqK!MC zbUf-U@n#D=&T?{cYr$W?)5;nEM0zsgS1~5HqEZ)xrfsx2kx7T;(f@wdjNMZQ6~@uZ zhN?(Li;=6YxAs9XsFP_z*0iX#zc(Sj*9qQvF4frgi;j+NU>r7xMqd2Deoi;t`|`wI zecqyx!h>1S0oeW&eW`})0QWRr#BmiyjS3oItDdQ5a6>BA_HeW?QC_be?JzLq*wKZ5 z1uL`vypq{f3f4XI^Gy{fL^yXI&rqfvzKp!~?CYfs1fTUgNM`qU$KNi8I&9=PI1TWC z$JJS|ti15Ev$*)E-u?AEXrnnavkt${)7|yGyqtngT1?vW``XZUIqq+I9D6d3w?Y0-P|rj zCw6idmOCbm(R+^7%AL}wzRg6x3sj7 zq_u#%IXc_C?>#j5CU8K)9@@NBH+K}?yG108mybn+Qe`jiJBYlb0;X?CxItg({hA>y zXe%_pV9<^ZkOj4J%=1MECu|RQe1wc|0|@#(+>9Nz^?%u0?cAQ^66k(_0PE$o^Mt@z=s(R9>oBR~8#uF7aqVK@1=M^7>q(R$mF(|)Zaer3S; z`o!+}U93Xmt@{t(k@q9|caUt+1IJ}>mO7tl?l1%jF|w%-Dy)9ei@b~1MUuEnknu9O zZd@Z+RB-IC-2jHO^<|o&9xCbu0#Q0Jj8pjw9twKRTV^cQ-e%{Qv2c5g>Y;Egmva59 z9WmxybWcJV66Hu4a^*Zv@Q9zZ+YmVeiH@ ziGs4&si_T^v=l#HCEYM!dt(%A+*0wyc!&Ab|DnSQ^6J|9fs+*fr^wDZFV$Z*5tqxv z#7*zk^uLAbhxUVIQVx!DuVHYFHwGY!yglrG@8p%^P&oq5n7hs(N=Q*X$(*!U65*q@ zlLdjrlbX)l<$PA-?JeO^oG}MAeZw_sdb+g(uyUOyqu|~MkGf{0ntpk>M5h){HwgmX z))wJ}?!LS>*DHmwnnf=`(GOMiRsF_ejGBI=y3ik}Jp?6_R&SFOlAD_+c|rCGJ}-~g z{C)~H1MGqy`t?ihrp$~jBQeBC;dRW`{&pSTp3_2d_jhn@*kcp4PMd|00fhu|9C~_T z6|=s&`s51_FYT(ud`3wwP}{h}{}tZEUk2op9#OT>(#)*5{?pfyp`gvD>WR*40cq!xG4YCU~ZX%YgU?$mVFAuv44J@7~x-)LWJ2k z*IvAGc7xu9vc~qOlAWD2%-UEYqdUoxfFE`VL0w#G5&;;b2bpLMMaVJdg-C3xl*gPj z+4N^49O={aJD1!rE&;33YG&n9SLO0w+K7@#Nrx`?ucTGRQ?IMYi5j%*`+*8ti$O1JwfzZi^l&&o2pa^;I zdj&NKSIzrry#7HZGGu>FE8~Cd1F%aj&D0i9wU6M8ZsXmXovHxJbMW!x&=;Hc{SLs~ z+9ZGyDo8XH3p5=sdwRLt>Ovkp$Q)hkZ9d{n`Yxxh*XY)lLIS7p zrxml;F$_hu6BG`w1x|4;|3CQT6qsfc;C^p$PcU8or@22AG{ciPl?7-m2p3 z@j~09{IJ+(k>*0-x&wAuu{e|18SQ)bijY+``=*6d7r|8{<)Y?p1VG|nlU8#}RId8s zS(Lv0tbs-qH4oUCyuP5IbO%Sr{g2DT0H1aZatBlySH(ypqhXI?a+s*$F*2L}xqAMv z3r>6o*05xF)w<;F9$eR=H=U9M>h)K3r}e+FqB@|HSGH_MOkC4>&>i(4r(jW^XPh^F(F7`mx7cOPtXV9hp$!E8k~={K4^nh`JikGF-bqR?T9f5P!yih; zM81Q(Uukn~9niBRuHff^K_(~Hx(Y>f@ysvm-Khr;8cExZ+BT0S$DxA0f*09h-QF-w zY!uuLBcdz>HPH#0J8h5CkG6ya;MQr$l=wkg60RNA7}@tjBTOxCSb2L&yxLa&c#9Cg zy{gH~{OaGe%8qkwN%e}g?z}&!hDl!jkVbkGuMcWNygU0WRLS;5qERu!@8}K4WY1?Z zT8un;{#sVC_d1w0wgq0`aHA*J{eC%;BO@a@6lJ4`SrRePEMEjo^`&ty&)o?*6+l6>KBut#!wVkayJ~inDph2 z71f&>u{k$()H)*P1Zf;(iP45ez zDbpw}hF_rr@`kWtHi`kkg{`!*q`~iP+YblUL7W{vIqIvY40>&j+bz@yjJ4WiqI09_ zk|L8(@uc0!JDzvR9AqUVl4yUGQ_?|OK=j5@XLm{sw)s@h%H~u!wSdfUm$(!s_T{T= zSt%z{>~N}Vc^oq|G)74&0_tRGDN3ACOsU$8pw6J3#p-EQBPEK`=<<}~%Y!!arTpr> zBPR4UPHc@vEvs*4`DM4QtdEX7QWIb|4^6fzFbvBFV@T?!3Y-OhMZ_MW%YJv+Is@Vb zXZjF}xpU8((hT0mr;J1{*^+9`^K@o<`lfx5{?!6&FwDICR9{E%q9d)hp1sz!kb76= z(@sJ(!2>dVTZud0T|cUh8EBGY9E(5}pY^H|jynE$yYko`Jy8y2xl^D<+@&yiTZe$~ z>NE!-A0E{QSh)*Fi?9_4-i6 z$8wYZ0W^WseO)?WqGs&xAD&hfG6M}YjM$5Z7H`nXF%sZfam~uxQsAu7I2@2~=9sLO zAQ|Y_Ke#9EPV0S=LHTdeySo8j%#z)i<{zdM-@9&Gv)_)XXG`qI(Qmt(^2Z}k7h1X` z45l*E5zd_eQ5<{Zno1%+;*LJ#@#)gl1bvH0Hk^wACjaZ+fBgPZQ2+(P*R;$+;TLUk z;e*Hoyp)rEpjLabe;t0og!weR{}QwmlLW#H1!j9QT#@i*{086GSU31JYhr)X|oluc>9Db3cRO1v){~X%6M|OhN8IjI-KQVlAPagjcc&+ ziL8cZ3pftTG|| z7#O3wYNXoR)g>&0MQ@-o0sJwRBW16=)&rx!+hBBSC+csMOA6->$Zv=qh-OazIa@y( zTBwFpe$l)mpCRNZdvF7xi(6=qZo+`~G#V&vp8a`z(|hE=y?maO95}XGdx|-^Yuh?(+0g1@f53; zM97sIT{Oc($3CXu;ijGBQ+@C`p?VhVQ$*4ddI9Pn&#DJ>L}B?JZ7wYMn*vxu4I?Px zSe%ZIs9SWeQ=4h~g^Z=1*?N`92(%~ffBkVrhkR0$TGu-a`V+TaZQ=Lb+|u04(r6ba5Q=u=7*yW?To&#RnY|HfseOU=Ovrjr7o zcZ;@4KvHoWMmB>;9846jev38+tg>S?fJJQb>ud}_B!RyJ;aX+ zNkZQA3i3}GuV)nyO1iX-OVWzpR0l*R_%~R=tOBw+n5H6PQo&Mc-O$&jHp)_uw6e)a znc?aEaN_^)YfEXgaYuDP;}eVQ*c*Q;FO&NDoW$GeZ?2#i8JdnFYT8!X{fj=twxpN@ zMNGM}6_v}ECFDyo_#*%^y6lPSeQO-JEPO6k_m?u!9< z*6Qg;(&a^ILgFp4Y%~QJbnTYOzcYfq@F)(#uCOO5P$cI&Q&al_UBJb6)cM#K1RoH@ z4Cuq1;Q8%Md`F0Tyhg%iQK~#h|35E);np%qr)WSgI`$>PiLjr(0CXPKjk04Iq@KA7 zrb-+&gO=|at+hDIsIqm+ZC-2J6869c$A}iIoaQsA#Mf4mbS!A2?PC~{VheXdJ=z^f zL1k7Fy!3B+q~0)(bL$=E1AGC?T1oE8M>9T^U0`u8TCV&I7HAACb+Y&Y`I0~3pDy;d zgx3#UOvG+h|3*S!Jq<3Ht6vU0L8w^Nww zTOd8a9w@m#Q|6g~ILNe&iW*YdFT1OnILkQr@%xZz0;GUbJW$DcSxIsD#&x5pp`h8# z)lGux?))~3S>7Y|3wpUSEwGF|`rdR3*NpS4af2F6MXARP>Tw3e1H|RNhDxYhc8vw( zscezm_uAKwZ)j4EP8c~(fP=G?a+JjFmozshzW z6ek*9A!47x9d+`<11hjo9bfyjU|i*dDv@rxU~757VjaOmqI53Gj!%2_7fP$uM7=`l zBv2eD;?ewi4W@SNYG&U~XgiXBB$`>+6coxbXq?)I6-9weM|#m;{1yqCN;i0RZYOdx zA@2$J(qy-DaKWwmR&l3^KM#VQ7BetV&^u(dvAF!~rMNMGfq(FMqvF$0h?*Ax7d$PjgCD%Jq*#btx8hQWBZ0$ z)m?hPQSsouqEtKk`LgrOP&BPMn6pZN2UaAB*T5H3RIX()sm1>oYH=-+QN`?8bYme4 za#Hnj(XmXjWBS0V$)8Ot>W^^ZUm*qHzXvYfV^A7y?TJuQAhM(Qr6^IBLA|)J7tvNm zEW4nZ-fST2#m#IoKuHP-E9WvuFXr2~KRjX%ADgz5 z3cqhc5A5mI!PE0})mKjAPGgIvuQ}aDOazFzXy~7>%j9em;KwN#nqsPO_qe-!ZT|8i zt-w(qfvI5(7n>s^9VB#PD-05vwQIk+jM{opSHIkLitm1msiz9r^R9rtf=}w|^XR0+ z7sX{0Z9D>uJ_;J9OEEHCITRGWj($DeIi*vNzYOj zezrSzTBZNANFBCfcnLzjSB#vi&Wh`%FIF0SY1Pk4Ekujisw-ocWo6d+OI1y`WY_(XLgb;i2X=h z+u}d1nGYiFqG2)h$$DcgiZZVEy0)MT5j~qeeS9|KH!5~3!UJ0s_m=sQG^mtCWF`pl1P@!K^ zd$G<4S~85(1WAX68ZOz@$%)wK&#RkC_rT11sQ}#vJtSbI*+(2TMoWhpIIjS2d$z=# zKRW{N-`Rx4$|h?PpJ1S%bT-(p|7&u#qy{v4bF$&+Z;1$>T?%mZih*@5a z&FV&Q&4?!c$<^6eCp3v`v_P5iQ<(-W9o^^ssj`_m%W1myItNEoiJTl9jO&9<+;PKU zQe8sY?u>m9gP8Jj)mJtp)g$|ZEtzTptaSX3%f-cQ0&ZVBTrzCZK1Roki}nvOxSgE* zi9zlCMcGv9<@N5JOUc;Bc_c7u>e{k;OxkZir-;1pGB2omZ-co7Knf9)u<5Sa34XB* zqLVNAuE!5~_Qv5QC-%ML0E=kC(Y?EhtGHgdPqKVASR6MWH}%^wHq@#x zjQbTy9J9qjZQUrSf+{17y7^gA-A#e57@i4=Sv<0vQ^d&QQ%CQ^cF5p57Y|BLQV>=M zfhwSVpRSH?wa)%&$YYzd!Q$HnIj`?4R5JK&*sviWFW~kVO^Isie_gq>i^x)-dvei& zl~)GF4f+42BBv3gE@&+@AKmLpx8}b3yak}8Ma2S$9mnNY@PL~7V^UIvWLJO3@dtHh zS@PlSVnezFIuo_~)d6VnqD?z_$Dh4}JyKIv9Jp0;?geL%F|>v)b4G?f1T5M-+bX(% zWFtCP`y7_YOIH$!z8F5lRyLa5dXBs0@oN54odtfn=Mn$K&S*~YDcp(?^`8FnFA{D! zjgDKIdujv>vLJL)-ps;6ByeKD-;t5N1Op#rQPK9|EhOONo%$P+=>OQms$KkVi(!`B zp`Wn0yeF-v?K+y#i$9p}%~a9w+Af8ioY*mIRl|i6uyh7e`UHLd4#%wX8?BmIli~|} zW&SHKUUqgn;XurEl7g8ypSXyTWFFKE?<-={q2wP+t)5+deTd-x&Q8mU)}JPW@mX3m zri7S=@9nD?P)P@D1NLD9yI!S=5Z^Om*Mj)f^FP(Q=|bdn0OEBL6Ox3>JCCcH%~qE{ zjQ#5}`ruJ%LOIiy`yK$4q`EHzy;dd=lY1%B$>&O)4sA%-+}(d1$wWx8XyQ$_TQ^UI z_Whz1Fdw)eeHO5i`alFANiEbQjNnkusD9*3Zv#oQk0QTcz&u!diEeG#+(segMbo}> z-dlKTB$dH@fSQn6P}9E2hkpqd=Z&c1z2v37eQRexT#*vCYtF8LfE<#2)SU<0H+K;ppD%wc@nM(#BXoiY=k_IC_;K|cJ`BC8aNU`?N`659{NeZlzVcfT>+Pt? zKR0tVu)7IF({oc-LYIhOzseu~pE*mP&)Z)tzVkmnWq_ifd}`Yr>idsu>}(Kr3_sDJ zX|4uhj^{P7mI}DOzIHCLp*Rjd&o})&P7U!P9QJ7ug-wLnBA{AG1I@pYKMzt4FCQPo z^*^7x1c36H7V}B?ON1#VHZ`gAQ%u40rX0dyFCu0xd1kPm6G*FQOk4|S!f+8XhHxe& zS)vW_z=dQp!=F(3d06XpKuPhXlZK&Jce(|Te~Gv5DMMFv6kt!JDxL`pmw^UK>#NH7 z!~LK_R$L5LRBRS?JQG{VQgwLW!eWnvrSF95>IRS#BES5nCT@22LJ0L4;z`6n-~Hu& zAb32j78miP#lC$sKnRNh&qUfY^Jz^qtMY*}L~ zd|9sH(x@nAS|(w@>?)GDd~-No-&d~J%x*rGD<7u#8kfTJfWzy0(Um=k75gK~tL)Ls z?P8ESGkPV+bo^_eFJB?a{|71|$geT>!670V?T+PP^@R3N;x~^SPXyO^@As(&>_`0_ zKlN5qKO9{;|B30{EG!F>Ae zW+oOhadr-D0ZKqXyKtR6etI_oI-J0HV7o?oQYFNcX2rolu25iXUC08==TlCP*xOyw+&;I&5LcF zR=me1Ti5m`(G`>S6dmWq#pNbjO+Mb!YP)*V!oQ-q6+NZYCl%|6yTN9i7wa%0qy;6@ zg#13Q4-ujAef%aK5SrDV;A~BAx;+wDu`Yr=& z{40FP?@bI1|GBv##Lc;19L^I8x*Uj=Xq2&X5Wqn&MIYD&T#v$ZY#Q^bH+I~pNjjm3 zti)gK%FYxvVaE%U`|gk1eP^dg2}0qQz0T3!g%N!VKxD)5jslqBPK;aKJcu877YM&Z z?Kt`sGmB3n;M3Q0sxYKGrb$yIc^VYtD(gdvGMME+PYWNOmIasiF>VSgf+`AJ~ohW$fdKuil3bP6=Q_NfW5^YzDP=8AdrtQe8QFm0k8f zw7Ch-i)?-Wz$SR>`D$C}ORGqMa*xgR@w#QLM3I=BgU3DCg?f#FjI4V!y6~7y5D#)& z4ss6fwn2p@PeXxmhjiw#?4&Eoz|>@GF(W3ey*V4M9aLVYdIlZMLH^g(C>uB9aIS1T z;C0OI$o1r~o)8y_shMKHvMWWBZ&u}v3&`-&Q2je@eF@GNF6|YK@cj?mzG0!IEXkB@ zNT!VPao!78-2Z;W#|BI>6v7^N2Xx|k0OA=ebTKvuip<4c^mjul0l!}!Cou z&ZHlxklJ7iS<3;oa8-O{_GLD`2n^K)<1@i6v_%i= z`!N|t-|!s9?^!EsDW@3v5FDg z6@X13SE6m3KMzrdEWm^(eVfY*nGAjX*#!V`=u~ia16GH(l+$c_rodnL%J85mrjTsG z9k44;6zsVb`865oZ?fS!UB8ffhv2q5AI#WqKIq zq^{psTjS%$XuBVd9bh*TRrWWqD{mNz3PJ0P8{B3BFgP3&i;J7^AZTdiGEKH_ndC{a zN@xv9pBlzSNcCd7O&Vil8$!vSJ(ZY4sHe(wG)+31sli;-5r8QY1V-^m_WF^e7w?UA zDy2Fb1}Qh=Og;)N3XRs|@_yf!s+IK!(Kf4&W-{66N{dNGICyxySia8|Htv6I*B>%H z9Gh^YBB_vG6~^AE3~D(bue3*%A4I!38M zJ4MLZ^TDF4o0|F^;>mHNtF{MQq#PsN1qL-$cIJC*@q?(znt=4t{pyy>4uBQS8K zmJoQH5IJ=`YARvF_Y&_VV0K#-ny(+8km$O;8^1Q@?B944Qce%#zfR{mUSNPOT&G{_ z_P-%W6Fq_^?ko^Q{NVU=I95T0pvZ>cDu(7)`0MAuX1v8ovSjot--;@WV-eX5Sxa*l zpxK4YO}}6geP6V)j~2j^t|9M1$g%V%q2I;l7!z)i#!@Fp`u-|v`*Oio}KC- zpzqd6g3{SekO&yUK89hVU&HL29a(d~*B7m2b4Jhvs%9L_P1+h&EU7R69gPPlOI|#h zadPGd1jG-fce@ApAT1b5O&zfP@3eKz%5@w#AQk=tkI9-wj@zB=OfQkHg~ zY^{b0D?P`lSuK0D9)@*CW<0XhX-i)Y5EPL&rn4tF^jI&+Yef~VV z1^#Nm=xd4;pRRD&soC|aI#+mjI(_vx9@i4Jfv)vlOz+#V9*AV%_3YL8RO@=3_Tr8x zW^Nb-H|^2%-@?d)_i!is%k0!_x+Os&lpD?x` z96b>wlBbShmJ*DW^_+vgg`>=}U)%KF_yXVA*^}yLtE(;%1AaC$%oI0ZI;~S)R>o58VkK`sJP5RO5_y6{Xu`1I zRtbi0v4-7UdlNAM{5|Cl0|4zr!e>_aNLVWL4vyhlNY1ERZXWV1LX{mL2stnga}Unu zdx!Ns3b=y_f?El^>psofeg|XNz!$@hdpXkQqk`vZUN?8J|4CI3(GV|L>qtE71NUu< z-S8l!6rnPiW2@|Ak4j68;TlPHS1T1PHOLWISz+H zS~`e4)xn>M1NT{I+v}ufd!F=i? z=4~(PZ7*7*(zkx)h0nScL=g}%d_N(8IQ2Xx^*jJHdjH{Pv%XM5+RdeYD~iMNw^wDw ziqB6R$W8<_?GO;eexJI^7}@iXyl#OQ_J$D$h1Qg6@2vHNMny&fX-5Nn<*Ye{s2vsC zYjk7c6M0)XpF2r`qqch+r`<2Jn}8x1j^9_20}rW(3oFWAPG| z$H@2{a(fAc?S<&>)Wv-;Ur5=RMMzvh+2Yk!YYr#i9>ocp>|cni zQ#WX%(~7s$ZjL52r^}{S`^$O#caY@-69t1F4gJ`G_F1AT)i>*gP8>_l-~W*ilWbwX z{-<~Ka5^R+jU=MVC^6sdS$Urm}76vTZv>lj}w}Y}@WA7j@l=#Od_cnn5Rl zU!Q62eCi(yyx(eSPA|EiN%aovx8{8GnSb0q2npGn^{3w`;Tgd7Nb~u7doInE#utBO zb=<}wvwwd%TY1>$y>4MyS5GeJ;NiLaR24|_OVG}4BqG{ZbWXKQV>EeeI?}bgQV{sj z9JpUzvV7d?A=Bo)@nMhfmQZdhAzqE_>gu#`@8v$5rh2~r_$=TVs#JnW2$$8{H@zOw z0DcdNMg&!E90yQBWVFq{J%31!*7zGE<^lo080J7+jALS?{I}B*=>17I{1_pp zeyx4iUBPHg-j!Fqk1gxi&NJ|7z;6~{GE05)SFX#!RPC1IC*tP<&b8J3b;R!|nC&Cq zNCC1T4vmMjkx!QD{(m)CU&CYaH0K;1Edz!lJ)!_$qyXuF&+lK7M?P+vVvZW(XOnnj zwr_5BWAR>MW#3Sx-#;mJYJ&66#37=Vea=PQTf3AL^j&;I`AL?s(sam6JM;GPJP^4`Xz}BAwIDc{5#s}*= z-qSA6QTV}EmqZ`Uup{o;pu|_D75w7%8&?Jl=K#K&9-`v;ow^Z7uKt7P@fRVviHdbk zbL=+xibviu2Z{GGIIa9XK+KIW=M6aw*8JHT@^r;f>@8fMRt+?Mz9pYkugP$tPz7A% z(6`BJB#VyrL;b^DbDdmR?&FwQl0hH$=T5ki-bD7#{<34Fz{RY|*OJ_~Rq0g?y`|PS zcKZ%bG%~-qWj$aoGst-rJq&c%jgYodm-{>7W!?-c!p_vE_8WYJNv(B7nST0)vK^%g z|KnIq%&y8+NO5#3K50RNF%Ah8wZu#i3`_d3u1F#W>D&prrC&(`qE0(!C^MP9X9 z;#d0RYNfGlHJ;^^S~^0)?TNi&?F|F^VC0tw0`s-A!<1D?$)pm<5IjEZeRs82N$M+# z4a-A=Vqxug-nJ;b99dLUxflzJy?okZVV7z2w-}!+eQeWIzkW)XNIgJpDOYlJM<%wV zyv_it0*dswq_=Mcc&$b!W!rK4#_rnYQfEuV z=jEA}K?eld|8|W#i<_8Sdb5@*k@hZdyEW2>oCUA%dXJcHwI!rEul7V%vSPYlen+LlNI}Cwq&D?e+zxFdv7T2GWFwb z_99S8*yWt1YZ(qO5UmIyeQ5c*C1h?X2P|{-+H9n{2BCDMsnp~t&*ikpGFdpju6R<_ zpr$$k9rT=zHRU zIg@6cdZ(aUm!!z&V8`Wce=oqWwPQwf5e;8*UcR%rbuE>Ye;YsboO;+@WV!gjeVG3(m;>2F-oO(YSx$a;)mgnP=HKoiq?G5_ZW&0g z;23td4sbg-^Ku-%Og*m-9XZXrHkj?1nLFqMwsl=ky$$|RA$Yc5v5_apXUN8$yxw56 z-=}a5mrFjEavE#NiQJGR^Mb&BIV4X|`|@Nk`7cYdj3lSZSkq`7r;kQGkq|F9IJn9p ztoJHmV7EQ$N}-tD*9Qg`_T^0$KzO+28xFuX%08YVj?YyY+Uq_(+mys>aGi){Nk74% zuk)$&Z)%?57br+1S2Oo}4>$aj|YRX)rCWK0+pr9>v|G zb=6_ab0xB2Q7&$+L8*Z9X@58%0_^y_U2xO3&`<+UOM#Y)}+^S4O>XWEA7Mre|8?4x|$Y@_n%L1;k)|H^siSa|8Pn625SqcgpgZI&7PA3tu z?FPcEbS)`Uc_p?2Kx1+BmPV3e4bu!wj-(50q@`tTJ*B9JhuFN#`ygajAce?i>d}zK zI$!d2D;xjY-Sw8zqLQOcPEr)A7+B;iZ^vge#bie#ot{Wx=gC*Svpv#ViCh4Z*jW-W z)0}Z@mN?UT+-K5lVHVCwVml#7WyK`|1Fz@6z*|+*(z+(Nx39iqNxb(YsJHp$>a@0y zClDu+Vt-{|w=})P!9%N_^qK`;+^?d-nTrJ$1_nBpJD{PZ_pNp!|6Sexc>x?9(r$S) zSy`tx^+@DB{%UKNR|y-ToM&vJPtVjzb^~qCaJSjKz@6O{qTVUHl<6#754Jf=>H?Y*|ObhjXic|75A#f1$Q`U;m$3B-< zY51U}^0<-}P~gM&ux+qRNEpY01(((0IbsuWMfz{iia|_Sxjs3#e)&Wy!-u0xJENNP-$uvHKdD8?G=EO8h?>}w9!Y-N zALXAYIyTP=^6H?-r@A^uiHf3}YyuelFn4CkdbcY-h%M)&k*y_=UVV?8;{0mT!ui^K zXRwoXe&Hu%@N=)b*e+P8#2_hG(Fpz?-=3#hgjV$dj_# zPmxJ%Qx^lp!vhlsor3Yz&L5~6;ZbpMCR6$L76}GbBz>`eP!vZrQ(>NOzjb;msGXDl zy+k>l;#usMZ5=UWzY_A{wjO%gz+Gpv#wA*p%Ui2mGUR3u#3ja$_8z~1CvUv>=NO4>wg-mMfLO03ePH3&Zec;pE&XDi?opvRRVjSZwzG zOH{(b$e7}5=R5Ez^QpDcbNic&C74$4?%e4b8k@Xqx#h6mC>vkYxVGf3e-3NB-k)YG z!4Iq*6!@6yPHv%ioNs6Mi{XaaZazS?&~kF*+h^arH7s<@o8Th7;6621#3F*zk_b~)sv ztS`B3I7COh10D*%co%G>XI99l^_Q!_Nx_ZP)0cWjA-UNB5iSubKQ}#iU?&RN>UjAfB~*`lFnAmCJ_Rsd#g5F1n^p@)xno0FK*EGKLHUZK0jn>dU%=C1dqC7f$dX}Of z1iRbpZ>)M=@=Z>s-i`VBN_r~#n@8Kndc|stUuOpicK*vC?8eWL9OjB%k!SEas6A7X z*hK77q}z*BoTLm4BqLtE$#AoSDhA*JRKGp>;?`}mPHgnf<>VRl!Tsh29;;rXOghn5 z#)H)dL;SAeUnknpNX9H>re@Czl+*t<6tt8wVgTM|v>Jj=JCQmL4rfatAt*-jccRw| zj-LyZ(ok$SE8jCYCgxt#-PU`lz^-im9XhoPd-p^_L@+6P@Ko8|II^uEdlQ{=I2CMd z{aJ_N++V*PNg)xl127E!V594DWt;J_RsQ87;7g?-r9@9itE;a5xtY!sbar*R6Pwqs6A%;g&UbuBQk2hSmB(-L?mJp7yw z{IzpFTYiZ6ZhCU}PBxlWR}UfWlWj*PMSpp@(s}jp*3i^`c&pTp#O>YP-|jPi+hk#k zbSuUMVF6sCvPCIvDJ-~*C=eG|nLm$+K0mP2wa$wM%6k|%n2v>z0hmAE2tP2;e&*l4 z5pr5jebaf{rEI3ClV){%Q~D>K8C&9hb7_QcX)Ej&=78ys;U_nj-h$hq>(^lNN7{AE zj@g0&Mod7WS=2m7fymbOKhfI_T%p^I7_9GGngnydtx3nm72hBg8a+_)C9!PFkVOhC zkY+dc8lztu_}s#`KR*fDG_3wKz4yI8tlz50K%%@)cw6w@H3rY897}gX%ORZg;iHa? z4eOG}J`1ycOGAHKs-w{TK~1E|_<1R-q=Yq2NjS3MftK`-FJFwux-ip|TJDrR5v9n2 zIu&;}9_t$wR$bp}+ZKruFWBkFUv3kl(P5=#69o>v(f;djDT`pIZ0nnEf7T|gqv_F@ zDg%DgRH;^g`}r0R|2r2K-nN@H)EbxPa$%o9T@@x+m>9bAOAT#ovoMZ)J6P2_e}({} zZjIaFzQor`oA&n>D){HW$`5?!b&M3o8vKBa>Qh{q2d>+CnsIq~CJJH4tp!Bz>L&#< ztE&Y_0J_!+RS>BABEa8|h&*f;No$wcK-*enngd-?J*2a+YAyvNoz7_@5@?J`#YpvDl*<(Z`rAh$>!N;y2lFI@E@&Uf#*#}gogU+_j63(sw`#%`aTWw zHkmh{U8KFcoQ(V&?n_92Vsy}J3CxTZg`4pP?|Hh3#g;5IyMU~ffdPS{q9V8B*6S0H z($48`(=H=GC17T^bR{QQn)@7m6~fUF5g|Q`*{6_fHj*AL`g8*;A|f(+$Ry*UoV9Ugizacy1;>xN zGHnx?fgL|KcDnhG3oql?@}Zwf>RrWhjc|FYmKZB`<%!3;^{x%8MRei^t_Oam!a7WT zYY+R_rij}$WbYiuRp-op>wh|_Y4E3~2mX4=lZ}Y$nf@;n+U*aInmL(Fp!R{j8_l3z za%6go^0)jCsUND8zJD0X>kE;{dhw3BAgclc3rMWlst2J;0|o0BbW9?Vv@CIMzp=k@ zh@AC8mNR5WZqLEOAQa3AT#(FiB^l&d4RBhYy8U2x)X4GuM`Hk?OG zY%Z)tO8PfL9PKKq2XXJxo55-WvCNVE ztj~I^GlHxV@9#HHWNm>JwpLo$8*1al)FA~1=Fck;f8{pu5Zt{z(_K3J`Wl#9;C|}% z-gwWdYWR*v4c7eUsdCf3HXjc65AjB)DpW@>{tG9=x&FXMl^VszWT;SX8CR9kp!y?Y zANHp|W6Z(&`G{!5$;pXjc}>yyt{teir<9c;|73iP0^3kpSgZ9n*E_0F)K3(mo1UH) z74;2dFxEi*Q$|4{Oe-M(5%c9~O4!?1?IQGs#8NB;G?Zq396d~xPn1{WVW$v_khew% zfYg`{b;c-*1WSh!ykciRIeP+|xZRE#w@=2E!iVkz>wIxt-P*oV|G8hK?8c zFdF0KO+?R{aCMyHn#Z)c+V*)2Ka8+6|31$6!Y!wgFvquj1Lma2)Krk+G|kkk(6@7N zkWf;>a54B1Q2m;%2ew6U?9);lWoHm(0C6l}xoP!hLODHO7$99CO(W&h($ zugxcz!QgeIb|*>>4Q=;Q;Z3bDUks9!j2g|-5`P6b1%c+>duzqTG75@v-x{>+g3si}S1+Xbryo8uWWt&As*V~PhF6ET&~yQ-kRfCvlYHE=+# zY8KUUy+ht3y{T+J%mcdkP>%^N6hKI#Chm_lM%yd+8H2}ayhT6q#ac`ZueVG?p4cWTyb9orY>B0>OqX);U0OX7 zU#hUl3Tgd6@>8DCV z2OlE@7q`S?Tz+s|VFI=Wi{+zV*)6A-6%yGYPft(a z5~7}b#gs~)N00X(b7E#p9fqf8g$&0SiHu+Y+MK8naTPplLPA7vee%Y}1{Dp>x^|Z_ zWT%h6qEatc(P-Z^go7~xo73*CpQqg;^2s?`XPUXH#{cm27Eo1p&-d^}6buAuknS!) zI;2EeQo2JrF5M#1-3`*+-Q6L1X^`%a?)UI~fB)CDSWCE9yq|OC%ev6ely5e~ZFH|<{#6jp-T&nYLE z9H)mO3tNOoIA17{rwO?T?T>g_!E&$`2E(rDQ3)<*g^)s4dWk&m>^pp3Wvc5hTx=dT z9`QFh9L&LCTX}SFc}|wVMSQj&0BG*F_$ei8fk95e1y{<)#_zd^YVNp=p=9-8WUm^I{#iD zlo0s7XH}r-Bax7h9G{(ufG9~zTXKEQiVHGzu9)?G104NlUd0g0=1|>f>k%T$?C>vm zy1{(Ubv{DMUo1+(1#cx2SuW#(NUD^&47t0&LME{(doFI`biHqpwh5-hzyhGDLpVW*Wv{=bSZ^hhQBfgsaY<{< zJH2m1l5ldANron{I8b?o)M=y)&@Mmow_42mqP~*sIfBCq`2x|A{zr?_c949kKYTdr zJ5J@14u8xATIFbMM(iL~5P#Dgb$vFZD_(9B%d}v!_BZqYF1dG{*gQ^9UJj%?Gwcjz zC*J!uEI*hPEyOL(+04p6ajv-fZz?KAT8Skqva=T`98qA8A@BKgs;L7(XHa(OOiF0r zqHKP%(GoRxH$MV(u?Di(@z*+JPi$|!h!!{2m|lt}&}Z{0g&UxVkt!ugVc6(=&+`ZV zEpw&s%L~0iQJcI`tX#Tb3`dTC2Am8d1U!-2&=Be%U;f}_d1}X(=kNh6$ zn!6#Rx&8`6QgLUwrcsB$h?J^L#&ycUPiTuTi!vzd)dpc|K0dcb+-lOK_$NNUnhg8U zLkX|)dc{PA{q)(c?bMRW&UdQF=mIrRN*a}ieI!vPcbh0^Ux2;6Ih zXCbSiv6RT3ogDk8gZy1KK~qzSCjffr5u#}rqvo8aE^^#kzSuc2&(^1$PN&}Jr{sL} z&2{Y>$2oqy;Z;*qqO4j6KJ#tBDsuK9v=~UggAKJuyI@wKfUxCmg-Vabu8kZ zS8R=q=0E{-3@hgnqLVD7(E#prR9efv36lu=H78Hbh#0mbP5u1V`A^JnDc;EmF z^-LW`?CBS8{`(}AOXAO&#`Bki)9335`kDhlHx>4+^OPTecgk`%GjTo*!aUG=_9y#1 zbN3JEdPsz}z?Od4IYggXimcQiYED+~Znc%Y#K%weTp|CLogek>+sB&LkK#xES$_Hy zs!rH#7LX5Z*Qc`+Xw$R*PM#u~PZjoJ%?Pq04h9e8tfGc#ONEKn=V~HK8DpN9ElEGP zJA>c(Bhn{oFz2y8PgaWpPGyvA7MScwf z5&Dy@_&1AKhN57SJ5v>Dk5&gl>HFdvOtTqQNx>l%`0tR4Kj3)97zV;YZbc|%)4OUd z?4q-3qaK@F6G*S*_FQa!%B7tUxu3)d%u>>h$BM|2(YmjtVTq)ffZgNH-wnHNC?J|Y zu;qIC&lpsa&WwV);W!aKm1!y>|E2fBDOfTVID2Lxv=seut0K3=E&SC#X(Vd6-mTww zTl*->poS#bt0Niv64XA33=ld^m}}nYEWbj~SG<^1Vp8ZxdfL7e(Meyi`xlv2@Y9q{ zT(Z~+yzyvDKJQlJWn|UllKBm%kVa5Z+UBB!$;cVW?Qachda%kPE@Thvmz{E6dUQ2t z+5Y-{(dH)M#Dgq8E-~kQxg3MUMFa_FIO?CwnE%6paY)u-j)f1_YZb@H`(Hrpw(rfZ zN0-dDsOgWQ{z6A%B9ucEUq768BMD_3=4(w%4aG?WGm5RpS$@5~=ly)oLPxp6yX$yA zxb6-hj*eWhwHE79J^9k|+VtU*5h-R$@AB_-jfcMk2@|-T&rOn^e+H($__P%ib#6Rf zALtrG$bFobp19Y^YSzikT#n^{JO_ha4hMUB@sfidd&p zRFJGwHkzNKWDgEo1<5qKSzzOW&p-b6*F29GGWo(1oSo5G<{zQE>^K96wvUCgxq^Fw z?ND4yAWtXzhli-=+vRe*KMmMyWrPLHjP4=GheC#M0RN zLBgoFTW012WKWMGe|_D()Ekz=2Q5DE@X%7fLD?@~MsQ@9(~)WfV!3z@D?$JteP?D= zzO%i@3HcliZo~n?t znLX_VnHNdy#TpWdD8&dvHwLd+=kXVwbZcDvEL*~IBrHlcIIqD5JNF%qQwn#ZUkv(W z2R{L{(QO~TD%xg0V*mx&yr}fRKTZNwMK$Y>slUnxbk^RzA~{G_E>yt6jJ>8-dhM>0 zZk6A>W@A9ny>V##VdU+!slDb~gv?Uvz!=l&ia*QCw;~31-(#EC%&e-axs5GSEcdHx zVAG~yaAl(7^CWeRjry<>O&m_^^jUTR0Re!ZXGmzr6RCF=g=QU#cweo={&@?{_4;c8 z@yHk|;9C0yaR~aL9qqhTV9w(w{$CL1kQ0Y4J+n^x=#JAHWTJqsRW0`gST(m-H14Zx z_gX$D1?dzQGI-0HCaN@|6wX>s_kjYK1vWuBl^ptB@xS=~*)UP)86R&IKj=WzTV%ejm+;ClYF->E&JigvSpqoaZ^5OKZnk>o#-Ngab z)pK};;>c~;8$hEZ@oTjTXd5mL`5F$6PtJ>~tg=E$_!xLr_Y<00&FmXcSH5aBH|Lch zFKsh)m-CXTP%03|2G%~ z2GXDR)F)8f80o23iv> zxt{fyLf}2h-{hP*$~!NeQ>G(T09xaQb*_R5%bI|qiHFSnd}QKXbdU(_?-7fN%C3eT zQSOOrR$0k$E72@>OXzmTHR-bVU8H{lcS9fDV0x>KUe;>^;K_m(frE*_IY^bwmHQrS`+=H;sc31}6JlIV3 zaEan7ptH}heHu4<-Y)w4BK4jYeG;qmd_WIiYF?nNo z`Mh`b1qDSm+-F<)u7!oBR#AqtkGluIUS#+2MkVbX9yT~1m(^9<4XGbW_0*TO$`~=m z8P38Y@42>00Mjpfu+Y+a8J~pEngMdQn$WR`FOlT?OExQMz(fP4&nEVegprAE_Q-y= zU)iZR!A@%e!#LSJJw2~(5?iL?7}R}_T5d;VP*K&>v;HfszBKtbhPM?8*NI)XYoHQ^ zqcsvQ^~wq?;-=7zUJ-Fjz?XXhW{_ ze9+I1%t%-0X0TOrkKRe+R{V+}w zF|C~auX_M}{|}npiRIH{yW7UxTy<%)-p}T}%gaQWVqxqil9H00fJz#=z!XJwTyoA8 zf8v58qoRf{>>V6>4r-S}bvu1YczN*;4-fN-i@RqljZfyST6G6w8UC17gD_CH7RvMP zoz6q~dqTocz~(?8VB%sK5TWfk=VcM-Btu<$KRtOfA^cBgInK?*r^^r(w{b6)BB`V% z+9h9IRFLsN#srp*keeqMAOM-^c1&9(7NZAKvdjs2*QOlO9aeC*QTT%A{Tk6rwLd+J1xERW)qyws+vzUk>XM@FjDvcU-T={qY_s zN`{`-C%>_}v;QZBg6Fdt{xIWsXB9%xWL5VUp-8h4i^%O54vRs}2V2Vt?y3JHmO&lC z)3Z|Il$xnD(Vdcys)<4Gun!3#)9Jx&%uOTa82RPPPeMY^p4N#(*q4}%4Fg;>>a_9$ z@pvOnJ8>8p!K*>-z$c38!|EKZgYA7mVPUyt%Fb?^uphFhlT+Pn3#;)6TYd4A>B%|h z>SzHn*C+0*>0-`I8c00bCMM9!%gY&1lI^}kpZ!r zw{$!rJVh)10T5^x=??2O2FoiB_`dQCb>ipF>Z9i;n&z0;UHWEN2xc z@q33v3>OfL}Dvic#z|uy?#AvqMPpez$j%SHe-r^u3 zJaxobwOmtznq_!oq+W$)DNMgNlwhXTDos@bR7!xb5Alga284LcHpoGKP5<9cFaRA* zjzsZ4mEIp(v6p(eiroAZ7CnvjH9>%~@+XsMg(_Lvtu9kNTeX5TG3<7s>b~1Z>#X5r z=f1rN8%R9*v@d;N(+e4^zcgEU$8bP~$K+PPpjz1;YZDO~hKE$qay9X7%HuRv_>aoj zeT?AW+~fMSPCfm0wC1n7WqWNvRehMwq4IJfTLJVFi!nZS$VoqgJ;!* zdb#W=(DHC&R-{(_`fc1;wBhX0ccban3`Art$8(i~0KtA342AdpY=W})#uT^)C-6^B`pCjQMP>~i*xS#Y;13p9PHMJ5xGy^k$M;UXZU;G?`g+>G{dsvUfggfRu=d$(f>z#ZB1?QW~|0a ztr-d#itDhv1oxZ;f!_MAt}YGBBrYiBlJi!|V69ll`(JIJqRhyoA~#S`QJwB=CiH$7 z8XDqoSmFb}sWcbKs2ugJPmpG1$k;`lm4LpXU3#dh+ejeZAiLQc0j-I!a5@@Na^SC8KdMb4{T0avirhpF#EUok{^kK5p_K@k17 zF(_R#g{8dkbtM>2gac8)5++zMomtbxYgMb${%pafmmuT<74*CDoxOt)laRCmT^GN}^3okT?eZ zz;>kPz-V0?uyU%C%P<%=I;GSnJw3fnqrbd`w{7)>s)Dcmj1`^X)%OX0or5CG*@Wy# z51y5VB_6L6bA$b!Z>90*Gll5Gh5?yqF3p|0Wn`}z=TIY z`d;&#+lKc{TN4-8W)im|pVm!=W=2z8`zF{XtTP`h#>E zxUyk&);P_=7J(ijmBvrd-`_ve>iM|AZW%7;%7&d{t!fuEMIeA;87?*Fi$dfv?Bghm z!g~zyc)WK60A9;7%Ixi*R7M{tk=j%yi^l37!z3-wgQKIcAMl83yge4Ri$;lOpYL6J z>pdqbV|nO=1!HE-+_wMx{z@Bz6~6ybI;YwUDB^^Hkervs-G z3{QA!kZ~1#{;&G%tdG} z-yb84r0PZJDBqv&^y-v1R-U&>Pikm8Tv0%Ud0zxyvjADaEyFI|%V+=9MUFe(P#!d} zc1NGJAmpnV$9f&i!-^6;qg*Zz-wM8yinQsem{SfIMeU#3{8lb1DysVNv;M7QNU-Ew z?cJT*-QDSE9ccPzsvVAJfq!!DmQ5$0?RIQ8ppuc~Ppe0He}8u;Wr>G`u)eV|%Vsow z@^$=wycD5&g^2&QV@q6HRyzc*%K&MWHmn7rhy)pa*=UKMJSv_PS+=)^ zOQ=lp-iwvTeS$Y8X1=`cJC{M^n&s0=5#gbd+RdkI(S%HaBloc^bkpIEiZ}QZxMjgC z!GwHss}BGu9G{-DCaC6)GMZIi;YaZIo?SUPIT155j;ua(`o8@spYPLdon1FGr5{PR z{=Qjtek!19Gf$D$$;Bn3>TKXPyWB>cuYS7eI3+15NlBkgIimsmV_oweKg`y*y{t-+)`U?1&3G=Qo5>OLlMl=}qbcNnZfwO?5x}Sp z{W?`}$}N07`X;!6ZD2oqFNaC}(JxEVmEbG^u6}^+_sZVh8&LKu?C}o?`3S0?K1G>& zNFkBKQQ2c-WAC01%Fddxz4!6)iLVk@VuPQ4pRE2kZN)j5#1_Jp5XVwl!mi!hLKAYp z^qrn5OlB@jI*C0Y20!hiS*)tb=|{8a`158LWe$C$#YRV~dt!0F&#cX_p1e3s8HJ=z zyhlA57xPc}D3aH@=No-I_w@|(dQMdC{{|cn2oS*AdShAar&ja2{M_N#YXzYM5M$SF z5w#LEXSiH9kGjo^_lCbaLSnA{QbjHCd`0o&TdoQ%Ua+7W=aHA1rSio+?@jBc(Twpr zKRc^(3GTV+`{?r0w1C+2qqrHQM52zJJ+qpNkdTnF)|p_~s~M}k`)MWK8+j|l`=sw(C$IU-Yu810KSzXnu{J8MrW_CG@ z_n*J`JWxMa1EmF*6=9uFd;wt?PnNh zCS1?yRk)X6lnn*#(HZ>>O8`~DZ{ZJhpm?qIh9wQ3DPPr9nI?ydV6GtKylV^j7CQTI ze@il0(XI6MDP8P+Tl0{CKh9sITG>Os<9^=FukC)0dFFEZW*A6I0*i|1ef<2iEt3FR z0B8mDDgBz9R0Jehrsv~>(`o<}GibbM`Zqww?uwt~p7C$Buf z6HWJVOj>(3Kcejtu-gI>5)*VeTA0eqZC94R()a{FCAF}-=d+i*TbqSR2-JCL4BW-D zej@lguSOEd9vd0y4Zx=s)Kx!w_{Ytg^3}Dq;Ro$RfP0V$dHo9tXn_yY1vDw>F%c^4 zk>U=Oc{B|D&sAsM=F~5O%0K-?{@HA>?u$0pIi8%6VDY<@z7S~7{|KJY(yf~-Mz1tW4<0;`Cj;xl# zNDs|;Zmy7gn=mSPwek}M3_O@K5E$VCD2|}=^~=OB0{)hEEYe~Q#a$QeKM}!L^#HSr zd7w+nkxjEauXvty`hVul-PHH?R1btAH?saOt(=APjk7Xc7dX++^aVu7hY$3RzCQV> zk|)9*L2l_K@z7Fvcn#GX|2}`YR?;`541dLnBB!MJnkKccxpAU_%!G?Aw(j=f_6UqW z2f0FJ#b`8=c_QWb-PO~u3am>jb8YTTX(%p+9(yN0A0L5L>wV4aUhQuXa+>b`4I15Y zUZVJZF>~SQcmBjI!Vw~_Zel{SIhq#M(b4hw78pd+?P23gJv4Wg9X1xh9uQTP0)7P+ zm`)3{Ol;S;$DJri2aP5ZlxO?1=#LMVtr3xt&%`5#F1Vckk!v~qeF2dCu5D7g4s&Dc zz`%gAyGGZ;HXiiOXj3gIi!#vV^3)(?AkRHX@}Kp?{?Fv=mr1 zmN_`t7gxw_?_7I@_IvZXR-)V|gIrVcoJGTNtXdFv_DAd|kZ8{_wc$A_n()5%-UxpU z2tWUZ_VV`Ppfi=v)p{+2gMF5RhX-%jY+O=6c z?wpWtnA7`P071|N<`ziJ#moET_+3jG+5Sq$`paE`N9&lAP-O+6ADHMCFW|}V{qrYN z?O;VPpX-Ir^}h{j8XA_JPK;+7R$0%@q47dqy*`K3n#O8eq=2?W;lCmVi1No+rdTGR zg@6<70{P-Gpq9X^6Xx{Nmyqw<9ihmjO-=Yu`SYQ+hDLC?Ch+6aMopEW@c39lb_hJo{6LoGH6}6P4IGrd~S7^Yb6$ptn~#& z7sZPMqJ+nP#Ncge)Dk=O_{p*rj`&>}66h%5ER`rgd3L5!&seVjrH1{s?*ibY}#fy@#I@Mpry zE$(;+HI7GGO#p;%c8Xr7IT#N7%(H0iZQ}cb6!2~jd27j(y6|H@n&V0v+=An>`}S-l zm5`7S7^rWvJ4u6q!S+ybjDzDcv)Fx&L2$ImWsf4HIa4oZKTAOw<7{ebdJJIj-^x*b zGY2HO;z@*s1!zz~ENqr`0=e(AqD~Q=j+}U(7Hy`k`&pQ*^p~`&ADM(G0GL=% z0|mvio*DGm%M}+d2Dr7I;Uh_m3UZfd+{^>qpMo?9u!geP*x0lZdn1$_2UxU&?9_wK z-prTYXuOO-y4PP@-u9%>A9NaE_@+z<{MFQ{(;1wZd&9)!xh$YMwv~K3_{I%3HT4u} z4#Gp(9K% z&ytdo9tByxU%*gEKf}689!4Xc+<`ou;J_ihfO}b9hu%2{lqr|T zaatMZ@J|L#&uue80GWq;swxW_;z~_F|7X$NCtW9k?QMMXsoC=!Qb++zp<$2z)t*Ovdqy@!FRjoh_BiE(g=pvU8Xo%hp$ z`K)~dLvLin`<-NC*FTxvaB-P=5JD$bIHDzfUF&sZiK`XMT;Ha4j!sX1w?b^A-^u*y zzf;cFzz`7py1&N8=|BtgeH@?Yn=EUXHHMXL{fo%F;cz`kBgUKHe{gbNdsD#S&2k|C zxm0WLq~b_|J|r~%+%Ec_^B>7S*BrEG-|{MSkNcHQHZ3zg!ZDQre#{FlrB}%^DNPLp z*Cll3gc`2l9$N(qd2gYX`p<6PdgY3ya2kC+=lO=TVv~d*28cRcQOiUQ704}CELBrG zmn)_IE-jE4eL}^Z(;jayTPk$GX1FEntNVIL(Ugpy;lh5F{7@ItNk-6B|JD8|1JbPy zxKUg&)vqOos;xr$xu6%V4KyD)9$s&ZmTVX*oxY!6>MOEDmyy{`Arm{7Efcp!Htl+Q z&+*W(m+mMkdcKckx3$Di_$ci5#>a!>b_Hlbq1n;%KkF})gUcm|v_~;P z<8<8QXA*Awkk1x%*Rg-C2tmV|tCrTtXDyQUU$WvM-3?cqO~)+qpL=IF2=S=wi-)xb7$5u6?EOe5Vf&?hpFT z#v}jra@IQCLl0MXt8_tw#xk~Ogok8x+mS2sC_P=Vf9+X3Yme#OU2_}?-q;qEdhh1; zh(Yojo;dfv(~0j7aKs}UR#trkdsF~j`{k(yQZH8OzX+(Lj}FLFzYPpGUu>n);pD^c z8bHVgoq`3?w1zF9Od_F?me+Zvsy7hI+WZK&Vj+2Xw0>hfB0Iz5KN1)T)DHlE);3V_ z?Ni$5vU=fJF!LgY4{=QoKC4MfNw&^ljV7;+$;)!C#MycjX8qQ~(Z;n_$x2D(W;ysD zCl&fX1aO7tg%iZXVm|UmNos?2dVHUlZaA4s;p|_hwQH|UKv%qVLE1zR0tKG22@z!` zF@5DB%aQ!-YE(m4`MR9~3eAO56SC2DcS5+T{il}0gmjHg6R>o;2C4mT!R20wr7%2% zi~#wr*T3R%@zLs>(O&;pjxU|OvlTa^Xx3HCdJu5EB+#~Zzqh%wKWtVdcBS+GptLYI zN1|M8KlpWwd)I)o(7yJZ%2a*t`_$?uU->b4(HHHSh|^P8>WHhP=`Zu>Ul{nTho0W9 z-G*ohd4a!@A8oC*uO*IN-d?YZL=Fz~r9t`id!*E~CPvMSQoQQh*gvLBh%|2=-a`pQ z6mqg^{r&ydvky}7$BI-xoIjh~ODaabLv*W%aq!knqVK2O7&8^AGSU1!uRg=24s*L;xzszTsL0eHX?tdD#D3B)8BiU87a=$2P zDbr)VoH)W_Y*Q<{hFzd8^A9Z&seiSLJToZbSkeS{S6@9#vb)Du>zG!^f%9+*F zlwtfKVt@Vc#h8knxUO!y_ejcoa}%^Rm1vW@r)P7JDX#X`;IIQ8R?2jg>QBX^>m*2D zQ&*R@J;CqZ*t*anoFq+Dz(^V*?@rO2sdfCY==f+MYQbNd@D_p4`@Q4icT+4l#Jbzu zdgLsc!L(%!5%5RIVbMNf$u)=Y>_*Zl?x(bjZtV~r=Vu1r4+bM%HnnG|{O0P(L1vuU zZ3~2ZeCPYZ5{S#UrNIbPq@-_^YsDC8XlUu3$4#S-+4)Zl_VXN32ta!XL40@Q;YR@; zz6rfoVV5)vjW=uj!$(r0&EKRq>&Be_BEQJwUB$Lnd2eNF%*r8}pEsYJl9<+1;%va_ zB;EKJFthW%k_f_QLgcsg|W(tR`l(-cji~D(+FI1d@ z^ndO(gm%XH-e>2Lezd#@x6y`)nO8VNmk(V`O8Eqqk=?$$&1EA)b8gz2{CmIkmXL=k zvpvB7%g@TSL1U~qj2^=Cm5}Ph8*a1!{PPp9F;f#wF)Wgu{yWg%A6;}&J@46YIB?A; zaY!QMmpF9tk^tLMn{$9PKWLswhOy5sIFctI9@A~1bQW_%)WPY`dcM(+>avIPU0}%@ z+NEI~Cm_mp)-{wfC=7kDxvc&1cIk+v()kmL7mY&B-6=>P9>o{Qh6JcmomSPOsAQLT z?v4o^1vqly#H&qP=H{}VW+dpB5%Z0D;P$MWyo(?3vcr0(gR6)l)3lDUu z&4$T{zKoKRP_~;4i>BWme`=?S^Fh3c+4j0ZrhI-ePmV~MV~+j+hoHKp?rKwusMM2v zf<@wjep~LYxpc0l&stavkr1oq*hXt6O zs3~UQy;!aad~mq19A=bA+;J~Q7|AT(_G^qzu5NPQm#vm@$~BkH?e3Rs@Tk#x1#H~p z1L>Gk_j-Sn(hfsNq}D=^zyBAl?bEAczINH!#Cn8EJ;K|iWVp4QNk@%}bBQp5+CF)F z1UIE1lY=3ra@g7LYBNb1QqmBi(frQaF0x;xjVH}>L#%cBBk3m`#9(X1^McPZ*qFQt*yqDc*-^Y)%}X*k*eBuG`shQsiOJ=H37-5v>Got6^eH6 zobTf188jXReLK*>VU$&_VuX?S8-S?zw2;{Ho3&;3rP8T%G&GN6em_5tmTrY-5f0(< z9(MZQMzqbTNtqd1%3h?h-wjB0Q;?Eg=Yo&xCr0`}^s}Wpahq3#+xkuv_jRE-oy3Oc zI9~cza)q&4NwBtdVW1VUTw9pHV*d7ntSiPNwL-c0eIa!~3=kjnzX)pV>B-Khc58vq z8*1CBtJpl$XvfAGk@BOWM!3cPyE|MblgE~Dd0NPkb7!}!R0O|CmyByxj94VM%Rd3t z;&~FW?!4dcq*w(|zf9_>VchjBP56c`I_~>>OLbF@hbO4&mgv9BNAXpC3N0M9R6nMx zlMW^tYYts<)>0!@66-oTRDR|^-&In3&@063-)lELb%E!YEBa2V6LC!k2aBT9;5%}3LnsxwfPqBM!Wp(jsCsJil!2qpo-1P(=#-} zQAsznugH4)J0W3IwBi400j6%G)lJms|11yn#LwOu)gVxFR2mvxIX%#hp?T+c zV~8S|5vt9EMC`oqx`w|J2n>xzpS}69)0WaE-3AXXX%=E_>>iriVwUPxFsi|8zwD=L zv(~{*cXq1hD`T=|_-bl|e(pY57e6~<hd+Jz2)z<^fvX`Dw=!!sN6-Cxb=6< z%@T*Ilg&;rBp<5kGu5z;`=wdqq_M$9jD;9#gQH@N9?9t}%6)FvgT9P&af^6N-~tCv zCJ8bhly6~QNZ*Rk!{7k8`7#kp`j0hTl_6L2qhs4ueS*K(heF_##9Ref=w$-?KQXAW zx=OP4oF%ZIrTzqble;FA3LN#oth|C(>`VPzT;F$(OvaS(!{cTn-BGp^(gtt^P zDS#Mda>5lJ*7uW}e2oV?^FDYgNiVmMFAX5~r7Lsc* z>;^q#Dps+tK}pjXJS3_3NIyaw_9vZP#V$?zp>=Z)FqU&A>p6;(jnfVuv_?Ek2N=z_ zd+fu;HCi#rRrk4j%L5|G^34@kFNU$rv3aVBob5i*?lz|*=VEix%`-~g>H1x7JR(0N zU;ww*G4yRmh1g_Bafbmo6RwRB)anKz{=>O~y?Ci^vV?CgLv<#W{O|J4x#UCdo0w74 z=3VEG=^WkHeVX`3XNI`pnaVeO92+j$mWRv@j4~p9yM{&(4}TlII76;@&5PsT2?TK`E4z8~WO31FsqFh4SmHy5bm&VsnUc!~F0m+b z9X#sOmI@2R>Vmb}$r^w3M-riW0mVxYg8-om^(B&M0?o48 zEa|k77C?*3^M%)Mi4GMx-7NZ^=<`6#t`{!Xl@%E%xE`V=P6C_D(bs(3zE2YbmXIKq#Wd<*A2 zpM`aeK~R!rzdAmeH6tpEAvU{dn*Zf^BTK_rwG6jdW1EnL+nUO%v%r9q zH@a;gNxAgF=D`0=XxLiBoMl^oeQcp>^PZ!m-l2PeMe0p6 zH{=;LlC%S%liz4+qReX;uVG8j0jkeysReN#MMXs3|L8EN60|hJ$fu!b2H%q#-|%x~ z@Kw8>x>}qXZFmkU@Z!dE}ck)o0K$;(+i$74bDc1H#8?kpT8XNMe_0t(COIa_u zvbi^3u9rg# z>pj`!LHqo}b$DOF@zFTvSy4y}0BLDbSuz}JLY)m(_YxN&s=Mo4VAGX6$Ha?8^ajOq z8rHdki%}(=++eC^k7wdX9UR|k7@P1wL-EDBSV41ZycL?P;lO~|unBNp@r%jBMb1%vw35*=xS&L7d zYz`+uhd;tV`9VTe6&DCanr?Ork#Ij`H5ih%-Rsr{ByZpMsS>zI<2k4unRMpnMCOkU zU!k`n1Q&lqK@(8y;HgEUFqDK62y32G7hi3KLI-5%zFf6_C~v{*Cj8w^`8fIU@7tJH zyEnHJ{%A{^MNFzuiDi35_MOqkSg5G8@nU3eAI_8eV)OoYN_$PeE$+!^DVB)e)AFsh zTkS`nhwdoN++ZCC&E8DMF1DA7Q`{#41Tk#C-|c^TWI)cvgUXP2IV8r0%G@T4(^+C-==9j zMofF7UPc!d5Qik>GPhXpS^X+EYa%Ug?>ReMY&-=8_=!fxBdcDpA2Xhh_p{(Dfz1TX zIN1i_qOO5C%6LwtK7SR$`YD4T(Ax+Uea_mG+8zho@Nh2>ZKmAmy&lZ=d?1v zoxPc#^Gwl5-cxx(K1!!A2cP_54!}RaChPU5>)EXWlT@n_VG^BN!jx1$BwhIU@0?j% zQMNUDDO_=v218I$!@kD*Pq@yNVT6xWhM*6^M3~jGJ=Lu$huIgv<0MHreY@$G_2|fs z(;ATGSgdMyx;s^ZttumVO~G{ILd4g&g{oIil@z6&F1N>izF}&z4uTE`&s#QzY^Az} zD(*JQJf3tf-@UvOJ0~=^;EZo^F1%u7(qP|v)1>$FEfbs7QZjg>}Mgm9z2HlvBx}Sz-`TAm77tC{!--!BuYo}PaDA@YC`(-QR~bXwK8{Geuj`ul@noMum+TqZT$?V;mXg{rnWzdB=x#H_2f zIUBp%m378gA_WtuFb%>X;H?i)&2-f)XtE((hte(*MObu5H&R(3u{Nr=iMaX9Vc<0S3rkW0&f-)_US z6DuK#*Nqj+J{UDPN3ZQTm~jx4s>1dnEk##qaRj$atDUpOaQ6S+nz|eX;HMnNz8_Pf6w}piG?4Cgerv}k-4|i-xt$e zXYLyLb#w@g@EkS0AO6V7*sz@u(gSO5JV6NLtwp}FfGICtpr9>9T73?2X;>he-X8JZ zZ%DtpUtCso*BVsHHzN~&WP_db<#eMxIQSX%Yad)sH$Y>a98Eqh)0fz=R(BUl?N0aD z_Uh9ZE!NHd3v!N4n|yMM=G`^(c1xU@)FH|{Z6|AFV_#7Gp~np0 zVMbSk6z{=Bo29iK|L1{DSQqbfDZrd~M);f`$~R~t={79X>4QZgLrON>$W4~^)+(?a zJ&g}`ELvqWP=ih>Cs-XFjZuY$*q&W==hJUJ?-_OCQ$jp zL5{1sygYx4n%Nv>vns1)kDxt?wT-FuNYlBwCVBdrlTznY#Y0MMif_fs-_3JV915o1 zgK7Mk?zb28nm3woVi|DecFazwwS${T?{8&F^dk}zm~A_5P_YRgG0RQ_ltVs|o3wN; z{PPsNZjG%CanM@IKK4KFj(}H?b6MxEp`_@p$awwe81yk8cbLL1&InRn|I(1YU9f}(qlKrJ~J+eqa?tg@(|9Ues$-jxE2|tv!dv2Xk zjb23pI>womH83iOmX?;9zUaDqVcD(H25+|jJQ}8jYSY*Z7#F((MmvSTu2zFW=GA)D z;wEVr`|+8Atk{(2hd)3V)N2-qcQh9pt~-tDvMm`2m>*^}#7NbDXXpuLm8EOybIrRd zJUQ2ehrNndZ9b(un0BhulovmpA`TL%%RKU5&TnwH^mL*{ke}+GtS5WF<~MC5JyG_f zILVozR1y)%S`v+n5C!9HhORbQ93Pt#7N4EHc)y2-Q~0C)a4tA*H2Mr!EouZprd`|2 zPTN__gfG$RRVh9)yy-WDB*8IdJWBe-l<{$SFo@{e+D8dV$=bRSHmw%~>@p5O@4B}S zif|vb)<9Wx{yV+$a6=>!DFZvB@6~Q$scG{F&`#FYSz69=#0vzfj^}&4!*MDboT$>SvF39HE*9C3mwsPHn>Djyp?%w znu<9ToWz}P)fzOacw0l zWL`_gF>U}|(6SEwTt$3`%wNcGnO#!EI5%&V3p!0;HU0+x@Z|RgpplnVo%J>5 z;+QX_i@%Uwr=#I_ONTBgiX3#DwQX&6dH z`(L@O7sAH{*9hcI7k6SDuX6FG-{6zo`AHX{Fx*@0d#F$sXkPgeExswB56p+ z6W@e*`1-NzbaG-oyC~iG1KN%*%~9|eQj;O2KJ{EV!x&b#F~zsi#|y|N5MucN5qm25 z@~DKyF=>y0Mu3(vC&9SbFt29q$1zLQ)u5Q+nH+2PDpBzRR|XCvR47@s?I4HcFKP_S zWtT6r``yChetyUV19YWLLZG0}!F7J*`N#um^_QR5e(_W_zdz+#M$V#kkn(fOWyyrl z8}qH`7fT@1`Te97aBu{(nGnF{mvz?zX~f3Gyw&oR5U;)N^V>Wv_(lJ?+>D57#jMy7 z>5`jqKPly)RZ4@iZ5qkZ=Ixo#d=aT)@~4gaCqkPjMX!mUl(xqyV%t8s_zC>bHXC-P z8#Tn0|Cs}CPy#V{&}BC9i$%ihR~?NQmZ$OcBVbgO=@#e^h$ai=^sZf++m4?f{XuxB z6%nDs(LRI>|L}7Eg(9RD{#*V>HHUarR~^PbwC+s+u7a5@zCa0UY3(U0`hsK0i43Og z$=ARBnX4Cj@jg5lf!^N8i0?<(kMDChVSE=jKn=CD&g;0fUpZRB$n`*2=I3EVF##^? zkb6g?R{l-F0{WDBL|VP3Klz*DC^Ob$ZxT64^+bP*WO+zGH_Aq-PVje>Nw2I}={|sa&nrK@(P2BLv3_A~U$gps_y6PR%HyG4 zzyEAT62h&NHA`;DlC{L76oXVEQI@!kb(j)EjG57*5;C%ky;9b)3`52;t!^2V>|>ZN zk!5DMmZ34`_fhxz`@CMg^cSD!dCqyC_j#XlKFeE(%`27xGQ6lyBl-THe`b4JPLS(P@6)8CTYF zpos$#DG}0NIW%%GwMp=>lU1Ej6A6}%;J2OM9S%Q&{Oq@OlD!9;n(N{2D}4sEgyrK0 zuud*k#)^{Ln4hMR>_4#hMwR2FZ3ijJ1Z=6xH<@an_cmgttfaO>pH>ZAUV`e%``E%C z-AwPxF9yRgcWEUD_f*^GM06`RAJ=jDY&vii5R~qkxB+}o#W;9I&kl(QYP$Y>Q@p=x zZxzAkGv+R^jfxs)mj62V>e(%R1>FOv-jH{IMPRBig+C(12W2J7X*O3~=jXl^U}4W? z>nu_s@|~gK*s;)gm+&sI3;nKVR}!@C%p2O}tNb-ol*+uC@AQCoEXNf1SD&M|xC3(s zphIZ>$l_|iRGx8kuB+`-EFi_+{p+Hp!wK*#!sX4yoWu3zfcgi}0T33yM**Z)_PzHb z{TsLSFw`gm+NK@oz7dtt;lHJv1_(0(h%xb)FM@rz$Q%=bYuD-02Cf)BuiXAhS2~j3%H2Tie4Bn_k~>a# zP0y;&UfDXYfi27+m)cT8C;m>`Z@`%Pt?Jx-<)7h8?dl|% z-$yp_pld1f`8$Ruv|Zly6jt05lthT3UuXLiJli#e+PT-hfa_#Bbv<{;mF-)UN;5zz zs>xcwxo}4-< z21S*h*ZHiHJ$;6+;VndFu&aa)!^&Jp}# zIiMg?tEFMrWgpjKVa7aAuMYe=;4y)x{kbFLeomWtaPLir=p@(Uzsi~biP8(jtsgXG zF`C?7Q4xSl{g&{SAkPwh`83NdfW-s%D|`T2&@pk_FtTUhb2814IiKY@pjwpHNj?&D z?b?V}D()y)QY~#3vx!Z6UT&#q4Q{uT4<|R84LrU(q5GeM1<^+Uz1til1Lo%r?G4Hp z^nr2+Msz$&_$qi3?}yq2BDYX7X|<_Fq1a4a@WK3Gle*^?)R*0D?Ib5pwC4%A+GUI^5eWItwje@#4f zaH@C@D^yQc+3=_6i-mS0DV~=kAG0mN& z$Ti*#r30Q43ko4N^c*(7YqAGO(nH%_O=_Q(w{HH;@^rP6p$p=wdbtSy58Lu(HC&GW z{}LE;3chlm;eSF@OepHB)E9GPx;s4|)!))&x*1oL=8tPNFBX#PO(~ZzhujE)F)B02 zEVv%T8$JpfHKHg-?8&x=1LFf%rm4!UKYe=7`TVHdtX`+_EGqBG#!kJY?dx`XbFnz; ze^?B?f|5<3PHKZA2qDB#`XRa${TYZ0ToIiQJ#q}g<-hK817e7x$5t<@%PKZr%!c{% z{Lvo9=ym=;gd({YxJnvU0E&VXz&9kvgMkClD|6qoz<$DjR9RP5hIf^FUiY}k66fobpjakigv>?f8F z1jD!M3{}VM!R*FFyiCY^;g34Yj!$S?6adzvhpqZM$k#<1)qk(3mS$!6j-@Kuj+bfP zq6AWsK9XLcaN^+fXl%&~xU~hR?rYAjhD#K$-pb=TJL&-uXVaUd(gK4IEc8zCM~oxM zW=;2dle>P0)Gy>w^+mk&2d#(M9 z$RnF*vfR1gT1ju!sa+*80ow%f>ANO7|7Q%1O;C{|@KN+efdI7I3-TC|w(7~rzbb%0Nq^vA zQ7ZWat7XQ3fd{8RoDWj8SvWZYtt}XZ>y@L~ILNN!_~QMbC z0@m2U@Q&o){$>g|2kB;SF?+1MLNcUh%1hmL0j@1n^2~a{xAEBBl1|0oE%=lDx9~gjF>fTkbmdFtW}R@+GFl|rpNK);j-@1A zC{`msm}$}9#D_h`r2VJ&JuxzHe3hkj#O?eer_2LBqoJIMkEt`*@HD+11IXq9tH*p| zNQ=#!i_Vx25r+)_X4Nk?gAFMt zdbBSb^MIC>IL_N%r;q4na3lC4H)E_pLb41Ek{ERJc>Fa0TIPb-f6sRxr=Q@q)-?&< z^6sh1x^B3qaFFx3S{a)YqQ9NmHx*&v>Dg|3O_{K{Nq0lphk?NVu@d113}KJpq%qQ; z;j0zo6K@tmh#G_vfG(~$-BR`5-0o>6S#e;-{ znP5Z&f1p;Wq4yz~16?;+$7o@`J(nAOyaC&>(Vgv4LuP@Rk)MCYTVT-ew>tpS1D>EW zzXcH4j|T2gN#ZefaygI&?e&$j`FHL~-9i9M7>MP~a*vM)IiX^DxdA96W5pnp`}1Tn zIbV)i4j(j&yCgS?KQO{Ts&@LBzLThc&`}aJY)NHhV7F!`#?XC0l$w zvnUc5!d^MxWVQ8zP;bY!0QESF=%=q7C6&w7JDq-Gxog_e9gV^ zPhi5>P@x!LbTom##}=s`STdN-wPHAU<6?AMhI~a3QFm#0oq$G0*%rK#}WqX)3bAl5lemp}(`St-pAO3o6wC!() z&o1t~M0}KHphrtC4dEGMbfjG{Jpa}W227&t*mqX6wfXoND?I>hh9NSL2njQTk?kso zc}~nM*L&+F@lctOJTr3?N)&(s=6C3Ox$#t5)!$tAz3M%y*&bLnnk{Q=xetgwn@1>g z`6ZCbrs*A|+?0^>3kPY82#*^x#T6VMPF!RAVGYbF=ZNM+L1(B8a8XoiCM~t&+G_1` zl-Lcqyx9@xAawP~C#$E#LXb8noIKQW6tcP-qdBk2E)5=LImRDS36#wH&UG}47%L?D z6J=3U68q4%gT8pS2Ns`R^a8M>ULyI#TkfBHFpDVC_)-1K`;zbK{6d4`*T$4mG6#(k zkUc1u+9_fK5Fc4h0|X4i7l9K28k5ABEBUq>OAp^tZo^|B>s$;*gi^lZ2@}hQ+1|z> zKHpWuoxx$6rCZu=7j+6{B!)*+C%8UWj6#PFx4dnS$)$Z{$-|JmZej&t8kW1)Sy~=o z)Gl@?v+ddPDzewq3_r8*swz7)Hs31w?(aa^Q*^uUvm{X@oA;RZj`8wThNnG%tT1tJh_e~Rs$nJljw1BsK?**1=sT((9Wp>VU`%OY%;n6FtZ=|1 zLS1a(@iU#w+eJ-yD7OH^_kk))bn!-I2K!ldO|c$3+h9Wp^8vxy#!Tv`XWze#hvkx) zmX$}=l?Ej(6fL9%M_H;}PVdy!Pq{oQdi&`u{W=z}-~Rh>@BA*(s7qx6S3yLBRv)Pa zE$RC1HG{Rt(6*Qltdj5P!l!w(<9-Jx~6S}v~p5hb_i z)FEKj=9DZ(XySZkz?=3C2E(j|Q7BPRh2eka#uw5MZ0^`!hS!1ily+7LC{HWSA&)C0K(~-yPC+SeBR)J!VT79d?lZhw zq#T3rwfL+QUH5P7-cWz*KQ6!@08Y?ZNoVMT3nVVqIH+t*ACxDag&{gLws?LPDXf-| zBd_y4=qA453A~%-A$d|t(7LYkBY*!)G~*@sWJZ^ksu zxBp4lcV-k4%JUURtUM0=;LZ}juql+t=lST!wsarh?9C{=lH~9Zl!2@!q6AWyJ@hT; zT)2!X&xA7Br^nj$Cv@i(^)NuW=wqdd0hm;c2tWn=HM3|chU!l(lEOu>eX(u*EQDGq z%=`Ff&t-!QK26}~yX7_SF9XQfc2|+}cbdcHkBAa*3FIvccbAqL$#*0q5jn(#Z@4K) zl7yVzcxPqdrng}sJ?_wFmN%ov5fnvR9hf`M*%Riu3ze`{JBj^LgBkEu%}JCm&v@#0K>>fn>5h77eM| zgpFGgSAk>}$RHHEVhf5~u6JYBnfJNX!Rvpry|D(}wj*w>clOg&=t{noI<2#n+Z86b zqC4TbH+(b$BR6y~&&kRcV<Tn4JM*->S6&cm%BUoxAWe+1s{w+K9s0vXRW$rX*P>mZE0iJbBfa zsnxvfoq!KHZAN)|O}1ilrGNcylv5|As?%-g%P6XyC-VnWVt5NQPRTlKCb?t!n}3^= z*fiHz!n2aUx3tIVj@rGrI$GfjcS^plNguNBnOjsL^oZlbc|B7~31iO7SI>rI@)SK( z5hqm$6_+M+Ja z>>C_8sL%+vkO7j{UHiWsPW>B9Qg=k?k)Vk+P8bNv$lYNFnk9VcQ$qYg zKB>Il$VbAC;C9$3ep9gdzT}iZ{UT%uGv=v5^kDW@<5}0vgBi$Y^}D6{@C4&`iSnA? zwVMPH8N1$U4)O@2uzOcWTDDo_s7aXZ8kG4{JMdndZM0R$2u=b6`Medl|H5rmtMEy?YY#=C-lJ9)4~#^a z%-c8KlQCwFG72CsH7(9h)O}K9;q+}t&5Aa5YMbB_Wc#1n#+eotd11^G-pzY+H>y4* zUG`h|Ot9rF1$VW#TExX2Ot)!@O(?pLJ@8q1HN><*NHjDGL)j%Rk}k{5#d1eSS#3Nn z|JH0@QuV3z6DYF}41F^SsWVPl1pfd+m{U~y-M1wtlb5vv&*A>S=)PX-Qa%5QGe94p zKXcP*01_^F*Lcrg$k#d?ku+Ual8ujHw{+ z2sjc5XiOY^HZP+ppHcaOe9Dj#@|7C|eMI(n$Iu51+%Goa6EBH{Lr1?bY!;a%;M-+h zOx8dB<T@&V=B&ntbctcZG3PV4;}z%M?3BBT*R;^U**+id za7XPlrMxx2`ax>(_5wX)x(6Qt!swlp1nRMKf~EYNsOuEo9*{G7AZSMLdA9sQiL9tPyitArxs zPWK@GBRM65MV>>Mvh#VjBR`EX?V{cpmPDsKgWZb*&-C^lyP;{~Nc=0FpKC$ifyt1jqrM;paARmH%}_`1)sxLFWMM z-mEdpDhwDJ$|CHAeVmVkxh-)!YOyg@Fjq3{G7x_ zfebVX!xvDtSKYNwXLEHW3jAfXEe`&bN8aJ~DnQDnWAPdrX&lR7gqcvvV4TmEAaR-? zcL)e;n?`-=Kcn8d*`M8lMp+gob5N+84JHFDWs4-W$FW&tg$IBN!6-hM$Uk2TxunTZ#g2=!HQ!0q~u7dBRFe} z>Fe%yok8Or#3YF(mC$*LA1XH21KIdxGW^@vBBF;megCdKhwKq+Y{_K6pVzAwPH?-y z4IoR|BLU%bmPl+#d$7@5p^;Q{u{|&WAOaaLs(|q;pk8M8->Nga=mm6J<0SHs7TwAB zukVVvx#QeIXgk=5y*mN6dIA=n&`PQ)ZTq@EPOsv1OBN)8P|+D$$hZvy;`FxAPy(e`=zmyM9(}>6%vY`TlP>aVxtD1$?|% zB$ZIUw(;!{OL2?tTk!>!==ets)OkNtA9}J8x+-I+hl3{5M9R@yEruB{jVQ;AEmMlz zxK}(RJZ+2b8B&snw_zd`gfyeFCu0%|vrD`bgrd0tEQ;4CARfKw8(Vaf=JSJ_WUSJ> z3D*;1zf}`W-4UFQjT{wWb8NMnK1SFuwetVM@_|cBOr6>`~cT_OXs{tTaHO2ORCA@+_ft5bT|)C+@?tKO7%sxAZf%mRAlOj=OY1p3NO6 z2GNaBW=GI*X7h>(#>c*PlMuN@dp1&0W;#dYZ^Rl4pz~_LM~Wgn1d!sBjLJi=U(KZE zc$f%tXxhZfN0k&pP+CD*-JnU?_57Dm6|HD}g{<4vCv0N%Y={pC^bmjj_m2=(LX!SChopJh$Y~#aZ-9kmmWx5>uyzy+l z*~TvR3HB5!>R=pGT2MldOAwtdlnXt)YC3O-X{2QZ9Jp4NhSB)6%@>idc)7wGFViUd z19~altTnGF_l*MED1nzDbUXB?x(gN+RZW)C9K2wnyy_kON5@g$gBZ1-?ji1m&gHJXJ10F9gc%>`#fP4zp z1V!u%Jo~DOHc;#p{ee6r26H=kHNoMj_fbipc1WOA8B!Ftka7*6cIQ8Y0dkym!VDJx zBHKHDb4SlaHo-04vjT37=M%)}7T7j5r4XBk4-f1O#BW3@2;yP)hVXx>f4K9Bk)mFz zmy3MZ>vU_}OTtV-p*oRfu%+FRu$RuIZ)HmWMaQJUXDFa=+-B-FmCof_SAAMOmJmE| zO_%9Ofo+#fyRp++8xQ|OeqE8-!P@oAEBwTK9&68FCkr9fE=eenI4nAfnPc>E<3o17 z-7MLr9VvF$EN#eseEtpQW@!$gfy}>~TOj&ClL<9`kegiNt2v!-W)_Jr5S*qZ+F$)b%*~F?yMaMJxnaR z%^#%?IYfsuScU4PldRMtzqV^}vWAb?r}*MuhbuE*32d=#43-G^P|SuQWI&W6Dwt*V_h@68fO1Ge$4>YSLX3t#1+kW&kP!d0K)u|5GR7RBR_P zw&%k*U6#H;_kdL~e>DKh%Kqoe#*E4;GRq&;ojv4%+8M!L{o_ zbO&Gi!7c@?C`T=5-NYt#JmRgnXDT>M{IIMhFC0vwAH}vkYlT+iWNQS94()18SCbIQ z7|%i;z=y$h?xPC(u3_Q&aDDKNCc&+rDK&eIC>toVPR8iAi$i=QEpGSgm__&8q4Ps#dY4_YOH3Qn1(l&Ni605hdL6extx7A@dai+Esb5LCY|KJr&}fAhjJ( zPh=RCNo1>Fl<@1FcG>IQ)8QyP*ZlOAJX|R`zrYMoINC>W$G*>+Z62rWuYw`a)DXM) zp@RX3%7AYNy_J!zn{d9(pR;|q>Mb$1`@E6-J`DCMf7k5(ols}kKKFPoCQcFSBfr7l zMOVTis&m$u;Af)lQCy&l5`f`=kwIFLRIWYU~K+IN=em@rU?SDc{u>vRd(cnjK zPM3Y+K0}W&yK===HJ15b?^E#u8_mK;4%ZFfj6gx^O%YH-`EZ)F6B_R*6f`w*vX~2N zL|U1kQikem${L8==(^K{hztFkkg^#et~%(nZ02xJe2_WP7Rrq>7m{;g;^eErZsctQ z4gyRA^Gb#jyY+)&*uiXZoU27@xfh|ZF4aEAyXO#nNB;RfdIUYet4-yxmN|Ya1I!qU zTtCFbZnJ$ui^&h3eznK##ZO|?Iy~5#A8=8uH?izfuWs4S$07Eg;AtwH$7?c#F;LPu zN>@Wz$CRU|9DRl3`sRAPuPv>YI_;}bu6R^#)L#Obj`Td*Q`|eI?GDKu+@NqOO2;Tj zLb~QD&}X@Qxo1DlD{2Yza&&1s=h4hm?QhDmU)n-N1$#m$plbJl1@ThpqY)tS<*O|J zUaJvY?-=u!Y2h4tEH|<8=k4Ml&HSx%Tbe;}BP;csy;A{Y!PDW6KkcXXFcF}5+xp}U zMU1hbRdtQsQ?0WBFC!z=-Q2DdiaBM$EK}lFblaD%H7!Hk>S=rLe>YaH&YVpy)1^uX z9A5Hkh2@-6Wotc2;I_27QqDkG=4?p);>O8N1(Cj?xuI-xhxFFtgyP#;UXE7wc*yDl zPON8z@SCg4^{wo7uQ7A+b7M&t9X%@+J*nXef0H>2+_E{yk(0u;xJTtZqa^~KG}9fV z4edC$*lgKu0Hzk1WyQgx;j87GbaBopTiXXEno{W|I8{e+Fdh<>Q5QY1ph2V&I88ix zS{}UeFTuBX8MDnj_@IcqVYf+-@M~K$Oh&~m`d9FWC8>q*)@=$F$9o=m4dC)~(&M~o zQD>PA$qpdW^GDa^Fjq@lMph`jd87A;v}f4!6h9xZdM0Ff%|3!;qC7Z!z2We!je;i#ZrCHh6!J@imtKd0zn*>o~((04%5{ zBA;g0ySa4RB`x3z5#ae@V0Y%lQ?cf!a_uYOWh)trXDKC??PJxrI?i$^Z!BL=RZJdI z2tqw2y;HWt3Pmqk4tzu-?6sZ*z+Z+&JJ76Q#~Ke5HMQ}+c?W*VRGS+lDf4Kjk;6j%yVrb?WM|= zU_qMZIl#2-Xzn+*U-0VrfU6waq9mht3VmZvsV%*H)f=|j&$dfr>zpLfH=|mZ-MYveMnDboug|_^1 zi#An@dk*t2PBbSMcZ0ExIge-OyLzFkIL!ln?N{)R&HiBY;y$lvq5A_Lh-n^xUmDwp zg$}kFKcTOf_7;xCly#bh`wIeG#c!Q<9QNJBG6k8sQv_VSt}0oXSVG_-b6%w`Tb0FD z3N<^Kk#UG%`R}PG4-IY}uR<+p=@<6#ZF}TMFJaygZ_@Rk60Jr~VkvCgiT;tbqXFGw zX%v5ycLQIIL-c)G_hd7o=ANJTsFTeYIZ|Jh*g$QAR)X@J>yNieU+7qYQ+<@*KWv51 zX$3W{9144`leDW?WsVEW3ypPT@~IZ?Vqs9T5}h{71!2C!eIIEjcwDer>z(mNnKQ

_aocw4>wuHpao-eec;2Z?MvPR<*)Hh$2xMtfF1dWBfJ$oO`n(P^}*+>wdUe&7Btghr(!Vxpk4Vs->M(ohO7v8P-Tg`U3;Hg}( zOsa60ZMR$2C_e4_{>anyt(*vE&GDGnU3u<=?!nfk7m|%zS1qbjIF3!;;ak~z%R}1r zdaWi7++6V9L_NRt42NGHAMLK$Y2)VXBc}IP>@H^RIdo$HyerG(swFN&$0+_*vDgit zj+H*B$NTZ&p;ub-78uvlvyAal&8ZtC>a^0Mr30Qq zXi}(Xhk`W2S*x8kFk0QhKVu*5xMyEbOIqcrUNg{x&+)tlP(ktVTsNz}8G*5!k3{-p z)yeef$0L2GG@IMwIlN@AGAVPMo6P7*;cn3xO9OTFlVbzKfHJ&$N%&LSs1h@U_~sXi z7F8^Rs12*pJ5Az;kv*5rh@#Hz!O#cIwTe=SQtL~0$uRlB_zb5gx`iYaxDsGmHi zSXHa-mLaraGhN#YyN6motSt0eWK9#sX)j|R=J2fKF|^{ZrJX26kboI)A@Lt{$AGqP zu9(;Vgzkezl>HmYb}qN#C(;zx+vtv@%aNW>ABtD+yDx|!QGbj#c`(}_A7TEBVIz9s zw-3=$5J;_hepa0m?*!GLcrx|nmbw1O_4r^4n9iY^*W&m`#Z-k=6*uO^W(0mY16Ov^qTGECG26I2V2VlXl8u`UzVL>Er6LC4 zH%-pMee=6~dEALo4g$0YU4&4EHn;0s?)z{W6fa$=5kvuRL%{EH5{WHDnKO8q z<(CLQL9&gEp1R+WJ~LUgShExQNNjWJSE_gcJSEe_f1o}Q!V}MgqfWp1#lB)nzTp1X z3jjYx8r?iRqhpSq;ri2mA#;})j;&j>A*)bB8Pl5!^n!Oi{qz-*HP}~hf{B$n)5vtm z_^itueZ4~MecR6mmqY>=%f}Z42Lbo89FCb13vELQ_A(7p0KzhAFr7=1Ce?L`0-wbx z_PNA{UAS)fkc+HT+S=jfy|ndC^C9_2j_97$^}U2~7l;qh#;E zRRynm3)CTB-QeS|jYyNbfAF_M{|PLAFEk^aSNi%IU|Xj(52#PSWwnQjBrNVW4Gg#O zbNZ11<}(}Le-zYfqsJ}_GKfisH<9N~?eCZi0U;@8B;KT##f+4IvyeHB`PcTECSLVp zD^kOGuj1X=MEuVWrdrB-g93EYaJ3xE!?Wn;6GQZNVt!M~7({8Co_*(C6_&-m zN7vQdY~nRdng6P@6Iv&;8pNB;p%qKZH>}Wuyb_%YRp3l2ZtcehOa1h^y5dEG>F{Hy z7Or&mk&s|n+PO1i>5`@Ryw;51s(QJO0*EPkZWiPuQE7_dslgp84zKT-m!Ik0B$dxI z=QgA;2AGoKS*_0D$WNE)R&-}lCTCpB`N;-L=)i01*gQp9=>Grsl!CL?ZT@4O;3}B) ziF)bwl?qqOX?Mb+CPyvE8|i3&_<6p_&X=_jrmGhOK?VScQk$5PSlsqi57m-z@pUPS z3q5{b?J`Bfw-85iYMdZ>&~;VQidbcKk}G6A!d1QAU;wO|X|inJZ;2jMg`lci3OKQL z+WlAai}Oo$*4zmG#Lm)*We*M?%&Y<{p3PVaaPS1~bAryFn~A+F70g}tY4RCcIYF1B zrtW@Z{)ez@#R{z->w}KcQ2)m&P*DxoI9OK+D!K}GNiWDnVS&fZVe8Cjpwn$n)+eEc#%bPH9r&Z$vy)OwW)xAqs1`r`%0 z^jUhB#w+fP^3Ij5xC2zPxe%yhz4)i&o*`v7G%@DY4>{1#!v2&4C*8PEjo}wzQcf}> z`=%X&7wOmNT&hoy<8E*G*_m10ba)ueeO>#YwbY9%1-Ts(!}2wb+HsnPbqSvnvrM z%e)0{OI3it0BFh)zVm&jy177b(J)~*@Y85@lJ-{x<%(IHyLOVc%7xff22`o%p?Z*2 zu>MLhJ&CSFPk3RfKVz8idno_c`5v(yVCXhd>?h}OYOOyK6*L5j#|j^$b|vYX#a|eP_}#3 zsppGp($8n1V?&W~a>2$Q{OH@zUrI6 z*HZfTJ^gT(A*1Inz;ae6=)AHodmZbf0)L&Jztit*_>LM?7tx$s*JGe0l;AbMZ9Xtlz30~nHx?)$J|1*qa-QVsQC*BBIy@G$= zOWF{e$vA_HQP^&HS#_WlG6Ja_@mY9q+Vwf-u!*H_@be#AIJ1qi^|Ir2RPa+u)ImdI zL&fSqxlI`4eR@p)gRbc6o-Z5P1`9o5b^J&ftMIbmgs);b#o26eQ}KMKkX4M`{JFhH zE@|=10iAB>OtYA5-bYe=8zPp7| zd(m;$6z$X3eO1{{kgDNPa6czzW6r+63YtkWxq|;-qW{n&srbstS~FeDq3SaO-`Y#1 zU`ZKi4sYlNPjr~w zln(;l()QioTGN|^#K_j(Q=(Daf>2%{ba0g3xS68`n8l;wwV#b~itIuh2X=2`&Y8f%;yOl^OLpl%7(HU5x-C`$)M=>W-bmOi1zP z0{R#cr`5?k6exJpfBV;9hTntV0)gL;?6jPL)hp~kW>w@)&wpYi%j>_B^ZPTrW<`(7 zUk=m@-vz$In9b*&M{k5FLq@iR9te72-7g~^FBRH@BBaW`SQZ@X9qAaY_h5=fw>C4j zhg=<1xuXhhR<(GXdTu9NrB)a>P}5Nw^Y84+zIv@wwpwouKw(goJ$D-cY374C2?dK6 zyRfYm)`b=EPH_;`IX$P;or9 zAQW=e!E;^|F$3w1rPa?4Bej&pj;IB_&RlOH@6B8ai$CfXjz{+FvkH+s=e6ZzVBf#F z5QDRe6AkGmmn-xwRWB$Fwy#{HhVP#LvAGDB7wKI)N&9B~Ptm&xJBU@_ui*4^5shOq z>n=S?oTaa&6RU6>+N2J*+pvKnDL#?BX)d-8?)(muAC8muk?QPKDNnIa%Ki8p*OjH! zo$~>{2FQ*T>?NuJ-1*5c@Yw;CO=7tBkTK>)EP>gwahIbZh)tmsheK0AQ!agH?3UuW z`l>;y_^&U$lvWP_(=kTj_2aE77hHPY33ty9c2Ud1Ag3Yi4mpxV==ckSf?_OfGK{@Q zuKDD_dSVND%u=BSP)Z(rPkGF(8m$SEy^!n>jc;GMNA;-@=5XE;Sf!u1@|WMW z^)W#PAjBh+NM2Ghs=e@TL)y|Iq-5%}#jnKU;cvH%KG_3z^_%x*^GMX$%KH9Cicon- z!18(6P&~05=*^5L92Cu{GwdoL`3@0K}g4Xe;KdeM|D0MStxm<%JT{muca+Z8O176{wn|t$2;PsozzZ2{O)lR$ z918j;cb5f7p?|~Dt7n4uO{>+}%?VGza-;Di6Nze7jBNEIPD`l+SDb*;d@L~ zJe&}}3uxJX$cbn=T`RO?noGOR`D-9^A*l{On>muDD`mP6n#))s$R}$FPqH4p=+UpU zhOKUC=5*JcUkCgiJlHz6@{nytwK%A3=Vx)~0JxAMtSnwDo0z>y3ae)Y?QJob-|riX z%o^G_!Ji#!y$tdjQCam)TGXajl_g$Egff%YKQ+8xzExaL6lYfQHXelEDBl{tul&W- z5VKxw*!{4skrTkIH+I?4u?RANj=@sG(8m%@kcA-U$7Z@t!_qw4PSdf} z^7)v894*lTb>n%lfWRbNBqX5`X4zLaPwi$3+$?M95od9@rt2gPT_%;*5hx_+R zqbAeq#sRtnHUO8{=UgWEU%HoLzGmmUmw6F<5!wJ{I(Uw=S~EFJw5XwQ{NmO|8H@Wl zi80$TNt`x*9G6zMG8qAGk5tB!a-PMQS3lr9z4H@#1X-A6B3^BY*;Sp*DFoH=x}9@{ z%S2V^SBUC!v!m+@+1bJMB5*l64tT%yZ~>$n+)nL`%a^upICFq8Fg>0VGu)mC*LtJy zX#?tHlYIE6TJ_YKHlNM-vyt)Jry6-x^mDEPU@Jx@WJ7%W(fz3cMIPU=`@W7vUFOU`oQP<%^$yy!6}8EpV^LdOjxsA7v<-D5c>^`d^II{`i`|;M{ZYYh#}<38!IO#O7 z?xl+VP!A9^(}Al*Iqszs3mtSF((~DIQcJ1MM7|cTd3IHXcp`Mnn!eWncEnE*&Jst9 zb`RdZVPP3Z@Q+qRraK;f6kM|r?`z6zZ`eIjSnQc66aGSh<{vLV2#elhVbdc%ys(SO zd;f5t{8JYw6U40+($eyp3^3Y#_am3By{DdmB@Y7Lt<-n2Wqr4W%plyNI%F-Hz0db+ zmsKIhvP_Wwkr1NkbznNcHIg4k|49{DMf21?U`abOmXwi+4xZ;oMTgDKvI-}kH-R_F z%2Mus>oOvphsK|F+X?+#p2RO6&J|Vj_b{s*?DujWBabsM6@;pQ6p^cIwlY)m#vLzV^w-1Ux=gzRT>k@Q|@DjWusviD$f!7 zE8N!OZUOXG zh%b_vB{P$IcOkR*o)*w~0dSP2f!1w}XL^b`buDF5yT;P$K4;%E0f6Cy-EXr0KtuDz zfoVAV8i1<4$fU^pYuii*VxdT%>6X!z7Jwy%_a154ND22tDmol?=urVwYR^{b>{~hG zEX6Eh#jrst$s`=#-oJ|(07jHdI*c*ff0nr>aZQO;%QYMROvRyiRFS`OF4D7ASRj*C zcWo+K&=mUS;^KrhXZB}53Xd)S#}ZKpZ196y#fM6xCIUc(b+}08;Hnvw2bF&EVPFm@ z%1AQ{DOMB?e`vHgl6CKg!P_#yWDB8;7(`G7&w|FptA&uh$G(2$6)s#6u(&5ar3FSO zf#12UbxnV0CX_5S*7xzBd*b~n){CG-lYY{56SpCp>T>nsZnn1Td;Yb2>M#lQbU6Do zNN<$s-0Y@z+EF2L`0n3(b6#-UkWe^0s@2=-wEok$3@^j z@DcwM+$*;w-!H%ZGot(F12is&8ZYvFXR06QHiUrnKbx#S-g#ndWF^RJO4&iHKDAcZ znbv&1xX^)x_dwz4ZE1~zOv8AI3!2|R5vDl10l`9+=N8qoX{~_n+^HFqpH}$-snu*y zBscUHT__nRb0P2Lp%kjBSgW*?W4#fcDfA8r7#)+~9V&GQgX#|LtX7(b&HE#D2RAIM z#SNjD6OJUHGF&LZKz3^R6t&5Zl2B>a6N=k4t#qf=k&>Xn_=Ixn!i1kUq-I#kku}+2{*_-@g6Luijlm`L zr`4&NG6nnC_A}n!vq<}bHGrYssY1=5H?L*P?_{4oi;!9066{}5j3bV@@Dm)b%Z+w6 z5ZVdHhv7p2cHaF$`VF26`+~NX*DoF-?c|O>Iz=2HqM1-e3h#{D-(!#J9Hxpm5d;dL zUs>yh2!^a(pYc9X!vovn#V3|d8ZAJd9E(SD6uO2&Erv6h>;w*UAS;da$AZc-H$Ie-A;_#z89Om#L z!4m&@yTY*Msn5nJiSmdZMYQl~Z@2jvDC&8)cvX%o1A%Ju9dq(hb+*+G!+NYG8;;Cu8tX1{A>wEu8FQhvelWX z4U4WVDCn0}j%CyJrNLt}Al`CjNhl80qj zrJZ0IP%P5(IUnF%mjyCH<#CId{pFFuEVO9P(H{4*U=iZnScfA>{JMVN;sn2_HH)t@ z5xq&Icax%?4U@tpL${6m8KkIimDg}Evan%Sq>Nc2hZX7rpJRHX-r1`$#hI;v^P@Ho zc%B1<2;!K14kcvzw5#NzBTKu&I3l94iR`*W&DSge}Syxy+T%~s=2sI zrb+m~@JW&x=P*u(EtR2Mw)0N+xfg@ofdfwZLEN3pSJbQ;p!z2h)wLT`C_edQ^1kTl zdn4t(4V*&8cKoyVOAxnYJvIZI_CvKc6k*qSrA?{G>MlarLVQ)ztuw;BI;l8=rf-!w ze5rbXeNqWHy0C|JN*D#qj*O8FB~$%L3#2OXCw6c}CR8<0pu?=fw!F(Ki_P_szV^ci zX8*IOc(GKlZU8ywlB;Z~4=;FTmL1Pp@kB4VG-wb{5M^_n(4vT=o2tRxy&AvetJmhx z<)SG)WO}4DHKu15xMZd7P+J{t1glxq0GZ!2zXKVP?CeWIJ-V*d7r(wpPp3Q4ccZzh zhkCbhPe*!18C37=vtGxP`{CS}sn_!dL71*g9N9xa7qGqO33xj7JLG5QbOXdwiPeBeBDXhGDqvFRjgJb<^W$~t9 zb87NK7|HD6^}X|WKrl2#i-uR;yG|*cjd-QK`{VMW{ZFH6NuZAP`t^OQJ8+;Qq2a6q zhX-+lAfVOXf7R8X~qP!3p#qz`h1dULUpW*oCHay<@dmC&}0J@yi%m= ze1Q%hjGPXlSJGYR|59Z*1&aHFRDw5Fi(PLo`^Lxuz!Q(Ob8$Oo4pFVeopO&8V710& zVAdgmUYiFIm6|}l<3lWjG&lkk2wSTXw2af1xVJ00UhN3z5hw#`HSz#>*EE5qTVKmg zKugED(!!5GF2Gi!rW%W%X?ht4WZg~*X{VcjD ztJp1y8K3MBjF8ULn~p~Mq+Q>MF~MBT9gjXTZ-bP4;OFEcw(}_}R5e6!0x1v5r;^jp z$(&2%U&88Ow1KvQ9L>m`nz#o!%j^59FJrGn;?wGCi{D;kE^{6J4JrFnYDw%QCWqpO zR=%u~zn-vai!gIWZ_ZW0_K;FqUL2 zV|njU=Xu^g-ap?y<5Odr-@RS?b=}vubF{79?*qLZYlk~goP)ldaZ&{mz&`bCv07Vi zGF5IGLkcm;{l7Uw;hDrs6`1{taYEmR+7@<;vDS>dF`JbygXEs~g^WKL{b5CFrPQ`%Sp0LbY?<-kBlc z=;4TTY{=svk3Q)e-@R=ht~D8Ar=uO@z!)8gdYo8nbj=~9<`jrFc}9%T7l`J>V|Cg- zjJnqxDuC&tN`70kN5~N`#u=^g6$fp|a%K+~REh}yn$^z)!VX=dovnvz0pU;XtFMd9 zFgdQh{@Ce?Wod%{SOLxSJE%^zX16!>#Yz*gXfZxm)}es7B@p~$Xi^SeFX&$ z0+KD}?ljn6gmYJDs;7S)DQa&I1zqWYdvNCjVJ`{XD?h&B0^-{Rb;h89R95;(|cmUlXoYvsm-<^k|&Cqq^+j$b)v6n^Ce%xhJqJ z>3G?(Fc7qVZ5yu`dp5tu%c_1{uMfr!3^bYHk>Z0t`EX|9Aj?8~l%U0s)m}gSw8oqv zu$vICiALtgy=L=-fVa=Hm%WYH3vz8bBBJzf^r3sc zgbR{qO_G0>!lrL`PF3v~kfX`FLHjnO&(j+1d?&;0tl6UEkn9%kH6qH6cTZ-+EjtZEt8K5Ro+>jar8lFKjZXxqe#n9y!B?qOu$GKg*Mhg>bw_J*?zoXQaCciyxjDHnbWRsBDlBcHli*m*B1ZFfoZR@X zb+hi^<1ZHDN|uiwjyi9TsB5<#xM5s7vF9Y1agKXg&{4pVgS=k9)P1P<>7VPS+L0uq z*rUP6tsak`5BZ~tKpSA&q&*%IH#FF>7R}I98r0LetkcmTx369Ko!_nJ1%^DirzS7B z9AWPNBab$Eml#~vH?O{Tt7MKruH*i$zUxN8wUs1D^ms8oeZ=1x;vKQ669o}=XG*tu z$ZDXu09yUvXyg2c*ult`oq9?sdx)7^;9}03!Nc91#qKl5zirz1+xfwi)XHrabzR#Ws+&H1w+231$LGy04LMC%nm*7Wc)AKAEeMVb$C z7T#RHw+A0G3PzBP>piH2%4w6Hj2Y)sKlpRdHh+(Q+3+cOMVzS1`DWt~xkdQO=6-20 zqx>I6G_k#^E!;MiM5yi?Mu3KL%Ya2Hmh8NRetiFL+u!e=vvn8ltN`e5f_FJxKY3;;{BNAA@WQ&u1u+62^sZh`2DPnqb#Lt@$W#}_P+#h zuaLD*kCElbQ<+<1pA5WcZ|v-F%HE<88WbN#p%2Q7_FWB6m)X+N1a7XqR}co*k2;Ee z=OG-oQ%fesY9#od)*#k=zZ(w4>o2@oW z!otTjn=8x7^v$~Uy0C}r1z{f+%su*ippt>wk6-Of^G>r6t!d9q14HFZ9J(iqc^|JB zHJeQ5YFx1?2K7@#b6Jz1v<2|;&x`$hSiPcNl|bnF6`Q8n8pEQ4OJ1IPFXrz{UTk=f zH>A$)=xs(U!8650p#Fi5Y6U-N;+L!{a$+=t` z8&Y2SV57G#9>7S+Q0A@$eHc6XO%O8sQ(->X$?*@$rxeE}p`6V0K213#IAge?R;-BK zKAJp5Ykh}m5*KD$U=#9U2!@r3UXYk?_X&x99p`gH(oKqjDJhBIAos18$#G2_+!nS{ zUHu3I`cy^iqsD{x|4Mf~&u)>wBfb38=y+LPj>-D%f${JHVIJQT^1@Z}Ri(5~k-Mjy zT85gq$_|xrv>eWKWK>kF34`2oqNmSL=h{46n^m^9HK1?&E-`8_D$b1@ltB)6!%p?8 zUhY>Oq&i{JZblV~hW-4=_s;i9*m&6b_P{GSUrbch1cg*!q+93g+(hV%B6wI6i4^SQGvP~FAqVeD}>L$=B1bN zf_S_#Ec~R~LCOJ&8Bwn|!XrocOFd#n0o@IkgvP*pOobDapZ=60kJJx@Uy!J%fATYN zD#VLCTazQkn|#i%Pc@f-%PR6_Wz=w)uB7x%_(gFF(%%;FYsy zL8+MT}{{{S_Zpz890(^Gr`ika9@S0V^!$Df5z$7 z#HYki^G+e`lG%(;T=G4QWy_M*pHp={hW}`6CFYeEGn%D}Hpz)*LsLGc88-@Hx3x1o z(UTrIqv{vd#$i@vlAk8WiZt43E(yybaxw>Rj5a+0p{d6_zv_Va@0-=fqXM{U0TlFGBU(kv7oJ(^1tjiyL1KqEHByNXD8}`g<)Ftx!a6!Z2o|86Zf%dEG#2a-H zgQ5xni8aE$qE%cgxADu@`u=!lV(hh$_87y;LR{?vya1rN(Nym-d0OKHG;YX!43m z(chbXM05gXF}P=s?)q5X$$n$Kxbp3GoiU#CW1hFRDw z#j2CJ;TmRws5+rHpO~Zji_@T)BmUo5+}}(cOwbw&3C|#hvC22+5rF&TRf!1+CL4@t zRjxPTuRVYHG;gRV_P7cxr*4OZu2htvH74%K@S5*$M>&c+{Jayrc1V{_~d{|*+%*N~O*T%3Ixw_b06zvCYk+fPQ zPeaNs)}EP;)Nc|UIXMZMaW-o>cDtI4JS`AzKrCj%Z2R=_$?^MxNZ5S)zVs59(UEGPTMY&n#GR$8Jtr&3PvZthf==Lw<^b`{-MVJ`zDnrWNy)w587Ll;wtrRD$iE< z;aEK#KIE)0gUR=<*c8Q|s6#>a7G{3F!G;tW{@q>yscq=<8Pun(SryQ2PXz8&Nq}0zHNCDzsw}D#9v`s)iTW+ zt?};G8-8=I=Wf{*3h7BCjilCGTUrA(YwRHv^Ooh~w}L5$5(*Zqca@j_aP%Sv24wBU z)P=X?ao=klo@PJO%hV}N;yow7yAHMvMJCXb&&B86B%1$x`m=6FV2D?Mas%DYzW7X8 z*gK_hQlUgV%%s0QBo0_ZNU||J-gJ^hOW*QsK&n&`gK<-{a~(QmT)QwmO24!t68gBZ z04CdAR18M2{hch1OE{;oe3oKtzP74c7hks%-K$n^u|_3EV3!Q$JdD=w5KGF#HZG`( zq#fOG>RXY6agVk&`hi;@#1Y&)mJhqm>FWuoP@!XNm)rNi&>f888MO^Qca|7zr|#WJ znz>4b8i-!6;TpYil$Wn{-d_j-_XD&zPr4nac)PzjGuZkA1>$ps!E$vw$9#FJn)2Wh zx78Ar+5!W%$a5!T_U_1a@g)wADk>kv^Wf$BYC#FoiH(&@S2FiQ7fpxT(~yKS^> zlHN;X2gMMdh)A!^W9U@<@rGE}?{z9eYOXga_T)Zpn-2tJ81_cPIfR$)-FBH^T$rZ zM4vAj_U2;5_6i1q3Oc1}GwOq7i$12SN%eW^OC*>h!;@1SiK;&Kpd2wB0_u!31 z2Xc5TBU8ESc42sX#T!w*WcNE`I5 z+Y6?3)73%isCz^w`Oml!P#gNP9scxZb@ruHc;&Tntv)C)44_JW%d_T6UHB3RIoiyx z*%eBy4Ks@9BCu|(G$QtA+{tcMF=-s+Jju6=l*83mnXX`}k!;)y+*Vd&y z#(>ahY=#6v;ty|RJX}f00~aUU7=43mkK(Uo{AoN_nsrZO2?AUZ;_Jssuu;AKkza!R zcPWZ$H;AyP0XYb!pvb4C4d!^M7dLR9T&Hq0Axy|$I3N@|Gf zr_tQSbvkqQE)}--uWTS-epHg_o(`2 zBQoE{p{l~X%OMVL=pKWu8-5oYWVXcEKqfILA%&mGT^%1%ewXiD=>M6Jl2X%{S6W;* zn`$DXtoL>8RB}z%mEluK=PYJN%1ao`*1N7)4~d=$t-X6SkG#q2&~9j9jX|nt@+cr0 zr0$zlBD=T@*A2bc7&R`df9SE0gi}vy>_?PP*Erteam$>Jf)tNBZFhzhS-XD6YWD9s zgtNz)#`{fq5250QlHc#5QFV`&)jap^U2S>D|D)hVI9n_bw9db+C+(Jacgb)?dF~;j z&`adX$DikS4mX(gJ7vLX(B(j^B-T}8Qqm1xGBzQ{o_KHPTF&X2PFPnGzpK;=;ECh_I?Vds{9^M`Hap(9 zX&2zqFRpLQ#P?aFZavKsFTQy-*dRgNpN9}MP-rKJI0P+qp-K!jddK2tq~6cvT<+LR z`g^?+cL}wcTXJyw3?&VJzpXae31fd8;Q_TYJJa+K{}#3SzVB{Wf;c+I0uxtCUuhF) zPyiU--cSrIAm5X7^?a2zdq{{u)+Z-NzOJ?v)OBZ3m>fPF|_BZ^dYS`kSY1*=?j9fFP~+02mU#-6b&z^jzpvkOVqm@Xh6pBl?0r{-70v zo5wD3XCB;!Z-isQS)LHMui2!wb7u-6Ue(KzNDL`P;57SVcIy0>?kD2tEi1)Ub$toi z$u9fJT-@yGcE%0%vTQ=1lI)*r^3$xnkZjfpb~-fb7FC{7n#4;zJ1qMzsq^Z6utBvh z`Ss%H1ZrN5MQC||JgQT#Lj@Odnq$FB@m2n$LcDHAHPINCb=u-|xu4wSj&b5&piWpE zZHLBW^C0RWWN3_u4Z&fkZL)E2OmQ_#Uk~&FgB)gAtaQ);`_}Vb-v^x_zEUYGMP zDH`{tq%gzKWyk0A(8T<`s_-%n@bTbr7pfm2$P=^pl%SWfeBJUW!VhiRnD+{0# z@+$iFAJS^C*{hzs3Ca(!!pP6*q?W1xMbvaW{$rB+9WVwu$3%yvO3J1C`H+-KrV%8{ zf_xDC+D)MBXNoww|4@=XZAd-6%qD&5a0}ESJ>~Sa|NMTveF^uvU z-*9+CMFP=gSG&hNgFNFuP}(F?1cs^?8+RFeajc<``TJ+$tr1Y6gA=N;Gj!-MTN@|n zvUNB!i?DPr_-`=pgu%Dwc2#w(QSeK+UE;Ih&5yZy-1c|hOE}y%xu4~}Fj{?SoKuq@ zAw$$4h7o;Q)NB&W<@Oh)gK6VMbVBqlcW@EZoX&K{KE!8%@{VQ8wA2A=3~i6c zzbyCl)%F-I zm1JkzIl(M2viL=vO!e6B?YF2B{*Q9yTo{suwhoTkj`6zeNc7y)K6AUhB!!+v20(OS zdynv%D8E~|GvJw9=a5bTpyWK6lsWkA{vhgd#|1~_uD(xTQws%0!vy?9O~zwK-k3NJ ztA|x$>YZ}oPsIHr_BUiu7h}(Zn7?*(I`wkL1EK<9bBQhb6guIYAwq$Fly?-m0h520 zp3aZxGYM~3(?*GUnc(N3$QRl`+2~OWh!poTVxJ`_Hej?Y&V$zmKy7K*mDO)UrF`=h z&9bGHZR&o#YLXD=&bY4tu!0JJrYKo~Q=8I-Ic`lXQt1A3`;^juOmVdWZ^f}8wJhVv zz&CIqC)nlsSNC5bdL+}|^&{=~Zs+D~Os&45G z5Vw<*`$BX&)`)=xb@@-s-m7_Y`ApX323x7}AL)KmU#%$C6Zv$r<0J7`%kKlIq%N#ELWJy1LQ* zz*}OJ=Ox_zDyMY(%%?6k#*V7eYX(Z=Jg;>Gi*?=paM;w4Z#@}I!Jni3+@^#2L@^nedjJ9ORo-3ixQgGJXS zKvb{>{L%Kbr@X*hX`*`OzL`D5SHiUyZhOb6Q60-`hn)b<-Av5P zs{B>+I6$ch$(W5l{{s)Csj1mrW2VRjFQwc|xbRx|rD(3N70ruI08z~&ahc8P-p9+0 z09tYkpoOWck3bO$2D1-Jygj)c7sqiIBiZh(_Ncr95D>NK`kg7H;nyuGPf)#0ney+8~^BYmWRBMH8`L4X>dqspDy6SHSRO`kY(Ou%s z`g9-oanMk@U0}hdesiTXpt)`J#r67u1jG(QC_%Jt68a59L!E{!EVHQna4uDB$YNu3 zjBHa;fGWo7cAbM<_>gy@(VpYbP^SN|wP)KVH8Dqz#n!8K=$MKQ>D<88(4Bb)AC&Ul zFIV0HK$XqS3BSG`0D{yFfMm`OE%71B8mZ}JEkC-1{RN(g7k?)(Wq;2fen))Wa^C<| zZ8~Fke@)Y!X9`00Y1b?*d)c*jgIwvL9lpDo^Xj9nVC{*%hlv4Db!m92`j3yRJ_A~x zTDO06znY2D2rpaf6b=*ukWRP$`I{rL^Hl5lCpIG60LsYUuzYA_6`-1ZsRl4xm`8c* zRX5-8%R64ksD9O}?(rjsvA)!ov$yS znGp$gc~s35OU{+kfO1bL-nx=e%`F<1oH_Wz`jQ#T9$`Ly3 z5V51|%rm`(<&cXfbRG1UUh--X_Ai zGm)Qm0D4J(GG{Li6!>%BtlorkkI5p8dl*2g_6s{t&6QS`sS zfDGQ(h+x3t#u{>;23d3Oe&NO!k38jqH}NLX+R?k7^wX|6VF4MlfB_X_Wa{`oC_}ki zM3+UiSR%Tmqv&t#%}3s)iBgp z8UTit_D3~!^|qx6xVHaQcde!NJuT++Gk#J1FtxIMSKZPf%s*qsK4NE0s<-}MWXwII zXF$8%+1KyjKnBe*Hv+m++Gw^c#@(?hQ>vFAc(6}czjCK9d*@}N(vx`n(761gND_};icOntncL0QE ztFp5LV|+xt48o4bOW70v4QscN(Xvko3F%$fK5hc?V%W#ae0P>w*LVABc}`uW08p-+ zADL%m5ggx%lG}7Ynf?0(KVTG~{NwN|#r zJo?1^5Xel|bOYn_D>^``E4+@>{uxMi>PJ0Mn(rcBEG`Y)FlwgN z%>V#3$~!@yFF;Iw*<~!vzL(7TA~?PA?p`dg6)N(KnN}EjEA5o{#N@Y=%yUvADS8s1 zOMA591E!VYeSZWKsG!UP*6 zzmf;6^aCiJJM-oBis9QEaYn0bRW~qg!|y*Sx8l==*~cX@)Ls8aGpod%fz?d#EzUPl zoE|9UfCVcm5bIJUjbz)~&mXALN1ew)S9`vXR60a=J{DAoW1=Dh$J$s#Q0=a`t!MSy zFSC8;R}aTXzr3Q?tsSF>^6RQQkRWcT$K)l`H@|FER}dru&;bQGKaN#G=WkJY2IS7H z=^$26lq%!K?MoCv!shIEe$)D)ti-8R5{mm$)M2;%xd4V)i4OyUF)dPQt^%Op z*tRgn4`Z6;?5AkaT~9tm31EBW8M%h|F-0se zb@EA>$ADoR!BV&RcQ+`Sm;Y4${SOp(Jf4GyxM#AW$+-m2aG^S=ODZZQ0tt}}e%4S~ z&Og6>yx~7&!Tb@O-(b=JDoh(#k&oiraL#8Nb3O(CzAzaZc%NCOQmv1Cy{5`%cdBk z+qXRD)D-=Mzdkr+58e_JSAwY=8-j7%)ovxgft=md2}JvaM*wE$WF32}b|!seKA zXL3R09OiMofN*p{v*l^BL}-HML`X@hfG}3PnDMH$k-3x1SIz}Y8+2mqn`(MTGIJjW zclNEA{SUtxpUJ~8blsqg>Bu={^E1L$J6|J^w7mH!WenyMT_z{LReT<0JAlX0CN_y*Y@ zx&P;J1PT@pFq;_4szM-QQ5HBAqnQWD5j}z9^fBg3S-UG-z4b{LnwIY{M=zN5P_x8%I<@> ziusOk+J|o^=N5WN3vMIQ=(#`td-~hU9kVz++$Ht2dF^BuZm6Gb$BnEL8NgjSi^^f; zVzUtt(r;~fL@vIPAVB(UfBJ{zV!5%Rx*aZrP1OrJq3j!%buwW>PYI$!WkE&3H+VNZ z>~fREi=(?qJYt`HK$Zapy!yneEFx^O?@20x!jHv^UH4r=a8P`y1W}!i3Zet{74owI zVGK3_J%6bfBFc-=h70M--M(Tzk^G~IU}8*SkksUiko#9W)F!2-2uu}8_=VNF%4+tPSr093f_tx4V?<{kYdEWmKyB&yv9YF}fLHZYJ;6fE4G)m;#1<6r< z;L{3i?h5z{R+;H|swNM_!H%9~M$>?lOZ&}J0@BD}XarQ2Eeg7qN~o;wb*1_fZxYWF z5kpq6W;6PtmIM;x9x+7{I@E&Sj~Rh+Nxzv405HfT<`-1ThtTxH)!tje@F5j=@jnhL74{&eL~7)9~Dl6HXxDIaxQInL-NbOb={$@ zKBx+~l%R*9c5K<>eoZ^|_q5fo>1@O9!&DEd%Ag{wX?=#6Y%U?#;pZg_72`=uT#wI2j%A;61Y!(gJQqsRzy;T`7g8l_Q-FT%C$$NP+`8=_u*= ziFCd?a*er4@wMB(1>u|yAxOsekFR?a!2tOj;`^a(btSV-_&W3w&K0#v>y5v@PdrrT z--q%2Bogx&@1xrR@(x5x_5nHe=H@` z?=20}MXY#H(3DVp+aDfS?HWKm^F+}0fQS~(bn2N~Ss8y#Y7yNyUUhCc^1DdG{?<%l ze{IcN0n%v-zhPt%)N(O*#_c*n;T*Cz4o?8`N)#~*cZK#r9N60++dQLU$f$ae48km2 z1!Ak)K~fdYAdr|74lV;7tQC~vISkkzACP2 zuQdXl0UqAOr~M6B;(*D-kr?)HuFOQjbQh^marJVSR=#%reP9LdLfX8OFixhFqe&Flrhl|52cL-`yNDNyAR0}fvFDax{e|Zvz zCQ2a`s%!@SM87bG7{%aE%!erLQ-uGoh_-lf$cY=8;YSdWVxOHT<`fpkEK(@%No0zL zNodc)0g4-C8E;iGIZ=;&PHZD={@JtPbiqe|ZN1Ni9kq&}@C|K0&EkK>oGN-U`!|`` zXBUZZvx`8kvk&)?#1#FI7j%BI$;RXD1dchIb&gCVxQ9us8t1 zn|Ua6WHCvbT?9J(7_XIe{FjY1`P(LQS41eBMurO_Ku#qFamQVUWM??ddj4|pd2cV* z@Q`LRA)R9R?C0UvKryG4JTjaQ!L8TPj{N*=IIIP=Dn}ek(rj)wd$r&*G_!)JzNHh& z+7S6eT{M}XVJXuu*-eVaa!MWF;L%_-?Js7o;+Hfr2fv2~#)nlZu&o4`!n^0eF^)wB=ui^tP-lFKH!twct7(zw%j zR1fmQCVbrRaF)dr`~NUJ ziKMeCKdi{m0;Tb?kXL|`;xAW`k`$b8g;6N zbZ70r%hGO=0ahC-sMirdE0DZa(ipANVF7MXx+E!o9r@==*hkBf-Ze$vBfep^`_flj z>9-JchY>cls^IyCo2&?hhR8SBB_ixYGF7K|5SOsFrG@Pe@naqZdt7BY#f$brRvM`F zVmE)TDt6yHI-~&M7?9WscOP@Rbr zh!9;JQ7oy2PgTh3fNE`|S(%xp*7d?C8M-=$AL9pbuGpE<&PFVcJD0}sv;*SH`J|Rt zlWNyt;an|d!oZmZXW9f|N_{009cf{Zd0c`yBR{{ur`3N1*}u6;eb4x!HeQx&h!*=c z6l7^J62IxgJ~@1&8HB)pX}s?*edZxiPOGuG?KAYK42AD<(G6q-B5x35wX3VNA&(77^q zmp1X`L;4Taft7LDQGsHm-#z{m@v$BU(wK8aB|1}l4PvN>bb<_INb4gR9syU5#e0>m zSmJ!(@Y74e&Ly*FU8#pS8~(1SsHHJP-Puuo$9#`f$uAGMdpcnj4|uXYW)XqOLX=4) z&ix!Q@QBu!-hOdhNm%nzZcYB=;Zcy*iFz;kQWOAnmT@eMRb7xkuPLX!Z2u`nlT`FO z|5fuQ($}$P!=LC=QfQ2!su9$xxvG_O!-t&j$*&twppMgct8$>9D!WKtimTm(Mi0!C zc|3RuIO%>#SEgC6UUHN#)r9Wes)F*Fr&PhQ+_=_x;6N0IGZpu!CbG?%Gd6#l+-|DZ z=}OH7_Z*YOoG$bXK2Q3awp-3HUB88>zNh1P1aYW7!@ZS2nWv4Is~imF{>GUJT04%5 z{-!ErCRO>r#E;gEw>J+N<2rGDdL0L8@qMIJoCj8-G|WZo{MP57#z@;>me1x~a#$X3ZcWi8Vjy11LKYBSOEFD%H zoLMc4(@#*h)AwhTguE48(j zV_{BnrVuby529KYI0IM41e`f2|Hc_*5(?qKBhc1ZJJ?h(fK|cCVW_}HzJu{*2R_9i zaQW1pr~q6IOI(CbN1)he0MttiA-*RBIb!0xNiHCL4onf_eLo}T!ZD4of9ht~A(ik> z-Hs>eE27L!K@ahlOIQ0~Hz3mRZFQ7wf!Vi&ymx|JpkDWUtaCVQTgd8gg9K8GC7Vqd zM(-xY6x7M1rU`M?$`4AyHWi7iL-do0F4Q|j3nCv*rgVKU3yUEBAU-7GlG+nv75zMa z`&H4N}SiRx-Y z{|SXGe?&rFlojN@pN+~nmpiIeipvHR{Vv99MS|MfkjMPn+SCXgH%1%J1x#EI=~I%< z=H4~$Q&zGl(Z#{j`^;ck$Q1wml75`Nhk$d_W{;YJ9fs4rz4UC)qU6eky#)~D!N(5p z8wbh`hCb|n;lD|m=se?tcDF}V|EaTm8cD4<5e~I#nY3c~N9*ZKlR{6TxO+)7#nouS zW=?N>)BGbm6jAM^<9Q5m4YhVm9(r4w3&=#4^X$@--rLor^Jh^$|B^Ve1b#)a=k77> z{5>nQ8S0aY0!X2Ee&1k@b7r;X<>v9~}; zT-&|wDCWF?plzL3$pkB~<#tf@%g@$J4O!CIv}Rr^MmYj-LuN z+~mo(+YB&Md#lrxJ^4%5WH9$6y#$|zLdLP{!uud{Ivr7*T&15BSJC>WP8TVzN;C0h zHXmfUwi_b-<>2iw>a&_MFJV#6(479=?GE}pGbx8m0Vr74+3AG~-L3vTe-xUWNeqm~ zYm&>eI2*7DnXP5AP!$~BD)J@!I)7Klyb@7>_!jYTYi~>xCJHOm=}@E%bLVbr-Y~0w z_Uou7FH2b^iWisTHx7QiM774A#aiO*q!>;WnFQl=@-0yh@oQK(RtaY<<<&FNMQSeD z3@7doj}qMpK@QDpD)4zI6yWYfloOhvqen)OsLG-@U(ZcAMT~pth?67AA|q9@x8HsD z^S^r~;b*Zq$0$2Mn+_&yj+@8XLK}qn58U9IxDup27XMOv4MPa>v-`^%hPWg6HSlSz z;%e)he;do_(a}o(oK-yN6&QJUfY^tNK245V;6Be;_LSf(;LGuAce(bpo#}{Km~W`S zvMAGrt`UgfRfVdGA&0-ag&65|7-Pk-me?67(HA-Fz%x7RLfs$%S_@!Zg!F=7h2mD~%XX94#XcJl8)PR_(ueru)04)$1uc>ltf3O9>ByH^S9BJ1i|M=8IyaIDeXdk%gaYq| zO#b}AB*8UVC|#LZ0RRF&>rAtA@aZH@5-aCIC4;I6mE}VeJN>VN*~BG5-kVvMJJdn( z7mavoNaTf1#}DFj;!Sgz9@Od*;tuTVB}RtW=aHnYMKOG?|h>K z$mTh$HF)bx=%D{v;_~c`s88Oyr~^u^xG#5fC5075L;7w}o&Dn*VjkjSaZi&*6s5dA zPd~4DoFk2zj>CsZc~Oj?Pnci8*b5;nO^<$##4;3DA8gtEa@yUGkuwYuKu0E`Jt64N zwa^oep2>gH4BYsd#FjmPnr93{iHd|xr^tUQO7W^${Zl)BwdIpyPP$$5)kpGaj5kB~ zee}uWK7*N5F7UU?JnwxzW{7<9^4ikw8{({clr47tH2Hxvx>0RzozNJ#Beu|lbiz=? z^x2awPpb^?u&c6<9^P=lh)le0>XuSD9*RQA71j?`NgX%WEa(@sf}}ytTWh2dW=lq4Sk5G#7VYpcEIzV# zu&Ry&$R}^a$^(3ZED~I{XNY}1E5A9tQ)xP$GJWNH+)HzecLISALw!n|$Eqw1;_((Z zJt+$^3i?KIb*e;o)0d*)xL2as)*5y?nIfs%A++|$dViAsnoQ{gu{4jj9pbt!`eo_B zwkoQxgs{af&oL^FtSdFfuYrt(n9~&<(g*K3e|@Kr6}pGwD)S0~QWqz*d`5;4WQ`HY zBB&J7EIL2QAyzKw+Ya&J>cu{*Sj-1vGfFz)1$Q5@mvrXn zcKnmYTO?k*h37c06S*7+hf75wj2@Sr{>F5PY*dL)_+cUUHoJBf~rB|nx zc6yc80*xoHud$Q^iE*VGt835o$s&0(-%UIw=17H?k{GQ(oe~vEG24XWe%2 zI7?1ngX4fFfnCQv(D-yz93AU-c$t&(FKOZ|3h40dp$)wx8F`~hyCVp8-HtKhtEBQj zy;<7qYcDQ6MLK=Nk4hkwiKJ$;m0>z4HFnJ{q7&*ytA_=CD{?j5POhpws1C3GM9>>+OBbIf>w3HSV=LbSH(hi z#g{KT&XBe-7?B);;5Ba+em0>rg6K86at`E%5W?1c)}FT^rT=BXS;y*<$wm;uP~~no zqIwX-6bft9L=Ti*akFl7(OJ0u3UkiIcNZzFJbUj!!$G z|2h5crAc<;l9-bTZHp8tI?D5nd%GaJ`WH>?7YsBt;%~Qie$^!M@7g{Mu+;Iir^RgY zx!YvAQprTNq%+^%;<%-T`kDg*CI-grl5VZN2h}??9gDX+5yVYGkh2mmqFS;_YT2qb zo3t%ig>qT?_!O}sn=i9107S~>^|jY6;>CjRN$iS#(IgVy>OjMZ`+`;|lqhS!^Lu(~ z3dod_;mkv%bb>=KDMOGqH1cu>8!;^D`f?}KfnC?cTUn!ct$`FOpbEQP{>&#gI9}_> zXz6M$v+fb-(|3TX{hbk@RogusAyEYM34sS^i&Mi{NO4SpY4CJu<#y|K%-ZxlB^ckL zMiJC(F|tnyk`~9U4aHD7`8B#(@jq}OItG`FN zl^{o17Gc(Z(c(&ix~S~*Z9|A1P6D2FvYxw5U z67{kh>@D!J1cLUzqG4FSJw8e9 zA&L>9NoQv5m1gEm&a_2C+hO6LJ5EvGiDT|S_PsI%b5elMT!#?YGT^Cuu+#xqEjN-{R z-2?=Yj|n|prI3&6;(ulsvMAz-TxP2RC6R1L5DZ8?d>uZ6H7glOc5h#`lUnL7ysWbq zrSmHfl^zEyQxH%BVIU#RFg`hk~B#d>g%MPl96ZT zmHwrm5FcEjy5!a;lEmHb%2JdtUJspS;ev-lfGNN|RJL?T$k{O-U+%8h^08%PmHoV$;wsY7uq%2ye$f1ZO6{C~Fz<$v#HTPBmxv!??pz*|8b7a5 z0J2M&f0#DK(=mubQvX{To!*Od>cMX;np2g58-%OH0zWf^5On6N=E`NtDBkJ>s6B~u%z<^^qKd8I9riVkQv2lJT zEzfL5VodF7E&aDu9fwI1MU$JZx4phkE&!J@NweDlRtHMEOTw-%!BZgDdq|8@XXC;e z^VWoOD}{X>iFimRox z;fjmj*?ydJA;+wju0MT+^^#hujfaL{s5JkEOj$`}+m+&bIqd?$qN8mkKfE@pH$U_gQ^TtLgIb9Pu@A!sb!m)AB0$U+Gc6pt?vz5*h`n zWF=07>*|!5mV3M>wE_h53}^<#p~NO|B)i>KyyYyr>3FSA5@G%Imw9sR50U%2YdDQ0 z`cfgZ^cwwE*a7~FZt!*j(?Bo+DZ7OOS0TGr5{|ZZ`e>UzbmJdoJLAo#mof}YyzV?D z%%J>KzlPmEUF8{QcweuBf=_c6SbYT_f$U(#q$({$DgWTD3aB66g1TrPno%{MJomB& z#a&;IcVFM-8IwRj#r;ot%hgKvycA7PooES94k31vD#9Z)^o!-;TCBbdfaX zd4fPGhVzAK(v7mn#%UM>7Cm^XM$9S55#ANO$_#x(?h2o@yhY_z zn(2n^M@yzzd`xw?7Z;K#9KY--}w?pnka~D%#v!?TR@N1Gak5m zn^6u@L>yz81r4uYawa9jkwWvZCGPDbs;5v9R;e-j)P|m9CZ*j?5!K=nQe;u9;#$MN zW@p*|!_=S0L;1e%t2E zLs`a7$i9r-_nPPH^M3q(kB2|{Lmu~io!509$9bH`dEM|TDj-rn8tHM;u#Y;~b}irj zKQBOqv*Ea+2~q(jLeXuJvRyV$rRRJmk=0m9`g8z&){g}JOSwyqn_gD7lk!PE>OEs# z!L0TPXUmc-(VOX`bjCNO+Xn@gfG!II0DWiC+a1+2#s^Fc_i=a0R2x*&AS>V`1N_y@uSIGR-kyvK9+;7&AY%y zci+5`Rf(_5Cc@gt1n;+q$P7@!*I)rcD?Ov~Z}fTs43P9Cy+rxW-D^gA*S>kds{UVv z@GXG&c>#mn@lK-Dxofo4-a$0OJ+Rneh{Eqvw zFu%zB*}d+4AwyAn`!b*TF)H*QIr?_eesg!dGD3^2QA5r7--o0%qxLk~ZfbuxM`}`# zi`gvj#C+i^zpy^jtpIsSAR_Y(gil$1vx7Ec6wo1u$=UCqCV#TZ0ueh)K-Z7r zWfX=^daG*bgEV?2c#2sPRGmfUph0XnTI_hY@S}3R^EWR^;5D+y$W2JE2-4_kfwTIy zhaa2z68joi5ASU+#ffhB<`8o_lmfVT3P8Yfv~&5bpHRer39mB(s@q8)W(31CZZ?O{ zm_Fq={Pv2Rz(btjn~?ha%T0Ye&CgduFD4YDd6kdXWuR8u6M4k4r{s!!%4;4`qG^BW z7LBoj^n|@mhbJ?$u$~gyGF0!l(e!C#nbOy$$S;D69=H;G#zM9^3v!3#FabdtqZDE2 zHu2LpMsAa@=6sc(xGr5*nv^oFSeYM+;lJ8+SAsdC#2w zsauw)gO;aeCOmDg|3C^{T3r=GUi5a=++Y!T`{ta`xvO!pWVyM+enEKONmhdVmxBx+sAP=UhZ}Q=^+bB6-2rG<*^X=r@bS7qM6mhw{n&|BgvGg zS9S19otc6;Li$>oVjGlP>bc6~arECZxYrWHCEGZx!zDN7w)Dl6HgjJc&Dw18`L9QO z^lrC#nDsfQTC$D%5;BLgbm6ZyTEQw7D&3jycNI^2G}9Ty%fQX_kGfa$jd?fWI2)qQ zYSRy%m}EHzCSoU*P@++{=6THu@z=+QMC!@M!X+0h*%9zXs7v9(GOMsRhfaVpef9$SEM0<~d_>{b? zX6`+tm3+N1-2rRzTicr9P;Z(i>VGei_mYm{u5H|ul?8K1g{9AScJoGLdm_?G&BZ#r zkRO?&RNB4U>o6}y%}bFCbAjm_cm@qhwokp(FZAjbndC=_mM;E&{t@%Fo&Qj~d51CJ z{9Y2o=DXECv+Bp|S_zfzr$6VPdFj1ofD#rmpfm0t<dvkKCWX_ZEzhc+c*#@Y`xq+EFGZzX*V z710bJ?7Jd|T*&Z!2VRA3{S9VYdpm6$*hwF#X^K7*x^2How;%BT_XY#y;%{M2F=YEr zK{ssu)0JBy+j;%6B?xYu9y$N*td?lZne`j4Ql+uaXe3zne)}b*WN5HOC+tR3wHvw}Cx6ZN4r&3@F@v>R*TiKsY~&)OD2+dK(5!WdHz_FQ z-hNyZ>)U_*+%Dbyqs=@21;F~@3X96!>!oknh9|sFrdViJyiY!PF}BKIvyMDxNEqX= zo<<_6$a~OCu0NLS>Ng(rbq7I9dpF;4uoLc}eXtf;KX9VZfn(gh0G5($Czt@$DvAXs z^SzCem2EppthejX#NlzSC`A#(xNBb=z14+v772PR-BqgE0tcVeJEfjT8xaX|@4KiV zy&iufE5+5i<$NgR3HOt3&9qxL%7cPpsxHw~fAyUC?*O+Y8nY<-sGV~T-2N5SIn5I$ zS(z61M7k~U=Gka!*JE)$xJBfZdc~&Zoq|RcWbgaC-fnX%XZ_&S7c=P-QVVWngpEEn zWb&38+Ta8SB@H=yb<%oLT;)s$g${lPXKdydw(Lr?9^z)()A#uevD%-en5>sQ+PWyI ziSaj64t%&xq7;i=t@TJ*k^60<^T0oT{l@>Et0nc_GqVfoeAhSHHk|Uc&UYf%wlTPtqjsZ8(&0~zHZ$+nnk{WXuto0G9ioe5zbk8m|OTgZXm zK1!!*V3cFa`fRitZVUTyEQ-8I2mi6aS}%CZHK5*$ysQ9<3nfR++JO5R9->6qqNB0n zgb=hFRNErIiU40bq_q;4xUAciG~vIsH~3wuHuRB=-T$RP!B5lZ16kuH7i-9_=uWt# z0Hc8?=Q^4=Q>~s@v~0VW{eZb1VLk|6|A{8j6w~nJ}7JSp-$)qPLExmwdZMjsw+Qd!nSagaf z==}M(6YqAb{~rHg$)}UA<>G^D$wCX2kzQBZ2Jewp%G%)r<^^u$+VfY-LHqF#o41D$ z&fRQn={8g=wPdC&LCrxMj>4OK4sQ?$eL%G?0jK0&@7#S>{EC?iOLA)jt&BhWG%2~m4(LZ+|qp(2N? z4y$*}QsSQC>Tp+3}{b52h2 zsoG3r`YiFVIeMeN|I6fiTdua)1f%P#gEc+fY@#XiEz(;5JDk&(J{Tm87EgVPXgXf$ z?(}Yd^3dtAd_#m}9u;Qmky+MZA8rNvrHBihAv6>}?faMtZC8JVI9#7FFbq47w`a@^f!C8 zE3RTUY0gaZswndb&D!bNXd7l9*l+S;DnrA7$oCH}lzx23fmK2Eg=%?&DQ$UZgyGql z>pFO0R+%Y9+s?uthwetZ6>q#&m}%cGqYMmo)8+mC45OlliV0&|TiWwYjV>;|Yn$#{ z`68XB$0J$AcX z8PH6sHWKJ+zeAxh=T)I!>>DqGh$y^ei@?9co4hySdnFJd8|etI>EzXt|6yo?lo`l8~_YM zWdOdb3*S91J(x4unIUDiU{VfE@KcY9geO4d>~ z^l0Yn%Wh1Ei>umu3#eAWK@3*h5~sTYK`9Lz%JAxGmbs=Vw~jn26CV%jhalTtS?9lq zTY!A^2K}#npxma=GQe|wj{36894)CLR1U+Mp!hc1%34IvC58#p@tv#|4T{DHM3fl` zO<5F(bF3M6SBqMFeLB0Ec6gc?d(JF2IsQxir0Z18G4;!)JkON*LwLNHg}nblWIzxt z1sRvNf^AFXH>-==cZaY4mnsE*Va{&84I2g%G1Szg_uQ}{?dbV-*|QHQ3HX9IRf03b z?kZm@w%xWFtfq2HqDT1DoZVm8rx1$6Ww`d`OBX#nW=t6S%^lMLvO-H7)cZ}5iQ+e^ z$DhWPS%<1#1d;TseNYDBF7NzpTp7)D8GJ|^6~IV5Z2yIwkfWDyo8Alm@UxwTP&u6W zO>rS7Pe5B-yo@6?s9-Wb;(}fMSv7BRdX7Qszy@D?7b8Q%mubp&`)@bG@&9p_L~q^J zvXj~L7{QFuD}>J+tlA{Lmzca|F0Z$?qtq8kU$E2!x>NkZK)}peKuO! zI`((}QnRo2*1rEC6VJ88a;L7Y*COM_2q?SfVX(v{n}+xNow1 zTY_Kxolnjc9HwgHEt7x|VcQ$(RRZZNR26xIa4)P@S+ZqLx`J3-_uPr8aEP2#I5Y4S&CkwL@n?VS^se6S#}OEi+;$ng4#gFXMCijiN0uPhf?Cd9hMhK8*=>7?2@8@<^@Y} zQiz!T3(=`IqF)E8M5YAOBG-bY!=8pdct_OR=fftf$r^YB2AJ({xm@wg*7!7Rh|tqU zM(#(}Je-s^lNGxH08dVR5)UQxjxd z%-(Gt=(}D2zf9}-)&a-2JK*vC&1WI-w-b#kNL3J$d0}=fnVdjzZ^qZXdi!LbM}o|| zSAJXTBKw{`{$nv=Kd6nr!Ls<%qXJ37YTX=;8qr^xd^eEsIy}+{-%2osp9+}-24nUN zc33A9ROqadF!fguQRK_PaNK#QHeX<^mBaesk$0Sq63lnX*TW8`89V`VLiZta$k9;a zD~)iz5WkoHuc3Kpsp>b9*An3_ylS#9IO%J~xy68RXGTNs+`_umgYBcuw{!)_L(ntU zEH6Z7G=8k+JNqii+%{N9~82k7NVAj?UBi z95e+o)hGdWVs3t_Gl?A2m=;Fuc%m5mtgPQKHx%)GlaLt$psmaSPgY>91b~o z8xz&ORetqeY* z=PrRxi~q=jV6ocSO|i*o>f(dE`v#t%8o02O39z85&W#v!56*y@lkL!TMjI(G^>KWS z+}xG!uNYM)+6XyI4?~#)$JR5ZF`fV()HoeIKxk`LpA|_GMQx6QFS{6ZiCBJF_4=fP zMJ?axagpB%mo$o$ciPV3ZMbDIM?Bn}<-3M;_*Q>j5dPI^_=!t)8$&u{NV6upT}h+Z z!L1}suDJ~NgTFMdsfekphjst&^u44B@n7_FPw>QeaksU6NfQ39C~MZAHumxx&O zF&oyMfY_8;XLhFc?tAdv2xSLruCIv+PH`2_3(A732iFw`IZ($n&$>)=DsNjPI> z&XtJslPvX<*GdM32)%m~VBZ6Q1b%%v}Esi*ARP*wzo{j$akK9L}kypWt z$*QFz(1q%Cu#BoIzn!6I5bqSL9AbnL)EK1jv3{}&6V4BJxv(Y?9(rEGm&^L$IhXc7 ziz=lUZgv@-#nVItf}Q+1S{Ek-9q6Na-hwP-RJdfXa_d7D^x9wtvxX8yFragB&k=f+ z$iGr%SwWPgE<^_0XQ=j5XN}#Aug~FSYsi%44;-vPp4QbZCHcViBSpdjwgU}4h2J&U z$xEg$j$fj^PNf9CI)1#emhyac9Q-U?a$@B!;OM2O zw)iQQ3A*3}fSCk~D2K`AH(v3Wui@c^4sW4&HwxzH=g8R!RLlUPUmq!j+L2hN_{oDU z>a_2JzgotR8=>+GAw#()x%G0{iHmH+$6yx(BCn_+BhN<gARI%EzTXs`?Ms^5o4e-<+zb+RA%`s;4mt?HW5HR5QN z8tMJJGb)b0rOEG(R|Jfv$1D4P1x5TR>gp^L#Q@!{R7uw-3&dkO6 zTm;cj&v*J}IYCYniI9JNLODyO7`%nrxmVWbIeP?Kzy5*dYeZ|nVCFaMmwz!0Ijt_P z{1ZVdJ*RMErm^{*)q5y*SQ%``Ex<_sGCOOuHTn;hqKy*rm3Zp)1T4!ua#qAjxYS_( z5V$jIdQwivhRJ5=nfKLX@`)Qt!}u4em7y2_J?zL?a^@O+z&k6F4f#L_f*DD8Og%WO@Ww;*Z#qDWgj3TAoFOQFRwL-SJ_Ek|% zHx$MSHAe9WJp&yb{~?fV7k@3>a7j-RMC3lk&q6bo@9hRP`9(2uWkt!hap)iN;1#xf zP?{!nzFp$Ykl|YZ7f)0Mho5cEdZZk!N4IhRA(aD#UALyy-A>P|AjM#Y+TX~$Bm ze#XfF0CLUuI!Qx$d4xTigR(JIj#fcz&T>WUa%eX z?@SYKBDopdkv+N(X>(re8#C-4Kh6sr-FZJu$9bGQHfP5Kw}>5LCx&(KSe*Y*gnlxq z%3M?4S+fFMiwgC2?pdtSFPMF}_ResGX&g+Di?BrxL8deho8xX~nD*?$GdasIztkNL zL?F(`jzqq@N&EIrqqcJL*80b{&w2k;c@pQoSy|!T1R3iZG)LzTVf_R8T}!eLPV=D~ z##k$S^)+QjZS>fZ;$>TYA5Ve!;CA z=$}?f_LL=qlzTnnp+*XSvQ%+|N3bj!h1*9l*3ooOot#s1En3pYS>w)HWn;R}MgPH3 zS<$c;sM~L|hvY@{}*9+iR#EYF06FRUCTkl)lYbS=Ow4(X4zA?mBRpwdu1 zl~D%TlP?=B`4lf9$lZRNa-nwSI=rYHsTs-4(W`{4iVC-|jgxDLE##~lvq|V9<6U|& zA7^x-e*QtH%ro&94#AJ_69c}j5!WcL%ZSeDZ2SBAI+&aWj|VZI*{eQxK0bA;HT>;b z(0ZAPOX;JEIZ9N?M5A?)WtH=Qe-QT_a9Fo43kwNpCU4>UJ=knZ8Xv`-Lup#pJei60 zZnq7W^i=I&e_HWLyfI~y$kgKAY#WjpD)iYQNagrc@$+2rbJv%~y7zYG^L%!A9!K5Tp4 zhxz$XDVYvF4yR)FhnNmN0_r{~g=)yFov>blQd9YRbTb;d3n}&V^*cwaT-=m#c?|N- zOmFW@_%i+af~xp8qs9Hw^Xb65AT=$PY0zG4a`VNB{UA zIH2z0+`v4Tl4}Hp`;aHZlKLDh>ivW4-$)L5gnKMzY#}Z_zzBH|EQ~6J4$+pAFDsPI z#`mEErS)54w*ytfzXN@eRS-Hzg3`%j!#a9&>C#{NW(>nT8u~O0c4*5esSwlDpb$Du zq~aBXZaqS2!*}0znCK3`*DBI6sno@AEi#~{hZ*d^(3ltNrIi{eaU(oEYNv4NA}WC2 zkm!EpEVB?DwJAWfExv$*mnP}y=?507s2x&Fed7LO5B&P6N7uZ$Q&Ea#iifyucZHNxjS=C7= zW=@o?V<=IMXPEk!Co`cslYZ~OL|z+t&?3@*`SvY0#$jx7 z(e>uo3%8-Agc?UOuU{UJ~q;aIU1s{f%b}W`ZbnGils$~jU zg?>N1^Iq9e+|}XJJBDTUN=N*^J}CK%b5H!}cW8(Oz#Gd0ke}G|a&wRBvg)%YUik?3 z7T-!piJ2h#FdI9|@M|H0CrvcwP%SYAtH?? z@)dU6&e~NzX_@>o`WQE(Yl~WIjyu<&iqzWfRi@oLmzW7XMk#8eCNOh~gA~m6l-=J~ zCY8vsI;aUlJS{4KGm-XdYk(lEVCkvVM@$Lye_jA7=juZ}<|Kx0^7pQ}6C_^jOQQ+-hiB74P`di_8Twq7G;EOk8QBwpn zD&f^PCq=Ae*56?$P@ZyPQxiN`x<=>fO%Ih|d1Q{=>=O&MEic!J8FT1hEs@Z}{A{{K zdf@w|jJW$Hxm1j+lH&X_K2LpoT5-ib!djtT3IJpR&45f7)V;7ZH#a|f>e#nRu6cQ8 z(OzgD2K0fF?7oe|Ub1P|<&nBUmtQ!+VLQ zL4blxvZ?J*@NTzVLl1yi5&~h*677sD!Er*S++BX5l&CZs1#EjCup#g z@a14j!#_NylCE4onT;NJaCpdq za5NcEV1D}*h~9_#v7-a7As4P?Pz@J39CV)Na*6D&T>0r<-M27mX{vXls@CpayH-i{ zen8_tovVXSr;g%`TCTfVhi}Bj$5RfM{^?gFxV5O4-$`zjr?L)oBq>o>uAoX6KD!GiJv?b0e zz!0eibt`^?oD3@8LWC@6|8w{_&{VpQ*>2LOzI{YLROZlR-?xU|$03>J*i}#(C{GsG zbFSPH9M7^LCIdB?;JGq|F^9GG6YScYG3vNBHXrm3(!WKwdIh>1!6%VsZ}Ls&gYO|XoPKZoBq;vzoOYq*3l;$Pln_rzRe;<-_A}NG z5h)b2FtQw!bP)J3+FlywMI=46ln;%lqPU8dyiw+SDX!1oVP3FCTLOVx)yBYPY&40; zEkO_Z23!W7lo-*wIHxjZv~+A%;m6+r>0ou??xuMW~OPrqv}TrVzO zf220ZVFIvh(nOlA(O5_4#p8<{#_aSIou{K71Ayc^NZkPG^mB#HuMy@y)SJ#*`vKIo z#J{d{*n#_}#izK{rgPC*^r08I0wpX8witXlxyb0So+4ndNTU&mOah)Ea>T`1Ih}u94wBxW64MmhgK^CBhz)#6dmHaDF15@NJ@eC{4bmb`40|8LEzgDiWsRdXEwmJ?)OtPlcORk{p&zNFYZ zRp4X{;Sx8me<`IR!EuIxhp-@ff)0A*rn|T(t@LPpwVls@r>w#6OVHYunsY{=xy3Vr zf^?tYW(nnM02Fl1_qLC(%kkU4G%?x#752rDhjq>S$tAV#yRxxrS4n4=`xkOn-K?xT zA6)0@Lgs&K z(=4Yu!Gc-hlW|rJWE}ZWoi#H_7uaKo)fV(6)L@a`yc2pT|F1J}6_KCK8Un@Vr6 zc5NtNjmJWrD2J(4G!{dIxl}>d6AETU|R!^Q_=x*KlS-kyHy9CAv zZ^-h~@uS(?LgyRETvC4)+VKm=ZS@6GGPJE1FUK8zj)7J;+9s%a;bJI!Q~NCoeJ{_z zwPYjJn!ioAj5`S4^8*v=+?>{d+=yxNlQ+WEJcVaAwI@G5FmY$Lrxzhl20jW;`?#(9 z&=NOuA$7POKB#@0>Pg3F>j|SPl@6Sup-{PCsjP_G>%24bh_b;>*0mW1v>r;7J-R*E z2Rd-?cD@LY;8P|{%ohAycm3@WM*SqSpy0|M^;jsDs-rVl#;H}xbzjOa60R%tywIG}x0doGmtIPgyl5t$Jpk(JCIZZG`_$q3xYN+4y?Et;zB_{1(vbEkipB zQH(*1iEy*OsQhn!y^YjkG?~!wqwj}7!+7@p8V>B&s9y(HwyNglml#(Cf||0( zJ~&*eDAAVX-G3;o3+75Yz?l%>EtLPnR<&UwOI^Pp`i)nImZNG75h+`lBdKKp~J2$T_BqE~ZgX_-! zzSR$5JfD*g8ymqAJ^lUrw8!r1k1Ew&5PLhoM`VG7P556q0#EXfL`59w2F zQ;xui25CBYJZSw_VO3$#8$386Y}Mto;HcnF(1C^Hol>q&gMn$DyG~zUY>Z50_+MW* z+1z}uvTdfTtG3BLz^-I$Z0xUfe6Z-Uy*NBKE#1fKH}>Iiz|)q?h5&jiyFgcH#DBka zIzNn7qZdj@-?fOc;0YQj4d_boSCaF$3L=z@R{e8kkgzc>(~kN0N~24?>wbWo$1i+z ziby_O&OK2_g z5$CRsf>XV#=bRf{PaxqL9y`rVn!=69Z;5% z^75MGK&9nCAw_1>ip+~Zk`s1Q8?SqEE-+$4y{M6~o^FtumyFG5KakM2azmaRtA*0u zv8XlLVYh-gS92~ohTYyHDTg$u@iPzG`Q4Na@J9vvinuuJo4q2$M+4hcRTNJql#SY1 zi?;E3btqa+vp&FHUJ5t4AR5o^04Qkl0K<#W& zSZ#UC^j}j2XesjkN|senUh$*4ouP7Q@AzbW@>4_L3gF({z2fypF-&&aDJP3ZkCabs zPL^|X=d1xxd6(WV(|Yc={SPZfAOhX#*X~-EJ;R=!evHw*J_fE|3v0pXAdTC%f9-ib zuX-7F*ISYq`kGU%25vwGHce9m%c7v~^>vnYg`eCiC?i-AdIro=pFp?dmyU$dGr<*? ztu2Dqkn8lN34i&a5p9$U3V$C}Nw0z;PFsLGiVXNUBQZH)9jsXQBBlaxuOPJx=)oA) z(Ef&}iXx7)1sj%xqTsKCm0NCBVSzS@a-WoJ4a>#`<#(C6tQ}sb{(H??(PZZSZCiU`;s7XlMnL&&u&%e3`i%c-GNS~IpQkH#xr+Nu^A54Yi_-oE&X4P*N{H=+NoqfN{^Jtu@Bfdx8rL5Ff?~ab8 z>(b!oP#>4P-ssxTmzp^|azIxn*d9#ix?KJ-R$#3K%E%!yLGMtDdiI~gu;|8=_96$> z;wNSH7CwJ=a4XP3{+gWF8K4%PafB9WRI6s$lx@2|9 zZzf4wwrJ`@xSFv=%7-x52JA4oILOPgUi8lGL|-dR!dQu~Gwo{92$zw`92Z>=ODM)H zTw_zVSgM}$rYcI-r(Gdz6s`(fLajY*q15j^$@tw<) z1U!G-Z+CTDeQQ3+heY}p7Yl7+;Jhh|9;y(We*93Qdl&h4>rltGLpf-5)5w5^o_FZ5 zpG{QCv-isAGwLsQdtF0L zwUfBa`b+2P?BU+)KQ2WMBbex8u@1+Pzg+mf@6hJPp=ARL(A#e~8k`nNwlfCGSrBz& zt}Vxj2JM~%oo@kctrH^>htYp@%x3g-XLpGO7yu7k%#?f5aTl0<)RB2p2VqK~8ki`J zoHy0^q8G6zvlt*G^q!5bMqbfI?qWI^2mu+vhmlg~WmiR`1@dfz9cK-1&@&ysh*+5N zbx|f8Lu)LRmiCj`u$9_A&_2-@ntcwAXjr{9Tg%mdiLB9E!A59tU=)*@H=0gw;0t{a zu=djuAn_qGM^h%@Kv9CZ8r?Too|A(Z)jd@_VE9{gRaA6t=KW@8$qE|_~#(TtO* zsB&Sw0F#;n*;+7d&8z5N)I@3P<7?dBlf;Vf(2kpv3|2ROGM|}byDdYh#1{R4v$_zc zV3mbQ{T6#=?=1}SJzMRaskDyVt~97b zqB1~NyLh^+>(1gH5GtHxK~8H2P+|erqh-8qSC;&*Z06{+*!ak?$mMLp)_-xVb4k!> zOH(?ijn1a7mwDlxu~=9rWLaPuq-?$PQL&E6ObDTRKZ@5?zj}2=_5k_SD5JNCigD2= zh9uplT6+5+h}TQPo@!cpn>+V@;(GmUaw#%x)J)l-8>b&7@AiAGh_}LT;iL{0{%72bVE zloRCVUo86aW%IFzop_!6Iokbq^vlP-5*)_*W@fim!xl}3@3D*)896UCc=ZKa=H=%3 z6NdW$>*QlNIYpR~#H(2&(f*Wu!E8%tF%o1pqDsqQWv9ePx4oZ$G2n9u?2td$ayC{3bY*pW#R8|!^Z{U-$aXj59D7;2!0^|Lw;e$+F69VKsnW4w8k4{9yw#w z1O)-EwWXewa+Ahrgf5w{|4PNwRCcm#AQCkI($NbIoBI2Gk;{>C&K(|??=yK9S?3SQ zBW7ykLM{M7jX@2xO)B-;+6H;fpFgh{^YOK?l+;o{c8?ky!qBH z(B}EDVcg;fZma#0Uh$V5vZ_`o|Iu{ z-sCeAxf@+`srjJ$ftFgbxuId;i=m@9K?ASAtLHXFO}@TtIjZT(FLdx7UR~jhFj)tL zK;_OSotqW4Nhhy;yXh#79(8thh8P(bj0AbH;u;&|+R6Gqdn_k3x-2|#SMTq4HI{BX zdh)AJ)@9_6bFYy`-zYZlFdNXeu3y;)O>ReO&3w;3{#keZhXBgMsg{Y4sw|){)lPM6 zenpXj{FK6eJB$9}cT_D_KXo-j{aLC{S0^7gl&WcH>_0#a-1+3%1xSg>G1ZHvDpG@e z+LP%s3uBn#sOFtBE%Gp+h=6Sje}}=8CG(8(11o*}U<3joik5YoBV5naq=9Z-USbh{-w{I~`>KfOe}wXC-Q?|-ecQaZeBi!Hg4-tt-&26x4%*>*%<4el zYcIB_^f@9l$VEk6kX~m%D+SakV1cI(4p2$!#}6f}M1_5}KiWi^{rD@kz{VR?6C~w} zn(QQ^;o!x->LH`3SJ3I{7s>et6@lYbVs$V7$?KzH9#uK-I`>(m4I$@WsRg6vY|pVmK(S-FfV!XKKn8PRJe4bJ_}69&$`G(bMzo zkJpqR^;+$J`J8lAds6HO)MM=VA7%tnV;$67V$Lq@6~V0^I#zc6L4y*| zK*s14c=vCk@}Z?p<5pf_gu7xn2M2>fh+on#3KbO7P z3t_{ElU}Xf8dF{NRI~;HJ*0oWI|BrcfPa}4+RDqnrR85ZdcFqv|3_C()8mt|^ZBr^ zj(CwewWrO3-yee#^hfQF=&eVU&bzi(&naC?JZC%#?dW=?0*_pg$duE=>HW>H)`U`U zAk`Z7$?rJeOCwI=h4$D|Pd}NWF-~oU^@NY{@Zz z(~LMnL4F8-xiU6!S{G^Z<=F~m+qaPaayxzEZ;(Tqcerv+j|=8CSCv3T#rmkqA)cr1 z8JHCCCE3i6_Vc#__t%*0PCW^!wsyz^H}aeufifL@Y;M?ay54w=P@x(Z$=Sr!c8xHi z-g!;L=o!na<1okYLOil%f!{LM~S#d1NM{I!9MaH%fv zx`lGO1x76YIu_1UcI8DU{63*R6>1u{L`_88IyEz6krjM;yFD0_%A`Q00Dqx}SAz~P zkaL0i?-gv-wfi#%-uHWVLOZmBje>J=;@0dn`99#J3g^Fw+?NmR9Ds2%=&L;w?yg1?iyyPjc)R*7J>BYs;fLz|KB<_BU}Wsxiq z#&JDo;UCaXYt94jY-4K8-=U8m`*S+>w-&_sj4UjEDK}Uw-3Qk8b4~J+%JGIJDLoX| zWfy+tlEj_A`yj%z4StMcz??Ie%fK}xenHL`_Xrfk2eakO0m_=Qja6-lm+zA@DXHFF zoX+YWAl1!wd^f#EyBAHW@6F4SH9vF_ zy=i7JJj}om^AqF^pXq$Qz6L+wsY@W~&#A7P>!SzTD_{KAe-bLd?79#8`=I6c@#_08 zUo!EIET^knEdPYXZVz&1hC85Is^;`?~R9o;RPE-QXl2j4_p%(Or6LPz75`hYR?#-Tf0dTz0xt^@KS1L13dUB zO53u00B`BFju3^*f(%lu8P;G4hFV8=9KF6v;HNt8S`wV45c#pspWE+xLJp@|L9C%qD(*ZRrSb zb{+gfK(x~|zyuU0Kfuf8gW{Gag3Ip6=`Tjf1w>AG#!Gg-{f3S4TF8QbaiE#0rJ%u8an%kmK7<;LY&)oZn zuJ4~*?*W&|8gO~}OiuC=+YTGUC6#$e?pg;$;C8P6-_j?V{uMDR3KK+-Bl;<@+#FQ1 z@E`+x5<-d_OMR31%(U+#ZAuGWe63FBp7o@jRRhKb7L7Vdaa+;vh4I2q`22`G#;E8M zh9mifv1ITS62%V`{ROXH8M`_u4->e`M9!QEE4uprJ-T+c_IRr7xE1v!B%?}Z?3bL2 z)_V7{qq};qsV%J<-aC6Ie3$VCXS8mx9BguC*-+m==NDlhJ85F1f8*2ZY$v1B#-SlL zMeaVCGq0@1n*!R36W7|eE^xe)j3|`64qxU;A5JD%Pqv zXDf4fOs-HQBGP@`qcm}s86EZTtdw-5qoW9FgC_b^T)1LgDB_-MMNMIVC~RH9a&Bs| zUO+%hq;*hIioO}9V)#_|Nr3ql?d`Lvw=)GVQgJ=%(mn*${^Ziq&-q!$(|gu;mpy!H z1k+!5cpV7#ZGEpVVzKCa&?7(ei{SZMt0-#Lrxf2dwAq}9EngEA=@#4hF+uNP0+QOh z#~h@er21OeIxL<4jSbuwO=u}KY4TuWxs!D@mlEbIaXXx~Rcc$Hb^%s!d(C1YLr*=5 z^$zl{c~3)TP>6KgZM(z`0~6f^U1Oa_f|Uf-Zl$M}(3*3>bEVkp9!tJ-bkY%VmHSL- zJnus)D&8k_TYk7{Rry};&t=x|R~1M^FX!oB&Uc*Jg6c&_*Ds{mJ}7VroM;?njI1(` z)Y^5qAycK4lAwQ(QBi_b)R)A zNi*E{u|2(Ufs&owC}g1wD|OPj-hr0S)l;jzm!0CXXEj8X{i{PWENZXpL5tD$_Ont# zlkCh?V}p;(g_4^)uDci13&(!_SQXT_WNMbM&fc_XINY6JY5=?S^Nx+r%4l6xzN4tT z?#if_f|8_rwZSzt{IeI*QF#k}JY&kf4z77gNse_Eb{KW-o`yjGY&!v3FQ$e0zlGo0 zjlZWnP7KY;tNq0hT z?bw|&x-znr;!aMB<-E?0?;eY3iv0gpYOqjLB@b>KLTDjgS6_UgzGxKN|8%?bDb??V z6KTX7%rAL4t6S)Whg=NJ^adY{UcSC~M$3Xw+V@Z!GiLqxaoz^gdU3LR(7}aJWNPlf zQht8!?1`pW!XhGzY@?Q>#ethm>So6SsmTA^|geni-}OZHt}@_{eMJI(-e zbM=Z>^{i#fJMVOA%xaAUVz{L)L=ak41udQIovRn+#Sz!6q%Y;<7k+j!@q3goH|dtw z_O8+Tso3cJ@|w>x|1vb`guLs2_H{aShJVcvb)&ujzcdYwv+Ric?-%6gu&}#z)ls8i zFzlBv$@qKOZn%j$=T$AyUB;m`x>r^S0rj)YF=nvl|BtD&j;cD?-u|Jx4UjxYmxOeu zNOwyMN_Uqu(%mH`(jwgrQqtW5(%o_1;okdO>t!wfk;7T%%y(wb-p}*dGpsZnWIk;F zok2rXQuJj73FSoztrGOZ`cqAS;Jh4Jtu@|^vS)xZi%d!xrf`mt- z^*1&Elp)C?j+amAr@Mj z*K%jmvfS?J-o!;U`n6&7_wRdIKf-el@f@(~E-tRzjHff|-}LU?f`KBJ`54W_k!Pr3 z<1%0@nlmlhAr!6Oz`D~=Qm&wHX<~8{Yxqp>Cs@80nMa3fi&o~g4__!yU9?k!WRauI zj|?XSVL!Sf%geE?H$17Iz9dJ29L?0ioUX4Fea*A5>))%m*#r;K@1&5nQgr)$Isain z=|ievwsx@V?(Zv1WkYS)=$B^M0YqEuotNiAih(f{=Z8W6Y2r?``9sD`+9>&;rs&gzZ`7(trwaknhRvt{P87^WopdgQ6Bx4xcmL9FXtF9o1QYt#M~0r$ znc{zQZ}xQ{xQdfRga`5x@)1&AnDF>{yq%`d7Y-Z;mk4Ud$qv@!kcYb{p+8Fn&6-p% zp373Lm(#OBiI|5;n+#)-Q;8`{$cRz2t=|rGP2<7wmX!r+uTIdXRZhfi@B~kpBv0F z6AOzPskl^qJ6YGdT?f)J+P~XL-t$T;Kjp^Ce(wt7P4@Px zY;GOa7t|JhHnATYP}gs@8RQYu5(+e8F)3}nLB$i}fsh+JP&LD?>YpDT^#3>H>mkz> zTtKkl`{9mJ{aBNZ$;b-SBzKzc@uKlY6tTYVra%u^%V<(r44dC2t!9!GZ3*IO9-fC?7 z-~SxW%>0VtSS@>+SBPj1Ct~by&J7m3Uas2ZqE?JSE3H6hTMkT%&EBZujB?q{!jl5* zktR$#f(}~`23E6`P(;7fFk_-5v0Q1QgmW5*5JljmvW#mg1Izz%GozHj)Ur%xZAVr9 zc^!W9q|EO&yviyyIu+c3x3`{5&d$zmo3mq`MVzmehVpi99E*D1VSfJ;BjC8JdFN7e z2X=>>&-A%eTFqR5rGAG4?9*PzVMY{n2W2VErK}l?X}k^V@k|ia!LnnF>YGyiOF14v*?+ zFx+rSDM!bK>50LQs+$A1+zJV5WtSI@zRj>ZxY08)5x?!;xb@$4iNDEkAPqDPO8*IT zJ)hn>+_{(wlyMU_Bjp)dezZR6iO^M4Y?vIem8V6Btv03iW** zC@oL=+VKV*`-B%78(OW#a8VP4w3$ta)UiCc;H++{W*GHU7P#fZUV!~q)nwu4Wi89# zqqlq3%W{y{A$g*t&!9oSk|l2GL`tPIamODQXyRK0B{db4AMdrsPCHFzz8tDlgLr z?8{@%&o*8%H`;7bHt5yLg6UaAHgMy)(x9yBUp+Lmxd66%x82x`bY$Pm9Ng@msgB0B zGSXikO`6LijR?({cAPwvKfh0e+3B{i5|EFc!S@j)irS(UCZtI!Vm;czHaeg}w54TC zt#4l;MMwNf zPXQVJI9@96`IW(3r(W8tU0sr&>=-L-uaGoT=n7jl3HI z71_(8(qFqQqPSLIB*-z*Pw4k7xj|&JH|n7g&8Zb?wPC!KY0}V`bpLnZAq@GqtG4L* z^V_9gMfN)^NVfup=T(2l#(UC(C7dZWZnD#JhtK=48m$IRGggrIZ*FFUTG}3c1rOcE zU%7IFr(Bh4J)OC1sJiPl0(N@(U`=6EybHLrw8S3KLu`lV1ik2+3C5!N8 zAXdCD^TSdGb{dUCun`Sk?fBj48uBWRSZE~3x>6jWfhl-mSx8FQ6j<%%kSvsAO21J! zQvxw`ROlcY)ObRY?-CW-0rtmPbVHip_iowjr0t-!PWvMYc%HJvP*XOKqgZgy6OsrW zgcm~Z2Z7AwT(v5D{$S`&JtU1MgPK0~%Oez86HGzyQ-thO1ZrjNnFbRvXJ(>1qP$Dz zicP7AO&@Skk@*Npr#ft*H&FUr^D3=`8IUfDHClbN^Rm*95`qm2LO())HBJS9k5mx?&SkmZ*+TPM{)$_iq{evfR=H z!nm{)c*?%mY!}_A1w@l5C8(HsOr{q3O zPi#^imj&?0FloU!?@X{MA$ZW5G&JzrrK#S8*o=$^X`DRs(7V zxb{W8@)irD@x~n0D+TaKI<&w8#>ZYY*O-q@?MH<=!u`$V9`LUHxnu;`LH&Ef~ljK znVLl`2!~nUJ-3U_tPw<7cA%lLwfqJtOwG&daAda5-|u2v?}RtL}eMzD!}9v1m%`s(;Ee*ci5ybT{Ec; zZV(fq=@SLH>)yHwI2*2vDVCJH(u1P_LXad&^5NLddDRYmLpbskPW17c%1YL|0id>+ zeS9%O3}ZATG-Eg39KM4F%Ar&uwiG1Xh=y!F7<6}c_w(4?ALWgVjJSa-TJgxpd~(Hy z;Ew5`f3Y>DV^cq<BKv$yykvq!`fKMaB9r62@Ch2NXaHPOpN8++4 ztE34v#a$@0BvHY2`FSJrI77gFtMpqE@k`1{l z1rZvEa!l>Fz>;(41>r}7V$c_S9g7@#iwdoSxY^X32#j_uED$?1kR&E1DisHp{Y!(a znw*y>n5QVKf0$ZL0~JI3*r)S2>FzlPj?ax_6e$Qr8fDk@tvbs3cN*H-!xk`+(RX0l z+=3tXNhjChNAP#Y{xZd_u^ZAwpgPfg&r#%K+sJ6#tLy2R%nZ?IdNGA1^g@vHT1(dP zj$BYM&2n7D!Inq;GAlK(^Yy(i*jpVvkA6rJmXv?`%k(=vyb%%fqMsfmw_A1dRCD!Quk*Y%3 z*TpEj$86BaylBeN_p`b>HZ2Vu9MXe9x_$(au@6QG!ZblI@T~K*8`IxQKrgbih)V{Cn5_=OSo~34zthWjd`hdHL|+8dO*{n z9BMf&3IGKEDuf!CS)Yyq{#EbPp=p zs+O|7*v9$7u0yhsuGSL{0$pXJ9?k?6B1k{TxS!1Gl{SC}39txTsTqvqi25;dt86Hen9b~ekU(ipd!1V z!%rSRSm3$+M%t^mV(Cr$hV(nnnMmXSwj9 zaQATl2r=PAW~9)+V`E>#j98GN-DE9yE;u)&5#ixo3$|^M0Vp`eE3MwMKR;rKiHnC2 z_hPmu2gaP~f98XG5I#?$CpR33qo$*$?*JEL+kvxM*9+5aI>9aVA>Y1HmVRh*skeuR z!}Rnsk{Xb&4-Kpf11d%)t^-v48DTFKDs+s{?B}npF{;DLiWMAeA?PZN6Rg4Ye6p+Xq&$*OI%ymEd}rITT#)_ zU~^A^V{L$uK59{1VGs)mt;kLd6EZj70w`9--FyBa@z zRd9`ZFi>ewC%I@#OfTvYhgbu;6>wlN8}&56e<%UfM?aV1BV3lcan<)v_1TVQ_v#5V z!AdgB85sw47d61*U=c`5x~#D}U=uG1Oy%47ov3FDc0_*7kb_1lp8E8A5b?25KW zzAU$OG+Z%-y3tJjm*6^g#OVry=$8gw_QyO%kR&)a_lONrjzC;Cj|wBd0@>vC71-ld zr8gBm8kf~9q(LvrJj>nec#S$RCNg2Xd@MT22zTKMM^SM!sm5|9OJD_#uUp3#3)6f_ zu^b1**ls#KlkJNgjqv?(!0>X5XTU9|B;-04*MYMjftny?V3i26{)n{<8YaR0>T7#@ z{HqdK+x8C^GbYoe+FJE?(D8|oeTS+n+|xnRrLACGW2DvGjstSBZl+hp08q0rY-nJiwV)wBOUc<`&m_`_LTM&mwlesQd2rfD5~3Y zh>CfC<2jJgmbNRE4CD`2#4kGFvE-@cY&(+`Yk$^uaL_^p<8)A{tn9PiCiy@2=%Ap~!iwm;_$8sKfkt8m#=Y#FLk;iTseb~A zzq5$lvMf_x5#Kt(9Er?$pgj_%ZqIm)%2Vk5|b+yes*N1^F*maq#O!QQma(;+}L@jhU)T!kT|Geg(oTRk=3y{ii#R-M7qAC80sR$?ec0PQAk z!T3l+@E?hxny!Gi5IeZRj%nv1c>)LDw&{Q?H6WlX!7)R)yyP#EC}GSwvY+?e%a3({;t0 zn`&*z07hl2s;UYT$IGp9W%+ROD%iA(HlV$q*gUfzT-oTmpsx8LNY}RIBEy@Mgrw5v z!9(EuPkTl~P|aNcqrNyN#10;nn(%CZ6&{5YRW0YAmo=|e>K`f?54 zO+5m51PI-81{6q_O#x8K`k#C~Ad%4nf6Q~r;-Gn>?`xd#MrTxn@%0d5{y&X@k`m&F zSG(yINTE=s&ZAa8k&1XoOj4Yqv!m)=8Ymw$_xDT5BeGs)%q>q}M2h9!dj8Jcs0a$Y zv9YtOv>qO&Z)t2Pa|}yO_3}I|ErulxXpJ23}FU z{`pL{TYp+&-|F3)W9YIp5f^z0w!tAx)!w8h;$$P)a8N5UDRwmH2DH6p}nY85X>mI6{sLE<2QemYo7 z80im0O+k2g(Y)!Ap+P~slBpdS9?80+v4zzq9ZT75mKq&Lbq|@5ny>-Y$C;Tnkc}#U zq6RNqQnIi)YA{lSp4Wk5?=mXt@ZEFtDUONt*Ov%>0eSKtt>s_u?xm3zms=cfx|g%C z_V11Tv4g>_WS=K2VjX6Uz``QXhfaWI@l002*IbuQj~!VcfZzSpG)kH(%}%{&#rx{R z1vmkD5yqSM+z*B)h7XkU!mr^CJV5ar@V+~!Lq$a;WI5qhN&3fp_WP3i_iH#wN$fGr)N+!1F`V%M_=ZdX0Ive_yvJ>=JLlhux)01CV2^PldR_UfF zMORsal&)3bg~iq|MX=kAnc6P*_YC66t`7#_d`X0k+YwTP9v07pGcq!cCsh@VdcHnK zm@i=83nSHflS@$ddciYczhe9p- z6J=gI;uHSKZ@)% z>Z}N4|1$V-2+Lk6(>Q(E-9-}B#4*vV$|+%-yvk2h66Y^*U>n%EKyJ;+x&H{EqGUKG z6ZVa^fb@?th6`xx-+5?%p7L~<1*XW+h>SXo;ur8#48^|!WA%p5WT5%I%EM~qhZWj+ntEdYOig^-ik!%)cFAePgmU-V&``uVrr%hl&8v-4>vEXyFRbKD*wwf8Mn`Y_vF9N3B3vcMvtAM-@w7QpHjadrVk3-sOQSm5C%sO**AjC!tTilr_4j(0Hyqo zw-yH(VE@6tja&2n8m@p$uPzvlB+7~sv$JotvbJy4wj`0!$@eRLc?o z-z*wn4L@50>lBJ!*3`K4swhQmT#uA11SNtjueW2Yb`Ve~!(gtPN14B{`AyTEGeazf z3Pm@68S?U}lm-L_i}Qu^aFlkcD3lz;^r9++6Pf|QQWLc>E zC@E2+tz_(9;neioh6~uTS^nnIEZE9ZBq)Udfr6g?yuipvDDK6+hv$@ zMuh1Fj$6u#Qld)|8A19F&vv0aRBY_v#KbA05i%Jne52jT;@LJ|n1KnyE74+z7>&ep zB1Xs=eTNsMqIA)pUFNt!E4r+rl&lqzt}7y-4i#FHFb>PSQ`=Ihb-?IE1&0R0yTaRn z2Lt&t=3(4!sjI6im&$&+P*+pKX>4K=n{+wTQdM1JMY;5HBwS~XeYFPUitbCaaG1I; z^vgbRX^(sI6ydLh!!dD%9$)@uzD8>gN!P4=IOvVnW0`Qj`~T!GMcZU*PR_^@_bgB@ zT`l6`Z|MRPk4#5jzp1ra{N&Hr`F+~w6TCac3-{{U!X4g#j(U4AMYI1)y(!pyx78lT zE9Y>K!A-YvCh7;S!khT_^Zzw60sRz3>Pyn9QZ%I~oTbh4+C}F&_i_8lgD~6rDJUa3 zS_WJdp(lfgN9-Rc1zR9AM-c^sa==%oprvg>=J&Kjf)HXN8^nfI2+g$a<*q$S0>gWS z@wp%@*@J33YR+*(i_#FD;C+CV`(VS2opDhK8lGn=U)GvaO%l%M@aSma3byr)4HT*t zxSZ;;Ma1_zD)arQ ztXE!4Op9%m0Js?jdf-PScUmE4#xezJL=S+OQ3K3Oj%6ts7_zbfntmKZi0m)hJt1VQ zpd`LY^-^q1F#@9X{&EZdF=a?9!m28JuO|lEMl{5<$FkmK^Tj@Us9l^=DT-Y7aiPC` zf7f103ZdO%|4JGY6BF*Uw{|7^Q>-O@v=}u%oZBtmz3V$8GqEEVWfdvOs+1&wNA2+l zK&92R>9AF7jhZXO4sBpMfwWQv$^jrG;xm}fM2vN-zK~P;4jH+aKyKEz1ACjB&iYsH zA;*`OWXC$Vn19aYMt<8PceMvavZwAh_r(luZj-qB$0F1tw0{A6K-D_uq8Q}T-8D7EqvuzTh)L0kH zdvy;Ut06!tc~H?@xX16aFB?-0Aa`}CJz~A6VKXTKP+CD%m9w?H^M*yi&+YScbvKE2 z8nMvA+}4YM5rv+Z@pj7C?+6gYyjW(Hlt6$g6(zsW^wIh-g*!hZg}TG`D$<58^D$y& z;9v+etqI-rw zjQT~3JxbU510i<1bB5oZhK(p6t>IKjiQT`9mJ~KgR6MwP6cI`f%^e&UkJF(llfGt~ zmW$~VbZb-t0|TJsy_lY!e#sa3e`fIyWz5Lbb`6`3w=&0ka8mllrWr($2#lX2O<_G9 zRB^eZLr5Ec7m+n=4*jB%#wRLtb#y3DJKg0GKUtCR@haHZKgJKqnZC-sw&{66@&Qet z!5s-ZoiArl^nbWiTJFS7krt@zHvqY|2&?z?Ggk))iuse>^74h+BJ0AyVKuDkOLdHI6-hA5Vs7dG6NjZBXVl^#ad{7nsjP#5OxS)70iC9?e+k6 zPLrBS62?}qsB2j?bz&lUbWHh(2lDu+c8a5-15&HBO$Q>zBHk~@_`;S|2hLY`u@6{* z#&5IQB6$OBK9Skg5BQp!n3-`o>2-CFyunvk7te>Y{98VFm_Hxq%6YI-WsX6BiWJ&m zcns|1W-TW6`8n-P7Z<0z@0IH&QMifK;Sa%2-}~V%A^ZDf@sHA#ZhKRAQzxa`kRn-C z^^aX4AU7TS8TDL9=!xztY|I*buUXWI?iae<0Ok1pgfv@Nrrio%Eeg9np1Z=WsyPTu z0iHv|*5Au3&nzYUQUIEtrt+KNSPmaRp_tp+V*M^MJAcdYhF6Q_rS&`3I3W}Aq=Tu_ zR4>HmgQ=|E<-i`NAQXvN2B{Na5;ki*6gwaE^?jCc&IW(~Ms7~}UD^?zpZ8*eC-fx` ziCzQJ0uS7v{)eDk&bbt}cc^%IbrD-bu^B7lUc_L-JHa@-b6W`b86?!7M%MYV;cP-NN$1I#h z;R^y^n~Ka$(yNO5%(Wf;6BJ~)aDrsRwcx<+5d`W|D9z07v926rQ%D{*0k-N0itsW? zq|H0Au7_}i8d#;J=Wl^T8SfAJ3Ok4W|8n+grxi*-y0i&|yv`?#v)26T@87*`eGQjy zIu**6ikjMetHHa}ns-ppT8dGy~t*`02i>$84 zh*Vd39Ajq>lO&tFw~hR&d#M=Gm=m$Qx!A971{$1Pus<-fBa#mu z46>i+x0UVPo^>~PvYE)!#3y~?Y$O82MKc1>6gw#qPJfgThhuq&hlZzjZPoAKq1fJ#_?{_N8zVEnZ40z!G{NcnU5z%a|)Qe7e{hYP5b_|d)qi6R8+s)1IB z?X*O&X}nySP7S81rd9Rk?NCMi5uvOLM?4|iF&;EOOQmrEV2ayZx#Xv8G|xZoLQ*iQ z*E!wF7yU<(utQkCfU9uY!}DW)BR^KD>FId|SBDhM>?!LD9rIQ!I*bd}3k{D^JGAdz zUb>i?nMKw60=FtAzbKVFVOR_0VP3y zGX6U&M3_K~W=amv%rwiF?5BEqRhCi$yc=QsYISA7aC=-FfU>@qmXg@}26XsEL`1+@ zzep-yy&lj$80&KV2Ly!`AO7`6ZEbBHd*jtJ1O##Wsqe9uVzL58szBkH6x>fCsLpZ;Txa{!qFMUF8Ad; zwe!GxSXy2fY1R9#UF*X+vfwWe6PS)D`hY`>HQ*Ni_MczA=BOqg2dyxCL#gImiyUe1 zx!vPZdP0Y`eVAOeThsczXpR`d-b+<*W9s5{{QljH3YlMMgopUO4!pf_w?h8Xn%n9; z406~8kgrbcVR=2V`M(k}qQQioni$;FCKtY%Z?y;hufKl__o;xUBJH)rmTV9pk7WzS z)dD*Hr91yJoL=1k`2~x=vK^vd{BvibOH;NLr4QFlJdPCC+DlohY-?L%v5K>3{coqM|W<1w2H>@jL zcYN{RaO@^D#Yg0=t*sX``kn_daVsA_d=RpznSTzkvbOdV6B7%bZY4GWlG>7=dOGak z$an4FATpBp&5y=8D@Zn;m`%~kR8e!9DD`waQD)$?e_{`7Eg|!%R{BtDE3yD|=1AaR zM16+=kL2s&;US!L)}x~oW3&A>sncdmEvTx=Ws_Ng($g1s?<#b;olvsZdNWM(A=5HW zTFoG-tJ-}3H-#@pR{cpcB9|Wwx3u2T8lRm_+g)F`Yy6cbQ;_ruQ;NJwt6L-XgBg$5 zcZHIx@y{3Fv^|G%dAY39w#Pnk5YJw{((zSd@UW2wM8%W*k&Pf?7~?AW!TL<|NnE1m z3@x)}YCS!6;$7W7QnpTGG?MyJt!k7Nn|7s`sqhk@q2~^AdRj8D4VAEZEugU!0loNE zV}CS*^ltdk``vJ3Q-bTv^xIY)-HE0tWT?c!>Zd09&%FsNa(47XM7Xh;Y8I~Bc^Um{ zH0R~VX$kuo;vM#ssGSB)79>JmginT%n~&-9c^onUp8VksYU4>`l6NF)Ruzd0%kidv z{Sj-5;A%=B??`Z^%wUF_Ub*wIsb8f;@Fm1MoA{z`gjPVXZS8{WA*8S zy0)_BGB;jsO+i=V_v62ORT63xiPAE_I!Om0U>pF8s}539WP_eR&cCSY1p&~!H*Pt( zGB_A{At#4o;mPun*ruhTN+>KUie{SVm!o5>YhOq=W~5HB1|WU1YkM;sumIeE8+8Kg zmB{Zf;EW38TeH);KfHdiF}jk3Gi!N~Zrj=crd){o*@(}Fz9`bJrlVH=%2-@Psb!uQ zxl!EaVpZ0gFT6~PyHB0>SgW}4n%-tC`>ys9+mxT1e~FV7?-2f5-E;u`;Xht;4AzXk>wEo?e2Dda9s*o@r99sswBeuX?d6| z)LJ9VyTv}kJHd(2Zr)(ZP|7cxkJx5XoBd@&I@{Hzy!E8utbV$3c~Wf}<_ZS&UhoNE zoR^!*@FqMwE12w@?{%1I=rv*y{Ga%jIz2z$kl$L)J3PEpTmU-(^e{Q;tn1r`YFT^R zo3P!0$1nPcPipDK4Zwe@v5@nU-WZe|8pLz-yEzc5?%$CmQ(+V~D_@4>WjD-4B z*y7l5IJ#HK6zJ=z&#jV^tr`58u?2Fe5IuA8yn(@tz|1FBok7#MAAW{MEh8hBR=SyJ z5~jQpipD~oqS#U>3}##Kc7nPOw(DXxuW#l>g~b+&yqAc%}S_Vn~fD=L!n6n2x; zjzIIs_UfU{nbJa=>I(ZOd4&%Xu0~4#Mwh~P4W_x05$p6m|!aJOkP;hc`2T;SIis zEb7meM6g*LOcJ7)<@K>c%n?aZA7y~U@@69zs;sLzG?exoa7`{Djd8nY9 z)Ym%P&F3zNbpxC#_r{)>%gQf3ofwGZ_NpPB5wXuJ)?UDSiJ)151ThFT&4E$HMG!>> zb{laEe66)8{=@bNB94*yt3GnyZre7j4BXN1e1F?N{%^(D=wWtMKTrK^`=_9rNNv1V zHE8~Rx;7wPth0UR<#k{AfR2uCx8yt{T0!nMM<&EEPm=li^zMLv8r`2QJ5q|yitY=E zANMV_;u{w&2o57t3^-`?aP}8|L*82!M>L&QFJ1vbLHjN&ZoMH^7-isFC7Bh$tKuPv zUuLhHH9{+&w`VAm)Dnx}`JqEd6GZHz&fa_tSA@6Pe>gm}DzQ7T1gTI*rt5MT@cRxT zJZDv9PNIG95gHm0Rv6s%$9Fclw-v;4NeAou;#yQcSvk+OYTnizEY#s(ykzN~F4G0O zfZ(cEnMU|aeK)u_E$8DgRi#!fu*zRfo-Id0@7?Ssc~}OFi`zT=mE3UAePwVF3>o~w z%c@!O5G&}ISY4;g7F#}3r@ez}6lQ}sM#}%l<5d6@eNWJP#+Dg3Vb&z_$NH7Rc)2u_^ML;x|92wpLG<{*BpkRv8`+hO`RN&2j z2*l`x5>QVasU^$^ZIZ9v^v{v)a}c}}Q#mIGFt_%NJ8hOSU|1d<6{V~UE3X`%<`C$< zd_tN2?e1eED*b6QP^xrw2mfw}f(1h`BK5_lz3{!hpQ_01MV4YYYN62Czhif^FjZGU_waxYQV4Wt8Hzaqh6!uDI4lOXHWiydTtY5 zAEWYv!~8Z?C?RLDu%kgre};?OuiO zo_m0Xhp-gAH_X44f`bJlre^3EUjEBdp?PamegTkiRLQFLT)l4rr<}2b8FGUk31%Eu7I?tzu8J3o8U0*IN}GQCO21X6rg~G{j4x$UdU46GwIf1MhjjN zdU<(4KzGdTNguh%MsK82$y7kdI6`Pq0vUNo<>x^iUJS4R~(kZ3FY zFJ*bGFE}v8`rklaAhdsd&Zr_)ISy`h^E_(dP}q+f+?=hmB?o7hT&_6Jd~jqrmL-H+ zl&1ekO-q|v#AQ_2zD5gq*|d|Bg?~SQcAXvDmp#2i_v+~RufUi#xa-e$cL4u7&W7Ei zJU%`m%mc}_%5(tV>uSlh3#%?k<@R(|g3kvPnhjTPZr3D7)3x3c9-ESa3h0mZb>pX( zeFp}!O$r}GIbpoY*N`6`xEHCN@Q!Fb#xiz{c4GvuN)WMUT53t$w}qS?bQ{lUaLQt@ zh$<>H0X-0xseaE}pf+N!m#)RcVDI$vjv5Gs&dtV#G=-VIB<|`ZQ`C)(yh0qzLdL!@ z6Hxv%e;>1m7lFDs)OylG={-C_qju9o@)P?xH?Q5o4_bJ*H^_J#JI*~2vR$aQYk^UV zf(Dh+bOyW%^o)FJ&L>R&`(yg9j5YQgaES) zrI7O(D^-PaQU2Pv^}6$|_Fz zoIDes;B-AK?g!G7tO8_{<^8ptaZ~WwFeaXgKy_{M4*Luto=MuGiuLzT4b9f_8zrEh zI{S%t^pzu}+nFfJJ^@D!W(j0@ksfCF8NlgX<49J-Cm1qPU$50{ zBADky(~3zG`pH2~9}g&FQJ<#$VH?aRFepeA7tz$*d;_QkeIUYy4DlfU!KR2)(Ggb2 zjV2Q7?}7;NOxP0>6CVpi*VfinW1YP%aQgR?i$M1g*^3A63iqog+_m12R)S$(BD|$G z+RT_MJypw>$TsK9=9!*=J zFG-HsLba$+7?R!Is!Nqt1Y<=rzP-Kusyi7H64Gp~^@3e|CuEh-PeNuVzchH99NLX8 z!r)hlK_Z4>h*#jW!aMr*iz?c28=Mxl;k+bf0mU;{E1fXlOiT_~HpeeR>_B`k18vy+ z{$gHPrX^gdLO@a+0cek}0_r({FRm^Ud4-d-Q}i?^&f}Uw&L(7n80c7p))^fgZ+5;C zKef_!p+tEbfBtxKSIS#ukamckf}tLx`9j(K=b?61}omcZ4VIVIiq+)d3E29tDAXQ$azm%@ZZ?G!cLiF0)11H}=060@O{ zFGL(>?Q?TPnVFe99_MtI`*R49QXHlvmc)b6pamnHhhS7P$+&p4hJ!bCR6ejjkHwg( z<9mgV?!xKGRo)BY^cl0B|6>6-L^PAf_dn?@|9tAi1MyZzE6sZEP-Pjko!u+eZl4tZ z);pY?1N{YXxb6cs>Zd{T;?)A^^OPff$-xdxCef^dgjQCa6V|){>K4U@NidF}>;CKH zhJO2y-@zdW0$5-qf2xWuC`VZetK5uG9oHe7ViE|uFpLygaWmTy78_F zbXN}C$BLo4Bem~>iHznK@)_26LNHXe5^z=CDW717?7N?;_%iy_0G^U@RZI+Fd|~7qe>1TVMCStr*yNr zshj5iJbP~oqFDyXiQM z2*#r-94W;JfSPz8mGRBe64}p5sab6jpisks1mYfaTADE#Qt#2S#9k!k;#cPOfZ0EWr(4*$w~H{W0AMTZhcC)DnQ2pAl@Whysu41i1e~b zOYIpE={2Tqk8lHcU`V-;!@LBA3^b!5$)hiwa+FwDSX#e6;qmeF%afuze$i+S)$|3b6CE3W{2Vy9?apQdrDQUs2c1Q9_l?JsGkGj7nmq+~Rb_rVh^JEq9_H+fq z5HmP8^4BoA_^{(I&Ga)Uur_6WMEd&sxw?*8Hd#yTIl_AG~WX^wZ>P%$RT*&1 z4?utsbWP96=i;V?`Cc9h2o>%jL2|vC|Y(1s*eB*{7aT+W$sSCXH(rFAW}R9nM7!sFxclBV|0|pX znkX}ZEA~}S@7X}@NSM2Wah0?|jKSMb$mB$c{=VZICy(go%|x`KkW$LP^PkR?L$8f> zY1_4eV|E*aoNrD)dVx-gYk*UfYtO}W-LmQH2jdPs(AYe^v~>=O5;-Q7|{HeAIlu}fA7!P(cATKi76+(dBrD# zOFO+0{-&t2978K%+(}HD7LpA~!4xqS)e?~5yH-0`&(6$C*n)FA>L6P=f+K{qmo2iA zwL>8*2-mSH7IoP{45zCtr+4)Bvz?CDDN1rdA7QWpx(-h^3@Gs;?%3tMdyJ7q0GZ%| z@7+;BepdtUjr`uUvwVaFo<<^?Y(#*?O4Us(I0?HA$X9ZA;v6obyKMRC(quREB7p`k zIlqq(eZ^s(d~u(tcMztH_YU>oL@%Vrmz*y?DP5H{PQ~KAQ8MVZpPO%0J+md)|FeDh+q}Og4v!9P}R=o)JG`qqu&Wgxxa}AEReE>{fgR{5S z?)EGn`PRVAji>ps0L%qJxB}BNi=>NHgA(o-1NxUpX2)HZwyW}6T^AtGln}lrr3NRn zeE7}G#MG?&=q4&EI+tjNg$A{T`vjM-By(1>QI+}wJX>;z7Uo)sBOSF??@0<7KM{6S z2ztS}tXRK7!hQ2-?mA@~S-T5_t)^v(wcs4y&m0xH2Cg8$MaqH7u(%XK>d{xt-}#zk za$@vA%oOj@_jt*OQOkby8|a(J9M4Q@o$Ik8p-uP48bQt_-t#|l)G7qhvr%Kq?0zMM zWR;0st3$+JDs=8xC=6QA74$%ar~>aX4XHrKDQ>$4WRI=@#ezpNJtyH2VU=90 z-xDGRhX|(xkw%JTRqhE)w2KK{+yfTG*jhtCZ>tx z@HeqXq~nURGefH`W%R%i>D?14#aK!&n(vhZCXlJKTTkIn4jR6S&U_(EyLN$p%9rLJ zGvYE_=+Lon%%Nd}-z4O%wm-i? z5Eai^EKrE4Fs8E3=@15WHNjM;t=`Mkpui7v(>N~wF#Fr4cVG&xG7%SFfqrV9kI205 z^4uq9KWlksXJ@;mxmjnPhnnDtj%NALs8%p*;QR2LRw3j2uJ|6rN_4~BLP}FAIG1->a$z~@ zFq|dYXQMp|Qd9b@M35RwMO(&y3iJ;ph2#lr7i-DiOJ171^!st|^C&{M?3nQ0=s7gd zj_z~Y3Mw^0j}2VCIQ>VYVI7-!_DRl48=v2@UmZ!hrE z!}fArFU?0T@I|w`^;i9iD=X{eFFKqJI%U(+OVr^ylm2| z(9aap-PR=K=HmkFIKTqQ5lba)$<+Aln>qA z-Q6LfNQ-oLcbBv@BHdCV(%oIs-Q6Ia()^qEAD?45hQj4??m2t!HP>8o&BexjD!w$s zO3T~_71K`x>4fg`rR!WBKt8w8K_PNb6EFsi{lnR!FN^+AFjdU>+41pt_G@jeLGaE5EnGOG#SKDmW*Hz>+R1|bOl2Gf~e1I3ftm>&+P1x4k=0{ffZ#+Fe^wu zvV{rl7nh!|U#%;Q->Qt|0Fp;u1Rh)MHa~QEB`u2EQ7Bs-6rcxoICLY`M(l+wS^1xH3iW@M&UNKF#6&ot%p@FC7Jq##Y%UE6w%$Ywa&P?a%j& zM4#tXW)0ZLMAv?iBNW#!LfvE=NE;d&>T2&96m~($ywr*I{_vF z%JyFhW$VFMvO`B{B7Vp;vdNKj=zM_pSI1E>!Zb=*G~S?k#H&UK4>n?i=tJea(5q6s z5sR)LG5~%KDQQ&2|6~c{xQ^Z-H2;wId|El3Ian*HRnwCjnbjM_@jv{2)o4^*LPw-Fzx8=sdC$G%@487Nol<=!~MbU z=UrW19Rn(zk46>|go=UcsblbAFEL1}Ism{Ii9SWdCoE^N){;F+ek2XfRtIHO{6irkdAvYZzLpJGXDn*6(T)bGsj2%b z&Ac2O95$IqlpWiAOb|95gL&zCiL0IqFNmJ9^zV}703}T-o559MT>EC#{WJ~ z5*5oa4AtOhB}7?+q<0S=>Axp+5X!z?a~Rw7{%HODcCDnACrF3to~7N?Q>?cD?I-^l;gDvYe6!1SRwz05Y7wq@&* zm@wgcErR}V;WvyextyQz85aUELk(>hu4jeUwh7(6)Lgz8Chy!~ z8b;FyM)x$5P{C1JTIQe8LF7LJ17GTMMHe(1#p_1n3~fS6uiP+*{#p2S1FZo%K7P3M zTv_MT6lQ-csSM!9Y*UCipOB{uRgU1-tu0Y<8oJIsSXkgK)#RcLk5rCK9*L?E;3X>2 z{iVFCl>>9wksV>!Q%rZR@ZQvz4&lJQd1L(icvq(o!fq@}ltm3oNM_JQlcRyfiyvQ9 z!HkagQ!RxXd6Auw9qc|)7(4^Rlt3k$Sk2&3WZI1;?#p6k4o;`PW~Muy*3$&M1uAjJ zQyrIC#l?|}v!3iIpQ-KS`os1y%*r`5dUClm?n6HA3rEuer!v<@o|j%9pBmUa3ORmjxc~5-r&-x<5m{XK9?2tXT7*? zG~N*JCsQG_7p4RO^nR2Km`s3rx>RF{`FyuWTJ4xA;3@(BLLl%#P~QJee2=!?7pOEe zG>B2eiLoS8a&S~#wG9u;Wr+9^K+rHS0zn5A=ybohcvXRbzP?|ozmdjXmYv7MsTe*8 zi;9wh>K12{J{3j|2$+06w+;uDqA!n_UcLj+16NlrKpIe$TmN<>>n(06<0cdrHkw;1 zhRcH!!+f%NpCvfhm_Kcj<-!sgdXgW-4%XB}Se9}<5YSFW2yT`abEuhk4NX&39->WP9oPH*{n>&|Pj#*hVF_PDXe#RW3wa zQ#e1`^`e4;bE88HJB@^&AJ0CzWQxA^RFfYMI7|4B+0WAUEj8{*KdTVCmBvx4v`qf~ z>4@jyneSN*+~j$j(zL422DPegYFSGQQ|h^|cSJ>Y$Mkec;_IdnkQ*UO>$j)*Q2)p| zog2{(&aD4jCU?z&hq9alQ@F-RM@JAfNW11lP+K?D$f>@xqR`r&|7kDjoI5VBT4nYN zZ(7(2Tus(bf_I&wqzA|`RRi=2QJi?c1k624a-U&&9qd+^qEuv;oBEaCJ$rl2X!7I~ zpd`vN3wz&Nowh6o;<^aBBan+idrZxG&J)ILp^=it z-W)G=PfcAqzH?1bA!jU2=}&1v8-fzY-MvKU?AdbH z2R^IXd?F%p6GDGK2pT4)GZzcXsNFx$6@UT2*x+KU^o)!s&=;}!;nO?}S(=L1;RnSY zp^N_^_boR6UFfcuX6)R(5>2`~H9eHAus+tHWYtJY2$TIa(vdr(M7%oIbvv-DN`S1#ag`&9fH!`NmQtl?w(!qu0QJx^5RcfTe- zgTmO!anh^)=5xGp$)Ew7!<(C|+lmH_m1d-kX|M}+bh9k08y7K+$*u_|6qziAG{q3c zidjdL%lSkkr^(pD4myE2QwTXKdcceA)M|6kXths9HyM723)E^iJ^bRdq%NZ68j?cTQQuY$>wIPKznO|EYqM~|o z-hI`WXb$aR>SB^OFY-sj_TSqwa_EtzXOHTpfP`y?aYLjL5Qg%DkF~Yps-%EftM}<5 zs09Vvbgr{0Wbg$5ET`IEWC!CBp)zQ8ryjIWP0s4jn+<6~Kxn3#*hpm+k&LOm06UP! zl3hXyo~Qs;FR2eL;;mymdj_=IQ^CZd)M=}CjIV}H$;qc)hrc_==ca|D%wLLU^YPO8 zo&U-f3f7}U~lnw{x}!+DU_8MHk5 zPB$pStl-UmMU`i@T1K^!etv!xrOplzD9G-jK=`7;jg3Qy>?499+^L|E@O?!fZ?~$= zgd`P#qz9r{P62y@fyS_ek6CZc(du~~u3pKnbz&TxP#`xVo|u>b36*F|%dj3LRVqF| zW;})+ca>GHTy%pQH~-Piv3Is;+4_hhw!Rr~rc-?Jy*=V9rs~&NX~)IPySPMJWB8)O zl5E@)hCbio$$4|K5(%1S4UZRVJ??grN1jEN<%d$dPW65k=t8H+zCRQqrFRO?fP$Li z^VD4=0C~!A&fjex-O;*mEU%#@JLiZbj&ktWAnaIQ7@+z zO&w^SPklg>xQ7XYWAsp$gnHGHS!>g7%4HmnG_;jsR=9(bYMnyPY@}vzGC-nq)rIn= z2))7c1A!5qC|fQ(sDU{OP^)4e81X-H@A5yMZzKoaAiD_&jeWGq3<|=tIE1wd^5JFr z30sbcm;>v(s|aJwI>wf$!G&H3L4hYTp&q%Scf_+VNI23mlU7&(p9yg%cCK8X6d8x9 z1C*N1pC3-QO6yl8=dtY)JZ*sqkudbilKA|>Sy<-sJ1#%f%Jp!z)m`~SAT2o= z_x0wuuX?_DOTYzD;y5Q~VnUhvDc_x}?}wNwXXZkZRd|xjO5Lh#96o2HQa>8qGgxSh z7`8l#_j_zLXY|&smHX0&C|$vs{++sm0SBG^xuiIS(=kOkuUjtnWtIAe@FMZo6=b+8 zU>*ejmd)eL;PrC=s4t_cnvlwwfYlcJ;#-zo>ufswQC9A)N)eav5Gg5-4c_iZ`d8o} zK|uTu$c`Eux6TdB^ zps)kV!OP9+&CN-RRV%*JNu84vtfr+|Vds-OA+}i4TQ6kmjWTq*eF}X}j6ZwXYWqM$ z$-?;hoUm>W$-xQb9#h}WLSEwWMGVP0uDtc<>JZlO7Mz>4jJ&FKw(m`){S&QHlBuH+#at&TXHV_xFcH z;ju%%R)=Zi(}D%vPZCF)GB>n~@^3~tt`;ZlPq%Sg zqPEWPzh5ZaEL$ODIJ(`GMzPOMrxTiRA;o@GZhkl0_q7SJbOqAou^8d7#{Dt9#pP{Q zH3S|&Zpr6;!vvnQxl^<-Bd5KMmfMYEIV6@qH?H7&1eVt*-xqU(Z+R|edKYcY_PNXX zWq>d=xZ0nH6$Vp=guj8ozTDQcc*J9aqu#nZ($8gmE~!o)sed*H^kyXx;-D;y4~2*% z&B3aW1JMi`REjTmN4kMHRH^;NZkOE8v#_ufa0a*v5F;ToXKCz@b4?0- z?eWal;!&$rXGnVs2kXlIAY#X1)~m%x9$FM)L`&&AsqPWLxlRWm{b;1)auUrq-YaA{ zmqGIVb}obytF?D?P!!3L=&M?(7C9Xq0ys$cT>oN4L_`e7VAGrGV=%suX!>c6ony(K zb{94@7Ib^cp3UZl-wvhmv&-4mIAF{w=!HQb)y(*;3`Gx38r(&+pI6GGvFL;h7sZSg zYb?!>S51YVuBL9szB~tI`*F1G>Us!i(x6_K%yOlsiND1Pk%^a&iN#~@%3s$_%FZUm zVbzO5r}wKy6s6_Jkj0-KP~DDERNq~!=9i0 zcC_?hoSMRjorRr=c;O5_@fP2I*}gaUS$_AH)$FC(^?esRL$4j>-&-l| z6Dc??ZgWg5DKe$mqo74}q+dnn_o$%d8(4hI<(>gFLLnkT0w_^d;h%GV-?831wnrW= zwyy zgL<+0j7YfU)X&%UKxw$sv?|bG2_yrQf`Uui5{O&#T$?`R-R{lUMqF?j*fEB%T3k@P zkgEWH-;elv)A=7T^Ojx}ZrS<+y)rRdY);$nfy>M$U}A5t=ky)V*2R}wy>YktDv$X} z1G+A(zXem6ZBW@%8VR6$D(>wy_>a0IT}i6O(sLb|Te_cuf`XyNUwgH}u=|H9fxhSr zjaeYUyo|R@zWhjtNa6fG7=Voi&OkLw8*p}>jS8No5UK0FFRpvUJDj32#b4Rw`w!-g zR$KMR5Ah(mvDB2i9#3|h+@__)4E>+@T&Y&tgvL>qY&3kjzkV+--wU>FrO%xclWr4Mv0ABwkB?B3+p*Ol7CzMLUNbefF4u1-+1S{y zSZU%0>MdSEvtGWqDF!(Bu{3IncBxRqLBMlaBCORXIC2EzDasy$2X}M27Q4P~a0E1R zpzU88P%hDZufOsDsa5Uh|Fi&;1s+>(>#+0QGKXbGmD^;(cJnn&i^=_f)wa$2Dm+P* z?l#NiE?!O{TYy0<=*A_`XMHukg3X1PREe2J_!HOe&3{A|(^c1w_czDZRqgcx^xb#A zDPtm_n;!bcR>sGbJUld3drLux{PsSoK4@;$xcm)wAVF0P+&SiT+95ySZye?RmYn*n zUu(WpyOOwl<;`r#Q=(&Y*;k6}0vtyWk8PA7Nh259Pn{#Tturoz|2KkpbTk2eDT_Ko zV!?6Mw3X|@77R7+-)yhH^peuj6qJ-OfX#YSfCYr)5P#svls8Ke)!mSTn>RLhT8;f1 z4+?^YjU56| zBz`upA{^|r4=?-ffW?#?Ye#bS^cf$po-5U=?E)=ova#oI1pCO`XwCd9Jh}h%E0w@` zY~drtF7+=FrOLsB6~El(+kB;QXNMtoy%`P_{N3o?c@F)3SM@)JSc8-ZOAa-r&$n`C zuzRy3vyJn}$4}5_3|q6i!~!m2nF2}f=e{S6dk(w9_*<8&!+|9^-nH9*RAX2t(}*t5 zD=i8;R6rX5O+QM=&plH-?<-&+v9Xh^&m-_tt=RGJG(G6wWzm^N)9?jNg25gb% zTVp1@7CiIO4DnX4YuQupn+5Z@galZ~?ZavNM8QW~h?s)|8;|W`Fi6vrV}Nw+&+sr4 zGn&mx6E+My%CA9D7-PXy3K&4JK&6*%uLDHN-1pSylAKa^v{bRye|Gm(} z4-D(A`)0g?KJ3g7f1e%19JgZ%_l{0yVqfcN7@_gBZ;GeZcNQ-Bk zEQgk*>c!?uE3Gz8FWbyf!Agl4qATI3?E-SOLU#vUihgD{3TvY3ZPCiZl#YJ%a8Z&7(z5Lh^g7cy~GoO{8 zctijmM30-U3er#2Yrq+kLMwf}kjCih*P;{~>k*?AzQ7KrvS-QAft%{bj42=voQ3Ye zX268CPH6nsaAY%O>qkP%IOGBaw>P-Dg|~!+fZ!h+iz-Qh{z~uyEoV@t3x)Arc!~ST zGNAt6^n-n3vsCvM+};M41C;~Z1+dFstt7r`mBK@o+rNMqb_VsT51#xy4*=$C^0M6M z3D_EH@TBWFM`y zljh09!uwD5zpMwL$|A2OsK{jsU?0ww2B{VIf>ZbWZ*jTW-JX7R{%%ru7XU zlvw9^u*zqq`4^~e)%tPUiPmsl(<7{7S#v5*rA5MndG$GE0Hu;J{#pBt10*vM0`psYio5s&HCXMyIYsG zsk87~Po}3450@9{-ev1`DiazhiW-qeqMkNPC>&JKZ#fv-%5^b$)P)5F3GwmqrTZoA zy3`{%`>u9yuv6B@FJx1OqRenrvm@wSM>R*~YCj-<3n{|-ZLYdqQu?V9S<$iKOea?`)6py6^L!!L~;kV~Zlo(Uy@ykFkOF9^+JY zxky^LDUAXngr({f0-z2EDN37(I=t&fgAJ`B$8GcS5Igy__YCcOvVImjjb-o$B{6Gj z`NT{WDy9>~r|^T#)!@|o0kjXM^V%c*op*a`I>={43NFTRXAoOb zQc?r!%l~(%$Cc~E;8km~XQZA+TDT<7g&p-wC$9Y>xBB*!|oj(;m2T0^}fVdu)l@;^q3_0`ra|);Vf2+U)t$GXm zQ3lxH#uBjeukj0{r`L^^)~L73?2ToO6S_AVX6cxd=2D^T zWqG+}XL((#M4Hn{m1P3xFNFSL;L__+lH6}2BO+dHIo0nAwd?KFT0LKi8wQUB1bS#=f!$Tpw{_h)ceFgdXWIQ~x!*>M9M>_*-vEuaHMd93*ldu34atNrkp_Qo= zMYYAZf<8_U;7A(PhlPc;4n*Q#+uKDGWT~}ktwI`|_mb@RQ6S*3e^;*8`f5>@rvdh@ zUaME)Ge3wRm`@pUBgVLVuo%G9Zz~!cO@M~{RR)3|Kr(I97ojOAif7@Y=etGQJ+0S`IN?xz%hAApRvcwSmPEZ})d z2sGfKr2k3kv{_RLErRCo=D}T5d7$*4ts5<G}ff{Is-hz}cAs z2p41Z#0-9C`1Z$($N|TCGrtcRS-(r-**~rDg}_E2=(leoTT1IL0EZl99i6BEm^W!h z=VfZel{O0;NAs24+dg*01S=aJX)tv|SMeL~g|mX%O@ru@)fG873(zluzH@ga<#8y` zcdKK3BOrS~3a)BJU?7V<6W=i0vgHSDh>W0nWq6yrvIT^Pv>M*z+XnHY&YQq8%L^sN z_b|&jtxp!|YFT^i#(gL)4=2rLYg_-3ibMhTIXv4bq=XiIhNU+%?^mO?mVklZ?r0`* z+L1ig=^UtTyDRXmpYrZStr*%vJAO`^*n@a0(uBw4XD#p+wY z2RB5oTt-C&8zg61j1-vCgDf@sPqsj@~#U@u$`K!Z)>cWK-(AEH4 zolpSK>;nkq8>n-Qr1Ne836Dmd4Zi<(H+58X=!BKzX5a^T_V1sJmKH%^VBqV^z^R&4 zr$Q>=LKj0U7~1~wObA}$x}WHt;P3@K3u)=Gw^NBM5RI$ShUPhA}`S&Oft3xn&n>GBiE@Dof_ zNjCiH;8nhD;KU?BTt3dnD6e4Lmx*ZKIfNQQ$Q*{KLUac0gTR?^h;d)))vv`bTy(yr zk35bi8U6dAMQc^}vGDy>Yo`HSs}tzdX9wEEmYYRuJaFwoLL@WocFPR`prINbq@cX~ z$&orY51;C#E*+ZZw?+EcGd4|DCjG|-NkD%eX^#=Rk&)34r4+qcyd;fM+|l*y&3hXl>@abyX;O^>YDvHY@&&0xM=d>S=$)#Nc3Po=P1L_rz2-U zr6#=Kv=dt;s6k9Un{`(7h{r*hx&KaVgYu=m(AMV(>1(04I&47WFlz;Wh^P6iak~nx zyY1!KJATW~7P>sLcKRx0Dh(mdDU`rZj&KVhOj>SHsD*hqPO05J;c;~_@A%io#7luf zVRx13&>66q%>!;}z^zBx&W=SPODG&5hBRUK)~t;eS$<^!t{Qkhj6G_GX)lO{<)Kj4 zG&n&k%*RMtt|mVg^uwc)M1chcL#KI$PeNjc^{KA5QI3W)HOlAy$}%s|U9;Y9g~N;K zr<)O2n$uR?F+}_-_a<6ZCWtf&8DRphfAMtB=uScFX}5KGYv}T_4#<)Tum8>jwZG&I z`~nB|n*wTkcvJH#4{z@+kWnfXsq#7RqBOZ21cH2Z1IV_5HJCyra@ZESJCvz!bTtqE z?b%crPje=G7ltrthfC~#>8^`yiyyb2@i{c>W2=?fkJ+CH{)P%0Y@#BOE$`#$nmhBo z>Qg@Hfx#h>Rr)l&;Pa0JGwp+`cFltpw;=x`q!ke@*ztM>(zg%?m_J$L#Ccf?M~6OR zhN0*Y!&xICbqtS)V%|eRXUTH$|H`hbs`OQgBuO!F`1bB=x9!E17Xu^rJZ%=L;9efq zUVx|snwOV1zp(K2!WiM8fhj4_RU&3-|s?FDX_ zQNMoC0i|93&!4X@%zTcU!2_NMF3U@k6h{($LC&lK0Qt#=Sf)6Nl1*>*=oNEa9)dM1m2gs@{fSvEU5SO@gYl; zjqcNFaOiA8iw@mN`@qTyv9hvq0o-Xu z29aF02r+=@OvHePi3Jr-!s9tzx7pheWZbixCHuTzzy9ny^4PCNfxszxhkEN#LcE6A zuZA&|1D|fa=xtq#W)o_d_Ag!GBmVY__2Scy&R#Hs8|WJt%}ltn~K0dJ^1@d zj`rGRoskvFC&u8qwpO$sPjJCHGZ9qfdIU8KW$iHgJru>v)QGVbJ}XO0lsIg*62q55 z7#J9U*hxh~UJd^CI6fZAxxBIxG5nta5xfk7?ZVFkT%!I|IlGUFiv6HC$8I@E)dI@i zDZKVs3xT{4kLmIU*Y_ITCf0jH8Zw7<=>1PHz9R4e>$xc4`ExO`{ZuvpopQIVjbETr+3G!3XeEU{t9c-qA)mB&I$sHsn%d_)PJ+`sRL`Ri5a`6=*W%&> zJ6(Q$eziZ}9jQw8bprs=OG!lq3-a$`wd(Dn?N*u$!7twjhGzu4c2VG1 z|H(xIURYFA1n~zEikyuN4Xn=nnPS}6WZ>#>4iyM?Ldwfu4f$s@ESyr2T86b%m#p|W99{|)e}1SSlf{G79{4EKV>S4tG_YM4v%O$wurA?HF?pPi|q^@ldki_(uNM~9q5pi`fzQb za0pAb(MN9&F|E;(K*B~TWkjnth3w z2dc>L@)L}-=SL@mG4(V}n?8_r^EIAj<`EL|+3`X#Wfv*#_ai>3+143pDdeb^>!k>L z^9Z;dAxOvy80fZoVZRppP(>dNI79%%1_`+gfcEG(IPmW7?(ysZs`Y}(Y9(;+CE|DL z+4cj^ea(;a+< z&2jJV3?px$MQsyLBFbK(Z0~5@ak_7}n#UZlZiK3*!Z?2bqQJ*LfopIONPnCV>*@VR z0T(MfPg=~rGH&~YZ5;=T^|LA37h;`n`pZiOY_MsBv~gjqGnc=r^Lz_&+MR>-`WjnO zMAtm(=Y+j)5?DBV=|C+5JVvP?_*lIrP~b*s)cFt0A-Ji0rKSO7A#~L=v%(pQgpdD zF1o+fX6|AGL(ECHEZNRv5XPq`@sRF)joN1@OHz|5$%2QW*s3Q3AUt->K!{U&PZY0*cuVurKgG6*8^d;P}QaUzIrEMV5|!X4CbXS*r?#1G5w83Ek)r5}Y^6 zk16wCuGx@i@4pSP#iBPkUsVV9vp_hI-_ap>GUl8PM$Zlx3q1X6hxvQ>i!b*gZf5K6 zPP+WmU#HO&42xlniTBGKV6g`F^LE&XvxO^`N{8e&%-Oy^LsvSUM^^Q z!T=p%ej_`PjFWCcglKv_!qWQAah&!PKL_{T;>>mhkQ#;(M9-$9<*L(dy9>82+rx5S ze5`i08>Q)%!AMwCYJ!FZ?Hh4LccthrIIO!UHb#M*UT1>Uu&~$6|K+kZ?EN)^qqTVX z?Nf0{$HbJB&FAN+3P!1mL2~<}69=hi!NS0;n)~peuA2XSr8)gTTUA3xe}iJ|`r@Wx zjK*zo_O5zvv4E=Z^Spux*|@n@x?7w~NX91=D!->|v&ba`ObH<<)uM+uep zw0r?Xq8Y9~3y@lX+?QLR4s7r!kkM-$=jk??aNvXVgUx)D==T0TsSHEE$|QWEuGg!T z1S5R=!v0%m_KOh)TC2$oH0Pmr~6&z3Y zM~z!NJ`Duc5sx+Ord%pc!=7gf7P+jLm zATJ#o=R^Rw041s%c+0mZ0wg30w*=Ojqo7ahzf7$os0!M&*n6 z=)mn-FWBLZ0^MDaC0Q56V*k=xBcAN?SOvd1PnCg-JSTu2qGFSYY%I(`Sj+px0w~R} zaauV!IT??JUwJcQVAk*8>^=SH4F0h{k@qHsL^uLuncZV!sNgUOuCK5E>|}m~%;+`8 z!D%-9>PYi@OO-ug(!O|0Qm$7)>PsQ=lCTR}O+-7Sri!hkQlaM*FqOae3dD;StR(s@ zYafkMR4C(Y-zc4PiG5P9H9EIOeBzl~FF0R31a$N~P`<0EsGwnC1;FB z?C3Ez9BZtjFU`so?Y$3zoG8Y+&qaTS2vQ#}bx_Z3{GAfP6m@>j9a&^JTu1R*f9$r* zcSb2C=55U$0tna@<$@cB+Xs6gG!`0yC;eyF*TXm0*UQibk)U>m*T5?51F8k1TAw^d%Z~rk0^mQGPP`Ef zH7udc`4@YK0rL+7P96tsR+f_bp{uTC%M>)`^kuz1oGK0KHN-%3xM0(B3gxu~5k{wy zq!i47fdO&AcC&wZ_OV&4LA=}>lL2}1j|q#YzUz|}LZW~BTYZ2K8gFnk2F}lLKsg`= zs)GLCTk91w1wsIsya}e_xJjwhv)g-fY9o&Dv$;X9Jz&@wzeM)GkFjE7przO?L-XJe*EcX$k>YC_n!{Q*~$t?yS%`3X{3+H3#DY(#7JxG zReLjS*7MK2QBxKzw!zIQf81bd^8DGjscZBnht{fgnrC`+9!_g&xQ-TUk;~ietq$1L z)zty)retTIF!8alpnI*o{`vF%_Tix$NM=Ft{FnZk2V-p&CpV)LNILUSOB)*-`F!uW zfVxD>ORji^f}VbW?xZ6C22aGNVS>FtMe|^bo%__QeP%7hHu68{98ygZsh=Uoc+3h% z&0a`LTj`ECIfBwRWC=@%N>Hq3+f`~zC)tzUMeqC`vbn8sUQQYU2sE1BLW6dqEv&9` zoR?GCgsQedxY)JiB9u}rRvjDiON7=KMV*MNklEqbB2Ov13~iM#qcpt;yDkbuecClN zLN9r2`^;g`TV?YV4KImh#q{zt@bw@8P#`MCl8Zp6$)#v=9$=C@z$74`qRIe83$f%6Dp|G$} zd7@b{TjUibFV6(&AxSpp3wyzs?AMdvu1~)Z7`-?_XXg%At4hOPr-aFO zjFi4i(Gwrfrmr0i7}}Ro{`%@?Ta7%Xq{S1EMgO@<^poZPOH20+W0hHvSM;jMtUgi2 z7%vo^s^&v?>!Tg&)$CA=Kf(qF+s0jJ|NKsw%~w%?gy02Z))7x@4wt~gLnv4wd#2hb7UAub>YQX*(GVa z+@ox)3a0V;Xu8~DlSAxCTS-}Mqn(S-WL~_X)xBONz#vLjdOs7VfMewHNq@Z zBNj6d8gZG^r)Q{4l3|toeOR^byHacpA1ZNNZH8o=#_#74?D_MA{l8|1=D}3Io+}jG zz|Y?VI2o)Jq-b?7h*TWII*iPIm}dl#`Kz6!Mmp7%{xv1SlZHXccmHQro27ll(m2fS zd5M9+T4hYAdqV%FuH1u&!zcBTT3I8x5CMR*U79N@Dr#!)0ON`pE@|ZQ@=H0d!t2`V z5h!QI53Qy4EbCla;Pd~}%KvUPjw-f8D3~bqJ|)0OCe1F^Z&V<4;Xm@8WVA{DiswfK zYH&y^e?)d$~sqyx}>Gmoth^xG%d zh*6%Y|GCua+b8T+`T_yS6V!4Q5bBtL$^`-n3RcY=jIl1Fulg5p`X@O9JgCkRP$Jb% z?~6UJku~BDL)(-_@XSQJpeHv0ll=rG{s03n#$dFf(o5qKMw=l)y__W(JD5KdkX%`q zsPWI?d(i!w)a*YcfCTT|3^A2>zCYD#92=9*ja045s)ZSl%6@Nz})ZNYn9uM9jj#(~?8Dr@7I6YW|E- z9ar$t-4dZ6*=nmF++9B0%B;T><-bMHb#CE1A}5a2j0e*4X(Coz!m2)mx-s#q&K}4n z__Pit5<)?L*g@~(gJ~sp_;_j8jkSVry$#;NSW%K9$gekoS?V*w2+WV-6CbN0lvl+t zY@Ms4Pr_tz@HaZh1f&V#;Oj6~?ZJll14K%7A79_-8}{+TYZhSXw1H|5P(vDRkE0gh ztG!>LVm3VF_U?|Hg9AhC1K}b-5V_#s-3Qw0bVnm|un)8F>x7%m#G7TIEWWIYW!qJ8 zdu?BCT=Ks33AW449x?8N#MLY+zC=tFj+PRANL4=TVbPeU-HMY z#kS|tD9rE8`>%tPvgoqt$3{PN(`+LBF1=n7|EmV(Ly{;4O#WkM`_49+Dv%M<$Gc#( zDuj;0gh?%36slkks1%3+o$M;*&=76#BWeeR?7m-r^&J>J%J3eG z%TH_d9nFGcuD(w&SrE}~lFskxKjkVti;Y(ALFVzT4|~5`ol<_rypOtnLTz?K;vj+1 z_1o5JCiF6`Y?QhcYT1|ito{rJ!pR8h1SK7Xr#zi273s@cDc48U0tJL`eIQ#w?Erp! zW8*pRrikKHXA-i4PS;FT*BS&-ZSGGvv^;xcTzxLT2TZ&_nhh5YEt8Y=pBWxzfhU0` zu-%+B>xk|+9Vw}Ao?9gOXf_M$0oj-D#T*;)AMH5rfHAw_a;R=LH)#%BkA9qQ)yR+S zG&{|5zdf8LdG`!?_Z>Zp>d)xtPXJX3TlY?yPj>+qrt@+QGA2zhq6L&I^+j*e*B(Pb z5<|m0igl0Gz`G(oEybze_w&b7aWV<+KzKV0QH^JHYc*lEt4H;i{$+&oDe0HK4gz15 zwP6B`nnV7Uh)-1k=>c2AM||%32{r4Je}+eCJ&wnHDC@bQS)fOed7-a{YN8n6NE)55!H&t~t9@8k{4H3QmP;jC>|aYQ>lGRHM_OvL@;eLW>`i)&_VZ52 z-Oa;DCh1s}LZp@qss3uo>X*7qb)jDiU7K2!cS4xGd3M$AgAcaidHYi5Oouhx);m~t zOU?2c5A`J&a|2T7MVv^Km8F)Lu8a;;-zupIKN+w)=r;xZ`pCiH$f%+&f5N_9Zstau zzV_0|*3PgSH$W_Nb6{M4vp9?~QDkby3#C|j5bU078!%z!=H-+t%gT9(^ay)pIz`=< zx8WucFfvIFzV>?%ejURl7@aA*~VM9x#_HT&q~Lg9||HOBk36!7T0T+ z?3$yWpB|F&S?TE3kE+MauKx}e(_d#DIf_dc!yrE73~tpWc=n6|XD6U@!rp~ouE z!IzlUQ9Du`FvX?!`KlEE16BAy7ZG%P;l$l z%x`6W(cr9@U_F26l&v#BWE`!_Gpif&^n6^sKE3s9&M1{_7~IudrC4+_O7`0GX?O2V zPU0T&GAPDawX-H*ja_SfaJPQW4XzKHW~K)0R)My_(n>pA6O?l?>rbs6+I0)}?Bo-% zzuyHsC$*_C!Og!tC6?B$8eh(a=c#8kC9EJPc1qW&J^b_W*@! zj5YCXi;Wrb%2S>d3S;T;5!rgS%_3#ZiZ*A2Vg>O1b zCm%z5zn>TJas_lT1EBmd_eEDj<6LPEkPi$cK)aG3{Yd5iW29rRL)KkgKa0TV5g$gK z_-^f)c2x8Ha;@|K5%t~iRKM^4=Qzh+A(UB0$gE?Pl_IN<6`6%oHW|kV=V(xh93#iB zjO;y+aiVzR7|G^vGP91EgJb+&-k*2h-~GpVc;K9Kz3%(Eulc;Lt7LR?pJsxnSk*S= zTSAiCLSu77v1_{PBeEH9Eo=Lykq}92f4-^ME&*W=l)eBsW5{%vwM+GGFU~mYF}vd( z2^g07ckRoctdJ@BN=HJ|?Mr&a;U~J0p$h@986^~d1!vE#mbVWY7r%Mlay=3p2arp# zwm#Z@&R4oUFeFPYEfJVsa$UgADu2bIv`eC|Qq5R+$a6N^4{cYXC*XpWRpz@@hoAP6 z7Ys&1Cm(6L2e7vmS3ZKry_{I6I?1_6;hfiDeeJ9rKpX3RJodgqNK`#&B538H+QwKl zFXbjDTj#krDF&Luqx3GLDziB3$prp7RR@@#j>UP6#>O(Z4`^_`KfMZ!9N3Gmfu{g& z4N$WdH1qXEBppk~SqKL*97{=ZFN!aAur@AfvCxfbCF3op8UaC< zn51;F<`u3IG+F0^ePM4$A{ph%Y2|;ionHN^0N-8U`g8qwC~sl6)+5zjW$Q@zAm@m? z6jM#xoMYo<0{aZ49c;Y6Qm-~sNN2gZw}BMtHUK@`2I^bx*9_iqC>`&goxnc;Ym}jW z+IWmtJxukec?dLtkg_auxYaF1v+GA@o_a5nK2?_$^m;x`=S87Ujru;BR6YJIR!|oe?nKSLgy0Nk)wO3L_&A$~h zG5ip-C$m55eII8$+tOoE+v&eL3lu*pe6S5TZx3`NaqdoEC$*tDT$W$(wy9^MFN;U= zJ*CS_d&&S{TGRk@<}|C>2(*tavaT(u$no?ghoJe_7e<4$GWmt>sf!z<~-bgkmyt8VOS&F%(rFFG?MsaMShoHDv5||J(RG#tOD%pH>wlX@@ zHNfYYr)RlrCHiiyg#7SaK;{?|RH{EdRaRV2b;^2_sX; z*V%G5(-to!8C$V&{Hl4@ouDlM@4G$jR_X&($lSla_*yK3SWs9ZBv5+hX*i+Ha*OC7&tTB z_BMX>fLmquGh6VTRduKKT(86~@ujBk2|K+Y{^`a&OQ|i^tWFCVbE;jo_9w9v+6kpG z64uP?9IP@Hd5gVccRDUH*Tz(7OxA zXqD+PHf2#CJYF$ngQgAu^8re729U$D;Y-W>uXa+Bem4BLjWD*Jte7#DZc-Iy>qdxq z87yKcTi;5<&#SoTT-FODuZ+Y3MX{Bwhd^`u4?jNZ_>R~jew5n3yj)6nU{g2kao30t z!j9BYot~)zQR-W74*f&e>dBA&!BV8Q(DM4a%5#r~rV_KN!ugD5)C7hOzUtKTL8CUyrWMGe zx1WNec<%&4fQDY10|v6?z*${Icw%-RV5^!BHe!MIrKZbqeI4C+l-kw_UcTS`fVY2P z;d2G|S*X>Uj z3`LQpQ-*r#J#lgH%@YxoFZd;E>yMR#eFDE)^9hlMw6Dy%BQUwj0#@fSn8-Y>YKVqnGlus^%Ra6cOJad+i*Cv$*p22%a{9;AY?M4?Q5C#_C>93gT#`p z4$w3#oEqu{4+DBJGiC%WU>KMU9`~f=Tt%Lr!#ZZ#Gp7-J%rcd{d7<)z0_yanb80>- zOAA`6H&q$5F6M~@g)`3iyMIlQeVlk6yV1(1l(He?zg9hR73k`s4%9n-`vqUgl?s)~ zGoO8zYtc0Rw6v_66V}B|Z%qmPZefy_9`GQCeq9SO=|c(xN%o1 zDdmk*&2e}Z&-6E1OB7|u)G+Mwtiks1nP4Bu>hWyTNWRfMDC9b7W zslL_nQf=@$Pm1-#dP^Cf3Pg)VRu}7-2|$V-St&$*?FzXXcoytoxEziRQx8v7%eJI7Rgu z0NM-yr03-xpu|EHa5(bn_C}c9$2@pSCVq9oU==&Q8>-jd0z|~-0RcgLhFU6MX_>pc z1A4&0fF$cx$B8Ll_I=x{3VqBthP1-mG*zwA>09@0d=7fAL|5HK@CgZ_$HJy$@_trW zSl$0#;oj%hA(Sd>GBe9t8r4+xv+7gqPyXmA-Mei5TmYhKgCSC=FuE(%;JUMui7r}( z=2;TyLiTd5Kd*d<>yI~|ah~8|&!;z;O_cq8Fr_L$QPBJgB^)6Abqo#1$ZOHLQk|o= zqc7vR67>Rad3Rwi(|aL-nqZ%UCFk+av)ZC(4Qc-YDiBmj}C~iC`zetEoHwz0AXgg1-P@b=Xx+3TmJc)%t}(8 zTC;VidHnq5F_)O5z1*O}5B6ra<}Y&%O)Yl5_3TqZLe9kx67QGezvxPT%&tvXyrF@} zOd;KH+TJ_g=4cws(yYPWv;3spA*;QmlUo+37VWwe2tXm$OgrHN)yVsMFW;G#0%4YA zvW3Aj#OiioUYhEj#iLcUL|BwdwZ$H9Nk_y%c|I&if7Dl8W=?YEF(R zUc)?ziJG$cPK1=+Urov7eSibqcd|LCxvix3+4H;{G5r&J?B#2K17j`C4x0|@8Yf?m zl~v69S@E>y(ywt&E!o}B7gUWGxXrMG8%)g=Sj2_pY zof2UHMI=Wn9@?=TLd;B@tl= z>cfmZC6+o_jx9QM_w_B#M9VG!V|K)4NwdaEu!h0x?6Xz@8|b1t5nUV zh8p>AYf!c5A@0m;FW+~czh_*wFNXdgZEX=i2)<_c>iEaf_i_fu`ufz7EfEck7X6js z8$NFlOeZUI0!E?9B!^{ogdp|XtCi_U_^*xUI5yDZbpPS|08X*QSS9dl1aMiSGbw*L z;{5<*_}jhOuf68kJ!JDpFlzLkKPUxsD|XB+A=A<7M_{&{;cbg&6_anmn}JycL3vg8 zOH1nV)zJ56Po&;FZ;I?VR-B*9oA!78Vfad9d1UU8jnJ<hEyeNdT|^X33S>Xg-x`hg81~>i0th;P264cZ2%?S#4DbFK=T}F>^WYN|Xd#46m+| zu}@RivuHG~xLZ2+JvPnrw7Z|tMT%7{se4%TDw$^Yk^D@b;i`JzZ8>@QCN}3}6eLo% zZZ*Z!Iz+1QVFQ4EjT_IK|1@(=nwwLDQ5E~iC1Cq|amB7oSGCM{E5A279x87yEyY}k z$Cy6x;nI49?~;CP)G7Ve$g@fAIP|#dQQ`t8+ZfXiso@$|#i!edAJI{W zHM2HO|9aPLjY&*<=fj}6wEg7zY}Z;px_UO;DBAuu{F*aV&Kyb3P8!7ea?Q{ zE9SxtRZOkhiv2(R*$6{y?$`bN7i%5>jAb5Z#8kY+1N>B6M`F1vSr3y=y1r}mZB}q* zH);HtS?m)jw+E{16Osb4%RA{&Q6hI|=f4~9%E}%qZLANJS2GtMFCWA$Xj{b{qKkB& zM~&Uij2>RN9e{h*Jzc6G*=5h4TK|1pvOL$$iQC`@{qB=;*>1_VJ-yOZ=GR2a&EGLR zk~G;2)z)&wR>#e_932Fyo=SvN^puc4e$X_-5~@n2T0tocP2qIbiMcdGJ9Ef2%Kzkj zSKt=8Xb*l2VO7NeB}uiN^_zidw1UsdS_7M!YI;UF-1pNb%mQI2L-+0HfxzS?9)h2M zhCuAE!M5bTSb%MyHZzG|{-2e}+%5V}ZrTOV&z|JB+ZYaBrQ$`HM!tMu)Sy{d`^LGA zdwV{-{tygJHeYf4Q>%_Nm03Oz#XCzny%=dZM zYYU7E0+`+YhaIFpNe01r$5>-x2|kY`o}fJsLH1)+L7ArK|)L@&{q7}R;L)B zU%zH*S_`~~2ROPVhS{Js>&7STu1Z4RJXjq9s%h*{rL7(cW$cbI*3YiX`MbvEDXxz; zn04Y%ZTD@%Zk1xrel!sP>=l!J$x#2}u2I)7PrJ)y3tIT4 zq}Y=8MVH280L!k!?{5|W03S7s5PU-}K&jZWqZsE~joEx>+{Ok3$>L=*)m5P%aLMys zd7$vj@IUc^uGbMCETrW~t>H%k0AtO*h4p3u5H#L&O8+g^&HY8r<9wMn@&)0RB3!aG z;_Z*hC)4Z;gopQ18e22_0-t#J7gb*g_!T`(6_OaH=D%zP=%#DIWKvUSJ@9FcT?rLy zMN&Nb5_$LRlpgs=-40My$?)3Ltv7HWN zFe#)RmEL9Z)?G3N0CkVkd}tio-+lxndZMAEl+@g5Ahb8_+Pv&tyMtElrVmUMRYydi z_1AtOV$8R41KFko0An1{*!XTe2s@u-ZP^&;v;WHoZnwW&Kg63eC~u@H|BRG4k~#jx z$<|^UumJyEXa+86tNl4)uioI9Uw%45XdeCG6IY3TE+UW^EPY@*kFS;|fOUH~Gobbf z6<&c?N7HL)Hz)%a5sP?O-y8sA%>~NyIdkh&fC76WAl*vbzjrK5DLysXqB49fh7{wV zEdh``0Fa>zVBzMkdO!mjV#7*Fp&Utc6C7{If4yn^^I5hyvwhe`={FScv_2bOX<<+L zFR-ZZ5w9wR1MFw>v{N+Eg9%dCp*Cxf!VLAK8djPS02<5!I*_Zhaf<;!OC%Zw1Mdr3 zE$_ID-ML}%DS;;su<%S5WL@m0XXD-$(TV)~xF+U5o)n2hx4tG7)JXX2JP76(HeSzG zL7w#?t^o$9NpJBDOnisiaM5X3&9s1V7a&2L0?hP~3)*tB3)^=F;-GRRSkm>GO@{R` zBZzBTbM+!J=r!aN%%md_B;wWd$0CR0cC0`Tn+_k)sN$u*!gkvqAbN1Co^sAXcYl+f zQTd+#a{v_!*K!Wqnt=Pp+pwuG&JI9n=_G3RvH&I+KY01d(XM(dHG z-j8fBWNNHn7%qfquj&+bfZs(aq1pfwi#-u^GK14CmL`xes?Qx5?PEKz#)1}j1^ea<_F>uRMEG9K*N zxY=$b@NDDjU8U}x8-Netcn?q#!-9++)6GY7X=!QxugM7s2~Kx0SDkBLd=#EMdY(Wn zL6vL;A*vCP(l(ETzHU1$7u1WyVVpTcio#9D{s4s&K#_GDP-JTb^m=%eWJSL^OZtgE zn>%P6>iK&}3adOUArNa3m@fK1K3HvL&s$Ln(UKc@9KHzLV{bXn|Mgc1D z8LhQ`sR$BgZ_PdhA|1zI)S#1=$K!y4Q%snXSzp%=jCP*{qT*eHni+s$AY-0v@$q7r zZbd!iGE60j$lB3E$lmAow(-ylgw%zUW74S(d4F3T9{?u_08)0_lPn==B`*+!oxxje zA8f<+^G&0S6Q}q8cQMZk3%u*$+xlmtN~H0Y8+%LL9NK`z=>7$X8u-sz-3p1N^b4zA zd(L|og(Mb8v8iMF#Pu6LFB_&(+su*H#bhh0>R)FufB$1GN7lQnmmK|%MXI6qBMXuF z$s=x<3PT-x9qpHv*Ak+*SzIxx`Ri;iri&1+SlLEjpx{qi8 zO$$|NKwDkMQ`_To<+E(k`9?AYsu5@fTZEOflj0YYOAT})FwjXbm^@m?$>4f$ zwb1Z8NtbEDs7TNNAF`X9V=FcR+egbn0#P8}!c(R~%0_ei>x0jaHZ*TVyvJ~AX=y(l7NA)uFFGs{S76eh{NM7>96oID_jRol2oz_HPKvm3$Dih z8I@Vyl>Q%?;^^+TVgfwsN(3Jf2J5PH!!>s?rZcpcAbnU0_Y%u(s?!9Y(>d4#{S(?M z8ZN3z6lVPHrJ?*1k*514HrGA^h;Uo>R{;U!s`WRVY;l7PzYk1P=C~dso{FWMCMZr< zfe`!apg3(Y4K;^4#lYyStpy>W^Bsi8brf2Xy6U0oEqX8D7~`bL_%^Szfj++wmhN}| z9`4xLz8FsDiE+V%4X*t}z=-*GnJfam@?7suB!z^fQZo(!;eylk&nwFW=LtpI-5w-( z{SXa&y(_xNkM_cU@8JOIUu0SCtc4K9BtMIasuWJv|NFMVvvIn3iPyc)9y#VHzI=DQJ&vIN^oe<5NKbLySM+G!(Ebs(^n(QZ^p)39x@&TC zaUZyV-brrzlix*EQXZQx1?m6$>>@5gMNy@a8H!K(S6n+qD!{plWx$66a!!rW<~>Q- z1drk(HA@jtQORR6xGN-exras4Ws`)FT-mE}4U3;vj9k#>T9hbfx6cXxQk!ii(slif z0bG6aTa@-vjCOXesnO~7<>SMD^55WjmiMA|@IoI5f?q{|-~lunkbc?Xd#?vI`&18a ze+?)mA727)@>?yd52V0<3C!M&zU?UL1PfWBYBp)L&UW=1um=8cS+0^!j_Nm%WHND* z@Q%QS$B}Mmf$&9)8=__B_CU(q=O8-)KH8xwBQc@|&0{yJa+Tavp1s z2dSd}?<CeWRSyJ$OZ%aF}j!T{qK96;WTMbKkBFGO*I~Yv5z4ZKM&Fi zpO$vaxG~&5-gv^^n#|ltA~D97)%?Q+t89UcfUXd)J7leV521$F(0X%wQ*B()wAu>{ z{)`^)#jjR$8@lKj8Wsk2He7n2c<<0<8~iE{@u9;- zxwCt0Pne{P9^05uUY-bWgQEebAhFU(?_PAEYOOiFye`81U!FssPqVxyFV?I)UBRus z)9>c?lRs8B*A#egS18Plev&Co-}{rF)CMiW9zBc$2pzx?xG`g!IKGIhi;$jGVZ_O` zo{vN4-~j>~2nUdNG=v66X0lY2K@cUC^VxE%z9FEFk~oLt^!%X~IgPrDvFhd=huGb~V`c^dz#A-T>Uj z70nf_=;l~fque`=j%ZZq1A2uo`*mD0NnK*~VAGR?shr=VmE%?(CUjr`r7TUPix?<@ z{N#Sv^9VixNhgHf`Pc7Ueh4R^@=#pA`rTnF!vryK9Yq6Q#Op2NExa-EqTU1f9gv1T zqb|;HD_jijguQ)N=r=0ta{o8{F=HBuWbl*iGaW8V^Ybvs?J{;4Xm=)V8|7IW@#G%c zkF$}N{@unQ5v327dYuJ(tUV*`Q|sg~y@pw~{KC^aGSH46huA~9k!|b-H7Qm)4ni9r zv4WV~Gj2?<6{<5DIX}~HVZiohiQcs!LXl{pc8rOhh ze8{XlMbaBaL~TU)1^&%E{ko+U2IBC*)B=20!W*<9P^MO99Y|rlaj{HeqXL_meh{U7 zx|zTdN&J@-iBuxFUtvBZp@DK1mda9PWZ-W~f!e{dKY0M@;m!$jgRVl- zboy&4HxTyhcBu@9)aR(un201v{3;pOf{sDpzk;UeMUMW zIdL$YBk8yrqmAsND`@{$7y&Q3(s|jnQQ7aXM)H-jK&GF0vf>rd%r_ly>A=Fsa@-iH z`Em~sywm*?$o-p13*~FTG4+uac?+2VAMPMzQhAg6@T+Hu5<~|FCU0Mt^E(enmx#(l zby!Frp#w{S!X{p3Ngbk}icay%Io#%X#CfXnffaW)I$H(AmOr70-grg4yNZ!u$jNOG zI(%mLsC5F*lR6gn@O2;?Tc>I`4G+l2!Efee*)xQo1KWo8%z7|FaD}ussWwe8DiNml znrs5qo%siBCs#S?t-3&B2?jQ@~CH(CW7n2ebD^|O7htk|5MJum%8Kvn>%QhPTz$N z%TRs-S4kZUTB4Vz$4hnNAEa2xKMaIwO1@b~&I2lby{(T7-bRMBUHuIxn6?*slfFHx z0x%WWs)Fq@jRS)>7PDp_R)Rf=&Pv!1yJ0&<90b=f1oq-n%$^<@;aG9+=GkW#IU3=6 zykF_}+a`}TMLI73eR_o#fbKjIfK;F0v=M5eS4>Ke9D_aN2EpMS6gBm>&TbSP=CP zSB#UyY3OrIlbU&yV;$m0wUzkpi)LH6iM>zw_4zH7%y9j*&STVcM54$jU*Lw#dj*i!+peu4b=u04v8(}PFOxH+e=pLY+$nzzyrf5cKq`B4^=DjQ z^FI44b!eWXL^LL9zyqi>&;Jy_HQ`Vs^()#R^IAD>SQ8x(EqKB@xPe`y+>6DC-r`Ks z&6d~1Ibs`0UCEg(I*N{-x8lJ3>6&_$hGz7e=?02;1jqExR_lY*F?D*=W2Uzd8A-KG zn~p;oaq**8!YuR%&xq{kamRj3?I{BHGg~sHxxleGau)x)bby(GN&t*kGvy4T)|Le6 z_zl*GHkhsP>+}ddI0+lB#X*>oAp6qSp2q7zIz@e)VA+b*`T+ zkfv^!a6fnBqFHoVHl>+#?A~gr5>c^s#eq9Qy<|FaWEW%yt)cDpCx7Ucu4k%~Z9Kl{ z9fu8n5fzo4h7I?E>wxS*_h7<@1Qu@&<7t9Ht0LFQ#XUl30`{a2&w!dhwSY!mt=zp* zX@KH>VlATuKdWwtJ=bpJp-P8L;x|2>ONzEeK0zEY`5^o~Fij_CCh)^*?GfzLTe$ebnhfxJLs z;18GHo_r_hWM5d#rlZ8!QEAcZk2bTYGB+}+@=on?$T8N59qw^>`&kZfTG~?`u|nzD zCqo~!o=SW@VOSxp6g3Y7kuugiU$PGNqZI&d8oNw2qy{n!j% zt6aJvV=OxyNUg%Y?Y*I!UMX3Sc~6 zk)wKYW5XBllX!6Wl$5b25hA1q#AjiIxr9vb6~kYP=JdXwacwvyoE1*b|00UF`O@A8 zto`lx8yaWo1jR2s`QyVY*N3M`9n<@DyJ4W7L^=r|eU;0$MX27UM)FuWJb+G) z<~PmcFOpXsWpMCS1`m9gfVWeqjO}qpVm$5#_Yh`D#~AGN&G&neSqxoL5kDtCqrSs; zAMF3!{wuA85>I`Bf|uBq-cn~Qxp3}4JOZ6dOBG%;cc23ZJIs~b2Z20m=OQw7E^fTV zD99p=_(>^1i_Nq$%sV?A|bYldK-jCYNki^WN_IdvLL*>v{_MH|U0MfKyenfOe zoJcsM@{%!XhQ@^XtHkpNAo8+~tOcxrsT>dWRtlEm(m&=ye>p>|CczN6d5IXSLHse( z;hp}%gS!r|FzF0LQj2j-sf*prGlV@gU>#yBZ&qB0f2r~OHBJnN#c9D-61=-_5bbeG z@Bq#F`Uy}Sg`0G&glOp_Oy6$>U=O$JnWMnAC^1Rw#Ujfs+AL|!?=b_LKBQwEM9b$S zvBn9i51?=siq{AAScQvU0xQtO!H`b_@l)FQuTB0^=PG>4xB7TIk{e}>>_9@0Fu>&W zhN*Dj2q(0YtbP}Ndp&rC4X0WCMMC6W+M2ss=?>$CHX3fgkIiw@$N=0w8-6MR2}8e` zrN9EP%BI$R6|i8+nD$bXJrIJpRAl!wWN+SuxBib0(SumEm72DUgwQEAzk|wEz5-C$ z8$26V%e+L3@94)*z5J__quei^QdJO4^_VJ@a72SRnIzalJcRVA0&_6fMJL6%c3@6XZApKIJ{x0dstm(zN{R_7q`$C`u4Q)3YE|4GZ+}Cv!w+tqN~waM$n&_$vgX14Vw?f)9P#(S)m)MtQ<{Od z>&khUTT)U~yw~FhrENiaC8}?D_Yh+E4O$1){tiHS8+wz0xx1i3`h!og(1r#ILLwHB zfL(Hxo;V}i86pE9$y?wSf)}1;V3Ao}o$(K^tuwUVHN-Yhwk7CQzvHE*@rG9`rxUO{ z)MscjE{yVRNNaj+hl}EibvCw}g!zKM5{xA8M*S~R1MIIm{l7aq4l*DR+R&3HqQAX@ zg@HgrA4IOQ9rUnoKm)``XLxmlhrTnm6PFLoBhZHg#tQ$o4ZhG1*`q%92wr>&EAvKp zt&!?U$03MJ%uFN@>X}a-6GYvE(yz^;JWzSaBYHG2`ivqKVZqfyuNYwEyi!kTaOy~7 zfe%MJa7;cS8o)wSeg*j`Zg7=JZrn-6+o9!@ZuYY_DQx&CKel@#81a`E25+9~E%P3# zUHM8kdPC14NZ2eX_EnC}l}Z*IEj)?4_dFfnZxU>P-AADU=K|l=$im@!X}!sa$)<1k z6wryt@0HLmSR*Wq3j*r3(Q#<&@kgh#TO1-@o;hwkwyvz^Q6pP38J0x3`6dnH0iuu5B`5^@_kK{!e`>-azGxB3HM z{Z?dP_@BTXd)!}RnjXQ|*kxK6=FaSVk+};$Nst?%3r-KXB);~J_Khi-4&8?5IU`bK z4@sfwV@oqJ@RKfsc*kJHc14Q?!_;4AbreQL4W5B>F`umSMCkK3O@?~Z#VvUNmR{|) z+fa-m{ZCmS)fXWqfxo+4KP)mi8lbYl+}}wkrDeIacP*W65_HCM@A`Rh z8avQJ>R2Bx7WV_^ObRo)EO0ur?%y@Y|35>G2Bz|w2(>tC$&yCz2V4O{XfrnUO63Wt z1(GC|o`2#k6=9mEV^~Q6g zKa_q$td$*b!2Vl9`eIGmP*^wZD-Z{=mo!CH2N`{x<>a!YSGSGKMA70``C-^8Kpx)_ zRsMb`1_S{9#5$}bkBQ=#U@A3ew{&_%km@qY$P=he*x>m33T54D@;e<_4jAg|{^ZKZ zqeT%lC>z_D>OJChqA>^&E4Gs%ple(`cMfrKq4Ah+gZk_1g>HRrA2OK`>USAp^a+KF z#Jz+EJXp%YmI{f_H*;(>0h(U9lfX#FzA%Pk%#k*nJbH|1nIf=ypZZm?Kw{y))6uN} zLZc>;7%N}c#4F;900W{tA`?m^As}slL$C3|aT^IiA&?x%NTdds5jhLwbP_b8mf0Y0 zkcavu{Aa@iDqkxIh=}`!aF@MxfP58z&i8U#n5F^lD)VF$-5!Acs9KZ<>;}d(Y9@bj zA4j`2B!sFEsnSzq_vV)2bwn&=@l0BnAP@x-vuS=#lqYAv1D=WcYFr2un0%h4)bJmj zQM&pP0HL%PD+3rWy%cx>Yy=V}ga+4JmqK$n8o##4BC&n`kfR3Vx^;g3t&{?N=WKgSFKXM>^PAXd96y>j6r-fOh80lmWsBHqB6wO2pAh5Sds7> zc`wRqprx^nIS@D(_}H+ldLqZe0unliAZ&|Wcd2<4_FP1DY}D&j=- zr+#9Jm2bq{n^Aky(I z69K?8F~eZ^-QagG*Y9ZV?Gs;=Z{nUsOz$_f)o?q~kK0TxlTLie5}ogqfeU_a_%QEZ5g^N?ljVEFe0}Hk&$*$7J z@M7cys!a)fmYXe3Uar!OE-W%usgk4H_V{g9wYCc{BcK8`!(GL`OkSZ;rmFi&h|CjO z@RO@F#TSLO_B-Qjh+vq3D*Xup$mEgX0fzhjlc5n+Bf0N^5$< zG6JpYBIz?|QjNxj;hByxdIynsXWhuSVn+++mi*~`yvvylMehoXtl=1bm4?r8@{V5lhsvhGf+OU?3rrcvTu3BjX=)9kd#&BTvv|=y`9p_d3Q)qGEhx?`P*Xk}=f=p@V+~ zh!E!~YakkL^?&xePh9%ONV20#V=RJX0P&Xj5^hKynDRoj5B6X$_vkzB5s?k%mg&9! z5QxyK!d5t^G&p|)aS8!&m||rnQWj|eWEhU`GMp+kz*1huj5X)1NlvPfNU@+0c6XBo zy1lP>L%O^}?%!uD)+}Y+?{7NnT~T<+dQtS$Tp>{U#kgL;)JVV5xv#tXOQVJa$| z<+-MoGof^v6|=GQvl@_46kH_jkuSNP6!sY_NF?brP}E4xs{G|Z9b9Sa3$iejHz|Ym z68JI1(O}|fpaY#|1X(&uNfXN`et)Jh342DFVXqRKxkdtlF=vT1Sqd9wOYa_vCi~J| z{;ui;f5%=z_)R*|cbWT3rVwuyaLc40!KHiL&&Y9}qiJMpbc633FPzOddnmgc=r6OlQ>53dOaWPJ-w;~np-8^GiPDIp>Ahj5R! zfjI=IlxmG|MCBmsAgAd<3KvNtvM9;@xuCm{lwsnTKK{?oWhV#ejSt_xdf&o{XGLQE z+&y=aL|nvjY}{a&J^S}Y`5wWE&6q_(;1{bnDt z)uh~Jm(D*K`ovYpNCq~+w#OC7UKc@p4C}l4)Ao;Ix4p9V>BU@ABpAWIAjTDRR$|J9X>;Z)BnC>yw!-f{HWw&3e^>ay=`Z8 zGgNd&@MH-GbAQikucH`pLrPW)LN7oU8dd4NHEH>_Nu@6%~ zO%C!G?g~y}euS|bGt4DRHNn0kbHu-)lyyyR93KDyLeDFYE$k^B63qO%G@Zsu1YJ@$M3B+^8 z9UA>=)(6p|zWVMo1@-STnLTAk6+Q+hNJj&O8w4MwJ!kNq$sWw4SgA>0ZoZ>Tkc zWg}Xng~Sh*jYULra2evzyi4`W<4TsZ8# z7O6iju*Xz}S^MlU?L=|VXCzx83q_a!?vG5c^@Lq=nH;kF^^n>%QtL-2IwiaqlD}s zQEAho-Lv|wl+vNKIxXsxU`N`$2S# z?8j#w>UZ~fjLrAgKzFj9rNh^HkitSUO?oNz17Fc$A}+Lg5RkiuUj9PZNM9Yztc0)> zRoRgW@qq(BG5f&`HdvL`lFu@AYl>)%9#1*z`qvZv7MYZd(9#fbu_IalgOT&retQg6 zd!Vl1d}_#*1Wy1Aql9a(h7Hy8y01T?^w@>7sr|FdjH6Ci_hD`Bs1Zg<4E6+7A3^77 zP=dy25jM6TPUzdFBKnsP^fOy~d@o=3aLLa>(cx!j8rEfyC#=+G1y<~ay z@*OmqYK+ZG*P&HZA9Q(4!n0DWuS;&Y%C?_pV-rMYKLqaI_Zmd)5qhmNp@8%lC5lP} zxwlZQGT?9My^75-L$K1+l!b=C>~7h^L(=HTtY0X-qvgrd=jGMBrxSW`15YP@Pw2ucTN5qduWUC=5;^qX&@vuCPAcevMdE(E6 zIkF<|QBC+nswP=!s0T_O&-n64lBlR3nQZG}?*Xz2itDXM9X~u*rtBS=9SU+c zqUxnpOpyQNxqh6myugd3$4Mku{HEP;{g&CU;T)o%d!g z6Wn;|8uqy5!crm55nbbA>6Pf0oDJdaGxO~wQ^9Fu(1Rw$M$`dW_)CDmAFUo zO=f+8z}Y%lJ~P`{WT-DTtS(qJ4gJ=ZeJ^cI*rWFTBJ|K^AOln*X575UTW2}&wrN-B zphZl=(KLoCsVvkte)jcm1@jNj2_k9W$~d*nOXJhaPFqf{H}s&Qv^ivAANFkarCaA4eJv$byUpn3ECnxuH~ zQ0}se^NX!-YS!HY z-#}3Fdq(EUH62urNNruESk|81Oys`1;6ut9yo2LMcNjw&gzuuuFr1d-zx@@o1$H-7 z*StJHPP9DabM`erCNUp!jt=hD<6Lo0M2oJI4oSa6D5=z4!$6PJ$6#Z8zxwD>PDCkl zo!P*9nV5A}RpvvlHl`g@lpE>~ia$i=AS!B4PNWzz3C7>rAFEZ`xI9leo*JrwpaLA6 z9lkbHJ{Jk)R%WYX*t^&EQ;_zsIrw<*y*ol)X{shyP0L zJv5)ey@jVr86oj#qJWl*hf3W8r83$L2Jbi7FN1f1nHqOm3M{^c7+haeD`EZk_Sc?d z8G21{T>be#{wy<5L@#=x88XV9%v)zPP%3&Pn8Qi_f%}g8XF23h#T_v^_0MjQ+OClB zr|AOEFNZL1wG9m%Gj6xW-o@47zx~}T7hU52!B}t}HNEmEluJ)VZ`^1AZH%r2dSsei z?_-@5a^cjE-hL@6ZM&B0L;>l~Zz~gj*acrxD=BE)zb;qw;Gj9%dAWuUJW0!UVJVvV zv3CAkSO)ssiOE{Z8n?J_OC-2sXOt0`w1g~15=1;kzE?AUx!mZ{LVdyIp8ik(?>szD z4CJ1vy>Az$ROa$$#m50QVPC6OooBDBb;sHrVd4n@3%1nequNs+|Br`-K85Q6qA603 z2g(QKlUVZgUs*9#?{7JyOdVL4GEbl}uD)`@?wmxvi%Uzu2FOj^B*FT5HhCl1Z1ud*e zRRJF5u0a%A{TT|KKIdUh0@nhtxzAXQ+r5emmV!-u)#lqv86`f8t3Reh9i-NYctG9n z>gj81JrhBXi=;y)>53ruJ4-vhE!hfS_gLz%J4@_4YnNW~{Kw3M3jmQ*zCzxNWiY@P za8hvO0Zp9H)PUL{I(j@7h&A)B!=H@EXbF#|Jo+IfQc6x?$I1$M(7f9y$BePp2C-(T z-|EEc;4(2WkW-TYc!@Fx#!7ck+0(LsxT>0j%HaNM`g+0z;p*rCpCuJ^((>2$|Hti*O#Xy`8_1N-1`yBnrImiDNf#idqgqUtVF}M_L&im4KboB1!t0`jD>|hr53TitqwJ4J2(N6A=B@x1QIs+Ym`2k*^t2Q1}?W6 z-4w=!g{bsk`Uh&>dLG3MK5(OklKzsTZ9KYJH>jl^QdYV4&P{1h_rWI;{$fHL!%^<% zzZsfC9Y8(wlyh&WdfyCn);He|)%`QUo62UXq=Fe}KXOCYc-7UM-FUmUSxr5WE21`) zTZJQh3Aj5DfJ5Q*a5FWr%S%MSK6gC-E!>kB9JwZukp1&4G2%exLd|+@Xv|vXMA%32 z&3949Sv+e$!R`_+D-C}%s1_k^;E)mi`qJ@mE^oD*))0vajY5z2gEWWw12sdwO@{d( zjh0Az!~d-J9i&K;a0+hM4S?@D=s!hdWgCG%fU#69RL6sjbXc9lZ&NQ#Fh{0(jDxmz z?15R)Ffv$J!dzuUzrlP!IKiTp6|$IjAS?9ACX+D*M;FMUUx+6yF3^xyZ4poC9N+kkCO*B@p7Z6fx+{^J@w6w*_Oyju{bJQ~J6O7jF#lC*=+V+9+5C&0ib z<<;8%%~|g--4*_x&32TO&56`@w;x-zY>3XbLWQ8HQPJ+}QZ8^}n7)56`OE)f>${_x zTDrGS2u~AVs=z=~a>5!bJgZZ& zI-v-J5(3`|ulM)Ych+((7HV>4X76Y3=h=H^D!xOQ)#)eAca|YIBAP!~XRGCA_4JHs zwzt-h%f=th+Qy@X$k;U`ntie1mUrS&mJYJpXx9M@!OOrkmU|51aL{ zgO#V8Oa{_q>Y5$OMtGnYx=PkNkVED?7xISWQ<1-DtRbF0&0*+5K6ID(so<`x?{DUE zuJ1(nXHp-4!UKWy^gx%1W~D9nSlVFAB-RMdSIu*Gq7Ynnt$)acSbDgRB+kUTz!!SJ zI#%@j4fq1CV9>L2lL_auwrTyfLGBvY&xmIpTMr8U%A4OYHd(ui@|2|$$mf4VXF{=p@a!tPJrRPBV_hfPS?_iqaxzM4+pPwKLpiS?3;ZaU3A)zJ zJdej14@zP=u^-?AR~n%LkoJ^I>{!xi$DnK2=2ZH7%Oy`Zav1YO-8-kF=>9i8jsa%< zP+gs%34!2P)2|v)mI7YJi2AFAw0UN|M_@3Bk6+9yhDLkB=A*g1qP~(Qu>By-^BpBk zV3@AZSrw$7sYYtq6V*7fzK0F`=VwY_JmL_^F20_soU#?5&onYp(LB|9cP`LD-2JZQ zytmd#s)C=fl$b@0U~fTM!sK__PpT$^7-t?19phgBFlWmS(K9=+(&!Ee1$&$Ni1#4g z2a%@#51w5>qAR9(O5Xt@Ocx2wV>>V$9BEia`O-$-DQmg9A5j46W%{^Al4BEfoC9(C zIoDIY+F4g1UOr?6{g`M6K#L}l(TkCpwl8Cd#*vK2+G8EN^Va^(f0ohl5MC5p=xaf$ z0DG|56j)R*({44G8h~qOQU?UZ-KVMw`ai$a5DcWE%hm<+(brQFiFDJidwzD3`n}ub z%eZ#AYWTohtHTQq+yqTB5;6bwc=5pDV5q6$?)g|6PYBP%G%hf%I0Tj(-4AJpTF@j_3e`}~Aby2G z2&HJ@N5=z^F{cAHz+WJaST<^OlP<8>G}21aWL~ZmVOGBt;@fiFxJ%&g+f#IH>Y(5^ zROeJQNzC53B_46IiNg&c-f=`f$s#DbIMH%-s$qPZhZH$HQu;K$S|dV5;?)F*e$@0n-D3*_KX;%X0oo)isJzveZjRokNW8io z+C!UAg=_KJ-n}<9E{f&AhG0Gai46kh`O}l$z|!KI(f5}#*4_#4{6<%xli^Qdh%Y7V zZiOiBXAnuk%qo9F#eVZW&_#QH!r8b$-13M2CZVy1si-nskneVIWpTCy^4i|_#}^2+ zxVVYP5*27N)rd70eH`8Oq2>4^Nbu<~>%rK>TnPo16}FX=j;&LqW&Pm4&iaV~1h|K) zlI|S(x#s3qaL}$X49M%2u@=~1!V~>X^R9DHA6ks9T`QXv-`F^522J6ozSrCS76x8g zc{;~d=or%iZR9z3f9bk*iHMXzR*E;_)!ftnGZJ&q!heYBBU6p&g&87Q)FI4tePwu8 z5SKNv@>sgmd*&12*?%7VHpebvyHV8(pEHk_GXhrJZ_r{h*k@;pX$`e~gK{KuJF0Yt z^;d{%K-9lRotiFepoFu<{RL`{A6Xz|mKevGSnE!+3etgC4fifd}_}^GdE7;h{OyE^E3!PQvr|u`mb&bAUwy<*s6^ z5XX<2|6f#$k5AScWHg`&<0KSfNewAiQ-$g5-=mE-#S;FakGq{LI26uQZu(VPAIJpE zceH9el7EbYmkJ8kDEDzQ(bZ7SXu2?|U)2Axa9cd${$QavT6|Gn-yawg*5!-xKXYEn zFRj>D-{VdF6$ks&9G(!WcZ1KJWl*)rG8#K%K+w1<6XqLKGc7@C7Q}gUqwGc>q0{Us?si<#(vfZl@cfHBWwV66SV)IE}#By`s1k6uZS-W zXKa2}-2dbe@5ihVuBg{_N+>Uk0I#o6KtfFRR>2x7Vae0MKgjz(&9t&wu3 zMs}UkF`}D%8^#qX_g@suI;_8}28&@mKCu@Q(RPKex1gN-PmG0WZo?GHz$8#RH&%FuJGRW z^?uC88Xvu(3jscoq#QIT+kj$TDQ-X`l%f=q<29=roXQc`h4P`LsKz^dlLO=91LK;5qqnvXU)OukeIi~BaWn-)Lvv)9wc$GjAqiVLJOc7 zo`QvD#B3<92YIm|xoJ<_y)Xi!`ozGq%THC^?B%86o6L(VUcGlVf9*>e;dCTUF-|(x;q_( zoY&mXtntv?iN&4*rFAv&e3})8@Nc9Oc6nt}clMyTxGfKC#3%4%VEXeNa&;9&0U6w? zu>nu&OCGC<(cHZ~FK!*&kyg^C*{?p@7Wj!{)hqB0^~*01!65xmRbtT$OTmg8IQP9Y z1P5Mn157wR)!#{lHALrv+Y&@kz8*gJjtoti{PeaxQ678jIIUNgIM>gr-#+{B@WL6w)U-IM%8g8j8^9AJv9Jgh%s7yOuM# zLdM6o9!4F0lKuqr3RBY%iPW1UC03$!{QY`^e%aoa*7R-fp8-qWQlum;H{R(I!WORJGSjB10`)pT&;FV3e9<^&i{v~hK#D2|~ z+@3EU>C2eEmC*Fiw!Hl~t7-kMxXAJ20?zez4$qb9@!I3}xgkj-2eO>a8q1ZA6KhDB z6KkB_A``>HIFR+69%CJ2xl;Ob-!2seIsE=(L;2gnfB>6^Z{dUKpM$pA3PSbDYQ^#K zk>BzaVsH-zc$|56#a&Q`C!I{()T z;GSOGPon}=1enHG-5%@Nr9P3U;W(d3RKdIA1+i!00;QSnDb@BTYs)$l?l%(0ANk8) zdW~@Et3RI{zaR=#Efv%9AJK0QudU71qYmg(-0ECE6ff?RP?iI-(0nw;X#>JJU9a!9QomEqtCer>-Z(FI+dXp+AoZ zNI{eEq0fYF`Knir|D=9}&Ji4BZPe$Ju6Wta!Ry$U*dlBi7BB8?-AFu7xbK)yd^3lA zPObdY!APowPt%s*`8$JyYyN=|04@`3Q{sMgsaH}0+_PQ!CMT&~bwDSR}q(bo^Lm2rRR;T}d%61m4W z?Lb8DSe&Krzw{_1sJ?e-#Y#-9#MryO!}eujZoua$OhX8UhZ<@ASN8hfh&Rm%p4ba0 zmHLPrVobDov3-BL$Ot8zT)C%uvQo%8eP7d1R0?PQ5w4LPk?|0z_81C zg^;Gxyfo@iNAfmCweTQ~_v+(+mNm%<2TxpY<9=!Hg+12MNqatW9V%6?(Ac$roc9cr zr;d3*>$l?O@#r}M#F1y*31qKv{wzSyrrnLq;phsAoe!rFzCbk~HDYeH6DtCxAE}8b zA%=NHu{F_JvF`e$W2ci+E42&23_P8)LIOMibbMkZ_&CP^w*Z5^93aHLiZVz_@2ZtnXD0XUz}-UlueJ z@EyU}WeMgn)Q6JwqS}C;=??so(crn>qzaK%j$r;PcLwJr>}WyB;QCnq7z7pjYS^$`CgJ)6gp)68LwQ{OftA0V(ACe`j5xQ( z)I;axMSgVN0l-v)Ku-G%H6R z(FuZ;!E>bWd{aY8dum^LeMzyR>D+@T;VV6)Tn(<*#p%&_;4JJVSX1`?+Fy-Rre6T) zq5Yup3+!qjZeTxXaJf1tc?^BYW(Wv=F5Y%lY`?mXm7X={5z6`E%<&8^QAsKI3^3^P zvmD$Q{1f0Qpf^#zPvmt}15=%<2(G5ILF+JgLZBm?{_>Vzo|1Xgh&zh{$`??TNnfyp zej7XVHtziMNS|NQ{klF9Kt(x|izmEc}n z+}mPR=rHJkH382A_=O6hx1c+u^)l;S>m;G!va8RcYg1X%>Pw5wWH!Vw8#T=>Uitib& zu{x3iaF#TB6Q_2sN-XZ*#~A}*fZ03igdkVP?eu;W{;jx0Pz}Xu3PpsKNtKe>KsJ=pv@%eC!oibPFqF;Sr3(qZ0Q=Ife9bTt_CH0L=x8@Qc)c4f?4 zw!#Y~!&gr)TQJGta7OVam%4Yc~G&f!pdoiH;=j+uM zZ`AbmRoBndaQTT!@U@-sODrB=My)a=Fc_s?vYgs;mO#$^>PPjXB4)eX-K&1(vk@zz zc63e4Yf49u#()vc9PKJ9!kDr-78(5~pb$M_X`>ZmI!p<1^mg>Y;U*&Yi#jJ9+`lis z3L5*6g#MKI&rktpqb%IEdxdaAJ( z$)WNHja^~X4vojxpCX`~bjY)AXdt#Ht1oAHVlx+Zwne765E7NL)fY!Xb=~zjw_8<= zSRx$)VAb*kNG~>Q=OHRIID?7e)jdgzuX{FL?GuKNc9@EEeKiWzvKq#zVn)APsrOGX zuI}CGO**cXM(CvOjvJ4B;_8*-}2O`p% zJNb;kpHK~h_jLny@TKM6=v)aqwn@l=z?Csl-BkK|6kCs5k7)3rSP*O-4IS|<+qLjq(F}Uli~?AMaKGaz|>2$hk9EDq+XeMw^hfRTLZe z8xPn+jNq4oDC6btgO~`7SZnyFKV0zQm2VpC%U;++cyTCGz;I`Pd1u=0TJZ)1Obbt> z9_qQbVno&-26b8Scvcj1iKFFGT*!eqUp@Y7`pVTOy&jUKP)A1DrRXz$cc!w9a6A)- zftOobYkLo*8raq){oWVvTTI5$9ML4D)L)z0Pr>44gn%Vn;phRcRW}JeCFt6|@sY_P zzxpOL_L5rCuA`8Ukiw`#7*0P~^I*uRH%S77?!bw8gWOH(=obG=91O+XuM;c?x3NS} z!imOyZO}k!(@cSc2x@=`CHq}p~A+l4Y zhI5^b5GCVZst6TE^h6vMTT9m!2^{t0#6TbdL!VV4yf@2~HNkV0J3V4|SFcG05c|V& zia$#z(B=V?jPhP#0*(@d`vfa}xgnvDH=&a#RV{dGuzm7iXaoeuvvs%f_U(ys%ytXW z$RKR@E1a~hG$b_6#>;k~Gq@74%wXmd+k}?-wUT@*k^gF)TGn<<&@G3Hegs&lSN~Qu zk9`3pCP-JOt+9`l8@$E!pJj%%V?D`T|8L%k?jij{FmU8BKx|!R87-v6F!bEeCyb0Z zl+@20o>-3p>vZ$2PJxZY(h4nqd&2HHlsucdDX~H;=&ZydhF;==jg1J?LHyw1!E0lF zJVQ!7Ds5+xB|CkThvXAgBDiFG~EJNWUTN-JhIs?Co&c z{p=~;nO40Vw&`XQ0>5J<;g78T0V}Q%D22+Ixs*7OPdMJ__5^E|ti0}IvIdtTg1BD- z&*e6vrH5o1SU3ChgV&2-Rm!u8m*;6zAUI3nT+s&%IVrEU4(&}%6oLe_4v}vfrys9< z(NB}?9~>XQO7^VAT-ax8Z>8+=IE2sUzc~0=#~gNwKx~wvCZ~myz?_hh%N@-f>Y8RH z{q6;~(t!_KYJFv~lSIC}d;UbIIZ@-qpMnEs{WXt{`wcC^H?wylT8c%{?5l$CPqnZ* z{==SDShKkISn#{@cuk(H=Yzs+D9r&OxP$F^R*Ov!y<#}BL z>-rZPNgjQ>l_<;lh?~ZrtUtGMI4AA0qS`&kcOCt~?u)n90=rAMVy7yc=JojRB6Cfj zV|e^*j6aW8v)oA!a@aiZS4?aoW`y;J5rY^dG&! zGqsr+H$rda_olg!URBC4FRvLai#!hqJnuKz6xSN6cq|G3c=tC>gu;r)CG1X48tbE0 z*(RmklP836QS^N@7Eo5Va8?`}q|2l{({k;Dm21Y6bL-50m)6A)G?b_%R6d0FO4S93 zL$5UcL@?LbwLt?7F3*@fndiIK4LdL4e4}+H*4Xyj!>i$^&qEQ2X8xTgQu;CCLeh&Z zOYP4(U;hZ|LrX5%hDL+Q)kr-j~1@^<8I36dcq z9)>YuZ?GLwuzh`f|@l?)(NMj_o460#SS%Urn8u0^wV&z+M~y! z;MM)rEn|_i&M5MO)Ql<{Ey3UygTEs08h=(r2KyW6%I@#ShpmM?NzC;Hx8>q|(NT3@ z(@H9@u7&$Ytkro|Z@m<~L2q0}-0R8tMu|k2XH2>iun;GyJ6ZJu$i~Sq$hEMrF73ok z%vmwbq@=*u6%w-7)gw^wnEt5!mjT^M<)%5*E0eVECvl((>82|qS>E2`YXrt3p<@iZ z2JZfcRsSRtzYeb~CJPw9EdCbFfIqu|R#@jFkWsqhkyRdO48!ai)4ZNX1u2Oh+=Onb zfq#b8iY7)Ed24x)3z7wvyY7UFRg5Sx3rI> zyaKPnnrt7Gy*)iJj0u^~^`E2{s16`_)v;-P%`ZR{6**nUDXAZ=-1a90_HbPA_Q<^= zuA)O_{&%GQ8^3)&4I7Qk7)I#Y;Hb3uSF`8}SikAqMNseYAn?FL`qhG5&kuX8&sStk zw2Zy?+1{-RB%pkuMj*XoEgvZXa)DBs&AZk)jS%v<<{Pz{s+3Ea#d6|y;_hx8vt6)_ zw$?!boUuuH@jL?tznh10s6N#_CFJ?CxK2ieK7l@|HlmGa>3x(phza*0FxY*1!ijho z$>P}FvfVxriEMSsA4%Z9{MZFd_k02cP2^F#{~EL8hIHNr=vf8VhsZ?ll(vz1i?+v$ z&OB2ASQttdVlTX7JqK318r__i1f4pi3!`pPN6hf2Ra0CQI&F=fjT>?+_l zxVc>g;uJpfQqrY_mYVzR9L&CH@NN59H4xRZu{u>4d{DS1UZGVt z_n4;vg*w~>LELL&7hhn%6;rTm_OfTE=j}^HKS69ez90+4Im7i|FROb(@ngDLKUS`^ znCa?z;=U>RUj6nrf*(>VxYQ^4`d~sTDShjlhlFtK@)phIAG48w7P)$MRL zUiv(Xpg9RgKAdGhP$f#r{3uw?4_z!8kST%`ZXf#G+$jBgOca~FjU4qheosl3{fc+; z(lRW&b>!f9fsnMcZ2xlB$5B+jL!d9fw0zN*zH|Ftc&f{*Co=2B#S(k{2_$95k#i3x zVg~09dM0eQT9#*`CA>wZ%{GiGRBcN8_CK_~Rin(5&Cj*3PT=|?e(q%^AMW5d+Yjah zeAf;ZI*jv!aD{6)e#dpfbu%7Yw^dG9M*9(E+}AjNVtW62|5f~fzb3;Iqnt|;poERC z{4s(K(t14T-;a4RRM+2j#jnwoP>RjK)?$%~`gg!a zcL8j)x%uN>{%cY-WyMI3m*%EhX`dP@i|dwM{LZ?^7vC@cy|pI&eCF&@5`_kAIWQ}1 zs;)bUI2o=%SS}RDu!*^!(C4`wdVer6)dE^GWiRpXXvw{=N2i+%23O$4;NE_L!hRAI zHCjipVvCJ9>1@B#i^azB5!YHwUcXp0A@DkKINss8&^{GYYm~;S>h}9pUlIhGE7Z01 z8$PfWGs(GfU&rjABx`%x^%cc?HN1Y`hGqt#= z^(yN0EUf)SjNOHEuY2l+S>#!4wX-84EIKeDGQ=vpzRT@>b!VR)d+Y`_V2XFN0J{q2 zFIt{L1V}ftkMt%|gdQW~E&-Dj4dJve2DQWP!H)| z3Yyx$()T8nwl>u{uOAmz{zjC#|K^8XoF(m2U9owzBA_;=`I&SUesVzzin~2gzdE)J z-|KPJx4tp>6E41k#9l?Udz0}~ymLX)N=;pQEsRYZ!7m3N3gOJ8^*6W)c`Yy2q0u;* z6BAl`6Xt^_u!dMBtPE^cy}Yqww`;&h^U% zm$#dT5nKxz4n^XvzBH>15qEgPZb7RdTJTG*lxHnbY(+9EqMxL`Pp6*5Oe;V7RXj}3 z%I~++w%L1?m9QAqc7APpbUJWwcN9P2Jy!E3Gdwasz5PB;ZL>$oD9d%4L#sw(*Ed-` zz^xRy6X}xWis8ttL{FE8k+wYJ~kf9XFiF1g$O zB@}Bnz>N;=w4G+DS(Y?GxWfQ%<6+fl72_|ZQZ-&DeXr3vdNG`nglPmplOA2 zzR64)rMt2vY*3532#2WxH5uXuOIpl*q#@W?3-WfS$a7$;^(I!bfp2!oaPSn|V9UXL z!^?%NXnrRXstaK!{g!skV8_?n<<2nTC{~y`?}o9}!>Nv#r_uav5x0 zo{;i(7y14+Zmh6PPOjI>`*jlN=3L2l`Xf4q4^J_bWEI%ewSJWhNiz&g%lhOdU;A3j zO8V{Ff6t(muv=HxM4*Rm{C8s^Xsyv%uKB$Ayk?OIot~h+t5F=q13M;cdz*_J^{7o(%YRYzVk#F+5kO`MssVeY!K;SUq4C7&#%j-{@~==M-r<)@aYu zyPsMNU%Tu=9ORn*=u^V}%Ux7QXJ%xTjph{)TfcdohG_){!vSrIPu}V+@9vw_IefrI^N!(sLxs|*SEJv%hR6A; zT%w~f>F2C7p^|AKE71{M=feFuy1JGbWDpg-9@`=sk_T1pN}W-a78R9-6bT8gY4A^! zGGDLL(h`3?@V&9x6>YKn>y_Qv_=WC&N(v(?b^YDFT>O*&~a-G7t;%eM3{*-qz z{O*kM{LTjqP1BSZvPfUX__7ZY%?neR7`JZSXi)$(Y0h(!dRQf%W-*X62xV*w|EJHU~Ke`mbi%T*3ZxG1))h$00ALii@XN z*q2ujx(Kv}%D9*E(a`T6hP>=rIV+^Wa15JfaBcqm<5(+;eXByXFB6+;$a&}j8v#8h zlxUNtb@DYEtkIecZd&pI6S3=`c=K`TE7M3uMhKO zcBTgoqP|c+HQ0He-91oW9d-(|oquo1LGtKpnjSF)>4u%c>HsQwGKJvBoI}{s6X?e3 z+UbE_i*nBat53eZ7iDJme7=MyrlKRa9~h@ZEKPo|{;G!iuNOc=3vteCYIS+uZbsz$ zT7V29EYzCx5V*@I+Le%KRd!GIMR~c0$i(}Qeg+(BCCcSnW0*?8m+o8=1Ua_jYGU5tx zq3jWoEcrRnwd^vjpL*7<=ywnjfM#(Ws7uryfaQsqWJ z2aTobp?v7^?z9Hq%dk7ZhIaf0aZ8crE{kIk`^RdVw18LeKZ39>fELi>)^1}t!$k6L zrwCNnUb)iQTf9Ajj zq$d%3X80{PRT_Cob?t?oll=KD&*66u56p)+esWxY&R+9-o=X8)J=$8oDsov;-h|P_ z!PIsm_-06e2sUzVCoklYXXM7WY?aCIZ(DpS_=`>-ddAbHm*;VfDDoOC{@mP3_U3h5 zqmb1BWlqD_chAT7;o$Vy_Dk74vH&BC0KDj~wCpxZY_l^WJ;ElLg>|v8;;wW#(!z5+ zy0~5|AZowLsqW7j^RbEW{WTGy+hooGWUSpa67&p@VFy~W@|Y$t7r0Gk5~XJpjkQ}; zH|;hAEC61B+`T3U{NV2&TxE^nKe8E*_T+)QgRJMUzb%{*8$TgR19-(yR#xW>fIFPp zm2`gW*RH|_OuJbU=TSEpFPJfI2mr54EwGqV5iT?3PnINQxtMq}I~>oK2YIRO?k0(_ zX-*7ra|^>~hP!6YRtzgk?_JxULUvItV(CZ!azt+LoWJ2!lQ;k0WynXX5e zqV_L({fD{{=tvBF@Uz$Z1Zl;JBs^vtYcuO?Zf}4XoEsjUF_S@%^p>8}=E4;;88dS7 zLMq^<$a}JVxe0TkNOBk_(s2Fny!_`nJfes@|AM!hx{dYc`w%q%a3IO8e!L9A#!t%Q$zZ_l=*}OFT+!9i!8ZcN2Y@41W)h*iJD59YS1sj2HA6 zH^g9ykRJN=x9o5CP*u4Co6`)0NMN%V?wXr83Rtl@djF7pBr}_wWcA!AQ_@>LH0YL{ zU5v8(T8hK!c>4ZmOG_+%XpuiMEju#wo>^4S?+YTb=H0e--jp??e`a;+g?$^Wr-0XQ zKKRYlo|Te%;ulT(RNwT~q#d)!^J6VLa_T9*rP)&@w>N_$E>+1g zx0l=b&SX~qW&Z64F(0ltb)lfQm%->oA7g@!!q@I`rC)xjt}%sq@myf@dz*liq9vnf zeuP8jw~_|~xm4!k(fL0#9zbZ&k(UCW34H1~6W=p04s$4_Fr@EbY? zfDQM!-g7ok>{wP<*pKm<#2GtCI4yat_r+Yq5Tywn(&g-2z*p-@eq-GIt$aqoBDdOA zWG5N&WpeUJt<cYX(3+f_3gv!K@2xaCaQ^gopbh)Y+N z?c?7$y*T-en^Cl<*6i)!()^kk3t(?A%re?rP~S(zD&_2=RJLM#`M^5`PRW~^758NO zFAoXKtsPw0tMIlVMVVVzH{U_rn@beZ`h~|tPG9cB6v}-j_8w!A&tELE`xpLRm_)3$ z1KNJ{?e!;x;!BjOEKi7j1gy4ceu6UGf% z7&FjLza9_&b5{3vaT2HYho~Qc*8&>)C_RgtinnDNK&?qZ=#P!t#N@Kv!BRpi6}go%Dq1KvC0Lt9%dcFxhf zI^mecuFXJ@1aJ`b@8PXPdq)WvAK*j(YBJaY#f6=!!T)G~;9y5|Oa6H1``Y2QO#fxi zBPQ5=z@AInE8R5XwhW#_d(6=x`Y^Q4^9RtAZo0Y>+ooeDrbO9N2N6ff?=IHNsgqT0 za!6AqaEqZ8CDs3~3`xF0D)Vpsc=q3Z8tiX(C;SB1jQnoEF(*{~vL^_}qRcTdG)GH6 ze|B!6>qzo4%eR{ah_U4u1`|0V_krF^sf(Z4dZ%(D6C@kxeQW})EeZ{La@%vC;L zg9hXEQ>eBQe@;M)>$t;m2x8hDhk#eB_-IVqy#Tx*=UK3)ft`=`e#DV~chakTGEH-U zNq}HB)~|bX8aoe2LiK?4E}#7Xp%brl3_{AyG1|aw$nFP>EV_)M0mMKiPZErQPJNjo ztM!uUPRH}H02ceLtljp zdIo^KAaw5KkonC}0;BmN!3DeVNHh5<_iWE~ys4kLmJMZu&5@=EM!R)EAN z7=BH=p8?tr@WSD&utU@CPd;s>p#bG6yD)JJ&F07h(_$3$ar1zij_Ap>XP8DxBh)7h zuRd>qYri=UTywr@=(voz;B+>rskzlhIaeWtydy+5G;58E%YD#U`8?OB$=&0i^6CWv zkb+7t^!4a$ZAMN!S}6GV@8GaYT}W}S$0o9DWU4jHa!E;9h7Nej#UcuhmY?b& zfHnXGLbpdrP3+pDPn(LiuTEu(A=Kp%2i5S$t?>7)jrxZtVEot{#NVkv&Wq4BM$yR@ zCEk>?+Z%uMps5JT=T6ye@jQB|9NFzd`?bFtF4_~WZr4D{YE7h z!?ycHCL+oUiK7z4tB(Z$W`04dU&N{Th+IRGp;n+r@8U|EDB!4U0}qQdpyYpW%$ZwV z-A~NS)Q$09i=_@`q5HqV)E)3+Zv%%X9Gl>Ov=VWTwActdU_xp8_z6#%sWK4EPU4!7 z%bgIge7hD)QC|&gG$ck(LtaDI6WAYGZL*4f@&cG3;gB=D*t1h2$zLwqN(C11QPYv|T$st!jVkx(JC(!=OUfVBx`MvHu zzB?ICbJWWT8&j96L?AY3K8=8bPnsk9#L zbp(+y@5(DFbru!lYR(f)DtQtAtMJ)H|K(W)vq}Ib0?uY2IX288aC3$ovXmk z6-AkWbhRce@9CY~oi^mCz$N~~iHmN2*TjHF=Ni|Wx9V4^Emu0IIR-Y(?=mjvINGPRT!QV#7N5^~G7vKqhI!9#}yLzCeb7Ohx{y+4uS~ zM-DUKO<0hzkxDsEtO$Qpej`m2m_4SL=H#)bExezd=VB1YLse%rQRo2NAI(640)cWRgbx0M(8_)M(n>cqN)>}-b4eveMr0CU)6 zIQ*VC1MODDV-kg(<5gZ2JGy2=r6<#hV6ux-!nrL6~axk3!fw zARHnMX_G^Qziwrk)@D=`{nTNpnhbx;vNB)X&O+b>*q~Ww5Ivr4|1iTIbGLoHKltN) z5h}cOXM4#bKWrIu(Dn;kUnEuZ?OS{rdG+OM!r_KTqHM>*+F0q++Vem9J!b;^CDF_PRdN6`2j6k8!R6r2Z2Z+j zqvs2z)GstmRdRu6+?z%WdysmXHCGF=>m&~qe3r&;Qr*VV=BTx@N9n9}vVfBEugju3 z-uK;y9bUZr7Lk_%-n|DRQ|lwdF>mIugR?&rUU7ZEMqeWg>MKDfMeW_yJ=@f#SO{FA zI?eDunDS0=A*3NGu7Z zvNN{uGp_UD?wgnBATXoFORgE$B_#?U7RC4^$E&`ss=6L_u9QHR3tt7!D~Ik5mLPl3 zXz~yXi_mU3sjMyNaUZujAHVPu-%am6szOCMK;xwq%EDE_@SP9NV)d0}P3pMgTbL~W zM*>Y+pR#)b2f*u-SaF%zG(ecfk!HPsUHgfDv5KSC?SlZ(PtVdlwHZO>mmY|F#y-(! zB>QxoQ(Ke05Fh*Y!IUYuAY~c zItmI_3#H*N{;1k@c!vcdG`-VIw}{L4wY+rnKK6`ru3@Y`w4Ob!{blT{34SxrL2Uld zx}VbS9=Q#2qQM%`Eqwladu7N`{Fm?Y#>P8GuC-QitN5T5He{Fa3xPUBp)cN2>T^P5 zDcSUx+FoV*%jce42m|Dy>}L_`G=OP0HR|^Oeo;ZODW=xIBm-G_c^Ptz@dD2^dYCQ{ z{$u>=Gxn;Q!Z(MKD{2oY_68w^@WB!D=I7@=do;+Ry!EZK>*v4ZN~YbX1Hc51o13Ga zo+bk{bO~Ly!mNKl|2}|*+hcytl_fiz(r14Zl^0jl3mP1z;( zfvsmPf)*9#4;rj(4x(DJnl5NHHMz0o^k$^Ue9iu0lbp?~=8W^j&2v3H z_BP@u#*sU{tKRsCy7|_^z>>-Fwq1?K_ZC7$pJJNc9Xu~Dw@#jO(ommdj-h9$diHb) z)WV#RFXxUicl1=G(s8?&PQDld4n#6Iy3F*q+HeC9FsJSRfZ5*v`7QsBL9>~`UN$^c z?w_wRRL#U@#-mp)w|XQYTYc^Z!XR4?F+|$j-hZ>*1cODIgWB1V0%E8@Gr-4Zr$q9t zoVmTlYjW1xu5<0WK+GnVf*#(-~NhSlz zV6yYk2bZ*nfBz+S;lsZrJmYlIoqA&`)4%j&n~AOTpU;==L_h(EslhsZ{BCt&Vc^zK z)5zv$qvxRk(}`(EE1<;o10AGIoz)@#|6Wxir-sZ4yEN8+DoPM54n#4mKV=tNHJy1L z+S2BKlM>LfFM9IXJLOz?CsuL9)Wi_aRaNhm`Wr@a4&0^J|oS5Zk^2 z?7Ry$SG_*Ha(%|$38s|0IXS8-*hpq=E1mDwj8>qQo-s1IY?sr&`17aBUDiSP@iiDJKm5BXL8fOtDNRQeWbwEShbtG4xw-=42?RDVv9FbJ+H$4vV#H*fu&@uk>-^cS?`}if$Po#< z(u$*e?J{X$tqboz5751N5Yx|9ph$ULUQT*Lm26#l6GONFDnH@|fBmkcWOelhgVN!7 z|B+AaYV)k`u8MxT2N=`v#ulKPzR(k#WM)sgGEnc5dwlwTqFsEIsdoHbpa`JtIMjN$ z3FN^|T~seyN$JZZYR9{qc6VD4FKfr^QqxHY_O{Upy(ifuqGq^5e$|8MmlkzFTUqNY zQ2PB$Ay8GcGkGxX&*xq`!@zpdivF0)LmBp}`$0Dk5|eXv|NaV+tey@pFqQR7tVIK-GwXL2%>1j8ZOYiS zRn?@fc77T&i8^xcdb4Pe+pD-{JMj8@&4>A%oi3y2`%iEglsd2?5SgAGx!?6=-~k`N zt`yP}N8SS?_W#FXT0dNC#FQoRnya`=W&Cz zGac;tg`&X2bqWT3E5_a9PxRK+w1>J!jKEB1@|C;x7HD%&Y{l(QVOY3d2GsPrFx@SK zkN@oW*MV>!gTCR?nf(Q{D5j_Ek_glL=bb~hZct?r!0}@C4sk5dFXp;$UPDxW%9hNJ zqNACWwkOUPmHKqJc`~LPYpp4^wwK0JinQC;H+RZNV59?iNE6A{=cin$(cC!}zKevE zIb2%Bu&k%sE+Ny{Wwxy_*QQDSQuw-tHS*T*E z=AVV~R1BAoHOzc>+78%vI3c?9l$`}!f$k5K#YSe4tG_pD)?eqnd(>h2%|Nc*)9w6Z z_!${urddfM`Td??M{L|bJlyce@(QFwu=>o((}fdfNovcH3vX{-ru;Mh-Z{<(vo|Na z)6n$p-IqY{o=ue_%w1qNm;LQEgXWI=$Cv&I{>N`BVC)aoVIsiR@~4^vcyVXHX&4~< zt!Z$9is6~S$3s#ewHZVQUAJ8Nh#Il5d2Q*C{BeXr&16CBa99LE+*q)mPenO2_`TBO z!Sr#o()OEuRf-}yV!uu4g3Hi6xX^ok-5X!$`!n18F3Qc{)QTz$L$|5(zm-Y|S8`t) zXzG5E!@$&+xgvB$`gQ%DI%vF6uX4?rq#oaMt5(hU&HvVC|LebWObG)617`VrB^r`x zGS&GmEU+VGVWG5O>8YtFeei?tb zt)rss-l*Xr1Q7vI1Q7v247$4%L8MDM1p#U4E)gjKMMAoyV?d-~7$k*(p}U(QhVFRJ z$n*Qw_s9FPSc}EfJ@+|R?7gq+oU>{9t}*e!PZB@$r&|I4v;P0m-9Q)t9S^AZ%?#GC zGce#XYZSsY4ZQ=wNw#?G4QE`hzTE4b;<*pGye+Zk{6R0nDz>12kI;`EL@H&-%J^{E zl=|AQP5^+!s>C-yTB21F7acPzJHCOX_V&eU6Ca~gWl(mfDgYDZHgbKTAfUtAg*AWE zanB=ybYYXH9`^RtBoN7Ps#w%g_W6``#TT)!(FdJF^Q`0rR1m=Q^&LKp^S-@2$+NiqH5~_u^W4Y4-l+dauL>y@VAIuIW`izh>RWHg{FDN3 ziC|-n67Uf9dHK(x2jmFo1|TW#Coe`!B4@$Lq4!k%_mxBICHns<-y5q&0*r60#9JI|RA0EU@(5^d|F#_2`nqo0Kw4wn7LnxD4&WQeoZbRFBF`#I1x-&Y zaEdVz?=iTB?@-c@@N=)zAx!PNJhx=M`pfTr0$}k4iplNatjt9<002oUVIn7#*3yEbYK`N);}%V z6}dQ?AE|Tac3B_ktsC{;Awp8We*H=1^^YvSa^|wiOd3Cf8*i?Mh|t+cVy4K5PA$a2vvt4apD5>lv zWvdsweC$8M8b63ap2dV_G`_$wFm9}ML-AppdL<>9B+Y##>ka zcY=45^v&bnt0$O@Z+q@DO%u?_V{_OYjmEkjBkS%m0~R#2D&4C_Y9GFcb3sYkj*ONq z(}J#r@Anf6|Nq*{4N9)Gnda>>Y56C+RbmD-mkEMabEieiBbCeT-WmnGx#^8P4SC_$ z>>Pf12HvVx?Vw2dmyuT-{>#XF+%%Kd#ls2s31-X)B9_W-}S8U2j4%j<86OD0?9%r6-c#=oZ-0?vmr%#Jbf|SHed#KDe#vR`+e5J$D zlmdkb2qgTKwPU>)LNpKpiV>g*R8*`Cftjoee zrlZ}Dx*L$spNPlYb|kxN0X;DUEhAIYd%S5sfBq4k*E*=*-#^ivoX~HG7ja(KRII1V zh)ua8u^`8Ixq1Z_;{yJZGF=LFuGu6D`>*90yfRJwt}r~O({rHk9y z7fSA#wY9LFogG4(Yt^F0_USq|&2XLl7ou?JtVhysG3&P zYmOLH9PNHaZw6k=M}YK5ehu$L<79foZuO#G+E-s&Wp^vS|JW`%PScme`J{?OfAY6B z5z%KVMe*vbf4*&c`KzG7(vXd@*zE*J4g9;^ zcaw3A%CuN!RV5Y&hfVr_$KSb_9Z00Jl!Le#URQaRHLsfMgf#`m@6sti{U|_o4G>n=Cs{D+@cA|>h=H$d-#5$Jk?{FX< zwwvnfB>C6P6$Wi~5F%2zcR2&dmbj!<~3H2xSTmanR#4Nu^PsfCc$a2DwKn zxaR}JPc^loT06idpfy$RnILI(bx+Rv(9i4rBO^8WAS+Hpvwr6RglswrQGeg100}k& z!>5t;Vz$n^A6?bei=^GP2fd{NO%M6X0e3#p0o8#){(HsZQ3-eZ&s`;`Ra8}HZTNKQ z^+656@&fB_;4O!vV7j$Ww?6;*`0EHrox+gj=J3(`G^BeaKt?w&AM>)|ON=W>bXfy~ z?ux9kox{ID=P_o!8Vq?(G$Sq%{OpR^p;(Hqf-UyeK<8FPZi(LGEpx`1xpfihbi3U5 z+hfDSmHm!K$H(PvtXV{#Pi|DX{+~J{5Mo7CwIg`m)Y) zIcEt6En~`s(Sbe&-pNyUAfF^wbPq8!T1>pbO-#-B-#VF5T!PaUdhse21F|dClyMx*DaEQZ*CZO2D%UWV1xT zys?wjKl*$vb^Bm-x46raP+p16!9k%zn78N}meJUk?bP*g$7U@M z?37KVx*mnc$%coWD8C<>;m7ER6^90;-!oz8&$=0%3qaQCvD81fzt_43wEJa@?~K)n zGw-h71Jz|Bc&uyj`)%MjhoGk=@%!9u=Rg(61@ot>7qS)(E|>*L8L3TIH4CRMcc(`u zASmlImQdFJo*{zxoa?eN6ciOnsj8|5wJk3#%{7PIiAySr>w&mQShR#35mo&ieY=9< z^IG^i56S~jn89Ud(e%^vA2IF+spY)Rz90PtyYy?dvs9D&fM~B4#cgLTIy8)|ee%Q> zp+Ww~gCy0*pavjhHkG_Lqs}#-uL)OBdmUohkQB~ALE|YT7;xy4rTJ`ms>4Nu_8mK- z8=JJ^n36dVOeb8L6x8O~H9&=#jzwg}PU56F2D#~7BmZLf2Ug`F|yrzFWnk{g}aBrd3Su`y_9I+$`oLGca z3>*4V_va{~dya+;Jc|@`KO7~o{as?fk}!4zMsir#bcb0Ztr24+nIQ3GX8yUOXtpTw zzElebbh}u9E(HC|)=$(LOfeO|`Z{2koL>X%=qB9Ed^wAm;y&Mz9&jZ5sDlU9WkAL1 zM(p(`0=05FSxEH65fIcnk6Z5M<_$?f1ctnl0C+pch<=Kp3d9^dPRa%rGE&ACGK*mS zz!FUDtKm+vf-FVAl)xQ7XJ9KNb#)^7-w$Z&>+@wP@QotBKf2=_==li)qL#0S-HPfJ zKFzTDlds-0;4vpiSAwfwJFi0RS9UAculYLNY|q^!RrvLX)DVe3%Qeqp5~?){R{xxP z9WTaVpy?7a)%UNvs+!vNQledj<=yMViDiU-uU6W`{hp&+Ebujh4E&tJ4&3ce({W@?i@7ylc z=g{X|FW`5*9)h!Wd#3r1#`P)R-aR%y`~;n!(N*&i!dqSZ(?+ddC^sTxm6Y1fj(6Yk zCF<_Cqs85=64Wa24J*h~$nQS69%2ESL^!ZC4`x4cs?PL8?N_<#V~cGjL`%lSy6nAk znyQ{NkCrtx08;q0pfHJZJw~!S$3L2k^LWN>0Oju%D-pN(aVw+o9aq_kH&OgOZp)le z>(S&ywOfU~xkQb0I5!ecK%3B|tnBLC=B&#|JY`7D4+y9<(d*0pHOC|X4~8oOyOK}d zfTbckV+DC3?z!DU3GrfMxR_Om)MwTZaN%`*T7>sO7y`}4OI8dTEi*Ui&5&~2YQ!g{ zq$Gd{cpk9u*^GT^ZkD`v^YhT|4=fgRaZgc^_6=&keojX_y~BtYzUK^~2cwXwHt=4|y|R?|`>;qt+pB3e@B0pL}r}YicU$qUEX) zI@;Uq>#Bdd(}5#nfe$D!ZJcV&I71x~UZzfgv&FdueT{4$5bk!l$AElwnw?{MS*kev zAyFq&j1O@5%5H=-E~a{vMVQkM`9X43z(IZc&$0_N&hRGa87_$6^ISPS1R=v+meyYT zoY79E6~**fh&vKz*Wf{2<3$?Ge6|z8;Z*z*1%ndl%4zAdQPO(Qbs1*YA(j?*NCAac zL|nkm7BfT%=bkI28UX~^`qcQy_}b>!7Ve(@{pezg^RqfDRbuK?E6~3MYCpxke#kHo zrEL4(4-gCA_w$Gt`D;?KkjyL;>wLCuA|_@aUNYltBlIoi&NtuU6<53fi-c&^H56*c zWPKsG+_Jm_wQem5qUy|QPO75MYF6A6nbF6o=lxDC3>c*NKhah{=Jst;cE9qfI@VuB z5HaPEEyUR4XPa~H^+6Zzw_C;!{o=;g?9A0&tGRwQL!u{sdPtBGP z95$2uYd5GQXnct(_XbEfl+l^DBwi`q+y2t^oHWdc!551>FeLzbRO#*8+ahexnIilxH)D~dy^4>ncNiC6K}@i$ zTac-S-jL^o(K}Gl`kBdz8r%V>94OvrVEr^`C2J~@UDy3Z^Rh+&>@cqnnw$Qydk3-q z-P}V6X#*A%qBXTzdYe&}xwR;=&1z>ktVJ{-dgo{KjtAr=MC97cG~@vLHTD*xpE?B8 zD$d(`1bFIzW|0yFbl`y`$&O9XiNb<(IUJY@2L_22bUUfP#QYx&o z>hDcI$=tM;L++x*AZ3pn1j9g|vB!$wq`qm(4J}9^pa8@WTAX_$A+wDdk6lEznat{T z1RSVuf5o6f%umg=tK_Ewt$Zh{k+FNtE|cs?ZO&N4yZmk)ly_~uRM(<~0TLv{t@s+3 zvFK=fd-&E&+WY@~p#h@*oXmigj+ErJ|J~#V8pS1VZRd;uAW$CI7-Er1H>b|VIr{ni z<;y`c>x*68tq+p_-+3|)B3HwfJ1qOUnH{Tc@b6nnCc;*z{zuV>cFFEC<7+oVwvXz` z-14~Rf5LG!Ma4X~M02TQ{Ha%=x-=*t@kY~a|uWmeW;WVBKQ%e8i z-`gI-@UZlr61#TfeMTYY?Bj56%WZzFiN{#0C4S&82Hs)_GtgAc^b36f3%OhcTFykT z;HO)%kX@{1>@5px7aNpewL_MVakgTjccLAmFcx0k zeAS}5FGLV>kKh^%J8h%6HCJ!Iu}}`4a72`Q_qHAOEo#a~*Dij$;oK;> zrz9*ugK?1O&gwR~#T6Ha6l>6;qUp_*jLKW|xbRDer2cvWP*|U!67692@4loM>&-_# zVJDy)f@ra2Ed=2Kw%DFmRWFG768lV@L&gw4G{nu-c*Nj4UKyWAY85-WPd(U2G;z<|4CkXEDR^5|WdRsa^q;g+-}>EZ##G&y&~GLp zg7h|{hvvl5$)j9nBOX-xP}{sHBurRvJ?8P6eZiw0@HQ3bjx?kxnL2|)tM>>C3*%`y zvj_jm&;!gsEC_GGxy0hAxzp7BWAMl268(T66UDyQ+WfZ88Qvbn?M@*9Nyckp+BL+E z!)%RWL7y`X7}0tvmtb9jpMl-p;QN7cP$7|%_%0yjrZK6Li{@h%ual7^|e#LxFE6Sff zfBw_iNjNw-*t6;+;C;fw#KctWgeuq^#w_IXp!m;;+QO71>DR~QT;3FY{ZZ*c@QXSo z#DjvM9ba@iEr-}2V!J+5;-m2x=6S{|zZCSe*oN^hC3k2TQ%cFG^*NhMc$e93Q9tj5 z59qnoMJ|%th5}#}uT%8P#az)LDS831+9I{61i0RGn7&Eb=*i&fee$2wqRv(Zw!QeE zky&h!`@{Zg(P+V<+>$c_Ks{Vbt*rSHl|a4p1t5i$OUcY<<`dDSw7ZmPDRU=lP-$ah zdiqC?#`nB;{yxP3tKvP@<`~82z%88~yJi1tBHDkyP4yKr6QX#Nli9k;X5;n)=QmGK z$y44CGo;WNIox0ICRP5gnQ`%kYb4T(87Vf%;(=*U%c}p7_tDi+Rn`VWo2kWV^lUip z4MucJM^rB73=fqbd#^aO-Y3dttaZ&6v-%#zJnd0hFHQ}s z&;RApyZD9ozQT7`w7m9T^EB7-+S9F%%x-vdE}$*C#oRAxV=>O~vud7ouZF&U`1-o_ zij&aOER46IbS9>fFgAhDSU!8{X_Q%JqI^gItz$I)S?5grQ0VN10$r)Kx5&j}yWYTQ zQKa;7pL5k{HYoiQ7fs-D6u@&h80Xevd>!BMp_2R`>Af`iMttmAwE0fONIk~(t*7_w z?CcLdoBL;HXKDSbA69zker9L?F)J&t>Neu&mS<}B9`fxDHi>9|9ii@;&ye;jzhd&- zr|Hih4)2paLgaH<*&BdKj=AH>_kZtRF5XHN{#YBiC*eGrbrBO&-e3o1=iwm(Tq~%d z;qq}RR%Rm)FQd45)@9u{>6*uT>a7|BuJ>e_lBqK_cMlJxot&J)Dh{W8X~W1_KeibA zOQicnl0?pfjGQqQ`A?%nQGb#kYHtt_#&f34D@o&)#<>wvIsDitdH#0q;Jc06@18Qu zJptQDR=K{Dr|tLKE(zII9r3v^Mv<4($Ud|Fwe~dj`6`Ut&swmupny4+O+Qr7aq0Ja z!>SK-TwGjRV1wSwl9CcB!~N1TK{m%nOV32BRh~oX{iD2d#zk;+ipb?+SsLrycXfWV z>s8%~kB@h|I9^s!R_@7wqO>loyXv+^nUpAk+OpXg{G;kelRfZ${ra^v;fS0Cw1V{{ zzpoqFhY0(Tg=#WSD=Wk~y_cMv{&cNBhh$=MvbU$lFCihp1xm?b^gOX5QvBi`dDu0G zQQ4@nfx%`^5++Aa`dUzDPf~7gQ_(z{cy>6U1rrBvkr$_Ou^! z#QmPwR4>wa#K~Ez0IJ_$o8YZhDm(b}bc0lF*E^}niw8lbkK1}uSpuu8Dx?y1ids+h z*T%_&6D420nhWQjdTwN76y{=4k>Nv|>OYlTZ~i<>Rey)_9;b2h;}rig;!asnH76&Y z3Y+nvxwiAe>FLe#7cXAe6xX9+r(=4{C{$=I8b+mCVf{i~{jQ~@rLvY*FbZWE9UD7W zh7@Zms+_tJ{wiQ*#>jfSf(TuIXprb`;B&l4h~5R$;Cft-X=M?_xoT1y7~j~;Y(k6G z5^0#@r%##dW5e#=j&s&v)~`pAELB+4o^IB1dhD&pMeOeGHi7EZqzi1p(GQ3G=lA*F zhc_qOmy?4-Lu(cU3=OBl#BnAVGBoqV-HH`-rBnQU&QIPR?=0FZ%XJ6*-XUx(XAl*o zHfjCRm?Y@PcILKT+BQ~yP%&<6Wj_fX`LOW1lX`o8ZtiPJN(87g%whuHG|XFf@AUY1 z7QC$K^5RfjhP8EyXGpnm1*9gg--k(+3&yOXgTJ;X--n}m$BSvz1 z9<1}(v}y!8p{nHrdBKw@9vtAws+t-Xw+QVrv+`vAAmnqqw`_&}T|GOL!C_$miHW*F z%kK{<->bjQDVWYyNF4iJez7H~tbFTnE=ql46mXo0h>}85F`p>ar4AYFmxjKIomwuagV;^2OTR;M~+aV{@^@JS{dcYL8qaxl}=S*o%6G`$N%R z1fsby0G||CLb^@k$7@>E4vT@q4d)wnbj_E5N%P#_-fp8cbo0iPqK~#_S(nZ?YtbLT ze{jok-`C8{%!K0Sdv^?c&z=_0$NKj3RN~m<^%a)*Y|B_4X0fbzs{j&8om{~OJrI1n{hc8E1Pos*6$jf zsvF>D9I$D)>2yHJaetg#K}vX670EC_d?ExlpGnvQ%sL}IJzYw-pL`kYWM!*z3tz|9 zh8O}?YFKQK8JFrk`+>Q3@8zuPI3}PD)Dj@LEbI6PuG@+z#66x{JM|@E6vKn(GrX9c z1--+^lzG&>Q~R22qs#mhFsVVN3=>(Sbyh9vI`WjP zpC>RPDe0%XC~c&egxKMEHTp25QlW26FI6cId4`M?dXkD&o|UJTvr{{LZktkCErs?z zoODge>N50LeY^>5!M&TB!w4>t+OXY9#lzQKyIjX06UE{o7sX()T5>sK-=tLReBD_r zppB+R`bk4eQR5cr=`--aG@GNDmgBki$j}6JqXW9|%E=DWx;i0I<5#9}%sGqS{ z7iRn>exJ+ssJC1(z1yUHeQUDl8(J*Ywb(i(9bgAD4%y4hC-ndFyCwTm@1k;6it$Fxn3 zceC2dw2%0$QiK-{o1XHn^I7Wgn&j=Cj#M>?y^LV1)MVqCSh z40e3w&TrKJ4q$nUiF`;vtAv{yO;p+I0VCKAhxRn2BA-81bH}T&zPKs>gTp`d z@@zTDZ7zh+3$Hbj7HQ{uI)2<5hn_~Orus|qAB*>oTPqwPvUh?~)kQV+o$o$P_1eKs zO=d2x${5@pw`)lD+^i1Ts5qVW%Uci$C8oQL&Shq|s= zGsvh8FYGKu0SoK7|5@L|#f(k1K-Nw+t2CgER;bD{eZYc<#&?D9+cv(D$_43pR(AI9 znMrQ{i_`!00$@o!Qn!fLb1uJYi0-c(M(aiZbMAWJz1J(U)Bfn)1@!G!Aceuq!gr;m z^)h6N`GYjw%99+vljfe&{BLT5WgYoAPY*ZxJ-s@&b?xe79z}{o1=0GrrFgp1*pclpc0hO2I&`N2J zxV$+qEPfiIFkD@GlDGdt)-iuq)Z}eFFw_ZPIYl&yT&6cn+PV*`u%zOSG+{e;fq4eH zx8f5&Xs?9rv$EB!&?}1Wzd0B&At9WKV#t##>(>QCL_O6kjZZD^mU&r-U5%Ddq`cQm zJ6yLvV`Ff176aAbO%e)^45xzW->NKme+@13&Z2Gk@V-T3EsiBiuVl>0LB$Aao?`NR z8K2+6(o(1X_~;YC9RYBW)#(Ot=E4$eyM}W&Kym_452DIlOQ{#El={InRAcm(bZ8=X~jYfHr9BAgJAw|KkaE)y*aVI zYuEP_kGW&Vj>VlF)<~s9zHp2FY}O;}#w2wODz}~cRz*U2Ojzp9-lqpC)!iOe$$JZ* zLYAXD7w_uOq>6b9_2>A)E8~p1nF@%{wsowa2WZQsH~V|5{Z>OYYemj|cOsQUTGpA2g>nDcEZ)D;e|D0E*>~vsD)$iD2dp^wyA8ZW?wE}95!5>-I}D1Mh_x#0yPujdD%UX3A|x|qj-lD1I`Dx$Vsl~S#H?rV3zYz z0`uMt7yWm47V;y9zZiK+@046m{$AZ*NORssTyt?`piY=gY}J0$bP(BI$|BoHHD&z~ z$+PaVdS|dBtD<+HzRhzG)`po-iy)+}kMiY(w~rLZ@=HbbL)74WL|290WdV6z9F0|B zb%(FZ(fX1hT09LsNa{60mHSH*O57wPoOOHhsUK?$^Ac?t=;6=hFq`OOz|4 z1#PMP;|}LIEN-qWW#;_q=boPd*05|-w37kz!bId5p78sis!7~1<4n^iJ}@D=R1Ue> zZ>N8GlIfaQf(}H#;ZGO(_|SN(YIZtMgh*?vHEuUiCt_zgh1R8d&Bq1Xv7>Idh&^=*p6nL2GZy-uz=(sU>!SjAU#-PaA zpu9ds)Dto46V%1#d%CgO;Ef7d7N6|k-qJy0UTOtiy29PVSp+-b2?HTYMvn8}AC%LR zO|hNr$Ou}P;S+wGNeYLtgR+_~n#$Q!;s*ySio#%)}7Ym8fiLmdt`+;p8Ews4oscEP*KyEDeL%;J5} zCpVoWR8qK&oAo!2Su>eCbnpQ{(NFA51OP8j&BJ9RcRWDkhtx5Cg;5YCdcVqhOF^2r z(12^OuZEun=75N|Z<`~l?4sS6@S;OS>{oo z7n=NZ(`6NBusz#F*_g=`;L|?UTyrFiqsPHIr+ElFPXUiJr?~;q0}?N%5N?)9#V&bG z!*2{Syo*=)dM|~_Wz@C3%9u1~Kd@>wbDre%gqgB34N;a}|y4PE;N;?R%pHD+A;?CQk#!-o!)<(ORWTtO0MT71+JF zA6gWP`c$98J+h0+^1SP-RnNyeVFqhtQ9mQ{-)QAf8&0D*~g8Z%62u zV~liQX1hsRdS@|ENbtu5hxGuQNm}(Oh2%{d;j=m^7B3`k%)*b)qOZdm;reu8-joRh!Ok%`(PXVE%q-*F$*T~p5 z*iH;|tNl^r){w5qxIW*o8iyeO2C9C zCsj4{_q|_e-{zKeUUaoeei=2;h?w1XvXcfGkgYMJ64-yN4pD7nP5OgHB`he*)ZJgc z?|dp5<=Aghx~>peMN(ZH??b2U{MSAW!@VX)#m{C*1OcC=5J-1LPffVZhu@?Y`n{Nb z0Z+G~vg`fl2Y>)qbk5iZ8EA`_U)<&LrIw;NnIqg}8yvLTTTh9bns~)Is4^I*_sbxP zC(@z%FPaDpk-nsN5e}F;nL!@=kwp^XYWpMd0sA{8tHuV|!p&2UM?5tSO|yw8`OlO{ z?d|w@&&#AuM7ZBhcaC{O+k>?zv~rF|?pqZ$0@QO(l007PY6o2Bf!JX+vRvdh#RrYV zz%vLK<~}GRN+Ty}?dvuHeI;r%xyX;^mW_SblaFetiM;zytIg1>j^oW%@rO!0z;?Rel>I+|1vSaK{nh4o|kG5VNJJ-+@jC@y}2A| zWgnY42hq)cZosJnz#t&!mEp%omWz6S1i!y_r?*X*kDY<{rASbOz}$7z8pWpcS+dJm z2;IxiJv}{J7g_@`6$Yo3_+5|pA=8vJ^*~|do@ezkRX^U?2CIy|uHbSVzvaRaza=m@2APev zE2Ndhv+jO8Z9eQgPF7Vsq#Y{>x_NiQiD*RJz7_Y59V@6!>#oa}-*p|7a-YW-?}Slf zZD)-`a}0N8aW{PsgR}iUCHt^Y0I=DyxPK1iEXcm$(W?vW_e522mm4c`PzX8q3~8BU zS7?q*0h)`L_X)yxGJe;vGQd;hV?C8igHupWkp6{yQB&^0RD7S~ZKs-Lt*C)l8E;bD z|32ndD0U_Wj#|!s1wMW~*|Z-`E+E#j`5r6~m8Nz+|6af0m~i6zQ}!`Aw~g{)u+Oib z6m!zBd~+u0`ZeJ@nvq3|J8DE*c?i{&l6UPPvd6vt=RtZ{E&UXS@=f~mm_ld zbNJZN=-W(N`7>#oF1s1OzwCWQA~{2XV2}&m*m|9QB((J^!~7dHaPjXFGVo?^X+;~5 z&+kx`**ni%VtuzvUJcmOGjBO=1w%HQ^4BAw+@plGpI z?b|~YabMem0bZ{8U0f4CSIgvrEQ2+u!~pVi{tQSQZlH8YVR=Dmp413h-IplW>SyzB z*^t}IC{scKn_>%`FX-cFEWXHzCZd{4_8;h`lb`q6sC%{-8)|xlfQIq zIyDIo4_|M%yqEwQ-yV9}*WVFcHBbDHnYZG5*}hl*#r9J(>PS=h!W_?)7$v@PQCmUV ztJV1&b*5op3+KK}7IB_OoYY|4O@`J-S+3gJ(O&tE* z?2yl3yG#z>M~YW2w?H*dhfp5iOh$*L*&yF6|C81PSmw*9H=@qY3gKu4^raJPrP%Q# z+J^#+#o++zVsH=0jfMLE;s)WPzM?HKwBa{t#J!vt3=ML>2mB>!dPP*|z>wD;65Q{1 zM>pbdee`?%!C07*H%bi*Vk$Vg;Ts^I{s0u@mUkj>`8p8$2~K(&&FvpUy`!9FN-n)EALc%9IN~8s4yW5oylcX$Ag8k z^;{bF*@rm(koXJo*7^1gQ>T6@S!Ga+AN6n7InrO0Mw%IA4*^)TDG2x6b{MJLu zn5>SeYn#}LNJO?y5WvDZw+=CAly^R5N_9LeSb_1zv?rFguHd5fj3(SYUa&~COoqC# zR~kKB$vE=RF@5R*y$s3-liM|QHoMxSzf={JVumAXz`m-k8vOlD_7{QAy=w&zB|G)< zCA~+yexvYvJZ&c;RclK_(|I<~Wa_V=h_>eNyHd$0p?D9s91*K(0`fWx?~nRNePra) z5lL8QnLE;|+>fLq;ysRLn`jEqEgs>HD31Zm?a@X5I9d4gR|zNy_b~F3OhRNb<_|y^ z<{0Qam9CklM{(O_-2TbR|Yb4LsI&U)1L&5kK2%lNEjH zTR5TBAYZimI%-Li2^r6`GnZ&k_%Av;Tf1OHcbTY~!f%hHyQ_~TsGdfzB^a>8B>Wn3 zXOOu&+2M%#HGYRecMFVVpG3(&cT`uAETkmGmu{XSot`H#wMv%KZ*pHg z_t23PaX@f3X{01i;(g1qE$;>lJ5yEvcrxBufnD#oGjXaISUgYOMUuUC?b3^uMGA09~F%v?@EWa zz{lXO^cnnHCPwqYN7iOjcSxzsmI_Eo;o9&@KRG`;Y<%^LQ~`g1e-z*4@)Lp8e3H5QRF@$UDZOX}TNC-GvXe`UV3 zv2l(qR1>^{f0mMA0!zu5IS)jz4DOVOhwdbE< z@v6Fc&8}YO@B}12FPubh?XjeP@Wq1k-BMEU5#N?{=;KaW?1R4u>4a3xRR}HCgjnUw zBm(l#?;C093p3a_aj$SVB8i4n&HwFlY%1+74QXzNg(FIM!=t&y09bXKU&@|dwuMVS zmvdIO*rJ2}fKV#Kpen9{X-EIBXf?UACHcIwWJWN*>fu*c?oF0e`9d_49Sh>+p#R15 zmtorhe(CVh7$oab#pW|3&rs;LuO*d~PDuxB+D`LgYgNg&#%Cj3b7h)!d5^s-!XTWq zUiJk$;cQf_25Gp$Vxcco%pD4Yt?IkkjU6vf^VRPhW`bKCVEdCQ4(b<0|CdB!kuKRh z1Q!OUW|n0a9Fy(ptCDQ(CkxZ3`W&CIJ<_4KqnAVPRJ2`5B0s|cr~tFyBHH`Wfn&t3rXu~ zFM>^k7dt(SKo94vZ1l0+HQ2B%ds;wfa0=Xl%no-&gEEDZGzTZ=4J`JNKRXWotLE}e z-{S84z72u09cfIEVkj?Fy<#@h>XPdUy+xu?#+RGRO!`xhcT1^$1^yd;O}gDkgrS;~ z`{j)z)(;O$bj@5=|7c1^`z89>K{Qpo!ijO8sH_M0a6Zr45`FMPs`S!5Rc8SxN#OHU z+sv+jmy~27{ujIp!Uxj5F%u+JjPx2dE+_)H6?~Pn6f6}Fl4_2Kcb7J!`4Ml}jWFaz z;~9RD$9XiDOAgwMlWnf$c>5u-o|-Pbjd%AnySOoe>vmg!g&ubOYdjJnjy3diL{9(T z-N+;a{j;FF_}~!%dPQ7C+!Q>%F2pYPE(197;bDtdKe(+#xXN?GnTX(fG^Cn1aS+dP z`?@fH!bfwvF@*vC!v5&WZSUCElI!b(aal?r`L@gD5dN?i{4(*Z4=^6#BQMrG{nORQ|MBR#7)-Nw0UC zMrIeEjNLcS{dl={YvV_&s_5vANkTIYR=YO0A4uUJqsZiZ3<(Pp<4q_I#cWu)(RdfQ z>r|v|Sgw#b(D7W)oTHHIHDQ7kcWkma-1q1K*cqQfa z=}Fpqy&cxj>6HlIrt-h4n5?T=gBfv6mxF|gTq zAG+9yyf%b&(2c0)c9dN_dY?vm^g?pa!qn%DSoiK2lic5{E6MEs3y442p3;L8%3bN_ zMuXj$>02vC0#3}q9C0XVZq>_=)`K1n7Na$h`J~Ad?CTP zWc`O&6Il?YtCXjcF^cfLgapqGWT5Zbl+X8Id)0R;9m0_dmu1HyDa4;0xH(g7|vlcPI#a)S8jLny=jU~u^ ziIrqXdFj$=WxCWKU#)ElU9I?l%Rwz5P9JN-=fl1AWGgIKD{J(K5nculAuaWxGSy-s zEd@s6V_WHECKem-s!WDjhQz&+gf2O9IX>AE3_XYO=X%v$U%^?Ajn}MPw))TBmQDZJ zo4$l8dS&<7jh007CGVJRAS*B)w2N`l^S$TWz=zAhBkAWd2N7}cm)Tn6UZ$aJo7MAn zkZIi5^k;vN)Tsmy@SJdpLxXK&hWlCR*}{Vt3*svsphfg^?BI+F@|l)kfi&$_0yxq? z5?kC-P@Fr*eCdOc`bvXjvvc6YHEEOC*MowdvlBUgS({l$ogI?mJ;@KL~vK4zR6k#6>&S_Z~Sqb zY>=A{P_t~RdSF@#s?&Z;_m7S0(jD8g-r|4Mbe$lJP1&=&%` z_CUR*FbIOg@y%WlNX7Z`C3vb!Q8;QSPFx)89?AN16^P;85n*m$!>q!`q0oLM|7o0; z+`GRKb+@W+uPCY<72~%fw8=V?o^r6!!^lY=`HeFQ4PM#n&&O9$K@P~k0`wQ)#At(v zU~e5kbMYC-%qQ7Wm*N5@THo8GRtRbY!jY*nl3g+71?hGZiGa_87M~#~jxaV3XhPJpxxS_ zMz#@`b96uT<^;jIc1zNK22B5F5a<7qYMmWOOF2KV_u#nUYE|w`dzvjBnJrI3)`|8C zo#>I&m%JrJC3ssK2$2FJuJijNv`3a^7d0)VFgP>36Fw9#Sk5&??RNd%4eR)L67^O& zGPzK@YhF*dFYA6DlS@mU(Q*iKn@cv!!fnW;PF_BXeVYm?gjoNGNAe~fa?Ys1Upg9o zznZ?^KmY0NeSHhYGY#;X_-e)y)-ARV&XR?F>vi!lk-FW~!NGQ_WH}@_d=_CJU0YoJ zEBy^$HSe%S*x>Eq6es9z;k6@1$>cubf6y+=`qK&jV8pk}?mM+aZ~R;m1Xf*sS|lQl z=^B~_-bE&tkNz5O0?v+~s*U1I=<=h)M`7 zB{2Y2EgDTQ?NIh@^}nS1x3qmJ)eJXDzs7Kh($ zVPCb3kEm^ka(^@<+|`w`C;RO;)Z{w7x6m+~IY1O+L-v?P=~hgz~U`j|BS_<7m( zYD}as#1N|S>fbkFAh-%Z-$R30{qSaFLydR#;Q{f-!%NGiOT1*Ac4$gcPtDfNEUi#s z#+s-g>>On$P0c1#__Y5y$gSX-`Cb$5Si3%uI;^v2^kQSyX9Eb4huqV)r@3gfyAPXG z@9CS+^;+z>N&)BHjy7Mg{!Y5|=`k&%!Srv-chOf9wDjv=SzIxv&)(~iRPTu}oS!k4 z(@>m#$nO7e_0@4rf8YOOBSgw6p|qo4v?A8hyDbMHOze4cxbb32rExNSee~Ag|{5p?`GAWUXu3u7!8GrgWo{jfF4{* zlgNWCEy*-%U1n2Of~6JSXkZP_9E(a&LUW*p(fM*~4xR_X;FFyrD4f8o8R5*^XMH$* zyk44cqDhT3=e5gAw|s%pn29e6cVnUDt2p4*2^(z8nxe~~JR#v|NTHDSk*GtA)4cROjlEHv6Nnxj z=sz4FUc3UbFpb&jtQ5JNJvJBR+ELnaa=c9$PIiiLcT$eE2gG>+$F0`t zVH9#+=+HOj;L}tRpfFy6OQ|}l)um1jMzzujlKjMoju+Alg=W3++ple3>9ba;`2=&i z2luE#zmH?hA#-TMqk>xm4$K`j9Q({CNz^0HE!+1iu&>=?vl-4p10@@3#Ccy#BfWP9 zf$M#0|1xmB+Z!D~HZGIlIrAstM24MYv>1uVO#$%>v-a283E3Y&&t&IGzO;3FXt}z! z?s_%!YrbraA^Zm)^nt8D>@xT~b#|}EY&Tk%0?@tXADmmLi&%b8H-gsf$=Q5~QKx+P ze7xaB!~2%bD%&ouy)$+fqUe;t)AUc=oHMpRPKG`G<2_dYQKv|hCMetBtMfsVdAtkP z@DvjT7Nb#X9EW8@{x z4I(Qg6}uf;$*lz8qw|6=Q}f0EXkX087pKQ-?b%9lYs(~$Rr*kAuN;a}Sf9n4tNu=H_-$Uh zh{u>$RidoFn09)AH{~5o_L_yGU>UF3Vr~g*W!{VF<&jhU(sB+Zzkpa1kJ}()vFs{& z&n`X5Vu|>hr1016zV;yAm;Hr% zyCjc$NrBwUT!1#Dq$SJwo1=0;MJX9t1i!yOCidsY7A+lReXhc}ZA2rFAj+b!UDRX` zDZIJZn-kh3Fg6GE)rQY!X8=Al2~-n@JuJSlC%i1|gMt_J3G!UW3qLQX@w{`o*`<^JVrZ&3b&FC-7smwoK~u9?SvV zBqlk3)I^Fu`s6y9SJ*@Lq5U#2^Fp0J9tFYt#Ab?zfS=Mo0b;UF7I1hRFD)KB<2X#pHjVq^W+IC% zk25CHlQOO6(~`s8u8|e8aM(IE9c+)k5NHD#u51Z>HTM^<42!K z7KLfZlN(e3{UbElHFigNA18RYA}o?_pE;Ph|B@VEi7RnO(qgB-_RQ2Fbui~P5J5GD z0$}X%v5Nl_jJ)u^#hP?P9scme-kwRu&J9D8>XPTHzEd_3X%{Y3Gb_YH2-d$2oSGTo>wWCan4az~a z1ahEK1Vz$kJG{ptvtqCbU}@Ck{4pdANP#Es7+;?ilcK)gMFQ0L=_{ya>Tte(Q5bVk zZ=ApjZ@9!v_lPcJlokhD18^#*10;%f6qD|f&aMw%e~cX$7!#sgpd5YwbNy$z|E%v5 z$wqd~xR|>hw5?X=sj$ceEd(3iWG&{fVF%hv)Am9RrRDlMNppkz|Ct6tS3YB>-=Ob2 zxO5m5OuKyE2ey1y?c<3;$$5H`H)YU4@`KN(WGtD^u$KZJz@a?sqw{3T6ab;y6NAtU zllSwYp0@jSvqQcU;H^_=8_|)wezvi9Hi({Av>Yo*;k5_n^iT8&=_L6r#7rXC#OnUO zPfT8ubgmjNG>@8>Dw2BMw0O^er+vBb$eqx9)d_3pSD0Az19URRP7%K=wH3koVYyJiNpDa11lh`oK7rHPVNOCoJpHBpi)2QKzH^ipL0p91p~qKVXm?oJm)*bNFps@N+HAO1@}aY#QWfh9_I!kipp78gf|kBK14 zk#=htiQD0u4^pjzv;`ZxOp&5gVEcvTvSinkSiKotJB!-e5DRBdE@hzV39Dju7U}}J zgN_2v-JP5PT)S83HGvlnl52?XtWXHdsR7%62{v*xEC&EtIso|67Wqk`hFXe>m-f)K zv++bSYsVpkpjr0>kt(Ck9d*dXFXuw_9T%q zID%=m5%8j~9*eV3841`!-Bv@^u+Sr}eg(O#!8wKBnIV8p`EYDgOocLb0#Not?b{Im zXRr(XnReaU4GuSs(WpxRmrym|C{Ng0B`(3n_|c^7)7(t!&!>Oo7BcRiu4V1dexZCg z1GsNF_WvB~h1q}i=@bFc5fqI;C>K<(Dz@igJXH;txr9 zXclQ`A-c|}Z)Yb5&`wtC9bz9g>&E$Fv0RuL;xFv>B<{xvt{%vIA`3!nEH)Qf{*f-b z0*Fa{?xUJzgD%UtfE=iWsQ~B%fMsbM)hLmaD}WEi`HZ8?05wv950P8*rCf_CSvx0I zdi&IJkRwZs(P}6qT~ZC8seqZ2$!#Z_5_lW>6%u^ryjGC+BGyt7CiMjSUF=n{?T&Kw z#6Bq-yw3>0M8AaPxMcmsV_vLB5=Ai20SKK-=ScGdaz+5aA@YzCZw?=mew^A?UOv0L zhV3t6S`t6rP1W-!67GqH!&|WZsKu!a6^2@-eh_f$H)(UJnZb&L>`kYMaS;xmfv>3v zS@L`&Qk3)LMn;G+O0lL>Joso3Fu|8pKb1l@!OZO>U9mO?>SmnB0u%3eGcmK z=DdwCEYx|@lURz0!$hGb^Rn{NGom0}FQ<18y=+`gbUhDH*zosYvoKjXOeMw{&5+46 z2)2wL3j!2+j;y~^Wr!hb^a?NWDRz2bjJ$VK!aLG}%_)jw+Z;YmcLo}Ei*-WRG(L(U z7-IQK`(jiHA5}L*3yXbj_US}#yOI9v#l;L2&RUv&IoKwFQH%M9Uipn}N6IJj|Lp1a znftkG)nJ-DP zwnO3bm$w>8jlAa>0KUb+Q?Z2=8fM-V0+Z|RCRNI=y>*-HB2A$aAVZ)^fNlKxDs}CU zDH|SpEwXYP;KB%Qs1u&)Pks-s{^2d64l7T07HYB^utJp>1A!MomHr8|BQK^iMEz|`qGODd*uVpJB{9Q*c zy6${DeG_Se&_&cckc)Bmsj=8MurWglw<8;+i1WTL+p>i7<8Zl?k4>4%j3?^%rv{ze z!vw%5Jka#C_6Ji*-BUPyY@U_17EF_BlSUQ1MRf$Z501xTS-3<$#uLYhsYIzOQIxBQ zD5;|R7nj9+p5U1}YP@-%X2j>jHkJE-2H4~EArFy$e>|uJU0+=bSv6bho)Rw#)db9b z5q`rU4!UybOS*jMuB~Gn_I!_Cc@4OW7RYy{D`NCuYNX=6ID_Z@7C=dC9EiiQe;x{g zCPb^O|S(@p)5YEHLxia1A9e%6BTVpEKQZlAKG z+cq@$z<7fu6tb77k7JPl^rJ5kM0V*r5|>atcb-uZ$kT}DpAMOBFr`xwBYvTrg;fJMwT@ECs5${8xOg#Dc4?-L10onM@)8#EjnR1PE z%X^%PQS{RwQ?8f1&^rQ7H?Ft2DT?6IXbpy;f;CcrkV7~SBVY8V&Y4p32w37KNOP9@&pv0TooB@ zS9I#e?cN{1P@OvDYeWc9nE3X}8*INU%*b=((}@I|Te8;`k4MT%(3_Q*aYTsdSvU0X zLPtR@?JdkwsbJ|CY&k&WnBfKexG2_?N6?iS+mGMu$e3ygEiu0FTaJ>BLXMZq)O;f1 z-8p?u@jL1niKW#X(R|^kt$a5fSUFiHJrfvk18&=Qo=5x7wnhGLP?leQzgi$8R1ZNM z5NX72h-(fu7(kNt&nVZEBVl7}SY=sQS_0M!>Z=ETlJ)4zp}u~Fx9P>nmwNfN-qf3M zznMeLWgDc*be{g8dfSFNffUL|2|zUH)#s#~k261&g7oYs+ zL`r7ko%Pn}^0YZ+hB^9EP1C}k;d7(EM=^whvn5?$3ZGi4-S@}h6`eb3fGf?BK1rWm zrM9d^e!U1dEQEKvuafjjj^a)4M?lExqgpZ8Zmv0Mk{gT=i(lx-9Gc4G$x`J#8MBb| zcSG54AYCZ*1oIITy{J@HJ|2tZz;x)n>@b$HX}o*5 zQ;jddEm9xS{-E3Ehb_`1_9!m7%lcT3Ou9bPg=e!tlR0L{jav%#fwm_NMpOoRI%SdO8+jl_f-`K7ZbAF_=xe6GgqvPyFTyj`UiM9!N53d25}SW z8)4skZds5}wNp_e8!(Xb#l{sssElu_ltrH+MIT~mtCdi#HnCT*X)~VFS7OeAz1! z5rN9&*RBEXe1H1D6upxBsZ^aXZ%7qQR{~b_dRxp%uCBWjLE0IRr;w+WU4a+P)nut7?MYb--zi%01*s=H}*ZdWzid# zQpIc44BR--BF+7@DhIEu3s4tG2S@``0$l;_ie|!71^2T_;bJqUl!YIz_`9Zub%8H| zb6O9nwI;ua<0(AZx$ilD&%NO|qhlv_y8$2X+@b%H*k;nOhEYO0K=_g;w{n@+W3k?x zvi)ZfHhT3sWKW!a-o>`bye9Ylc|Av%EAy`yC3Dv?rs8td9Q3$IDlV^u&7TO3TA|3#0`i0b&f&qU#0MkfvnWgK7E^$kNkU zQTqB6X(rpjFXb8E-`W$GKKc6?SR=`C#7f-YZ%CSlxQSy1eKKS3;x{v?y^efD?h*_X z4phBBz0aY1jr^Zs$hDKpXD;_wC1v(f0~rHF*M>B%u=(Kd_b0gY+zj(D?bG7vKjMayyW%y1@Xp6Otn3Jyome=Yr{)3>M zB*FOk4vPF~;XnxJ!E2PML$P*5*-zag_khwTLuN0=?Kg96LziFRA%Z-RM!kYhK2V=i zGaIU}$#dUN3{__C|8{N;Oi`d%BDlct)=QL7BrYUTFx9;4sQHv-o|QkdQjNdf%RHrc zY>RoOi#qHf&S~UStua|2r>d`ddRyQ!b-yAEFjf}~S>Hrx9e}pkF5`RN!n)tu&06}M zCCFY~!q%$8P?Lcl!6IM-a5_iL5KAr85@5v{Ey4Y2Fdf}iAIezc{!!*H#uH^;WWMNm z;w$u?0-h;t($#~yK`h#`cI1orTVJjVdY*xP!;I_Y8?b=P(*iDhVLpFFOgu6Ku)^@4 z-t_w-FwINZ-Gf)Oo~bQc!hg_n=SGe42B*vKR@OKtKWRZfn+ z)xo7er{DgCd#J{u+PXQ-!CY0vwntCNgY?|B7!<10n5+me3uDofQB+~@*7T4Z1Aw&r z1{-6kD`xP4l$qRa@FfzUGWZn%W5EN4{(n>CJs9Re9+owOx1cLiwxI`(WbXC_%p*(( z%t_zmgS)WnEk|lX(V;3-Mzvc>3tG!J4e{WGcANL#XG3m8OY7yo75TpMv>5iH;CUB7 zBme$Pp6qh32Ve;*X>R3m1q-^CP#6GUq7)&Z!$$*@!pOj>;?8>7VFCrlI^Svb@~0Xd zf`b(ksJ*9^)2SoV64oyGxJV5>!FT!<@vP1!qlebUxhVFOA*^Nd^KscMn}=u2EdS;L z03il1@FaRbHC;@XtV(1cs$I!b$2EixozoNQD2>4iWJv&*wlajD0GaWwGZq-j5Bbqo za7CJ8Ljm%os;I6N%~%?M#i^Fk%#a!0dTw;&xwA9eC12;o#A;t+tr;Rv*Bp({JT zjI2W6&A@Ns31O2v3QfBM0~-!COLr`r0* zPGvj){=Lpj`Fv$8K8!x0@F(JupM(-wK$CcCoIFkXlkwIYPsJ%(S%^D1Y##%W6} z*dR!Y+FmH4&d)x6;Q(7JDpKDf>d~TDCLmgOuh&CRQewsf@xhfko<@^SDy66TOQi5j zu9h~LHaa33=6VFgA%Gzdn}`DRZ-hfOe0ONknD`&Q>&}+^b?!N^ce0pZHERp(!}@z2 z&8|42Oul$z4gqPz`=0xl8^>tHiJiEAK{zrZ&#V&sU+gt3iml^_oV)H zX@#Jhs9vXtQvt$FLGtM=evA=WGPLd(cDF^)$%SI4hROhnh}eQD6#A`*+RejYNAtJ( zy&CbFP??&?*M?68i@}81xdg`K5D@eu#N*aHkY4>0`IrbA_#3SphkOev7tlF9=d;qTxyyi7oYh5oBXvJ0;*;Jg zbnS>E@c(|<#U}xooqGms;j2BWbGSpPgR_=Op6{x#!IIJr59C{xEAUhS07R|ZO6S}* zOI<`8ZmP*qi+9FM00_p48B@6wBJ&~jvqJm^L#%s_yNbn4YntE$`43-=R3_<(!_XDP zz%BzMLht3z29Sv!qERF!YE<7^w2kSD2~u?PGjMaFl_RM=lD4)y?9`a`tQn?L4y_g% z+u*GtxcbCHWp?DQ?!!P&ctD1RE)&D7=RZRJU$}=L&&}l`!*`lzXu>Z*mrVO>q`}B6-5HABTN3<6Ki`TFr%QBV+xd%sP8h7a%Drl`udZIB$g1# zc<4-!ZfnoG*{h+QhSb7ro8^j^HDDv3wmLWQK+zTQ=nPx@P`oMbknRfGvh1?u3UAR> zJ15K3^~f)|Jt_x$she4&bGx_^@u8&LJ-V1uzN{$aKS)dO71)?IB1*7xAxPH8d_at6 zty{XI#=YQQB_bm#0%KtaSBK3wJBA@V{mF-%WR3^dF+i+bKXXkXOQ>7vXqY1idP`{L zCPm2c8NQmq!H9?U3FuI8CJ!oe(c3>6|4465sClA`3xzUt|K337(OVGsU9po#*WjiZ zn{i9iP~z=CD((vI~WaqRk^AC}JfPIurYbteBTPd7vm)DcoDILF%MGXs#Q-N8eNMJ^D%xZUo;h zs0%Sp#`)*#(U(Bb#`7hfRp&~?>5SrVg}?6W<;Y75 z3RR3yH&gWrb{<4L#6LPs|2-s-Pt+<{LsUf-UslxUhcslSI>bd8QQxQPqV>Y{2*C6| zf9ccv#-L%uDJo5#-oX$Z1dGo=O>nM=Q0ORi@8>C>G&~o> z<9C_!aQ(;$K@^bX zoQ_c5H6z)nc%ChgJJkWEWkTON3wJg@XmV<0D7*-R|94B0_;TlmMb}g<$3~C@A^C0o zj&=5p`gj+rHl0>e#C1Q?f!<^C3juWZ>IR{639-z}4+w(wAAYm^t zH?LCYKnT`Momizhv%^h4e;!(@=axKP_hg+@^GUs0{Ca&zV$bKFO8D*?j-<1D{^aBy z#25&P40T58KFv!SS@Qbi8zd44+fM0u{EG$&+nd7o9p&jEw(H7K@drNSsYerfeNGA4 zjeKc$?&Wp+yCPQ)Zb=v%K4sB+l5M6)-6x(x!zRxM ziFJ5srG#|(DpTuZ`9TyPa%XKwV2sa@qvAK>`zhbYSXfB)jkKx41(BK1cHq$c`_q~@ z0`+xxe!z#50(U`xB>Y#HBmKmR~K)XFF(P5(-TmC!!HyzWd#qvI8(eo z_jJ{AcKTmzZPD@`Hrq$zpA^Rf8_iw^F^{lVyd(ngi5Ks7c?q$rEX`+SaN|1WFuJwh z2G=WK*AR$~an3RD6Wu|~nn4Bho>aS@YLFpyYNYyEnS|0rdP0+X2C5azLM^&rcMi=v%|bJF6sCfN zf3%WJ369CwOHG?Dpgx0LnHf2cSE}(yX(i6-bI_OZ)ZPL;RFy0yg+r z*+D)|N=WEP2{yc>nD>_~D8c{~{l3tztN0yi8^}_ke!bc5i{h)lq_0U`j7ZdqGc`J3 zr<_K-7Z|I<249N0P^C7*P);S|?$wr;q(fzAk|3=^;xvQbzy(mdvUXfS45g*2RcBqhrrB1TbOLa-UE1YF%i#O!~(|8G?zO5;8i!dTmU5F62i!o6bM+ zBrS0xQTg;k>)d6jq$=f^@ZO7Y%MQ2zuf#4F+ruq>M|V_ewl3KX&&+7S@n6IMW_@Sk z{pqcnHe|gKdy2j8U@T0fSu{)A zU*%&WH{ zX+$2K1%GF!9mho9?T2_eL=L~Xpqbq3&R?rW-=QmM_$1RPo<+TSrL^uGlbB}V;V2D) z{c1~zF#FjNp_i?pZ>|l+#DDk;HTeL~@yGtcc;m`R>(Mtjo_WK2)O_H4hwX^q+OH=;vn`_@e||9Vl){-G5f_f+Nbv3hxiJs$PVY z&_e4zH&EU9C?6u{jHXCVw+sI4(gb3w0WlSth-dIaZd^fv>y*7iMCo@PSu<<2g`MJu z<)#Oy5N_;y5*ZPt$pub!yimS0p0!O??#lJd;8#*Iqz7c|`~+g++eNdpgK?&+d-o8- zt4mv~T`$W`8%kH#t?X9E%dKnXloQ${o8u=_)=ND3G=!=<^Gq!G%|Q1^wXtGN!WR5O zeMcj38Ow9`)|Kpz0k6uXeD&_ZQUo8KOX#r#LCckTjt(#Fbf2b6YO^E(JEgbAUy2Zm z(uLm;?EDsiviFQ~q$hI+51CG1@a~-!Jm3uGtHqfH570PLe7lu#NajYUx)Y-+f{-dV><<$Si}U+t-1Wmh5n9~ z6q1Bagyd!szwAK7}rH6~f5$rBO03#m z-%)Y%z`Ou;Isc2|lay_ZD@a}PscA)gi$j+6OeRzQX5Ze?JJAbb?#CrRN{z(d+hUzh4hx^{-<1$;H^1$D4Ux8VClszN!K8xQyC9o-hXd@ z=>nU%R;(%W(p`l6M1S*R?5J)lkV10v_XFwl`l31oIz&Tadt!@`7&L^70H5Ni%LLNn z;^n<(&f<3t_494vv;8uurZq<#FIAX;5RM)6QdHHPFut3w7j;ew$l>T+eri3$3;m~GtAS95?yo$XiGw^YXkbP{V~VNAH?)iyl13us=s!Y& zC*twwH-WKKRWCWLY3{xw60z=O$~VC@!wa@-N(-BIpS=jv(QefSAYaW%K0W9Ds7wpd z)WyYH9Wn+ySM&u6EQ*a8{ckIfT?&z|9;?&ag_sX$2OMss6yBP=0rW#`&U_W75#$ui zGR+ij))AOxwU;}2&y%bnXYtt|!H`@K(`0`sN-L%Z>f|QrYq4uPl&C|+gZA>@vv-wD z_#4T`&0RumKrH&I+}k2PmwY0BQw!I#lmS|~^5Z%up)vT# zc7S@jACbnzQ&u#hSg|XZ>sz&*%1>2qC}{@hONvwdSkRhOG(luion@hiZ|7- z*X8LeO~ni8$I!TTtDan5v* zA2vdJcs29vq%!&S)@n-*FLg86sK``9mt28UEHOaiA}yN}vXvvHj;!_fN0Op)vvhB! zFTF~~le51Zeb!=;iY!U$NvjC+@j_T91T1L+nR2O;%}Mf0>ooYC<~gsjeJ27@u{Dr-sDZ6~RqH7>H=k`06Bb%ekS(1~E+I@xGv$K%FJnLYJ~@^ps-PZ9A{#Ma$-?4@)A)fVa-usEsynyPMW@KrJbFKs7vv9sIa$v8dY z0h$V*RMmOwpKeAFVkoKoFbH61bP|gk#5(z)N#_P_5}O$tL|`MGSx4DDKkq!+e@bQh z?~<#WoDE336^@7!PJIw*PF}#vzHfkVnOYt}5lTsiEdX0@4LFjbj%tn^NZF+W>v$Ce zSqtMSIDA?ip?`CM-ox^CaspZjz2Fz#4Hlm|KRY)I5bDx zb-2;a0!de&ip~c()5flGeAnxijvV;t=ed2bWz9Ryyo-S#W$_^U9Jts<z_)JEsFd$RT?1C7MGgKcqRv)cj#@=Hjl@}KI!XJ-6qOcLS4vO1)mlv{c>e0_{>{8!E0+;K2UeERtN@2d z?OFa?9PSfy+k!LR>yqe5{NB{+yU_Hh?RdIK!5JfR7%>I_Sd^&Pok#Qwx<6khIv}<> zPa*nb=9>J%0EhfPQh|iy8r5G)g3}8ALvyNnwkl6%C$>xgtp*VG17a3Q`qV&ZUJSjZ znLg@`U~5_Qzy^~hAL1RreM!ypSvq2#%JJ*YJ3w8JfA9hbhY_Zfs_TLd27}=K4EYKm zF?c!s77De7DY$oV#l7I8Vi33FRa3L9>mf!)7ln?P1r2Q=%a=qm0?t+H?5FMHdTy0)n#dNX? zZn|QM^z*g8&1Z(&6pni#Da6^*HD%8spogd;zaC@x{Sq!N`c615!58A==XHoPEeTZ> z{i>2*cDRRQ78074B6S`K2G(R{ype3#{I#}=vvMAt`o)g)+rEqn6uXoYG-KVFww-|e z8glyOTjEUJ&Kmd981X7ejLRWF`f{eJePd%)i0fz{VwYMux##B#Q-xsJ<;%-k?`9pQ z&WrDG%-Am&Zy41bfi~l@PE)btdO}sk)Ll|lQCI7wA94)tCNBcLmLGr5!1uk=#zXr9 zn>HPi51DgL+ft?I#J3>oqwGs>H_#!v`>H2$XeR|>Be;N5gnT~&ZeLA8=v#U6LBx#} zRqa-#5Y`#zB)G<4ono z^y$3{_8SD;zX0iB^=-~~^!XdHX@^&-A6)Y9^E3tsJi3eO9h>+H63}x%7UvkSvZrrR z+f#i6yLZk_`&B-~P0<~s$ydzNAU_|-;H71@XaKJ3oS26aYd@FrWti8!3N&CFt)K2k z&73CoW4CMLhXRCzuC(dE4Ih6VtZ~2qfZPH0>E%a(+MFs)=Uw4mO*l;SfrNHudiZ?y zq(Iub2|48wkW$GM?Wy&c6UT=eOw@tXT@E!8_`DV(Np~X_>${=(T(w;&t%1tH^b$ei z)j}xl>}Eb!sMIf8sV4Eu7h#$i-*y$|uZQr(LYBH_MiQ$SU8{C$2ix7I_9_iVrnc)I z7nhY9;rF(Nu;*1C1$qkvf~=|~d>!(}Qx^*f(3OE7^Z6c8#h3{M{oK~<+HS|xnhDuG zNOqAPPzMrbNg z2wd`LBv8ueUc#uVv&6oY_Q{wM6}PVvT*A8Me#8}P^qR*ML| z4Wr6}w??(s*rmzO(*0&(t3HF30Q1ORtUfbL`q{sQ#xBcYxJG$@PZr5N&|VNX9Q|b+xg0W+u+p13xajEebi1k~ZfDo}?lsl&Bv5`f9GyJMU-&9L>;93J3M9MKu}-h-^f8G`L{Zf;TE<%Wd$13KJfP4eMe`>Bn6K!t zni*B{rSS0BCn^Jynfy3%g}p(+O>T0&E? zD)ILu2r>Pe3&Rf?-APYLq|9Xe0Z=yK9BhoN-ZCJKG0@AW?~TQNjox74?|c;Q0-qmd zyqNVp7XJvtgVunJEmk-)B#W^Ihz!q_DqY8(P{4|Ot9rjvo!k`xmQQmo*4$muTmprX zybAvTRzH<3lozBS}Jp)fN#yKP5)0K`USXJ!!7v}#kJS;XWp=V(OvVu$+3 z){~HoJD*5JA8=KQm;bf$=jCIAMtOZqByncr&50(&kHq^bUr#ayQHp))$7u+eopWJ~ z+z+;kc(VcygWt6sa7yw6Vulgo@S|X9PzO~Q$T+z@Tl!nk+YE&=>}y!uuUuMNNy2qG zK#?4O)>KZGXQeGRYO}S$)~4`VW}R1YdinOGC-PU1z#RLyVJX1!!QU?n426H5y z9kt6+;r@Nl@4fW)X@$f>(@^?5jj9mp*L~c>xRUvZwu?DjqJjXl$pH=0X{}^q z&!GeIO!oRcFlV9PU{2QlZMXk?TkFra<3RsN zp>f&q=fk-6|NSFrl8*P7kC4~rDW3fR=(aW+UPw4Td{+McA^yLYA)~XXxgB>iTb`w18sw|_t@*08J}R247qcy@)HFeqbN5W{huLe z(m2p_zxkPb`uAC-f0JqdsykTmA@OI2S!ebNw=3N8`UT_ZUh|me0*`{Cgu9gU3#hg{ zQRYc_O`@aY1Jxo;CS^Y0J@tQzZjPupJ+d3|jAN{-mn^rkGR)qs@ija5-;9^PE3hma z4O|wJvvGg=ML(`=F98}B=VgD)E0)rSJjVYtVv;K9l-iWP(N+yo) z|Fr#0shT}8d+eoKJdXl$2X)?DtZ{#FJu*6&K3L`p(D%o6`$gXJW^4WffJ>fpf7xwPwn`+cWkLp{9R)I zcQ1j#YIh6I1EAYa^zX4P93ra2EzE$oI5Lg5Ad2oFTs*Cmw71rL+56hfsGpfKyrpAC;=VPp7@vG)%r{~~LF$Fm#=e>oNL$cy9c2GOsR$AIP>y8Gfs zNFgoh%oEy(;U5^lRm<2s+-BzE4%(VD)vjh%{oOL+cZ-F%Aw!_qM03O*P~*MS)ZHO? zc=1ks&dT^e#ZQzZ;`j6H`-fYL-Cnb5YjcDJH_Q1y^Nd(JLH*ZqMuND>A#OHZvIT`sh!)w}UCt&~lUIfr#!rXnyum3-Z&2f7s-noA$O%QMAkLf0E z*8guRRe#v~S@+hF>mL(lm41EdEtqAh&p)0{=KiYg_ek&W1#B)kf#x|i3*QSl_Lf?r zs%xHFeMqs;axL2?alTh7B}FD2ZoX;Bx$}+-m3mm(q4`_20UxoGJncyv@5RssoBUm- z!B=d9Mig=js&~FX*!a%i-Z(IGprcF?F#Es}-J`<;7x%r*s5?_CiU5GonU!b0*AzI{ zyFS-f+BM`26p9a6{88tT*SvHxK#|wU9oZSNIiNkb)3dxdcWs_?nT5Fa=BZWX)0Gdu z21YQ7Bf;aL3wM$Y6*D4Q@}e}PZ)YgfXN(u74=#Sqr!$Z!hv&TU9_f8qpmW=s*~0bhvbTDGqan~#>y(QFW3qfwPtAe>r@PMy9aLm?w0xjCoUGs8KJ z(5I<-e_rpEQO;9&S8~yTQFcTNO7b(Qv|u#fu0DXUrHL96{wKpBVs2;tWcnWQC!PVj zviCydg1A5sk2-$=yEVdxaan@*z!PP7g`x8h>OR{;*cjA>lbSoP6;BCCRO<8<*llQT zB#RiAY-u*{&K3@A4K;V#w*B!EM)^+e0oZ+g(ISCsz z=?b3(PMAe$1W-N|RfFHU78`~ytoE4LI#gR~d=GTLn5$0sny+iI*JQS*_&SH7=eIzp z^sLRv&bZu^^%r=cg1>>a1DUgv$H4@*?vF@7%zpn--Xo~xFlPWH8ppqJXclhD5~tle zObjT&>&}%Q?&5akQ8!M~StE>}4BlDR1y&re^E&c@QfxtVns#|YD?ep;GQN|<&dnhC z-M2C!ON|xSB6kbWYVO8+qX>SrnKAb z%Ly&+d(-&|wZM!AfR;0JRS7_qUsO#^bf106TOebdk*C)_zBG?8k}w}5Ug8LxS;DtX zKuJz`crug@7hiP(mIh!;`_z_P$`@f$k_!5>U|Uf57h83NZ_=WUd~R=i&kT^{a$8=fAu2Idm2#dKveB^o`&>XBK}8>p zD@$sdu6u?J+I?PT-`#S~6dJ6OkCakj_Q>kB1R#jGpp%DU1;Xf_@cTGLiE30{+b$ z1t_UkO-*yv((!|y%hmaNOq#AhQel*A!6@bXy`krKE}0j`^qc#fd7E*@;&H7cg^%b% zx$fvEm-kPGLcY<^IzI5#=J&yo$UV>9ttG7?+hJ{E^%ZJB`EPqH#4c0`yUiUc_Et#t zgxqFd7|OS{ftLYY5?6otE3kNljK?YUJEz+LeK@VFH>3L&jMR<;CCC+Wp5Q_8L+1oN z)zTtQD@3}%ZXUi=s7ZY0Dx#&R?4VnyiQhF7pMkSa4R9P#7pgkCKaDN-$TP$Wq2 zodmEEr3pqLRFNi9ReDRTXb41U0Rjn%fDj-+3?V?^+n)2j$9IhT>;AZ7+#eq!145FK zoxS$TTF*0|`OHa`xJD+*Wc7a{{;H0@M9cYQZ}wMBOGvu+!?G9gl8DE>k42d+rrj0d z7j@1QQ}OZ3ITpUx9GI3DU{-%GHOR?< z*3%Y1-@B!yqvG8BCGzaIjnfy~)hPRjhejM-20mnwa}H&lvWPu9;1tnG7UrtvvN+Pu zR5go3)sCAFe9Iz#B5vuMiK5(TorD=V*V8^O>GKw5nidOgIk{^FQucYh(UN8f1Oi>n zY}dxoEWpfpj?tpjSX)R!}C;oPQo(;R*3txlnwtF0Dc z)x7@O;f3hb$BB2=>T`~yhs3yb$M3Mum<60q88s-T&$$*DJam zH0zjS|EfNbKHvvyI#0?nr@2bcgl#zu=pSB2cda#3%@$r<{=R#{O!LP~?a3vT`Koy7 z1m$^*c|CQecYXN6ygn->9#24#`Mu*1rwiWsV!2twzTTqO!@VP}M)T@Sv+f-CYh$}7 zV!ANq$1aaF=a#*e6C^Mh$yxVj<|_IMzSq3}J7vKy+!{*1X31+Z*CSE8UC&Lbe{T*2 z0@;tLAJc$T=@|Rh{ewv<4+DhtRyf218bLWOp#p%9lzOdGxxuI6gdOc`E+M?4F2Qg7 z9~gQ}Y>?cX=qZ>TW=h3_3IAmu&D#B)T#8P<`Ddr{E&+1G=(X(bQ#IXLyLldxqrJQ|xdYwX4emTTJLF3vL1%izrh z`tEj=eR7b|&l^aWl9aK5+RgkxGihy7$I03wpyHtu%~n{<#jsI>d_tvt_mK_`CMV_M zcsdHanHOG&`9xeg@6ja@_jzxOBSB&ilL*2dDU0a<_**!t6<@c~cHE5}rlp;Fdq9#( z?~NT^pCXz-+1!t?fm^Ew6E(0`?hSX$z%S<+#xXi;E|k=&6|aY|3XaH43QPa+RN>SU z{B``w(3ZQwM~*2UGjWsmpZ50rwFxP9zcSVacWx#Fko4x6DfOo+!6Ik)T5B4!%A~ON zEWP_2H16t5orC_Td?u04BL)2$lo||H#0TgMO%K5V>PmjjR+%4`6myh^IAGujwaf9r`WHt()$BkFA~13l@WjBvnbq&-Y08CL9`jynp{u4 ztY2=O(di-aZipknf6aHZpgz7IFC|g3$k5~;o^=+$i0hm=x^eX9rG-NcAqc_#^%FH7 zCf_zMm2QSg&EUVk1UHUf8IHaEi}#0r24K6VqcIsi_;a!&su6JI`mV!zX%SYOB8?cD zJGUuQ{xPoIzS8PzTiD$AGK<41XqkR%UU=%UQynFsPqO%*Hx=AE-Y2*nBiIY$5Eexk zD()sUSdYa9Bwg5xVfIm7uQt0;<2xUm?U`tH__mAIO>(;jkL0NP+#8#{P(J62j zpK`T(>-+ANmww{(UW|(K^(}R?2Q^#0iJn6vfkj zLJo68Mh-5|RgH2bIMdhJdzX4hn*#9xlAq0=}0a+*}KNXbXW+aHP0q`7)? zYTernBUKuo>>xTAqE@k1xKZ@^M{M>vASk`n~cFWU=Y_F;5W7&n7 zo~`^p-EO%Tp-#qk`Lh#dqOU3YQJMzAoGmQRnLpnxt6@LuTwFX)LbNT--D_3~Bhk;& z&d2e?;E0KeF9>Uda)M1{r_!2!f?3JZP$wI9ubCZ2+PT+U8%nCi3h!H5x+v*Tov3_o z{dK4_=GD>mxlyUw>87}&xsLB%0U*A=pFZoTQ;eA`L6XYR6c?Kuk0G;HVYJ8H0!Xx-8{xA4r&T;^{5r=^a$^%Gvyggu>3 z8}Q0bau9CB?+J}$OkFF;G5iNa1c06-W23`W*EXG>WM_zLrh6B~+y}{;{PyQIuRgo^ zeI_aINM4f>C`2+i@KUe*rM&kWtJ8i?`+W}Kq>pJS0s$@Uu^gRHo{|PqRg$@XC{O5= z+;QvE&OxVq)V$^GWXgY%k)x+&$lyhw7789R@7adP1lC@_ld??eg&rbBaqFr&GCK|% zaQ}HqRyJ-1Ao9zpoqlo-VJNe66!c-QfB9E*go5zoeYNpzNxK_$M@c`BT1qk%Sy_*I zAB*VI4vnA%3W^fgj`uFOI5qD8MP625md<4djPm*^xgUfSq;PNcmA)B+(_^wSfM#et z&`5Vfs*44kDndqAw1yg`a=6LJxr*ahpjF#%N2O;yYZS|0(PL1|Y%D;h33Rk%W||a_ z$XDdZe&2c3OutxPskG3V(Xqw=e^?cK{nx#K%<1Lx=FiASLA$3@w#@8IGh^DaHBGOd z4D8O3J|%bQnnF#~nH5W;%i_ZY^;>5KkaQsK_e-$zzHOKzIn6mhEpe9;Bp={2dH<$7 z?u1Nt8WLzP0saDAmFv4>fPb%cbtr9`qAPIsc-KYI1I7>cn5*38dN^>|<^WKWU)6t( z{`3Z3kgb46LC$73Z=535}rHOjY{0AY$`HN)K@69gXMkr3tC^6nzbA* z$n3{YL+Mpc>t;A;*MXTyy}?*tbd2$|Q=s|0N2ou{VCX8X3YBgr%hh%Cz1W+2&{%EU_{+?qig7vajeh_yiT`hwno9#MX1{eAz2sO|;u#$NAtL zvf8~qZ?XoOX~ljj4(x{z$u%#~sxI#N_%63H0V26#qw%~rLGpzMO1(swH}a|F;KZ+~ z8t3pKC!L>it|&OKml}f=@Fu3?8j;{fO8A5)$$S^Xh2tip3q+nP;jwe^XKL9l+TtW3 z)5_-BOJYr(UPj?gFJ=$p^{#AAtZ2y{k}wr`=Dh2?sQ)!ai79}Otrxa{8AySI2im5M zTb$lRR;LSsnQxRqFMX2NdTmX>8D&>#L&hA>YG%4+8m2giVZ-D1KLGD`5-0jww>4H@17}%?~QtEdciy^PttHc)FjpoBwfOe;Nm{l6`Ft{`)0gbMW!pAlh zE%9k5j9n6khS|X}-D0hpGW}2SM^`HGolUmCnizB}a;n&?;7MxqsQO4l` z?I5lx5-L;u4vT+98qJz(qd?5E+$JFO`^aeh;G-+2aL)}By=A_?MvomcYuh8|&=&n@ z;l5K;TN44G!7O3lplnICj27S!fJpYe3zxs{HI)*tu@T%+F0WDDk~PmwFr8dxPBu0z zh_`=Q8UL8N+h44PrCEP*{UlU=aIxUljDfX~lkc)a8G?Myk=QZ$A$9Q<-D;fRUVVuO zm30Vg&mD8rjlN2-x&3o&*vT{I!RDARvk$fF78s=p9jTU5SR$BI3o@Y_9XD_ii?4?T zZanp_WWZYpgvCuxuT2_;yO=xhnW93YLI8Er8b@0#7=x{dJ<5Gah{*3 zn!AD9s&VeHB`?KsOV=elzrGRYJ4zm(GX%ehuY{A;Q{nyTCnzt`tY9O5D|En3QJgk^ zG@uv!8BY-IWMKFIEiC7w{Gw|Za|A@;CYw1<`wE)ZFUu!&D3qQ-WTO+rn(mv+)>w^g z+($Y*hD`3pqB2iUgPH6;Z2jVo6J~bT+6(pX;kON^mLhzYuW^&OiaD*2NQ;GEKQe4h z!lm6Rr;21F7N%dz-nfpt_)b#c#Du4{}HTJ&~M6=q?SwwoD%>D^)M7U+6 zd(zLsUq836s()K>??EkyEIdRQY1_t(338a8trm>R_`*m%#C+2QGY$+7}OX!u4K4^3V4pdhtUAj2$1z~E*}KV?`pWM@I`dop*j zDImrR!|tHaD&2eH3&iH;Z{xRD3zi>e#_;Ll@cBv1k*FU|SgOKqosOQ2axXsRzH_DD z-?kb9dN#y8Ti0RBC^VpSeHZUy0M+cna|?DdZahJ^+?>sf5c~oNT}7Z->FqoDNq{W# zg*YCElQP-25MrR$`+fcDYV*YoIEeiDm*Fka+-o!o zgO1TUlPOXotUeQV`s8>3a`Re6>h~qJ0A|Day6deeBIg4Sf-G8gkAggXr^YseSS^h? zC8-E$etflKfYY~4H%WwZ`ManLV90g0M+`pDZFbDW)Vru>{mw+ixpP|EFK=o0z1%Tx z3tE@BwKNYJ?MX*veoDx_qqF|JIA@4(TA>s}ISi82J(+s8gZ~L2uD)Ekv~YPYY~X&S z0%6`#wi!xy#2uOyZ={t6EA;4b zTz&%@G7_!nA`7%5AjwKbaUs)xa+i&c;aiC`uS{Z4t#>WvKS90>%}y?d?e&UDG`|0r zmhSjY*Vi1h=FM4VqBXIeNb8)L`e&m57Szd0n7k<9CX|BY_5HF5GY5}IeV3F3nHs(S zrS2?yLvMx8{J=mSnZ<((#{((``hLNry&)~>NJAT#{KCh2+3!F@pcKsby&d)=3Om>R zMx#!4P=z08i+tyN9SGt9jT26J;xkR#x6|Cmmf%;63Iu9KyquHE(=W35X6`%#9KxAW@xw z@(YO!U_w!I;g_cHv&d9?f^8riWR0u37iN zn$V8H41DwTY(~ULizijJKpa%>|NB%--}fXAw%?M*I)OrLjr_-SntkKUN8;d^g&0jMxUfJZ}^)rsey*aCl|c$|L1!2UT6#_j7X~Tt)^^gdNm19zGtwwMnGHD(x=( zEu;io`m9-Zd9Dn56RiFPG1Zt8Ug0+@8JW8WH?A2?90FalGa)bY0A4Ra9KimIR(-Xp zHZ_mj@SY@iVQ0fJBa6?l%)}mFn!l1^XB~ zW;#p*>>E;%$>6~#4C>n@xSmVTaAc<-Ah^0*mYTjJ+rSB}d&95rZA@4eXc`9Qwn4o> zd}GA&Tr)mC>6OVc1Eu~j!9;*u!Pzr(!(M!b#(}UU#aJ8Z8KY(3&ahMu>GWxZ>oZre zfc%Y((S$jAfprqc9thAU*y~);+plLVXzBe&1)6HR^Rb}-S+(4ewkUx9r)r-dp#1#@~)nRhSp3zclx13g(#4r2(FB}wpJlJ5S z>q}Y+xG-t`Y3HC6SHGBVDL%en4dKY$dRj*6`I4?!YviL#3DyGRqP$kUczInE>#v!@ zCZ%AD-(1ZW+jJTUAB_>5;WeKt?@daU`To#}(1uD7l^6qeNUu2K=)1wc+i;mSrhZkDH%^(u=3`Ta~NQhgiSo!0($6!p?L* z%~W7QircCW-z)PSigg8ic(V6-Sa^tgMBsi6wb*l^oppvfj>;V$Kj3g1^4C`ERDn)Y zh+o-;d}2PJMaQ9l8~>(jV-i_!CGb}eFYtzAk#VW}Y;JETC6y<3D7;xSj^I&^KrNrc zR)eqauuxy--eHIE+qR|M+=<=z?dv4Ok!LmVI8RuSZt8jf-=aCXjtw$D8fgME7zV#S zBbPh*5Ms`njg<=YulAD#SdlkimsX|a_4)^QjU4`*p8eeXFybF07V0O{_jxFvylYSI-mQeq3W8qB%}5Xi?juJfqj`fZsog%?&0=y6 zu1`XX$pS7e-r_$i^v&jjL)BJJEwu3>iqOo)C$7l@tf|hc$;rr3zE;$$owZt&Hz0ni zjt+1(RH=s5{5|nRWN324}xI2sY2Tb0HxVhwpqOP&P+$9^I1@_sid`cfJwQHDD7@fif_}A~I@^|kTv{-=TGlz&&)x6u z%pLz6u4sua@dz+C&FF>DQ*~a%8&1*CV`fQ zO;CnrNPTWL`-|%Sw=UxESv+ri9H%p^!d>^w@=CX2gS=Pl56}Iba$QHo{&Dj9{hF?5 zMRP~-miZXmIJvl(*_To`L-G&A zfW7o*x1jVlpn!stf0j_dxP^8MIxhH+sm4FwrpUI6|M*A%VgXx2A^sW_#Q`QAlBG+d z7dB`-l^#z{`tbbuP_yl->`v7?^{J7%CZq(Z&qVFpKBbdF3!67hihfXj`4 zR2+dp9KcipGJ0Z5CaF(d6CYq>OD7-2{OAA_p)0Vru`jTO{0bPgne9bGX1>Oz%nhX} zC{_*?29+8OMdgL5ogwNXF7EahkX`<}zV#hO$MD`sH5gfZfb;^NTV6%85*XAtlb2@n zQo$s^j{#j926d?9Fw@6>`R`&P!fT=+Kj34R-4)X5nw+OR+PVDJr?!NgUBuE#;# zF+vJw2A3w+L1-9TL9Fs2t@1$wF8;HcDXZ`9ejLoY?M z@=f$DIHk*Ku61(+Lxas>rpq+-}4J&gR=1D0&yq zj2jS;8;q8a?b-l{HW89|lQOFL#kBgn}<$Rn-PkIf7 ziZ3O^DRq14BNF#P=m5TSI~0EH#z#iiz0e>+<9)c%qJR;sXk?wug-uS>h0wpB8*dk$ zDROOH>fH5eoiiK2J~P<;_d2N;8)RRAZs2aUcs43+s_l~q;TddKk_OG$bA5S$3f|x~ zcMu1Bc4pBrL8aTWsKh00^XOJRxztYnXt>{dKcinnopH%rG$jqG!kKJ8l0tqAQ4e>Y zWL};Ea-=!sam+EfJ^HFp!>btQ1G!u-R}3|)i>Ilu-N$HM%>@Uc*3?%f>yp^lsISup z6Wwplk|X+7tOg_9(P;7E*xzD$Zd@+Hzqsq`iaT!3N*~+m6mZxVEfxI;qQ3DA`wlCf zFUjru2yvnzMBlX5@5{01jWPT-O}T&g?s&H*=VOH==4n5DKnokxG|`dd9{K$H27dbo zM+8P}V~L{!VGJWnffD#fc=~zQVY7arDh*aJgURP%eX$cNrQtQXmS`u$b&q2F_PkAx z3w12{)jCUSO2B-y%Yn^8<6X*ZBlTAHd9;jIbR-TZJxOxsjPrt-yw6C4>nsLV;`Iz= z>S_ZD&&OCf5t+6gB-l|&KsezeZ1(i{co%r(P`T{;qBL4DPhB6LNW>Ugv|S^?|AJZhf=1x&4{Yve#?& zD3HWD6u@;srAst4Wq@&84NWX zGAglNBfZIU%C&_hIU~iPRkf5yA%okGHV8H7%XPZ#-%ywtx0Eh-Aqqs}&9cG#bhT6ZCEx~|L(7nl|IC;VgB_?a*#BS8K4bL!J@ zt;jw+Mq>vNY9yhNAJNot92(`vmV*Ms8^GW-0zA%wW*CtJgL=p1s0>p_~)^CVK+}kafjz zzo^%^L~Z-0O~HOvEsE}jG_QU|dqe4?Q%rvFw{00z)9X3(Z_W6nb8)9f$tkZ+#dhc> z2G;jBxoVU*5&9Gc2U_B?(7GqXFPjb*Ul5qsHI6Y+u1F1~WI)m|Wm2C1?%;MoPR)qs z^Iv4aNz4-L*FF%y>$Dja=Z-g|e8QV1wv1H0Z{gG^NyYA{t(fC3lP<)hLqs+XyQZQH zT9@Y>aF?eCO$|)n>w;ye&PC6Q_eFiZUoy_`6)m6F#Bu zoc`mVI}=UoF-9;%kkC3S1Xu?2f-jO7lLFDk$pIfDH>?KYZ{lxhp8fAuBWP`uT2gaP zA1yZcF^J2OH+?>I?_w2-fr>j1BWI!ke+pBD>oe$ZE)`&EpvH$wUD{EB@3Lm%oi zs*2s`&kRR(jD#;z!)<9EfzOLy*T}n?o~jp^m~iTVYY0Xn?o-=0Ss%|?2rdPB4C}Nb z+?HNPz%e5q822DI;H%mbbC*4~B}Pv89Jv3ti|y~2qi;^;nf`OVyCQdYT0wUWECpT? z{YjBQFt?1h83PX%(!uL)zV0)b?_ZD(ua>AjsQFLDyiRYt{2s2R>0S;qXX~lTWC!g4 zf`+m;Fi3||1mhyxrKNVF4&M&@jx!4C$`_D@^fDTUxdh4D#FMKMr)5X$u~)M8MG zvKML>yTRl{sFbALBOF=Fx{NSYVH z;o?kdA%RQhDQCr4JIl&1bdGFr1cw_fa!r^!)^9b17vb1l&V>F|{nz>M4NlXf0Y-6010-<}q zdwyZyxWxQF_F_Pwyseb9%QwP7wsP#<631qvSwDWAM|<0!2Lx9Pux==Y5+c8H#oZs5 z?&<0zCpJi-vfG;4VNNp=&4!m}+Fy>CVN*qbmIB2#2-_koBLq8UNvS>&H^>17K<%dZ?*F)#{H=*caTAB%J&9*bOc7tquC^4SN6rz)Ia@}j7#hjHrKoY9^zjSExW zx&@Vi@u`pnxVm`*MrP*NIqe-kzR_iKTtrYa^N`0roc0*k#(pn2BUyp^%w6rWCxm_i z7e152>1@}}fTE^%4$CbDWn=D%1WWHz6qMMr=)TL!M}>{7c?2+jH0$heEt+UY#n}VK zHQ+Z)v8B1=Q0w}wXs*#ap@ae#Qiz<_$>_mhtRbmeH!akvsD5kWwiqF=40K>pi3*s7 z|1)i8n~+-4(H1ZvzXQ%jijUCt$;wr4_A~WN-f!R~`u9w|S#SbFi>2Ftq+Bpc<$l#0 z(QN8l{I08eA8dBtg&dSxz4o6kfC_|hqV%kSm!+J z|9L538sM!x@FyuD&hPK+e|6IAt@@uV`6Q6H{7(`K{M-BQ1_FHeq1S&>N8n`s@00&` z5dN9d|F34k$FxZ9|1RLZ<583rrS_@Yp7Lj|PjLMh;x*~ef2TToZ;?uqhR(3=t=${W z9-XR^P1kys&`1K7sT9|nv$tB#{d3%`UqQ=LcbK_ny!M{Hl(JL)SylgVxbVr_-Q5Km zKKRBE;ezmi_wuG4`T$640ERE_*R(^I2ys#2LkG1LGK8)lI@v#RjeJ+w!m zvS4ldR*M(nASj;;D3529PG+|$$Z(AcMXN#UrIyw&(g6psgVACuIrw;3BWci2<_5?E zI#q}73}_@l>s$YzHkT#Bzobv+xMnkcQr*9Okcj5KDQ$7d;a8QQ!LQFzimKxQXyL*= zmJ$F!arbvYKqD3DrNiFu!V~W!rRi4(*zZwSl_$QnT$1_z45<~aHa;?vJrdy<+em@{ zK4f>0(ZfK7TW0hgFlm|OL>MHl)pYtxY52T1et$QXQmd8`#SX=>NKsO>sLOxOf41$8 z(0Ir;YUiG2E?-J&r1R{P?(Ub+o-oRZwk5aZQp7XSH0cOX(hd6g7>O_IuW(2IxfhH^7uD?%d1=; z^~`u_?-*Su+B-h^?kh0bn>~uHBb@w;I=!D9=8b1%JQQ%xUCr{U|95Kax@9|7Bn)?V ztEz}CMW$xsLp(k8>UrwKUicgNb6I}E_v&mnORhx2+=kcLe_^kps*L?#S|Ioe;0il4!l}XQwpY(4p`$xx@GHWy z+SbHOMZiV40KhGkUW=@>$Hu2{Jx+8^G6dYVoKAsD>xz5vhQbZ?0ZHCadVL!0DrHaT)n1w_ zPg$=O=;U<(+I6&4ptQi#P`HxEln{>nQuR!EHm1&YT^+l?sLwYt^5eVH1Eou2qdnd^ z5iO~EP2cl)hV7_(HicTkMx#<}YYRH>XUyNjlW;L==9Eh$(4H zkJl&Y+V_VU&g8k|qTv^oN&_(mX4*Pbph4+KA~(sVf3g@#Pv9R7)W+@kH4J918TYAE zepl;a%_~}rO4%I5o3pZa8mk!F2DxZri#}$TL*%!21vDst6v>MNv#Ahz$>!t$)-Nf6 zi)p{yE11-iXpztCIUeAv?|CrsWk64uC(Pi>RYZtKODtl!Vj@{s*oHZd%~xP;?FZlw?%cf-ZY0BA_90NdUEQ=u#O~b9SxmcD{|uNQg7ppPiE$)#_{QOMy*Z~$ zaB=n1U9Od_3HuuKX0#17p)|1<`e{qVx-BQ64bd4_{T~rj-ml--|Jcv~tA@*JiEvj) z$vsi$*@(f4d(cd)xSiR@RyuQE-#i3-wE;Kmux#~bvNw*&f#WTvJKiO#*m3pDDZEj_ z7NS{eCT$T(PymRtwtG8dtniH>1X!jhwP?v9bp^E!ZwNt0#wNvD4`}g5tH^Z*EYtD$ ziGb&W2SC>Vb~1%as5T&orQ2W(v+_e>grXyoU)1rFv(QXpXpY_aPs0#;cQZWjynqwt z31AXWyUK;&_UF>G5ICI!7)3>X#$yCSB#Qad7gh#6(QTH3Tbqf7_UAX5_Wh2%!qBkY zW*uUwOQkxP=%eUm2KZ4C=lkD`4?Um5B)(f%w^#T!z7Gq`)eVz2MpAXsYlS!8PNn&7 zChq2-Db-%q{N%CgQKH_n`MzL;U~o7LQTH-~Xj9Sbb~yJc=@6r{vrFu|$$L5M5memf zo~POu-U?zrqFECMdUlMbJ_#A>XQ5SUy#Sc0R8JV*r0ol2dwiTF1A(FQn^;Rr?B{fBcRiET(ef>Z1mjzfeJam%F}(skivPj%8+Ix z5K_#3c&^`+elIbpZp;8MpE8P<)XEK= z6fWcGRLbDYzd0+JrqjdOV_!kCHuo;h8PR}iKrv)+hvW*~$(s&m>~DxzYB*=4=+wJp z9&@#bC%e2;oScvL778hdu7n)8CtUyeVR^7rW7gj1zjlS2dQ0|O6%-1!Vl+cfhD ztCbKsDJ`_to92g(xy24t1kg^7*WJ~GKD=AergU&@*na}O0X?<*|9u z{7e`S3r|^KWg?2JZQs5Scz0`O0Bf3PZ8!2}@@Q)rqPxC!Q4A}Evi-P^^ECIavA|o* z2$%^sf4ccbXp2;dDB?K)+Q%_B0;f4;cq!m6_W5An>xe|3G30W3^9`^@VGtq%W}2U- zrUyvAi$wMFZH;_Ek5`l{5CzOvFu+H0BDFx|9!b~`hkOc;jVdB9|M+ zNZ@nS5fql)1!$UU%HBwGnthFT@Z5x_P3s3gYF0EC$jRYZFAHyU$P)Pxz_a3z|4T^!k`xcPDqi<^+s*ij+CY@=p#d|*%grvKS%0NK9f;p zE|eBdVeVw(_rF#&WZd|-Qz0@jP#pc0h+F{~Bc+0}5*4>SKjwFAiLxixzz)8r!=@N_z>1MB>Wx@cDPIQRCuq+%NrO8o_a=A4S~#9KNd z8%JmK8*jmstp%D?IMb_2o1A4ktt)v(sl&`+9$ZsHwlJ5y8R<~P^F#8xU^N<+!0F@#rKf@9mw~v zV%ROmJM~fAIo`8^4CxTbkBI*A)X@nY8Mpo~LfoggX*fLTRcoe5U6)Nl zP}B|BGC+yK;Q?TO$SLrgNBwxZE_hIudtyk7>{#(QFk0HHY}NL+1!OS+FAt^P@{nnO zpML6}ySEbnm+O~y`BzpqNwXIu<3)*HQBzm2ApqKkkJo?#wUHKZ$v#7+wgpIb3n zbch-!G}GpUgfvC>Rw~Fw7(PNL^y0e}?c*@TB7D*kpo5SwUznSjSkg{-Df=31woIAy zOU2_|^IX(uudrIY0yL_g*#nH<-g4+W9D|Sud5w`G9GYS^Psh~MZU_M!DtxCh;QlF8 zlKQI%G3ht==uXlDbc~VTkA!T6FU(TCYtqj@05I|^t(J&whE(TqXiG`>f=|T7(KLv~ z8{yaeYPPf`Yuk$C1mb}n7LV79Q1D={W=5D(VS57qlqQ<>WK+WOGv3|)Jp0M9rTc5! z`T~o##h+_>R+P%OnGe3cCpzLt(}ZHE|1 z2yWMc4qT$zAdcIIjzqk6{x<(`=^pjgbjwJjvaq84uBAJ_CbZJ%y*2p6uy_)MSWGq( zGh=m`JgK$K+83@RZ$Tt9<*Kg5TIrF$O@!-=NP@33UPLS`R*XESH|2tU_RGjztw^=f zuf88V=r!8~TD|7ci*z^%Ee_n?zMQoincR^*;Nz;&HD*o zfYSSQx^@+rA6;$@n);$Ck&YDETC0PCg>^LXq`22FEA&uvr)2t{;bR*>Ug7Hn?J}m3 zle1P-WD8mJw4Kh=)Vt`BWdM0bwsJdktTHrELcAG~(UB#c2i>mhvJmEHx8ERJ4{GU) z56){A0opE8ETM?zk-CJ#VX)_0%h5Q+1M))=^VjN^3g`9F=qTg&l%zgC`3FfA>6mIn z5zy?-y`z&)TVQ3E{9D&8a_~qBIatwbdTw`ibE`7_rhMWc*j|BVg+3MSWHfPB;B-bW zzQ?caiGu85e&@KTZ|4wxI(d-W!8x0AZOGP#kZ}gEoW1oB7cM#MVeQUrw<_EYz%`Dr zQJ|MCb``#E9gfYL2407LBJg{N<=c=f&rhgGdY zE}#X*j8m}3s+gj?0d8!+SQtcUcMU~d$8rQDE#F!6Ml)gwf%#AA?PKo(2G2SXqxM^3 zGTirWMwn`n>G^p*%n=d4>KLHqyS=9U% zMdwR%*R!0U8~+J9?1W>k`xkS+90xjW1D}UMcmb+oyVO?z8`9T-MpdTrCHTWRI0Rv4 zM&~Xc(mNb2w{qX<#}SVw$fKFIWf1{m0Ieeh-R3ztcNp6*+mvx1*x&ipxoIZ~j07Ah z76L6#Q#pb*<>hk6Zwir!*9=Xc-RV)n`hs3gNDPJWmtXP|T-kC$fyjj>ZY|Cjghu7( z<@(}DsUW|-i&jgH)wTGG#}?c1bdBM8LJ;@W4CJch!|?GSY1uG$^(LJ&iaKu@k)_3A zgTDw5Mznq1_aV*#mkWk4gfc(lo4~Ytt9XYCaibAJ9t~S{>ND`lt>r5yrfs!ki+w-w zto@66V@KLn$(v*Ll;MOIe#JB+v2#0`Q%azhI1kb~*B`3Itb3I0?UMO#7Kh@#uJ5jz zz83<$yiD(Czv}0QBVT0=f|GEXGB>gTwV>tOasFsF6YB-$=L)R{KKjyg29}kaw88D<0pdis+my5C;>va5~h! z%^vRE42T_LLYaCj{Y_o3BZL09uV0Q)kWdhc_l_J5v?>%(G-*?*OhM+@juh_72Va=3 zZ3d&dy%<21`m*O3icj^OHA(5Chsj~8;T5V`}<5~z7H<}X!$G9OIP+> z1l98BQe91PZCLQB@(WnN>y)+r7PPvC9BoZ$7L246nu>j9zeL`0pMA!NFA%WFsc78~ zh)Zbr`t{bK=4gxfMNbaUOXoQL6nuQ1*ta->_s8`Y|FP^o>9Z4Y0*Gaapw)x8_O=d= z`gxnkYaTa@wz*m*a`)Hp$LEQhZy9Oak!vtzzjia)E_ii+WiRTfpP%_f`Yq9=twSq) zPCbWFUy;t7G_L+$eA39%LRW7N8b5&27?w#)n_%4-OtU5No3r~stDaL(MzwV~n4SZe zhpb3r`#>QOx&2Ogki#p^3icl<X?O#7zbi7ZWesfat1Y z+L;W{EVT(L{8G{l_rDJ|E#3pIQm|=QKE{?Ac23uyzPs>=;HU6rQ5Vd~3PHzQDxGi# zm#nCQUW&}@xEzOONIq2(wR_tgMSMyN#|`17D<-N<`|ri^;eP%~2KT7n6EUgFMi=+v zcWdX?^|35QagUwJZlIMTl~o*8a;e8=nG|I5{xq1d_!o-$ieqI}N2YUzfZf45fu+0Vb!2mJC!n72rnf^14WY&2Ri(o#BwjIRHmZcQy}321MwIgJ@M-x{V09xLj`DO!TpeVM;|k z)UAGyL~WM7K1&Thy>b}0XT4-RJiy4`Iin=zk}^LKlSf64E*|p;@StrnlYMp5sW!|V z>{rwlpZOy}xyy04MeerX0KKYn0`W{vvRguIs>lMov{ur3utfHP`h!r~eg$Z;k4w(G z1!9X07Yt0mvr%*3l+rdaXSE5FKPx3@K&dybWJd$8{|g^4Bh$>+Z6V<5T&NnzxehQf zn}4N`bJ@J-4$QUCMA^Dxspu1)E_>tj6xhQZ*13C%TU6EaRC0BqwEYMj;p`WN zd)?sbO6a&U2lVS$nO8o#gH{#Uw4D+~F@rS?_H5q`4LTP?lyqcq$#MrAHb_u=D?Z57Onl}>m|^Ba5y_A`4FHTZH)55zqMt^44= zWIVN~#e^@*r!(foJH`R16CvUmvmGaI*%|UF)XQmHJt-Ly_US29=IYbbtMKE{tz>YA zqSxg)4CJ+au6h~rsD)V4_Ia34d)?y2=X29fumBHg%H?^20Dw5Mq!iCc)TEbtY!1Db z{aTUPYSn9R(oCkz8$3k*Moa3wW=kT})xvhx`k2`#Nd2kmQKG=Xem-_Uw z_&Sss(e74D99d}lIotef9ydPAW4`YLT&+BOa9xHsmZ~j|DGE=J7mh|8iY6T%bV$z%zx01U#QdDw(5)r!t#C+qKNO z)8OmBB++A4(?+ki_o6&IRiM&hFx`)KWX{3aj~!uZ|6A5^5%j7PH(@0Ry7~f?>BQ^2 z@{$WbOD((ft%v9#Y?qn@5$=pL%gyN^fevv-+WUyuM-X;w%S|ezWpa{_Msl&xuVUbl&A& zIh!@h|DP7Jzq8U?aX$CCZ(!7pv^MT%>dgz}6LFJ30H!m1bUYAa$f7J+dSy#y= zkfGyCk50~i!2UT8!cEw^lGb|N*T9}z`2)m+T><$5L$5~C383bZ^grp!=C_c8(zKNB zxZj*2FMO-dW5lmQiWbf}s|@sqcbPYb*jR!tr-!hG(;{_en~v%Rto2#whlIg^>Wy($ znP|!irTRZuN7>i4uXmUZ531nR3}!~!*TCM1Y}KW2PqOvt&9dpAc7STcNi&sG|6cVn z+lZAnahB0A-`y9#G8};d4CEScdX|z21T%T|cYw+I5O}@GpVzbAZc%o3ax8OKwg*%Z z<5`|a0XW>VCoM7`W}3wYu?ZPV8D{X5w3x-R`b+Vl|J0e#f6lo({70r~dK)WzgT_gE{y=v)Rm!@c*Fk{<&U2;Vbq}@&|k)s=WX2lmGu6gk6lj z?r}~I4vquAb|ZATx=sLhIU3};em?~KjAoJlxx?Xa7WAKc&1IVZx#!Hen?=iH&{M5{ PKVW8TWmI?G + + +sentieon-bwasentieon-dedupmarkduplicatesbwamem2alignment to mitochondria (bwamem2/bwa)markduplicatesmutect2mutect2markduplicatesalignment to shifted mitochondria (bwamem2/bwa)sentieon-dnascopesentieon-dnamodelapplydeepvariantglnexusbcftools - rohstrangerupdvcfannocaddvepgenmodcaddvephmtnotegenmodmanta + tiddit + cnvnatorvepsvdb-querygenmodmanta + tiddit + cnvnator + germlinecnvcallerexpansionhuntermultiqcpicardtools+mosdepthvcfannofastqfastqbambam vcf vcf vcf vcfeklipsedefault path traversed by the pipelineusers can configure the pipeline to traverse this path instead of the defaultusers have the option to not run these tools From 6e12271c30833d6d7c48b56dea19ccc244416dfe Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:56:58 +0200 Subject: [PATCH 1417/1921] fixes rendering issue --- docs/images/raredisease_metromap.svg | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/images/raredisease_metromap.svg b/docs/images/raredisease_metromap.svg index 537e3d98..dabf621f 100644 --- a/docs/images/raredisease_metromap.svg +++ b/docs/images/raredisease_metromap.svg @@ -9,7 +9,7 @@ id="svg1" xml:space="preserve" inkscape:version="1.3 (0e150ed, 2023-07-21)" - sodipodi:docname="raredisease_workflow.svg" + sodipodi:docname="drawing.svg" inkscape:export-filename="raredisease_workflow.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" @@ -1438,4 +1438,11 @@ style="font-size:4.93889px;stroke-width:0.264583" x="402.06009" y="307.42535" - id="tspan163">users have the option to not run these tools + id="tspan163">users have the option to not run these tools From fb1f95bdda6a610374cda07d36ef93d3cc857e66 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 21 Sep 2023 10:45:14 +0200 Subject: [PATCH 1418/1921] update maps --- docs/images/raredisease_metromap.png | Bin 266073 -> 322695 bytes docs/images/raredisease_metromap.svg | 861 +++++++++++++++------------ 2 files changed, 467 insertions(+), 394 deletions(-) diff --git a/docs/images/raredisease_metromap.png b/docs/images/raredisease_metromap.png index 508570c65fb21c6dab2bdb0084bce36504092302..e91c1690afb7ea76a55b1008528e7954e823aa8a 100644 GIT binary patch literal 322695 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%0D$a3)*Fr`8|_; zrVv;oQW&Old^S7?#hPCL)Cjc!!TBdaedzh)#9HE-waHr%L`85s;R|jOeuZyHv?0a| z=;pjm3t5A_QBG-foqYj0Ic&Eq=y1?Tqd;gD0mr@{7|4T74?V@9I9FDHz46L{%!avI z!Wu*tpdc0Ql)aBhc5K?4$+q?(fijQVmx`wb)^r~?QmLkyJjHtPsQ)1svu2}MoV6sR zA;Kouia-XKU_su!`6xljTT7&gm%ly1Z{p;JFS-DUBRMDVD&TyBn4CGHBG>nIPv~&S zbsG7t*vvunv9Jr~0xd)3?D;ATOk;O*e*+*`;$%Q8i3RWs`0V(@o>0s2?nGsVH1_+g zuKN1>_}{Gi`44SvNq7{nUt%k^RI-}8>wq|r!_bbNoC=dd+kbI~f#~#cRdQi+?vX-H z5i&A9eEc|wdVsKHbI{Q^&jhT?%(Q6hxmQ2rfJtdTGNdaG;1kC+0G5yzuVziR9VdxA zLQw)N%ud9AsKrbpc?YGXk>tH8s|wbmjyjv6^(x9-)h~Lir@bl@d##HC@~z}(ChB7y*x+2 zs!4E5NGMllh~z#IQ7;KwCjO@}Qr%x3+`ZfGFUbCH6X2c1=dSZu#Wr#r%p_^-V6AAd zGXY=$hI0!p*NOZBjlZHw5bh1gzH z*1TFFSJ=du$+&##l=~IEd#K?SP=I3Ko>+QDg<0e3-+o0jr&_1`nCPf!H!GZ}>+3&# znfs30%#rh7lz!XwHH3UA*L-q#qpSF$Rhn8)xM-8&QeYAKHsyla|ez6|T<2OroHmFuHgKn;>Fh*pSIj z0CB+JOt#;orTfdn|95CZJ0#AAzS#E0xKvAJvg_H@&qJw(KlIMssE>O-8{ysI|FxD$ zL(k6gz?Xn?9{z8CWZ8;OzCVNRBJYa}ulfT4L$-;1c4gM~TnjF-_S(f8oA=3d#zwu0 zz3>0=llWe>uy^Hm(voA{>$5hTP@diFZNYbI>d@q-XP$?D442;Dw_mg~!f9{ucivBeX&4$57tJuK`Q!SDKoGOZOk^f8fV6)rp>ZYr!3kXF4 zLKAbcW${1~=`De~0Gc7V3xi+&T#Z$QdCi0AB^SpnBdyK1#&N+dXT7Y>`op?2+>LVT zOYozhAYee7V2$j>3{6z3fNfWuwX&)O1Wp2bFn7H@_!9RoL24nAgk#(ATLK;TNdc<4 zmno^Kt6iU8cf?&0A!5E7=1C$>KxaWb>Ufvkx4s4Krb!`zv8d35ih@fV8Y@O35eM^i znY#e$2v{5%(eFB8$y~)>LgXP10l5~zMLyd5xVY}XY>7P=jX0?D(;a5uA_g#i1+X7I z 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%0AXqyP&je0j7$=sSt=n3q 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%0D`#`1zo}V;rFG5 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 I=Ns<-Kix0)RsaA1 literal 266073 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 PKVW8TWmI?Gsentieon-bwasentieon-bwasentieon-dedupsentieon-dedupmarkduplicatesmarkduplicatesbwamem2bwamem2alignment toalignment to mitochondria (bwamem2/bwa) (bwamem2/ sentieon-bwa)markduplicatesmarkduplicatesmutect2mutect2mutect2mutect2markduplicatesmarkduplicatesalignment toalignment to shifted mitochondria shifted mitochondria (bwamem2/ (bwamem2/bwa) sentieon-bwa)sentieon-dnascopesentieon-dnascopesentieon-dnamodelapplysentieon-dnamodelapplydeepvariantdeepvariantglnexusglnexusbcftools - rohbcftools - rohstrangerstrangerupdupdvcfannovcfannocaddcaddvepvepgenmodgenmodcaddcaddvepvephmtnotehmtnotegenmodgenmodmanta manta + tiddit + cnvnatorvepvepsvdb-querysvdb-querygenmodgenmodmanta manta + tiddit + cnvnator + germlinecnvcallerexpansionhunterexpansionhuntermultiqcmultiqcpicardtools+mosdepthvcfannovcfannoreferenceseklipseeklipseusers can configure the pipeline to traverse this users can configure the pipeline to path instead of the defaulttraverse this path instead of the default + ry="3.3517513" /> From 754200b13ddbfb8ff9bb4798524ef9b033833711 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 28 Sep 2023 14:53:32 +0300 Subject: [PATCH 1419/1921] prettier --- docs/usage.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 9958867d..311dc349 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,20 +10,20 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From eacb93e2625a607f2e1cc1b6526254a32520b352 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 28 Sep 2023 14:13:23 +0200 Subject: [PATCH 1420/1921] fix storage issues --- conf/test_one_sample.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 4fe746cc..51524fe7 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -25,6 +25,7 @@ params { // analysis params skip_cnv_calling = true + skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_single.csv' From 90e433ab81049567a104761bf98b8cbb83de8f06 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:24:50 +0200 Subject: [PATCH 1421/1921] update readme --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b811c0fa..2cdf97b7 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,10 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary +

+ +

+ **1. Metrics:** - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) @@ -92,11 +96,6 @@ On release, automated continuous integration tests run the pipeline on a full-si - [GENMOD](https://github.com/Clinical-Genomics/genmod) - -

- -

- Note that it is possible to include/exclude certain tools or steps. ## Usage From 52719d1c2d94f487b44e4680f78dc3f5f9a142e3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:26:44 +0200 Subject: [PATCH 1422/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 745172b9..59f1b418 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) - A new parameter to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) +- A `metromap` representating the core parts of the pipeline [#428](https://github.com/nf-core/raredisease/pull/428) ### `Changed` From 0f9b00367c2ab01014c05046377689f6694d160c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:49:03 +0200 Subject: [PATCH 1423/1921] add images --- README.md | 2 +- docs/images/nf-core-raredisease_logo_dark.png | Bin 75872 -> 32132 bytes docs/images/nf-core-raredisease_logo_dark.svg | 319 +++ .../images/nf-core-raredisease_logo_light.png | Bin 75763 -> 28311 bytes .../images/nf-core-raredisease_logo_light.svg | 327 ++++ docs/images/raredisease_metromap_dark.pdf | Bin 0 -> 38296 bytes docs/images/raredisease_metromap_dark.png | Bin 0 -> 263779 bytes docs/images/raredisease_metromap_dark.svg | 1705 +++++++++++++++++ ...map.png => raredisease_metromap_light.png} | Bin ...map.svg => raredisease_metromap_light.svg} | 0 10 files changed, 2352 insertions(+), 1 deletion(-) mode change 100755 => 100644 docs/images/nf-core-raredisease_logo_dark.png create mode 100644 docs/images/nf-core-raredisease_logo_dark.svg mode change 100755 => 100644 docs/images/nf-core-raredisease_logo_light.png create mode 100644 docs/images/nf-core-raredisease_logo_light.svg create mode 100644 docs/images/raredisease_metromap_dark.pdf create mode 100644 docs/images/raredisease_metromap_dark.png create mode 100644 docs/images/raredisease_metromap_dark.svg rename docs/images/{raredisease_metromap.png => raredisease_metromap_light.png} (100%) rename docs/images/{raredisease_metromap.svg => raredisease_metromap_light.svg} (100%) diff --git a/README.md b/README.md index 2cdf97b7..7801900f 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary

- +

**1. Metrics:** diff --git a/docs/images/nf-core-raredisease_logo_dark.png b/docs/images/nf-core-raredisease_logo_dark.png old mode 100755 new mode 100644 index 9e7a1960ad55bf1761376247a48c8229ebdc227c..444181d1501c31a80e31b7470c29c9d0e761d2d1 GIT binary patch literal 32132 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
`Dsk5}}{v2tyqiMpu0 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 literal 75872 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 L(>>Y0+MoMhsb=rF diff --git a/docs/images/nf-core-raredisease_logo_dark.svg b/docs/images/nf-core-raredisease_logo_dark.svg new file mode 100644 index 00000000..20077861 --- /dev/null +++ b/docs/images/nf-core-raredisease_logo_dark.svg @@ -0,0 +1,319 @@ + + + +rarediseasenf- core/ diff --git a/docs/images/nf-core-raredisease_logo_light.png b/docs/images/nf-core-raredisease_logo_light.png old mode 100755 new mode 100644 index 3e1c6ec69ad091015a8df756efd4bfee1d337628..4ba80155ef42c90c54bde82d82b29eb4307a67da GIT binary patch literal 28311 zcmbrlg;Sedv^^Z$y-3mE?(XjHP_$@qcemnhZE=U-?o!-Z+}+*Xzx2KL{{De)&xB+$ zJehNLPWH3b+G|IuC`qFr;v)h802Emn2{ix!5(4}>10ELq_a#)u4*Z1RD5L8F0HA&S z_kbuBF0lf?`Po%c$5q|I!qwxevpK-S!-L7n-p0lBtD`xSgR^DExd1)@00hWNh-!Fd zo@RM@V(;Az2_Iy&Q-8$}<)Fa*q}pRJ+jj9qj|CzuM+;_vLZdRjiK((lM6c1hJhura zSk0*nh7)1ie$8gU4-O`jViS@Ke#9V&-^D**RRp4bHFPxtdjCe?L6!Yt+=q?o=S9Z_ z?*=(2D*C?|iwi$G1nB=y@WEA&Eose*TO`WH*0PLhHD zb3JMlJ>>sf?XIGavAO*(>O!`o0J#4mo#@m5kB@A!k&yU~La@K)G9mazX5!{5kcFT+ z7Z>;Yzm*jkd~O;dUW4*?DW;saf`p^F#khoQ1o^@+)SUGfRQomUmc_+2lK<~Y$J|3A zbfi&xZXZh7@-J}GFi2i3k@;)^I8(q3X$V(@r?1z4C8gm)8v91huLsyiq#E! z6;t%Tlrt$dZSc>-^Yg~JiC%IZs8(r8^Q4w5Oxa7Xt&LvqR4|{FOC#k(T^#p)-9qW$*#eI8noi z5t+z!Qkrr%4@Ot+?;ZK3e0)m(4%S~WEudqtNC70Ev{}<(?3+ks4~-8LPfcI?OJmrX z1!Zo4?v*jNJsfZ9E?QqG2<`dL>f^ky?O-UB*29*`B<=R_*w*#-6YNCM7~+NDdR|a_ z13%lIr?UMzlX&ccN3Q9}`5>EL%^5I)G3`m~1Zyml@8xatnR>#(95Yn0wl(cfme2(ZqaCl7_?Bx>e&L;FT)EU8;{B`Xh`rZA?3a!Gy z*0;OPsgq&n#h~wzPvatj>NP;0^SRo7?HexjLlyf27r&*ENk=w&joCulAaz$IuZ{VX z@JDLoA~=imy1HEtKFIc6B0E&y$Ac^9l2D~@28s9pVfDHp6|zUnD`0{c8;uF zbuoa-oRk<|k`5}cyH!&+wApF->f{~mI zXXx(Xo@$JJSFc?orJm6B&ZF-|>G{3q-KX>i3z;D0*N2`6X$)zNg%IBmzGx!pjplN# z?$^2M9R0Pa4SDGqN=cEHjzfurvK}G$XhP}gQexhlBQAsT{BO{sM8LNo?%2M5^8&dw zP7)~byM|S_E%=_&EW0%H3RA*-xUF4@?oh~_dVi+Zu3hIqE}40TK4tfaVealYL`iuGM6oW+t*g21cSQmO z9tR&G(VZ-iASeLZNZCpPyspHLvKJ`b#`+KA77fnq*W7?**PBl#7u#X#D_@T?gT91CQJg9=nLROYi_Ju z>aRk1xSOHZR2~_dVhTx_3MDE5`gh0;psVy%K3hFg;-j6<0cA^})cfj{L*#<>=$0+k z7lQ7tFC4z{LF1E`huMt1z}MaMT{&hirB0MjCF3%O_YM z^jqYFjURCpO{>L33DZrp2LqELITcd~#j%A6`{NpVfWEtgSWpiy2QA>SiVHvI zXPJ(|@I(1uDgdD0)P0TdB5;R~FHT`Hj~=2Gd*?>rxE117z?g_E;Q9$toqJ*sO*J6)Z|By&)~k`9?p_c;@hpk>B=)%CvNXO6C4V_a$Qpc)ZESkhAoEGh}8(dhX4 z#IoRX=F3*lYn}6M%+m^HxV-i76%^zXmU7f&OW)FmN~}g~8@03nzbY;+(5fyO8{RjD z;_bd!DwV*dVCsYoLw@~?+*$F%pi87bJ@V;Gv=mmeW|rVdIuVg{+YvfO0)K$maI#~S zR153?+;y(`Er?l(`K`G2s?S2+(n|ViKY6j9gc(QidppP#Xnx5v@)Ze=_lbliRGE930ZfNoBF3UF)+Sfn{6d4 zC!y`-iKmVva~j+YtVyAq&$*ncZZvTyVcoZZ*e~p?H(c8Dzq*<2ND~N|fd=&?Dk>P< zx$e5MI;RA{`6&wqGLt~SNKy;*2%B+xr=&^WM>IqC#>PSczFNGu zqF8?1P(2rBWW}gPuYqZ(*n1-E%(tZ+F^QN)X+=dvsaMtKHQ{?-`XOO@ESE-@%6g-6 ze3y%D<5JH_ttT?4JVO4X@knc=Xm@gEiU`rkM6(&X7_PNusw5%e`2Ap zyPJI8*mMz#9ID^+8MJeY!@A_z4+n`*LhLqAYk_@;JIhaE&2Z)2;k{R0PSv>xB1T~| zCoyuc5%G+!9ys=f`@Z*4GLVdQ|9qG~r?`)D_`T7ny6dSCr82UF9Y{vCazK!umI?1% z(`y{0AC?X2-y_omt z`J1{i_Gk&b!}ejf&CZp!2B+OS0ok zk4H<8X;x;Ag^I0*I96alN&^W+*s71;zXbDx70Uv@bTec23q~6jvhFkhy0L8 zNoThX+ar(*h!i58Q&W-akelRzWRv>9bM=4-FhD5(0T5#uX7t&`Z@QE_pT3d-F03?#gZ2@WH<~Ytt^(u)?tr zq#xo2Oyp-i_wDaav~DV1d8t`H?m!4uTQ)zo7NM%M7@Iz!uWM6k=W?IfihZi0;YBdVKSbXY zRml72J-C$& zAkm+WjckbUw-LCuay9KRCy^gs%*OHw@oji>9AM=Z|9xL20{;4C`P*$%QwK(LgfKli zk9t@R5~1u$=+wNbVr681)i-;Ix|{6Q=1Q~=l5uz>Tj_~daE_LDykirIkcGk~HP~~* zZOEqTXE-0`BO*q8%w88vey%g3Hf2>ydv^pp?&bO$%@3SBAU}8R_zKw^4)!%7taLe! z$oV+=<&Ufe=NT%m{p5F>+40`}VJ~EpY+PF1+-=Y#biKN}x1r%@!2=V|>o_9|YP!3> zUS+oT?3%JWJ_~Dz4EzvueG>eJN*1rvA~CwFs6w&1*J%cXtC%p^kz{s<4=cNSL{V+y}dm=8_@Mh_J_W{ zo3LIJ0K2n7thAub;6irL-<8<9a|LzxfaGL}GVSei<}bc*o3-mj$qh*7UISNxZA6VP z+&Y8Oy=AkZf+Rz_(R;i)zVo#3IDzy0B(r|?Uw0R}f7Bmc?60<(`i3LpJKMN7ebmJo z>0wt_e{>Jfn|Jc*d2ZZt7QY{_dGik44qrvSUic_eoH~G+pwY*B-GoIvu^=@f&~#9z zRro5d&iS?3SoaNP&Xjxhq5GoaeCNKWWhISWZ{sc0PL=TL`pJmJQP2O@wWb)v@BuzN^=vvJ=WPgZ|TWtf?vy3 zhcvx=0~1ix7T$)jvmcGemLHFj>O&r87zwGVZV{z76pE+J%}|U{ffdFz5~1xQBD}S| z8A0DpcR4{PdiWVc$l37;#f5dnk|J6_7SWj3*xR*u2dp?^?C62zJ4+${PrmTqUKNeJ z+NkgaD+Ld1BK_GX&Mdtjji#2{HmY>GwvG6X1{9yPTOZy}Y07;rNo`-w4zC+`w2Ta< zhBxFAkCjUVux@>n*B?_4x(rC#@5>#y5$Z`SVRpJlPE5`1n*0Fh)yf@>9p0K-iPRfU z=BBlG|52@t8~2?D!MhZmUaalTKo|1f}ZSnd4~^X}AB^;1!%^%RqNFS~oZ$?(U8g=DmSYbrR zhQ0`3KugCBAg`(6oWoe546gNlWQJloJX8TI6G>Uv@Z&JvZpO&j6}cZ5g)T_BPJ_@P zzlQ{huhV?$=&*tp_I|KqnMl0gKdJ3au}!vx|YivusO6 zDJ}N0J+h~3@A}i8q%!E(R76?xO(gL*+3rp$91p}Jx(>9$^(=o*IDOQR9R3>UA67-y zPSM{{Jy8#<7s(bcMBF3H)e7q)yghUDy1ETA$Gwx)COi@$YMgTiHG&E7Jil_Xqv0gq zi>a;M+i}zoK9lJn$MUIoW@wV*ans|XQWS#ObDsyaJ*uY;UVvso(O6eZ={DLl7*aTD;BCn zIHizpGFx_G3j{(A!ClogpL9?-o?OfqUaDc9i+Fb6XbwO>I+njNlyKpn>;vCa2MY={ zu%VnQBV6U}Y-e_NcW)s+ZF-?i_jaOn zPT4^>W7`=b3}(#t}ykXF7U0eOU&CgP9$5 zhh1b%V`YbM*%bnDnn5!bglo)BP1uZT&|)aiKD|$I@cy{0a!-T>;H&(^a3D%fygA2#UlW+Pb$V#3f)IHLm7aNn>=ElS~ zSBw!<*pQcqV_GskOtXM5!};9bl8N@4dR6zngAq)Dbphlh0!FJKKRS<6*izvo5E~B< z@ktqKzX(sdXYP<403`GN~ zUSc<~!Za9E3h?$USoVMwo@*#)Cc+uI5|knVbK zAD~OkH3(P&`CgofaWg6xhyC?e?n?-hR4Wq^HqxI&Ym?l!yYCqE{_l>__rq`Y_;X{( zr&sx&l__$gnHTxOWyBvMa;=zKtvlhHjbB{NXLYutLG>1Hzs}9d60niqMMF>22`Vq5 zD-UcVhJ@|@5C(}DGsh?1V6T;PVG`Vh;MLW+W4VE3-n+O+f}F+eIDV;hfd54~K9M^R zhhF8AUm+K!jWbLw>DSslxI&ipVlF5p3eW}5&i?pQ-dgrUMWvqltOn3pp3(`=lY`=tQJ3@Vq6uxP>i zPPYxebWV?Et3E$w0C5{x7=miAm#vFah!7PDk9<1wx$p^oC@l;sTb?b2z;4Pb&M-hDo~zy_0!}OM$bdOrJpQ&+Ngdk4e*j3Eu!_hiGux3FSlQM>5$^PsTeAt@lxRJ(y-3mQkU!M zF3%J?2Q!1K;h*3E-ODox>}5rCD6jeSLjyP7Khv7HujVsW$JTXHWZGj|zCLURs&AA` z5CvoCkS5N$i>C`D0Kd~n+SF#5kIEvLS)Ta4df8nL)eKYF6{Hk%{9u+5XgN7gq5&sq zsK+*37JG&oTC0FpjSxM77`=go(~Zpq;joD4*_)lfY%8|TLTaQ_|N8Z4-{Ib8{Qe16 zzOJH)k}!tdT@M-{k}O}4PutoO^w%yH0Em#gBQf2EMy51!S4+wnbYi}E1y}K{}8Bs((T>-zC z-&j@0%ra0Rf4cIk=-520eqJ*!)2p(wj+tx%#D-a65XeizPycKNrkYo;*9eO5S0^v0 zixuGdYF2QK0kRD2n7efMqPZ;GJ4_f&WUn>=i|({9(+<9eQYU^;L9~!Bk!%uMl$vea zyQ~5^+N^mad#8?)BeLZ_{1-t=FuGxv6pqj=Eu8ssNlr5-z1PmmHI7Fu;ikT!74hyP^_Kn+O>?`F-t;o&$I1Rr6+e>GONW zw<-hQg{F*WopxewcDATGU&1^mWstYGe?7hQske5bVn z6vQ_VJogc zc>*nibt`bruSG|qB)2Xns*8-yFlFp``}fpVUA|EP!w9!zGgLTG1L^{i5V{U__xj#` zT-|SQ0~gAaOUM<*e^rIAK`O~%r{FmqTN!q#4|DC%Q9Gz6Czm|PL$jp=l-ppCo`rwD z5JbQj5ql^PmOqv3L_0da258HlAw^H>^hIY-Xao8!?Jxm@2Uh3+*{^{UAv+Jb{>)lE zNLpk34!=$-mdN7B&%S)E=Ox?zg9!VjDNd_0a?r$1?p*V0Sz#R)Rhx}o)kZcR#Xy~i zGmP_!kN;FkQ+N|__u=DH-V_KgEJ9~KYlT?%;5VLCt*XXEAoJOvqd}@7*=B(5nKSYw zWp7K9`;$#%vwZOa)XZ~gtWOVH*GA+hrAQWV59AFb`}lSkV;FtyEgrqm1@BSVE_tz! zW*|zPyjtLgm6zUYkPCc{;tPg{p|QfC%&5P66Kj>Q6GBMGc9TQeK8x(3 zsc0^Hqr!~Xhw=|otaJ4p4WP5)Y$8=&ydnp8 z$NzZ&@~3m*unVG`0C2Nfr=cO*8{ViqkR)mfX~uN#J{=uSDtS zDOwOZSt}y)j*xx!ptoiCK4^2w9!j?+`<|sF>lh}MSD-MHii{wwPUm*2rX%%5pY`}N zvR(bv^nDby$9rfNwq!q#mH|rvs+!5Hs^tu19^70=5NZCifEbA}iRqXk)F^YC zweD8aS!0RZ`f7ewKXo_O9(1nKrmmZ7K82mQ5lkEw-sgC@^m{+|(?7CPDgM3j>Bs|z ze?)|X=0KQ8+A$<*x{lQukJE7#9k+=Ofj8{77Mat1YfTlzRx!U-HThv){JSG$Rzd@@ zSI4hAts3_FTahOdPXGjADx-g^f?eF$Nhe~Z3XB@$jk7{oP4BPPuEOi}I4Ex(6*d(5 zXRukp1({j23O)RY<|6;OT|wtqtgcB&UsXVn$O~zUMPprZF|u%|JA_3`lOE$|G|M#U zm2OME=kodulY)GXkIXOhu(4=)hH3`PJxr%tqD?5pUqnwBpLj$=(L`|&U*}1#O5Xg# zz=XgOd=-9E7aC!CK9a_WRD(z@;tXfCJXKlcL;vT5g|AE0ICyq1zs*e zLeckV^goif77{0_=VQ#wUnaXxd;3;=rb%Y!kx0s}1@qw`s(DRNk2^m zHkzN|y@7Phbk-#&{v#>0RN#zh9iIq`w<;ut8fDNz7*l@OT4XWo$6f=ZTUzk8)bL4PTt07=^z7aah;r8WAoay8 z-mBz}q*eSGcT|aTVsLnCT*1|RVko*3{F)HhOa!JiLb*jUPu%%Nz&|85@3zvqX`TS^Lh4FCOt&|0y^-1LY)?Ys>8rA@?Q$% z{#bKa79gnhx(h)G!g(r5bYb9yT~-!&e=+}h6j2Ec0L=AW80zZsm{x?m%SZ}~-BBbs zs2Z-l`lCD!!Bn0jW$UpDG3y($=@H!oN9~ip!sU_lo|mo@He~)zg(<2ZD7#2n>(<8~ z5?z-!&+MsDp}8$^9mxA;O&L*qhfwyfs~j||HAYynv!NgR_BD$9#R4Y8vY0c?qDF$b zB=YQY7|hhShB43R!l;Od1uzhBLj@LJCCR2&rp0NY<`9F?b5>>#G4wU?@N;Q)MeoKZ zp}f?zHUPL19bz!iKPRVh!1Jb>y(lps))XSBnizw(wQGJbVeLL*^Hh3tp@qHff($Z6 zKX!7B=}{BSmbx34=zZdt3$FrVGSTCo#XsUgCeJ25V0aPp=xV+M>Ko2=ZgkC&TQ(g= zXc_R_{5gJjA!;pxsqLzt3SKXfM0z zJ{BP3o@s*-a-)r5)!3r|qw2*zkZ3CLrD|#&a-|EPHv0Tg)l|ha(A0iJj#>7Bu9G^d zBk3?cGIEr)pWrXjY+qLo`ozgAl6mHgz1dhog?jB>`Cb-t_ayM7&h!$gM>+`~drnfx z(9+!YPYHw?qF19GrG)j47(NqGqDyNdc&H;1h(>Rf(!>p_$LIN!sw|mBPLE_6WA`Vi zHUHl-S3`%8A&O~Eiw?_x%A^bwPm^x~;9q-Fna!@Sma~k%*OX1fI0S~|nB=X9hBCl{ zLcpSWwDs85Q$6 z0MYRxzOi$j>RsAOGgdmpf#&lB5=V7{YD}q#Pv$H2GJO18PpCS<2o6E^;$ybv1PV8L z@^K=ljs^2*`7AgiU-=@FB)U*XoqqT-Q5>#>zqm@KKGJOrQQipj4txNHIw1;b+#zZR zYbJI>NOS5Ozvuo|G}IlbeR`?(gxeFs*rq{}q_B#liz%ne^jd6cLATehts&y7(#iZ@ z*Bq4sC6w~gYfj0$`-gsgS1?=nqIV5kU}pvn33?#t)Z#$O31aw382>a_+Xh&BB%>U* z_NKZT*E&}=S$RnKnsEPnr)m0qp<{(@n+TsWYs@-KA10Ga}+>3SO!l%4iTWHF7a?@ z@if$;x%`m~U-60DV=A=h1#KT|1ak}b4{~dxrj)orgz+SQKIcxm8yd2eRg41fda}>M zkC_!>&4q#i5)Lq*g|I-Q={C+Tm~V{GCk089zN%}q(SF&M<+1!eChza?pPoiA<$@7Q zV*vr`LqAUPSt3|FTOJDiHc&c^-LnX00X{K@8mf$+riwt$MEsMcDjCWL~!D}H0tNij)@i6sjj@F+#Ky~%-KB2)u z;*>`NIck!zAui3oGZT7M;^B*QAwEhgL^kcma6c}-qf}^WN=v-vC3r-X^6E)4VgB;e zTf^T=UiN%#O&PQZ{KoNY0Y23XNzSMeLcLI688oLpur$G)2FYGx`Yj z)bA)lCP(z(fco_16m8NF(GM6Abv<-?Yt!14Wfu?5{STMkzv0M8By+!9e2L3-F(wZj zOrQ5r&V>m~QPC5-R?0n>f2GV)QM9i>EZo!6w=S@)em~ZcT*zf3Dj3S=nS>MEMX^eVE%l{T60p4b1?c5}S>yFJt4vz2C2+g|N2TZAnB zlg#AccGrwp%JyLEjSR$_Bj`EWpSg2x_w-VKA3N%d2OTAp;oeZE5OP&#SA(wM52Jgw zaxtX$S`^OA9ahu1DehrgNqEF0<0L+Zv)~V7-*SjXu^aO1&UtPPIo&-z?5 z&|!aRsEF;o)hqox4g1yrDi=}S+QiMH^0n#w?Jm*cBm1RuKGC7ma}P%oa!VNH;^)T% z();ldhBp;003adYSFg9$SzA7BQJ*y${4@Swwt7Q4rChZhZd>6pvK7ZHuE#p1i|j9F z`$W5A^*wS6@BL5y!4gj<=(U!T8^rH9P#*aLNEPb4EGs8ZHXlRL8P9uG9``?lNjDA} z&!OYgieUFlolXgnp)lTOeNvY^ytZOW*s$Z}4@$UjGO9)|4n;^+^z>fRLf+}rS!p^{ z38LTfD+Ljz6*=&`ks8!JFQOxW%WCbLRjQH{by&nU4m0#G8&4njA7<;qe_v|#?~|oq zc4Izci9x}gzD_26GiaV>Ug!^KDy=)OFgNnH^lM(%)_-ceh)><hPZ_lxh;MsYcW%K9pO$e^~%XV5~jzSOHksGuy@<0EPh%>)MrgR|38 zFj$n0&r>nZ619h!RzqFHOq4nOduq%=uoZ9HCohiJVe8dlSt?~S%`?Q62cjd>2H!1P z;1?3sU#1vHyFZ42FWl}5q$UE{OfyV6F`mgE!5H0czaA@RuH#qi?A|kx)?w4OSsQr* z?Jj03(>YJ?i|FB`CrJd_2@~q>8iR(qtKF1_Q3sU|6B%D%p{DyxS%RzNc^D$+P%@2- zKE87{D2oV8n_-8~j8=ZH8s~}(th738*^_ROOTdO)DBI#8V6?nCb@f zVRWgdvSIM5PUZFZh8#>AmS?7xzZ?#bDTpo^ZBl9?JL(z;@bH0ob?b46KRZDZa3#!9 zateND4^`utoIySc;~v8`h%CHuL4aw68=Q=)3Wg1Wde~?5J+5}mb%^|}Q=L3* zsgC4(V)ph;CUR!xt3!{e43iy4w@M27czvVl2lzo@C1(nyhL%P(WBMFf@??uFPr=!K zcoyicU58jraRXDT{m72mo~t17gy?GB)%+s;giTpueivG3wP94R%?5=0o{SP3LFJ-(Gk8KP3nBM7jKSp%)_wS|B1N1qoy8Bv({A z_%?nW7=D=tV7&-)Z3%JSb0n~<9LUFbq0h~*UR$^1?_$JLc7NgX_13i6KGx={N;miI z?sJr_gGlaRCVNR-h5cbNPx;<(`l?%diG}-M`^Swv46D*dicqV8r>3i_O>?2LEMVaA z6sMUVle3nx%utn~3wn!%1R(|aSafDtoX^BvjNb$%HTOB9E` ztqxRk`xra)&;MwHd9Rpz0Esc#4U$Qt5r#Wf>D&o;hxn7Mt>s(+KLfo+@|8BuKW5m9 z!p830-pgvg9alT+3^8V?*j`6-JVT~}=kPIK1 zK{GOP7*<1@kIYD-U@Bgtu|V&p7#jn@%&XHUa)@1rR9VwSf@4gz3@ai+26|4Divc%r zZ|d9a*nEok{^MK792*IQ7I}DTsGqT-!5ZAz15r`V>e9~p#LS-uN9mzjjM!NN?YsIH z`_n@nHpwqqkX$9+k8AWnwO)IY9+ATws;ysAD090-_evu4vD|h$93`)+%MmTst6y2z zTQ*Dw-WbTa@uysZzF^ZTA08jjczQUJERq!yns_7A{_Xzuispyb5; z=q7$_*{biGsj0jY?JHSxig_yHU;>DEwUr|P0*CAFCR|ra79MnH+hmI|6c&~@<1!u^xo;Jtnu2Y!p;Ubzh|(2R`#iNS6kxaHw=)L z9un=<)oS+k+ZvUO%Z6UixQnLOHmfe#4kAtm#TbwqUVP+1{BaQERYhCaTZ6Rh_mxqha3Aqo!FY@>uKS z3HEGHA%}U(@0x&JZ0hDl#=u^pj8PP%6?(dV;~*5Umf&VGui933txm<*J>JxS%}0Mi zmh@&L>S4muPNb!&jrCAv+hbybZHAi#8yzIq^&M@!P0$Fq?MBREZU1TR3f?A24;_|1 z6HPxie=h$z0`D{GF;weD`FwTSr}eC+(CU9Ca7}_| z`Qa8-D0)F|tx~yc!TW_)(=ru<9XV&Io0Dqp%Z2ZuZE5@0y+^oxt|shG@=b{Rp7`E9 zN%gDeVvYA(htK8lU=?~F(^$b@a-=NZo1f+L9=RqHc8$cYLMXec!8smnsgU1b_|FKN z=wjLJtf1p>*kvxc!!+HJi*S#4uCC@=;{ldr#eYUJ^cs>McOUZEAR-77J=lptqNC;a zYoLM<;A1_aG=yR$PWCN%3f(RD20kkOw)>4I*4fNwZ9in*LE&~+I%T@uw=I@p?~wR9 z?W8-)PYCt8qP-4!3Y2`s7dAS{VxDu)p8WOLM<4z1q*iym|L*>7--ZfnIssUR{VC)3 zcJO3QDV*MFimxmni=_#}o_z$?GSQrQ6R3L?x3`=KX|Z)srZ?2=i7yXBW1e^)e)`BZ zg*;eKVgxddwo92Shq4SaY6?CR{jh@gH|qk{%>GxtO+gbCQg!>XroIjyXF5?Kh+d10 zyt6x1Cx|9m|B26Jhcu@>{#12bp?k1s!$nwD+waE{t4Ctf`$SgD<=ndu2{1Ol5;m$P zX18g%IeUQnR&g!`Ht|^*Y+J=HZ0ya>VlPzcw=3V37=@Nk{L-w;Kg`2*Pf-f`v-O*` z8|q%dQ_>iBvi+uWjd`q^rZpdAJjnhNvG6ya$Cr<~?Ke#xZ95#3Tbm)LDx5^HVM3qr zpa9&a>^y1!;{4}eX5UN|hI#^Bmjz{M-b#Z)p;h_pUw+^i^mJuGeIo zAw_#Ok=3LDZ`x8c6RdrFeNvj@2qj1MEf_Wt4KLjW9&)+A+hYBng?>w5(v56iQd1Bz zv4*BzqXjs_+6t~CX2HiRhVhWh+`jtLB7NDBui7!F;$BFP2y}NnNIh0~^(Ee8Bb(7#cXxFl5+zt`C6YRMDKns_>%T zwEkc56Vw^Gmf6GBu-3fu4Ey+UOh^c>Ho$DH|K=BujMcaMuV*Z~w0Y}pbtIIfBOs}P z446~ODooLQ7GRX$B2la`@}oJhR9#P3hi}OpZx)<)rZ|^s#CU{#?H+p+oc{RcBF;-8 zm!ZerJxZ*BS{%p$APK0H92B0|!TtFHlPV%~EK2Hy{5`Cv@Vi_n8ra|Lh(4%^oksjI zFznNoNgMHRYEu4S8xF1Y9}DBZ;}yqf#i2CPL>1YS41-3Ab$`}QAxs<1n@6kzoPod?I}NOp-sSx^hxBUVG$ptl%OxYcxP@xZ^v&KK=Z!eOHV zqAnb|$Ia9-eGmDc170>v_#shMwyc2Cn>rH2cb?;$qrKB3jCZX6GdF65@<-_M|2Y}m zc3CFTR0R=k`BSu21!oH8d;j(7XE}~dQc+!}DN4Z7b`xnWE{GdyC|4kK%a7BWYh-uu z=$~R|dV?L^(JILw1{REX({2)bBYXH!i>Z4jztda3ZlP^P=rhDU5z21S;Sb`NsIrRk;F~ckQrgEv7U`-hUR7K&Oa1L*bTv5hd>Bc5@Wk)XsB?U=i6Kc zvzmu5-&a&R6*T^0r)FrJ*~YZWX&RxVz@<<2_IOmx529OMqky;<_b{ER&axe>wmO z5+*f}Q59llL8VpNi93?2%^!hdalsM#FdP}(1t9uB;buo7@w)L=Nqjyg@ON)3Ri56{ zEoAO)2c{=xLrwQE*=jsmD)BokFo`IT(htnc?|T0R6Q|J~k~MI~J%y;R-bBf~u~~Z5 zY^s9yc>aD4W>PT^6l?kFIhg(qmu4_at*^=z-y68b ziBIHKmPK=NJ-*rD2fvr=4?5a?EdKHzbX+{3lq0^|j=$cU&y$m|~5olob{{aXff5n_QY8fC z$OKo**dt9tDM|=)2m`+{GCL7f{yNYP4rE$b4izSKew*K1)fs|-Y`7m76sQ&@esA~yDA(MGEC5IA$g!UZ9FPhe7Bp-?eh34v z2B%^;ge4Y&hLyx(I$i7XxcDwcpp zK)(SxDnugWV|(b-gCYLH^|JBGXRI69!H2hjxw$!h9GhnUx93NACaPir*j0o>vw_E- z)qo$F){5M?`Fmar5!wI&h|LthJ8PL2N_tR5Rf?itSWs6M3lF3U=4MvleW)X0V7Ou+ z?br~vFwY{_V81VT<|WXO*p}bKM5sz*9N~~cec>AKH@Wq`;9z~w0tI=QmJkgHcU0#t{Is(`{rc>eTa=HZ z>8GMet+jptv@%#&qs^JPu!t#3Y-nUH#t#ez9s-|GM>GN1fA*Xw0>9_@rzP3L) z^hL6-;xyaFLr%)Ad%#dR2n0e1-s}OwyOXz)2mS%H0ImV+sSSg8Hyy0|TXAu5*idf< z3A^ASD5-ttRzKNu+n6P->0+8fqyvgd%2v5)_O1(ICaX7*W%kJg1;FC+m-f!W*xv3v znXdG)Jwv#fs_GlT?Z+&a%|Ip>W0%(#LeJJQLLH$57hnf07kC#6&MAdw6n0-@mhfPB z4}8&~NkSJ6<-s2cvw4STSfDv#<~#(1Z%W#Q98R`Xrogn}=i@Vknq=+SP@ewsq6^4D zxWMRxu#FKDFoX+i2AEMWUip1|mBrR>auun9aFnn%+z}KNJE#O7FO4EtBbVjzJ3w)) z{oDKp%yl*3PBP-;|EuXM1EOf(uV-1hyJLYR6zT2|fklv3q!k2Z=?;OVL?na-q)X`( zlx|dzPFcEZK|)Yc;2ode|D7*y6$t%b!LV%Yyju*X#$yKC3f((tK~7wfeIHO z>*`ex%I+=#?B(OnuWgLaSR^~1DC1>8R^5Q|Cx^wMtZxf!D;KQCiQsQ*r-C1h7xknK zW5)d1MDO&Dp1bzCTX|cazRlUPOdV*b);2BMh@%KR&NFbWt!d zF=^4tu&Y#51UJfj-GR%`aQOPMzbP`+3>k888T_dLbNM&Fg)?1e{}$E>>0EhmDerr& z#1dRV)*k+6YE~Yw7|KyniB8ZlMV>~FR&i$z3GEFqg1435I6e=s9sD&l3k96$PR^gO zAhM5LD|egkBNjPuyVSs5rrMG}G%?wmd`AAWdF9M<#)e$Mwesq&41v{NH5(w}H2u-w z{N=SDplODrz!AY$dA}<;GvEya1}rdFF$FX22TQ`GPR+OAm1{DZNvs6RgvdP?Rmw)o zJz(^FVI5LYKXo0xz7W6mxzf5L*o4W+jXL^kAAF>CDhKsZL&G)o<=KLlDe@q35&wSpGGn-895|JyWAh@JgQ08>pq+@0)DU*^UwYU_POV z*GUFY!-6Sn6e6;LJNa&lZ!X>iYGZ|e%$~(kwrUNEaVW`G7_nO2(V z?ay(kUM9I0)10)5fbrTnnsW)Ra&KnWnRGYakgUi9N3a9CJVo`ztWxB)s`Vb02;+T9 z;6{%M0JtwFQVV!Tj*GlcnGtKv`&e{4*|JFTLE26(Q1x5kAOO+S?xW^GgWSUftnaOy z_3uULJ{~!)PncwXGQU?@mx^;n%thaa4fW-*T)n&=xom-%JbHvVYY&k{O^lr`A%Hh> z5cI>#cI%1EFX|qi;A8q!7lBHt1AA6)603Ii`LIvXeEA2te|Ql88tGc+9BH{YRJP%E zGHoxh`ss}qwjWq?maeZ&9jY!10K=-PuN229%$tuSP`Um&rE|XwM$lVBc|2z9$L~(Ksx}VaIQx9K|SJj1;ooLll`k9Jr1yIO}I=#lKK$TM0D)4f*^nF$5BZ)#nSYxhb0hNev6aZ^) zX~UEf*|N@W&_oAhqFX1;0vY<0I6m_+w@QC}{&LpfzzC#74e-|4e%CWMcB8YHF4M@|QWt7XUiZ3X$uIRlCB2YhK*Y>t2uRE8}}0whGN#LIwID#X;hsz%G@ zMP-|?MS}99s$g!BQPEq0z*%|S35mhda`QeIw#qSKG!iPFmAy3`wz26@n*lN3pn|%S z2Wa!(T}6Fp7d1}&6&ex*#yv|}`vTIxo8Xc(vc)ajUbQR5Y`clW@9Q-ABwyTgXI}f= zOg!0)-uRLQW}zWjx(QqzO57L&Q;7kDT~x$+(bVi5BrEPnu93boC4SAqv`0xd%v^ll- z{YBdPzc&ZFbB?ODf@`Sp|EPmIg&MVFvs~M7QZuzki!V#gQ;&1Vhi1`yVPR=$30;;- zUNU$?iolr3GjvixrEx=6WroinJ2%#ELdzd?Y)0xhAFHeMLj0J(t6+2EP`ro-zGLa@@)f@k_e1?U{oYc${0KXZkOUgZ-O{nD-|73z1t+<+i#9J z444CQP6YrS4(DVVjCZEK3@@uztmvlnm2CfR+*`kl^ybIDo(2=alE_E7x`%u)UP?1s zR35(O=?#|XlP6$5IhZRE6`D?*uc{yQTG>d3_SI?OEc4Ae{4AH}-YyAj8uH;An*7xv zUP9ri5x$aH2tWY@a4f$779sv)yiIi-gdH(@0>n4F$6U9tEbyCR)4aTbP^CAQ(%r?Q zNJ{rp)$wxp7SxYkrKP|bU{ya-SD$W9`OS@%z8}!g;4?Lw``%U0j15=>4%vxM)A#gO zY*Wa#|MZe}+;Gq$G0_E&v=+Is_W+JOx13fsRFFPDgH`SJ9E zvraR2Zgs2l@M}8h!bA98SeDkG*wbJ5$Dy5I{`XwRet~&eQ*6h;8(5|SC?c7tm54>D zKj;&B%;N=3_fWhQ65{WA6{WQ(_=1f1!Qyj(FHgkbO-*IpNe3j$x-9$KwoeN}Q}+)< z;%(N%A>W!u8Tdw_?=e}L&-Jt>kU#Amral*rm_MHLux^UmiB16-15@XEMpN9U=Mvf7 z2*8T|kg;$g$hx@5Y~oQ`-F4wWhkKBw-W4GsAtgSAmMYn|H9$ezqyNq9Cc*7L{&Ke_ zIYzw*FL6xqcU*y9H803w+VNi!t8}*omX!K(1}hx5dz84<2^N~QY>^}}`~}1&h*|zb zEhj46E+4oii|zH}RmKCv1qHx&$x{1D|*3Z`bJ$iaw`io2XBkN7SB`|zOAX9~N``|PTe zu{`Hww1xsv)N}ciNSa9Ni}sKwdQ9x_210IZ2MNq$v}#SJ_k&342a$!-D-NHlczGr% zr|IpNN;jIc^o@(t{q9)^peojJ4ZkAAOBnSHc*kh_Z)D#579W1BNCp6?U;K7g>Xy%a zwRw}|p?>Yf_~;%@h4BDQ!?rE|Q=ikP+kQdxoelcmJ7527jZEjh2bH?pyQVX8y#Lew zrER4mv{MpzMTd2y?&G*0AW#-(u>EK7#gB-`uFy0wN2?2Fs*XHkid7R;Pa<}`l|=(* zGU>bXMOhkjwi{=gnuP51W#rdcktIi(24@OJ;X~P!Ad1}9$5(a4gtS2Q-3?y z4th6P?2p`wcqYa_|1$Vlr6Or32O|Ep%&>z#FQ3Y|F8Ev5tG!-EPpf1fc*wgU`#^>9 z?d@$-jU&5W_Z+UKpu~M`WQnJ=H%br~fXr)pyaJat=`R~f3mI7uG#W!= z6D!OArVm|ox(-BClSIaT?t|Z8yccdgDf6iQm*_N(lHcP42Q0P^2JJsBEcV`wi(s+9 z)B*N%SR@V7*`ZZy=JoI2pWnA{H0f9lAo6-tP4(Oq3RC$PdEL42uXWbB2@Q*ar?Q;9 zeJB83*a`k&x|*@F1!2cGe5*#tBH%?3*{1cAVzulE@3f*3X57M^VA=Y^9&ZU zITaTGYm#!zX)AaM-h9`8u}hV5l9xJ~{ab*Ri=J42kXOo<|Ba>7*t_3SefPP3H?-_F z2i|+m2YAMc1_tK%HXmG)#K-`a&WT(8z7fZ_(DbN+y*I7we@@@9jtXMyoTM(HBga1Y zhXaeVo5$zXu#5@6dtfgfDU4hy)5d$hF*pIb(8JE%ur^SU;PZ$rF;ba_E>jUlsz^Si zdG8TbTAkzeg&@88-3#;#%eo+{U4w&#rcJ>)}R~N!R3u_$ukJLs#BECR)WnV`%6M zj}b45nY0lM1v_n63I#=kR)D?3J^7gav<#kd%$g~Mbh$Lfn7 zf#mdUmN&WTo1k|k4`Ru}mW8W!bB2x{D#S?;bgOh~Mf6hZsXsT95HuYxzx$Ip?ss6K z!kBy3Ly##6KPnLJ(*<5isZB)DsoriQF)$`BXX}j?^Rc_gifZ2ZT#f-`Y$sb09rQzj zsG`?JaovXeB_9UAluq?5F^yba9}!_v?|qUZPQQ33-&FEqX>!(Ni}0^(fd*}a_ol;N z-`?`}T1i5Uq3qT+9g!h`3`ZVV;5vlCf6kz!AR>Zb%o%_FphpFd0v#TAwf4J0==$7& zb$$NE8nwtUiMQTyE_~-cUoVX}Y?TA}`jehnjf2!m!|aaS(gddF%c_Jy4}W0Lt1gxC z+7hHXBhno_sy#5?4Cq$L)PXA#!;oZkWtx0l_D+!8zvBvL-w5M>;Q&1oSvXk+g%`di zC^6^0BO!Pyo0J&C;7W~&5#E#sLe==LXdX1wB@5PZBGP^9O^I`An@XI+hwce_% z^O07ci%!^WPP)GxV5FWf$$QR3yPDsx*71%1;iUEDsj>M54`6PnS{!_}1Zl_Hj_s6N zGpfYq(#1>*^F8tTQf*j?y%Ehb;55BV(Wd8|4IEZKRctwLuyGSb=>m&n&&5&2G(i3j zKqXkB`E)|7y_8wVn^5hnG7V*UHTkPfa+SKeRrKqB?odDo~kQ*>#0l_wIrzP5jgoNPU z8v_V{u;m(Tzzyiz+$Q*dko!h|4{b6vD-Mx(h4-zwO=Ge!A)!tRWJBS=WblPg|oiFr&rYY8=vr&SbVrpE4B*p34=|QM%%Jk)qmEtw{5h zQp%JN@T9)BiaHADnIN%wlEGGCcsJ9`#?&lBoTxzzze)SG2SvnIAl)P0pK6lLseJKp zL8n;%rq)eT@|6k4kTQ2>+WObRHu+oY}QWhyEuNsi*kvF6f#K7M?R|Q#WUfqd1 zAP!+gZDWIlh)GtwkbC!mcA8&7ZB`$0wuV$ybMvd6n0H7mQbx9Ju;4VTQ0XNncXW~8 ziKnGyN~x8HpkEv(F3~M>Xid^g6TSKbal-NNDU%F3{a)Y4R_l4e9Y-@QiU1Ap6pZz}4((teUeG zgdq3a0s4H()_IOHsw+9+cUOna1^hD<23mP}rEXxTB-)A1l-GwBbkVlq^xsKRfE^Ve z9jnb#N|8zvfF{WxY*bzUfar`HbvG`o7u>_?b0e}X?=Ntm-@eO|nHSBDi-)OyRPV0g z+DbGfu;D_b+IiU(RXzLprbcjpU~VcOx6c{A5Z2F7cxwmOSVTl5w5zo2lv9<`i@}-o z&oM>W-iF=P#UBBlAUu`z-;;!-P>}`qERH|p_M=;<0vGP#^73+|)?#cw_;f>d$P>hF zX1~I|1J6RH4sT#NuFN#`Y`T|uv6GO~=3&7x15XuF&8_M!gDg#ko!fP!mb!@j3L@6b*|+8`ela&J z?)?Q-9-@BhAu(cuRiBq5$HNH{WE%^XY(k}#soWV|i+y{pvd1B|oeWF*5nHduDwnc2 z_}!_#A9E&tRUm4CW>|f4`6J7{C7IPx7Ce{0a1+cC?X%68qzihjQXk_e+_V{z)5;9FU#yXdu%yuY5 z9HTQ9z$Ib5?r#OJ zNxA02ZoD4rr~3iL67V=TM1?7&CT8Vm!Q&-+vSQVoL)%7A`D&8aWTGIA4&gN(E3Et( zJX~0%rBm14wKJZT=KV1$+q*aj<&&Tr4{xJ^yre_sY@B5Vs*5{VX0phhb}f&By84IX zV*okPgzTl)q}mbqrY0i7Fq>yz?-bl#It^jghEhDn|1Faz{}3a6BW^VJlKJ}@q+O%b zYWX(f=Nf&|P0y72TenxEo<;dmPTpRAhO#CI^QP>z-!Y4S%ZB={o_IU5pdRD|s;=ZJ z(+^ZBf6o>nj|tZv{)~NS2={-EUSfT2E+^XayTk=Uhwgo6-sQy4d29Fb+8KnTEln0K zA)vmQ=tbQppkK0VT6Wi8i(*YZ1KN}3nk-|LOB9yZ;Q6a+o{|3Zj-;6~Ez6tcm@)9h zedA>oLZ{{Wvwjhx_K#@$?~bTqRdZVs|7yL{QOdQZ9&6A35|zyv2LZyq%uE^^M8Uvu zVWg@(tx;Q4WvVDMtr$*0{Ifg6ugHk}F$SJ|2NX86-^s@{sb+{U+*6+Fx50Xk< ztxOS_)01|F$IKHrQruDX#WT=EE(?T43XV`D=O-FUkC3lEG?tjk?@7{qeB4qC^Jal3 zC}t!4{*6gQ0Oq*0!|v0}L10b;1q#Zu!2ah7u6c53I4LW#=)K^=7VUA@qnv*)491AY zl)$~cyjs&h%m)^BXcR|SAj?jG!M$u&jCYGb_a8ChoyKplzWZ9_*fi<8E4Ng=C37vW zMoa2@gpEB8HCY@2(wjG#dX9Y={Mf#KQQ0SOQ$qd0DJt5OwEDEx-SRq;gNUB`{qAE4P%8b7watGQ zSomQjkgd9`%uyP-H&*Dyf9v~($6HXECV`brOzxcoa3z|eo`cp7K$-$P0Cm3pYK~kd zhYxsIv&AAO-Ls;wrCFht&Jt4h!T&tWb3 z;-D_4t5>p=%l?3G%4eA$8CD|pE_XXz#0qO)cK@laszB!8F2is*P#18u#P0rziSe zH({y3KVxBZqas#y({-s0$Q?X;{46P<0+twtgtJKkwiKn=C~zuRQ3Tvl92=L{OG$m} zXNGVxgv);OKBls+;W5(MgSFUH=raXuXXbcQm2&jQR5B1hF3*^(Pll8KCN*B9@+|zsfp&CtW9a$gD*q3)&`h$ABj| zPE_+=T|REW)n1&awHNCaR)4v;AX#zglq1gZE?43=1=eWHpX`9rid)|1YTV*0T8AV=`S3xN6P)d;wY{?;z&U7!6S>JSQqJL=i( zn6ZPkTx*_2(a>87FL6AfHjlJZ17=P>867hVGk&iG0q2@KV>}b;B>7{+*ZZ`3&_w-W zwG>ghpra-Cm32qH>H}WVV8Z9zD7xxCeHXZ3oZpSMIg%lw)V%F!Y;@VWg!9)v_!fJ@@<=V{)D5aPMAFOZ*trNfNkO4_-=;w_^wW_4C!$TG{+tZ++JAQV-u zI1*T!Mh2HA?pWf#vxmh)DD(KMtD85ZNX(gCX4Re8({6Su|2pur86ew2!5boEM?X}u zOb6xEos8scEimNo9ll;;Xwzt!bZh+Xy@1Wxx)QyUF)0Aj9!7VwwxzMLG0RO-@KmD# zC2g%7`a*8>8VH*ZQ?urXMdD@mk>iJu?fHA9wNvr1rqlvqK!&RGfn|F+L_pwXur_trK3Vp7Jg zZ|gWjx@TQqVSE;ybbf<0^|g4ekCk7DerzEcsX>1n9)7U1h@n733uZvkM(0_m( z2(046=uAgUWhJ#S0FeLpjQ};~7hkLTdo^+B!4kq-Duq`2#RB25R-A5EkUO_4qLYd% z%CgV(?}0>`!2?~m8o+LKfl(<`F z$R*f0FR^sdZNS_NDgDmw{o-L5jGuYZXaz?tp+J%{;G60Vn)HllEKh7WT{Fs%A z^yGc#CG@q3H_7pSE>ovJ`+6k6j^|Gi`U_|v@LTL3()ju5eU+@ox~nXs=s`uLp);0A ztm_Lv9^v)4(#IK z;lfv;EU5+$^kU$zvawS9d!Ez*vTtnFxWwcJblRD|?FAgP@@5I2<+7j~$wK?$`OMb0 zemr8D(%o*=Fyh}1Onx}u z%=8d@Y5Ednsngo_)NccB<(5r%!VbJcb`nW4a+KE{)Mi%d5~yt`aNj{#P|1Z;(Rih* z$}n{9;ScAeUp!_o5fl1=jvyI~EcuBeUYWKD=+ESRt^%b&J^lhZlVh9Cz73B@_b=GB z%}Fm}3(OTp)2asU1BqkTEZV9-@v&Z-^{dyr7o-8w@q1Fq*4DEsH#Y%%e zBiHj^v%4!TgL29-jIiga&47&q&(-MZl`zE-m;Qq(s0?4~KuYpI4R8V80WALt6%~+c zKah@$?^Gd}+~m1x*z)gSS#}Rt`=!q1ZWkDMscDxS$W`$q0pCsN;?bg?KL0IWcaxyw zw({0G0Uq(Wi%}AyMi`HuW$uDd`p_8~YT*bkzPw6A;Ugv4)lNP0F3yo- zp;S<=;KR=gg!t)<-F8&4R?7Rgdlg6IO~>&7D`8s<&Y=!hB7c(}NGDDeTsaU7 z(AUXI^ogt}<%D?qc@5$*}&4NHIAEje*@V8v~h;jH61C#F4YC-IG=JP}Y0DIEh@*Wp`Jex{4vM?x%*VU4&A$ z@Z-=8FX`g_oe$X59N-lnBFqJux#c?TS5s`Vn^Gj2v%j1vCktGT4&=O>+>sfM14|eN#v1`Vu@7=pYrmPvhps>3VT&K% z>YQU43@yH&4F$Ju`nn|;T(q`>OhEj-B>~bZ&HT>cY`7~Jt~`nWxZIhL`7E%8OB$A^ zr1N8rqwt5fsQ}i>c2GBGt4@38RF2YKI0%%p9UmbaqBH|r@;Bh*5TM0y3fod6PrMZ%P{g;lLdb6RS z>2JawcoB5Y-3ub`W`$PK)yNYwobA(#g}uyO zmq%OiHJOda^ZA%1Vy&Cyn%r;P_JH;veTO4lE? z&vWtsZFP8^iz}{mio_j1L}-J{SyA3-E1o9SPH_;ml&dA?aNf^fj9Z}T42Jh=&60N( zq3<9#Is?$I+Ge+~{-9qj!Fbp*Gw0{5UAXK=T^Rz#V9Y_{OY`voRmwZQtPWTe@N*If z&$L3@z!9~&_%b?*3x;=m^Y@4rfwnXRF-~Vff zM>FRHLj-alb^ZBI+WlnqJVZyUt z&0DO00{^_GUrD8&RkE7$6HfA^P{=U#D5N^xADIriE-0y6yNrYROSw;U+$3@si;V=g z$Pdr+|H#PMg#FS}v4;A6Ncj|4RDWJu%r_{+BdzpbFYQ$r6OOt#ijG1FsL$jhJm;XF zBtVc{;nlaQeK!Ggg3_ROlSUwEZ%`o=q$dNDlDX$kuYN#-tr%(kyHX&Q38@%K<(l_Z z8zmws!X!4EHpzFYXeE#N*i0v8-ITx20Koq$ZsCam|7&Cv`$i$f!O=mGuvPa2$Dazd z0AI*;L}sVF;9m{Y!;`^AHj5n|(%yK)?>F98$Su-Rkj-8_)o z#t_U^{MRhaka1EgNH?3gq9oTld$;}of0Y=}L`}PkIPatkUmQi?olW?REbJwju1fzK z=jMd!x2HG(YmrGIr$VTMx2+pl^hw`u7}e-IbKv!CPIG|GdTS3i*)RXs{y5eVV`~CE zQmGbpT>o2Feo=T9>cPY8;2{#AUBV;y%P_A<9ZnVVkBsZE-oKHB+kaDIL_Jvy&m)?; z^=W{LB)2C;?dR{b=cxW$S8+;G#7d6Intj{0{5;WDVLTnLWYdfc@Bzw0*`=9A>a~ML zHxKW!%3s~BD-#J12>fijZ5mSk3}K9){{7!*wMF3B0ALDQM5V>+1dSNe!U09{qwXgU zTwZ`Uo>y5ROIZ1z@j9MEfdp#^jAQ^&_8^jZ`NCoV36-?h`F9Q4h}dO=qlnEt_bYOl zTFL7PJ>>jbUsSi!HRd@HmF$`IPkPFAbZ(?reM$I$@lVM2e{uEBGwXkS$nQ?@#gXfq z95!2)x7P!7ffFK9`eHK{SFq@|P`%s*+KU(Ee!R=!q){L}1if2zm;3wflOg~8Yrbqw zI!4o2$>Jdk3Y%F_xOhzTPOo5h3{zLBf^*NjLzx59 zgetIKw|9?w|DEpAX;Qua%QL*WjQ^T6=qy@3I3ywBiwwyix4DA?eV&6c3>8(b*IUbv z{}<5W5@%m!!E~81=T=5~^QhAcalmN%7xY|NhC4s{Hwc|U{goSNg2b>>e3Y{q_)$3k Naqoe8m6}c1{{z*k&;bAd literal 75763 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

3@$~oO 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

XKaRyrkfK-o8Q}&IxT(Z%YX>95TC+Ev-rBHD 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%0Dtz^oIZA0;t)&G5pHNli=1U6(e!N zr8+~ckQoVuLV)H6x2sw6-OY_5@Xp2Ob1qo$ZZjrnS${`YaNfmOIp7G#Ue~L#fW4fK z+J>j+YtwTBCvIfa^t5s~9dkS?i0b zyUWm+S&I?2RbRaSEQRhU3(raVuAyN(z=_9&6V9RIAC67H+hw47#VmBYP2mkBaa^B- z@6LAu`{UnHaE!YOe*DrCwm=|hNp;xxvFKd{JOE%r{O;G@;FL>75e9?Y|9xE9Pf-Lk zd}zo^BDLnn)d=R;EPdadbMR(07*Fq4ntB{%(+i$LKd>1!BbarT%WkF|KJsM{R-^sH z$;6n#Nh&91;7I%?%zqc*)56ES3=LtOezUoWNko{B=0)V(3(^NGpShl&2G-wD-!nO4 z#lxrIH8IjKt9VjAAVV%|aHVQA*-<3vW+m!>+6tK6bNRpTAsF(nN-vVUej6RiJIyYC zsRny*Wuds5u{xg6b%+)b+n8&7DB>r4vP)gBhHR3^!#Lx6(~^9BvF!GBIWB%`n#mvl zcDWb^_s%U|?0Y*%e192sA$Wt{tk5+ByDq2CqOR~yOCHEmA0gNL*r z@bJa)(q7u_1BUCqb_N@>A_HdBFmUx-wXe9z@-~Xp)oDKg>n|_~DlIzB-u08x}Z=)V+J8zm5Nn^2AUF zzYqQU{S*&prsjrIFv`D5Afn>WQaKz>QT$To(%x0&Wyc&&fX2y_QlZK!*mk;eVuZri z*Nu(M%qSQb&_KDR$&h!KafjBgC?&R3?Gwz{E{k*}mVv5JnsqLU1zP(}m20!Cqa#~1 zF>io;1|JOM^XJbj<|A*P9d&Sg=+vjRYOM*Nr>A#SrhqSE2Y%tR^|X9Ck3V>Js;#Eb zL04Ttz4~+0%?HKjJcDlNqE@REXUamAag?kzxaXaD(V@6^l4!XXQM-&^OEb4<&ca5& z`!2tS;^#L*Gx88$CbTprc^SR!G61nyl|;n#vJE9Sv8Th&y%U%&-Voay^xVk~aQ*S~CpwY^mk%p`l)IR((xP4F}jPht(w7 z!|lcUtHTA7L8E}5%bFTxnND8axtoQZM^JKmGU%=?MI(ySqlQLAOQmB7b7kj%p8SH4 zV4sdR0AmvZzTJF|=yq7>O4W5Rv+m}m+RFHHzkPpnq+QS1xVyOVg2iYlte!R}&865c z!r>w3T>vd<$-MXZwxTzXD;n9mz_I!I^{e~pmv=1I(=2!JhRa)uNvtS3mG%6_j&T1& z)?p1M2!~74J|$J;ng$k`CEP2CZ6OY+O$=sFUBDf8$u-VrW&g7+ZD`;BNpKzoQSo}; z3r=X8OitUGO8Bmj#3OwaBqR|vHMJf^vAfHIVj5K;({+eL?_FEu5AItd|sCf zTGi$-*#bMd4f72|IAH#_zeQ?^@wXrsig%7DJV`~wk-~2+b>5_{-<$^I${OA-PS~PF z#qxDD(m1?b^G-p19~ryxJ)Gc!{m_m~`-*ob5z9C64Y(h8pp_01rx>uEw?LWH ziH)feL3S$#XK?1MhWVnqr$?0)hB;tkw>aUr44dcg4QjS+{qAi>tH{lJZ%H#OKFTzq z?4UXf_N@a%qjC{6cM^2mE|nEJ2JxrwL2iReA{|?G1lPTPLXHUa5@pfVQ&mjA{w%;4 zKGJ`cckWeTlkHW+fwfd!e(c?Sde+vqC*7ImpK=&&&hFw|HMghVNd%GQebdRj>k8#; zYrUzRvwbehe2tF}1YmnmNXQS(DpT~h1qcL{L48Z9bFNF4cP=~H008niqb_!d^)Bp@ zDRvF-etC9l_|+2oo%GrBUQh?@*r+}4alRwtX@=!OcX=W2+w7U@UHyt^^qUs zetFW^o&_{4@95br-e!Y3WWk5TwzK~K+_p!9Hb@DQE>i)%slvy7>l}vF@zF$Tb zJznuV0nrIbn+`9@g`b(P*YJ$fDh!mhW3Wi=*+Tm0!e0t9^$5P!azU7|qOq!XQ*&67{Ep%Tf_r#?wP8v}TIbEMCCHE7aY*r(iJ^f}3e3 zUdFSVj`>p<8+oSaY9Ub4GxVadC9Uz@_o>(6*KK4>JFp&@IwvFeq{tjRP4ZJXF^pMqr=x-R=nIF z3`QK3YxiwsZp4&THx|G1FboDrk(Gy%v|=jCP?k+H(Z6%GfasKK%R=~WzX~L+eLh#Z z{1wI<1BomtWu<~#X*N^vA0+v8zXgtCJ1eSRF~YGdm;3o%*)y#3<%gDi>*bkLS*Q|Y zF`D)l7hGGweN845#(cQ&n{LeufyXDYt3y3PS$X@@t~MnSEXdTbNJtJwd3pT({Q-`L zqg7`c1>p4hdlwuOcybB~AjOIL0+C;DD_f}$lZZ&W^yW+Qx5gv3c!xKT{Nayg%YkF4 zqv}6*E++T`BV+k~-%6Bw;cpeM+_$_zG#aMMJCJiQ(%_^M%}FFtMbM68unAYOp^U{wLU3aMP*%8{6 zj$f4YFn1_jb3|&wDW*Q6Mb7ApvEg{~jW_mamB%gS%V%`P2>h#)`$M|Pn$(!Ds)+3QW;j>rQ}>PS_?gP)JXcJk$V z)VXC!e_Qx}=dwMaExT?>R%A_V2KcMl31?N~<`SGc!8EI>wiOi67#ka_Gz)p2(*RU7 z`Z*O#Z&B9Ki3F&C;be*CN13Yf)mab;KBLI>0P%Ugw6rVvOo1=Vt=F&-c+3(~UwnMu zva!7iM8uG2^L-cr83i~ZM8DV9rho!;l}4MdAfSW=0(mwhQ1upNR?E(YGXl;V8p~;FaYh*JZX+XY$PNNR}x7m|U7 zLDjM#qBp)LI#fXl-QLIVown*6Z+UVt(gW2GSso| zFU_OC+O6*J0J9$V(7K`hhCKtrTjHUHF;ylC716oH5j5YxS4$UNY57l6SD#jX5)jYt zq{;Pu^VYVHzfoR0oZlImMk2e2rAeT4Ch?q3DRZISVGJh+S!*B|#JLtX(9QOFs!Z4Q z0MO1mL8fCp%cR>FR9(%HkeK*gIbR;sggZdd_m^>hT)0redD)wSW?nK<>Q?W9kF>~v zJlDK6}4dVXfJ2V`GjBRPmq|_8t*uTVfjHg4;#p|c5^{swHmlbPu zuq5J@7i+I?04fM3o{Wm1ehu{0b=bk56+%Uj$hy5`ttal1Yhk_~HL_9n=?J)2`p%){ zQ1Z8o#9fopmsqDB-u?4?t(UqX-AQDigN@&i@MZ^qySwYD)K-a}*9=~){!Bbf$fE&MY4q-k#A|xo zi(C@MTs>CCZ7emdyv3KtO}hA|>ya4B@{ddXMNM%<+ZUem4t*rR`oPmd`yX&im6?;J@&N zyz6xvPC<5`qmU)^JUO~<3&CK|m~B=td$?vY)EbanwicZbEbq&cj__=eGV_kV?QSgC zT8OO5fM7WIz8*`#8CY5U)3o5nRNM5zflnb8IPFHwocM5aT%qdk4Sb{DT=jZ-*vjk4 zk8lc{$H6;E$EM=#Sc|dqd1z+!d)=PVDrpeePa^hX(Y@4WY49*I22&{p`Qpmg^uJTn z+D=>;2or^-*+5T?&_Ig-x;Ky~`K1L+f)moxBCy}dkGq$2-_aHU6R*OT;f1vMC8+Ts z?8k2)FL-!mDI8WL4No#2rq}fsw91n)?cNTyP>6MOAHg`gnBW_^>!hc~?U&W>rh$^u zYTc4=v3m|N7SWaNZpgqs=usPL`rJ=c8OIz zHH{fRh5J)`Er+2qh}%v`tbc!o*yl~TFMCFQ1q@_Cha~R?5d!w)> z8sQMpRjlSW{v@C5kA8j z@~=A>y6;naSa^75?30NTNtFys=RQNcrHds-t7du9CY#HB1Z!mrr7Y*_A_CCoVDvR1 z87Ud#L4Nd{fa}Y4yv~}tCbpq#7DI{3Mcs-CzM2maTHsijMph~=ae8&=!>O@zG>Yx= z<&PnMCEAhPn2+%6Z%WUQ-N0wSIGVq9XQ6s^->)hC*fij$SKwy3QfC_Gs;h7Mp%GFc znRACk7~ZS=cYX-H`VI~nZ;ke~Ekw&_4#U1+DtsK9$y^?(6W2~&ElVp+(l(GSCFOh>qmpEWr67#MwLoY?9h}nKKnk^Bz3zDlg zbK@CV^R@n0GPCUNR_1SkzU(P+g7Zf6Kt0K=5>jS3{ z@`)0F7~xMl_56wLscr__S!DF4iz%>!x2D$xTd(~!JFQW1uMcqu#>V)$R| zqB%d;l}M<;CP!}Tv?>jK>Egqo@38x^>ZCfO>Jn`F|2AFJ)Nmnhd3f+!JTHpOL2+La zoDE--k`N%6;#lCRv6<7G>ptp|I+8g-PW=psnfe-LdFv@l&BZaZpJ)0B8XH)uzoNB9 zFz(j;_<%``ps=XCTl;q5HyApY>puObYPjPo-d@u{y<`LfL1+y!;eiK6@HQ4gi#%im zM#Kps2U*X#pI!N_Pqn;@w%4hrz#5Ig^FB7>y$nH@y@Ms-Wh4I$d}TTmhX%*J3B%Ai zR)HyobRuME>G!A870yil&Z%!+%t|wk-slgda+AU+hVQ-CN{`#)7_~(xEJ{|3Md6+h zPuA#}h~BM?scq>bIXn*b*p7gk*vHZp7Ai_~+H+_8iBCxFup&DJ8HQ4$Cl1{a>toN2@v`TeKH&vYPPE8}lHWFz)yw?JpZQz$#INYyuXt zcnxkk;`5q;P{5o^-gMp5KvEz~kZYLs#urgsT~1h^8%FzLv}1egb>1|b*G{G*YWD$D2gLnjXUGL|BKN!QKVQZ!nLej0l=hDF>MU!o z2e&M${%x6?AQ2%o8rkcGTw}K@*E<04sT1ZN5jvDT^|BypTA(L;Dj3Yk2F+4o?TdC1 zh*p9hMzvpy9_;cD(Q<9ukv&3phH33?yenHuMp+$n>iq)w&NR4)p2Gg&J}a6P-FR8* z_`yBB7Ei;q-l%7$py_aC)WhA?8gK$Ach`@j^al781PU0d_)$}iHiDk#?Lg=l{-+Xh zu$X_X&D;-A%E3AMQ@LL(b>sut^x_M<{V4cQ2Rp;Ci2AnY;-AhRf+aiM*y~1SZ?#8N z7!z)2-3rf&Zpy26704Z$r*1C5cqjw)u3kd~p#=8n#|ThNNDky4TsSVlIbR#m`I(j| zwikUVC?~&@In652>uib*eEDg7BZwOs#7{bin4d!pwx@ZGSS=Huz1r_ppYO%mN`|i4 zW`4|M7V2M$?dHw2ZDu+6eCH};1xFR)ma=EG(CNi#hWe;bJus;WqBEb13+i~v3*sir zRlB*lIb~WVfb5>b-Vw&a8TjW1{_mN=z|6~UhKc@S|8S4k>wiL>c#~V5J@u`+kMv@< z?F^yCmJOOnABE#_+_99+@4#4@b5RMA|*eXuGNJzM9Z7H7AhtvEi8m< zTntw!HRBXutr?(}=~90->GG%)3Qv}iPS4I9cE=0Dry^O=-Utz&Z4Pz;&m;T0gSxqM zKj1Ku4eHbh@BVUIPk%be1Z9>~PODFVkyJGk2~v-s&`|Z}tkl$9E2$&v1pVgAD20*n z!qNWL54=ta-)Bo2@rWmAr%FsCTP#&l6h210lJwd$`zczE`r;RMd&UI*B69mMV8JU6 zN^E$5d*Xs}LJ0YIKfoBEKr{Rp$&ZmoJG<{t3IFsFbV)*rs-P>cKCF=TRJTlM5U&QR z3^4pJr)auyQ1n&izYatv`xgN*b@4$MI{o|8=jrIL-JYI6tHZ`>r?Zm>$4vgaHXGf9gnl0VV5==xK6(^1`ZYd% zLc0dW6XAg!TH!{DUTwpXJqZ~1oYbyF$Rv1zN?t^{D!dHYP()~9!fL;=x50vZ(!2Cd z7A+@A$o_X&dh^>-es=!yvz5y<#a|_^82_50O%CdzYhfJa_^EMo`|e)wTm%C~6|SP9 zBKJOp)T>4BGdaMi?#g@knXD(KqeJX@Ua#h(^;2mkYWVl>=f(_6Ci5!-h#rhA@#2TRYrWuAWWs779UK;P{mR4eh?Mx0I^i8xF?}#A!xvSrfA8yG2-5M+*z|N#$V(JAA z0kLs$0RRpAUSB_Lssn%-n^*47bYl4|A>ETk(LjX%)mrqM-LaPZo>~Tp0i_4tXk%)U zii+y`{%knofnw>mE{JgS?Oa~13V}$EnQdsXvy|a@{hrcHgNeOXjgxaGr%B?ar>-BQ ziLP$XneTp2|EV)muy(Jd(RnA}>8|bRJ%D0}<*rl$B$_4#zfNYh;f6e5pciHDFErr+ zx_Ng`1RfSHZV0%3L(q1PjyDH!=M>G!*gACAHOx%Lrw`jlR?~}axnPv*{k3S0;!6!e zQ&06Toxl8?=#iSGCIpdzEwh38VSnBp6KRT70;7%PXCZhZj{4UB;{sq;iM`$(X9<2P z46%HYd8zv7VJWI=f;=trQ=Ijcdri3^4)mv#h=#7K(BG9i6XYkj-6K2*SjO4T=lOe2?M9hvxQ? zeLEC#eRwpL?t~4g*&=tu$oc2qyR`IlyES{Tip{|n1OEZ?3B(Cm#=7p3>iEy-Uc)#?}KMcKf_IQBYAyqEF7wx z?~#~O877~9Rc88kVV<^9guJAVlUslSY;{|42)USkkYn|(6OY25#8K;~k70NV4AgzX zm6R6I`<1J^y z!P~OA!XDl}Koqe3cKkR8@U!DdZ97%lp{BjiLTskQjYVg8&iE8D1j}^>1yO^?^d=q0 zR@g0pr`xHR-b)MC^0W9c`l~c{GjtFw`E+@h4yAwLb=sV+VV?9mn>~%^AB8|s=d=3F zU$E3A4X>o%ut$rqa3E?}u`FIBxjN6?=@_5#$S%0mAZ(Sm(d_8jB%EJjdFu_URnnBe z$7%$QCBg8(A6G&Cn4sA%5IDN6MMnwkvOad~&4GFPS79WnQ*VD(l(Mq20^A7kLGj;u zHlIYR#jmT!c*8{w7GKPY(f}O?+D@3Vhk(%QtlH{!*JkZ{iytL1@3ED^W53+~vM)F^ zl!BL+;2Ci^Skn90pXuqYdb34t6zM=Z2;-Iviy?7yMf+-_uX;Q;LZ_WQ{5d>6ZWijZ zHxq+)e|@hrpL10F+3k=-sw_fJjJ3ylR6tdjn%`FN5v)0piUAT}g+FHU9kr@{vu& ze#!KgaKuoKKK9&8xnlM5GPaeM5TN#lE)j|EpDAb)&GYgIbJB6}=V)_U5@_=(D4f+v zUz$ZI8W8V{Bb;NFm<6b;9MDB#0q%m;HgmW!!jJWGUVS5K<$=k5Skx0kC$uH2`jB@2 z)Hx$Hq@liuF=g*oj`HN=0ViwZLfZXAA2azuo27U1I9$lfPB1(rb_e8s5E95F48-o{kd_ zQ1ewv6Pw5{KKy`Gh)y^0J}d@1KhK*nLhK#O^?DijEwA=xahdh@$2Ep{pCgr~%kGb* z7=n#;KVQGDFLppo;{qgiAbZ$Rc=FuYHZWivbFe>FFQ_7xp|O@g{?QRn+I_0PDH9!v z=@yZdLie1##K9*8osKRFZA43)xY~dzbM?HRt+6t!n6@?EnJkEUD(&5%l@|3sd^tB; zy|KBu3IrY9Ebjr&EgBqfGu7}koK+4fP>oih8aSX3pj#otqcncm)A<25Fnqmi)It(>dPvMn0}MuK5V1 z%gnQCUNgT8;XwCCI$;(d8QZnq^yUrft9+Mn*NN)chJlCp-HdV zP1e%Doc&qXqs4Zvwvu@RMZFkXNe{>Q>wC2lo8(eB`_XsPWp{R+NLI ztn@*UveR70*LgmAM74U}!tT9O#inE9r3sn>eJd#Jz}D{2MmS24@hKOAAFfa&we%RMhC_27GYo5f?k`j za>{(T>-^?lSMP{Vl^|a-qjx045@1|yf`iM{-TH@z>oU|$gv-m3)Zyo9G6cOQ0j>Yy zswNnMHjPdYA4Jf9o5}-Cp4adWFqKOc&B8EXh1RNGlq=jnJg}Pn#s8beUH+DXgX708 zR=4{7gC=duKPwz#2KbS&F;?Ea+p2;E-d^qCLfC^@M@L7UR0@9nxw653Tjh11+gX3_ z<2dv#mI7Eno$}nHe%juAj925|=>K3L-6&Q6JYJi-a%QfSHeFYTC&72pjv+}OH=~_5 z>&yz_dwOV8j}Py1R_iWN>`eT=O9BWNitK@`8#?ycL~K41P#eY-JF5lTKowldAuY=X ziFmAIq-Ts(Rn5GXS)34e^H#q2_}D&eN}bV!7^<-7TqJ%MUPT=bni%M^c6@R?T4K>c z4$!bK5F}92V0K{0U9?qeSi&fpcZdzYRbg~=xm74 zk&#cz@ziqTiFfWzfFje~qf2kqZ1M+}!(#LWT_Q@UcAbQX2*g-3Z^7RsfrrXN82aJQ z{i0L=jRJh1f&0vsWM&~gE6miRWe+GN2}o|R;%df~YYli;t}3S(x6uf_ZLjIE_4mL0 za>mwQGpvOX3sXy^qvhy${Z1GJ8|PmA;>fxo`fS7t#IV?Q+dCTI`MIurTQk5%RW{57 zX>v8mvc8phEc8w3jngxUqsn}>eAw4+EUah|_6eSNAD8fMuS;$=QWh&b-h-X^L37R=uQ<8WEO;8XAV(IaE*r&#Pjikd#H z>(E4ZJ}$7Mqi?Zf1A&M1N53W3Ex-Y_FJT(;2|Isj*n#_^JuwHDQ z+2QrPtS%o-v-s;aGUmh++tFSJdo6E6H*1lRBE2<(DJEdI+sc9UEs3k{f!;>-`;V9XKQDfn})^rfn9zq5vq z3><<1@con@W_@lrsI4ZS8kTm8*Fmq~Ld6QtUhVZ4?KyxWYVt)O1*ko?qEP(EgFm@K zsOU!@(dWS>=y|GgTXImtoqE$J+~oZFQ}_!aTxT^9%HFZ=7*cfbQ%(EH^_@DX%@F6Y4=8o*hrczb=h{bbTX`7C_P?l?Yj|uIEeh5Dm$>o?P z&Z()Xy3o_o&V;(Y`!=1 zOMs>l4cOr(lU;7uZy0C|lq%Sxj=q@aQTEgUDJMy z;qv2RJ-;l%2o+eh534>q^?%5nq}gF4m$C31Dk%3aN4>a^U=NQw4juFlbg}}N3b4DS zAO;>V0G;(t5d_}=QsB_yvc{skP~!8Y_(R6w!~>4f_=3H8oA!en)MsC1kRx!t@x5Mg zmZkuY$*4g5=hE;=HYu`gjR{=}Zv?CxjVtSZwk3pVy zBO#SZSNENwbc<=@5kFNl;bH=HBGK#ryIT=y>HMl&3300?+DbZQ(ZH~A#4Q*ZRnj`^ znYeeE?g7ts06+tvY9)lIawjhh+->ObZgIII;HfG#?$h)-m`7Nr71C<90Rn`nt@t?WR&*raS!3aKk zXEXyI;U5`yVT+QcwjsDOquxf^_KS%r0FU`SYi_uxLC&d9 zUHF6C{_plU3<~T1M*FlHh)(1Sd*=iGM_AZz6dKx_kcp-bM!KpM@3Ay-3P-g+gb!(O z3nBQS{Q66D0w~|W)5(|qlqCY%73Bh-#jG_K>2hXt+y|r3@f6}!XSb9IBJ^h~^GuIT z0?>0J3z%`!UPmoE&*C{4s_?{iCB9?6+*EcbBh}41|LZ|oIXu3z+RQG9%JVMj|pxTr7YrhcbzxDbRM@f@!#(K(3r=qLC?hp)P z9U-@^d*N?Tj!A?i!r@2P)atrRqb8@PGFpIRy;f^~d-|${-ki+-SHhK{L0l z)`FNx&gVV~(5MAAt`zDhVQ%fq$L49nacrkEVO~(A_rj%*g-yHbs{5#`JlaG`7h|Yx zV3uw3^}S|hPkWU~Z}e>kzql{>gZf6tRnRmjr@H-|S-WCyWAZLjLKZI`L!d$_?MY*t}U}cr) z{4EO|j_PO|4sal<__d1H6AfBQ!E3i-G;XG3Qh>1O>i%=6QWm&GIS;fgxT)9tNwAt| z=~|{GoApz0R3^Q+{0RLCeZO#ynJ$D^GT4c>HBI;Z!b!q7WLdA1+83cPeDU&OJ_z1O zkt~ypbf4YfaRT*Gd9bz>UfSsRJG8^K+q^9FDSfTrf%XKsMC3X9%f3{9Icw!c1|csH=tAm%ZoO~5K>sm4%p=B4Pf_CU~v2hERYYI7Jx0w+0u0i znzg=Zi57R*>yK!@?+tviDULahd09l;jHPU}RO1#wTMgkHfbPpYWQY<8=CbLH#6KAK zbRS>k{iR!gNKetZ0rjXoutM7mMV616rr`J|J@X*KXck|~2u(0lu zdeHKyK_6fSyVYdL{ms`5sM&zgwMj~aB{r=RM6+0nYU96|i>*Lpcp(&Shn^uObrwa- zXrs9Q?Y}wAMIuaAgJ4_yGl`qg3YH|lP_?Lli$&;wd18q9u2}*1-@srM%9-B1HyiD3 z?)x!{%wcL+vG%`hM69qR*P=hUTI1TTN;Qjl+(J3mSNUh%cv1$`>yHsn^cOWUyXcqcOH5fsX{NIi{?%(?phoR&)l`Byne@+2WUtH~#w5N;> zAO7`gp0;WKu&|E@9@i_O{0f-@HxrHS`wdnJ&c)_Rqo(3VcATZVszsJZ))NV|%Hu_9 zA3msQsLilaAqXeVtnopt6jduED%M{8cMV!21Agy1peRKdtgkyNdxEVJW-w_J~V3fox{R?r}x&Z?8r2p4Wj(FQykXuBMu6 zYWxX$8$Eg=WIrtX_1hUpqxsnl%u5^;(&to$hZ6hjDUa(u_bD12B@;B6R0Lwegmtu`TPsL= zx8Vm0W7d<@|Iu)hcgVs1y76TtW%F;Dxg1rgg-!)E4#Qmx-G8%4`(r>_I@Mb;rzqv` z8vm?o%1_M&@|S^ei|{I>T|MpMJ<&$u#Lgq4&-!yf?}DkOH9*P^+R$DGw$-x#E<--C z?-Pmu`o8+U2Ff~7wt7m%(QAH8EGWLW`m(M8-7$(i{xS2ixzR#$Ph@Fpct<%p2iN2v z16by~Cq0N-m7c{(9Jb>DJrUYUin9TuahnM$MSH2w!g+7=eeA4&h9I^n(yomPHF$UGrK68h8rwGh@|xFmwQ^iI$yJ>5d5%N zpyT3O80~K#y1X@6uLu2w;aZ@Ixx3f1kGy0`d!LV^+PPOFCZja2nk4@J25J10%R`SU zV^&2Z8O4Y*M%!35H`mQSp>G7+ogf=@^`O4--2VQg(q;w<^n0MRYa|H$e{5ZOIMnO= zo+Tp;Qpq3`NyswUca@43mBN%YBeE+Evd$c*$eN`j6_pkm`>~B}R7NG~h_MdSB55om zVY2=no%;Uun?GExb9Kz;^DfW(Joj_o_bVb}_@);!etYd2M^*JY?jGmJnXZRS5GT9< zc3|D-X}PQ)n6>m|h;C2r?0^~HnqTeRl9_*hBz~~bKbw?&*mO#4>G?jXIvn(SQSa8C z!)*4ThL=3q-L)6bJ3*1A6jP!RvN&(*`^me%f(rb2dhPn7Z`DY`uGYfUrvh15ElYI3 z<=x+U<^a8AT7~5V_jys_cFZ5+{d12^seH?)WS`5PWvKIN@CTn?udj&~d6#nX_`I>^ zJAz)}6Ux=NxQ&!je{XD*23yD`dwMsX*PTepkudltOaU__S8cE`eSpZSlaJl@=Lz=N z%s;PsSwOvi|F7kxg=sL@S-u_HD^RWBldf8ph+CAUE77y^;wyE?56G!_p2tv?y#>5` zTvPF;7_*(2Xv>L;cEa4PQh(#X^`jM2gSfh==#`vSvKWK*{`-bOJa0dqr@Jrl(60~& zKLig4+A!5`{ErVH&0RJSop$JuPM1G)wP{k+SRexJ>q+Hc7yr^0$(0WDox1-t z+KtO;X3y;m-VA{_+>KjrRrp2@aRnvU%x=BVokU7O>?J!{^1t{#w=Cbr=UnlEEsd7G z)^}@!No!_LVjdy2h+K_kcK;@2i(k78ekgBItUr7CFtF!=FmwFWsh>dw73~muKFc*6 zu@lGhk|>Z8Q|>Zo{~{Q)Uiy@|VxakyJk`vN>qO)pMdYB{Ri@M+%YVU^(Zt>qbzD2Z zN98xpNm_nsz{kT@@5D5os0{IAyPQ1qx1L4sy<*i1*C!aXX1as<3T|;4&qLISZf;vS z{cIA8Rk3;bXD)2a4~Df0LKAi~7#*(E6g~=o?5XjzfTh%5+s%otZQLO1hL^@*gT>LWL5@?KZj+QBi)KJU8Cwe0Vg z(+rwM!e$5_i^dA%$K<_~phVL9??p~`occ8|(TDy2CCqJlm)Y474);au6(zEy`4VWM zZ!z0Z(N~)SFs@W-p^Vh^gX4*$1Ja!3be0QW#x;?5u)=?REYaQ7J;;|T`HEc2OIYbl zNr&TOu6fmoq~gf-;aPgmo@Se)cQPW42MBsfRk)ady#eJV0EIEW8gYEKmiK@pmIa+{nd5Gh9FxV;EWH#Z}$4s7~I$WzTSW#IS#6@gi z8@fVRZHf{9Ju<0(!701(kf&>*8~@fBdu)Sv{skY~qhVDFBuj!SW@rbdaW6J%ho*R_ z7;gv0tmKJUeB8^F8zcisEERM6#Pb)Z_Y?+0Bj6_VprkF-uOk>cD4}&H_ktX}o zA9l?aO2P(~RvM~S~%C=bZ^JcFV_ zOEm`<;q^6c@dSe=Ns=WaU=SGk}HDav?WYa*!%$GIEd zl!Li_@L-sk=)f83bnoB_N;FkOU=<&*NqNBzN9!Sf#x9G*HLWlS_FmNN4KZf7Gx8$0 zU>dKN`ukVJ8pK>=kN*42!YLHbvvJiRva}eqQao>(;zQX@Kl2mDVbcq?sDeyq0O|oxRPyW9Ny1g&dXwzlb0;jY7QXy5r-HyIL>}_Ci-li#iUIl3HD*E6vs4w z=_@DcfK}|r3;qaa)O-tDv?!{)bfU5M?u^yd^NA#J2CeB}=%2}<-pcrKBgYTu^FO|I zB|y7vlhMZf$7O%hkL9k{U(RJP{7Ng zIhaBFK;~zht#Vu+Gqfw9^(_4ydk)X5=jeV9^YU@ElAfk6Er|8@K{3hsGPF6yMdqvU zVLp-grfd{LDz^q)>5B?#g|?!-5RY_VN*B2pKQRx%Sa7JL4>c#K_9x1bl_G?&r@ zfeCG&sxt6a_2QVk{Ifo~DP0}Ty{@7Pj5AUM(yNrFD!#jX$(W+8OCqM*FheLhq3Wh~ zdYF1(2sWw$WfD7o-{6u}0D{P}V7t2>VW;9EP7p3=PDpj^rnz)*MV|i&dM}RxAEfgZ zlpEO!DaL89U%z&XmEX51CSZL`qb6p>3mb*1|?%AZ_ce# zBMZ82U_0l+wmEt4W3d{Zr{=~zVCUdqreRQ~d^1TKBQGr(qyp zzS@KY-5O5v@_2nXG;^uVvv27|<`2BDPL@-kMolQkZ_-FD$O_S73U6E58A88)DP;~H zhzh(7wfUL5`#v(3vfalFdIaNb_m-Fqf zM588iMw_XYkCG5eeWt~%=c5YMHFpHjMx;0wf?Sp{zUBu*8}Al62}X$AmWmlt2pEcC z&>jnlh2LvtXE(EpkqvQ8(J<`0FpWooYYcQ2?_M)V)|Rg458UuBU0Z56o|b&-Pn5Qk zg&L|5;Ajp`%j0nA^K0^PO?pc8l934IQP$NT`&W$28*z*HE|{}r%wkNZ{OsR#Gpdl- zNNgE1Otp296V;ZlD2c>Y^W%0GIPQ%SK^0#()dPPYDD7_xf9If2{gx(zWa z8_!|>c_WgjrYP-GW>#XPjC6+h?+RtRW6z)2u^G})4@THT`<6Cu60!_1T=oTe+8vL= zJDH8To^Nkw<^9Yw;AFPEOVn=s&e=tL>ix;*(D@ha=mXyGr6`XRNfMr!5F!^)D@gyu zrbb_?w7uWLRNhZkCW9?^Zik;!5~;X_Ew{De{Lor`!$aRkitHKe;x+yX6%Fh7$g4S3r0m9xb?wg8>X?MRDI6q-Id-JgG=Gk$Zqsxs)%u9 ziOROXB$5z$ggoNLRYLZsrS(QyJuqEfvsofWPQ(~l=St1a884Kt(D_vxuLkS<)U?4e zi=l?dY{>uZ;WEV~rExh>^9Oy&o4dF$H#yW0y|UaDaH_a(B;fPX+{iHAQDC6x^V~rn zk^HjS4P4Hm5QAog=Y6saa2t|~8B$&mjv})D!7T<*@`XXQy)I@5$5XpzbZl4tm3~Zm z0b&lbEFROC(fN^N#CBv$(0AWDr6O-rj70~d@1pvoIs4DX-h9hngt2a$2$#Oee_JL- zZf{s&-QU{$bycMkS$`dH-U6}IDi+DaEDJlHrDm@=M7vkVS0^45tz8?X;q~@sXoT7pc^R6Azy%IQ%x@ur3AUi{RH}@Qjc(bjIv;3&fo{&5!A~>*tFDo4U^)me+x76*G%yKn$+2)?o_2 zt{vRwFeLc(EOo)YGHP=mfBr4WT$H{^bim&AF#-Dzy2@b>BRr7V>3#IcQ%mdYu~D8j zRp~AsvHZGQ>SdR&XtypD*xp<3{Ab@q$tu;;O@* zadcpg^(oWU=tD`QuJrzza9VobXI({GdVSi^gk#=Tn+^xNO?cj8a=oSPt05d`w&;Uw zx|7SdYbUS`{Q1}Cc`Q95BxCjYvZLWkq~ zFFyfUET=rTS}~eD@v?_=de$T^uX0I&jEiYEv%RS5bz>BX=P4A7kFRm1hPMzx?vzdl z5?O~<5BpBlXn9+&0HFc9_reU?TI{xp9}Nltk^huVI1*Wxg^fSd>joMJW|dA9)peKZ zkbmYCOp0_>R=hP;-*GtOPps%z2V=Zh(JZ1>#c#=te@kn8QzjH?LFC=$qBaZv22c(V zx#0*L$C=^p=;S|Y;K~rI$ zbCuGB7gy_V+{*RFEFf-Ls(R@>Sxdz(VpqcdbM~= z&O+7&JXg-u92+(FO*F&yS>cbe;4jZDZT)*x9l4oijwk6{lx-t`QDrWJg;)!)#?d9i(8Xn#Nc(g@|Z?hu3-tDiwyL|Ml}w= zX;5w+?JD9GHD^ZgOCk{kW$Pg#C}M`B*V6CMt>{VgRy?l@QPy3fVCiJ--`;mgL&50t zNe}4kY@tXHunqgLQ8~CpW|w-s(8;vE#zs`)R#M0%-GG2Y9dmQfe7)jIC*W|t#JASz ze^0*Szb8lW7zF$46`!NBw1<9RbM0p_W&jZ&PAzm$==OOBzhD$Jeol!2tTAq_`#fCR zD|mDku%1b>5s@ns1PePwieo6nxh2gJ!84ES;GS3~mg?=s9YH;}5*T-;8`7Q3Lu|fF zLo(%=cYM>hC4a5=W(OkGfzXYY*o$4>(y_JrF*yXP_>p?`C=p|U3?wA)^OBrL!{cgv z{``ih0Qc~QovVNLzfUUW$@xXu**0iYl%VgEaUhf z+SAeoY9%?_&vHDkrEL#^zD!%+V0@gV31k-JAAP!;^?L|<8knKD&g*EK?qoPdkHWUO z@`63bCxWu(^H<+LaCuYA(ACZl!#*9m$ui`6%7OCk>Vq8|_oM7bgx+^J(8- z+O_kzj>K=Ol!WQ0J!N^^io6(EC$ebynt;8Qp;huGD<)Q2)sqUg`NKxSU$Gb473;K~ zo|T*1+7{{;ssz#4&IZrx*m>M2vortG79#7fu`TbP(~I(S2Ru`0!F3Sr4f~_yl}E$R zVwaB-S@!!v1uM2=hHm|ET!G}gsINkYJWJ=Jhvz+a8fs=sr!y{&?ftfRp|I3H0vi?0 z7I0k~=!A_DdnZ6xd;1)wwFGCtH=IND6e zf*p$;1H{U$ib((MibwD6gPpGaD;o1DX9l5w@$H+rEA{U+Sb3g#V z8$+&<&Hadn)}fxsh_`F}U%R|Ho!Q85d~{ys!wW~70caBGCw2;dDZ?#p>YZ1mf64Ra zwvz?&R01CSUG?YG?!26~i z+V?uU;$pOsG)Kja>w^wJa#GhwdMcJcaXmM%v(E8?R<0^GRa z#VdP$T8om(phZ4)lHMcbSqc^8c->5u)pWhI`@;*m0Sk(*N^A%PEz?C#d|2>o<}4Rq zsW-9W|HMG`dnj1{2@e*6`>zjH1WZCWF1zo>9WOgLv1BRk+lXggN4sD56Gb#`tN%Bt zbmEZBaKDzh20M%$!B%x`zmETKCm*p1q2^s(896)UV#dXFqg<}_JwK{cKh-Gt&P5+ z>d8$3e2`nZQ~P62_Oj4leW@IOs`T+{Pwq72#4<5MCUZ5V6aKkx2y+(LsC4ft`?GRJ zk?o%^Z-V$(HLim#L`v?Hx^zoaq{H zQV8KZn{b>4gf*JEX5y94a6?>Y*I85Lt%H?U#%o^iMs*Y!utxv;d`n9ktSJ5*8z829 z7Z*Xa@%e6=r?j+oLTSz;2D=@zhxtfnBx&rEz|Ssn*JcsNGgRrEwuM0kA>{AUi5SDxNK^LAjT`=g z-TmZ4M{943%y*{gn(gS87IsQ<)8y`3XO|q<#zYo}K}+Fiv*opzCJ0D+m1Lq?3&Yut z9rvmne0r+Z>Zf&nS$weP#s8}LvhBy71BrZlDETEDU+{kBRvHs{{5_2Up^ydZtuEf^jd}v z)5+!C6Cr>dwqc?Tx%yt)^#Iczr5`sBvU!}jy*Ere|5msmv*XjZEraMG54 zn(Rpy%*9qKt^8H$ZyJazSy!!xY4oVzB#@)%D`(Z(?Y(=mXIl`^+#qtLN1Pgvp#u8Q z6F3&UqC}6P?_}?Hb;Ft>CJ{c!T4~OpDtq;;mU_WpxTGy3@TN8!00zz;mD2{T4!JI_CN=0)E(a?TURZ1m@A4a&Q)67mmWT+2W9+sZmOy@fn>Hf^U!$Z)I>V7sa@Az`0z$ zY$~^#>_*!^ZT$n}08Qs$ShoV0zYZ5XEpmen)Bvg5safQJog1Df?8c34UJVlMD=R-M z@(L;y+_?OmB{SPQsBeb=WmL1EHfL0XHl}Bc>FWhV$}8hLZk%kkyH$8}7xRu6wf`-l zDxq}Z0+E&I_Cj4=eg&}1q#shc8>;1Y@Qd)>ZBH78k(cC5$Sa2CtV!OUR7>_&dn;Y7 zKw*&qECpn6u(hDK9bt$%6eZAR*z`k*6klV888V#g%VN+*1f^>JEbW&UAQGnB4tyqn z-K>8ND6H?nCI@=Cs`qdavA9JUXdR*HYh5j{4SYLon-|pr!;9h#l%6sT1#hnTXNUV3 zNf|RFkBQ#%D?@$-N#Lc-_AQZ(>WNJu?P^k-Wf9{wi&D5_J#o;K-v?pj?df!vwOF*S zE>i}15e>ETO}SSAO?PBmzwJHv<;&uI@)?Q#Wx6r@_2NDv>kd6I_b7I`x^8C9YG_E9 z@>B@-AFBwS{-q$$JVbQ7I{pTypLaDuBM+HI7r)XsIrugKIjW&^9@uk2bTG7dD|TRW zY3C<`PjBFJVV_0ARjMkkyz`R|xUGzAmi8^#ofN*xo7$f3`wTd4$3M-0?5b>vAzl9E zmXCT+A*6@;Bi@JK0L`_4VPZ4q#&x*naac|OD_@_#BApGm5iMr3~E_&D7vZxYBIQQ?r%`mzIU!u$E%xN6gtIdCO&QCw4qn)?70 zGfQq<5rF7b91MYNvJL>oxF1>(+ujKg9@Sng_20oJZ?NQVuoL$|0jg`D<7kxJDZf0A zi^!~-@gYke2VT{m6GBb4Io12umyTB010PzWhS$M+p6^IH~ zsr4{M``1#c2E&BNAho@orRBLRc#ObEk!y#>ajW;!LQJ0bg-H`2RjA2D{t(mhc*6#L ziRT@XO;Z3cHmZThcGDzWclFjKxFSOs{*Wr7-?v;C?ge!Pzm?THWkH$qw?B)9T(xw* z8#V9Mur%xN=xEMc@R`kYOs7f23<-u_KY3^A5RnB<5GBh(XH^Q(jk_>10WBbevEbP5 zgJcawAJ4vH#%rm2Z#mIa17(yytenISLjFC7Qs;kdsm6ZA^h^^GGqx^>0!V89!R9z~ z3D+m3{&vgzh)#TghWR>kQ#vM)_!X4;mz4UScj9+QNkrSFGzB;;K|mD@)G9F?-9msU z)Ioq_Nf*%j|2~%W5As4}2+>P32H&1MSap1ra12CdIt5FDwExpBpQ1Ch7>6agJ*2_LoR zv7#eshtyZE4|xDw#@iQODv}DUHCU2+9LURcYx)xM> zdfJB}R1A^(bKK$RHpL6YZwiK`5+QWs7U{T%Xjh}$l+uY^fL$uBfIC%mavFg4}0Pr*kRR-m9dA(MwObLZ+RF?5epRKwD}48l*NIhS*6P1}ay&nL#5sJtqOI?VVo%>+%rHuB49lM(}lVp12F1mRWES&`qFZZgjPJ7_zeLRW}SY%C?;4A4*_2 zP4{|yhw&)e{~%bGW$B-n-@0aX1HnU%4%QpNHD-^AEk8`BVX?ddrw)UkpVKc*)Qo)l z*sqd>TMPykMcL7St%`Lm?%nFBi8sq**0-!!$ZDhRx6mZLa}xOL+`6+g1&Ue_(1&-P$}tGq4x=%WY&5~9qeb(==O&D&UTlD?;VwG`_wr3H zT_9f1QO7ijaHTYH`n?2uE8X|nnCP{E_&`X12Yg$X@H{kSkUmN2M?gT$DEbj->6ddQZlU+tSb|m8h1-wa-(n(Nq9`O>gYm)BsZ!Q^{2-y zc1o<^hx#>Oh~R@fUf-LUU}b}0M@OZf1Kd3D=GxZ1-UC|aKUyGQS?K^p+8iwBz2LS8 zu=pTMbiW$E^x?9^xuJ%oG?T{pu420#Z(&Jd$)=I>J5O=m-Fu$avILaZ9jdAhD$6(p zFel4{Q){)y7rnADM6F<+-V9tB)gL;;En3VYs6jrFw?6H6rX@PE-;dZjxJW!f6}6=y zg!f|`BC*S}-d(+qk)J5#M6QF~5RsaF_?8dtc*RV3BB}c4u^(JHq%UI(TNA^384v|$wU!`^WSr%t;P-seddH*JNx$KR` z=KotVa;vnX{DK0vce%UG4_Y=Zes2W>{#z0*5$9{dWiNdedt`m*HN2elrAr2@rT{Jx zQ+(mD4KB=q&D`Is>kIrS-4cx<{6#?I`Z3lUbopZ)^l1>_M85+zvO4rQhVOG!Yd%Fa7_v`s{SEMspByWBE}{)ycB@ga@LhL?_=cDOXTMS1 zT($f#qmXtfI)<*qpcT~3456~q(@-OboNiJbU+|WE+GORxU!@a99n|jqbbxGZ)Yg~P zJoKXk2(IQU)LdMI5Bq{Ez-a^`tD8aNqkqaP-Mpzs5HLq!eatzlgI89hL(?<1O+q36 z0M~xc6lMv}oZ&M>I-q5eNZmM20YCuh1$3qRDgl2+?i6&so%n$r+y+-ENWwy~;lQBb zAw-L;9-?5%{}@c(je+fXs3-+adTA;KkcMjUQcbO*6H0xMhS zRf7J*1u(ve7SShnyF}lC=0j=Vhdp;gKMEj3^x2425*E17_rPrdr%GIr#r3mN2r#OX zzhg-Hn3ryiV#8OD6xB}5=MOz=HX{-D0uH+w2Ys!^y5R#>0{sdXgc!7}yl-ECkHm80 zww0^YELd8_)FzT*zHj&_{9>HGmYs`RJW~UCBPXwSFuC)-&X75fMN{_hDa*^7y`DAq zx#4dgwV5lMUl0yCLw1c%FZEj^>TKTUxd6%$faSz@eZ77p_$J#7KupEG115#@tdNzy{HR5l~KZ{ z4%rY{8NPmUHu6;h`FAb}jJ9zi%Yq-NUdBau0=Q}RahXJ3NmHq<(qu;7E!0B}qAJ(S zZkO4}LkF(qVoIRV8>JSjA+P%6zvhd$&jA#*--ES1{b+;pUK0HDcd=puRNH-;eV zExU#?B{`cs=S~rwUM|-vaszUON=`)CI5xOom(Q`WxvH81UjwM`cV7J85>kHB;qWb6 zklp0Qe_YfAJWcPS{F9o@q*l2$Q9f&SO6K}g!*6A5iC!1FUZ0OQbMOY&blr~jzOs>G z=$q$A$E@s~G3mWMJ%sinFA%v8d*|iZnjI91C#8yFLQb$8l2EMMw~C@S`eUQY$8v4n z_KbbHOy|!F{?fRM>2y1jtB#aSZjuuPoaNAbmJ6Tpx)_&w*Q0L3bIR|MwO0mqd{BFu zMs02S7YgTinLj*+MQv!tM%wV*cJiQV1aAQz>7-apqry|WR!QrE0a@&3p|QOM?hfgl z%!Rnc7ENZoKh@|Bp(>|zf_YuDbYYXGD9;BQ#j2a>vJ84v4EgudhF1hVY_;51f!kSC zvX^XPNRii9fhC!<;FnJ*d z(gM30V0JZ94v~{6(%%-XwATS4-s%ofeHXJ$J=j>DPj_v#bTu?TDtnrKFQ%6%kAV!p zKTYYT44!2abp%*@iu-t`uCE35g%M<_+Yv+&7j4*wQRB3f#+?<^MDB9 zM@c8gQjR2%-v1(l{d)SvHMd5cTD9LV95_|=rpKyTO)HZ6 zFzCmFU4qyuuI809VMJDzj>(tTDj2g2?eGOr22FaJS&Ud-J8+Kb@Tlt&c6q0b{O7&7 z;YA%Lm`2@EuK9^vhv1v$7V(x^_0o^VD#q5hN)uV7I*vfN*<+aZPbTE)m4jkC_)jCU zJ&U7T&{e7XbBzy4&6Ub1pNf(Tbku#l$HM)xJHN^h!Z0n$#aCnuxMC{auD|i~@97{$ z$y?1)U$9qBKA*pZ=K(l<^lFm>g6MR;bi&Q%;dB`NDZIXAP`w^hv~3gF0aT-;lRu65 z*7AiJlGLBp8LU5dN6iVEr#mNaB#`IG0Pob=_dDz<_c!z5iqT{WV`kS3BEvkRO;PhWPV&iT4i-^6 ziB5`M5$`a0Im!~sAJqPP_Oc5n;L($T$AI))r3ge{uWFDU6<%5(JCI9zcTO@8r=+J% ztjgN!2|Lry|63F8tt1Axrp0>iQYV_ zc|y4ahD-!xKG=riv!Mz}BqJ$~6jCjbR0{;NoiEeHQm=fIvf&XZ7g z6!Y2vlt3ak1gU{CLi<_rpC3$Vnnbu#7xYF0hdtk?X$uPvpov_>E^no$dwj7*SSL1V@WTtjXB7$Aokx{^9u) z9I%=!3Q>P|oUi|ID%O&;Dy` z4!vN>80v#qF%_$?=phvMWi4fSbZ|W zq%T`P zH%cc`&N^)~B&SeJ>G6o(wzP1BFkMmn0q%F9>n?In?rUw2B{65K?NnvA;f=f7a@vF7 zPLn8Sj=nc6eceFw+0o15wr>?5_Oe|k)x5V0Fo*D=>k^ch@@Ie z?ft`N54uS^&9A8^hqL)8@K_UM_h!uIyy?1bn@6*QPmx?MXNR~c6oMWps z&|!yj_b%U};m3M|IfYfb&K^|hbONVDNljOTu&^)yf1qt#O^`ps)jqVL!?GSlp43`H zpwe=MIQTIKPRV4f0K4haeYCOM7XZ0^F&WYBzCWkd2xCuYXp@3kCnAGw)) z@K1Cxt4V$I{ZVNCm2M(Iv|1t;<){T4g1>0n_ z?R7UUmD9dhW ztDo7;zDQ(=3=2%YQ6?iX8JkxB#;;FS(CV?Jz@RNa^(#(UN$U$NcO2>yl9|B^KR-kZ+ZlGrVw?}d%?pTmG zFOpwR18kZ^GTT;9>1~IGLmxXn?u{4&QH-jErK;8lG&g=6A63-XjT%nFOkI6>n-c-8 z`fl8!;lt*!px^MP>g#EsuN9qaMKc#8K2(zNX-BcnIm{;nbGZBUSy@G9INN^Om z10gXRm<~unU4-t3+v?e;mT@I(z5F>Ya5~7LR`@dtda7PWi4(cS=%blSVZDTI_#gV( zK0yBMtI0e9psU5f!*`(RCsQrd6PH1rhdy=cX~quupzTDb1K6k#(7qnVM%9$5n=hpK zmn;HR#FWU=C$dcNyyNr_bQSu=j&qlV5=jA_Y{lOhxaD==kK2IEIU2P>C2e-viZQ#X zoe*yCs$X(eIV*sgjf)wQ3|*&x{fEc!Te^2|u`T6JS%tl&xPEc)oDcNEdOfKN0oW)L z_V$js>G85dA;{Y9otk1mtCE_DBjtAF@F zG`Q)e<7@-(W5Q_O-%6mxo)c12QnS(UNORE{i3okP|R6k zm$5b#ZM6)Vz17w6LuD;E%UkD{t4sY)hcF=LcWNcfoyJBPun*+Hje8JcZ9kP*xQkpP z2^(fyR2bgEj$+#bMWS5oF{%+ElGrrlP7OD8kVE?ljp1S%2LbBRi-oq+ua8cew3lxo z@upIp?DH^sJpu&V*~aHTzA)7h$!~3gyLJJqpY7i)Y248>)fIn$2E}Grhjh{jve=zA zc5+iUIt4w%AN5F2Vc!?O|0jGDNT!3N%z9OG;+-p(zxS9z$#$-B37oEBl>y=%jmj>3 zcDtAr9-Ko+4W!)ap|L$=A>lW(C)Gc*n1tBX9=2CtvZiB@Ze)%mJSi9Ml}Yqs)Api zioCq4i&>C#RE)h}u+*ASiI(A~YIgK2)S8%&t_QL=1u-Dti2NJ4B@a0a8b8_WT7kdy z?WVnV(10ruZLy&0vakp%!9^6q7fUCU8*zh(tUM6B1a1i2#0>}OED{c%9DV>BkYjw> zsb3;~7t}9}3yPS?mjeo!tw&I|%8zQm+3Q!4cz|YyZ7>geKZWQx+)T6*XL%yKU$7(X znuG(jOVk68VVBj3teER5o>W!TkoVfU)h+erXPLjbQQH1bI}dzAkxEM^7-K+E7ANrc zFbN?iDx;K@@eQJZvgFcP&8Qg|-gl0mBS|FOMJ?atb zL*xoWzk8D_f3A4-E{s|3cFO95Tc$v;zSj9{alK9J_g2bQ@%~`6E+SYJs7nu5ObsxN zfnNU-LZEZzICKAZLhIzr0Q&QF0KNz3S(~rZ~*aN2? z?U|->KKSc$$tvq2@9|5O>Hzc&6lgVAQ^F2<{EtxG_Eb4k9daj<%I|pk;j!Q340jRW zHN?F+scU~8Osf-LuqDv4+eirnbR4~$e&&?XbjR(94&TYAG&Aqjbvb%Q7h#7IxxM?D zbgs6pmkxW1%6YefG~=^Fn(8s@oyT4O{N1)x0*%@5>6R@{ z3Lr|q=}pZ(c^WA28BRVZ|MnZ*+RP;-2MAn9Sfq`0r4vDr#Fm_x+Yhk;j-K6EQ~oyr z)P*e$r*#&1DOsCMBziVhD`29PN_J_k*M~IG*Y>a9$aSj0t+YYbNO?!}KUG!TPS6SR zVeY!=uh{?#rb;4aMV5QORl)T%c3G4jQ2v?pDmd@P7c&i*gCTT$Z_5cvBu(kRm-Q<9 zHWp3^A-kMy9q(=VKvx|KEP4fn4>n4IebMy*TY(MD(VAaL{;$LT%gLXR28v$d!#Qxa z&|W>JPgjWSX}CkBE#PgQEu8O2k~)C&wD)z=1@%yGuLnDXK1`Q{E%a*@J}ArHo{6}j z;SjZJp}GZ|EDKKxaaYQ9tLr+=J-{dW?~^44b;>JC;$x(d=A6CxQA9AT{LiQP<%jx8 zAuEez(Bx39*ZQtc0tuYvJ0#TGl1}6<5xK4CX#N{(to4|nu?l}|gkEKyr^=3=avjA* zM9%(PGDlPb^~|Nl05eHmqBueK#19f8_{kD4S$#hEyvgbutdmaCo|P+ZDcM-ENi&Z* zb+Rdx{UMbRWy3LdXTs`HQmk@8SMpo$Vw#9Rl>;!E0rx2T8E)|tgEmK&CcB`d)BP_X z&LM-fnf3p+Y3%+L0E#>Tm=_6sMd+4|8A zXx_TjqV;rDJz{krN5$N@W?+x?R*UK6bpB_}*r)IGL$H+&xN#d%>geV5F)Mn<5Dolw zNMAT;8Xf-n&D2k=xzd-N@FqJMF^j&7u!aErjiRQi2aJ*}wvZe1NR_$}1|F6AYY|zd z|H+u%lw;D@GojO0oX|9(`6`^K%WRGhLX$Ho_vi;<_t$Fqi)DpZXFRJwO8C-P z9T4kuy^s&jcvj#7ob-1WBc-$6_)Ul3ThUqGF^a!n-=gO1i?9?7qc z(g>8z@A^DxXt07Pc~UwNz*<+dIs!jHS+JLEMDC(A&?o4S2@S%;+%KK*bv?@_u{W|! z*(R=te7--8YfD?mhjs-R-2Acq^CLXZ)~F^52a0od?6S}Jl_XM*y@Bbkhu-~*LL~$s zhh92u`G*4QaE&~-_ntf- z$!8<|V~#R>{p+Sw?~cPj^1BO!36uN{?@rMFqMw5lHn>nWG~;CNQaV-j*znIBl>N1| z&kj2z!Exc9suNX zmPGJ)-kPe(Hr^Ga_Qr*@b{(zJ8IPC4FS~a0zxx+?8TAjUX7+UKPWhlTN2AXd-t}Q- z%n!(Xe%!PzccLws*QxgYod4Ztd86sLf#|kCA^7oAiUDzaV>} z$|Y-HBR}>yfURG!HJh80cauL%M;EVmS?rge>ht;LBXfOqBU#!X@7GDabhC6K4Y&9g zeYhfd^>lVu-z7{C>xsYkU`midyU};0vj*}rx(FTYES?+ogWS*o@?lpawmto!cy|tP zN`(hp#zTD+uk=f25ge~sjZdex4|{Q*kSyUPor)eLGm|d|E=j~4U7AraeN`WzJD7K1 z*+g-540b*39CU>5^xi+-w$I&PJZ1&S)#M^!w-?m|6rh5M7Aiq%LYHG&a!gt!V8x2Ulm<-Q&N%4f=DV_$CQA z?siNg;SvYdGm*XzT5I%MeELBOWTvEI9SmvCHRl!tyKZ7FmHDwe1p8?^I%#{iX%4Wn zciH>+w7*30Oh@{dNe?gUV=&>&|s#JqqO2Pkj4R>9uqa z%r^V1`;uAqViA-#|B7c0^34OG<8D*092&60;6^W0`~jf*Nfk^E6esu zd;aP>Kd^tkL-0o-3Cv}5PWZ~v*FImdo|pT~6|U;g?Gz11N5kwFi_k>;pt zGG$OyAbq_}X(|R}wsr#;NAUMlz(tr%8iK~cJJDm;n?u%vMlJx`AQ8BMyQ_qRjVg|x zt|xOS9ya^*0SF2DRM(A**lHToZy7&+Xt%SOQbOE6q>Vd*6BFA9XeW(7@b(lwUyadX zS&~bdzY;!qo9!4g70i%kjG6=Dgr&e|4M~o1iPk&BZMck5kFL*7EED8RfU*Ia0S!Hb zIZ)By*r#0$*k5;2>Y(rgTfb}1vUuS|dq5<(ncsa%Qv;r5ZEYHlr_Brorh zF2@LKO^p9g^yu_~U$4GP;rFD!QFP;m?G4jyX6tQJ3{Tk!l2uIfncm8K<{~#wUxIqm z2!w&wc3!{@C$hJ=B1(=AXL-ZM#^|n5*Jajc7YZjdxrmOfb+qz+1)^*nn+vrW|1=6! zZwY^r15&nc$v1trnua;JJhFDa5n;VD3F|FA;+{lKRdRgFz`$eXz5iC;hTp5!40>Yd{q$5kPlw30M~9$WTi6Sp;e*>M7M+)*Wj}e?*hJKH zK$~C66y9Dc=9m|#Ftp$C#f^vSnU*J#$pfU1O} zgF58F%V*E2GP?~oK^~!DPkns!c^Q5{C-?WmUEFW=D=SSkIEjtI1)6b{awYQpbm(XC zJpcS1%U7zuq%^IHqicQDH+WAh<7yJqMt5Ma01SVl_u57w7xv4n4x%&(?{54?? zn$my?x!Je$pLpRpiQ9iK(yPx<`>~ycyIlooHb<~XxOHR zyL?e=$M)_YFD3us0u;PvrFM2mu|MJ>3JXdxXlXPN`u6xxA!C&BUBz$VG?~`r1#KdD z@Y0ey_T123=I0XGPrd^|H_Vmabv@Tz2X@8EnmD?ad0f*F$jslm-QHht%te%dBeW4h z0&jF`+;Kth{DysQ_BTJCl(tA!yjNc?y$OQZ{=UBHYg$wJ*%+qb#?@y`z3_V_{y2u` zebB0|Gt-pgLRNVhz8kl=i{51}U4jTat@pPTHVV+Ol#UTdWGE*nij;7Q1m!Zhup>MDp!!n;ePw_;&g8=|l*c^5qJd3N8V}(7b>`h1JIu zQ~pio%;S%5l0(!v4X!s{t>!_D|d* zY!wqwZKZw*Zx^MyBvo=ujz@fD3~n^s`44Br6`-*j?OHQh63-*sDw2N%#WlZI%xJzd zLW+Ed$c3S_Pb+v7f(A$ebZLCBmn6O3{)nWD!YiVJ`5&cM;3i+wU#sRMk#@o+o|?++?ayRVXv4R9r5ZE*KVD9E_So z`U>pyrq*86{d79!$HFClrh5H9gF>On7dJFv=tT_L(K5m#WIs9w>3O~Hr8LKye|Ed= z#T=~T;R3hD4Fo7tUyi*nd>r@TR@klV8{4~&+jD?3_eILDIqcCt)g4EOzrx)rfU_EC zEJdNp!B&$`8Z7E6-wWH~WjC7%=`s)l9+TCQNGHmtWkc_Dx-Iq;#Y4U;#GS+~9&L52 zhu+FwyQ|LelgC^o*^6U3n>%fPy`Bcep4>)xO2*UW>38tFt!EwP(AyE7E$k6hqecL< z&k~(L-wG-JdLm10=;6alSX01A3x0q&<-CpJ$~=R{ECY*@UV0!KtR{knQy?iJcNRog zRu=ygB?e@eBd&g~pl{X%CPSkiHHi9ZDRbL_y@k)$iDhyAsnXLLO;Yrcx$-N7{yx-9 zj$s>8Pi_@{hxG+_ntnpJb16yKRWs1(X9aGt9dXE;vh)e;s%)!Gt#56JJkIQ^`w@XA zo29C}j|KcrnsXX3?hx`P=!RW9jx7g&D0#2hnd!V)HfRiH*BpHH!7O7I+%49KY*$PR zfDQHwguRw=b3(8i2~LR;JHrP*S?Niv_U_Jxx36(VH9$E=P*r*3(E!npe zN91&wNu2xDBWtHF_a8VmhC9j8hgoym`!Oh_O>f%o*Q9l=LN>o9EkiMJ=u@;nj{=cf zV_j+e(zM8)cDF5}0acCU2>>8jRG9EFEJpii*m3rYvKavYl>d*cuMCK?ZNlAU34>7S z4iQ9JQd$vNL_k40m6mRhmRFD#P>@zB>F(G?1VjXsZkCo@dRbyQ_oCl9KhFO0eHGp3 ze&(LJ=9-yngishuFu>3Z4?kA@VX8V|I0EgEW5Hnx9V|YVMzA7*h>zCXW_oHGjeUlw-F3s7)T^>&5r$+4ZA_1bI*d zL304R@PArz!XrO;ikNU38f>uL$DKO_ZpUUur7VlEI zs^0UpmWYJ+C1jP1{4yY62O!@!gC`;JD3o#U++P$3Nc4{ajtjh~-7g0N!`^Q=?0Qyl zS5K7(1M4tq#_3Iz`2cRiHLvaFDKI*-ID7NxgVB28CSt0foXW(B#pSTK1+fxr)hq~V zpn{2Up?=Oxx=v_+_eC*|q3koDm_7Y@G>cU6#uk#55!Y z5(*@>XsNLSUQ`&;F$ZYacCF6`fO+A9tEM?cFHYcQk}GS524|$BtbbHf?wA;460DPp zLXxaiHg`JhGV>^>XAd5%?p%KXp5*iM@(?4(C*K200hal0|3XmUT3Zj9$jmuR=&$}~ zm-)eXV)`T==@hJE1{$R(;3^Bt!OiAdsfh=SYbESAk|m;B0sr9?)#?PBq&VT45V@lo z8j$1-VE+uD@30a^rXix-e)cqLQphDFLS?tZc7e6b)ZLofllxgNLE zE$eN^r5-=#BmLsRq{%+>D>e6-VH__hM-t<`mTgE1t>pWAyJxp{q;nC;2g87dx$Q-F ztxf*rkkq**aWdFs^w)JL2_IUTZ*g~``oddFjScz=nlYTGsV6`x_|u8e@ajv!{wDNg z^R1q#E1Qos=Ojs@^1XZWg0bLg=(7B{^;r;h6h9u4G@M7bM&4&o;|1I;JCFcYC4tNb zM?c?cle*)|ncstT0m*wMU8d-8F&H7WC^Br-!z{n}meSrRXB%@E)6rlGejFB{{?N}< z`voj>>U)`?=Q?Px^{+AEJWU?E?A-(w7XLmPDg4oxm%kF!qV01BBJh_hGQ%gtx+T*_WUh?$GP@-nT)Mw1u7c40M1r zk7d5j3PJ#1CK$PbM(SsaZz;bomREgY-ooVUJ$8h^3+P;Q=AlF*N|O`kP~aja`}rTq zJ&{K#d?(AvT9h%6JH5Oyz$LUFVs4Z9l4D`@=AKme5;m4Y_eQL>)A^>dboI76J(#%D!XJ zcHcrr$&aFp*O{nHsO)C`{t@UNU1Zn3pKxuj8>-uh^0i!MglkX3KvBMsVa?=2x*p=S z=6f$6-$UM@K*+>5lthUP;4T>Jg7>6ozv!5aMME$NODUx!_NqrmlfzvH<|>s_v4GJq zF2~X2xBF{VKTo&YOCHqsKn&h%`#5C7fU{-@bG%nlCgott)K(Si^m$b7v|E;ce$(8mLWIG2NK2^uu!vljQvVYl}`zKJ4&Ca%SLUndD z%+Rk*L%9etVQSflLq4FGbl)t~{;d7|5coYBAWc|#RYQ*Wj2rdd3GN5_n>pmcM0sBM z=2X%C(Pnlgtw40^h@~$DgoU`~Cky%^3V}R80v$Kd-mux&am4&Cewz0kO~s`@vOvF$ zNcb=yJ#B&(pF;dMt5+2zdl4sO{OQ_=+Z=Gnp zt3Px-*XpxfusOLJ{A(tn5_2jS54e4|3HP5Zc{~18m7SA)dR_*)9mdxH;YED5Om{K_ zN(9tNGZ3z=p@&YObP-pOtqf-IwOmds`94h!l`olZnFoczH&*eZsxOL;2lc$JgVE*_ zWODkqJvL{aGKMnKu_G|dwQbD2HpwODq82#rRuGEjF^~_8j2X5Y;AVE}vG9tsWu3XV z_Mb72Cn01f`h|Ap)Q``W%_lg8Dy9o=4T2_0fwwfA0KtED)Yp z&I5VCE$JgWP1Ws-+85T~W@M=1qHE1YJWoc)qW)yT-CANn)(Zv2l&^ZVtoiBK=SV*w z2UmE-&Bt#SDoxP$e!SSaoGO_1X5pT|E(uD-tdH)5qL7XiD9#X7GLnv~Ao^exbhpf3 zGL7B_br=C4+WB1x3if33H@rfut(~h!f)X3sZ&UP3)#FE2%OA)pzV8J#va0x=-{)%44NWA z<4tty3`2A)}`sLM1B@N zgi+WDeEKba;uQ`Odzy*36k}N~i-=p}hHhO;;Y&XZ48Xu7K%>74sVZ zZI)kmOFlkyirY-ea@iUi+?NY(Ffo>X{;@^Kc`5ZA>s!VCbKoIC!sDj}a)SfA1rm5<~4JB*t5)jyu-u0k>&xUb8Xre?&46n2& zWxf>l%g#6dWHgwW8Tk}xSgH%u1nEx1gby{IZ-EwPUC?V?Z5fWLhHLLEubW)#}D2vc?Tx{1iYO}%IjuYX9k|DQ`!d*Pgp>L?8rE>`=s>qi3LgwKMfNB(ZA97P#tB;Qb#-r)Tn+* zG@iV#pB|zLF$Kfj+B##+l+J)n$^!!p6_QRQIKm>;qvjHK2HTD!fYB@)c{l5aku|t# z@@E-Z@@9tL_pOf({gdTzcOc_j2<7sPyKKrWwiAMwny5y)2-XCr(f18CTJQvJd=V^h}!}tY{=Bw%IwPMfd!IX#cw)w=bU;9YOt_7b*|+6dFzk zP2bs<{wN27ZfeFP=EhjjOdrqy1~`cFY)*_hGN+^AdP7|W=4St+Kl6A}mjaRi=N|@| zL)_IPy|AQ2?f+OW$lQI1ng;cKF}$?G6`-zEQtoJKK9y%o$Gc^DjbAmYUbjR{+-{grkfi! z>Gvkyi3D@49P1h4c5Y_9PaF*EUk-CEThGgC%*@u&4eG5V9@7+(|bI z1ey@I^_nW$k1+uvGn_N}pKQ&zcl}d?IqLm_b7v>|g|;4kq$sBJvK}9eT(Pl(x-KyG zlkpC8%Bz&02DsL@Ql(g@-A~1hsgC(vT~Ws#S*3(JDYt#p3g-I0pZDw+&iLR^>2JpQ z|E>^7?ihm+cyKffL_`R6C3U{QoGH|m0!IZC;s!9_d5iw(pW zZ%wg9&_-#@Nj<21N`|D{5R}CyG|kcUrUEPrA%YCm)n3;ei1)5v@*|(T7VO zpgcD&+SmBvQcs8tlPlRiEcR2=y~fdP@%pbA+my4c-9XeXQ`^fmre3 z^b@k!N;=z;Bch>)Kl{4pvTFBpge3}q-yH%OP^i&tUX_M)LZXIdSY!vg{O4bO1XS|o zNB{ZTq@GOc_EMz~_e)xkKJKh4pXmQBUQ8Sp`Mv0c$rh6FEK9=-dU;rAg z?ctA(ZMdZj@_rudKFZj8rElFi7RZDLU0?))T=o1HrHyajU6H#e33dRm`svR$QraHu z@dzKj{y|~s(Cc+w8xq?Uzc2+*_Jd)AV>UCk^s3?BgDIF1Ns(GaJ(%EJi;G84#I=+F zZqE%g535lBmWLdya`w^&Rf28FBHe|c&+yTU{T5ab??KP?5k(MCiO8WT?u0nO5Iv6K zhbcv{AnmV>4^viC?3lkAIUVIK-`f_sq~@zNVs{h5KhN@cbou0rf#d{Fx*HH&7b>r(Y`Y;H_jPNRs|5{W<^mR#=QK=aL- zsf+bQ->HYMCo!rkuT@w1Ra`HoRP;g+Ud56}Y*0eKQ`6v%s$)FIxzdTL^4HuX>+hY~ z%j(MIp~wC@g#V=$oA&{BK+&E2Q7=Km9zl8mINBKgZWRZFq%_4a&Zrf-lh+Cm9ayNP z?|1=IN2o#|3Ka3O>AxLuqdd*#i*7gV9Eo&D%?!1+qukP;+6X>+VQ7-VgX7yW)Rf)@ z@L5oIT~NCq^KJEmq|NwlTB{ZnE0u|51j+c9HGev6Lr1BxQ#$BYz4SVF=CRE>iNf*V z_M_7+(cGqEt=yKg>$y#})B_zcpPCnUH_1%yTYYIke--TuywY>o1VmCqp6zJv!j1=| zO6`b(sxzU`FzMbvP-(iu@tng=^`J=(QSvFhK@_yzF8t|c~f0I1Nb8+7K8Cni` z9~G z_)EwvS+KM=s*yOtDWP;G^a!Wwe+qTYPqKw=i9>&RhPru4ElhLWJ2_E9 z+78(+7KLu^z}(Sog8Hupz&dVX8y>h~r2y-2zr}@BY8>~l zo7-0y@GL=dUNL!3W-9Tfkp1!>Rh?XZU1jKZXD12~|3++>I@&|fW1kX8RtC*Lvw~sW zrR^w^4wN7eKs)4TbpzeC%>txuI#WcCU;&gNXbhRJI@gUjr~olQ%-b&r6a1%eY7ODD z#{GVqEy&lF6Y4O73e&TjJuH2_60ni@0H*-m0JRq%wck%y7PTO9Y+D$=OR$jEv%6QB zXe_2pKlkNzNYH?}4q{|ej6ThF@4jBTyRcUKY1EUEYUWjpZM6?O$L;P*J%+GikbQ~* z{s{8xx72G}^S+OxIKujqn+#zmY0s4z2RfNAx1YrqPJGD4qCfexO7n;^lec?)ki$uh z8*=q}$`t?g0Py{PoYHMDb|VM`+8&@jt1rpxuK74|^wh}#MHWIps!5|fG=Ic z-yV*J;S^HX1Aur0uah^BhJyrLI^mtj6GKh@uNS~nbhzgs@17GsF@nIEo@b@`UAZHe z&oo4Mf|f~$w#Xtlf!O$*3Pr^bd(gF~Qp zRjX3NiD}Ku#M+t*KH`sdi|m(N2$cB!D0AypdyOG`EuC6hY#ts7kus^xqbi{`*o9YT z*67~0tb$GX7(`#X80WK@`%j(Ct&ARjW40@-Blvu(O;uccSwK6V`ihZ@?yrUsqPq@5 z5kmz^&iOP(E+fMcB8pSgRPYP`*;h^c%bXS-Vnv#@VaYs z(4Qo|n=%tI66U#rM*ulR)@t9vt$K$c+{L`9AyRv&|e5`(a$^e1A2)E zHk>D#Y;?CM2o*6(*Po>xQUCEOaYF|Nw-L1d;=S{ow_mQwn1W;=-F@Q*r;h*NXvWRJ z3xP8sT2Y;he);0&`+$usXp3cEV#2L(&6>+f{DBdIQR=C|t^nj5jC zx!;~QD5xRT7||6jX>(4pS1Wj_(spYr8TqqlK_%C9XYM1O*0E3C3(Yy_cPKL?;5gVJ=r__SNEX)m%Z$1y2SqmmfoN7IFZWL5OXjDfLL@f( zc|L?{e^8fF@xxlIe^Zn^@RiKxRwG%gujsz`1Kz(KW>Oz*IGM5oa)yGD50OMoZ`VY!v*NZO zsC*kvzb9;T2ET?~2wERgJ3kk_)pJ*9fbu|$^P4HRQG&*8u>`{D4w~QQH`RYvFiJS1I`PTlC{Bzz6LZo{88~#8c z3R|V@oD+Zb&YcY6Y)Dy?H40rR>oH?`Q8Ig2=5=kSU^)0-0s&!9dn%%E9o3X?IgM*M zm&eW{;CQmm-`+fTw%_nk=IH*>w|Jj$A_yt@{JY0Q zqjL#nhVA`kJSkyae?NOe#@MrCCnF*uL!;^B>LiqtsvyC1FWQ3{kR9&i8KbMXD0v?v$w-t5n^Y!h;HnCxW^nk4~#m^ zXvwxvL8yx91H_#eM<4xP7%&*Q-|#~jGl8W)O9edz31efF!X!Q9tpR*i!zK-KW{V&a%JjT@lS|u;UH!;|i96g}S!KjTeF~E_o1K7tc}`Qu z9b}9AyA*Fj9ctw5b7jHz?1a+3%}mnehF=tKZq2!*P!IsXQMF)60-9_oGD# z)KhwGdzm%BawPL<;W`h>C~Ife>S+beyp3=ec&E~e<@Qg?%y^_DB-rkuq!Qa`!teujLe%EDdo*& z&wSiG9th`81!h){;%nVWdy}VHrh@oZAdS=y>GonN`Ml`^KcDN1cQg1)I&(1MuK>&n zG64xBe1&uZKFfj3I(oU^7U=+tknakqY(1{shI1VRjq*fNstcjh&}scr1Y;d+l(w#k zc_*SOdU1^2d?UQHvwrZ@*-g=q+pn4HnNb@wq>=M=!pqRn2w#_em8iT6-M-f(c~yoU zahI>k_r#oP70S+A_RX(ZCVV;6rO9}7-{6Pqu?wv!NiJ?NX<@Z1+Aw({`~|R4)QTT# zMt`J=c6wZWkB>3Y%3-E6REN+k77awNZGtCvg31Bw!wr)&ME~b2R>T%duuMP!k*LwK zic8e@()Mav=V6kLa*6#q;h+KWYcA=i3!NWjea3Aaq7~!98jI-532Idzd}|~UK3btA zp||BoALc!FS!!9Avv2)rl>53y5J@L4>ZyZ%$G(Lnp){5dIEDQqj|3dBwetB|NvMbP_ilSSK`xAEvYmEz zqlKcQT5x4lbTttdJX+!VrdX1?6Gzb@#uS)Y4gr@dJUwE0+xC8Taa6ew*DiWxZt?6} z`AoYWyPs^paJI(h6R2}b=MIioW5sjL*aJAbOVavD?StnRg*i0h?~Um%QVn~oRWC2 zi#<~#(@*llm+1h8813HhoO>cPff8t8;Xakxu2^O)od{>R#+&y_D|k_sO!rBw-#6Mg zwS`-&>c4fgZmyo)Ryxh>oLQEjZ$~ez$`g3hMF@P`NwnCj))LkflYlx-rss+Bq?|XT z+uz;m`8$+V^^lFuHK-if$B4T#!Vv_002z6VxOSRVLr!xclm-M71UTK|x9?Bj@A_Wo z6=Nr&hEle7l#y75E%VN^v20VRnt~Rg7*>syXLq`JIX2oB*It!&`qN?H&N>h?pT2J+ z%V{0Hnqu8$^CGQ#-$v#qxy%91dXw;yMM!VD-$?0vENaE(=|4->xlE|o?P|;!1Nv6C55Zlrd^r882B6W>%I zr;PlbE7b8-dyrD2Hlfv>OIsvv{DygWQYK+$68UooYRiJ;`D+h zp3>#$zU$1TKNrpM0PT%C=dHg00UkyZ{hylXH5}QN>1yA#GgukL7R33P=(TD2OzeH} zyAduOdYslk(&akHDO}yP~v9-(0*>{##rj9Api7ThMS3J}ZzB zwRm6|Wt;b0GA4bV8xNbWt~}mTEdTp;-A&9cZP7S8ve6xpvoT!MAc!Hbx_^DP833@` zvGhs?eR=|Z&3)}VC)b>Tf2Bk2q(?Un+|#VypJ49nMt9Cw(VOcG6yTpNVf%Yn5x2pM)k9xvW#Ezr5Pv#v$1aFZwCd zz^1=XR-#Vv%%`t)WS4I>psu;azbC0Kf~9>YBeZt8G@Rd;jdlCRz?_W*owKmeo0#Uh z@5C&OR2NK=(dQ$sh^yJzX9-)R4@n3}SXebw8A_a8^SMy+xp3P(9bVvh3F29i z_;iESg?1(?uiHX%h}JBsbz=Upky1iyK3n}u$BfJe25rXuth&FcQGD#ofu!qFd}k_j zBe=ttruU{Wx=#ZC3$c&6wn%|OABzYzJJVvg_4m~}_PxjE4{N2U=H%`+O4K&6&fNPyvD=2Z}CyI$7ufiyv4K{^B; zNtZ;zZHyp8GT=$E;eb>Xg1EB&lB+*10-+oAM?~l`(leMe&cElhQ zpAR8^N1(nw!v@Ba}lj@f6P|LW?GL=nkw%8gT6fq zz;#>(^~Nmfse4Gf-*9hyGLevO!9fsIIufTh{d%^%axKS)Y?oILT>*7&`tlJf1lAgD8w{y}@>WV!~(-tslC3$PN$`afdE~Wd%fAJQi z;IY)g9;HRQutuhTxZ8AcG0pv&X)Mgeqk%>vi4oq}i&P(u|5C?jT6$XMXFb2U$CW=$ zO+U~1gY~QN4srMpkq2KF&9}+}){ZE8O4i#J-^=_$ZPhvA4r`LF1h;<9*(`j#8;lBc zOUIMRoQ9ViE}x4JT-DcTyM)G8m7tmvX}viZF0xLxUF^3B|4i12?qy0t+?z|&L`dyHm=mUX`yIKBy9ZBBRzHI?A=-Zf5cIHOrKmX;eWpkO2 z<=0)Bj=zx}yiBWnePTfx?=s=OPkx_Q5wn8;@D|*<`OEUu&NT2;OxM(3EK51oYVgYw zBQSq{pCfK5ben(zM57Y@7~YCSSIw))uf`R!5YNxV+^4rbIBe}p<#wG;mox^iKslYg zj+pli`yaA9V;de1q96LnW_B3+@n)37KCaqNuZw7az17=iS6?NHs+Mjs=@e&1x)UJF z3tj0A$HN=FX_0CTB>`(T^E-2BUz!X75tp<@PMvgMaUmVY^NXdZ>=|U;LFdSBnM_V1 z|G@AdZA+>j1<-or(0ubRg!0%g6DSTlHSP9FUnCAO@)**VIbN^)nJN*xGLTmZc8t4? zStiX&s>P&F(tJpXL~-~Q73Q)53`(hB>E8N+Ih~zQ3rnq7$)3j3Niub%wwmE)#$&_jYkV^* z3TaRGNf-}}v$H@v9x*>n*IbRgCYs3VRNG4Buzw|SS+c*}@QdLQiRO^%D*D#u#OU?% zRUPLat%q*Z#@VeU$oa^utIWap=OfbicYg?|qyLjdzFw=H0lKo|kj^Yvxl) zOgh7W46ME5_sY+4&W1H`+N+T6jkXz#*Wt@(dslw#Q+Z^E>zUr3`VilBZ8st_=cLI8 zPY{JX<1a3?WW>H2i+H-98D8oa4WR2L%RTY%+KD@64e>_)0_BUbZ@(M{0pRGO>4vnA ztzAx57;q@&cM@*N2%AI8!pt|`Fe6gk?X?3~ABg|Z9%K%ji3FF7+_djH!^FUL9~9)F zQH=`%Ovk))iwG_g@z`p?QV{%WC-?yxF`mgQNo!#3xFVREy1RTO_*eGoc7;djwXT zb9dIC9!$`KKE*I5*Y6EI?Sd`s($_m*&v&q|(DiR5H`9wLq?_y6GPQ`2n=*ts|L9Tf zn_(^J-a+&C<0f;Ue3&Pw6>v7q;Yl-5>0gL}n+V<&)04K`Qz<%<_z>v~u!)PwLQ0?O31J0K)Z*7VidOaB8~XcVkilUXkPmsN^=nznJ?SYE1qU)a3V zg}}^Z=;bs)kVHQO$tc$60#+rXR~jWCOKZL{@GHJ!ku|pajAdo?7BGt~cdSImIHfdJ zsN7N{HEMQEmi%W8oi3uIrrJ6%a-owRgw#?JqE{n}e{Z$nKZaz7l3ZS5vO5)J1G~;d zM{IA&nG(7+ZC1~dD)>DYk8Imw{7i!0zVOOuzIUVX zD|{67dh>LD2oRzKNEKz_O+{e&E&*u+;Sm(@5~+(`U7lv7`30pSC90hkd=da6CK&B9 ztu(muXljgwi#bf5pe)(ru7LJy=xX{m--*u`r z4n`N766Z%b3tN74SHdT}eVIZRnZp_fth3jClv8ReFwKu8eGZU*W)wD`ZNm9vo4bGe zM@K+QhB9ij5TGCBhLSY*brU0;N}Z}YNBx6BKIz+DU4%$3eV>5&%a>LfmT!(92}RjS zwy+3Nnqq0X#4?}xOos*9k7iFb@&bT;Q^;jB67^YObDw?t>Q1WxN1oK`oM z96y5HZy+^r9y~0Vl`|+eMOLG>JhX4{d5{JYk;9Czy+die?a7%yD9BBx)MRQ7SL3jY z4m^|2Dz3Xw6ob+FI*e@Zc((oBWi~1Hj;x<|3#^N#cPgJ2H;pm#>6ptlVK?@@vyvho ztbd%>$qrbN_`*KIWnMnCc@QX6a(&BlMxvI2oquV^t4*&Fm2G0^q|~BV zv17#+T4=+OSc^OB-QG!pmtdLIU$S@XefuCFnV$sL$#`IoRVhQW*znh3+>4NlI`(T-=5<;njBBt8k8($K%P2&n=FPoND0>I_$!9ZBV zAOC{d_>-!3;Ojh9()n@Q^cnbCS%D4ui*K`&*Y$gXHu1qkr)*zVKi z;~y)uWH}$Blrn2PZBR{x^eij=c}|0`AN6ZXyE+ODBb$^TLWoS94wR7_JakcD3TLqQ^#tC0@ zTAKgPRi-5jFp3#5YD2iG%R?h+3h55BpS(et!XFh$m1rDnO{08$`ftKzd(j_u&IKB# zwe^vCvD^`mX%qelBf$0!=*U}aK2l%qO}~Q*f*DK(B7>lW1j(@o+y|nsmyP~Bq+|vL z`^PUVuE(h2HbHMK9j2UW|ClyIAh31kgcv@by)-+T2|N;N!{up0%Zm36aEqLoq%o~I zYU}sKx_(4DulE74x`jy(&U2q&E#=M%YBg>$e}EW`$P4FZR4cIJSQ%G^7s+Ha{!wjBz*CEKWYBHC zLkm?TyE3JID^QVK!Ag1(a*Khg$?HLW+297&+yuQl(6aK$kR4|2ag~Zy#^>^BuhYFR zm~RB-t%V%=vQh*w#}b(Ncslm?sSn3}@s2(GA)zuP&}VDa6=N|}n{8eTQSxq>RQ|0) zt5r2*>D|yvFcAK9NRd3CVX1TKBY-$m3Fcp^MBKY2I2;eS3!rTGzjy@L{- zMTX8iSOr)|DVCS{n;q;7uou}KXHtG_{==%UpZ7s(5BP*TeQ6ZO$4;U;+ypXl9K zFUStd@hAnns-3tp*{&P3%O4)GyvwXy!3HR+l?E4Y-$!5T$XiG3u1Hqjdg=6RZV@!| zjkqM)hb6?s6<}MoQ%aXzf>@=oPjCbgRno9Ygd_vj;xXHodVEcaIsR{EU!l+FV&yGl zn?Y1_+LbE7M=WE@gfr4?E39Ot@W|fvE+tWiG!!}9a?fFoM_9Qp8f6szT1(x1{N<8&&g_U-md0g_Mm@IJMUr{6CA#g1xh)Hz zT9T>TafQT0it3F-G*Ezb<^*Kv=2xR#HeQ!|wwBA^c;dq2c`Fg^9e-oRn;O&y!%Igd z>P`Y75y6glej)v*mrU2yPIc?F-p6{fLY%g<2RZkah7+BQ~Hv7_ca$_ki?4D}Sniqmg#$m$g4tX8b zXeF5nickpx zcjVu{;%+RJUSi)}+Kib#j`WicIS`V;o{Sli;&WhV@2QPzf9iWQcPUW4*=@y zYzffbIzFCbkQ&7kV{`6 zlWCwnDtU#J8A?hh0L5Kuy4XY{LvBR2e(gf&0jOiKE(osVCQI;A@fTak&pV6l^9~!D z2bp^>ei&$zwz!^(cf0t{LSl`?xw2c&*KdY(mnBQzPcd~06&JkYHEra7_wzxCA1DXT z{JPt>;wT6%bWTtqICDV=3#`Ub39|tnfXT!25JhYCUrX=9|GV&{>*BxDc_jgkTf3?S z#q33j@Nu;I)8A8!YR&=QYp;Q~M-F*hykgB%hDmzZV@bAvPQ1!cuut@SWJJKZ@V$}{aix`Z`5OX ze=jXn5r}!61emId2@bD_<_v$Ky$9mARd7E8WT+Y~Ik=@m84U;egh}}e=EFk-NqsBc ztKnlS{!^iBeO?iO-<4Y0+q&y{T4189dMp_l>*qoqcr^R#2j7DP83roSJAJJ=S-lr@ zrE;~cQ&@+5$SP@+zvhu&3Qa2_0>T_|G?5R!Dh3HN)-U#gP6GcLH@=t$Mo74s{6}9! zx8LJyy2c*bE4X7cLcirPcFa0+qoTJn3xtm5Ai^zvA?wF%hlmqS{N})}e~ySM4LlP& z;}Qg?<9_^0mJg1N+13;b?#sSCES#1b3T7@nP8~ z2Z%9&6UqJq$mZIby1|DP+fuu7VTmr_9;r)lZ{IpQV>njKI) zQ{?7*yZedv-4rI<{YO$^Fi{e5Rm69%AcEgSbn)mb;2*2797sN|{PoZB$NZ-@#Q&2Z zw6-eN<)#R^a#-l4uPq-7Ej)eiD!#w$TJtovDsnj%AP{cD`fP>6mnTetXl2kkBWAcojNJRS zlNMBa+;(^z)vi~<#P!a8cVDvZ8F|{2eK{p$0M;#%3;v_%PFXTYr!IgWENfb}w;*>f z&4f+iULpE;QeYLYg|X!Lmt!dYx7?Afh(`$5oS*SFaPp_lXM#JJX>S?-b#L6^lZCAq zf?(QKsdi(ECqvrZuZ|OZsgPaF9eUk7yVgA$TM9mO{o(O+kc&@6ikfTN%rd7@dI@Zx z^0llV$mzB)%~$7lti)0mLJ@s>M(K`_fx`3OsT3vQ%#4VP90OXSl1G2Cz`gQ!Zmgcg z?^d**{!4wtk=uPso~4W$D5(6v+$pp%b5x^A!p>pj{AoDzqAj_wKmatTS6WxIB5Sd9mJ zwq(H_*Y$*-TWifS5$CoGzF-LB0r!EW*GhoL5B%Z>U=d`#)_7mGS^3eUnCNMGlqkCq zlsxv6t5`(rq#r_2QgmX}s9Fm(WUieOH%~2m>JPRZHGzeX@7}+EVqowCzn~3#gV&bD zn8hD;t}FIQD(5QXX7mmYuV_VkZs{B@SSgyY`BE@$q7ReKV>!JibvZoB{awX}r1 ziyqN2#m>chouw!I>MtQMu3gy;oYBW@rS?qFFR9iDZv{Px#_bcxB;O!b9!B{ZW5MkJ#=k|Q9+1beV&I9zcJ5{DmF>+!D z^W5O4nWV#VoLURP(D1P9fSQDGAnqjUV64)*5>S7x?bN!zN=*?_cD{R)E{BSyJ*+0l zMYfo`rWu#GZWyeF13;!RbwOi(AL&A;~IVs>q5-G2uy7MSr%6+NEhbeuJtvyM6MR zi`_}qRmXf3%6kKe6|b$}80OI$$=$;xi`!jFw8n$kpvor6WOZ`5&1YD{mo;Tqe@D~p zBWnG(14#|O^ntiP-j4ay9$;5m`O zu$hI$abDoSl!ApSD5l?6~4#Veb6?Z>F1~VGcuk zYYM7M$RF={>%lU#lq%MKud<~e`)iqf%B3dFTi!B^P1azyVb9?Suy^Rb;KoxO9V@X+ zyq|1YX>`B?IUb8=8u8|U3_SRi1LRkUA31RSd?XVlYSNWS;u|FbgCE$Z_^w> z^ZpNEZynZj`~LqA21BGQLh=?wr9rwaWPqU3Na_fw0geGm--swF-Czv4=?3W`0wN_S z9h-t6j2Kd*#`l`w`}6znx8u-5J!ISK^}4Pzp67X;kDtmBGsDb+{zS9Xf?sUn7I4v_ z-`>t_qNd;p+ZLZ<@?7pq9#pT?x!G9^uqUham*=qNZjBn2mX;A6rT}$z{TXBDLk6#@ zXA=2MZpo2xmQbCYJ2SuSDjPvv;@i+rwNE511DhnUACc8pl3huKPLB1q3DK_oZ!|2t zM(v`q0q?K}5u-XZ(`2Bh82Y_6Og-py)Sodpo^6j8G>iULy{*P8?OIi&3wDG*iE zZ1;Vj*_@p&tO9h!Qt%7%1>6+f0C9>DiN1AMJ(_>{Sy^M-t)$t$vep$>p1``oP}=bI z&Brvou2W6+z7dtZuWUZ$)k*q!7474$tIo%{wm6b+e)X$xQLB5blU}L8A8Q=73JAM$ z(nzgzX)PqWZ-Dz(vEm)cy6v>yV0VRyd?^{aY8Q~s%5)`(y>-Lw@bG%!{Jnv>&2C?6 zrxNY@@$|Ib!#xWFgVyYWJ%?9Ka5c9nmFh9=dMH?j&npuSW1)d_MXTa=Q8k@T|Dm^@ zEluma&qi6VMT8g_Sm*WLml?g)v!c9wemaG$?w{+@tK=JzR#|j!u#QPkSXemiY>mO6 z@3twk?>5MbdS!@uW#j23zpqsKWMjcNs(*1f*nT$21=tfBX@}mKaFODNF3JF!CmlZ3 z`iu#Y?i!$?{ktDHcEgy9XHUOp}8ddSTpCHxb}>4 z^qJ!Ib!fDF^kYcr?@W!~BKLFCD<3yb8ApBJ+D)$%Tr#9wir}JceDzQ-Rd&g|+W8lr zUp;aV+A?c%RjN(QGV(RHYv_ahEmWsqGTv+WV1qz^F#{XQZUsl9_v_OD3bE(?0e~S= zE!0S;1E46^`1Gm*xXx){xZGTJ0Xf-cwT+!iUBbLN(yl9MwUs5czNRZALg1vUikRzz+v>z*g;^){=mYf_7)O zrtJ%SfqPOAC>^uQ1RD3%;TWw%5Kn#Hm?EG;ZmwMTK$VTs>c=P7<~ z3otpA-}X`1g^fX!>r6j+7^2y(*}T83>N--p9eplTz<-(?#)aUeQ`zq2=jjL^5&rxj z@vN)wVwvW2ZJv7D$`)$9U(=ydQQ@gc;5hQEVEyOm#KPxxS-1vZuqs-al`H>i?wdmZ zYOd~>deJxTOJ_t*JDaj~sdV_)OnM=5GrgSd29^wW0oG!AWnkS-x>x7LP(;hWw4(Pa z|65%HjM*-HONin;CZ2OVNzA+*(3b~EqaGQNfZ!EPxj&ztIm%L`fHREKo6iPb*nVv_ zwp+7P_rY1a{V_gRQ8%hV)fniv8#QD`>=IY#9N zwand>8B1SNC*^$Ip=d1bXHZpkl+>*Zg;=22AjUUu?q)rnP4!$FlYLtxY_!$WD>%6l zw!Fk+RE`lh^FBi^ZXF7+Ql_IA-s}vhLxu-zvfhDQV-;VxkIemn+`2mw|M|jlu*32m0an3z`P;`&1;k>g~=>5w9%U6Cz=px`! zw^({l4wAM(X&8$U&-nab*m2`Mxji!mESx#J?`?WWaSgT^2IUo2TP`$US!!iwj5M zFfMa8D|T*?~X5(A5+b>jTz^n+O*5e{KsqDRUR-nKLDh!yaL_L7~USRMZaJgE7~F%=$L&~ z%{>Ge7Ur-4h0=6hlV}t1Cei}{+pca=bnlkxkjWZvC_dG?Z@$M}dTT=f;kJ9*xsIE) zwi#9ZW9Bo(`b5c3!L_vL?=-j7O2L8*h1FfzRRLK|RQB-x!N-YO z)Ha~Urmfd5RgYg*vj#m9e&p>r6=3@&z-m+3_+}t#R{j*YNKxMwN=$G(^6)SOJZ!72 zWBk^LM~t93wAtx?vYP3p&Wm{f?9MEAe=Jv__1*m)kIzdFpXedhhGe{H*b@og>$EG( zor%vxT_L9=>cKIYMyyLcat%ODKZC{EmL}^A2)%Eehl|02MO=UT5pHZ1GVS6gVLPAl z!*1*Qit?FmFM?dywR2zrF@tajgfnfo`+~ovIm^-=H*9c$k(+!&&Xyukk{m8e++T*N zK21ev)8c_S|DJ*BbsPxTn)H_UJt#D*Pyn~-a`ja{00{>MwENyoir>GMd)UoB@SW+& zo?ErV-N%=i8SYJV-uF#zMJ+oA^runhy1W~Z=Ov-IvgowU`&~oJ6erM~Tt!NOhL0}s zc3GY51dVUTR>$=oqmq>Ywip28OUtgA#Ca|mfxO#R?5*u^4C+;3Z5Jp2ilstLfaEXd zdrq)m(J{d7sVF1y45+U{^5X6lQIS^{}ccbSy6~;#89}vx3^PtQ&O;o7cF=vhLm_@ShzR;6H7pvpp^H zxWahsBG+V!6kEsdJd+ADWp6&)X?1zjme(XH>9IWMXbYK+>=@s;AUR&y@V4Ta;nLuF z;i)bwh0YhCJi~;t+1U|k3cSXemsX%<*pOc3633Odu!2A60@WA5;f^9kgS#s7$qm<7>*19;37MloR6-@SXc1?)hd`J7~* zmB#La9u;68{PtEmqOx&d6>bLpDIYT*wSWt8Oa!i?!imbQ1q+%GE-|~JZ?`0$OD-^D(LeS7T2|mB+glS3pZKi zK6tE0qrz1?-mWD9P7jF>pjk(mE-1$5TWQxVd-^p7g#0|))!v+?z=Xo<^#JT+{;cmn z*;me4tk&K-w@)ZIJRn0iWZ>%7j||*ym0+{!`eP3WX zp1Uv~x#oX=)VX|*o2d+mt}ewv>MH+>M?^m|c{2OW0yR_CW?)^|g}gR@j7^i@zC+PL zuiXPlb4#Soc&uG*K>6p=fxSq2<=ceJboD+xrK>KZ`=(PJp!0<`$ssVZiuKEB(

Q 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μG*Vqu*XZq%6@FPK`v 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 literal 0 HcmV?d00001 diff --git a/docs/images/raredisease_metromap_dark.svg b/docs/images/raredisease_metromap_dark.svg new file mode 100644 index 00000000..195a3e62 --- /dev/null +++ b/docs/images/raredisease_metromap_dark.svg @@ -0,0 +1,1705 @@ + + + +sentieon-bwasentieon-dedupmarkduplicatesbwamem2alignment to mitochondria (bwamem2/ sentieon-bwa)markduplicatesmutect2mutect2markduplicatesalignment to shifted mitochondria (bwamem2/ sentieon-bwa)sentieon-dnascopesentieon-dnamodelapplydeepvariantglnexusbcftools - rohstrangerupdvcfannocaddvepgenmodcaddvephmtnotegenmodmanta + tiddit + cnvnatorvepsvdb-querygenmodmanta + tiddit + cnvnator + germlinecnvcallerexpansionhuntermultiqcpicardtools+mosdepthvcfannofastqfastqbambam vcf vcf vcf vcfeklipsedefault path traversed by the pipelineusers can configure the pipeline to traverse this path instead of the defaultusers have the option to not run these toolsreferencesrarediseasenf- core/ diff --git a/docs/images/raredisease_metromap.png b/docs/images/raredisease_metromap_light.png similarity index 100% rename from docs/images/raredisease_metromap.png rename to docs/images/raredisease_metromap_light.png diff --git a/docs/images/raredisease_metromap.svg b/docs/images/raredisease_metromap_light.svg similarity index 100% rename from docs/images/raredisease_metromap.svg rename to docs/images/raredisease_metromap_light.svg From 4bfb2d12a23f95ae8f4ebf764d8d8a4dae8710ed Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:58:31 +0200 Subject: [PATCH 1424/1921] update size --- docs/images/nf-core-raredisease_logo_dark.png | Bin 32132 -> 175714 bytes .../images/nf-core-raredisease_logo_light.png | Bin 28311 -> 188284 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/nf-core-raredisease_logo_dark.png b/docs/images/nf-core-raredisease_logo_dark.png index 444181d1501c31a80e31b7470c29c9d0e761d2d1..2d7ba154cc2fd3c35570817ffbcba39075eaee4f 100644 GIT binary patch literal 175714 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

aYxWES{WG8Rct^V%Cp} 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

l*B9#^0tE0*SJ6}}p@K@BHzf^(O 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 diff --git a/docs/images/nf-core-raredisease_logo_light.png b/docs/images/nf-core-raredisease_logo_light.png index 4ba80155ef42c90c54bde82d82b29eb4307a67da..d6c4c283aa9557a1e8767df6f0e3e953e62f6048 100644 GIT binary patch literal 188284 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

=q~pYuN!VsFQ7GVQ@f!mQO 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%0DBasA$fS&w}aO=fv@KS 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 DWHPYM literal 28311 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 Naqoe8m6}c1{{z*k&;bAd From cf4872575bb6d44d6cccbf98a5f72537bad80f5b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:01:41 +0200 Subject: [PATCH 1425/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59f1b418..2def1d5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) - A new parameter to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) - A `metromap` representating the core parts of the pipeline [#428](https://github.com/nf-core/raredisease/pull/428) +- Metromap and logos for light and dark theme [#432](https://github.com/nf-core/raredisease/pull/432) ### `Changed` From d2a3d5f2fc57620cb01a0388b55c37f2730d30d3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:08:04 +0200 Subject: [PATCH 1426/1921] update lintconfig --- .nf-core.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.nf-core.yml b/.nf-core.yml index 93aadae1..629a06e7 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -3,6 +3,8 @@ lint: - conf/modules.config files_unchanged: - .github/PULL_REQUEST_TEMPLATE.md + - docs/images/nf-core-raredisease_logo_dark.png + - docs/images/nf-core-raredisease_logo_light.png - assets/multiqc_config.yaml - .github/workflows/linting.yml - pyproject.toml From 20ff43147f2ba0840ec1a41b9a8166ddc3570e3f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 16 Oct 2023 15:59:29 +0200 Subject: [PATCH 1427/1921] add modules --- modules/nf-core/cnvnator/cnvnator/main.nf | 63 +++++++++++++++ modules/nf-core/cnvnator/cnvnator/meta.yml | 77 +++++++++++++++++++ modules/nf-core/cnvnator/convert2vcf/main.nf | 46 +++++++++++ modules/nf-core/cnvnator/convert2vcf/meta.yml | 42 ++++++++++ 4 files changed, 228 insertions(+) create mode 100644 modules/nf-core/cnvnator/cnvnator/main.nf create mode 100644 modules/nf-core/cnvnator/cnvnator/meta.yml create mode 100644 modules/nf-core/cnvnator/convert2vcf/main.nf create mode 100644 modules/nf-core/cnvnator/convert2vcf/meta.yml diff --git a/modules/nf-core/cnvnator/cnvnator/main.nf b/modules/nf-core/cnvnator/cnvnator/main.nf new file mode 100644 index 00000000..6eb8a4f0 --- /dev/null +++ b/modules/nf-core/cnvnator/cnvnator/main.nf @@ -0,0 +1,63 @@ +process CNVNATOR_CNVNATOR { + tag "$meta.id" + label 'process_single' + + conda "bioconda::cnvnator=0.4.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvnator:0.4.1--py310h2dce045_7': + 'biocontainers/cnvnator:0.4.1--py310h2dce045_7' }" + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(root) + tuple val(meta3), path(fasta) + tuple val(meta4), path(fai) + + output: + tuple val(output_meta), path("${prefix}.root"), emit: root + tuple val(output_meta), path("${prefix}.tab") , emit: tab, optional: true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def input_cmd = bam ? "-tree ${bam}" : '' + output_meta = bam ? meta : meta2 + prefix = task.ext.prefix ?: bam ? "${meta.id}" : "${meta2.id}" + if (fasta) { + reference = fasta.isDirectory() ? "-d ${fasta}" : "-fasta ${fasta}" + } else { + reference = '' + } + calls_cmd = args.contains("-call") ? "> ${prefix}.tab" : '' + """ + cnvnator \\ + -root ${prefix}.root \\ + $args \\ + $reference \\ + $input_cmd \\ + $calls_cmd + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + CNVnator: \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: bam ? "${meta.id}" : "${meta2.id}" + output_meta = bam ? meta : meta2 + def calls_cmd = args.contains("-call") ? "touch ${prefix}.tab" : '' + """ + touch ${prefix}.root + $calls_cmd + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + CNVnator: \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) + END_VERSIONS + """ +} diff --git a/modules/nf-core/cnvnator/cnvnator/meta.yml b/modules/nf-core/cnvnator/cnvnator/meta.yml new file mode 100644 index 00000000..ea4f09be --- /dev/null +++ b/modules/nf-core/cnvnator/cnvnator/meta.yml @@ -0,0 +1,77 @@ +name: "cnvnator_cnvnator" +description: CNVnator is a command line tool for CNV/CNA analysis from depth-of-coverage by mapped reads. +keywords: + - cnvnator + - cnv + - cna +tools: + - "cnvnator": + description: "Tool for calling copy number variations." + homepage: "https://github.com/abyzovlab/CNVnator" + documentation: "https://github.com/abyzovlab/CNVnator/blob/master/README.md" + tool_dev_url: "https://github.com/abyzovlab/CNVnator" + licence: "['MIT']" + +input: + - meta: + type: map + 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 reference information + e.g. `[ id:'test' ]` + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.bam" + - bai: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.bam" + - root: + type: file + description: ROOT file + pattern: "*.root" + - fasta: + type: file + description: Path to a directory containing fasta files or a fasta file + pattern: "*.fa" + - fai: + type: file + description: Path to a fasta file index + pattern: "*.fai" + +output: + - 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" + - root: + type: file + description: A ROOT file + pattern: "*.root" + - tab: + type: file + description: A tab file containing cnvnator calls + pattern: "*.tab" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/cnvnator/convert2vcf/main.nf b/modules/nf-core/cnvnator/convert2vcf/main.nf new file mode 100644 index 00000000..1ca05ab0 --- /dev/null +++ b/modules/nf-core/cnvnator/convert2vcf/main.nf @@ -0,0 +1,46 @@ +process CNVNATOR_CONVERT2VCF { + tag "$meta.id" + label 'process_single' + + conda "bioconda::cnvnator=0.4.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cnvnator:0.4.1--py310h2dce045_7': + 'biocontainers/cnvnator:0.4.1--py310h2dce045_7' }" + + input: + tuple val(meta), path(calls) + + output: + tuple val(meta), path("*.vcf"), 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}" + """ + cnvnator2VCF.pl \\ + ${calls} \\ + $args \\ + > ${prefix}.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + CNVnator : \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + CNVnator : \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) + END_VERSIONS + """ +} diff --git a/modules/nf-core/cnvnator/convert2vcf/meta.yml b/modules/nf-core/cnvnator/convert2vcf/meta.yml new file mode 100644 index 00000000..5df7bc65 --- /dev/null +++ b/modules/nf-core/cnvnator/convert2vcf/meta.yml @@ -0,0 +1,42 @@ +name: "cnvnator_convert2vcf" +description: convert2vcf.pl is command line tool to convert CNVnator calls to vcf format. +keywords: + - cnvnator + - cnv + - cna +tools: + - "cnvnator": + description: "Tool for calling copy number variations." + homepage: "https://github.com/abyzovlab/CNVnator" + documentation: "https://github.com/abyzovlab/CNVnator/blob/master/README.md" + tool_dev_url: "https://github.com/abyzovlab/CNVnator" + licence: "['MIT']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - calls: + type: file + description: A tab file containing CNVnator calls + pattern: "*.tab" + +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: CNVnator calls in vcf format + pattern: "*.vcf" + +authors: + - "@ramprasadn" From 83137a8b13c48cc39ff441fb914379f466395cd3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 16 Oct 2023 15:59:50 +0200 Subject: [PATCH 1428/1921] modules.json --- modules.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules.json b/modules.json index 6416e6a1..db78a291 100644 --- a/modules.json +++ b/modules.json @@ -80,6 +80,16 @@ "git_sha": "aad210ba51500be029740d088b4b4827f6f41509", "installed_by": ["modules"] }, + "cnvnator/cnvnator": { + "branch": "master", + "git_sha": "e0fcafde1e74156695fc27e90a6ad6325065e6c5", + "installed_by": ["modules"] + }, + "cnvnator/convert2vcf": { + "branch": "master", + "git_sha": "e0fcafde1e74156695fc27e90a6ad6325065e6c5", + "installed_by": ["modules"] + }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "05c280924b6c768d484c7c443dad5e605c4ff4b4", From 01223da5d499161d02768e0093cd34eb2a3ee05e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:04:34 +0200 Subject: [PATCH 1429/1921] update subworkflows --- README.md | 1 + conf/modules/call_sv_cnvnator.config | 44 +++++++ conf/modules/call_sv_germlinecnvcaller.config | 2 +- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- conf/test_sentieon.config | 2 +- docs/output.md | 112 ++++++++++-------- nextflow.config | 3 +- nextflow_schema.json | 4 +- .../local/call_structural_variants.nf | 10 +- .../local/variant_calling/call_sv_cnvnator.nf | 51 ++++++++ workflows/raredisease.nf | 8 +- 12 files changed, 177 insertions(+), 64 deletions(-) create mode 100644 conf/modules/call_sv_cnvnator.config create mode 100644 subworkflows/local/variant_calling/call_sv_cnvnator.nf diff --git a/README.md b/README.md index 7801900f..e9ebcbea 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ 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: + - [CNVnator](https://github.com/abyzovlab/CNVnator) - [GATK GermlineCNVCaller](https://github.com/broadinstitute/gatk) **5. Annotation - SNV:** diff --git a/conf/modules/call_sv_cnvnator.config b/conf/modules/call_sv_cnvnator.config new file mode 100644 index 00000000..186bdc09 --- /dev/null +++ b/conf/modules/call_sv_cnvnator.config @@ -0,0 +1,44 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// cnvnator calling options +// + +process { + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_HIST" { + tag = { "$meta2.id" } + ext.args = '-his 1000' + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_STAT" { + tag = { "$meta2.id" } + ext.args = '-stat 1000' + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_PARTITION" { + tag = { "$meta2.id" } + ext.args = '-partition 1000' + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_CALL" { + tag = { "$meta2.id" } + ext.args = '-call 1000' + } + + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:SVDB_MERGE_CNVNATOR' { + ext.args = '--notag --pass_only' + ext.prefix = { "${meta.id}_cnvnator" } + } +} diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index bf37b9d9..98f14d37 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -21,7 +21,7 @@ process { publishDir = [ enabled: false ] - ext.when = !params.skip_cnv_calling + ext.when = !params.skip_germlinecnvcaller } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { diff --git a/conf/test.config b/conf/test.config index c7593f76..5fbde3f4 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,7 +24,7 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true + skip_germlinecnvcaller = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 51524fe7..dba0420b 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -24,7 +24,7 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true + skip_germlinecnvcaller = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index f729c35e..64618d12 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -24,7 +24,7 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true + skip_germlinecnvcaller = true // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' diff --git a/docs/output.md b/docs/output.md index ef1c02a9..9509ef0a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,57 +10,61 @@ 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: -- [Alignment](#alignment) - - [Mapping](#mapping) - - [Bwa-mem2](#bwa-mem2) - - [Sentieon bwa mem](#sentieon-bwa-mem) - - [Duplicate marking](#duplicate-marking) - - [Picard's MarkDuplicates](#picard-s-markduplicates) - - [Sentieon dedup](#sentieon-dedup) -- [Quality control and reporting](#quality-control-and-reporting) - - [Quality control](#quality-control) - - [FastQC](#fastqc) - - [Mosdepth](#mosdepth) - - [Picard tools](#picard-tools) - - [Qualimap](#qualimap) - - [Sentieon WgsMetricsAlgo](#sention-wgsmetricsalgo) - - [TIDDIT's cov and UCSC WigToBigWig](#tiddits-cov-and-ucsc-wigtobigwig) - - [Reporting](#reporting) - - [MultiQC](#multiqc) -- [Variant calling - SNV](#variant-calling---snv) - - [DeepVariant](#deepvariant) - - [Sentieon DNAscope](#sentieon-dnascope) -- [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) - - [Stranger](#stranger) -- [Annotation - SNV](#annotation---snv) - - [bcftools roh](#bcftools-roh) - - [vcfanno](#vcfanno) - - [CADD](#cadd) - - [VEP](#vep) - - [UPD](#upd) - - [Chromograph](#chromograph) -- [Annotation - SV](#annotation---sv) - - [SVDB query](#svdb-query) - - [VEP](#vep-1) -- [Mitochondrial analysis](#mitochondrial-analysis) - - [Alignment and variant calling](#alignment-and-variant-calling) - - [MT deletion script](#mt-deletion-script) - - [eKLIPse](#eklipse) - - [Annotation:](#annotation-) - - [HaploGrep2](#haplogrep2) - - [vcfanno](#vcfanno-1) - - [CADD](#cadd-1) - - [VEP](#vep-2) - - [HmtNote](#hmtnote) -- [Rank variants and filtering](#rank-variants-and-filtering) - - [GENMOD](#genmod) -- [Pipeline information](#pipeline-information) +- [nf-core/raredisease: Output](#nf-coreraredisease-output) + - [Introduction](#introduction) + - [Pipeline overview](#pipeline-overview) + - [Alignment](#alignment) + - [Mapping](#mapping) + - [Bwa-mem2](#bwa-mem2) + - [Sentieon bwa mem](#sentieon-bwa-mem) + - [Duplicate marking](#duplicate-marking) + - [Picard's MarkDuplicates](#picards-markduplicates) + - [Sentieon Dedup](#sentieon-dedup) + - [Quality control and reporting](#quality-control-and-reporting) + - [Quality control](#quality-control) + - [FastQC](#fastqc) + - [Mosdepth](#mosdepth) + - [Picard tools](#picard-tools) + - [Qualimap](#qualimap) + - [Sention WgsMetricsAlgo](#sention-wgsmetricsalgo) + - [TIDDIT's cov and UCSC WigToBigWig](#tiddits-cov-and-ucsc-wigtobigwig) + - [Reporting](#reporting) + - [MultiQC](#multiqc) + - [Variant calling - SNV](#variant-calling---snv) + - [DeepVariant](#deepvariant) + - [Sentieon DNAscope](#sentieon-dnascope) + - [Variant calling - SV](#variant-calling---sv) + - [Manta](#manta) + - [TIDDIT sv](#tiddit-sv) + - [GATK GermlineCNVCaller - CNV calling](#gatk-germlinecnvcaller---cnv-calling) + - [CNVnator - CNV calling](#cnvnator---cnv-calling) + - [SVDB merge](#svdb-merge) + - [Variant calling - repeat expansions](#variant-calling---repeat-expansions) + - [Expansion Hunter](#expansion-hunter) + - [Stranger](#stranger) + - [Annotation - SNV](#annotation---snv) + - [bcftools roh](#bcftools-roh) + - [vcfanno](#vcfanno) + - [CADD](#cadd) + - [VEP](#vep) + - [UPD](#upd) + - [Chromograph](#chromograph) + - [Annotation - SV](#annotation---sv) + - [SVDB query](#svdb-query) + - [VEP](#vep-1) + - [Mitochondrial analysis](#mitochondrial-analysis) + - [Alignment and variant calling](#alignment-and-variant-calling) + - [MT deletion script](#mt-deletion-script) + - [eKLIPse](#eklipse) + - [Annotation:](#annotation) + - [HaploGrep2](#haplogrep2) + - [vcfanno](#vcfanno-1) + - [CADD](#cadd-1) + - [Hmtnote](#hmtnote) + - [VEP](#vep-2) + - [Rank variants and filtering](#rank-variants-and-filtering) + - [GENMOD](#genmod) + - [Pipeline information](#pipeline-information) ### Alignment @@ -259,9 +263,13 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. [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. +#### CNVnator - CNV calling + +[CNVnator](https://github.com/abyzovlab/CNVnator) is used to identify copy number variants in germline samples given a bam file. Output vcf files are treated as intermediates and are not placed in the output folder. + #### SVDB merge -[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. +[SVDB merge](https://github.com/J35P312/SVDB#merge) is used to merge the variant calls from GATK's GermlineCNVCaller (only if skip_germlinecnvcaller is set to false), Manta, CNVnator and TIDDIT. Output files are published in the output folder.

Output files diff --git a/nextflow.config b/nextflow.config index 9573e35c..fd3daca3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,7 +24,7 @@ params { analysis_type = 'wgs' bait_padding = 100 save_mapped_as_cram = false - skip_cnv_calling = false + skip_germlinecnvcaller = false skip_snv_annotation = false skip_sv_annotation = false skip_mt_annotation = false @@ -304,6 +304,7 @@ includeConfig 'conf/modules/call_snv_MT.config' includeConfig 'conf/modules/call_snv_deepvariant.config' includeConfig 'conf/modules/call_snv_sentieon.config' includeConfig 'conf/modules/call_sv_MT.config' +includeConfig 'conf/modules/call_sv_cnvnator.config' includeConfig 'conf/modules/call_sv_germlinecnvcaller.config' includeConfig 'conf/modules/call_sv_manta.config' includeConfig 'conf/modules/call_sv_tiddit.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index a3a95f1c..9ae8f9b0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -383,9 +383,9 @@ "description": "Specifies whether to generate and publish alignment files as cram instead of bam", "fa_icon": "fas fa-toggle-on" }, - "skip_cnv_calling": { + "skip_germlinecnvcaller": { "type": "boolean", - "description": "Specifies whether or not to skip CNV calling.", + "description": "Specifies whether or not to skip CNV calling using GATK's GermlineCNVCaller", "fa_icon": "fas fa-toggle-on" }, "skip_mt_annotation": { diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 28f4e8db..88e0aa39 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -8,6 +8,7 @@ include { CALL_SV_MT as CALL_SV_MT_SHIFT } from './variant_calling/call_sv_MT' include { CALL_SV_TIDDIT } from './variant_calling/call_sv_tiddit' include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' include { CALL_SV_GERMLINECNVCALLER } from './variant_calling/call_sv_germlinecnvcaller' +include { CALL_SV_CNVNATOR } from './variant_calling/call_sv_cnvnator' include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -48,18 +49,25 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { gcnvcaller_vcf } + CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) + .vcf + .collect{it[1]} + .set { cnvnator_vcf } + CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) //merge - if (params.skip_cnv_calling) { + if (params.skip_germlinecnvcaller) { tiddit_vcf .combine(manta_vcf) + .combine(cnvnator_vcf) .toList() .set { vcf_list } } else { tiddit_vcf .combine(manta_vcf) .combine(gcnvcaller_vcf) + .combine(cnvnator_vcf) .toList() .set { vcf_list } } diff --git a/subworkflows/local/variant_calling/call_sv_cnvnator.nf b/subworkflows/local/variant_calling/call_sv_cnvnator.nf new file mode 100644 index 00000000..2c6db643 --- /dev/null +++ b/subworkflows/local/variant_calling/call_sv_cnvnator.nf @@ -0,0 +1,51 @@ +// +// A subworkflow to call CNVs using cnvnator +// + +nextflow.enable.dsl = 2 + +include { CNVNATOR_CNVNATOR as CNVNATOR_RD } from '../../../modules/nf-core/cnvnator/cnvnator/main.nf' +include { CNVNATOR_CNVNATOR as CNVNATOR_HIST } from '../../../modules/nf-core/cnvnator/cnvnator/main.nf' +include { CNVNATOR_CNVNATOR as CNVNATOR_STAT } from '../../../modules/nf-core/cnvnator/cnvnator/main.nf' +include { CNVNATOR_CNVNATOR as CNVNATOR_PARTITION } from '../../../modules/nf-core/cnvnator/cnvnator/main.nf' +include { CNVNATOR_CNVNATOR as CNVNATOR_CALL } from '../../../modules/nf-core/cnvnator/cnvnator/main.nf' +include { CNVNATOR_CONVERT2VCF } from '../../../modules/nf-core/cnvnator/convert2vcf/main.nf' +include { SVDB_MERGE as SVDB_MERGE_CNVNATOR } from '../../../modules/nf-core/svdb/merge/main' + +workflow CALL_SV_CNVNATOR { + take: + 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_case_info // channel: [mandatory] [ val(case_info) ] + + main: + ch_versions = Channel.empty() + + CNVNATOR_RD ( ch_bam_bai, [[:],[]], [[:],[]], [[:],[]] ) + CNVNATOR_HIST ( [[:],[],[]], CNVNATOR_RD.out.root, ch_fasta, ch_fai ) + CNVNATOR_STAT ( [[:],[],[]], CNVNATOR_HIST.out.root, [[:],[]], [[:],[]] ) + CNVNATOR_PARTITION ( [[:],[],[]], CNVNATOR_STAT.out.root, [[:],[]], [[:],[]] ) + CNVNATOR_CALL ( [[:],[],[]], CNVNATOR_PARTITION.out.root, [[:],[]], [[:],[]] ) + CNVNATOR_CONVERT2VCF (CNVNATOR_CALL.out.tab).vcf + .collect{it[1]} + .toList() + .set { vcf_file_list } + + ch_case_info + .combine(vcf_file_list) + .set { merge_input_vcfs } + + SVDB_MERGE_CNVNATOR ( merge_input_vcfs, [] ) + + ch_versions = ch_versions.mix(CNVNATOR_RD.out.versions) + ch_versions = ch_versions.mix(CNVNATOR_HIST.out.versions) + ch_versions = ch_versions.mix(CNVNATOR_STAT.out.versions) + ch_versions = ch_versions.mix(CNVNATOR_PARTITION.out.versions) + ch_versions = ch_versions.mix(CNVNATOR_CALL.out.versions) + ch_versions = ch_versions.mix(CNVNATOR_CONVERT2VCF.out.versions) + + emit: + vcf = CNVNATOR_CONVERT2VCF.out.vcf // channel: [ val(meta), path(*.tar.gz) ] + versions = ch_versions // channel: [ versions.yml ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 95d95590..86e623e0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -54,7 +54,7 @@ if (params.variant_caller.equals("sentieon")) { mandatoryParams += ["ml_model"] } -if (!params.skip_cnv_calling) { +if (!params.skip_germlinecnvcaller) { mandatoryParams += ["ploidy_model", "gcnvcaller_model"] } @@ -277,10 +277,10 @@ workflow RAREDISEASE { // SV caller priority - if (params.skip_cnv_calling) { - ch_svcaller_priority = Channel.value(["tiddit", "manta"]) + if (params.skip_germlinecnvcaller) { + ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) } else { - ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller"]) + ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) } // Input QC From 5424fc5d36347ee3423c546c56f95884bea96088 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:26:52 +0200 Subject: [PATCH 1430/1921] add param cnvnator_binsize --- conf/modules/call_sv_cnvnator.config | 8 ++++---- nextflow.config | 1 + nextflow_schema.json | 6 ++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/conf/modules/call_sv_cnvnator.config b/conf/modules/call_sv_cnvnator.config index 186bdc09..401c6968 100644 --- a/conf/modules/call_sv_cnvnator.config +++ b/conf/modules/call_sv_cnvnator.config @@ -19,22 +19,22 @@ process { withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_HIST" { tag = { "$meta2.id" } - ext.args = '-his 1000' + ext.args = { "-his ${params.cnvnator_binsize}" } } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_STAT" { tag = { "$meta2.id" } - ext.args = '-stat 1000' + ext.args = { "-stat ${params.cnvnator_binsize}" } } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_PARTITION" { tag = { "$meta2.id" } - ext.args = '-partition 1000' + ext.args = { "-partition ${params.cnvnator_binsize}" } } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:CNVNATOR_CALL" { tag = { "$meta2.id" } - ext.args = '-call 1000' + ext.args = { "-call ${params.cnvnator_binsize}" } } withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_CNVNATOR:SVDB_MERGE_CNVNATOR' { diff --git a/nextflow.config b/nextflow.config index fd3daca3..7f5a802a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -38,6 +38,7 @@ params { rmdup = false // Variant calling + cnvnator_binsize = 1000 variant_caller = 'deepvariant' // sentieon Defaults diff --git a/nextflow_schema.json b/nextflow_schema.json index 9ae8f9b0..6b1de717 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -442,6 +442,12 @@ "fa_icon": "fas fa-align-center", "description": "Interval in the reference that will be used in the software" }, + "cnvnator_binsize": { + "type": "number", + "description": "Bin size for CNVnator", + "default": "1000", + "fa_icon": "fas fa-align-center" + }, "sentieon_dnascope_pcr_indel_model": { "type": "string", "default": "CONSERVATIVE", From 8bc53dc07b762736c6b9f6d77c5b1071c2165ecf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 Oct 2023 15:42:22 +0200 Subject: [PATCH 1431/1921] fix warnings and clean up terminal logs --- conf/modules/align.config | 20 +- conf/modules/align_MT.config | 38 +-- conf/modules/align_bwamem2.config | 67 +++--- conf/modules/align_sentieon.config | 53 ++--- conf/modules/annotate_cadd.config | 36 +-- conf/modules/annotate_consequence_pli.config | 120 +++++----- conf/modules/annotate_genome_snvs.config | 195 ++++++++-------- conf/modules/annotate_mt_snvs.config | 85 ++++--- .../annotate_structural_variants.config | 84 +++---- conf/modules/call_snv_sentieon.config | 53 ++--- conf/modules/call_sv_germlinecnvcaller.config | 32 +-- conf/modules/gens.config | 20 +- conf/modules/rank_variants.config | 217 +++++++++--------- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- conf/test_sentieon.config | 2 +- docs/output.md | 2 +- nextflow.config | 2 +- nextflow_schema.json | 2 +- subworkflows/local/align.nf | 63 ++--- subworkflows/local/alignment/align_MT.nf | 22 +- subworkflows/local/annotate_genome_snvs.nf | 20 +- subworkflows/local/annotate_mt_snvs.nf | 22 +- subworkflows/local/call_snv.nf | 58 +++-- .../local/call_structural_variants.nf | 15 +- workflows/raredisease.nf | 4 +- 26 files changed, 641 insertions(+), 595 deletions(-) diff --git a/conf/modules/align.config b/conf/modules/align.config index 54dae858..d55b2e19 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -18,15 +18,15 @@ process{ ] } - withName: '.*ALIGN:SAMTOOLS_VIEW' { - ext.args = { '--output-fmt cram --write-index' } - ext.prefix = { "${meta.id}_sorted_md" } - 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 } - ] - + if (params.save_mapped_as_cram) { + withName: '.*ALIGN:SAMTOOLS_VIEW' { + ext.args = { '--output-fmt cram --write-index' } + ext.prefix = { "${meta.id}_sorted_md" } + publishDir = [ + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index 35d91ee3..23ab1c8c 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -17,15 +17,20 @@ process { - withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { - ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2" } - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + if (params.aligner.equals("bwamem2")) { + withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}.sorted" } + } } - withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { - ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon" } - ext.prefix = { "${meta.id}.sorted" } + if (params.aligner.equals("sentieon")) { + withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { + ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes"))} + ext.prefix = { "${meta.id}.sorted" } + } } withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { @@ -60,15 +65,20 @@ process { process { - withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { - ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2" } - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + if (params.aligner.equals("bwamem2")) { + withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}.sorted" } + } } - withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { - ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon" } - ext.prefix = { "${meta.id}.sorted" } + if (params.aligner.equals("sentieon")) { + withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { + ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes"))} + ext.prefix = { "${meta.id}.sorted" } + } } withName: '.*ALIGN_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config index 7d478222..ba92f738 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwamem2.config @@ -16,39 +16,38 @@ // process { - withName: '.*ALIGN_BWAMEM2:.*' { - ext.when = params.aligner.equals("bwamem2") + if (params.aligner.equals("bwamem2")) { + + withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.prefix = { "${meta.id}.sorted" } + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { + ext.args = '-s --remove-overlaps' + } + + withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { + ext.prefix = { "${meta.id}_sorted_merged" } + } + + 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 } + ] + } + + 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 } + ] + } } - - withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - } - - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { - ext.args = '-s --remove-overlaps' - } - - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { - ext.prefix = { "${meta.id}_sorted_merged" } - } - - 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 } - ] - } - - 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 3e002cb6..d5156e58 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -17,33 +17,30 @@ process { - withName: '.*ALIGN_SENTIEON:.*' { - ext.when = params.aligner.equals("sentieon") + if (params.aligner.equals("sentieon")) { + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { + ext.args = { "-M -K 10000000 -R ${meta.read_group} " } + ext.prefix = { "${meta.id}.sorted" } + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { + ext.prefix = { "${meta.id}_datametrics" } + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_READWRITER' { + ext.prefix = { "${meta.id}_merged" } + } + + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { + ext.args = { $params.rmdup ? "--rmdup" : '' } + ext.prefix = { "${meta.id}_dedup" } + ext.suffix = ".bam" + publishDir = [ + enabled: !params.save_mapped_as_cram, + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { - ext.args = { "-M -K 10000000 -R ${meta.read_group} " } - ext.prefix = { "${meta.id}.sorted" } - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { - ext.prefix = { "${meta.id}_datametrics" } - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_READWRITER' { - ext.prefix = { "${meta.id}_merged" } - } - - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { - ext.args = { $params.rmdup ? "--rmdup" : '' } - ext.prefix = { "${meta.id}_dedup" } - ext.suffix = ".bam" - 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/annotate_cadd.config b/conf/modules/annotate_cadd.config index 2535f7f9..5cba1d6a 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -16,26 +16,28 @@ // process { - withName: '.*:ANNOTATE_CADD.*' { - ext.when = { (params.cadd_resources != null) && ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } - } + if (params.cadd_resources != null) { + withName: '.*:ANNOTATE_CADD.*' { + ext.when = { ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } + } - withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { - ext.args = { "--output-type z --types indels" } - ext.prefix = { "${vcf.simpleName}_indels" } - } + withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { + ext.args = { "--output-type z --types indels" } + ext.prefix = { "${vcf.simpleName}_indels" } + } - withName: '.*:ANNOTATE_CADD:CADD' { - ext.args = { "-g ${params.genome}" } - ext.prefix = { "${vcf.simpleName}_cadd" } - } + withName: '.*:ANNOTATE_CADD:CADD' { + ext.args = { "-g ${params.genome}" } + ext.prefix = { "${vcf.simpleName}_cadd" } + } - withName: '.*:ANNOTATE_CADD:TABIX_CADD' { - ext.args = { "--force --sequence 1 --begin 2 --end 2" } - } + withName: '.*:ANNOTATE_CADD:TABIX_CADD' { + ext.args = { "--force --sequence 1 --begin 2 --end 2" } + } - withName: '.*:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { - ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } - ext.prefix = { "${input.simpleName}_ann" } + withName: '.*:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { + ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } + ext.prefix = { "${input.simpleName}_ann" } + } } } diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index 68b11951..7fde1038 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -13,80 +13,84 @@ process { - withName: '.*ANN_CSQ_PLI_SV:.*' { - ext.when = !params.skip_sv_annotation - publishDir = [ - enabled: false - ] - } + if (!params.skip_sv_annotation) { + withName: '.*ANN_CSQ_PLI_SV:.*' { + publishDir = [ + enabled: false + ] + } - withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_genome_vep_csq" } - } + withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_genome_vep_csq" } + } - withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_genome_vep_csq_pli" } - } + withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_genome_vep_csq_pli" } + } - withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_genome_vep_csq_pli" } - publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_genome_vep_csq_pli" } + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } - } process { - withName: '.*ANN_CSQ_PLI_SNV:.*' { - ext.when = !params.skip_snv_annotation - publishDir = [ - enabled: false - ] - } + if (!params.skip_snv_annotation) { + withName: '.*ANN_CSQ_PLI_SNV:.*' { + ext.when = !params.skip_snv_annotation + publishDir = [ + enabled: false + ] + } - withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_vep_csq" } - } + withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_vep_csq" } + } - withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_vep_csq_pli" } - } + withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_vep_csq_pli" } + } - withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_vep_csq_pli" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_vep_csq_pli" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } process { - withName: '.*ANN_CSQ_PLI_MT:.*' { - ext.when = !params.skip_mt_annotation - publishDir = [ - enabled: false - ] - } + if (!params.skip_mt_annotation) { + withName: '.*ANN_CSQ_PLI_MT:.*' { + ext.when = !params.skip_mt_annotation + publishDir = [ + enabled: false + ] + } - withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_mt_vep_csq" } - } + withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_mt_vep_csq" } + } - withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_mt_vep_csq_pli" } - } + withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_mt_vep_csq_pli" } + } - withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_mt_vep_csq_pli" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_mt_vep_csq_pli" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index f65d24fd..a68d83e9 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -16,108 +16,99 @@ // process { - withName: '.*ANNOTATE_GENOME_SNVS:.*' { - ext.when = !params.skip_snv_annotation - } - - withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { - ext.prefix = { "${meta.id}_vcfanno" } - publishDir = [ - enabled: false - ] - } - - withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { - ext.args = { "--samples ${meta.probands.join(",")} --skip-indels " } - ext.prefix = { "${meta.id}_roh" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:RHOCALL_ANNOTATE' { - ext.args = { "--v14 " } - ext.prefix = { "${meta.id}_rohann" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { - ext.prefix = { "${meta.id}_rohann_vcfanno" } - } - - withName: '.*ANNOTATE_GENOME_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_GENOME_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 --min-size 5 --min-sites 1"} - ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } - } - withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_SITES' { - ext.prefix = { "${meta7.id}_rohann_vcfanno_upd_sites_chromograph" } - ext.args = { "--euploid" } - tag = {"${meta7.id}"} - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + if (!params.skip_snv_annotation) { + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { + ext.args = { "--samples ${meta.probands.join(",")} --skip-indels " } + ext.prefix = { "${meta.id}_roh" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:RHOCALL_ANNOTATE' { + ext.args = { "--v14 " } + ext.prefix = { "${meta.id}_rohann" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { + ext.prefix = { "${meta.id}_rohann_vcfanno" } + } + + withName: '.*ANNOTATE_GENOME_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_GENOME_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 --min-size 5 --min-sites 1"} + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } + } + + withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_SITES' { + ext.prefix = { "${meta7.id}_rohann_vcfanno_upd_sites_chromograph" } + ext.args = { "--euploid" } + tag = {"${meta7.id}"} + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_GENOME_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', 'test_sentieon']).size() >= 1) || workflow.stubRun } + tag = {"${meta6.id}"} + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_GENOME_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" ' } + } + + withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { + ext.prefix = { "${meta.id}_${intervals.simpleName}" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { + ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } + ext.args = [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot --vcf' + ].join(' ') + } + + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { + ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_GENOME_SNVS:TABIX_BCFTOOLS_CONCAT' { + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } - - withName: '.*ANNOTATE_GENOME_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', 'test_sentieon']).size() >= 1) || workflow.stubRun } - tag = {"${meta6.id}"} - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_GENOME_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" ' } - } - - withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { - ext.prefix = { "${meta.id}_${intervals.simpleName}" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { - ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } - ext.args = [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', - '--distance 5000', - '--buffer_size 20000', - '--format vcf --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', - '--uniprot --vcf' - ].join(' ') - } - - withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { - ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_GENOME_SNVS:TABIX_BCFTOOLS_CONCAT' { - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 40101033..391a3e71 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -16,51 +16,50 @@ // process { + if (!params.skip_mt_annotation) { + withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { + ext.args = [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,vep_cache/LoFtool_scores.txt', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--distance 0', + '--buffer_size 20000', + '--format vcf --fork 4 --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --no_stats --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', + '--uniprot' + ].join(' ') + } + withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { + ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/mitochondria" }, + mode: params.publish_dir_mode, + pattern: "*{vcf.gz,vcf.gz.tbi}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { - ext.args = [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', - '--distance 0', - '--buffer_size 20000', - '--format vcf --fork 4 --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', - '--uniprot' - ].join(' ') - } - - withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { - ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/mitochondria" }, - mode: params.publish_dir_mode, - pattern: "*{vcf.gz,vcf.gz.tbi}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { + ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } + ext.args = '--offline' + publishDir = [ + enabled: false + ] + } - withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { - ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } - ext.args = '--offline' - publishDir = [ - enabled: false - ] + withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { + ext.prefix = { "${meta.id}_haplogrep" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/mitochondria" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } - - withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { - ext.prefix = { "${meta.id}_haplogrep" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/mitochondria" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index a951172e..4b3dfe7a 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -16,51 +16,53 @@ // process { - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { - ext.when = !params.skip_sv_annotation - publishDir = [ - enabled: false - ] - } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { - ext.prefix = { "${meta.id}_svdbquery" } - } + if (!params.skip_sv_annotation) { + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { + publishDir = [ + enabled: false + ] + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { - ext.prefix = { "${meta.id}_sortvcf" } - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { + ext.prefix = { "${meta.id}_svdbquery" } + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_view" } - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { + ext.prefix = { "${meta.id}_sortvcf" } + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { - ext.args = [ - '--dir_cache vep_cache', - '--dir_plugins vep_cache/Plugins', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--appris --biotype --buffer_size 100 --canonical --cache --ccds', - '--compress_output bgzip --distance 5000 --domains', - '--exclude_predicted --force_overwrite --format vcf', - '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', - '--no_progress --no_stats --numbers --per_gene --polyphen p', - '--protein --offline --regulatory --sift p', - '--symbol --tsl --uniprot --vcf' - ].join(' ') - ext.prefix = { "${meta.id}_svdbquery_vep" } - publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_view" } + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { + ext.args = [ + '--dir_cache vep_cache', + '--dir_plugins vep_cache/Plugins', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--appris --biotype --buffer_size 100 --canonical --cache --ccds', + '--compress_output bgzip --distance 5000 --domains', + '--exclude_predicted --force_overwrite --format vcf', + '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', + '--no_progress --no_stats --numbers --per_gene --polyphen p', + '--protein --offline --regulatory --sift p', + '--symbol --tsl --uniprot --vcf' + ].join(' ') + ext.prefix = { "${meta.id}_svdbquery_vep" } + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:TABIX_VEP' { - publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:TABIX_VEP' { + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 55751d4d..3abcd31c 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -17,39 +17,36 @@ process { - withName: '.*CALL_SNV_SENTIEON:.*' { - ext.when = params.variant_caller.equals("sentieon") - } - - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { - ext.prefix = { "${meta.id}_dnascope" } - ext.args2 = { - params.variant_type ? "--var_type ${params.variant_type}" : '' + if(params.variant_caller.equals("sentieon")) { + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { + ext.prefix = { "${meta.id}_dnascope" } + ext.args2 = { + params.variant_type ? "--var_type ${params.variant_type}" : '' + } } - } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { - ext.prefix = { "${meta.id}_dnamodelapply" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { + ext.prefix = { "${meta.id}_dnamodelapply" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { - ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" - ext.prefix = { "${meta.id}_mlfiltered_0.95" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { + ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" + ext.prefix = { "${meta.id}_mlfiltered_0.95" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { - ext.args = "-i FILTER='\"PASS\"' -m x -Oz" - ext.prefix = { "${meta.id}_passed" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { + ext.args = "-i FILTER='\"PASS\"' -m x -Oz" + ext.prefix = { "${meta.id}_passed" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + } } - } diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index bf37b9d9..8539e546 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -17,23 +17,25 @@ process { - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER.*" { - publishDir = [ - enabled: false - ] - ext.when = !params.skip_cnv_calling - } + if (!params.skip_germlinecnvcaller) { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER.*" { + publishDir = [ + enabled: false + ] + ext.when = !params.skip_germlinecnvcaller + } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { - ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" - } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_DETERMINEGERMLINECONTIGPLOIDY" { - ext.prefix = { "${meta.id}_ploidy" } - } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_DETERMINEGERMLINECONTIGPLOIDY" { + ext.prefix = { "${meta.id}_ploidy" } + } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER" { - ext.args = "--run-mode CASE" - ext.prefix = { "${meta.id}_${model.simpleName}" } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER" { + ext.args = "--run-mode CASE" + ext.prefix = { "${meta.id}_${model.simpleName}" } + } } } diff --git a/conf/modules/gens.config b/conf/modules/gens.config index b918a6b2..3a3f6ccf 100644 --- a/conf/modules/gens.config +++ b/conf/modules/gens.config @@ -16,15 +16,17 @@ // process { - withName: '.*GENS:.*' { - publishDir = [ - path: { "${params.outdir}/gens" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + if (params.gens_switch) { + withName: '.*GENS:.*' { + publishDir = [ + path: { "${params.outdir}/gens" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*GENS:COLLECTREADCOUNTS' { - ext.args = '--interval-merging-rule OVERLAPPING_ONLY' + withName: '.*GENS:COLLECTREADCOUNTS' { + ext.args = '--interval-merging-rule OVERLAPPING_ONLY' + } } } diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index f5882da1..65da5cc3 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -16,47 +16,48 @@ // process { - withName: '.*RANK_VARIANTS_SV:.*' { - ext.when = !params.skip_sv_annotation - publishDir = [ - enabled: false - ] - } + if (!params.skip_sv_annotation) { + withName: '.*RANK_VARIANTS_SV:.*' { + publishDir = [ + enabled: false + ] + } - withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + } } - } - withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { - ext.args = " --rank_results " - } + withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + ext.args = " --rank_results " + } - withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_ranked_sv" } - } + withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_ranked_sv" } + } - withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { - ext.args = "--output-type z" - ext.prefix = { "${meta.id}_ranked_sv" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { + ext.args = "--output-type z" + ext.prefix = { "${meta.id}_ranked_sv" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*RANK_VARIANTS_SV:TABIX_BGZIP' { - ext.when = false - } + withName: '.*RANK_VARIANTS_SV:TABIX_BGZIP' { + ext.when = false + } - withName: '.*RANK_VARIANTS_SV:TABIX_TABIX' { - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*RANK_VARIANTS_SV:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } @@ -65,50 +66,52 @@ process { // process { - withName: '.*RANK_VARIANTS_SNV:.*' { - ext.when = !params.skip_snv_annotation - publishDir = [ - enabled: false - ] - } + if (!params.skip_snv_annotation) { + withName: '.*RANK_VARIANTS_SNV:.*' { + ext.when = !params.skip_snv_annotation + publishDir = [ + enabled: false + ] + } - withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + } } - } - withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { - ext.args = " --whole_gene " - } + withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.args = " --whole_gene " + } - withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { - ext.args = " --rank_results " - } + withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { + ext.args = " --rank_results " + } - withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_ranked_snv" } - } + withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_ranked_snv" } + } - withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { - ext.when = false - } + withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { + ext.when = false + } - withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIP' { - ext.prefix = { "${meta.id}_ranked_snv" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIP' { + ext.prefix = { "${meta.id}_ranked_snv" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*RANK_VARIANTS_SNV:TABIX_TABIX' { - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*RANK_VARIANTS_SNV:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } @@ -117,49 +120,51 @@ process { // process { - withName: '.*RANK_VARIANTS_MT:.*' { - ext.when = !params.skip_snv_annotation - publishDir = [ - enabled: false - ] - } + if (!params.skip_mt_annotation) { + withName: '.*RANK_VARIANTS_MT:.*' { + ext.when = !params.skip_snv_annotation + publishDir = [ + enabled: false + ] + } - withName: '.*RANK_VARIANTS_MT:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + withName: '.*RANK_VARIANTS_MT:GENMOD_ANNOTATE' { + ext.args = { + (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' + } } - } - withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { - ext.args = " --whole_gene " - } + withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { + ext.args = " --whole_gene " + } - withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { - ext.args = " --rank_results " - } + withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { + ext.args = " --rank_results " + } - withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_ranked_mt" } - } + withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_ranked_mt" } + } - withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { - ext.when = false - } + withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { + ext.when = false + } - withName: '.*RANK_VARIANTS_MT:TABIX_BGZIP' { - ext.prefix = { "${meta.id}_ranked_mt" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*RANK_VARIANTS_MT:TABIX_BGZIP' { + ext.prefix = { "${meta.id}_ranked_mt" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*RANK_VARIANTS_MT:TABIX_TABIX' { - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + withName: '.*RANK_VARIANTS_MT:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } diff --git a/conf/test.config b/conf/test.config index c7593f76..5fbde3f4 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,7 +24,7 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true + skip_germlinecnvcaller = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 51524fe7..dba0420b 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -24,7 +24,7 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true + skip_germlinecnvcaller = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index f729c35e..64618d12 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -24,7 +24,7 @@ params { mito_name = 'MT' // analysis params - skip_cnv_calling = true + skip_germlinecnvcaller = true // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' diff --git a/docs/output.md b/docs/output.md index ef1c02a9..6f3b5210 100644 --- a/docs/output.md +++ b/docs/output.md @@ -261,7 +261,7 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. #### SVDB merge -[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. +[SVDB merge](https://github.com/J35P312/SVDB#merge) is used to merge the variant calls from GATK's GermlineCNVCaller (only if skip_germlinecnvcaller is set to false), Manta, and TIDDIT. Output files are published in the output folder.
Output files diff --git a/nextflow.config b/nextflow.config index 9573e35c..6e05cf0d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,7 +24,7 @@ params { analysis_type = 'wgs' bait_padding = 100 save_mapped_as_cram = false - skip_cnv_calling = false + skip_germlinecnvcaller = false skip_snv_annotation = false skip_sv_annotation = false skip_mt_annotation = false diff --git a/nextflow_schema.json b/nextflow_schema.json index a3a95f1c..e5d2597b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -383,7 +383,7 @@ "description": "Specifies whether to generate and publish alignment files as cram instead of bam", "fa_icon": "fas fa-toggle-on" }, - "skip_cnv_calling": { + "skip_germlinecnvcaller": { "type": "boolean", "description": "Specifies whether or not to skip CNV calling.", "fa_icon": "fas fa-toggle-on" diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 17a6252b..8e9baa2f 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -25,26 +25,38 @@ workflow ALIGN { val_platform // string: [mandatory] illumina or a different technology main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_bwamem2_bam = Channel.empty() + ch_sentieon_bam = Channel.empty() + ch_bwamem2_bai = Channel.empty() + ch_sentieon_bai = Channel.empty() - ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 - ch_reads, - ch_genome_bwamem2index, - ch_genome_fasta, - ch_genome_fai, - val_platform - ) - - ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon - ch_reads, - ch_genome_fasta, - ch_genome_fai, - ch_genome_bwaindex, - val_platform - ) + if (params.aligner.equals("bwamem2")) { + ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 + ch_reads, + ch_genome_bwamem2index, + ch_genome_fasta, + ch_genome_fai, + val_platform + ) + ch_bwamem2_bam = ALIGN_BWAMEM2.out.marked_bam + ch_bwamem2_bai = ALIGN_BWAMEM2.out.marked_bai + ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) + } else if (params.aligner.equals("sentieon")) { + ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon + ch_reads, + ch_genome_fasta, + ch_genome_fai, + ch_genome_bwaindex, + val_platform + ) + ch_sentieon_bam = ALIGN_SENTIEON.out.marked_bam + ch_sentieon_bai = ALIGN_SENTIEON.out.marked_bai + ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) + } - ch_genome_marked_bam = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bam, ALIGN_SENTIEON.out.marked_bam) - ch_genome_marked_bai = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bai, ALIGN_SENTIEON.out.marked_bai) + ch_genome_marked_bam = Channel.empty().mix(ch_bwamem2_bam, ch_sentieon_bam) + ch_genome_marked_bai = Channel.empty().mix(ch_bwamem2_bai, ch_sentieon_bai) ch_genome_bam_bai = ch_genome_marked_bam.join(ch_genome_marked_bai, failOnMismatch:true, failOnDuplicate:true) // PREPARING READS FOR MT ALIGNMENT @@ -83,14 +95,13 @@ workflow ALIGN { ch_mtshift_marked_bai = ALIGN_MT_SHIFT.out.marked_bai ch_mtshift_bam_bai = ch_mtshift_marked_bam.join(ch_mtshift_marked_bai, failOnMismatch:true, failOnDuplicate:true) - SAMTOOLS_VIEW( ch_genome_bam_bai, ch_genome_fasta, [] ) - - ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, - ALIGN_SENTIEON.out.versions, - ALIGN_MT.out.versions, - ALIGN_MT_SHIFT.out.versions, - CONVERT_MT_BAM_TO_FASTQ.out.versions, - SAMTOOLS_VIEW.out.versions) + if (params.save_mapped_as_cram) { + SAMTOOLS_VIEW( ch_genome_bam_bai, ch_genome_fasta, [] ) + ch_versions = ch_versions.mix(SAMTOOLS_VIEW.out.versions) + } + ch_versions = ch_versions.mix(ALIGN_MT.out.versions, + ALIGN_MT_SHIFT.out.versions, + CONVERT_MT_BAM_TO_FASTQ.out.versions) emit: genome_marked_bam = ch_genome_marked_bam // channel: [ val(meta), path(bam) ] diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index dec73e67..11c51c6d 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -21,14 +21,22 @@ workflow ALIGN_MT { ch_fai // channel: [mandatory] [ val(meta), path(fai) ] main: - ch_versions = Channel.empty() - - BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) - - SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) + ch_versions = Channel.empty() + ch_bwamem2_bam = Channel.empty() + ch_sentieon_bam = Channel.empty() + + if (params.aligner.equals("bwamem2")) { + BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) + ch_bwamem2_bam = BWAMEM2_MEM_MT.out.bam + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + } else if (params.aligner.equals("sentieon")) { + SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) + ch_sentieon_bam = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } + ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + } Channel.empty() - .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] }) + .mix(ch_bwamem2_bam, ch_sentieon_bam) .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) .set {ch_bam_ubam} @@ -42,8 +50,6 @@ workflow ALIGN_MT { SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) - ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) - ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MERGEBAMALIGNMENT_MT.out.versions.first()) ch_versions = ch_versions.mix(PICARD_ADDORREPLACEREADGROUPS_MT.out.versions.first()) ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index fe38746b..334b7d4b 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -38,6 +38,7 @@ workflow ANNOTATE_GENOME_SNVS { ch_split_intervals // channel: [mandatory] [ path(intervals) ] main: + ch_cadd_vcf = Channel.empty() ch_versions = Channel.empty() ch_vcf_scatter_in = Channel.empty() ch_vep_in = Channel.empty() @@ -92,16 +93,20 @@ workflow ANNOTATE_GENOME_SNVS { GATK4_SELECTVARIANTS (ch_vcf_scatter_in) // Annotating with CADD - ANNOTATE_CADD ( - GATK4_SELECTVARIANTS.out.vcf, - GATK4_SELECTVARIANTS.out.tbi, - ch_cadd_header, - ch_cadd_resources - ) + if (params.cadd_resources != null) { + ANNOTATE_CADD ( + GATK4_SELECTVARIANTS.out.vcf, + GATK4_SELECTVARIANTS.out.tbi, + ch_cadd_header, + ch_cadd_resources + ) + ch_cadd_vcf = ANNOTATE_CADD.out.vcf + ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) + } // If CADD is run, pick CADD output as input for VEP else pass selectvariants output to VEP. GATK4_SELECTVARIANTS.out.vcf - .join(ANNOTATE_CADD.out.vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` + .join(ch_cadd_vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] selvar: it[2].equals(null) return [it[0], it[1]] @@ -158,7 +163,6 @@ workflow ANNOTATE_GENOME_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/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 8f449e7b..8f7c24eb 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -24,20 +24,25 @@ workflow ANNOTATE_MT_SNVS { ch_vep_cache // channel: [mandatory] [ path(cache) ] main: + ch_cadd_vcf = Channel.empty() ch_versions = Channel.empty() // Annotating with CADD - ANNOTATE_CADD ( - ch_mt_vcf, - ch_mt_tbi, - ch_cadd_header, - ch_cadd_resources - ) + if (params.cadd_resources != null) { + ANNOTATE_CADD ( + ch_mt_vcf, + ch_mt_tbi, + ch_cadd_header, + ch_cadd_resources + ) + ch_cadd_vcf = ANNOTATE_CADD.out.vcf + ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) + } // Pick input for vep ch_mt_vcf - .join(ANNOTATE_CADD.out.vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` - .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] + .join(ch_cadd_vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` + .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] merged: it[2].equals(null) return [it[0], it[1]] cadd: !(it[2].equals(null)) @@ -81,7 +86,6 @@ workflow ANNOTATE_MT_SNVS { // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_vep_in, "vcf.gz") - ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX_MT.out.versions) ch_versions = ch_versions.mix(VCFANNO_MT.out.versions) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 68ec15a2..d363d35c 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -31,31 +31,41 @@ workflow CALL_SNV { ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] main: - ch_versions = Channel.empty() - ch_vcf = Channel.empty() - ch_tabix = Channel.empty() + ch_versions = Channel.empty() + ch_deepvar_vcf = Channel.empty() + ch_deepvar_tbi = Channel.empty() + ch_sentieon_vcf = Channel.empty() + ch_sentieon_tbi = Channel.empty() - CALL_SNV_DEEPVARIANT ( // triggered only when params.variant_caller is set as deepvariant - ch_genome_bam_bai, - ch_genome_fasta, - ch_genome_fai, - ch_case_info - ) - - CALL_SNV_SENTIEON( // triggered only when params.variant_caller is set as sentieon - ch_genome_bam_bai, - ch_genome_fasta, - ch_genome_fai, - ch_dbsnp, - ch_dbsnp_tbi, - ch_call_interval, - ch_ml_model, - ch_case_info, - ch_pcr_indel_model - ) + if (params.variant_caller.equals("deepvariant")) { + CALL_SNV_DEEPVARIANT ( // triggered only when params.variant_caller is set as deepvariant + ch_genome_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_case_info + ) + ch_deepvar_vcf = CALL_SNV_DEEPVARIANT.out.vcf + ch_deepvar_tbi = CALL_SNV_DEEPVARIANT.out.tabix + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + } else if (params.variant_caller.equals("sentieon")) { + CALL_SNV_SENTIEON( // triggered only when params.variant_caller is set as sentieon + ch_genome_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_dbsnp, + ch_dbsnp_tbi, + ch_call_interval, + ch_ml_model, + ch_case_info, + ch_pcr_indel_model + ) + ch_sentieon_vcf = CALL_SNV_SENTIEON.out.vcf + ch_sentieon_tbi = CALL_SNV_SENTIEON.out.tabix + ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + } - ch_vcf = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.vcf, CALL_SNV_SENTIEON.out.vcf) - ch_tabix = Channel.empty().mix(CALL_SNV_DEEPVARIANT.out.tabix, CALL_SNV_SENTIEON.out.tabix) + ch_vcf = Channel.empty().mix(ch_deepvar_vcf, ch_sentieon_vcf) + ch_tabix = Channel.empty().mix(ch_deepvar_tbi, ch_sentieon_tbi) ch_vcf .join(ch_tabix, failOnMismatch:true, failOnDuplicate:true) @@ -93,8 +103,6 @@ workflow CALL_SNV { ch_case_info ) - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) - ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SNV_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(POSTPROCESS_MT_CALLS.out.versions) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 28f4e8db..961f02a4 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -43,15 +43,19 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_genome_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 } + if (!params.skip_germlinecnvcaller) { + CALL_SV_GERMLINECNVCALLER (ch_genome_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 } + + ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) + } CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) //merge - if (params.skip_cnv_calling) { + if (params.skip_germlinecnvcaller) { tiddit_vcf .combine(manta_vcf) .toList() @@ -75,7 +79,6 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SV_TIDDIT.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/workflows/raredisease.nf b/workflows/raredisease.nf index 95d95590..5308b414 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -54,7 +54,7 @@ if (params.variant_caller.equals("sentieon")) { mandatoryParams += ["ml_model"] } -if (!params.skip_cnv_calling) { +if (!params.skip_germlinecnvcaller) { mandatoryParams += ["ploidy_model", "gcnvcaller_model"] } @@ -277,7 +277,7 @@ workflow RAREDISEASE { // SV caller priority - if (params.skip_cnv_calling) { + if (params.skip_germlinecnvcaller) { ch_svcaller_priority = Channel.value(["tiddit", "manta"]) } else { ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller"]) From 3a16d93f0fd4249678761475ffb22302afea0d76 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:56:08 +0200 Subject: [PATCH 1432/1921] add skip_qualimap --- conf/modules/qc_bam.config | 6 ++++-- conf/test.config | 1 + conf/test_one_sample.config | 1 + nextflow.config | 1 + nextflow_schema.json | 5 +++++ subworkflows/local/qc_bam.nf | 9 ++++++--- 6 files changed, 18 insertions(+), 5 deletions(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index eeb60b34..fe2031a9 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -33,8 +33,10 @@ process { ext.prefix = { "${meta.id}_hsmetrics" } } - withName: '.*QC_BAM:QUALIMAP_BAMQC' { - ext.prefix = { "${meta.id}_qualimap" } + if (params.skip_qualimap) { + withName: '.*QC_BAM:QUALIMAP_BAMQC' { + ext.prefix = { "${meta.id}_qualimap" } + } } withName: '.*QC_BAM:TIDDIT_COV' { diff --git a/conf/test.config b/conf/test.config index c7593f76..04c41e14 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,6 +25,7 @@ params { // analysis params skip_cnv_calling = true + skip_qualimap = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 51524fe7..0a017791 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -25,6 +25,7 @@ params { // analysis params skip_cnv_calling = true + skip_qualimap = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/nextflow.config b/nextflow.config index 9573e35c..348a92a6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,6 +25,7 @@ params { bait_padding = 100 save_mapped_as_cram = false skip_cnv_calling = false + skip_qualimap = false skip_snv_annotation = false skip_sv_annotation = false skip_mt_annotation = false diff --git a/nextflow_schema.json b/nextflow_schema.json index a3a95f1c..9c336f06 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -388,6 +388,11 @@ "description": "Specifies whether or not to skip CNV calling.", "fa_icon": "fas fa-toggle-on" }, + "skip_qualimap": { + "type": "boolean", + "description": "Specifies whether or not to skip Qualimap.", + "fa_icon": "fas fa-toggle-on" + }, "skip_mt_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotation of mitochondrial variants.", diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 9331523e..11439a7b 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -29,6 +29,7 @@ workflow QC_BAM { main: ch_versions = Channel.empty() + ch_qualimap = Channel.empty() PICARD_COLLECTMULTIPLEMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai) @@ -39,7 +40,10 @@ workflow QC_BAM { PICARD_COLLECTHSMETRICS (ch_hsmetrics_in, ch_genome_fasta, ch_genome_fai, [[],[]]) - QUALIMAP_BAMQC (ch_bam, []) + if (!params.skip_qualimap) { + ch_qualimap = QUALIMAP_BAMQC (ch_bam, []).results + ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) + } TIDDIT_COV (ch_bam, [[],[]]) // 2nd pos. arg is req. only for cram input @@ -60,7 +64,6 @@ workflow QC_BAM { ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) - ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) @@ -70,7 +73,7 @@ workflow QC_BAM { emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] hs_metrics = PICARD_COLLECTHSMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] - qualimap_results = QUALIMAP_BAMQC.out.results // channel: [ val(meta), path(qualimap_dir) ] + qualimap_results = ch_qualimap // channel: [ val(meta), path(qualimap_dir) ] tiddit_wig = TIDDIT_COV.out.wig // channel: [ val(meta), path(wig) ] bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(bw) ] d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(d4) ] From 164a8f7a1e6587938109d91f7e9271030600dc6b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:58:34 +0200 Subject: [PATCH 1433/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2def1d5b..b05be855 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A new parameter to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) - A `metromap` representating the core parts of the pipeline [#428](https://github.com/nf-core/raredisease/pull/428) - Metromap and logos for light and dark theme [#432](https://github.com/nf-core/raredisease/pull/432) +- A new parameter to skip qualimap [#436](https://github.com/nf-core/raredisease/pull/436) ### `Changed` From 24e8deb359f8885c848be0efa3c0e2006abe7473 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 Oct 2023 17:24:25 +0200 Subject: [PATCH 1434/1921] skip eklipse --- CHANGELOG.md | 2 +- conf/modules/call_sv_MT.config | 14 ++++++++------ conf/test.config | 1 + conf/test_one_sample.config | 1 + nextflow.config | 1 + nextflow_schema.json | 5 +++++ .../local/variant_calling/call_sv_MT.nf | 17 +++++++++++------ 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b05be855..1623fc11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A new parameter to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) - A `metromap` representating the core parts of the pipeline [#428](https://github.com/nf-core/raredisease/pull/428) - Metromap and logos for light and dark theme [#432](https://github.com/nf-core/raredisease/pull/432) -- A new parameter to skip qualimap [#436](https://github.com/nf-core/raredisease/pull/436) +- New parameters to skip qualimap and eklipse (`--skip_qualimap` and `--skip_eklipse`) [#436](https://github.com/nf-core/raredisease/pull/436) ### `Changed` diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config index 44b0e581..606ef429 100644 --- a/conf/modules/call_sv_MT.config +++ b/conf/modules/call_sv_MT.config @@ -26,12 +26,14 @@ process { ] } - withName: '.*CALL_SV_MT:EKLIPSE' { - publishDir = [ - path: { "${params.outdir}/call_sv/mitochondria" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + if (!params.skip_eklipse){ + withName: '.*CALL_SV_MT:EKLIPSE' { + publishDir = [ + path: { "${params.outdir}/call_sv/mitochondria" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } } } diff --git a/conf/test.config b/conf/test.config index 04c41e14..8cb3e2af 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,6 +25,7 @@ params { // analysis params skip_cnv_calling = true + skip_eklipse = true skip_qualimap = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 0a017791..4ad89508 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -25,6 +25,7 @@ params { // analysis params skip_cnv_calling = true + skip_eklipse = true skip_qualimap = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI diff --git a/nextflow.config b/nextflow.config index 348a92a6..ed8275fe 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,6 +25,7 @@ params { bait_padding = 100 save_mapped_as_cram = false skip_cnv_calling = false + skip_eklipse = false skip_qualimap = false skip_snv_annotation = false skip_sv_annotation = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 9c336f06..6d43a432 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -388,6 +388,11 @@ "description": "Specifies whether or not to skip CNV calling.", "fa_icon": "fas fa-toggle-on" }, + "skip_eklipse": { + "type": "boolean", + "description": "Specifies whether or not to skip eKLIPse.", + "fa_icon": "fas fa-toggle-on" + }, "skip_qualimap": { "type": "boolean", "description": "Specifies whether or not to skip Qualimap.", diff --git a/subworkflows/local/variant_calling/call_sv_MT.nf b/subworkflows/local/variant_calling/call_sv_MT.nf index c8fdff45..41b91119 100644 --- a/subworkflows/local/variant_calling/call_sv_MT.nf +++ b/subworkflows/local/variant_calling/call_sv_MT.nf @@ -11,19 +11,24 @@ workflow CALL_SV_MT { ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_eklipse_del = Channel.empty() + ch_eklipse_genes = Channel.empty() + ch_eklipse_circos = Channel.empty() - EKLIPSE(ch_bam_bai,[]) + if (!params.skip_eklipse){ + EKLIPSE(ch_bam_bai,[]) + ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) + } MT_DELETION(ch_bam_bai, ch_fasta) - ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) ch_versions = ch_versions.mix(MT_DELETION.out.versions.first()) emit: - eklipse_del = EKLIPSE.out.deletions // channel: [ val(meta), path(csv) ] - eklipse_genes = EKLIPSE.out.genes // channel: [ val(meta), path(csv) ] - eklipse_circos = EKLIPSE.out.circos // channel: [ val(meta), path(png) ] + eklipse_del = ch_eklipse_del // channel: [ val(meta), path(csv) ] + eklipse_genes = ch_eklipse_genes // channel: [ val(meta), path(csv) ] + eklipse_circos = ch_eklipse_circos // channel: [ val(meta), path(png) ] mt_del_result = MT_DELETION.out.mt_del_result // channel: [ val(meta), path(txt) ] versions = ch_versions // channel: [ path(versions.yml) ] } From bcbdf5d58898634d7813c81c90d53578a8a8d269 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 17 Oct 2023 18:02:50 +0200 Subject: [PATCH 1435/1921] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1623fc11..3d64c97a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A `metromap` representating the core parts of the pipeline [#428](https://github.com/nf-core/raredisease/pull/428) - Metromap and logos for light and dark theme [#432](https://github.com/nf-core/raredisease/pull/432) - New parameters to skip qualimap and eklipse (`--skip_qualimap` and `--skip_eklipse`) [#436](https://github.com/nf-core/raredisease/pull/436) +- Fix "there is no process matching config selector warnings" [#435](https://github.com/nf-core/raredisease/pull/435) ### `Changed` @@ -28,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Breaks down mitochondrial analysis workflow into smaller subworkflows that are more modular [#419](https://github.com/nf-core/raredisease/pull/419) - Replaced the parameter skip_mt_analysis which was used to turn on/off the mitochondrial workflow [#419](https://github.com/nf-core/raredisease/pull/419) - Adds a new parameter skip_mt_annotation which can be used to turn on/off annotation and ranking for mitochondrial SNVs [#419](https://github.com/nf-core/raredisease/pull/419) +- Changed the name of the parameter from `skip_cnv_calling` to `skip_germlinecnvcaller` [#435](https://github.com/nf-core/raredisease/pull/435) ### `Fixed` From 9b1b6c6c7f581324f87f4cc219dd381c2593c744 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:37:31 +0200 Subject: [PATCH 1436/1921] review comments --- conf/modules/qc_bam.config | 2 +- subworkflows/local/variant_calling/call_sv_MT.nf | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index fe2031a9..cc744773 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -33,7 +33,7 @@ process { ext.prefix = { "${meta.id}_hsmetrics" } } - if (params.skip_qualimap) { + if (!params.skip_qualimap) { withName: '.*QC_BAM:QUALIMAP_BAMQC' { ext.prefix = { "${meta.id}_qualimap" } } diff --git a/subworkflows/local/variant_calling/call_sv_MT.nf b/subworkflows/local/variant_calling/call_sv_MT.nf index 41b91119..7d6f4ede 100644 --- a/subworkflows/local/variant_calling/call_sv_MT.nf +++ b/subworkflows/local/variant_calling/call_sv_MT.nf @@ -18,6 +18,9 @@ workflow CALL_SV_MT { if (!params.skip_eklipse){ EKLIPSE(ch_bam_bai,[]) + ch_eklipse_del = EKLIPSE.out.deletions + ch_eklipse_genes = EKLIPSE.out.genes + ch_eklipse_circos = EKLIPSE.out.circos ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) } From 181cfa68ef34a2f6e739b8986406a2a77f02aca3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 26 Oct 2023 08:36:54 +0200 Subject: [PATCH 1437/1921] update test config --- conf/test.config | 6 +++--- conf/test_one_sample.config | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/test.config b/conf/test.config index 64848661..64f5fdca 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,9 +24,9 @@ params { mito_name = 'MT' // analysis params - skip_eklipse = true - skip_germlinecnvcaller = true - skip_qualimap = true + skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 62eaac45..67ea9f47 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -24,9 +24,9 @@ params { mito_name = 'MT' // analysis params - skip_eklipse = true - skip_germlinecnvcaller = true - skip_qualimap = true + skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data From bc1f6c8092ff044e7bae98bdae1216d95b1dbf24 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:10:32 +0200 Subject: [PATCH 1438/1921] skip haplocheck and fastqc [skip ci] --- conf/modules/raredisease.config | 15 +++++++++------ conf/test.config | 2 ++ conf/test_one_sample.config | 2 ++ nextflow.config | 2 ++ nextflow_schema.json | 10 ++++++++++ .../local/variant_calling/call_snv_MT.nf | 16 +++++++++++----- workflows/raredisease.nf | 11 +++++++---- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 154daa03..c24267d6 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -31,12 +31,15 @@ process { // process { - withName: '.*RAREDISEASE:FASTQC' { - ext.args = '--quiet' - publishDir = [ - path: { "${params.outdir}/fastqc/${meta.id}" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] + + if (!params.skip_fastqc) { + withName: '.*RAREDISEASE:FASTQC' { + ext.args = '--quiet' + publishDir = [ + path: { "${params.outdir}/fastqc/${meta.id}" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } } } diff --git a/conf/test.config b/conf/test.config index 64848661..06ccf862 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,9 @@ params { // analysis params skip_eklipse = true + skip_fastqc = true skip_germlinecnvcaller = true + skip_haplocheck = true skip_qualimap = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 62eaac45..97441f99 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -25,7 +25,9 @@ params { // analysis params skip_eklipse = true + skip_fastqc = true skip_germlinecnvcaller = true + skip_haplocheck = true skip_qualimap = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI diff --git a/nextflow.config b/nextflow.config index 6bea3b50..775d5a81 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,7 +25,9 @@ params { bait_padding = 100 save_mapped_as_cram = false skip_eklipse = false + skip_fastqc = false skip_germlinecnvcaller = false + skip_haplocheck = false skip_qualimap = false skip_snv_annotation = false skip_sv_annotation = false diff --git a/nextflow_schema.json b/nextflow_schema.json index eda0202c..496baaf6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -383,6 +383,16 @@ "description": "Specifies whether to generate and publish alignment files as cram instead of bam", "fa_icon": "fas fa-toggle-on" }, + "skip_fastqc": { + "type": "boolean", + "description": "Specifies whether or not to skip FASTQC.", + "fa_icon": "fas fa-toggle-on" + }, + "skip_haplocheck": { + "type": "boolean", + "description": "Specifies whether or not to skip haplocheck.", + "fa_icon": "fas fa-toggle-on" + }, "skip_germlinecnvcaller": { "type": "boolean", "description": "Specifies whether or not to skip CNV calling.", diff --git a/subworkflows/local/variant_calling/call_snv_MT.nf b/subworkflows/local/variant_calling/call_snv_MT.nf index d55d1965..b0a2fbae 100644 --- a/subworkflows/local/variant_calling/call_snv_MT.nf +++ b/subworkflows/local/variant_calling/call_snv_MT.nf @@ -15,13 +15,20 @@ workflow CALL_SNV_MT { ch_intervals // channel: [mandatory] [ path(interval_list) ] main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_haplocheck_txt = Channel.empty() + ch_haplocheck_html = Channel.empty() ch_bam_bai_int = ch_bam_bai.combine(ch_intervals) GATK4_MUTECT2_MT (ch_bam_bai_int, ch_fasta, ch_fai, ch_dict, [], [], [],[]) - HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) + if (!params.skip_haplocheck) { + HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf).set { ch_haplocheck } + ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + ch_haplocheck_txt = HAPLOCHECK_MT.out.txt + ch_haplocheck_html = HAPLOCHECK_MT.out.html + } // Filter Mutect2 calls ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) @@ -34,7 +41,6 @@ workflow CALL_SNV_MT { GATK4_FILTERMUTECTCALLS_MT (ch_to_filt, ch_fasta, ch_fai, ch_dict) 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: @@ -42,7 +48,7 @@ workflow CALL_SNV_MT { 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) ] + txt = ch_haplocheck_txt // channel: [ val(meta), path(txt) ] + html = ch_haplocheck_html // channel: [ val(meta), path(html) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5308b414..5a164a39 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -284,9 +284,10 @@ workflow RAREDISEASE { } // Input QC - FASTQC (ch_reads) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - + if (!params.skip_fastqc) { + FASTQC (ch_reads) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + } // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( ch_genome_dictionary, @@ -593,7 +594,9 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect()) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + if (!params.skip_fastqc) { + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + } ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.map{it[1]}.collect().ifEmpty([])) From 8480d37e427caf2b0f9d4c5839f73c5a442c4d80 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:15:38 +0200 Subject: [PATCH 1439/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d64c97a..f4d17c8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Metromap and logos for light and dark theme [#432](https://github.com/nf-core/raredisease/pull/432) - New parameters to skip qualimap and eklipse (`--skip_qualimap` and `--skip_eklipse`) [#436](https://github.com/nf-core/raredisease/pull/436) - Fix "there is no process matching config selector warnings" [#435](https://github.com/nf-core/raredisease/pull/435) +- New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) ### `Changed` From c34e516cf8e9640c4f1636913ec2770ab6576ab3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 26 Oct 2023 19:37:05 +0530 Subject: [PATCH 1440/1921] Update test_one_sample.config [skip ci] --- conf/test_one_sample.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 97441f99..f39cb40c 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -24,11 +24,11 @@ params { mito_name = 'MT' // analysis params - skip_eklipse = true - skip_fastqc = true - skip_germlinecnvcaller = true - skip_haplocheck = true - skip_qualimap = true + skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data From a88a83b9c8ef08daf8f25670c7b03470b4b816a7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 26 Oct 2023 19:37:59 +0530 Subject: [PATCH 1441/1921] Update test.config --- conf/test.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/test.config b/conf/test.config index 06ccf862..d398d542 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,11 +24,11 @@ params { mito_name = 'MT' // analysis params - skip_eklipse = true - skip_fastqc = true - skip_germlinecnvcaller = true - skip_haplocheck = true - skip_qualimap = true + skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI // Input data From bdea2c5089b590d08f1f3cdf2d72c4ec41666e37 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:44:01 +0200 Subject: [PATCH 1442/1921] update emit --- subworkflows/local/variant_calling/call_sv_cnvnator.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_sv_cnvnator.nf b/subworkflows/local/variant_calling/call_sv_cnvnator.nf index 2c6db643..0d5c5423 100644 --- a/subworkflows/local/variant_calling/call_sv_cnvnator.nf +++ b/subworkflows/local/variant_calling/call_sv_cnvnator.nf @@ -46,6 +46,6 @@ workflow CALL_SV_CNVNATOR { ch_versions = ch_versions.mix(CNVNATOR_CONVERT2VCF.out.versions) emit: - vcf = CNVNATOR_CONVERT2VCF.out.vcf // channel: [ val(meta), path(*.tar.gz) ] + vcf = SVDB_MERGE_CNVNATOR.out.vcf // channel: [ val(meta), path(*.tar.gz) ] versions = ch_versions // channel: [ versions.yml ] } From efddf0b8f9593f535d41d533320bc4db1a30c7bb Mon Sep 17 00:00:00 2001 From: peterpru Date: Mon, 6 Nov 2023 13:03:25 +0100 Subject: [PATCH 1443/1921] initial commit to log progress --- modules/local/retroseq/call/placeholder.txt | 1 + modules/local/retroseq/discover/placeholder.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 modules/local/retroseq/call/placeholder.txt create mode 100644 modules/local/retroseq/discover/placeholder.txt diff --git a/modules/local/retroseq/call/placeholder.txt b/modules/local/retroseq/call/placeholder.txt new file mode 100644 index 00000000..b3a42524 --- /dev/null +++ b/modules/local/retroseq/call/placeholder.txt @@ -0,0 +1 @@ +placeholder \ No newline at end of file diff --git a/modules/local/retroseq/discover/placeholder.txt b/modules/local/retroseq/discover/placeholder.txt new file mode 100644 index 00000000..b3a42524 --- /dev/null +++ b/modules/local/retroseq/discover/placeholder.txt @@ -0,0 +1 @@ +placeholder \ No newline at end of file From 46041f37b849ac5a86c647a96109786f8ddc3c0b Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Nov 2023 10:43:00 +0100 Subject: [PATCH 1444/1921] add modules retroseq call and discover --- modules/local/retroseq/call/main.nf | 51 ++++++++++++++++++ modules/local/retroseq/call/meta.yml | 51 ++++++++++++++++++ modules/local/retroseq/call/placeholder.txt | 1 - modules/local/retroseq/discover/main.nf | 52 ++++++++++++++++++ modules/local/retroseq/discover/meta.yml | 54 +++++++++++++++++++ .../local/retroseq/discover/placeholder.txt | 1 - 6 files changed, 208 insertions(+), 2 deletions(-) create mode 100644 modules/local/retroseq/call/main.nf create mode 100644 modules/local/retroseq/call/meta.yml delete mode 100644 modules/local/retroseq/call/placeholder.txt create mode 100644 modules/local/retroseq/discover/main.nf create mode 100644 modules/local/retroseq/discover/meta.yml delete mode 100644 modules/local/retroseq/discover/placeholder.txt diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf new file mode 100644 index 00000000..9e38e66c --- /dev/null +++ b/modules/local/retroseq/call/main.nf @@ -0,0 +1,51 @@ +process RETROSEQ_CALL { + tag "$meta.id" + label 'process_low' + + conda "bioconda::perl-retroseq=1.5=pl5321hdfd78af_1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' }" + + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("*.vcf"), 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 VERSION = "1.5" + + """ + retroseq.pl \\ + -call \\ + -bam $bam \\ + -ref $fasta \\ + -output ${prefix}.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + retroseq_call: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "1.5" + """ + touch ${prefix}.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + retroseq_call: $VERSION + END_VERSIONS + """ +} diff --git a/modules/local/retroseq/call/meta.yml b/modules/local/retroseq/call/meta.yml new file mode 100644 index 00000000..7427491f --- /dev/null +++ b/modules/local/retroseq/call/meta.yml @@ -0,0 +1,51 @@ +name: "retroseq_call" +description: RetroSeq is a tool for discovery and genotyping of transposable element variants (TEVs) from next-gen sequencing reads aligned to a reference genome in BAM format. +keywords: + - retroseq + - transposable elements + - genomics +tools: + - "retroseq": + description: "RetroSeq: discovery and genotyping of TEVs from reads in BAM format." + homepage: "https://github.com/tk2/RetroSeq" + documentation: "https://github.com/tk2/RetroSeq" + tool_dev_url: "https://github.com/tk2/RetroSeq" + doi: "10.1093/bioinformatics/bts697" + licence: "['GPL']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - bai: + type: file + description: Index of the sorted BAM file + pattern: "*.{bam}" + - fasta: + type: file + description: reference genome in fasta format + pattern: "*.{fasta}" + +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: Output file containing TEVs and their location in the genome. + pattern: "*.{vcf}" + +authors: + - "@peterpru" diff --git a/modules/local/retroseq/call/placeholder.txt b/modules/local/retroseq/call/placeholder.txt deleted file mode 100644 index b3a42524..00000000 --- a/modules/local/retroseq/call/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -placeholder \ No newline at end of file diff --git a/modules/local/retroseq/discover/main.nf b/modules/local/retroseq/discover/main.nf new file mode 100644 index 00000000..d71fd3fa --- /dev/null +++ b/modules/local/retroseq/discover/main.nf @@ -0,0 +1,52 @@ +process RETROSEQ_DISCOVER { + tag "$meta.id" + label 'process_low' + + conda "bioconda::perl-retroseq=1.5=pl5321hdfd78af_1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' }" + + + input: + tuple val(meta), path(bam), path(bai) + path(tab) + path(extra_files) + + output: + tuple val(meta), path("*.tab"), emit: tab + 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.5" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + + """ + retroseq.pl \\ + -discover \\ + -bam $bam \\ + -refTEs $tab\\ + -output ${prefix}.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + retroseq_discover: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "1.5" + """ + touch ${prefix}.tab + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + retroseq_discover: $VERSION + END_VERSIONS + """ +} diff --git a/modules/local/retroseq/discover/meta.yml b/modules/local/retroseq/discover/meta.yml new file mode 100644 index 00000000..a61f64c9 --- /dev/null +++ b/modules/local/retroseq/discover/meta.yml @@ -0,0 +1,54 @@ +name: "retroseq_discover" +description: RetroSeq is a tool for discovery and genotyping of transposable element variants (TEVs) from next-gen sequencing reads aligned to a reference genome in BAM format. +keywords: + - retroseq + - transposable elements + - genomics +tools: + - "retroseq": + description: "RetroSeq: discovery and genotyping of TEVs from reads in BAM format." + homepage: "https://github.com/tk2/RetroSeq" + documentation: "https://github.com/tk2/RetroSeq" + tool_dev_url: "https://github.com/tk2/RetroSeq" + doi: "10.1093/bioinformatics/bts697" + licence: "['GPL']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" + - bai: + type: file + description: Index of the sorted BAM file + pattern: "*.{bam}" + - tab: + type: file + description: Tab file containing a list of files, where each line is a TE type and the path to a bed file containing its coordinates in the genome. + pattern: "*.{tab}" + - extra_files: + type: file + description: Each file contains the coordinates of transposable elements of a particular type. + +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" + - tab: + type: file + description: Output file containing lists of read pair names per TE type + pattern: "*.{tab}" + +authors: + - "@peterpru" diff --git a/modules/local/retroseq/discover/placeholder.txt b/modules/local/retroseq/discover/placeholder.txt deleted file mode 100644 index b3a42524..00000000 --- a/modules/local/retroseq/discover/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -placeholder \ No newline at end of file From 0bcf05c7a9aadf925585f65e690983a641ff0097 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Nov 2023 10:51:46 +0100 Subject: [PATCH 1445/1921] fix linting --- modules/local/retroseq/call/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf index 9e38e66c..0fb36553 100644 --- a/modules/local/retroseq/call/main.nf +++ b/modules/local/retroseq/call/main.nf @@ -9,7 +9,7 @@ process RETROSEQ_CALL { input: tuple val(meta), path(bam), path(bai) - tuple val(meta), path(fasta) + tuple val(meta), path(fasta) output: tuple val(meta), path("*.vcf"), emit: vcf From d803ed8b9749b2b182651d5e44e208ea84455db1 Mon Sep 17 00:00:00 2001 From: peterpru Date: Tue, 7 Nov 2023 13:26:06 +0100 Subject: [PATCH 1446/1921] add subworkflow --- modules/local/retroseq/call/main.nf | 1 + modules/local/retroseq/discover/meta.yml | 2 +- .../local/annotate_mobile_elements.nf | 46 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 subworkflows/local/annotate_mobile_elements.nf diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf index 0fb36553..569d84a2 100644 --- a/modules/local/retroseq/call/main.nf +++ b/modules/local/retroseq/call/main.nf @@ -27,6 +27,7 @@ process RETROSEQ_CALL { retroseq.pl \\ -call \\ -bam $bam \\ + -input $input -ref $fasta \\ -output ${prefix}.tab diff --git a/modules/local/retroseq/discover/meta.yml b/modules/local/retroseq/discover/meta.yml index a61f64c9..80c6af6c 100644 --- a/modules/local/retroseq/discover/meta.yml +++ b/modules/local/retroseq/discover/meta.yml @@ -33,7 +33,7 @@ input: pattern: "*.{tab}" - extra_files: type: file - description: Each file contains the coordinates of transposable elements of a particular type. + description: List of files. Each file contains the coordinates of transposable elements of a particular type. output: - meta: diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf new file mode 100644 index 00000000..26648434 --- /dev/null +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -0,0 +1,46 @@ +// +// A subworkflow to annotate mobile elements in the genome +// + +include { RETROSEQ_CALL as RETROSEQ_CALL } from '../../modules/local/retroseq/call/main' +include { RETROSEQ_DISCOVER as RETROSEQ_DISCOVER } from '../../modules/local/retroseq/discover/main' + +workflow ANNOTATE_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_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + + main: + ch_versions = Channel.empty() + + // Running retroseq discover: identify discordant read pairs that might support a TE insertion + RETROSEQ_DISCOVER ( + ch_bam_bai, + "tab", + "extrafiles" + ) + + // Running retroseq call: clusters reads and checks on the breakpoints to decide whether a TEV is present + RETROSEQ_CALL ( + ch_bam_bai, + ch_genome_fasta, + ) + + // Run vep to annotate + + // Run svdb to query against database + + // Filter and rank as done in findtroll? E.g. protein coding + + ch_versions = ch_versions.mix(RETROSEQ_CALL.out.versions) + ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions) + + emit: + vcf_ann = RETROSEQ_CALL.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} + From b80ed165380cabc131a5fc7cdf00990868464c24 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:11:52 +0100 Subject: [PATCH 1447/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4d17c8e..ccf9e781 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 - New parameters to skip qualimap and eklipse (`--skip_qualimap` and `--skip_eklipse`) [#436](https://github.com/nf-core/raredisease/pull/436) - Fix "there is no process matching config selector warnings" [#435](https://github.com/nf-core/raredisease/pull/435) - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) +- CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) ### `Changed` From 239a75c0ae27cc43850d5ce89bce889f47ef75a4 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 14 Nov 2023 09:29:00 +0100 Subject: [PATCH 1448/1921] starting out --- modules.json | 5 ++ modules/nf-core/vcf2cytosure/environment.yml | 6 ++ modules/nf-core/vcf2cytosure/main.nf | 66 ++++++++++++++++ modules/nf-core/vcf2cytosure/meta.yml | 77 +++++++++++++++++++ subworkflows/local/generate_cytosure_files.nf | 34 ++++++++ 5 files changed, 188 insertions(+) create mode 100644 modules/nf-core/vcf2cytosure/environment.yml create mode 100644 modules/nf-core/vcf2cytosure/main.nf create mode 100644 modules/nf-core/vcf2cytosure/meta.yml create mode 100644 subworkflows/local/generate_cytosure_files.nf diff --git a/modules.json b/modules.json index db78a291..0b7c2a93 100644 --- a/modules.json +++ b/modules.json @@ -460,6 +460,11 @@ "git_sha": "9b159849d74f0eef251168c81c16da08215bbad5", "installed_by": ["modules"] }, + "vcf2cytosure": { + "branch": "master", + "git_sha": "2dba354d7c0a43a1e6d6ce26f408b4936d4ed619", + "installed_by": ["modules"] + }, "vcfanno": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/nf-core/vcf2cytosure/environment.yml b/modules/nf-core/vcf2cytosure/environment.yml new file mode 100644 index 00000000..30e0542f --- /dev/null +++ b/modules/nf-core/vcf2cytosure/environment.yml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::vcf2cytosure=0.9.1 diff --git a/modules/nf-core/vcf2cytosure/main.nf b/modules/nf-core/vcf2cytosure/main.nf new file mode 100644 index 00000000..f85dc05e --- /dev/null +++ b/modules/nf-core/vcf2cytosure/main.nf @@ -0,0 +1,66 @@ +process VCF2CYTOSURE { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/vcf2cytosure:0.9.1--pyh7cba7a3_1': + 'biocontainers/vcf2cytosure:0.9.1--pyh7cba7a3_1' }" + + input: + tuple val(meta), path(sv_vcf) + tuple val(meta2), path(coverage_bed) + tuple val(meta3), path(cns) + tuple val(meta4), path(snv_vcf) + path blacklist_bed + + output: + tuple val(meta), path("*.cgh"), emit: cgh + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def coverage = coverage_bed ? "--coverage ${coverage_bed}" : '' + def cnvkit = cns ? ( coverage_bed ? '' : "--cn ${cns}" ) : '' + def snv = snv_vcf ? ( coverage_bed ? '' : "--snv ${snv_vcf}" ) : '' + def blacklist = blacklist_bed ? "--blacklist ${blacklist_bed}" : '' + def prefix = task.ext.prefix ?: sv_vcf ? "${meta.id}" : "${meta3.id}" + + if ( cns && coverage_bed || snv_vcf && coverage_bed ) error "Coverage_bed input is not compatible with cns and snv" + + """ + vcf2cytosure \\ + --vcf $sv_vcf \\ + --out ${prefix}.cgh \\ + $coverage \\ + $cnvkit \\ + $snv \\ + $blacklist \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + vcf2cytosure: \$(echo \$(vcf2cytosure --version 2>&1) | sed 's/^.* cytosure //' ) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def coverage = coverage_bed ? "--coverage ${coverage_bed}" : '' + def cnvkit = cns ? ( coverage_bed ? '' : "--cn ${cns}" ) : '' + def snv = snv_vcf ? ( coverage_bed ? '' : "--snv ${snv_vcf}" ) : '' + def blacklist = blacklist_bed ? "--blacklist ${blacklist_bed}" : '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + touch ${prefix}.xml + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + vcf2cytosure: \$(echo \$(vcf2cytosure --version 2>&1) | sed 's/^.* cytosure //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/vcf2cytosure/meta.yml b/modules/nf-core/vcf2cytosure/meta.yml new file mode 100644 index 00000000..39badd4c --- /dev/null +++ b/modules/nf-core/vcf2cytosure/meta.yml @@ -0,0 +1,77 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "vcf2cytosure" +description: Convert VCF with structural variations to CytoSure format +keywords: + - structural_variants + - array_cgh + - vcf + - cytosure +tools: + - "vcf2cytosure": + description: "Convert VCF with structural variations to CytoSure format" + homepage: "https://github.com/NBISweden/vcf2cytosure" + documentation: "https://github.com/NBISweden/vcf2cytosure" + tool_dev_url: "https://github.com/NBISweden/vcf2cytosure" + licence: "['MIT']" + +input: + - meta: + type: map + 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 ]` + - sv_vcf: + type: file + description: VCF file with structural variants + pattern: "*.{vcf,vcf.gz}" + - coverage_bed: + type: file + description: Bed file with coverage data + pattern: "*.bed" + - cns: + type: file + description: CN file from CNVkit, not compatible with coverage_bed file + - snv_vcf: + type: file + description: | + VCF file with SNVs to calculate probe coverage, + not compatible with coverage_bed + pattern: "*.{vcf,vcf.gz}" + - blacklilst_bed: + type: file + description: Bed file with regions to exclude + pattern: "*.bed" + +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" + - cgh: + type: file + description: SV:s in CytoSure format + pattern: "*.cgh" + +authors: + - "@jemten" diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf new file mode 100644 index 00000000..200acb6b --- /dev/null +++ b/subworkflows/local/generate_cytosure_files.nf @@ -0,0 +1,34 @@ +// +// Convert VCF with structural variations to the “.CGH” format used by the CytoSure Interpret Software +// + +include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' +include { VCF2CYTOSURE } from '../modules/nf-core/vcf2cytosure/main' + +workflow SV_VCF_TO_CYTOSURE { + take: + ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] + ch_bam // channel: [mandatory] [ path(bam) ] + + main: + ch_versions = Channel.empty() + + TIDDIT_COV (ch_bam, [[],[]]) // 2nd pos. arg is req. only for cram input + + ch_vcf.dump(tag: 'vcf_channel', pretty: true) + + + + // Split vcf in samples combine and drop + + // run vcf2cytosure samplevise + + + [id:sample, [vcf]] + + + ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) + + emit: + versions = ch_versions // channel: [ versions.yml ] +} From e155b459f4ecca1640b188f486659d73e4a3cb86 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Tue, 14 Nov 2023 10:30:32 +0100 Subject: [PATCH 1449/1921] fixes #439 --- docs/usage.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 311dc349..75a8a1e5 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -176,9 +176,11 @@ The mandatory and optional parameters for each category are tabulated below. ##### 3. Repeat expansions -| Mandatory | Optional | -| --------------- | -------- | -| variant_catalog | | +| Mandatory | Optional | +| --------------------------- | -------- | +| variant_catalog1 | | + +1 We reccomend using the catalogs found [here](https://github.com/Clinical-Genomics/reference-files/tree/master/rare-disease/disease_loci/ExpansionHunter-v5.0.0). These catalogs have been extended from the illumina ones to include information on pathogenicity, which is neccesarry for the workflow. ##### 4. Variant calling - SNV From c475f3db91b07e48ff13e2172ddb8ddc3af511de Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 14 Nov 2023 13:52:15 +0100 Subject: [PATCH 1450/1921] addressing #429 --- CHANGELOG.md | 1 + conf/modules/annotate_genome_snvs.config | 2 +- docs/output.md | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccf9e781..a5d172cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) - Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) - Replaced the logic where we added an arbitrary substring to keep file names unique after alignment which we then removed using a split operator, with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) +- Preventing a crash of rhocall annotate in the case of running four individuals whereof two are affected. ### `Updated` diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index a68d83e9..6697c498 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -19,7 +19,7 @@ process { if (!params.skip_snv_annotation) { withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { - ext.args = { "--samples ${meta.probands.join(",")} --skip-indels " } + ext.args = { "--samples ${meta.probands.unique().first()} --skip-indels " } ext.prefix = { "${meta.id}_roh" } } diff --git a/docs/output.md b/docs/output.md index 4da28214..53460628 100644 --- a/docs/output.md +++ b/docs/output.md @@ -314,6 +314,10 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. [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. +:::note +In the case of running a quattro, i.e. two affected children and their parents, only one of the probands will be used for annotating regions of homozygosity. This is a know limitation that we are hoping to solve in a future release. +::: + #### 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 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. From b79abe50c6ff8752b7b99d35a184dc015bccd742 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Nov 2023 11:37:38 +0100 Subject: [PATCH 1451/1921] updates --- modules.json | 4 +- modules/nf-core/eklipse/environment.yml | 7 ++ modules/nf-core/eklipse/main.nf | 3 +- modules/nf-core/eklipse/meta.yml | 5 +- modules/nf-core/eklipse/tests/main.nf.test | 36 ++++++++++ .../nf-core/eklipse/tests/main.nf.test.snap | 11 +++ modules/nf-core/eklipse/tests/tags.yml | 2 + modules/nf-core/svdb/query/environment.yml | 7 ++ modules/nf-core/svdb/query/main.nf | 24 ++++--- modules/nf-core/svdb/query/meta.yml | 10 ++- modules/nf-core/svdb/query/tests/main.nf.test | 36 ++++++++++ .../svdb/query/tests/main.nf.test.snap | 30 +++++++++ modules/nf-core/svdb/query/tests/tags.yml | 2 + nextflow_schema.json | 10 ++- .../local/annotate_structural_variants.nf | 67 ++++++++++++++++--- workflows/raredisease.nf | 1 + 16 files changed, 227 insertions(+), 28 deletions(-) create mode 100644 modules/nf-core/eklipse/environment.yml create mode 100644 modules/nf-core/eklipse/tests/main.nf.test create mode 100644 modules/nf-core/eklipse/tests/main.nf.test.snap create mode 100644 modules/nf-core/eklipse/tests/tags.yml create mode 100644 modules/nf-core/svdb/query/environment.yml create mode 100644 modules/nf-core/svdb/query/tests/main.nf.test create mode 100644 modules/nf-core/svdb/query/tests/main.nf.test.snap create mode 100644 modules/nf-core/svdb/query/tests/tags.yml diff --git a/modules.json b/modules.json index db78a291..e45a6fd8 100644 --- a/modules.json +++ b/modules.json @@ -102,7 +102,7 @@ }, "eklipse": { "branch": "master", - "git_sha": "39656f68219340420f03bd54a68e111c86e107e6", + "git_sha": "0031772de29283811deb989a5b42d0310d35ec22", "installed_by": ["modules"] }, "ensemblvep/filtervep": { @@ -417,7 +417,7 @@ }, "svdb/query": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "2a35cf4643135d51284236bc2835ee8b810c971d", "installed_by": ["modules"] }, "tabix/bgzip": { diff --git a/modules/nf-core/eklipse/environment.yml b/modules/nf-core/eklipse/environment.yml new file mode 100644 index 00000000..e3300709 --- /dev/null +++ b/modules/nf-core/eklipse/environment.yml @@ -0,0 +1,7 @@ +name: eklipse +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::eklipse=1.8 diff --git a/modules/nf-core/eklipse/main.nf b/modules/nf-core/eklipse/main.nf index 7b320a4b..b50df3c1 100644 --- a/modules/nf-core/eklipse/main.nf +++ b/modules/nf-core/eklipse/main.nf @@ -4,7 +4,7 @@ process EKLIPSE { 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" + conda "${moduleDir}/environment.yml" 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' }" @@ -31,6 +31,7 @@ process EKLIPSE { echo "$bam\t${prefix}" > infile.txt eKLIPse.py \\ -in infile.txt \\ + $args \\ -ref $ref_gb mv eKLIPse_*/eKLIPse_deletions.csv eKLIPse_deletions.csv mv eKLIPse_*/eKLIPse_genes.csv eKLIPse_genes.csv diff --git a/modules/nf-core/eklipse/meta.yml b/modules/nf-core/eklipse/meta.yml index ee60ef65..0f5e88a8 100644 --- a/modules/nf-core/eklipse/meta.yml +++ b/modules/nf-core/eklipse/meta.yml @@ -17,7 +17,6 @@ tools: 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 @@ -36,7 +35,6 @@ input: 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 @@ -55,6 +53,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@Lucpen" +maintainers: + - "@Lucpen" diff --git a/modules/nf-core/eklipse/tests/main.nf.test b/modules/nf-core/eklipse/tests/main.nf.test new file mode 100644 index 00000000..73cf1188 --- /dev/null +++ b/modules/nf-core/eklipse/tests/main.nf.test @@ -0,0 +1,36 @@ +nextflow_process { + + name "Test Process EKLIPSE" + script "../main.nf" + process "EKLIPSE" + tag "modules" + tag "modules_nfcore" + tag "eklipse" + + test("homo_sapiens [bam]") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_illumina_mt_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_illumina_mt_bam_bai'], checkIfExists: true) + ] + input[1] = [ file(params.test_data['homo_sapiens']['genome']['genome_mt_gb'], checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(file(process.out.deletions[0][1]), + file(process.out.genes[0][1]), + file(process.out.circos[0][1]), + file(process.out.versions[0])).match() + } + ) + } + } +} diff --git a/modules/nf-core/eklipse/tests/main.nf.test.snap b/modules/nf-core/eklipse/tests/main.nf.test.snap new file mode 100644 index 00000000..87d79dac --- /dev/null +++ b/modules/nf-core/eklipse/tests/main.nf.test.snap @@ -0,0 +1,11 @@ +{ + "eklipse": { + "content": [ + "eKLIPse_deletions.csv:md5,8bcfdb8f3e8a63dcd211c2a53b6ca0a7", + "eKLIPse_genes.csv:md5,ec1a1f31d018ca66a46d8a2d17bc8d18", + "eKLIPse_test.png:md5,d1ea2a548bc4f8d321b1128a61ea8b0a", + "versions.yml:md5,8e6ebaa9abf72ced91c1f56acd10f131" + ], + "timestamp": "2023-11-22T18:02:08.245264064" + } +} \ No newline at end of file diff --git a/modules/nf-core/eklipse/tests/tags.yml b/modules/nf-core/eklipse/tests/tags.yml new file mode 100644 index 00000000..eb91ee81 --- /dev/null +++ b/modules/nf-core/eklipse/tests/tags.yml @@ -0,0 +1,2 @@ +eklipse: + - modules/nf-core/eklipse/** diff --git a/modules/nf-core/svdb/query/environment.yml b/modules/nf-core/svdb/query/environment.yml new file mode 100644 index 00000000..bf048232 --- /dev/null +++ b/modules/nf-core/svdb/query/environment.yml @@ -0,0 +1,7 @@ +name: svdb_query +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::svdb=2.8.1 diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index 5dbd42ec..d516d382 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -2,7 +2,7 @@ process SVDB_QUERY { tag "$meta.id" label 'process_medium' - conda "bioconda::svdb=2.8.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/svdb:2.8.1--py39h5371cbf_0': 'biocontainers/svdb:2.8.1--py39h5371cbf_0' }" @@ -13,7 +13,8 @@ process SVDB_QUERY { val(in_frqs) val(out_occs) val(out_frqs) - path (vcf_dbs) + path(vcf_dbs) + path(bedpe_dbs) output: tuple val(meta), path("*_query.vcf") , emit: vcf @@ -23,12 +24,14 @@ process SVDB_QUERY { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def in_occ = "" - def in_frq = "" - def out_occ = "" - def out_frq = "" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def in_occ = "" + def in_frq = "" + def out_occ = "" + def out_frq = "" + def dbs_argument = vcf_dbs ? "--db ${vcf_dbs.join(',')}" : '' + def bedpeds_argument = bedpe_dbs ? "--bedpedb ${bedpe_dbs.join(',')}" : '' if (in_occs) { in_occ = "--in_occ ${in_occs.join(',')}" } @@ -41,7 +44,7 @@ process SVDB_QUERY { if (out_frqs) { out_frq = "--out_frq ${out_frqs.join(',')}" } - + if ( vcf_dbs && bedpe_dbs ) error "bedpedb input is not compatible with db inputs" """ svdb \\ --query \\ @@ -50,7 +53,8 @@ process SVDB_QUERY { $out_occ \\ $out_frq \\ $args \\ - --db ${vcf_dbs.join(',')} \\ + $dbs_argument \\ + $bedpeds_argument \\ --query_vcf $vcf \\ --prefix ${prefix} diff --git a/modules/nf-core/svdb/query/meta.yml b/modules/nf-core/svdb/query/meta.yml index 57e67e15..d11c51e6 100644 --- a/modules/nf-core/svdb/query/meta.yml +++ b/modules/nf-core/svdb/query/meta.yml @@ -2,6 +2,8 @@ name: svdb_query description: Query a structural variant database, using a vcf file as query keywords: - structural variants + - query + - svdb tools: - svdb: description: structural variant database software @@ -25,10 +27,14 @@ input: type: file description: query vcf file pattern: "*.{vcf,vcf.gz}" - - vcf_db: + - vcf_dbs: type: file - description: database vcf file + description: path to a database vcf, or a comma separated list of vcfs pattern: "*.{vcf,vcf.gz}" + - bedpe_dbs: + type: file + description: path to a SV database of the following format chrA-posA-chrB-posB-type-count-frequency, or a comma separated list of files + pattern: "*.{bedpe}" output: - meta: diff --git a/modules/nf-core/svdb/query/tests/main.nf.test b/modules/nf-core/svdb/query/tests/main.nf.test new file mode 100644 index 00000000..edf801f7 --- /dev/null +++ b/modules/nf-core/svdb/query/tests/main.nf.test @@ -0,0 +1,36 @@ +nextflow_process { + + name "Test Process SVDB_QUERY" + script "modules/nf-core/svdb/query/main.nf" + process "SVDB_QUERY" + tag "modules" + tag "modules_nfcore" + tag "svdb" + tag "svdb/query" + + test("svdb query") { + + when { + process { + """ + input[0] = Channel.of([ [ id:'test' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['test_sv_vcf'], checkIfExists: true) ] + ]) + input[1] = ['AC'] + input[2] = ['AF'] + input[3] = ['gnomad_svAC'] + input[4] = ['gnomad_svAF'] + input[5] = Channel.of([file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_sv_vcf_gz'], checkIfExists: true)]) + input[6] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(file(process.out.vcf[0][1]).name, file(process.out.versions[0]).name).match()} + ) + } + } +} diff --git a/modules/nf-core/svdb/query/tests/main.nf.test.snap b/modules/nf-core/svdb/query/tests/main.nf.test.snap new file mode 100644 index 00000000..22021d0a --- /dev/null +++ b/modules/nf-core/svdb/query/tests/main.nf.test.snap @@ -0,0 +1,30 @@ +{ + "svdb query": { + "content": [ + "test_query.vcf", + "versions.yml" + ], + "timestamp": "2023-11-22T14:56:08.90223505" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,e10873514a6dfc4ff377d645e7b3c9f5" + ] + ], + "timestamp": "2023-11-22T14:36:48.543666873" + }, + "vcf": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_query.vcf:md5,a29542606323b2430ec52ffb5c4c7f5e" + ] + ] + ], + "timestamp": "2023-11-22T14:36:48.523155905" + } +} \ No newline at end of file diff --git a/modules/nf-core/svdb/query/tests/tags.yml b/modules/nf-core/svdb/query/tests/tags.yml new file mode 100644 index 00000000..f4096378 --- /dev/null +++ b/modules/nf-core/svdb/query/tests/tags.yml @@ -0,0 +1,2 @@ +svdb/query: + - modules/nf-core/svdb/query/** diff --git a/nextflow_schema.json b/nextflow_schema.json index a03484d8..82618fca 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -288,11 +288,19 @@ "pattern": "^\\S+\\.dict$", "description": "Path to the genome dictionary file" }, + "svdb_query_bedpedbs": { + "type": "string", + "exists": true, + "format": "file-path", + "description": "Databases used for structural variant annotation in chrA-posA-chrB-posB-type-count-frequency format.", + "fa_icon": "fas fa-file-csv", + "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation." + }, "svdb_query_dbs": { "type": "string", "exists": true, "format": "file-path", - "description": "Databases used for structural variant annotation.", + "description": "Databases used for structural variant annotation in vcf format.", "fa_icon": "fas fa-file-csv", "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation." }, diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index be777ee2..e7046497 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,17 +2,19 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY } from '../../modules/nf-core/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' -include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' +include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' +include { SVDB_QUERY as SVDB_QUERY_BEDPE } from '../../modules/nf-core/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' +include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' +include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] ch_sv_dbs // channel: [mandatory] [ val(csv) ] + ch_sv_bedpedbs // channel: [mandatory] [ val(csv) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] @@ -33,16 +35,62 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { } .set { ch_svdb_dbs } - SVDB_QUERY( + Channel.fromPath(ch_sv_bedpedbs) + .splitCsv ( header:true ) + .multiMap { row -> + bedpedbs: row.filename + in_frqs: row.in_freq_info_key + in_occs: row.in_allele_count_info_key + out_frqs: row.out_freq_info_key + out_occs: row.out_allele_count_info_key + } + .set { ch_svdb_bedpedbs } + + SVDB_QUERY_DB ( ch_vcf, ch_svdb_dbs.in_occs.toList(), ch_svdb_dbs.in_frqs.toList(), ch_svdb_dbs.out_occs.toList(), ch_svdb_dbs.out_frqs.toList(), - ch_svdb_dbs.vcf_dbs.toList() + ch_svdb_dbs.vcf_dbs.toList(), + [] ) - PICARD_SORTVCF(SVDB_QUERY.out.vcf, ch_genome_fasta, ch_genome_dictionary) + ch_vcf + .join(SVDB_QUERY_DB.out.vcf, remainder: true) + .branch { it -> + call: it[2].equals(null) + return [it[0], it[1]] + db: !(it[2].equals(null)) + return [it[0], it[2]] + } + .set { ch_for_mix_querydb } + + ch_querydb_out = ch_for_mix_querydb.call.mix(ch_for_mix_querydb.db) + + SVDB_QUERY_BEDPE ( + ch_querydb_out, + ch_svdb_bedpedbs.in_occs.toList(), + ch_svdb_bedpedbs.in_frqs.toList(), + ch_svdb_bedpedbs.out_occs.toList(), + ch_svdb_bedpedbs.out_frqs.toList(), + [], + ch_svdb_bedpedbs.bedpedbs.toList() + ) + + ch_querydb_out + .join(SVDB_QUERY_BEDPE.out.vcf, remainder: true) + .branch { it -> + db: it[2].equals(null) + return [it[0], it[1]] + bedped: !(it[2].equals(null)) + return [it[0], it[2]] + } + .set { ch_for_mix_querybedpedb } + + ch_querypedbed_out = ch_for_mix_querybedpedb.db.mix(ch_for_mix_querybedpedb.bedped) + + PICARD_SORTVCF(ch_querypedbed_out, ch_genome_fasta, ch_genome_dictionary) PICARD_SORTVCF.out.vcf.map { meta, vcf -> return [meta,vcf,[]] }.set { ch_sortvcf } @@ -60,7 +108,8 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { TABIX_VEP (ENSEMBLVEP_SV.out.vcf_gz) - ch_versions = ch_versions.mix(SVDB_QUERY.out.versions) + ch_versions = ch_versions.mix(SVDB_QUERY_DB.out.versions) + ch_versions = ch_versions.mix(SVDB_QUERY_BEDPE.out.versions) ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_SV.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b528c0f7..0fec30dc 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -402,6 +402,7 @@ workflow RAREDISEASE { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, params.svdb_query_dbs, + params.svdb_query_bedpedbs, params.genome, params.vep_cache_version, ch_vep_cache, From a3b5b9db58aed30d2a97e8d22268d33f3cbfa0d1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Nov 2023 14:03:17 +0100 Subject: [PATCH 1452/1921] fix errors --- conf/modules/annotate_structural_variants.config | 8 +++++++- docs/usage.md | 14 +++++++------- nextflow.config | 4 ++++ .../local/annotate_structural_variants.nf | 10 ++++++---- workflows/raredisease.nf | 16 ++++++++++++---- 5 files changed, 36 insertions(+), 16 deletions(-) diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 4b3dfe7a..131149f9 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -24,7 +24,13 @@ process { ] } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY' { + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_BEDPE' { + ext.when = {!params.svdb_query_bedpedbs.equals(null)} + ext.prefix = { "${meta.id}_svdbquery" } + } + + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_DB' { + ext.when = {!params.svdb_query_dbs.equals(null)} ext.prefix = { "${meta.id}_svdbquery" } } diff --git a/docs/usage.md b/docs/usage.md index 75a8a1e5..beafeac2 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -242,13 +242,13 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl ##### 8. SV annotation & Ranking -| Mandatory | Optional | -| -------------------------- | ------------------ | -| genome | reduced_penetrance | -| svdb_query_dbs1 | | -| vep_cache_version | vep_filters | -| vep_cache | | -| score_config_sv | | +| Mandatory | Optional | +| ---------------------------------------------- | ------------------ | +| genome | reduced_penetrance | +| svdb_query_dbs/svdb_query_bedpedbs1 | | +| vep_cache_version | vep_filters | +| vep_cache | | +| score_config_sv | | 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). diff --git a/nextflow.config b/nextflow.config index a6603a50..7309d888 100644 --- a/nextflow.config +++ b/nextflow.config @@ -37,6 +37,10 @@ params { cadd_resources = null platform = 'illumina' + // File params + svdb_query_bedpedbs = null + svdb_query_dbs = null + // Alignment aligner = 'bwamem2' rmdup = false diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index e7046497..43c8e97d 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -14,7 +14,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] ch_sv_dbs // channel: [mandatory] [ val(csv) ] - ch_sv_bedpedbs // channel: [mandatory] [ val(csv) ] + ch_sv_bedpedbs // channel: [mandatory] [ val(csv) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] @@ -22,9 +22,11 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_svdb_dbs = Channel.empty() + ch_svdb_bedpedbs = Channel.empty() - Channel.fromPath(ch_sv_dbs) + ch_sv_dbs .splitCsv ( header:true ) .multiMap { row -> vcf_dbs: row.filename @@ -35,7 +37,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { } .set { ch_svdb_dbs } - Channel.fromPath(ch_sv_bedpedbs) + ch_sv_bedpedbs .splitCsv ( header:true ) .multiMap { row -> bedpedbs: row.filename diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0fec30dc..4d1e51e7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -32,6 +32,7 @@ def mandatoryParams = [ "variant_catalog", "variant_caller" ] +def missingParamsCount = 0 if (!params.skip_snv_annotation) { mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version", @@ -39,7 +40,11 @@ if (!params.skip_snv_annotation) { } if (!params.skip_sv_annotation) { - mandatoryParams += ["genome", "svdb_query_dbs", "vep_cache", "vep_cache_version", "score_config_sv"] + mandatoryParams += ["genome", "vep_cache", "vep_cache_version", "score_config_sv"] + if (!params.svdb_query_bedpedbs && !params.svdb_query_dbs) { + println("params.svdb_query_bedpedbs or params.svdb_query_dbs should be set.") + missingParamsCount += 1 + } } if (!params.skip_mt_annotation) { @@ -62,7 +67,6 @@ if (!params.skip_vep_filter) { mandatoryParams += ["vep_filters"] } -def missingParamsCount = 0 for (param in mandatoryParams.unique()) { if (params[param] == null) { println("params." + param + " not set.") @@ -258,6 +262,10 @@ workflow RAREDISEASE { : Channel.value([]) ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() : Channel.value([]) + ch_sv_dbs = params.svdb_query_dbs ? Channel.fromPath(params.svdb_query_dbs) + : Channel.empty() + ch_sv_bedpedbs = params.svdb_query_bedpedbs ? Channel.fromPath(params.svdb_query_bedpedbs) + : Channel.empty() 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() @@ -401,8 +409,8 @@ workflow RAREDISEASE { if (!params.skip_sv_annotation) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, - params.svdb_query_dbs, - params.svdb_query_bedpedbs, + ch_sv_dbs, + ch_sv_bedpedbs, params.genome, params.vep_cache_version, ch_vep_cache, From 16ff843bf92c56854e627a182856172523aa06ac Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Nov 2023 17:04:35 +0100 Subject: [PATCH 1453/1921] review comment --- subworkflows/local/annotate_structural_variants.nf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 43c8e97d..6766a73c 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -61,14 +61,14 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_vcf .join(SVDB_QUERY_DB.out.vcf, remainder: true) .branch { it -> - call: it[2].equals(null) + original_call: it[2].equals(null) return [it[0], it[1]] - db: !(it[2].equals(null)) + annotated_with_db: !(it[2].equals(null)) return [it[0], it[2]] } .set { ch_for_mix_querydb } - ch_querydb_out = ch_for_mix_querydb.call.mix(ch_for_mix_querydb.db) + ch_querydb_out = ch_for_mix_querydb.original_call.mix(ch_for_mix_querydb.annotated_with_db) SVDB_QUERY_BEDPE ( ch_querydb_out, @@ -83,14 +83,14 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_querydb_out .join(SVDB_QUERY_BEDPE.out.vcf, remainder: true) .branch { it -> - db: it[2].equals(null) + querydb_out: it[2].equals(null) return [it[0], it[1]] - bedped: !(it[2].equals(null)) + annotated_with_bedped: !(it[2].equals(null)) return [it[0], it[2]] } .set { ch_for_mix_querybedpedb } - ch_querypedbed_out = ch_for_mix_querybedpedb.db.mix(ch_for_mix_querybedpedb.bedped) + ch_querypedbed_out = ch_for_mix_querybedpedb.querydb_out.mix(ch_for_mix_querybedpedb.annotated_with_bedped) PICARD_SORTVCF(ch_querypedbed_out, ch_genome_fasta, ch_genome_dictionary) From 3aa1e99817edbe03d406134f85a4aead195e1a9b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 23 Nov 2023 21:35:42 +0530 Subject: [PATCH 1454/1921] Apply suggestions from code review Co-authored-by: Anders Jemt --- conf/modules/annotate_structural_variants.config | 4 ++-- docs/usage.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 131149f9..a7e60c69 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -25,12 +25,12 @@ process { } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_BEDPE' { - ext.when = {!params.svdb_query_bedpedbs.equals(null)} + ext.when = { !params.svdb_query_bedpedbs.equals(null) } ext.prefix = { "${meta.id}_svdbquery" } } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_DB' { - ext.when = {!params.svdb_query_dbs.equals(null)} + ext.when = { !params.svdb_query_dbs.equals(null) } ext.prefix = { "${meta.id}_svdbquery" } } diff --git a/docs/usage.md b/docs/usage.md index beafeac2..56d7fc6a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -250,7 +250,7 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl | vep_cache | | | score_config_sv | | -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). +1 A CSV file that describes the databases (VCFs or BEDPEs) 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). ##### 9. Mitochondrial annotation From 0371db4e8babcc66cc76794b9cf99a0a545413de Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:30:07 +0100 Subject: [PATCH 1455/1921] update config --- conf/modules/annotate_structural_variants.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 131149f9..b2ee6218 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -26,12 +26,12 @@ process { withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_BEDPE' { ext.when = {!params.svdb_query_bedpedbs.equals(null)} - ext.prefix = { "${meta.id}_svdbquery" } + ext.prefix = { "${meta.id}_bedpedb" } } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_DB' { ext.when = {!params.svdb_query_dbs.equals(null)} - ext.prefix = { "${meta.id}_svdbquery" } + ext.prefix = { "${meta.id}_vcfdb" } } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { From ec49262039ade915d66707335b93294fb4aab16a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 Nov 2023 13:51:53 +0100 Subject: [PATCH 1456/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5d172cc..90aec003 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix "there is no process matching config selector warnings" [#435](https://github.com/nf-core/raredisease/pull/435) - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) +- A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) ### `Changed` From a22602f4480ede2f6f9884a6286aae4f00df08f6 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 1 Dec 2023 10:08:36 +0100 Subject: [PATCH 1457/1921] temp fix of mem allocation for gatk cnv --- modules.json | 6 ++++-- .../germlinecnvcaller/gatk4-germlinecnvcaller.diff | 14 ++++++++++++++ modules/nf-core/gatk4/germlinecnvcaller/main.nf | 2 +- .../gatk4-postprocessgermlinecnvcalls.diff | 14 ++++++++++++++ .../gatk4/postprocessgermlinecnvcalls/main.nf | 2 +- 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff create mode 100644 modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff diff --git a/modules.json b/modules.json index e45a6fd8..1c4709dd 100644 --- a/modules.json +++ b/modules.json @@ -153,7 +153,8 @@ "gatk4/germlinecnvcaller": { "branch": "master", "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff" }, "gatk4/intervallisttools": { "branch": "master", @@ -178,7 +179,8 @@ "gatk4/postprocessgermlinecnvcalls": { "branch": "master", "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff" }, "gatk4/preprocessintervals": { "branch": "master", diff --git a/modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff b/modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff new file mode 100644 index 00000000..c501e50e --- /dev/null +++ b/modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff @@ -0,0 +1,14 @@ +Changes in module 'nf-core/gatk4/germlinecnvcaller' +--- modules/nf-core/gatk4/germlinecnvcaller/main.nf ++++ modules/nf-core/gatk4/germlinecnvcaller/main.nf +@@ -36,7 +36,7 @@ + avail_mem = (task.memory.mega*0.8).intValue() + } + """ +- gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ ++ gatk --java-options "-Xmx${avail_mem}M" GermlineCNVCaller \\ + $input_list \\ + $ploidy_command \\ + $output_command \\ + +************************************************************ diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index 973a0d3b..441e730f 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/main.nf +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -36,7 +36,7 @@ process GATK4_GERMLINECNVCALLER { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ + gatk --java-options "-Xmx${avail_mem}M" GermlineCNVCaller \\ $input_list \\ $ploidy_command \\ $output_command \\ diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff new file mode 100644 index 00000000..b922c53d --- /dev/null +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff @@ -0,0 +1,14 @@ +Changes in module 'nf-core/gatk4/postprocessgermlinecnvcalls' +--- modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf ++++ modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +@@ -35,7 +35,7 @@ + avail_mem = (task.memory.mega*0.8).intValue() + } + """ +- gatk --java-options "-Xmx${avail_mem}g" PostprocessGermlineCNVCalls \\ ++ gatk --java-options "-Xmx${avail_mem}M" PostprocessGermlineCNVCalls \\ + $calls_command \\ + $model_command \\ + $ploidy_command \\ + +************************************************************ diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index d6223043..d916c2af 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -35,7 +35,7 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" PostprocessGermlineCNVCalls \\ + gatk --java-options "-Xmx${avail_mem}M" PostprocessGermlineCNVCalls \\ $calls_command \\ $model_command \\ $ploidy_command \\ From 0d2a770ce7044f207228dd3fc525e6d8d9c8b388 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 1 Dec 2023 10:14:34 +0100 Subject: [PATCH 1458/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90aec003..de991758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) - Replaced the logic where we added an arbitrary substring to keep file names unique after alignment which we then removed using a split operator, with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) - Preventing a crash of rhocall annotate in the case of running four individuals whereof two are affected. +- Fixed memory qualifier in gatk4 germlinecnvcaller and postprocessgermlinecnvcalls ### `Updated` From 6f24b3eab40da1b9ed9075ba31d600ac94ccccd6 Mon Sep 17 00:00:00 2001 From: lucpen Date: Thu, 14 Dec 2023 00:02:00 +0100 Subject: [PATCH 1459/1921] feat added ngsbits-samplegender --- CHANGELOG.md | 1 + CITATIONS.md | 2 + conf/modules/qc_bam.config | 10 +++ modules.json | 5 ++ .../ngsbits/samplegender/environment.yml | 7 ++ modules/nf-core/ngsbits/samplegender/main.nf | 51 ++++++++++++++ modules/nf-core/ngsbits/samplegender/meta.yml | 69 +++++++++++++++++++ subworkflows/local/qc_bam.nf | 6 ++ 8 files changed, 151 insertions(+) create mode 100644 modules/nf-core/ngsbits/samplegender/environment.yml create mode 100644 modules/nf-core/ngsbits/samplegender/main.nf create mode 100644 modules/nf-core/ngsbits/samplegender/meta.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index de991758..58c9ac3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) +- ngsbits samplegender to check sex ### `Changed` diff --git a/CITATIONS.md b/CITATIONS.md index 5f404de8..71414414 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -80,6 +80,8 @@ > Pedersen BS, Quinlan AR. Mosdepth: quick coverage calculation for genomes and exomes. Hancock J, ed. Bioinformatics. 2018;34(5):867-868. doi:10.1093/bioinformatics/btx699 +- [ngs-bits-samplegender](https://github.com/imgag/ngs-bits/tree/master) + - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index cc744773..0db1b255 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -53,6 +53,16 @@ process { ext.prefix = { "${meta.id}_mosdepth" } } + withName: '.*QC_BAM:NGSBITS_SAMPLEGENDER' { + // NGSBITS_SAMPLEGENDER needs a chrX and chrY in order to run so we skip it for the two test profiles + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } + publishDir = [ + path: { "${params.outdir}/ngsbits_samplegender" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("bwamem2") } ext.prefix = { "${meta.id}_wgsmetrics" } diff --git a/modules.json b/modules.json index 1c4709dd..72c3e200 100644 --- a/modules.json +++ b/modules.json @@ -277,6 +277,11 @@ "git_sha": "a6e11ac655e744f7ebc724be669dd568ffdc0e80", "installed_by": ["modules"] }, + "ngsbits/samplegender": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": ["modules"] + }, "peddy": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/nf-core/ngsbits/samplegender/environment.yml b/modules/nf-core/ngsbits/samplegender/environment.yml new file mode 100644 index 00000000..486c233c --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/environment.yml @@ -0,0 +1,7 @@ +name: ngsbits_samplegender +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::ngs-bits=2023_02 diff --git a/modules/nf-core/ngsbits/samplegender/main.nf b/modules/nf-core/ngsbits/samplegender/main.nf new file mode 100644 index 00000000..3562238d --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/main.nf @@ -0,0 +1,51 @@ +process NGSBITS_SAMPLEGENDER { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ngs-bits:2023_02--py311ha0b7adc_2': + 'biocontainers/ngs-bits:2023_02--py311ha0b7adc_2' }" + + input: + tuple val(meta), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta2), path(fai) + val method + + output: + tuple val(meta), path("*.tsv"), emit: tsv + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def ref = fasta ? "-ref ${fasta}" : "" + """ + SampleGender \\ + -in ${bam} \\ + -method ${method} \\ + -out ${prefix}.tsv \\ + ${ref} \\ + ${args} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ngs-bits: \$(echo \$(SampleGender --version 2>&1) | sed 's/SampleGender //' ) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ngs-bits: \$(echo \$(SampleGender --version 2>&1) | sed 's/SampleGender //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/ngsbits/samplegender/meta.yml b/modules/nf-core/ngsbits/samplegender/meta.yml new file mode 100644 index 00000000..997bc06e --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/meta.yml @@ -0,0 +1,69 @@ +--- +name: "ngsbits_samplegender" +description: Determines the gender of a sample from the BAM/CRAM file. +keywords: + - gender + - cram + - bam + - short reads +tools: + - "ngsbits": + description: "Short-read sequencing tools" + homepage: "https://github.com/imgag/ngs-bits" + documentation: "https://github.com/imgag/ngs-bits" + tool_dev_url: "https://github.com/imgag/ngs-bits" + licence: "['MIT license']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: One or more BAM/CRAM files to determine the gender of + pattern: "*.{bam,cram}" + - bai: + type: file + description: The index file(s) from the input BAM/CRAM file(s) + pattern: "*.{bai,crai}" + - meta2: + type: map + description: | + Groovy Map containing reference fasta information + e.g. [ id:'test' ] + - fasta: + type: file + description: The reference FASTA to use (mandatory when CRAM files are used) + pattern: "*.{fasta,fa,fna}" + - meta3: + type: map + description: | + Groovy Map containing reference fasta index information + e.g. [ id:'test' ] + - fasta: + type: file + description: The index of the reference FASTA to use (mandatory when CRAM files are used) + pattern: "*.fai" + - method: + type: string + description: The method to use to define the gender (posibilities are 'xy', 'hetx' and 'sry') + pattern: "(xy|hetx|sry)" +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: An output TSV file containing the results of the gender prediction + pattern: "*.tsv" +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 11439a7b..758ce7d7 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -12,6 +12,7 @@ include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../m include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { NGSBITS_SAMPLEGENDER } from '../../modules/nf-core/ngsbits/samplegender/main' workflow QC_BAM { @@ -59,6 +60,9 @@ workflow QC_BAM { SENTIEON_WGSMETRICS ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_wgs.map{ interval -> [[:], interval]} ) SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:], interval]} ) + // Check sex + NGSBITS_SAMPLEGENDER(ch_bam_bai, ch_genome_fasta, ch_genome_fai, "xy") + 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) @@ -67,6 +71,7 @@ workflow QC_BAM { ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) + ch_versions = ch_versions.mix(NGSBITS_SAMPLEGENDER.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first(), SENTIEON_WGSMETRICS.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions.first(), SENTIEON_WGSMETRICS_Y.out.versions.first()) @@ -78,6 +83,7 @@ workflow QC_BAM { bigwig = UCSC_WIGTOBIGWIG.out.bw // channel: [ val(meta), path(bw) ] d4 = MOSDEPTH.out.per_base_d4 // channel: [ val(meta), path(d4) ] global_dist = MOSDEPTH.out.global_txt // channel: [ val(meta), path(txt) ] + sex_check = NGSBITS_SAMPLEGENDER.out.tsv // channel: [val(meta), path(tsv) ] cov = ch_cov // channel: [ val(meta), path(metrics) ] cov_y = ch_cov_y // channel: [ val(meta), path(metrics) ] versions = ch_versions // channel: [ path(versions.yml) ] From 4db892aae1c5958b985ab1b3491f25defc3e62db Mon Sep 17 00:00:00 2001 From: Alexander Koc Date: Fri, 15 Dec 2023 13:55:11 +0100 Subject: [PATCH 1460/1921] Fix wrong process name in sention BWA version output --- subworkflows/local/alignment/align_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 11c51c6d..29903c72 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -32,7 +32,7 @@ workflow ALIGN_MT { } else if (params.aligner.equals("sentieon")) { SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) ch_sentieon_bam = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } - ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) + ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) } Channel.empty() From c40c4adb5418e1e3e35e4307b45aeb7f6e219fe7 Mon Sep 17 00:00:00 2001 From: Alexander Koc Date: Fri, 15 Dec 2023 14:17:31 +0100 Subject: [PATCH 1461/1921] Fix wrong process name in ch_versions mix call --- subworkflows/local/call_snv.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index d363d35c..6413f896 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -61,7 +61,7 @@ workflow CALL_SNV { ) ch_sentieon_vcf = CALL_SNV_SENTIEON.out.vcf ch_sentieon_tbi = CALL_SNV_SENTIEON.out.tabix - ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) + ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) } ch_vcf = Channel.empty().mix(ch_deepvar_vcf, ch_sentieon_vcf) From a4fe26cdaa40a9e802afa6247204ad5a27549fca Mon Sep 17 00:00:00 2001 From: Alexander Koc Date: Fri, 15 Dec 2023 16:19:45 +0100 Subject: [PATCH 1462/1921] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de991758..bde103a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced the logic where we added an arbitrary substring to keep file names unique after alignment which we then removed using a split operator, with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) - Preventing a crash of rhocall annotate in the case of running four individuals whereof two are affected. - Fixed memory qualifier in gatk4 germlinecnvcaller and postprocessgermlinecnvcalls +- Fixed wrong process names when outputting versions in `ALIGN_SENTIEON` and `CALL_SNV`. ### `Updated` From 0d952004fa3fd15fd32514ce141d861f2f058afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=ADa=20Pe=C3=B1a-P=C3=A9rez?= Date: Mon, 18 Dec 2023 09:14:23 +0100 Subject: [PATCH 1463/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58c9ac3b..7a0bff35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) -- ngsbits samplegender to check sex +- ngsbits samplegender to check sex [#453] (https://github.com/nf-core/raredisease/pull/453) ### `Changed` From c12edd0bc846a0ede1cac060b05761ee210b20a3 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 10:18:14 +0100 Subject: [PATCH 1464/1921] fix add prefix to ngs-bits output --- conf/modules/qc_bam.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 0db1b255..5140afa8 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -56,6 +56,7 @@ process { withName: '.*QC_BAM:NGSBITS_SAMPLEGENDER' { // NGSBITS_SAMPLEGENDER needs a chrX and chrY in order to run so we skip it for the two test profiles ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } + ext.prefix = { "${meta.id}_ngsbits_sex } publishDir = [ path: { "${params.outdir}/ngsbits_samplegender" }, mode: params.publish_dir_mode, From e2a6eb92fa87ceb1d4fda5c6c488e0e17195125d Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 10:22:34 +0100 Subject: [PATCH 1465/1921] fix add prefix to ngs-bits output --- 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 5140afa8..48e7d3c1 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -56,7 +56,7 @@ process { withName: '.*QC_BAM:NGSBITS_SAMPLEGENDER' { // NGSBITS_SAMPLEGENDER needs a chrX and chrY in order to run so we skip it for the two test profiles ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } - ext.prefix = { "${meta.id}_ngsbits_sex } + ext.prefix = { "${meta.id}_ngsbits_sex" } publishDir = [ path: { "${params.outdir}/ngsbits_samplegender" }, mode: params.publish_dir_mode, From 556e26f1c87ed5017d215a4d62e4bd2a33ae232f Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 12:04:51 +0100 Subject: [PATCH 1466/1921] feat added parameter for ngs-bits method --- main.nf | 1 + nextflow.config | 5 ++++- nextflow_schema.json | 9 ++++++++- subworkflows/local/qc_bam.nf | 23 ++++++++++++----------- workflows/raredisease.nf | 3 ++- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/main.nf b/main.nf index 12cdadc0..ee02c024 100644 --- a/main.nf +++ b/main.nf @@ -35,6 +35,7 @@ params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp_tbi') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') params.mt_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_fasta') +params.ngsbits_samplegender_method = WorkflowMain.getGenomeAttribute(params, 'ngsbits_samplegender_method') params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 'ploidy_model') params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') params.readcount_intervals = WorkflowMain.getGenomeAttribute(params, 'readcount_intervals') diff --git a/nextflow.config b/nextflow.config index 7309d888..6a58436a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -10,7 +10,7 @@ params { // Required options - input = null + input = null // References genome = 'GRCh38' @@ -37,6 +37,9 @@ params { cadd_resources = null platform = 'illumina' + // Bam_qc + ngsbits_samplegender_method = 'xy' + // File params svdb_query_bedpedbs = null svdb_query_dbs = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 82618fca..a5690fbb 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -386,6 +386,13 @@ "fa_icon": "fas fa-align-center", "enum": ["illumina"] }, + "ngsbits_samplegender_method": { + "type": "string", + "default": "xy", + "enum": ["xy", "hetx", "sry"], + "description": "Method selection for ngs-bits samplegender", + "fa_icon": "fas fa-align-center" + }, "save_mapped_as_cram": { "type": "boolean", "description": "Specifies whether to generate and publish alignment files as cram instead of bam", @@ -473,7 +480,7 @@ "cnvnator_binsize": { "type": "number", "description": "Bin size for CNVnator", - "default": "1000", + "default": 1000, "fa_icon": "fas fa-align-center" }, "sentieon_dnascope_pcr_indel_model": { diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 758ce7d7..d4ae2842 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -17,16 +17,17 @@ include { NGSBITS_SAMPLEGENDER } from '../../m workflow QC_BAM { 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_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) ] - ch_intervals_wgs // channel: [mandatory] [ path(intervals) ] - ch_intervals_y // channel: [mandatory] [ path(intervals) ] + 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_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) ] + ch_intervals_wgs // channel: [mandatory] [ path(intervals) ] + ch_intervals_y // channel: [mandatory] [ path(intervals) ] + ngsbits_samplegender_method // channel [val(method)] main: ch_versions = Channel.empty() @@ -61,7 +62,7 @@ workflow QC_BAM { SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:], interval]} ) // Check sex - NGSBITS_SAMPLEGENDER(ch_bam_bai, ch_genome_fasta, ch_genome_fai, "xy") + NGSBITS_SAMPLEGENDER(ch_bam_bai, ch_genome_fasta, ch_genome_fai, ngsbits_samplegender_method) 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/workflows/raredisease.nf b/workflows/raredisease.nf index 4d1e51e7..c3acb0c7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -339,7 +339,8 @@ workflow RAREDISEASE { ch_target_intervals, ch_genome_chrsizes, ch_intervals_wgs, - ch_intervals_y + ch_intervals_y, + Channel.value(params.ngsbits_samplegender_method) ) ch_versions = ch_versions.mix(QC_BAM.out.versions) From 7fa3f3a602f758dc3f49562c7eb027cecf419ef1 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 18 Dec 2023 15:55:27 +0100 Subject: [PATCH 1467/1921] fixing vcf2cytosure subworkflow --- CHANGELOG.md | 1 + conf/modules/generate_cytosure_files.config | 50 +++++++++++++++++++ main.nf | 1 + modules.json | 3 +- modules/nf-core/vcf2cytosure/main.nf | 2 +- .../nf-core/vcf2cytosure/vcf2cytosure.diff | 14 ++++++ nextflow.config | 2 + nextflow_schema.json | 16 +++++- subworkflows/local/generate_cytosure_files.nf | 40 +++++++++------ workflows/raredisease.nf | 15 +++++- 10 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 conf/modules/generate_cytosure_files.config create mode 100644 modules/nf-core/vcf2cytosure/vcf2cytosure.diff diff --git a/CHANGELOG.md b/CHANGELOG.md index de991758..c3f2b9c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) +- New workflow for generating cgh files frm SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default ### `Changed` diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config new file mode 100644 index 00000000..e42717b1 --- /dev/null +++ b/conf/modules/generate_cytosure_files.config @@ -0,0 +1,50 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// VCF2Cytosure workflow options +// + +process { + + if ( params.analysis_type != "wes" && params.vcf2cytosure_switch ) { + + withName: '.*GENERATE_CYTOSURE_FILES:TIDDIT_COV_VCF2CYTOSURE' { + ext.args = { '-z 500' } + ext.prefix = { "${meta.id}_cov" } + } + + withName: '.*GENERATE_CYTOSURE_FILES:SPLIT_AND_FILTER_SV_VCF' { + ext.args = { [ + "--samples ${meta.id}", + '--output-type z', + "--exclude 'clingen_ngiAF > 0.1 || swegenAF > 0.05 || clinical_genomics_mipAF > 0.05 || decipherAF > 0.1 || clinical_genomics_loqusFrq > 0.05 || gnomad_svAF > 0.05'" + ].join(' ') } + ext.prefix = { ${meta.id} } + } + + withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { + ext.args = { [ + meta.sex.equals('1') ? '--sex male' : '--sex female', + '--size 5000', + '--maxbnd 5000' + ].join(' ') } + ext.prefix = { "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/vcf2cytosure" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + } +} diff --git a/main.nf b/main.nf index 12cdadc0..094fcd9c 100644 --- a/main.nf +++ b/main.nf @@ -46,6 +46,7 @@ params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 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.vcf2cytosure_blacklist = WorkflowMain.getGenomeAttribute(params, 'vcf2cytosure_blacklist') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') params.vcfanno_lua = WorkflowMain.getGenomeAttribute(params, 'vcfanno_lua') diff --git a/modules.json b/modules.json index b2dfa702..2fb1e307 100644 --- a/modules.json +++ b/modules.json @@ -465,7 +465,8 @@ "vcf2cytosure": { "branch": "master", "git_sha": "2dba354d7c0a43a1e6d6ce26f408b4936d4ed619", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/vcf2cytosure/vcf2cytosure.diff" }, "vcfanno": { "branch": "master", diff --git a/modules/nf-core/vcf2cytosure/main.nf b/modules/nf-core/vcf2cytosure/main.nf index f85dc05e..f253f979 100644 --- a/modules/nf-core/vcf2cytosure/main.nf +++ b/modules/nf-core/vcf2cytosure/main.nf @@ -12,7 +12,7 @@ process VCF2CYTOSURE { tuple val(meta2), path(coverage_bed) tuple val(meta3), path(cns) tuple val(meta4), path(snv_vcf) - path blacklist_bed + path(blacklist_bed) output: tuple val(meta), path("*.cgh"), emit: cgh diff --git a/modules/nf-core/vcf2cytosure/vcf2cytosure.diff b/modules/nf-core/vcf2cytosure/vcf2cytosure.diff new file mode 100644 index 00000000..660dfca7 --- /dev/null +++ b/modules/nf-core/vcf2cytosure/vcf2cytosure.diff @@ -0,0 +1,14 @@ +Changes in module 'nf-core/vcf2cytosure' +--- modules/nf-core/vcf2cytosure/main.nf ++++ modules/nf-core/vcf2cytosure/main.nf +@@ -12,7 +12,7 @@ + tuple val(meta2), path(coverage_bed) + tuple val(meta3), path(cns) + tuple val(meta4), path(snv_vcf) +- path blacklist_bed ++ path(blacklist_bed) + + output: + tuple val(meta), path("*.cgh"), emit: cgh + +************************************************************ diff --git a/nextflow.config b/nextflow.config index 7309d888..27543ad5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -36,6 +36,7 @@ params { gens_switch = false cadd_resources = null platform = 'illumina' + vcf2cytosure_switch = false // File params svdb_query_bedpedbs = null @@ -299,6 +300,7 @@ includeConfig 'conf/modules/call_repeat_expansions.config' includeConfig 'conf/modules/call_snv.config' includeConfig 'conf/modules/call_structural_variants.config' includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' +includeConfig 'conf/modules/generate_cytosure_files.config' includeConfig 'conf/modules/gens.config' includeConfig 'conf/modules/peddy_check.config' includeConfig 'conf/modules/prepare_references.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 82618fca..80cea991 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -321,6 +321,13 @@ "help_text": "Should be Stranger's extended JSON as described at https://github.com/Clinical-Genomics/stranger/blob/master/stranger/resources/variant_catalog_grch37.json. This file is used by both ExpansionHunter and Stranger", "fa_icon": "fas fa-file" }, + "vcf2cytosure_blacklist": { + "type": "string", + "help_text": "Optional file to blacklist regions for VCF2cytosure", + "pattern": "^\\S+\\.bed$", + "format": "file-path", + "fa_icon": "fas fa-file" + }, "vcfanno_resources": { "type": "string", "exists": true, @@ -435,6 +442,13 @@ "type": "boolean", "description": "Specifies whether or not to filter results based on a list of candidate genes specified in 'vep_filters'.", "fa_icon": "fas fa-toggle-on" + }, + "vcf2cytosure_switch": { + "type": "boolean", + "default": false, + "description": "Turn on the vcf2cytosure subworkflow", + "fa_icon": "fas fa-toggle-on", + "help_text": "vcf2cytosure can generate CGH files from a structural variant VCF file that can be analysed in the CytoSure interpretation software. Cut offs for allele frequencies and bin sizes can be modified in the config file. Turned off by default." } } }, @@ -473,7 +487,7 @@ "cnvnator_binsize": { "type": "number", "description": "Bin size for CNVnator", - "default": "1000", + "default": 1000, "fa_icon": "fas fa-align-center" }, "sentieon_dnascope_pcr_indel_model": { diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf index 200acb6b..c5b4f205 100644 --- a/subworkflows/local/generate_cytosure_files.nf +++ b/subworkflows/local/generate_cytosure_files.nf @@ -2,33 +2,41 @@ // Convert VCF with structural variations to the “.CGH” format used by the CytoSure Interpret Software // -include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' -include { VCF2CYTOSURE } from '../modules/nf-core/vcf2cytosure/main' +include { BCFTOOLS_VIEW as SPLIT_AND_FILTER_SV_VCF } from '../../modules/nf-core/bcftools/view/main' +include { TIDDIT_COV as TIDDIT_COV_VCF2CYTOSURE } from '../../modules/nf-core/tiddit/cov/main' +include { VCF2CYTOSURE } from '../../modules/nf-core/vcf2cytosure/main' -workflow SV_VCF_TO_CYTOSURE { +workflow GENERATE_CYTOSURE_FILES { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] - ch_bam // channel: [mandatory] [ path(bam) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_blacklist // channel: [optional] [path(blacklist)] main: ch_versions = Channel.empty() - TIDDIT_COV (ch_bam, [[],[]]) // 2nd pos. arg is req. only for cram input + TIDDIT_COV_VCF2CYTOSURE (ch_bam, [[],[]]) - ch_vcf.dump(tag: 'vcf_channel', pretty: true) + // Build channel: [val(sample_meta). path(vcf), path(vcf_index)] + ch_bam.combine(ch_vcf).map { + meta_sample, bam, meta_case, vcf, tbi -> + return [ meta_sample, vcf, tbi ] + }.set { ch_sample_vcf } + // Split vcf into sample vcf:s and frequency filter + SPLIT_AND_FILTER_SV_VCF ( ch_sample_vcf, [], [], [] ) + VCF2CYTOSURE ( + SPLIT_AND_FILTER_SV_VCF.out.vcf, + TIDDIT_COV_VCF2CYTOSURE.out.cov, + [[], []], [[], []], + ch_blacklist + ) - // Split vcf in samples combine and drop - - // run vcf2cytosure samplevise - - - [id:sample, [vcf]] - - - ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) + ch_versions = ch_versions.mix(TIDDIT_COV_VCF2CYTOSURE.out.versions.first()) + ch_versions = ch_versions.mix(SPLIT_AND_FILTER_SV_VCF.out.versions.first()) + ch_versions = ch_versions.mix(VCF2CYTOSURE.out.versions.first()) emit: - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4d1e51e7..7b21d492 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -124,14 +124,15 @@ include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/an include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' +include { GENERATE_CYTOSURE_FILES } from '../subworkflows/local/generate_cytosure_files' include { GENS } from '../subworkflows/local/gens' +include { PEDDY_CHECK } from '../subworkflows/local/peddy_check' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { QC_BAM } from '../subworkflows/local/qc_bam' include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' -include { PEDDY_CHECK } from '../subworkflows/local/peddy_check' /* @@ -273,6 +274,8 @@ workflow RAREDISEASE { 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_vcf2cytosure_blacklist = params.vcf2cytosure_blacklist ? Channel.fromPath(params.vcf2cytosure_blacklist).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() @@ -565,6 +568,16 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) + // Generate CGH files from sequencing data, turned off by default + if ( params.vcf2cytosure_switch && params.analysis_type != "wes" ) { + GENERATE_CYTOSURE_FILES ( + BGZIPTABIX_SV.out.gz_tbi, + ch_mapped.genome_marked_bam, + ch_vcf2cytosure_blacklist + ) + ch_versions = ch_versions.mix(GENERATE_CYTOSURE_FILES.out.versions) + } + // GENS if (params.gens_switch) { GENS ( From 8b9d2014b3258ec293aad5d5a2384572e5b58418 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 16:15:10 +0100 Subject: [PATCH 1468/1921] feat add fastp --- CHANGELOG.md | 1 + conf/modules/align.config | 15 + docs/usage.md | 12 +- main.nf | 1 + modules.json | 5 + modules/nf-core/fastp/environment.yml | 7 + modules/nf-core/fastp/main.nf | 102 ++++ modules/nf-core/fastp/meta.yml | 75 +++ modules/nf-core/fastp/tests/main.nf.test | 485 ++++++++++++++++++ modules/nf-core/fastp/tests/main.nf.test.snap | 52 ++ modules/nf-core/fastp/tests/nextflow.config | 6 + modules/nf-core/fastp/tests/tags.yml | 2 + nextflow.config | 4 +- nextflow_schema.json | 16 +- subworkflows/local/align.nf | 13 +- 15 files changed, 786 insertions(+), 10 deletions(-) create mode 100644 modules/nf-core/fastp/environment.yml create mode 100644 modules/nf-core/fastp/main.nf create mode 100644 modules/nf-core/fastp/meta.yml create mode 100644 modules/nf-core/fastp/tests/main.nf.test create mode 100644 modules/nf-core/fastp/tests/main.nf.test.snap create mode 100644 modules/nf-core/fastp/tests/nextflow.config create mode 100644 modules/nf-core/fastp/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index de991758..cf0089b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) +- Fastp to do adapter trimming. It can be skipped using`--skip_fastp` ### `Changed` diff --git a/conf/modules/align.config b/conf/modules/align.config index d55b2e19..eb19e793 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -18,6 +18,21 @@ process{ ] } + if (!params.skip_fastp) { + withName: '.*ALIGN:FASTP' { + ext.args = [ + params.min_trimmed_length ? "--length_required ${params.min_trimmed_length}" : '', + '--correction', + '--overrepresentation_analysis' + ].join(' ').trim() + publishDir = [ + path: { "${params.outdir}/trimming" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + } + if (params.save_mapped_as_cram) { withName: '.*ALIGN:SAMTOOLS_VIEW' { ext.args = { '--output-fmt cram --write-index' } diff --git a/docs/usage.md b/docs/usage.md index 56d7fc6a..5e3b7fd2 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -152,16 +152,18 @@ The mandatory and optional parameters for each category are tabulated below. ##### 1. Alignment | Mandatory | Optional | -| ------------------------------ | --------------------------- | -| aligner1 | fasta_fai3 | -| fasta | bwamem23 | -| platform | known_dbsnp4 | -| mito_name/mt_fasta2 | known_dbsnp_tbi4 | +| ------------------------------ | ------------------------------ | +| aligner1 | fasta_fai3 | +| fasta | bwamem23 | +| platform | known_dbsnp4 | +| mito_name/mt_fasta2 | known_dbsnp_tbi4 | +| | min_trimmed_length5 | 1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
2f If mito_name is provided, mt_fasta can be generated by the pipeline.
3fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
4Used only by Sentieon.
+5Default value is 40. Used only by fastp.
##### 2. QC stats from the alignment files diff --git a/main.nf b/main.nf index 12cdadc0..32571801 100644 --- a/main.nf +++ b/main.nf @@ -44,6 +44,7 @@ params.score_config_snv = WorkflowMain.getGenomeAttribute(params, params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') +params.min_trimmed_length = WorkflowMain.getGenomeAttribute(params, 'min_trimmed_length') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filters') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') diff --git a/modules.json b/modules.json index 1c4709dd..4a280808 100644 --- a/modules.json +++ b/modules.json @@ -115,6 +115,11 @@ "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", "installed_by": ["modules"] }, + "fastp": { + "branch": "master", + "git_sha": "3c77ca9aac783e76c3614a06db3bfe4fef619bde", + "installed_by": ["modules"] + }, "fastqc": { "branch": "master", "git_sha": "bd8092b67b5103bdd52e300f75889442275c3117", diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml new file mode 100644 index 00000000..70389e66 --- /dev/null +++ b/modules/nf-core/fastp/environment.yml @@ -0,0 +1,7 @@ +name: fastp +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::fastp=0.23.4 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf new file mode 100644 index 00000000..5fac3c1a --- /dev/null +++ b/modules/nf-core/fastp/main.nf @@ -0,0 +1,102 @@ +process FASTP { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fastp:0.23.4--h5f740d0_0' : + 'biocontainers/fastp:0.23.4--h5f740d0_0' }" + + input: + tuple val(meta), path(reads) + path adapter_fasta + val save_trimmed_fail + val save_merged + + output: + tuple val(meta), path('*.fastp.fastq.gz') , optional:true, emit: reads + tuple val(meta), path('*.json') , emit: json + tuple val(meta), path('*.html') , emit: html + tuple val(meta), path('*.log') , emit: log + path "versions.yml" , emit: versions + tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail + tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" + def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + // Added soft-links to original fastqs for consistent naming in MultiQC + // Use single ended for interleaved. Add --interleaved_in in config. + if ( task.ext.args?.contains('--interleaved_in') ) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz + + fastp \\ + --stdout \\ + --in1 ${prefix}.fastq.gz \\ + --thread $task.cpus \\ + --json ${prefix}.fastp.json \\ + --html ${prefix}.fastp.html \\ + $adapter_list \\ + $fail_fastq \\ + $args \\ + 2> >(tee ${prefix}.fastp.log >&2) \\ + | gzip -c > ${prefix}.fastp.fastq.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ + } else if (meta.single_end) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz + + fastp \\ + --in1 ${prefix}.fastq.gz \\ + --out1 ${prefix}.fastp.fastq.gz \\ + --thread $task.cpus \\ + --json ${prefix}.fastp.json \\ + --html ${prefix}.fastp.html \\ + $adapter_list \\ + $fail_fastq \\ + $args \\ + 2> >(tee ${prefix}.fastp.log >&2) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ + } else { + def merge_fastq = save_merged ? "-m --merged_out ${prefix}.merged.fastq.gz" : '' + """ + [ ! -f ${prefix}_1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_2.fastq.gz + fastp \\ + --in1 ${prefix}_1.fastq.gz \\ + --in2 ${prefix}_2.fastq.gz \\ + --out1 ${prefix}_1.fastp.fastq.gz \\ + --out2 ${prefix}_2.fastp.fastq.gz \\ + --json ${prefix}.fastp.json \\ + --html ${prefix}.fastp.html \\ + $adapter_list \\ + $fail_fastq \\ + $merge_fastq \\ + --thread $task.cpus \\ + --detect_adapter_for_pe \\ + $args \\ + 2> >(tee ${prefix}.fastp.log >&2) + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ + } +} diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml new file mode 100644 index 00000000..c22a16ab --- /dev/null +++ b/modules/nf-core/fastp/meta.yml @@ -0,0 +1,75 @@ +name: fastp +description: Perform adapter/quality trimming on sequencing reads +keywords: + - trimming + - quality control + - fastq +tools: + - fastp: + description: | + A tool designed to provide fast all-in-one preprocessing for FastQ files. This tool is developed in C++ with multithreading supported to afford high performance. + documentation: https://github.com/OpenGene/fastp + doi: 10.1093/bioinformatics/bty560 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. If you wish to run interleaved paired-end data, supply as single-end data + but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. + - adapter_fasta: + type: file + description: File in FASTA format containing possible adapters to remove. + pattern: "*.{fasta,fna,fas,fa}" + - save_trimmed_fail: + type: boolean + description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` + - save_merged: + type: boolean + description: Specify true to save all merged reads to the a file ending in `*.merged.fastq.gz` +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: The trimmed/modified/unmerged fastq reads + pattern: "*fastp.fastq.gz" + - json: + type: file + description: Results in JSON format + pattern: "*.json" + - html: + type: file + description: Results in HTML format + pattern: "*.html" + - log: + type: file + description: fastq log file + pattern: "*.log" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - reads_fail: + type: file + description: Reads the failed the preprocessing + pattern: "*fail.fastq.gz" + - reads_merged: + type: file + description: Reads that were successfully merged + pattern: "*.{merged.fastq.gz}" +authors: + - "@drpatelh" + - "@kevinmenden" +maintainers: + - "@drpatelh" + - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test new file mode 100644 index 00000000..f610b735 --- /dev/null +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -0,0 +1,485 @@ +nextflow_process { + + name "Test Process FASTP" + script "../main.nf" + process "FASTP" + tag "modules" + tag "modules_nfcore" + tag "fastp" + + test("test_fastp_single_end") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + + input[0] = [ + [ id:'test', single_end:true ], + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + ] + + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "Q20 bases:12.922000 K (92.984097%)", + "single end (151 cycles)" ] + def log_text = [ "Q20 bases: 12922(92.9841%)", + "reads passed filter: 99" ] + def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { assert snapshot(process.out.json).match("test_fastp_single_end_json") }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_paired_end") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "Q20 bases:25.719000 K (93.033098%)", + "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] + def log_text = [ "No adapter detected for read1", + "Q30 bases: 12281(88.3716%)"] + def json_text = ['"passed_filter_reads": 198'] + def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } + } + }, + { read2_lines.each { read2_line -> + { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { json_text.each { json_part -> + { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } + } + }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("fastp test_fastp_interleaved") { + config './nextflow.config' + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: true) ] + ] + + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "Q20 bases:25.719000 K (93.033098%)", + "paired end (151 cycles + 151 cycles)"] + def log_text = [ "Q20 bases: 12922(92.9841%)", + "reads passed filter: 198"] + def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { assert snapshot(process.out.json).match("fastp test_fastp_interleaved_json") }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_single_end_trim_fail") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + + input[0] = [ [ id:'test', single_end:true ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] + ] + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "Q20 bases:12.922000 K (92.984097%)", + "single end (151 cycles)"] + def log_text = [ "Q20 bases: 12922(92.9841%)", + "reads passed filter: 99" ] + def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } + } + }, + { failed_read_lines.each { failed_read_line -> + { assert path(process.out.reads_fail.get(0).get(1)).linesGzip.contains(failed_read_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { assert snapshot(process.out.json).match("test_fastp_single_end_trim_fail_json") }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_paired_end_trim_fail") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = true + save_merged = false + + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "Q20 bases:25.719000 K (93.033098%)", + "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] + def log_text = [ "No adapter detected for read1", + "Q30 bases: 12281(88.3716%)"] + def json_text = ['"passed_filter_reads": 198'] + def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", + "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE + { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } + } + }, + { read2_lines.each { read2_line -> + { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } + } + }, + { failed_read2_lines.each { failed_read2_line -> + { assert path(process.out.reads_fail.get(0).get(1).get(1)).linesGzip.contains(failed_read2_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { json_text.each { json_part -> + { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } + } + }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_paired_end_merged") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "
"] + def log_text = [ "Merged and filtered:", + "total reads: 75", + "total bases: 13683"] + def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683'] + def read1_lines = [ "@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", + "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", + "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE + { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } + } + }, + { read2_lines.each { read2_line -> + { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } + } + }, + { read_merged_lines.each { read_merged_line -> + { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { json_text.each { json_part -> + { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } + } + }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_paired_end_merged_adapterlist") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = file("https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/fastp/adapters.fasta", checkIfExists: true) + save_trimmed_fail = false + save_merged = true + + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + def html_text = [ "
"] + def log_text = [ "Merged and filtered:", + "total reads: 75", + "total bases: 13683"] + def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683',"--adapter_fasta"] + def read1_lines = ["@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", + "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", + "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE + { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } + } + }, + { read2_lines.each { read2_line -> + { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } + } + }, + { read_merged_lines.each { read_merged_line -> + { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } + } + }, + { html_text.each { html_part -> + { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } + } + }, + { json_text.each { json_part -> + { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } + } + }, + { log_text.each { log_part -> + { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } + } + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } +} diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap new file mode 100644 index 00000000..0fa68c7d --- /dev/null +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -0,0 +1,52 @@ +{ + "fastp test_fastp_interleaved_json": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,168f516f7bd4b7b6c32da7cba87299a4" + ] + ] + ], + "timestamp": "2023-10-17T11:04:45.794175881" + }, + "test_fastp_single_end_json": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + ] + ] + ], + "timestamp": "2023-10-17T11:04:10.566343705" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "timestamp": "2023-10-17T11:04:10.582076024" + }, + "test_fastp_single_end_trim_fail_json": { + "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + ] + ] + ], + "timestamp": "2023-10-17T11:05:00.379878948" + } +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/nextflow.config b/modules/nf-core/fastp/tests/nextflow.config new file mode 100644 index 00000000..0f7849ad --- /dev/null +++ b/modules/nf-core/fastp/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + + withName: FASTP { + ext.args = "--interleaved_in" + } +} diff --git a/modules/nf-core/fastp/tests/tags.yml b/modules/nf-core/fastp/tests/tags.yml new file mode 100644 index 00000000..c1afcce7 --- /dev/null +++ b/modules/nf-core/fastp/tests/tags.yml @@ -0,0 +1,2 @@ +fastp: + - modules/nf-core/fastp/** diff --git a/nextflow.config b/nextflow.config index 7309d888..f0d7b751 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,6 +25,7 @@ params { bait_padding = 100 save_mapped_as_cram = false skip_eklipse = false + skip_fastp = false skip_fastqc = false skip_germlinecnvcaller = false skip_haplocheck = false @@ -43,6 +44,7 @@ params { // Alignment aligner = 'bwamem2' + min_trimmed_length = rmdup = false // Variant calling @@ -50,7 +52,7 @@ params { variant_caller = 'deepvariant' // sentieon Defaults - ml_model = '' + ml_model = 40 // Dnascope SNV calling sentieon_dnascope_pcr_indel_model = 'CONSERVATIVE' diff --git a/nextflow_schema.json b/nextflow_schema.json index 82618fca..9bfd4381 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -53,7 +53,7 @@ "properties": { "bait_padding": { "type": "number", - "default": 100, + "default": 100.0, "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." @@ -396,6 +396,11 @@ "description": "Specifies whether or not to skip FASTQC.", "fa_icon": "fas fa-toggle-on" }, + "skip_fastp": { + "type": "boolean", + "description": "Specifies whether or not to skip trimming with fastp.", + "fa_icon": "fas fa-toggle-on" + }, "skip_haplocheck": { "type": "boolean", "description": "Specifies whether or not to skip haplocheck.", @@ -451,6 +456,13 @@ "fa_icon": "fas fa-align-center", "enum": ["bwamem2", "sentieon"] }, + "min_trimmed_length": { + "type": "integer", + "default": 40, + "description": "Discard trimmed reads shorter than this", + "help_text": "Minimum length of reads after adapter trimming. Shorter reads are discarded. The program default is 15 bp. ", + "fa_icon": "fas fa-less-than" + }, "rmdup": { "type": "boolean", "description": "Specifies whether duplicates reads should be removed prior to variant calling.", @@ -473,7 +485,7 @@ "cnvnator_binsize": { "type": "number", "description": "Bin size for CNVnator", - "default": "1000", + "default": 1000.0, "fa_icon": "fas fa-align-center" }, "sentieon_dnascope_pcr_indel_model": { diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 8e9baa2f..fa819926 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -2,6 +2,7 @@ // Map to reference // +include { FASTP } from '../../modules/nf-core/fastp/main' include { ALIGN_BWAMEM2 } from './alignment/align_bwamem2' include { ALIGN_SENTIEON } from './alignment/align_sentieon' include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' @@ -31,9 +32,17 @@ workflow ALIGN { ch_bwamem2_bai = Channel.empty() ch_sentieon_bai = Channel.empty() + if (!params.skip_germlinecnvcaller) { + FASTP(ch_reads, [], false, false) + ch_input_reads = FASTP.out.reads + ch_versions = ch_versions.mix(FASTP.out.versions) + } else { ch_input_reads = ch_reads } + + //ch_input_reads.view() + if (params.aligner.equals("bwamem2")) { ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 - ch_reads, + ch_input_reads, ch_genome_bwamem2index, ch_genome_fasta, ch_genome_fai, @@ -44,7 +53,7 @@ workflow ALIGN { ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if (params.aligner.equals("sentieon")) { ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon - ch_reads, + ch_input_reads, ch_genome_fasta, ch_genome_fai, ch_genome_bwaindex, From 797cb17b2fb18bc2a7661d31d8f1efd2cf866ce9 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 16:21:23 +0100 Subject: [PATCH 1469/1921] feat add fastp --- CHANGELOG.md | 2 +- CITATIONS.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf0089b1..53630e49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) -- Fastp to do adapter trimming. It can be skipped using`--skip_fastp` +- Fastp to do adapter trimming. It can be skipped using`--skip_fastp`[#457](https://github.com/nf-core/raredisease/pull/457) ### `Changed` diff --git a/CITATIONS.md b/CITATIONS.md index 5f404de8..187405e5 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -48,6 +48,9 @@ > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. +- [Fastp](https://github.com/OpenGene/fastp) + > Shifu, C. (2023). Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta 2: e107. https://doi.org/10.1002/imt2.107 + - [GATK](https://genome.cshlp.org/content/20/9/1297) > McKenna A, Hanna M, Banks E, et al. The Genome Analysis Toolkit: A MapReduce framework for analyzing next-generation DNA sequencing data. Genome Res. 2010;20(9):1297-1303. doi:10.1101/gr.107524.110 From 2791f1fefa03e4c41913c8af9970df54cbd78622 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 18 Dec 2023 16:27:10 +0100 Subject: [PATCH 1470/1921] updates changelog and conf files --- CHANGELOG.md | 4 ++-- conf/modules/generate_cytosure_files.config | 2 +- nextflow_schema.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 127c9e89..bfd2c315 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,8 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) -- ngsbits samplegender to check sex [#453] (https://github.com/nf-core/raredisease/pull/453) -- New workflow for generating cgh files frm SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default +- ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) +- New workflow for generating cgh files frm SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) ### `Changed` diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index e42717b1..d8b96859 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -28,7 +28,7 @@ process { ext.args = { [ "--samples ${meta.id}", '--output-type z', - "--exclude 'clingen_ngiAF > 0.1 || swegenAF > 0.05 || clinical_genomics_mipAF > 0.05 || decipherAF > 0.1 || clinical_genomics_loqusFrq > 0.05 || gnomad_svAF > 0.05'" + "--exclude 'gnomad_svAF > 0.05'" ].join(' ') } ext.prefix = { ${meta.id} } } diff --git a/nextflow_schema.json b/nextflow_schema.json index 6429fd88..ed0f7fd0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -326,7 +326,8 @@ "help_text": "Optional file to blacklist regions for VCF2cytosure", "pattern": "^\\S+\\.bed$", "format": "file-path", - "fa_icon": "fas fa-file" + "fa_icon": "fas fa-file", + "description": "Path to vcf2cytosure blacklist file" }, "vcfanno_resources": { "type": "string", @@ -452,7 +453,6 @@ }, "vcf2cytosure_switch": { "type": "boolean", - "default": false, "description": "Turn on the vcf2cytosure subworkflow", "fa_icon": "fas fa-toggle-on", "help_text": "vcf2cytosure can generate CGH files from a structural variant VCF file that can be analysed in the CytoSure interpretation software. Cut offs for allele frequencies and bin sizes can be modified in the config file. Turned off by default." From 1a283f77a5611219dd6d07a4cc123ebd3c594a7c Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 16:30:17 +0100 Subject: [PATCH 1471/1921] fix run prettier --- CITATIONS.md | 1 + docs/usage.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index c6252716..a302993e 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -49,6 +49,7 @@ > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. - [Fastp](https://github.com/OpenGene/fastp) + > Shifu, C. (2023). Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta 2: e107. https://doi.org/10.1002/imt2.107 - [GATK](https://genome.cshlp.org/content/20/9/1297) diff --git a/docs/usage.md b/docs/usage.md index 5e3b7fd2..b4b500ce 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -151,7 +151,7 @@ The mandatory and optional parameters for each category are tabulated below. ##### 1. Alignment -| Mandatory | Optional | +| Mandatory | Optional | | ------------------------------ | ------------------------------ | | aligner1 | fasta_fai3 | | fasta | bwamem23 | From 1157f9649ade65df271c7de148d7119d26eca9aa Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 16:34:29 +0100 Subject: [PATCH 1472/1921] fix white space --- conf/modules/align.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align.config b/conf/modules/align.config index eb19e793..b3836566 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -28,7 +28,7 @@ process{ publishDir = [ path: { "${params.outdir}/trimming" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } } From 36db2c7b757dec7373bef3bbd32e3a72d59aaeee Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 18 Dec 2023 16:34:33 +0100 Subject: [PATCH 1473/1921] updating citations --- CITATIONS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CITATIONS.md b/CITATIONS.md index 71414414..7dfc712e 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -130,6 +130,8 @@ > Kent WJ, Zweig AS, Barber G, Hinrichs AS, Karolchik D. BigWig and BigBed: enabling browsing of large distributed datasets. Bioinformatics. 2010;26(17):2204-2207. doi:10.1093/bioinformatics/btq351 +- [vcf2cytosure](https://github.com/NBISweden/vcf2cytosure) + - [Vcfanno](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-016-0973-5) > Pedersen BS, Layer RM, Quinlan AR. Vcfanno: fast, flexible annotation of genetic variants. Genome Biol. 2016;17(1):118. doi:10.1186/s13059-016-0973-5 From 3d12274b5104274128e8a19b9ba77058d5d86896 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Mon, 18 Dec 2023 17:02:04 +0100 Subject: [PATCH 1474/1921] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Lucía Peña-Pérez --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfd2c315..47bbe9c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) - ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) -- New workflow for generating cgh files frm SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) +- New workflow for generating cgh files from SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) ### `Changed` From e701fe267f2f9fd68ab4605c7b50fe6e86c36cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=ADa=20Pe=C3=B1a-P=C3=A9rez?= Date: Mon, 18 Dec 2023 17:42:46 +0100 Subject: [PATCH 1475/1921] Apply suggestions from code review Co-authored-by: Anders Jemt --- CHANGELOG.md | 2 +- conf/modules/align.config | 4 ++-- nextflow.config | 4 ++-- nextflow_schema.json | 4 ++-- subworkflows/local/align.nf | 6 ++---- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08967e15..91d9c17c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New parameters to skip fastqc and haplocheck (`--skip_fastqc` and `--skip_haplocheck`) [#438](https://github.com/nf-core/raredisease/pull/438) - CNVnator for copy number variant calling [#438](https://github.com/nf-core/raredisease/pull/434) - A new parameter `svdb_query_bedpedbs` to provide bedpe files as databases for SVDB query [#449](https://github.com/nf-core/raredisease/pull/449) -- Fastp to do adapter trimming. It can be skipped using`--skip_fastp`[#457](https://github.com/nf-core/raredisease/pull/457) +- Fastp to do adapter trimming. It can be skipped using `--skip_fastp` [#457](https://github.com/nf-core/raredisease/pull/457) - ngsbits samplegender to check sex [#453] (https://github.com/nf-core/raredisease/pull/453) ### `Changed` diff --git a/conf/modules/align.config b/conf/modules/align.config index b3836566..29fda646 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -20,11 +20,11 @@ process{ if (!params.skip_fastp) { withName: '.*ALIGN:FASTP' { - ext.args = [ + ext.args = { [ params.min_trimmed_length ? "--length_required ${params.min_trimmed_length}" : '', '--correction', '--overrepresentation_analysis' - ].join(' ').trim() + ].join(' ').trim() } publishDir = [ path: { "${params.outdir}/trimming" }, mode: params.publish_dir_mode, diff --git a/nextflow.config b/nextflow.config index 7c9a83b9..acc045de 100644 --- a/nextflow.config +++ b/nextflow.config @@ -47,7 +47,7 @@ params { // Alignment aligner = 'bwamem2' - min_trimmed_length = + min_trimmed_length = 40 rmdup = false // Variant calling @@ -55,7 +55,7 @@ params { variant_caller = 'deepvariant' // sentieon Defaults - ml_model = 40 + ml_model = '' // Dnascope SNV calling sentieon_dnascope_pcr_indel_model = 'CONSERVATIVE' diff --git a/nextflow_schema.json b/nextflow_schema.json index bb96cd29..9d268f2d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -52,8 +52,8 @@ "description": "Reference genome related files and options required for the workflow.", "properties": { "bait_padding": { - "type": "number", - "default": 100.0, + "type": "integer", + "default": 100, "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." diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index fa819926..e3c21b5b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -32,14 +32,12 @@ workflow ALIGN { ch_bwamem2_bai = Channel.empty() ch_sentieon_bai = Channel.empty() - if (!params.skip_germlinecnvcaller) { - FASTP(ch_reads, [], false, false) + if (!params.skip_fastp) { + FASTP (ch_reads, [], false, false) ch_input_reads = FASTP.out.reads ch_versions = ch_versions.mix(FASTP.out.versions) } else { ch_input_reads = ch_reads } - //ch_input_reads.view() - if (params.aligner.equals("bwamem2")) { ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 ch_input_reads, From 06b660667af9589e129369db88e83eef6d332e81 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 18:19:12 +0100 Subject: [PATCH 1476/1921] feat added reviewers suggestion --- subworkflows/local/align.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index e3c21b5b..07f5911d 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -34,13 +34,13 @@ workflow ALIGN { if (!params.skip_fastp) { FASTP (ch_reads, [], false, false) - ch_input_reads = FASTP.out.reads + ch_reads = FASTP.out.reads ch_versions = ch_versions.mix(FASTP.out.versions) - } else { ch_input_reads = ch_reads } + } if (params.aligner.equals("bwamem2")) { ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 - ch_input_reads, + ch_reads, ch_genome_bwamem2index, ch_genome_fasta, ch_genome_fai, @@ -51,7 +51,7 @@ workflow ALIGN { ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) } else if (params.aligner.equals("sentieon")) { ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon - ch_input_reads, + ch_reads, ch_genome_fasta, ch_genome_fai, ch_genome_bwaindex, From 4be3219f85c77405f217429834011a2a858934f1 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 18 Dec 2023 20:37:50 +0100 Subject: [PATCH 1477/1921] feat add json to output --- subworkflows/local/align.nf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 07f5911d..e7240f2c 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -27,6 +27,7 @@ workflow ALIGN { main: ch_versions = Channel.empty() + ch_fastp_json = Channel.empty() ch_bwamem2_bam = Channel.empty() ch_sentieon_bam = Channel.empty() ch_bwamem2_bai = Channel.empty() @@ -35,7 +36,8 @@ workflow ALIGN { if (!params.skip_fastp) { FASTP (ch_reads, [], false, false) ch_reads = FASTP.out.reads - ch_versions = ch_versions.mix(FASTP.out.versions) + ch_versions = ch_versions.mix(FASTP.out.versions) + ch_fastp_json = FASTP.out.json } if (params.aligner.equals("bwamem2")) { @@ -111,6 +113,7 @@ workflow ALIGN { CONVERT_MT_BAM_TO_FASTQ.out.versions) emit: + fastp_json = ch_fastp_json // channel: [ val(meta), path(json) ] genome_marked_bam = ch_genome_marked_bam // channel: [ val(meta), path(bam) ] genome_marked_bai = ch_genome_marked_bai // channel: [ val(meta), path(bai) ] genome_bam_bai = ch_genome_bam_bai // channel: [ val(meta), path(bam), path(bai) ] From 3027fb445f86454e3ee0b2c1fcb10705bf5b2e5f Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 19 Dec 2023 18:20:34 +0100 Subject: [PATCH 1478/1921] applying suggestion from code review --- conf/modules/generate_cytosure_files.config | 2 +- modules/nf-core/tiddit/cov/main.nf | 2 +- modules/nf-core/tiddit/cov/meta.yml | 2 +- modules/nf-core/vcf2cytosure/main.nf | 2 +- modules/nf-core/vcf2cytosure/vcf2cytosure.diff | 14 -------------- nextflow.config | 2 +- nextflow_schema.json | 13 +++++++------ subworkflows/local/generate_cytosure_files.nf | 6 +++--- workflows/raredisease.nf | 2 +- 9 files changed, 16 insertions(+), 29 deletions(-) delete mode 100644 modules/nf-core/vcf2cytosure/vcf2cytosure.diff diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index d8b96859..a1600d97 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -17,7 +17,7 @@ process { - if ( params.analysis_type != "wes" && params.vcf2cytosure_switch ) { + if ( params.analysis_type != "wes" && !params.skip_vcf2cytosure ) { withName: '.*GENERATE_CYTOSURE_FILES:TIDDIT_COV_VCF2CYTOSURE' { ext.args = { '-z 500' } diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf index f4b1d675..e8cafaa5 100644 --- a/modules/nf-core/tiddit/cov/main.nf +++ b/modules/nf-core/tiddit/cov/main.nf @@ -41,7 +41,7 @@ process TIDDIT_COV { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.wig - touch ${prefix}.tab + touch ${prefix}.bed cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml index 10171166..9cc586a9 100644 --- a/modules/nf-core/tiddit/cov/meta.yml +++ b/modules/nf-core/tiddit/cov/meta.yml @@ -44,7 +44,7 @@ output: - cov: type: file description: The coverage of different regions. Optional. - pattern: "*.tab" + pattern: "*.bed" - wig: type: file description: The coverage of different regions in WIG format. Optional. diff --git a/modules/nf-core/vcf2cytosure/main.nf b/modules/nf-core/vcf2cytosure/main.nf index f253f979..92351337 100644 --- a/modules/nf-core/vcf2cytosure/main.nf +++ b/modules/nf-core/vcf2cytosure/main.nf @@ -56,7 +56,7 @@ process VCF2CYTOSURE { def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.xml + touch ${prefix}.cgh cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/vcf2cytosure/vcf2cytosure.diff b/modules/nf-core/vcf2cytosure/vcf2cytosure.diff deleted file mode 100644 index 660dfca7..00000000 --- a/modules/nf-core/vcf2cytosure/vcf2cytosure.diff +++ /dev/null @@ -1,14 +0,0 @@ -Changes in module 'nf-core/vcf2cytosure' ---- modules/nf-core/vcf2cytosure/main.nf -+++ modules/nf-core/vcf2cytosure/main.nf -@@ -12,7 +12,7 @@ - tuple val(meta2), path(coverage_bed) - tuple val(meta3), path(cns) - tuple val(meta4), path(snv_vcf) -- path blacklist_bed -+ path(blacklist_bed) - - output: - tuple val(meta), path("*.cgh"), emit: cgh - -************************************************************ diff --git a/nextflow.config b/nextflow.config index f2a67666..988c3c67 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,11 +32,11 @@ params { skip_snv_annotation = false skip_sv_annotation = false skip_mt_annotation = false + skip_vcf2cytosure = true skip_vep_filter = false gens_switch = false cadd_resources = null platform = 'illumina' - vcf2cytosure_switch = false // Bam_qc ngsbits_samplegender_method = 'xy' diff --git a/nextflow_schema.json b/nextflow_schema.json index ed0f7fd0..faca90b9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -446,16 +446,17 @@ "description": "Specifies whether or not to skip annotate structural variant subworkflow.", "fa_icon": "fas fa-toggle-on" }, - "skip_vep_filter": { + "skip_vcf2cytosure": { "type": "boolean", - "description": "Specifies whether or not to filter results based on a list of candidate genes specified in 'vep_filters'.", + "default": true, + "description": "Specifies whether or not to skip the vcf2cytosure subworkflow", + "help_text": "vcf2cytosure can generate CGH files from a structural variant VCF file that can be analysed in the CytoSure interpretation software. Cut-offs for allele frequencies and bin sizes can be modified in the config file. Turned off by default.", "fa_icon": "fas fa-toggle-on" }, - "vcf2cytosure_switch": { + "skip_vep_filter": { "type": "boolean", - "description": "Turn on the vcf2cytosure subworkflow", - "fa_icon": "fas fa-toggle-on", - "help_text": "vcf2cytosure can generate CGH files from a structural variant VCF file that can be analysed in the CytoSure interpretation software. Cut offs for allele frequencies and bin sizes can be modified in the config file. Turned off by default." + "description": "Specifies whether or not to filter results based on a list of candidate genes specified in 'vep_filters'.", + "fa_icon": "fas fa-toggle-on" } } }, diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf index c5b4f205..3d716f92 100644 --- a/subworkflows/local/generate_cytosure_files.nf +++ b/subworkflows/local/generate_cytosure_files.nf @@ -8,8 +8,8 @@ include { VCF2CYTOSURE } from '../../modules/nf-core workflow GENERATE_CYTOSURE_FILES { take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] - ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] ch_blacklist // channel: [optional] [path(blacklist)] main: @@ -29,7 +29,7 @@ workflow GENERATE_CYTOSURE_FILES { VCF2CYTOSURE ( SPLIT_AND_FILTER_SV_VCF.out.vcf, TIDDIT_COV_VCF2CYTOSURE.out.cov, - [[], []], [[], []], + [[:], []], [[:], []], ch_blacklist ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 4293d0b6..c1b12cd4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -570,7 +570,7 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) // Generate CGH files from sequencing data, turned off by default - if ( params.vcf2cytosure_switch && params.analysis_type != "wes" ) { + if ( !params.skip_vcf2cytosure && params.analysis_type != "wes" ) { GENERATE_CYTOSURE_FILES ( BGZIPTABIX_SV.out.gz_tbi, ch_mapped.genome_marked_bam, From 2acb23447bb22d5ea8b0de299fad7d72fed16795 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 19 Dec 2023 18:28:16 +0100 Subject: [PATCH 1479/1921] adding patch files --- modules.json | 3 ++- modules/nf-core/tiddit/cov/tiddit-cov.diff | 26 +++++++++++++++++++ .../nf-core/vcf2cytosure/vcf2cytosure.diff | 23 ++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/tiddit/cov/tiddit-cov.diff create mode 100644 modules/nf-core/vcf2cytosure/vcf2cytosure.diff diff --git a/modules.json b/modules.json index cb2c5a2e..8cfbb496 100644 --- a/modules.json +++ b/modules.json @@ -450,7 +450,8 @@ "tiddit/cov": { "branch": "master", "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/tiddit/cov/tiddit-cov.diff" }, "tiddit/sv": { "branch": "master", diff --git a/modules/nf-core/tiddit/cov/tiddit-cov.diff b/modules/nf-core/tiddit/cov/tiddit-cov.diff new file mode 100644 index 00000000..acf8216f --- /dev/null +++ b/modules/nf-core/tiddit/cov/tiddit-cov.diff @@ -0,0 +1,26 @@ +Changes in module 'nf-core/tiddit/cov' +--- modules/nf-core/tiddit/cov/meta.yml ++++ modules/nf-core/tiddit/cov/meta.yml +@@ -44,7 +44,7 @@ + - cov: + type: file + description: The coverage of different regions. Optional. +- pattern: "*.tab" ++ pattern: "*.bed" + - wig: + type: file + description: The coverage of different regions in WIG format. Optional. + +--- modules/nf-core/tiddit/cov/main.nf ++++ modules/nf-core/tiddit/cov/main.nf +@@ -41,7 +41,7 @@ + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.wig +- touch ${prefix}.tab ++ touch ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +************************************************************ diff --git a/modules/nf-core/vcf2cytosure/vcf2cytosure.diff b/modules/nf-core/vcf2cytosure/vcf2cytosure.diff new file mode 100644 index 00000000..f80980da --- /dev/null +++ b/modules/nf-core/vcf2cytosure/vcf2cytosure.diff @@ -0,0 +1,23 @@ +Changes in module 'nf-core/vcf2cytosure' +--- modules/nf-core/vcf2cytosure/main.nf ++++ modules/nf-core/vcf2cytosure/main.nf +@@ -12,7 +12,7 @@ + tuple val(meta2), path(coverage_bed) + tuple val(meta3), path(cns) + tuple val(meta4), path(snv_vcf) +- path blacklist_bed ++ path(blacklist_bed) + + output: + tuple val(meta), path("*.cgh"), emit: cgh +@@ -56,7 +56,7 @@ + def prefix = task.ext.prefix ?: "${meta.id}" + + """ +- touch ${prefix}.xml ++ touch ${prefix}.cgh + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + +************************************************************ From f5594e639331e75c320dab6db086d1a1228a4281 Mon Sep 17 00:00:00 2001 From: lucpen Date: Wed, 20 Dec 2023 13:27:51 +0100 Subject: [PATCH 1480/1921] feat added specific values for some samplesheet params --- assets/schema_input.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 191f1394..cb881db8 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -39,15 +39,17 @@ ] }, "sex": { - "type": "string", + "type": "integer", "meta": ["sex"], "pattern": "^\\S+$", + "enum": [0, 1, 2], "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { - "type": "string", + "type": "integer", "meta": ["phenotype"], "pattern": "^\\S+$", + "enum": [0, 1, 2], "errorMessage": "Phenotype must be provided and cannot contain spaces" }, "paternal_id": { From ffc108cc68038465019fb9c9d77528f555ee44da Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 20 Dec 2023 15:40:33 +0100 Subject: [PATCH 1481/1921] fixing modules discrepancies --- modules.json | 4 +- modules/nf-core/cat/cat/environment.yml | 7 + modules/nf-core/cat/cat/main.nf | 14 +- modules/nf-core/cat/cat/meta.yml | 7 +- modules/nf-core/cat/cat/tests/main.nf.test | 179 ++++++++++++++++++ .../nf-core/cat/cat/tests/main.nf.test.snap | 121 ++++++++++++ .../cat/tests/nextflow_unzipped_zipped.config | 6 + .../cat/tests/nextflow_zipped_unzipped.config | 8 + modules/nf-core/cat/cat/tests/tags.yml | 2 + .../templates/dumpsoftwareversions.py | 101 ++++++++++ 10 files changed, 440 insertions(+), 9 deletions(-) create mode 100644 modules/nf-core/cat/cat/environment.yml create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap create mode 100644 modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config create mode 100644 modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config create mode 100644 modules/nf-core/cat/cat/tests/tags.yml create mode 100755 modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py diff --git a/modules.json b/modules.json index 161faef3..e0a92fa6 100644 --- a/modules.json +++ b/modules.json @@ -72,7 +72,7 @@ }, "cat/cat": { "branch": "master", - "git_sha": "bba7e362e4afead70653f84d8700588ea28d0f9e", + "git_sha": "d593e8f6b7d1bbbb2acf43a4b9efeeac8d6720f2", "installed_by": ["modules"] }, "chromograph": { @@ -92,7 +92,7 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "05c280924b6c768d484c7c443dad5e605c4ff4b4", + "git_sha": "bba7e362e4afead70653f84d8700588ea28d0f9e", "installed_by": ["modules"] }, "deepvariant": { diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml new file mode 100644 index 00000000..17a04ef2 --- /dev/null +++ b/modules/nf-core/cat/cat/environment.yml @@ -0,0 +1,7 @@ +name: cat_cat +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index 9f062219..970ab760 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -2,7 +2,7 @@ process CAT_CAT { tag "$meta.id" label 'process_low' - conda "conda-forge::pigz=2.3.4" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : 'biocontainers/pigz:2.3.4' }" @@ -35,6 +35,10 @@ process CAT_CAT { in_zip = file_list[0].endsWith('.gz') command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : '' + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } """ $command1 \\ $args \\ @@ -49,8 +53,12 @@ process CAT_CAT { """ stub: - def file_list = files_in.collect { it.toString() } - prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + def file_list = files_in.collect { it.toString() } + prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + if(file_list.contains(prefix.trim())) { + error "The name of the input file can't be the same as for the output prefix in the " + + "module CAT_CAT (currently `$prefix`). Please choose a different one." + } """ touch $prefix diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 8acc0bfa..00a8db0b 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -7,9 +7,7 @@ keywords: tools: - cat: description: Just concatenation - documentation: https://man7.org/linux/man-pages/man1/cat.1.html - licence: ["GPL-3.0-or-later"] input: - meta: @@ -21,7 +19,6 @@ input: type: file description: List of compressed / uncompressed files pattern: "*" - output: - versions: type: file @@ -31,7 +28,9 @@ output: type: file description: Concatenated file. Will be gzipped if file_out ends with ".gz" pattern: "${file_out}" - authors: - "@erikrikarddaniel" - "@FriederikeHanssen" +maintainers: + - "@erikrikarddaniel" + - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test new file mode 100644 index 00000000..ed5a4f12 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -0,0 +1,179 @@ +nextflow_process { + + name "Test Process CAT_CAT" + script "../main.nf" + process "CAT_CAT" + tag "modules" + tag "modules_nfcore" + tag "cat" + tag "cat/cat" + + test("test_cat_name_conflict") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'genome', single_end:true ], + [ + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), + file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert !process.success }, + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + ) + } + } + + test("test_cat_unzipped_unzipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), + file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + ] + ] + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("test_cat_zipped_zipped") { + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, + { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} + ) + } + } + + test("test_cat_zipped_unzipped") { + config './nextflow_zipped_unzipped.config' + + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_cat_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), + file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, + { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} + ) + } + } + + test("test_cat_one_file_unzipped_zipped") { + config './nextflow_unzipped_zipped.config' + when { + params { + outdir = "${outputDir}" + } + process { + """ + input[0] = + [ + [ id:'test', single_end:true ], + [ + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + ] + """ + } + } + then { + def lines = path(process.out.file_out.get(0).get(1)).linesGzip + assertAll( + { assert process.success }, + { assert snapshot(lines[0..5]).match("test_cat_one_file_unzipped_zipped_lines") }, + { assert snapshot(lines.size()).match("test_cat_one_file_unzipped_zipped_size")} + ) + } + } +} + diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap new file mode 100644 index 00000000..423571ba --- /dev/null +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -0,0 +1,121 @@ +{ + "test_cat_unzipped_zipped_size": { + "content": [ + 375 + ], + "timestamp": "2023-10-16T14:33:08.049445686" + }, + "test_cat_unzipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "timestamp": "2023-10-16T14:32:18.500464399" + }, + "test_cat_zipped_unzipped": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } + ], + "timestamp": "2023-10-16T14:32:49.642741302" + }, + "test_cat_zipped_zipped_lines": { + "content": [ + [ + "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", + "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", + "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", + "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ] + ], + "timestamp": "2023-10-16T14:32:33.629048645" + }, + "test_cat_unzipped_zipped_lines": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ] + ], + "timestamp": "2023-10-16T14:33:08.038830506" + }, + "test_cat_one_file_unzipped_zipped_lines": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ] + ], + "timestamp": "2023-10-16T14:33:21.39642399" + }, + "test_cat_zipped_zipped_size": { + "content": [ + 78 + ], + "timestamp": "2023-10-16T14:32:33.641869244" + }, + "test_cat_one_file_unzipped_zipped_size": { + "content": [ + 374 + ], + "timestamp": "2023-10-16T14:33:21.4094373" + } +} \ No newline at end of file diff --git a/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config new file mode 100644 index 00000000..ec26b0fd --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_unzipped_zipped.config @@ -0,0 +1,6 @@ + +process { + withName: CAT_CAT { + ext.prefix = 'cat.txt.gz' + } +} diff --git a/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config new file mode 100644 index 00000000..fbc79783 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/nextflow_zipped_unzipped.config @@ -0,0 +1,8 @@ + +process { + + withName: CAT_CAT { + ext.prefix = 'cat.txt' + } + +} diff --git a/modules/nf-core/cat/cat/tests/tags.yml b/modules/nf-core/cat/cat/tests/tags.yml new file mode 100644 index 00000000..37b578f5 --- /dev/null +++ b/modules/nf-core/cat/cat/tests/tags.yml @@ -0,0 +1,2 @@ +cat/cat: + - modules/nf-core/cat/cat/** diff --git a/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py new file mode 100755 index 00000000..da033408 --- /dev/null +++ b/modules/nf-core/custom/dumpsoftwareversions/templates/dumpsoftwareversions.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python + + +"""Provide functions to merge multiple versions.yml files.""" + + +import yaml +import platform +from textwrap import dedent + + +def _make_versions_html(versions): + """Generate a tabular HTML output of all versions for MultiQC.""" + html = [ + dedent( + """\\ + + + + + + + + + + """ + ) + ] + for process, tmp_versions in sorted(versions.items()): + html.append("") + for i, (tool, version) in enumerate(sorted(tmp_versions.items())): + html.append( + dedent( + f"""\\ + + + + + + """ + ) + ) + html.append("") + html.append("
Process Name Software Version
{process if (i == 0) else ''}{tool}{version}
") + return "\\n".join(html) + + +def main(): + """Load all version files and generate merged output.""" + versions_this_module = {} + versions_this_module["${task.process}"] = { + "python": platform.python_version(), + "yaml": yaml.__version__, + } + + with open("$versions") as f: + versions_by_process = yaml.load(f, Loader=yaml.BaseLoader) | versions_this_module + + # aggregate versions by the module name (derived from fully-qualified process name) + versions_by_module = {} + for process, process_versions in versions_by_process.items(): + module = process.split(":")[-1] + try: + if versions_by_module[module] != process_versions: + raise AssertionError( + "We assume that software versions are the same between all modules. " + "If you see this error-message it means you discovered an edge-case " + "and should open an issue in nf-core/tools. " + ) + except KeyError: + versions_by_module[module] = process_versions + + versions_by_module["Workflow"] = { + "Nextflow": "$workflow.nextflow.version", + "$workflow.manifest.name": "$workflow.manifest.version", + } + + versions_mqc = { + "id": "software_versions", + "section_name": "${workflow.manifest.name} Software Versions", + "section_href": "https://github.com/${workflow.manifest.name}", + "plot_type": "html", + "description": "are collected at run time from the software output.", + "data": _make_versions_html(versions_by_module), + } + + with open("software_versions.yml", "w") as f: + yaml.dump(versions_by_module, f, default_flow_style=False) + with open("software_versions_mqc.yml", "w") as f: + yaml.dump(versions_mqc, f, default_flow_style=False) + + with open("versions.yml", "w") as f: + yaml.dump(versions_this_module, f, default_flow_style=False) + + +if __name__ == "__main__": + main() From 8cee95440f7b5b135deda116978b2a7ecf8abd31 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Wed, 20 Dec 2023 15:47:59 +0100 Subject: [PATCH 1482/1921] Add flag to skip reference output from CNVcaller --- modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index d916c2af..98652570 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -41,7 +41,8 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { $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 + --output-denoised-copy-ratios ${prefix}_denoised.vcf.gz \\ + --sites-only-vcf-output cat <<-END_VERSIONS > versions.yml "${task.process}": From be78df4c78daac959fd1f6794195f5f857111f10 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Wed, 20 Dec 2023 15:48:33 +0100 Subject: [PATCH 1483/1921] Use segments instead of intervals in GATK CNVCaller output --- 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 13827f61..e16275c9 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -46,7 +46,7 @@ workflow CALL_STRUCTURAL_VARIANTS { if (!params.skip_germlinecnvcaller) { CALL_SV_GERMLINECNVCALLER (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) - .genotyped_intervals_vcf + .genotyped_segments_vcf .collect{it[1]} .set { gcnvcaller_vcf } From bcacf2506a55bcfd79333ff40db790044ff174c9 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Wed, 20 Dec 2023 15:49:24 +0100 Subject: [PATCH 1484/1921] Retrieve the correct value for GATK CNVCaller intervals --- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 4 ++-- 1 file 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 029c0db5..8852a1a2 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -12,7 +12,7 @@ workflow CALL_SV_GERMLINECNVCALLER { 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_readcount_intervals // channel: [mandatory][ path(intervals) ] 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) ] @@ -20,7 +20,7 @@ workflow CALL_SV_GERMLINECNVCALLER { main: ch_versions = Channel.empty() - input = ch_bam_bai.combine( ch_readcount_intervals.collect{ it[1] } ) + input = ch_bam_bai.combine( ch_readcount_intervals ) GATK4_COLLECTREADCOUNTS ( input, ch_fasta, ch_fai, ch_genome_dictionary ) From d39df82fa1fca8d50eedd07007eebf87e3563cfc Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 20 Dec 2023 16:27:34 +0100 Subject: [PATCH 1485/1921] moving the github ci test to stub for one sample --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a97b039d..8d463ee6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: - "latest-everything" parameters: - "-profile test,docker" - - "-profile test_one_sample,docker" + - "-profile test_one_sample,docker -stub" steps: - name: Check out pipeline code uses: actions/checkout@v4 From 03eb038f6641f46b9cfdacc0537712eb0058fa55 Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 20 Dec 2023 16:44:07 +0100 Subject: [PATCH 1486/1921] turning of fastp for github tests --- .github/workflows/ci.yml | 2 +- conf/test.config | 1 + conf/test_one_sample.config | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d463ee6..a97b039d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: - "latest-everything" parameters: - "-profile test,docker" - - "-profile test_one_sample,docker -stub" + - "-profile test_one_sample,docker" steps: - name: Check out pipeline code uses: actions/checkout@v4 diff --git a/conf/test.config b/conf/test.config index d398d542..af349e6b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,6 +25,7 @@ params { // analysis params skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_fastp = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index f39cb40c..a2f42a80 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -25,6 +25,7 @@ params { // analysis params skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_fastp = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI From a9926bb806a88f2e56455f1871e8305a052d54fa Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 20 Dec 2023 17:18:55 +0100 Subject: [PATCH 1487/1921] moving fastp back in --- conf/test.config | 1 - conf/test_one_sample.config | 1 - 2 files changed, 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index af349e6b..d398d542 100644 --- a/conf/test.config +++ b/conf/test.config @@ -25,7 +25,6 @@ params { // analysis params skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI - skip_fastp = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index a2f42a80..f39cb40c 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -25,7 +25,6 @@ params { // analysis params skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI - skip_fastp = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI From 82a96cb6484234f25c986e56c8d8ee1fdda107fa Mon Sep 17 00:00:00 2001 From: lucpen Date: Thu, 21 Dec 2023 11:21:33 +0100 Subject: [PATCH 1488/1921] fix integer to number --- workflows/raredisease.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c1b12cd4..c4183c93 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -686,16 +686,16 @@ def create_case_channel(List rows) { def mother = "" for (item in rows) { - if (item.phenotype == "2") { + if (item.phenotype == 2) { probands.add(item.sample) } - if ( (item.paternal!="0") && (item.paternal!="") && (item.maternal!="0") && (item.maternal!="") ) { + if ( (item.paternal!=0) && (item.paternal!="") && (item.maternal!=0) && (item.maternal!="") ) { upd_children.add(item.sample) } - if ( (item.paternal!="0") && (item.paternal!="") ) { + if ( (item.paternal!=0) && (item.paternal!="") ) { father = item.paternal } - if ( (item.maternal!="0") && (item.maternal!="") ) { + if ( (item.maternal!=0) && (item.maternal!="") ) { mother = item.maternal } } From 5a2c55c5aae2b0fd89e33737be13b09ab719259e Mon Sep 17 00:00:00 2001 From: lucpen Date: Fri, 22 Dec 2023 07:18:49 +0100 Subject: [PATCH 1489/1921] fix --- conf/modules/call_repeat_expansions.config | 2 +- conf/modules/generate_cytosure_files.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 0509d1e2..13a7e519 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -24,7 +24,7 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { - ext.args = { ("${meta.sex}" == '1') ? '--sex male' : '--sex female' } + ext.args = { ("${meta.sex}" == 1) ? '--sex male' : '--sex female' } ext.prefix = { "${meta.id}_exphunter" } } diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index a1600d97..323b64e3 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -35,7 +35,7 @@ process { withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { ext.args = { [ - meta.sex.equals('1') ? '--sex male' : '--sex female', + meta.sex.equals(1) ? '--sex male' : '--sex female', '--size 5000', '--maxbnd 5000' ].join(' ') } From f48e013ff44d639827abfc07a423173d5e615d75 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Fri, 22 Dec 2023 10:09:35 +0100 Subject: [PATCH 1490/1921] Suggested filtering of the POSTPROCESSGERMLINECNVCALLS --- .../variant_calling/call_sv_germlinecnvcaller.nf | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 8852a1a2..a9420a62 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -6,6 +6,7 @@ include { GATK4_COLLECTREADCOUNTS } from '../../../modules/nf-core/g 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' +include { BCFTOOLS_VIEW } from '../../../modules/nf-core/bcftools/view/main' workflow CALL_SV_GERMLINECNVCALLER { take: @@ -47,16 +48,21 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_POSTPROCESSGERMLINECNVCALLS ( ch_postproc_in ) + // Filter out reference only (0/0) segments + BCFTOOLS_VIEW ( GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments, [], [], [] ) + ch_versions = ch_versions.mix(GATK4_COLLECTREADCOUNTS.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) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) emit: - 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 ] + 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) ] + genotyped_filtered_segments_vcf = BCFTOOLS_VIEW.out.vcf // channel: [ val(meta), path(*.tar.gz) ] + denoised_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.denoised // channel: [ val(meta), path(*.tar.gz) ] + versions = ch_versions // channel: [ versions.yml ] } // This function groups calls with same meta for postprocessing. From f6db87dd790dc626a065fb9e65d293a827c2640d Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Fri, 22 Dec 2023 10:12:36 +0100 Subject: [PATCH 1491/1921] Remove ref-option again, and iinclude bcftools config --- conf/modules/call_sv_germlinecnvcaller.config | 5 +++++ modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index 8539e546..c41251ae 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -37,5 +37,10 @@ process { ext.args = "--run-mode CASE" ext.prefix = { "${meta.id}_${model.simpleName}" } } + + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_gatkcnv_segments_reffiltered" } + ext.args = { '--output-type z --exclude "N_ALT = 0" ' } + } } } diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index 98652570..d916c2af 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -41,8 +41,7 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { $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 \\ - --sites-only-vcf-output + --output-denoised-copy-ratios ${prefix}_denoised.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": From 32e42dbf189ace74d33513aa937736de5c0d35e0 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Fri, 22 Dec 2023 15:32:27 +0100 Subject: [PATCH 1492/1921] Grab the correct segments file outside the GATK CNV caller --- 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 e16275c9..ad45dc29 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -46,7 +46,7 @@ workflow CALL_STRUCTURAL_VARIANTS { if (!params.skip_germlinecnvcaller) { CALL_SV_GERMLINECNVCALLER (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) - .genotyped_segments_vcf + .genotyped_filtered_segments_vcf .collect{it[1]} .set { gcnvcaller_vcf } From c38762323363186c63959fa54c4e6181c37418c4 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 4 Jan 2024 11:49:25 +0100 Subject: [PATCH 1493/1921] retroseq call subworkflow --- assets/grch37_g1k_alu.bed | 0 assets/grch37_g1k_herv.bed | 0 assets/grch37_g1k_l1.bed | 0 assets/grch37_g1k_sva.bed | 0 assets/mobile_element_references.tsv | 5 ++ assets/mobile_element_references_schema.json | 26 ++++++ conf/modules/call_mobile_elements.config | 40 +++++++++ conf/test.config | 2 + main.nf | 3 +- modules/local/retroseq/call/main.nf | 8 +- modules/local/retroseq/call/meta.yml | 6 +- modules/local/retroseq/discover/main.nf | 9 +- modules/local/retroseq/discover/meta.yml | 14 +-- nextflow.config | 2 + nextflow_schema.json | 9 ++ .../local/annotate_mobile_elements.nf | 46 ---------- subworkflows/local/call_mobile_elements.nf | 86 +++++++++++++++++++ workflows/raredisease.nf | 11 +++ 18 files changed, 206 insertions(+), 61 deletions(-) create mode 100644 assets/grch37_g1k_alu.bed create mode 100644 assets/grch37_g1k_herv.bed create mode 100644 assets/grch37_g1k_l1.bed create mode 100644 assets/grch37_g1k_sva.bed create mode 100644 assets/mobile_element_references.tsv create mode 100644 assets/mobile_element_references_schema.json create mode 100644 conf/modules/call_mobile_elements.config delete mode 100644 subworkflows/local/annotate_mobile_elements.nf create mode 100644 subworkflows/local/call_mobile_elements.nf diff --git a/assets/grch37_g1k_alu.bed b/assets/grch37_g1k_alu.bed new file mode 100644 index 00000000..e69de29b diff --git a/assets/grch37_g1k_herv.bed b/assets/grch37_g1k_herv.bed new file mode 100644 index 00000000..e69de29b diff --git a/assets/grch37_g1k_l1.bed b/assets/grch37_g1k_l1.bed new file mode 100644 index 00000000..e69de29b diff --git a/assets/grch37_g1k_sva.bed b/assets/grch37_g1k_sva.bed new file mode 100644 index 00000000..e69de29b diff --git a/assets/mobile_element_references.tsv b/assets/mobile_element_references.tsv new file mode 100644 index 00000000..328e5083 --- /dev/null +++ b/assets/mobile_element_references.tsv @@ -0,0 +1,5 @@ +type path +L1 grch37_g1k_l1.bed +SVA grch37_g1k_sva.bed +ALU grch37_g1k_alu.bed +HERV grch37_g1k_herv.bed diff --git a/assets/mobile_element_references_schema.json b/assets/mobile_element_references_schema.json new file mode 100644 index 00000000..40e79825 --- /dev/null +++ b/assets/mobile_element_references_schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", + "title": "Schema for mobile_element_references", + "description": "Schema for the file provided with params.mobile_element_references", + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "exists": true, + "pattern": "^\\S+$", + "errorMessage": "Mobile element type must be provided and cannot contain spaces" + }, + "path": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.bed$", + "errorMessage": "Bed file, cannot contain spaces and must have extension '.bed'" + } + }, + "required": ["type", "path"] + } +} diff --git a/conf/modules/call_mobile_elements.config b/conf/modules/call_mobile_elements.config new file mode 100644 index 00000000..b7a0b81f --- /dev/null +++ b/conf/modules/call_mobile_elements.config @@ -0,0 +1,40 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +process { + + withName: '.*CALL_MOBILE_ELEMENTS:.*' { + publishDir = [ + enabled: false + ] + } + + withName: '.*CALL_MOBILE_ELEMENTS:ME_SPLIT_ALIGNMENT' { + ext.args = { [ + '--output-fmt bam', + '--fetch-pairs' + ].join(' ') } + ext.args2 = { "${meta.interval}" } + ext.prefix = { "${meta.id}_${meta.interval}" } + } + + withName: '.*CALL_MOBILE_ELEMENTS:RETROSEQ_DISCOVER' { + ext.prefix = { "${meta.id}_${meta.interval}_retroseq_discover" } + } + + withName: '.*CALL_MOBILE_ELEMENTS:RETROSEQ_CALL' { + ext.args = { '--soft' } + ext.prefix = { "${meta.id}_${meta.interval}_retroseq_call" } + } + +} diff --git a/conf/test.config b/conf/test.config index d398d542..e23102f8 100644 --- a/conf/test.config +++ b/conf/test.config @@ -41,6 +41,8 @@ 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" + // TODO: Update path for mobile element refs + mobile_element_references = "${projectDir}//mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" diff --git a/main.nf b/main.nf index 9d24f1ac..5b0bb182 100644 --- a/main.nf +++ b/main.nf @@ -16,7 +16,7 @@ nextflow.enable.dsl = 2 GENOME PARAMETER VALUES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - +// TODO: Are the genome config used? params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') @@ -33,6 +33,7 @@ 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.mobile_element_references = WorkflowMain.getGenomeAttribute(params, 'mobile_element_references') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') params.mt_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_fasta') params.ngsbits_samplegender_method = WorkflowMain.getGenomeAttribute(params, 'ngsbits_samplegender_method') diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf index 569d84a2..21207f9b 100644 --- a/modules/local/retroseq/call/main.nf +++ b/modules/local/retroseq/call/main.nf @@ -9,6 +9,7 @@ process RETROSEQ_CALL { input: tuple val(meta), path(bam), path(bai) + tuple val(meta), path(input) tuple val(meta), path(fasta) output: @@ -26,10 +27,11 @@ process RETROSEQ_CALL { """ retroseq.pl \\ -call \\ + $args \\ -bam $bam \\ - -input $input + -input $input \\ -ref $fasta \\ - -output ${prefix}.tab + -output ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -42,7 +44,7 @@ process RETROSEQ_CALL { def prefix = task.ext.prefix ?: "${meta.id}" def VERSION = "1.5" """ - touch ${prefix}.tab + touch ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/local/retroseq/call/meta.yml b/modules/local/retroseq/call/meta.yml index 7427491f..8147d20c 100644 --- a/modules/local/retroseq/call/meta.yml +++ b/modules/local/retroseq/call/meta.yml @@ -29,8 +29,12 @@ input: pattern: "*.{bam}" - fasta: type: file - description: reference genome in fasta format + description: Reference genome in fasta format pattern: "*.{fasta}" + - tab: + type: file + description: Output file from running retroseq -call + pattern: "*.{tab}" output: - meta: diff --git a/modules/local/retroseq/discover/main.nf b/modules/local/retroseq/discover/main.nf index d71fd3fa..b72f10c3 100644 --- a/modules/local/retroseq/discover/main.nf +++ b/modules/local/retroseq/discover/main.nf @@ -9,8 +9,8 @@ process RETROSEQ_DISCOVER { input: tuple val(meta), path(bam), path(bai) - path(tab) - path(extra_files) + path(me_references) + val(me_types) output: tuple val(meta), path("*.tab"), emit: tab @@ -25,10 +25,12 @@ process RETROSEQ_DISCOVER { def VERSION = "1.5" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. """ + paste <(printf "%s\\n" $me_types | tr -d '[],') <(printf "%s\\n" $me_references) > me_reference_manifest.tsv retroseq.pl \\ -discover \\ + $args \\ -bam $bam \\ - -refTEs $tab\\ + -refTEs me_reference_manifest.tsv\\ -output ${prefix}.tab cat <<-END_VERSIONS > versions.yml @@ -42,6 +44,7 @@ process RETROSEQ_DISCOVER { def prefix = task.ext.prefix ?: "${meta.id}" def VERSION = "1.5" """ + paste <(printf "%s\\n" $me_types | tr -d '[],') <(printf "%s\\n" $me_references) > me_reference_manifest.tsv touch ${prefix}.tab cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/retroseq/discover/meta.yml b/modules/local/retroseq/discover/meta.yml index 80c6af6c..55d6de5d 100644 --- a/modules/local/retroseq/discover/meta.yml +++ b/modules/local/retroseq/discover/meta.yml @@ -26,14 +26,14 @@ input: - bai: type: file description: Index of the sorted BAM file - pattern: "*.{bam}" - - tab: - type: file - description: Tab file containing a list of files, where each line is a TE type and the path to a bed file containing its coordinates in the genome. - pattern: "*.{tab}" - - extra_files: + pattern: "*.{bai}" + - me_references: type: file - description: List of files. Each file contains the coordinates of transposable elements of a particular type. + description: Paths to bed files containing transposable element coordinates in the genome. + pattern: "*.{bed}" + - me_types: + type: list + description: List of transposable element types to discover. Needs to be in sync with me_references. output: - meta: diff --git a/nextflow.config b/nextflow.config index e65b343d..4c4a4be8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -45,6 +45,7 @@ params { // File params svdb_query_bedpedbs = null svdb_query_dbs = null + mobile_element_references = null // Alignment aligner = 'bwamem2' @@ -329,6 +330,7 @@ includeConfig 'conf/modules/call_sv_germlinecnvcaller.config' includeConfig 'conf/modules/call_sv_manta.config' includeConfig 'conf/modules/call_sv_tiddit.config' includeConfig 'conf/modules/postprocess_MT_calls.config' +includeConfig 'conf/modules/call_mobile_elements.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 07988ec3..76f6a336 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -214,6 +214,15 @@ "help_text": "Used to extract relevant information from the references to analyse mitochondria", "fa_icon": "fas fa-align-center" }, + "mobile_element_references": { + "type": "string", + "fa_icon": "fas fa-file", + "description": "File with mobile element references", + "help_text": "Path to tsv file listing mobile element references. \nFormat: \\t", + "pattern": "^\\S+\\.tsv$", + "format": "file-path", + "schema": "assets/mobile_element_references_schema.json" + }, "ml_model": { "type": "string", "exists": true, diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf deleted file mode 100644 index 26648434..00000000 --- a/subworkflows/local/annotate_mobile_elements.nf +++ /dev/null @@ -1,46 +0,0 @@ -// -// A subworkflow to annotate mobile elements in the genome -// - -include { RETROSEQ_CALL as RETROSEQ_CALL } from '../../modules/local/retroseq/call/main' -include { RETROSEQ_DISCOVER as RETROSEQ_DISCOVER } from '../../modules/local/retroseq/discover/main' - -workflow ANNOTATE_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_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] - - main: - ch_versions = Channel.empty() - - // Running retroseq discover: identify discordant read pairs that might support a TE insertion - RETROSEQ_DISCOVER ( - ch_bam_bai, - "tab", - "extrafiles" - ) - - // Running retroseq call: clusters reads and checks on the breakpoints to decide whether a TEV is present - RETROSEQ_CALL ( - ch_bam_bai, - ch_genome_fasta, - ) - - // Run vep to annotate - - // Run svdb to query against database - - // Filter and rank as done in findtroll? E.g. protein coding - - ch_versions = ch_versions.mix(RETROSEQ_CALL.out.versions) - ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions) - - emit: - vcf_ann = RETROSEQ_CALL.out.vcf // channel: [ val(meta), path(vcf) ] - versions = ch_versions // channel: [ path(versions.yml) ] -} - diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf new file mode 100644 index 00000000..32b62bac --- /dev/null +++ b/subworkflows/local/call_mobile_elements.nf @@ -0,0 +1,86 @@ +// +// A subworkflow to call mobile elements in the genome +// + +include { RETROSEQ_CALL as RETROSEQ_CALL } from '../../modules/local/retroseq/call/main' +include { RETROSEQ_DISCOVER as RETROSEQ_DISCOVER } from '../../modules/local/retroseq/discover/main' +include { SAMTOOLS_VIEW as ME_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/view/main' +include { SAMTOOLS_INDEX as ME_INDEX_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/index/main' + +workflow CALL_MOBILE_ELEMENTS { + + take: + ch_genome_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_me_references // channel: [mandatory] [path(tsv)] + val_genome_build // string: [mandatory] GRCh37 or GRCh38 + + main: + ch_versions = Channel.empty() + + // Building chromosome channel depending on genome version + // TODO: Check how retroseq behaves when running chrY on female samples + Channel.of(1..22, 'X', 'Y') + .branch { it -> + grch37: val_genome_build.equals('GRCh37') + return [it.toString()] + grch38: val_genome_build.equals('GRCh38') + return ['chr' + it.toString()] + }.set{ ch_chr_genome } + ch_chr = ch_chr_genome.grch37.mix(ch_chr_genome.grch38) + + // Building one bam channel per chromosome and adding interval + ch_genome_bam_bai + .combine(ch_chr) + .map { + meta, bam, bai, chr -> + return [ meta + [interval:chr], bam, bai ] + } + .set { ch_genome_bam_bai_interval } + + ME_SPLIT_ALIGNMENT( + ch_genome_bam_bai_interval, + [[:], []], + [] + ) + + ME_INDEX_SPLIT_ALIGNMENT( ME_SPLIT_ALIGNMENT.out.bam ) + + ME_SPLIT_ALIGNMENT.out.bam + .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true) + .set { ch_retroseq_input } + + ch_me_references + .multiMap { type, path -> + type: type + path: path + } + .set { ch_me_reference_split } + + RETROSEQ_DISCOVER ( + ch_retroseq_input, + ch_me_reference_split.path.collect(), + ch_me_reference_split.type.collect() + ) + + // Running retroseq call: clusters reads and checks on the breakpoints to decide whether a TEV is present + RETROSEQ_CALL ( + ch_retroseq_input, + RETROSEQ_DISCOVER.out.tab, + ch_genome_fasta + ) + + // Run vep to annotate + + // Run svdb to query against database + + // Filter and rank as done in findtroll? E.g. protein coding + + ch_versions = ch_versions.mix(ME_SPLIT_ALIGNMENT.out.versions) + ch_versions = ch_versions.mix(ME_INDEX_SPLIT_ALIGNMENT.out.versions) + ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions) + ch_versions = ch_versions.mix(RETROSEQ_CALL.out.versions) + + emit: + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c4183c93..f572a651 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -133,6 +133,7 @@ include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/ra include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' +include { CALL_MOBILE_ELEMENTS } from '../subworkflows/local/call_mobile_elements' /* @@ -241,6 +242,9 @@ workflow RAREDISEASE { : Channel.empty() ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() : Channel.empty() + //ch_me_references = params.mobile_element_references ? Channel.fromPath(params.mobile_element_references) + ch_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") + : Channel.empty() ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals @@ -595,6 +599,13 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(GENS.out.versions) } + CALL_MOBILE_ELEMENTS( + ch_mapped.genome_bam_bai, + ch_genome_fasta, + ch_me_references, + params.genome + ) + // // MODULE: Pipeline reporting // From cad46c183c24594f7e2e2e50c739660022335a8f Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 4 Jan 2024 11:57:46 +0100 Subject: [PATCH 1494/1921] updating temporary ref_me paths --- assets/mobile_element_references.tsv | 8 ++++---- conf/test.config | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assets/mobile_element_references.tsv b/assets/mobile_element_references.tsv index 328e5083..e5a804ff 100644 --- a/assets/mobile_element_references.tsv +++ b/assets/mobile_element_references.tsv @@ -1,5 +1,5 @@ type path -L1 grch37_g1k_l1.bed -SVA grch37_g1k_sva.bed -ALU grch37_g1k_alu.bed -HERV grch37_g1k_herv.bed +L1 ./assets/grch37_g1k_l1.bed +SVA ./assets/grch37_g1k_sva.bed +ALU ./assets/grch37_g1k_alu.bed +HERV ./assets/grch37_g1k_herv.bed diff --git a/conf/test.config b/conf/test.config index e23102f8..e691a70d 100644 --- a/conf/test.config +++ b/conf/test.config @@ -42,7 +42,7 @@ 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" // TODO: Update path for mobile element refs - mobile_element_references = "${projectDir}//mobile_element_references.tsv" + mobile_element_references = "${projectDir}/assets/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" From 0f6edbdfccd6ae89140c29f7ecd666e356f074ea Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 4 Jan 2024 12:57:05 +0100 Subject: [PATCH 1495/1921] fixing path to retroseq docker --- modules/local/retroseq/call/main.nf | 2 +- modules/local/retroseq/discover/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf index 21207f9b..33ddb1af 100644 --- a/modules/local/retroseq/call/main.nf +++ b/modules/local/retroseq/call/main.nf @@ -4,7 +4,7 @@ process RETROSEQ_CALL { conda "bioconda::perl-retroseq=1.5=pl5321hdfd78af_1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' }" + 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' }" input: diff --git a/modules/local/retroseq/discover/main.nf b/modules/local/retroseq/discover/main.nf index b72f10c3..cf4b5fa8 100644 --- a/modules/local/retroseq/discover/main.nf +++ b/modules/local/retroseq/discover/main.nf @@ -4,7 +4,7 @@ process RETROSEQ_DISCOVER { conda "bioconda::perl-retroseq=1.5=pl5321hdfd78af_1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker://clinicalgenomics/retroseq:1.5_9d4f3b5' }" + 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' }" input: From bddd2fc7376cb972900855141c91190cbd3c8d11 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 4 Jan 2024 13:02:49 +0100 Subject: [PATCH 1496/1921] propagating versions --- subworkflows/local/call_mobile_elements.nf | 10 +++++----- workflows/raredisease.nf | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 32b62bac..9929fb7f 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -45,7 +45,7 @@ workflow CALL_MOBILE_ELEMENTS { ) ME_INDEX_SPLIT_ALIGNMENT( ME_SPLIT_ALIGNMENT.out.bam ) - + ME_SPLIT_ALIGNMENT.out.bam .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true) .set { ch_retroseq_input } @@ -76,10 +76,10 @@ workflow CALL_MOBILE_ELEMENTS { // Filter and rank as done in findtroll? E.g. protein coding - ch_versions = ch_versions.mix(ME_SPLIT_ALIGNMENT.out.versions) - ch_versions = ch_versions.mix(ME_INDEX_SPLIT_ALIGNMENT.out.versions) - ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions) - ch_versions = ch_versions.mix(RETROSEQ_CALL.out.versions) + ch_versions = ch_versions.mix(ME_SPLIT_ALIGNMENT.out.versions).first() + ch_versions = ch_versions.mix(ME_INDEX_SPLIT_ALIGNMENT.out.versions).first() + ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions).first() + ch_versions = ch_versions.mix(RETROSEQ_CALL.out.versions).first() emit: versions = ch_versions // channel: [ path(versions.yml) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f572a651..6d833d08 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -605,6 +605,7 @@ workflow RAREDISEASE { ch_me_references, params.genome ) + ch_versions = ch_versions.mix(CALL_MOBILE_ELEMENTS.out.versions) // // MODULE: Pipeline reporting From 0c0fd91447508533530a6df090d050a7dad2c676 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 4 Jan 2024 15:58:56 +0100 Subject: [PATCH 1497/1921] joining channels to keep them in sync --- modules/local/retroseq/call/main.nf | 8 ++++---- modules/local/retroseq/call/meta.yml | 18 +++++++++++------- modules/local/retroseq/discover/main.nf | 2 +- modules/local/retroseq/discover/meta.yml | 8 ++++---- subworkflows/local/call_mobile_elements.nf | 12 +++++++++--- subworkflows/local/call_structural_variants.nf | 11 ++++++----- workflows/raredisease.nf | 5 ++++- 7 files changed, 39 insertions(+), 25 deletions(-) diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf index 33ddb1af..150af4ba 100644 --- a/modules/local/retroseq/call/main.nf +++ b/modules/local/retroseq/call/main.nf @@ -4,13 +4,13 @@ process RETROSEQ_CALL { conda "bioconda::perl-retroseq=1.5=pl5321hdfd78af_1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' }" + 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5-1' : 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5-1' }" input: - tuple val(meta), path(bam), path(bai) - tuple val(meta), path(input) - tuple val(meta), path(fasta) + tuple val(meta), path(tab), path(bam), path(bai) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*.vcf"), emit: vcf diff --git a/modules/local/retroseq/call/meta.yml b/modules/local/retroseq/call/meta.yml index 8147d20c..98aa0c04 100644 --- a/modules/local/retroseq/call/meta.yml +++ b/modules/local/retroseq/call/meta.yml @@ -19,22 +19,26 @@ input: description: | Groovy Map containing sample information e.g. `[ id:'test', single_end:false ]` + - tab: + type: file + description: Output file from running retroseq -call + pattern: "*.tab" - bam: type: file description: Sorted BAM file - pattern: "*.{bam}" + pattern: "*.bam" - bai: type: file description: Index of the sorted BAM file - pattern: "*.{bam}" + pattern: "*.bam" - fasta: type: file description: Reference genome in fasta format - pattern: "*.{fasta}" - - tab: + pattern: "*.fasta" + - fai: type: file - description: Output file from running retroseq -call - pattern: "*.{tab}" + description: Reference FASTA index + pattern: "*.fai" output: - meta: @@ -49,7 +53,7 @@ output: - vcf: type: file description: Output file containing TEVs and their location in the genome. - pattern: "*.{vcf}" + pattern: "*.vcf" authors: - "@peterpru" diff --git a/modules/local/retroseq/discover/main.nf b/modules/local/retroseq/discover/main.nf index cf4b5fa8..2ea51344 100644 --- a/modules/local/retroseq/discover/main.nf +++ b/modules/local/retroseq/discover/main.nf @@ -4,7 +4,7 @@ process RETROSEQ_DISCOVER { conda "bioconda::perl-retroseq=1.5=pl5321hdfd78af_1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' : 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5' }" + 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5-1' : 'docker.io/clinicalgenomics/retroseq:1.5_9d4f3b5-1' }" input: diff --git a/modules/local/retroseq/discover/meta.yml b/modules/local/retroseq/discover/meta.yml index 55d6de5d..9ea47408 100644 --- a/modules/local/retroseq/discover/meta.yml +++ b/modules/local/retroseq/discover/meta.yml @@ -22,15 +22,15 @@ input: - bam: type: file description: Sorted BAM file - pattern: "*.{bam}" + pattern: "*.bam" - bai: type: file description: Index of the sorted BAM file - pattern: "*.{bai}" + pattern: "*.bai" - me_references: type: file description: Paths to bed files containing transposable element coordinates in the genome. - pattern: "*.{bed}" + pattern: "*.bed" - me_types: type: list description: List of transposable element types to discover. Needs to be in sync with me_references. @@ -48,7 +48,7 @@ output: - tab: type: file description: Output file containing lists of read pair names per TE type - pattern: "*.{tab}" + pattern: "*.tab" authors: - "@peterpru" diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 9929fb7f..e2d34752 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -12,6 +12,7 @@ workflow CALL_MOBILE_ELEMENTS { take: ch_genome_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_me_references // channel: [mandatory] [path(tsv)] val_genome_build // string: [mandatory] GRCh37 or GRCh38 @@ -63,13 +64,18 @@ workflow CALL_MOBILE_ELEMENTS { ch_me_reference_split.type.collect() ) + RETROSEQ_DISCOVER.out.tab + .join(ch_retroseq_input, failOnMismatch: true) + .set { ch_retroseq_call_input } + // Running retroseq call: clusters reads and checks on the breakpoints to decide whether a TEV is present RETROSEQ_CALL ( - ch_retroseq_input, - RETROSEQ_DISCOVER.out.tab, - ch_genome_fasta + ch_retroseq_call_input, + ch_genome_fasta, + ch_genome_fai ) + // Run vep to annotate // Run svdb to query against database diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 13827f61..ee5c2cbc 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -53,10 +53,11 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) } - CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) - .vcf - .collect{it[1]} - .set { cnvnator_vcf } + // Uncomment + //CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) + // .vcf + // .collect{it[1]} + // .set { cnvnator_vcf } CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) @@ -64,7 +65,7 @@ workflow CALL_STRUCTURAL_VARIANTS { if (params.skip_germlinecnvcaller) { tiddit_vcf .combine(manta_vcf) - .combine(cnvnator_vcf) + // .combine(cnvnator_vcf) .toList() .set { vcf_list } } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6d833d08..f416ec4d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -293,7 +293,9 @@ workflow RAREDISEASE { // SV caller priority if (params.skip_germlinecnvcaller) { - ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) + // TODO: Uncomment and remove + ch_svcaller_priority = Channel.value(["tiddit", "manta"]) + //ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) } else { ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) } @@ -602,6 +604,7 @@ workflow RAREDISEASE { CALL_MOBILE_ELEMENTS( ch_mapped.genome_bam_bai, ch_genome_fasta, + ch_genome_fai, ch_me_references, params.genome ) From ad9051841d39aafd4c93be0dd93c2d0a5cb24e53 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 4 Jan 2024 17:52:23 +0100 Subject: [PATCH 1498/1921] fix input name --- modules/local/retroseq/call/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/retroseq/call/main.nf b/modules/local/retroseq/call/main.nf index 150af4ba..5b13c630 100644 --- a/modules/local/retroseq/call/main.nf +++ b/modules/local/retroseq/call/main.nf @@ -29,7 +29,7 @@ process RETROSEQ_CALL { -call \\ $args \\ -bam $bam \\ - -input $input \\ + -input $tab \\ -ref $fasta \\ -output ${prefix}.vcf From caa0029cc35357f3096c6218fd0c00dd6dbf231c Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 5 Jan 2024 14:37:28 +0100 Subject: [PATCH 1499/1921] concatenate and merge vcfs --- conf/modules/call_mobile_elements.config | 33 ++++++++++ subworkflows/local/call_mobile_elements.nf | 73 +++++++++++++++++----- workflows/raredisease.nf | 1 + 3 files changed, 93 insertions(+), 14 deletions(-) diff --git a/conf/modules/call_mobile_elements.config b/conf/modules/call_mobile_elements.config index b7a0b81f..788404a3 100644 --- a/conf/modules/call_mobile_elements.config +++ b/conf/modules/call_mobile_elements.config @@ -37,4 +37,37 @@ process { ext.prefix = { "${meta.id}_${meta.interval}_retroseq_call" } } + withName: '.*CALL_MOBILE_ELEMENTS:BCFTOOLS_REHEADER_ME' { + ext.args2 = { '--output-type v' } + ext.prefix = { "${meta.id}_${meta.interval}_retroseq_reheader" } + } + + withName: '.*CALL_MOBILE_ELEMENTS:BCFTOOLS_SORT_ME' { + ext.args = { '--output-type z' } + ext.prefix = { "${meta.id}_${meta.interval}_retroseq_sort" } + } + + withName: '.*CALL_MOBILE_ELEMENTS:BCFTOOLS_CONCAT_ME' { + ext.args = { '--output-type z --allow-overlaps' } + ext.prefix = { "${meta.id}_mobile_elements" } + } + + withName: '.*CALL_MOBILE_ELEMENTS:SVDB_MERGE_ME' { + ext.args = { '--bnd_distance 150 --overlap 0.5' } + ext.prefix = { "${meta.id}_mobile_elements" } + publishDir = [ + path: { "${params.outdir}/call_mobile_elements" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*CALL_MOBILE_ELEMENTS:TABIX_ME' { + publishDir = [ + path: { "${params.outdir}/call_mobile_elements" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + } diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index e2d34752..7db198be 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -2,10 +2,16 @@ // A subworkflow to call mobile elements in the genome // +include { BCFTOOLS_REHEADER as BCFTOOLS_REHEADER_ME } from '../../modules/nf-core/bcftools/reheader/main' +include { BCFTOOLS_CONCAT as BCFTOOLS_CONCAT_ME } from '../../modules/nf-core/bcftools/concat/main' +include { BCFTOOLS_SORT as BCFTOOLS_SORT_ME } from '../../modules/nf-core/bcftools/sort/main' include { RETROSEQ_CALL as RETROSEQ_CALL } from '../../modules/local/retroseq/call/main' include { RETROSEQ_DISCOVER as RETROSEQ_DISCOVER } from '../../modules/local/retroseq/discover/main' -include { SAMTOOLS_VIEW as ME_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/view/main' include { SAMTOOLS_INDEX as ME_INDEX_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/index/main' +include { SAMTOOLS_VIEW as ME_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/view/main' +include { TABIX_TABIX as TABIX_ME } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_ME_SPLIT } from '../../modules/nf-core/tabix/tabix/main' +include { SVDB_MERGE as SVDB_MERGE_ME } from '../../modules/nf-core/svdb/merge/main' workflow CALL_MOBILE_ELEMENTS { @@ -14,6 +20,7 @@ workflow CALL_MOBILE_ELEMENTS { ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_me_references // channel: [mandatory] [path(tsv)] + ch_case_info // channel: [mandatory] [ val(case_info) ] val_genome_build // string: [mandatory] GRCh37 or GRCh38 main: @@ -28,7 +35,8 @@ workflow CALL_MOBILE_ELEMENTS { grch38: val_genome_build.equals('GRCh38') return ['chr' + it.toString()] }.set{ ch_chr_genome } - ch_chr = ch_chr_genome.grch37.mix(ch_chr_genome.grch38) + ch_chr_genome.grch37.mix(ch_chr_genome.grch38) + .set { ch_chr } // Building one bam channel per chromosome and adding interval ch_genome_bam_bai @@ -39,13 +47,9 @@ workflow CALL_MOBILE_ELEMENTS { } .set { ch_genome_bam_bai_interval } - ME_SPLIT_ALIGNMENT( - ch_genome_bam_bai_interval, - [[:], []], - [] - ) - - ME_INDEX_SPLIT_ALIGNMENT( ME_SPLIT_ALIGNMENT.out.bam ) + // Split bam file on chromosome and index + ME_SPLIT_ALIGNMENT ( ch_genome_bam_bai_interval, [[:], []], [] ) + ME_INDEX_SPLIT_ALIGNMENT ( ME_SPLIT_ALIGNMENT.out.bam ) ME_SPLIT_ALIGNMENT.out.bam .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true) @@ -68,25 +72,66 @@ workflow CALL_MOBILE_ELEMENTS { .join(ch_retroseq_input, failOnMismatch: true) .set { ch_retroseq_call_input } - // Running retroseq call: clusters reads and checks on the breakpoints to decide whether a TEV is present RETROSEQ_CALL ( ch_retroseq_call_input, ch_genome_fasta, ch_genome_fai ) + // Fix the vcf by adding header, sorting and indexing + BCFTOOLS_REHEADER_ME ( + RETROSEQ_CALL.out.vcf.map{ meta, vcf -> [ meta, vcf, [] ] }, + ch_genome_fai + ) + BCFTOOLS_SORT_ME ( BCFTOOLS_REHEADER_ME.out.vcf ) + TABIX_ME_SPLIT ( BCFTOOLS_SORT_ME.out.vcf ) + + // Concatenate the chromosme vcfs per sample + BCFTOOLS_SORT_ME.out.vcf + .map { meta, vcf -> [ meta.findAll { !(it.key in ['interval']) }, vcf ] } + .groupTuple(size: 24) + .set { ch_vcfs } + + TABIX_ME_SPLIT.out.tbi + .map { meta, tbi -> [ meta.findAll { !(it.key in ['interval']) }, tbi ] } + .groupTuple(size: 24) + .set { ch_tbis } + + ch_vcfs.join(ch_tbis) + .set { ch_vcfs_tbis} + + BCFTOOLS_CONCAT_ME ( ch_vcfs_tbis ) + + // Merge sample vcfs to a case vcf + BCFTOOLS_CONCAT_ME.out.vcf + .collect{it[1]} + .toList() + .collect() + .set { ch_vcf_list } - // Run vep to annotate + ch_case_info + .combine(ch_vcf_list) + .set { ch_svdb_merge_me_input } - // Run svdb to query against database + SVDB_MERGE_ME ( ch_svdb_merge_me_input, [] ) + TABIX_ME ( SVDB_MERGE_ME.out.vcf ) - // Filter and rank as done in findtroll? E.g. protein coding + SVDB_MERGE_ME.out.vcf + .join(TABIX_ME.out.tbi) + .set { ch_me_vcf } ch_versions = ch_versions.mix(ME_SPLIT_ALIGNMENT.out.versions).first() ch_versions = ch_versions.mix(ME_INDEX_SPLIT_ALIGNMENT.out.versions).first() ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions).first() ch_versions = ch_versions.mix(RETROSEQ_CALL.out.versions).first() + ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_ME.out.versions).first() + ch_versions = ch_versions.mix(BCFTOOLS_SORT_ME.out.versions).first() + ch_versions = ch_versions.mix(TABIX_ME_SPLIT.out.versions).first() + ch_versions = ch_versions.mix(BCFTOOLS_CONCAT_ME.out.versions).first() + ch_versions = ch_versions.mix(SVDB_MERGE_ME.out.versions) + ch_versions = ch_versions.mix(TABIX_ME.out.versions) emit: - versions = ch_versions // channel: [ path(versions.yml) ] + me_vcf = ch_me_vcf // channel: [ val(meta), path(vcf), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f416ec4d..0016a154 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -606,6 +606,7 @@ workflow RAREDISEASE { ch_genome_fasta, ch_genome_fai, ch_me_references, + ch_case_info, params.genome ) ch_versions = ch_versions.mix(CALL_MOBILE_ELEMENTS.out.versions) From c6c089039f28fc1ed9b108a55f8d2ba6cadb5d39 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 8 Jan 2024 15:45:16 +0100 Subject: [PATCH 1500/1921] looking into joining error --- lib/CustomChannelOperators.groovy | 156 +++++++++++++++++++++ subworkflows/local/call_mobile_elements.nf | 19 ++- 2 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 lib/CustomChannelOperators.groovy diff --git a/lib/CustomChannelOperators.groovy b/lib/CustomChannelOperators.groovy new file mode 100644 index 00000000..f1317a46 --- /dev/null +++ b/lib/CustomChannelOperators.groovy @@ -0,0 +1,156 @@ +// +// https://github.com/Midnighter/nextflow-utility-services/blob/1f84278c965255fb2bbe290b8d6c9f33f71da26f/lib/CustomChannelOperators.groovy +// +/** + * MIT License + * + * Copyright (c) 2022 Moritz E. Beber + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import groovyx.gpars.dataflow.DataflowBroadcast + +/** + * Provide a collection of custom channel operators that go beyond the nextflow default. + * + * @author Moritz E. Beber + * @author Mahesh Binzer-Panchal + */ +class CustomChannelOperators { + + /** + * Join two channels by one or more keys from a map contained in each channel. + * + * The channel elements are assumed to be tuples whose size is at least two. + * Typically, the maps to join by are in the first position of the tuples. + * Please read https://www.nextflow.io/docs/latest/operator.html#join carefully. + * + * @param left The left-hand side channel in the join. + * @param right The right-hand side channel in the join. + * @param keys A list of strings providing the map keys to compare. + * @param leftBy The position of the map in the left channel. + * @param rightBy The position of the map in the right channel. + * @param joinArgs A map of keyword arguments that is passed on to the nextflow join call. + * @return The joined channels with the map in the original position of the left channel, + * followed by all elements of the right channel except for the map. + */ + static DataflowBroadcast joinOnKeys( + DataflowBroadcast left, + DataflowBroadcast right, + List keys, + Integer leftBy, + Integer rightBy, + Map joinArgs + ) { + // Extract desired keys from the left map, located at `leftBy`, and prepend them. + DataflowBroadcast newLeft = left.map { tuple -> + extractKeys(tuple, keys, leftBy) + tuple + } + + // Extract desired keys from the right map, located at `rightBy`, and prepend them. + // Also drop the map itself from the right. + DataflowBroadcast newRight = right.map { tuple -> + extractKeys(tuple, keys, rightBy) + removeMap(tuple, rightBy) + } + + // Set the positions to join on explicitly. + joinArgs.by = 0.. dropKeys(tuple, keys) } + } + + static DataflowBroadcast joinOnKeys( + Map joinArgs, + DataflowBroadcast left, + DataflowBroadcast right, + String key, + Integer leftBy = 0, + Integer rightBy = 0 + ) { + return joinOnKeys(left, right, [key], leftBy, rightBy, joinArgs) + } + + static DataflowBroadcast joinOnKeys( + DataflowBroadcast left, + DataflowBroadcast right, + String key, + Integer leftBy = 0, + Integer rightBy = 0 + ) { + return joinOnKeys(left, right, [key], leftBy, rightBy, [:]) + } + + static DataflowBroadcast joinOnKeys( + Map joinArgs, + DataflowBroadcast left, + DataflowBroadcast right, + List keys, + Integer leftBy = 0, + Integer rightBy = 0 + ) { + return joinOnKeys(left, right, keys, leftBy, rightBy, joinArgs) + } + + static DataflowBroadcast joinOnKeys( + DataflowBroadcast left, + DataflowBroadcast right, + List keys, + Integer leftBy = 0, + Integer rightBy = 0 + ) { + return joinOnKeys(left, right, keys, leftBy, rightBy, [:]) + } + + /** + * Extract values from a map at given position with given keys. + * + * @param tuple A tuple (`List`) channel element. + * @param keys A list of strings denoting keys in the map. + * @param index The position of the map in the tuple. + * @return The list of values extracted from the map. + */ + private static List extractKeys(List tuple, List keys, Integer index) { + return tuple[index].subMap(keys).values().toList() + } + + /** + * Return a new tuple without the map in it. + * + * @param tuple A tuple (`List`) channel element. + * @param index The position of the map in the tuple. + * @return A copy of the list without the map. + */ + private static List removeMap(List tuple, Integer index) { + return tuple[0.. keys) { + return tuple.drop(keys.size()) + } + +} diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 7db198be..12e4085e 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -26,8 +26,11 @@ workflow CALL_MOBILE_ELEMENTS { main: ch_versions = Channel.empty() + // TODO: Fix one sample join error + // Building chromosome channel depending on genome version // TODO: Check how retroseq behaves when running chrY on female samples + // TODO: Would be nicer to read in the fai or dict Channel.of(1..22, 'X', 'Y') .branch { it -> grch37: val_genome_build.equals('GRCh37') @@ -51,8 +54,18 @@ workflow CALL_MOBILE_ELEMENTS { ME_SPLIT_ALIGNMENT ( ch_genome_bam_bai_interval, [[:], []], [] ) ME_INDEX_SPLIT_ALIGNMENT ( ME_SPLIT_ALIGNMENT.out.bam ) + ME_SPLIT_ALIGNMENT.out.bam.toList().dump(tag:'bam') + ME_INDEX_SPLIT_ALIGNMENT.out.bai.toList().dump(tag:'bai') + + //ch_retroseq_input = CustomChannelOperators.joinOnKeys( + // ME_SPLIT_ALIGNMENT.out.bam, + // ME_SPLIT_ALIGNMENT.out.bai, + // ["id", "interval"], 0,0, [failOnMismatch:true, failOnDuplicate:true] + //) + //ch_retroseq_input.dump(tag: 'join', pretty: true) + ME_SPLIT_ALIGNMENT.out.bam - .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true) + .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true, failOnDuplicate: true) .set { ch_retroseq_input } ch_me_references @@ -88,12 +101,12 @@ workflow CALL_MOBILE_ELEMENTS { // Concatenate the chromosme vcfs per sample BCFTOOLS_SORT_ME.out.vcf - .map { meta, vcf -> [ meta.findAll { !(it.key in ['interval']) }, vcf ] } + .map { meta, vcf -> [ meta - meta.subMap('interval'), vcf ] } .groupTuple(size: 24) .set { ch_vcfs } TABIX_ME_SPLIT.out.tbi - .map { meta, tbi -> [ meta.findAll { !(it.key in ['interval']) }, tbi ] } + .map { meta, tbi -> [ meta - meta.subMap('interval'), tbi ] } .groupTuple(size: 24) .set { ch_tbis } From 45cc753e086ded70fa73fda6a192f7e5861d6b62 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 11:00:28 +0100 Subject: [PATCH 1501/1921] adding missing test file --- conf/test_one_sample.config | 2 + lib/CustomChannelOperators.groovy | 156 --------------------- subworkflows/local/call_mobile_elements.nf | 23 +-- 3 files changed, 6 insertions(+), 175 deletions(-) delete mode 100644 lib/CustomChannelOperators.groovy diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index f39cb40c..81a3dd12 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -41,6 +41,8 @@ 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" + // TODO: Update path for mobile element refs + mobile_element_references = "${projectDir}/assets/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" 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/lib/CustomChannelOperators.groovy b/lib/CustomChannelOperators.groovy deleted file mode 100644 index f1317a46..00000000 --- a/lib/CustomChannelOperators.groovy +++ /dev/null @@ -1,156 +0,0 @@ -// -// https://github.com/Midnighter/nextflow-utility-services/blob/1f84278c965255fb2bbe290b8d6c9f33f71da26f/lib/CustomChannelOperators.groovy -// -/** - * MIT License - * - * Copyright (c) 2022 Moritz E. Beber - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -import groovyx.gpars.dataflow.DataflowBroadcast - -/** - * Provide a collection of custom channel operators that go beyond the nextflow default. - * - * @author Moritz E. Beber - * @author Mahesh Binzer-Panchal - */ -class CustomChannelOperators { - - /** - * Join two channels by one or more keys from a map contained in each channel. - * - * The channel elements are assumed to be tuples whose size is at least two. - * Typically, the maps to join by are in the first position of the tuples. - * Please read https://www.nextflow.io/docs/latest/operator.html#join carefully. - * - * @param left The left-hand side channel in the join. - * @param right The right-hand side channel in the join. - * @param keys A list of strings providing the map keys to compare. - * @param leftBy The position of the map in the left channel. - * @param rightBy The position of the map in the right channel. - * @param joinArgs A map of keyword arguments that is passed on to the nextflow join call. - * @return The joined channels with the map in the original position of the left channel, - * followed by all elements of the right channel except for the map. - */ - static DataflowBroadcast joinOnKeys( - DataflowBroadcast left, - DataflowBroadcast right, - List keys, - Integer leftBy, - Integer rightBy, - Map joinArgs - ) { - // Extract desired keys from the left map, located at `leftBy`, and prepend them. - DataflowBroadcast newLeft = left.map { tuple -> - extractKeys(tuple, keys, leftBy) + tuple - } - - // Extract desired keys from the right map, located at `rightBy`, and prepend them. - // Also drop the map itself from the right. - DataflowBroadcast newRight = right.map { tuple -> - extractKeys(tuple, keys, rightBy) + removeMap(tuple, rightBy) - } - - // Set the positions to join on explicitly. - joinArgs.by = 0.. dropKeys(tuple, keys) } - } - - static DataflowBroadcast joinOnKeys( - Map joinArgs, - DataflowBroadcast left, - DataflowBroadcast right, - String key, - Integer leftBy = 0, - Integer rightBy = 0 - ) { - return joinOnKeys(left, right, [key], leftBy, rightBy, joinArgs) - } - - static DataflowBroadcast joinOnKeys( - DataflowBroadcast left, - DataflowBroadcast right, - String key, - Integer leftBy = 0, - Integer rightBy = 0 - ) { - return joinOnKeys(left, right, [key], leftBy, rightBy, [:]) - } - - static DataflowBroadcast joinOnKeys( - Map joinArgs, - DataflowBroadcast left, - DataflowBroadcast right, - List keys, - Integer leftBy = 0, - Integer rightBy = 0 - ) { - return joinOnKeys(left, right, keys, leftBy, rightBy, joinArgs) - } - - static DataflowBroadcast joinOnKeys( - DataflowBroadcast left, - DataflowBroadcast right, - List keys, - Integer leftBy = 0, - Integer rightBy = 0 - ) { - return joinOnKeys(left, right, keys, leftBy, rightBy, [:]) - } - - /** - * Extract values from a map at given position with given keys. - * - * @param tuple A tuple (`List`) channel element. - * @param keys A list of strings denoting keys in the map. - * @param index The position of the map in the tuple. - * @return The list of values extracted from the map. - */ - private static List extractKeys(List tuple, List keys, Integer index) { - return tuple[index].subMap(keys).values().toList() - } - - /** - * Return a new tuple without the map in it. - * - * @param tuple A tuple (`List`) channel element. - * @param index The position of the map in the tuple. - * @return A copy of the list without the map. - */ - private static List removeMap(List tuple, Integer index) { - return tuple[0.. keys) { - return tuple.drop(keys.size()) - } - -} diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 12e4085e..45432ae6 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -26,8 +26,6 @@ workflow CALL_MOBILE_ELEMENTS { main: ch_versions = Channel.empty() - // TODO: Fix one sample join error - // Building chromosome channel depending on genome version // TODO: Check how retroseq behaves when running chrY on female samples // TODO: Would be nicer to read in the fai or dict @@ -54,16 +52,6 @@ workflow CALL_MOBILE_ELEMENTS { ME_SPLIT_ALIGNMENT ( ch_genome_bam_bai_interval, [[:], []], [] ) ME_INDEX_SPLIT_ALIGNMENT ( ME_SPLIT_ALIGNMENT.out.bam ) - ME_SPLIT_ALIGNMENT.out.bam.toList().dump(tag:'bam') - ME_INDEX_SPLIT_ALIGNMENT.out.bai.toList().dump(tag:'bai') - - //ch_retroseq_input = CustomChannelOperators.joinOnKeys( - // ME_SPLIT_ALIGNMENT.out.bam, - // ME_SPLIT_ALIGNMENT.out.bai, - // ["id", "interval"], 0,0, [failOnMismatch:true, failOnDuplicate:true] - //) - //ch_retroseq_input.dump(tag: 'join', pretty: true) - ME_SPLIT_ALIGNMENT.out.bam .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true, failOnDuplicate: true) .set { ch_retroseq_input } @@ -99,7 +87,7 @@ workflow CALL_MOBILE_ELEMENTS { BCFTOOLS_SORT_ME ( BCFTOOLS_REHEADER_ME.out.vcf ) TABIX_ME_SPLIT ( BCFTOOLS_SORT_ME.out.vcf ) - // Concatenate the chromosme vcfs per sample + // Concatenate the chromosome vcfs to sample vcfs BCFTOOLS_SORT_ME.out.vcf .map { meta, vcf -> [ meta - meta.subMap('interval'), vcf ] } .groupTuple(size: 24) @@ -129,10 +117,6 @@ workflow CALL_MOBILE_ELEMENTS { SVDB_MERGE_ME ( ch_svdb_merge_me_input, [] ) TABIX_ME ( SVDB_MERGE_ME.out.vcf ) - SVDB_MERGE_ME.out.vcf - .join(TABIX_ME.out.tbi) - .set { ch_me_vcf } - ch_versions = ch_versions.mix(ME_SPLIT_ALIGNMENT.out.versions).first() ch_versions = ch_versions.mix(ME_INDEX_SPLIT_ALIGNMENT.out.versions).first() ch_versions = ch_versions.mix(RETROSEQ_DISCOVER.out.versions).first() @@ -145,6 +129,7 @@ workflow CALL_MOBILE_ELEMENTS { ch_versions = ch_versions.mix(TABIX_ME.out.versions) emit: - me_vcf = ch_me_vcf // channel: [ val(meta), path(vcf), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = SVDB_MERGE_ME.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = TABIX_ME.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 08b7203e31d9b81833d38fdbaf5bbac89c173f04 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 11:06:28 +0100 Subject: [PATCH 1502/1921] fix config indentation --- conf/modules/call_mobile_elements.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/call_mobile_elements.config b/conf/modules/call_mobile_elements.config index 788404a3..fabc6b94 100644 --- a/conf/modules/call_mobile_elements.config +++ b/conf/modules/call_mobile_elements.config @@ -62,7 +62,7 @@ process { ] } - withName: '.*CALL_MOBILE_ELEMENTS:TABIX_ME' { + withName: '.*CALL_MOBILE_ELEMENTS:TABIX_ME' { publishDir = [ path: { "${params.outdir}/call_mobile_elements" }, mode: params.publish_dir_mode, From 3be46420032c2018ee47842db4035e2797e908fe Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 16:23:01 +0100 Subject: [PATCH 1503/1921] fixing around with test data --- CITATIONS.md | 4 ++++ README.md | 4 ++++ assets/grch37_g1k_alu.bed | 0 assets/grch37_g1k_herv.bed | 0 assets/grch37_g1k_l1.bed | 0 assets/grch37_g1k_sva.bed | 0 assets/mobile_element_references.tsv | 5 ----- conf/test.config | 4 ++-- conf/test_one_sample.config | 4 ++-- conf/test_sentieon.config | 2 ++ main.nf | 1 - subworkflows/local/call_mobile_elements.nf | 21 +++++++-------------- workflows/raredisease.nf | 20 +++++++++----------- 13 files changed, 30 insertions(+), 35 deletions(-) delete mode 100644 assets/grch37_g1k_alu.bed delete mode 100644 assets/grch37_g1k_herv.bed delete mode 100644 assets/grch37_g1k_l1.bed delete mode 100644 assets/grch37_g1k_sva.bed delete mode 100644 assets/mobile_element_references.tsv diff --git a/CITATIONS.md b/CITATIONS.md index b20f58ac..f9973ae3 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -100,6 +100,10 @@ > Okonechnikov K, Conesa A, García-Alcalde F. Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data. Bioinformatics. 2016;32(2):292-294. doi:10.1093/bioinformatics/btv566 +- [RetroSeq](https://academic.oup.com/bioinformatics/article/29/3/389/257479) + + > Thomas M. Keane, Kim Wong, David J. Adams, RetroSeq: transposable element discovery from next-generation sequencing data. Bioinformatics.2013 Feb 1;29(3):389-90. doi: 10.1093/bioinformatics/bts697 + - [rhocall](https://github.com/dnil/rhocall) - [Sentieon DNAscope](https://www.biorxiv.org/content/10.1101/2022.05.20.492556v1.abstract) diff --git a/README.md b/README.md index 3c36427a..ff227da8 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,10 @@ On release, automated continuous integration tests run the pipeline on a full-si - [Expansion Hunter](https://github.com/Illumina/ExpansionHunter) - [Stranger](https://github.com/Clinical-Genomics/stranger) +**9. Variant calling - mobile elements:** + +- [RetroSeq](https://github.com/tk2/RetroSeq) + **9. Rank variants - SV and SNV:** - [GENMOD](https://github.com/Clinical-Genomics/genmod) diff --git a/assets/grch37_g1k_alu.bed b/assets/grch37_g1k_alu.bed deleted file mode 100644 index e69de29b..00000000 diff --git a/assets/grch37_g1k_herv.bed b/assets/grch37_g1k_herv.bed deleted file mode 100644 index e69de29b..00000000 diff --git a/assets/grch37_g1k_l1.bed b/assets/grch37_g1k_l1.bed deleted file mode 100644 index e69de29b..00000000 diff --git a/assets/grch37_g1k_sva.bed b/assets/grch37_g1k_sva.bed deleted file mode 100644 index e69de29b..00000000 diff --git a/assets/mobile_element_references.tsv b/assets/mobile_element_references.tsv deleted file mode 100644 index e5a804ff..00000000 --- a/assets/mobile_element_references.tsv +++ /dev/null @@ -1,5 +0,0 @@ -type path -L1 ./assets/grch37_g1k_l1.bed -SVA ./assets/grch37_g1k_sva.bed -ALU ./assets/grch37_g1k_alu.bed -HERV ./assets/grch37_g1k_herv.bed diff --git a/conf/test.config b/conf/test.config index e691a70d..d43f319b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -36,13 +36,13 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" + fai = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta.fai" 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" - // TODO: Update path for mobile element refs - mobile_element_references = "${projectDir}/assets/mobile_element_references.tsv" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 81a3dd12..dc99e145 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -36,13 +36,13 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" + fai = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta.fai" 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" - // TODO: Update path for mobile element refs - mobile_element_references = "${projectDir}/assets/mobile_element_references.tsv" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" 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/conf/test_sentieon.config b/conf/test_sentieon.config index 64618d12..aca4b755 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -31,11 +31,13 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" + fai = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta.fai" 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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" 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 5b0bb182..0ebf4e51 100644 --- a/main.nf +++ b/main.nf @@ -16,7 +16,6 @@ nextflow.enable.dsl = 2 GENOME PARAMETER VALUES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// TODO: Are the genome config used? params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fai = WorkflowMain.getGenomeAttribute(params, 'fai') params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 45432ae6..c77a11d9 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -3,13 +3,13 @@ // include { BCFTOOLS_REHEADER as BCFTOOLS_REHEADER_ME } from '../../modules/nf-core/bcftools/reheader/main' -include { BCFTOOLS_CONCAT as BCFTOOLS_CONCAT_ME } from '../../modules/nf-core/bcftools/concat/main' -include { BCFTOOLS_SORT as BCFTOOLS_SORT_ME } from '../../modules/nf-core/bcftools/sort/main' +include { BCFTOOLS_CONCAT as BCFTOOLS_CONCAT_ME } from '../../modules/nf-core/bcftools/concat/main' +include { BCFTOOLS_SORT as BCFTOOLS_SORT_ME } from '../../modules/nf-core/bcftools/sort/main' include { RETROSEQ_CALL as RETROSEQ_CALL } from '../../modules/local/retroseq/call/main' include { RETROSEQ_DISCOVER as RETROSEQ_DISCOVER } from '../../modules/local/retroseq/discover/main' include { SAMTOOLS_INDEX as ME_INDEX_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/index/main' include { SAMTOOLS_VIEW as ME_SPLIT_ALIGNMENT } from '../../modules/nf-core/samtools/view/main' -include { TABIX_TABIX as TABIX_ME } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_ME } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_ME_SPLIT } from '../../modules/nf-core/tabix/tabix/main' include { SVDB_MERGE as SVDB_MERGE_ME } from '../../modules/nf-core/svdb/merge/main' @@ -26,17 +26,10 @@ workflow CALL_MOBILE_ELEMENTS { main: ch_versions = Channel.empty() - // Building chromosome channel depending on genome version - // TODO: Check how retroseq behaves when running chrY on female samples - // TODO: Would be nicer to read in the fai or dict - Channel.of(1..22, 'X', 'Y') - .branch { it -> - grch37: val_genome_build.equals('GRCh37') - return [it.toString()] - grch38: val_genome_build.equals('GRCh38') - return ['chr' + it.toString()] - }.set{ ch_chr_genome } - ch_chr_genome.grch37.mix(ch_chr_genome.grch38) + // Building chromosome channels based on fasta index + ch_genome_fai + .splitCsv(sep: "\t", elem: 1, limit: 25) + .map { meta, fai -> [ fai.first() ] } .set { ch_chr } // Building one bam channel per chromosome and adding interval diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0016a154..5fafd6a7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -293,9 +293,7 @@ workflow RAREDISEASE { // SV caller priority if (params.skip_germlinecnvcaller) { - // TODO: Uncomment and remove - ch_svcaller_priority = Channel.value(["tiddit", "manta"]) - //ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) + ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) } else { ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) } @@ -356,14 +354,14 @@ workflow RAREDISEASE { // // EXPANSIONHUNTER AND STRANGER // - CALL_REPEAT_EXPANSIONS ( - ch_mapped.genome_bam_bai, - ch_variant_catalog, - ch_case_info, - ch_genome_fasta, - ch_genome_fai - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + //CALL_REPEAT_EXPANSIONS ( + // ch_mapped.genome_bam_bai, + // ch_variant_catalog, + // ch_case_info, + // ch_genome_fasta, + // ch_genome_fai + //) + //ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) // // SNV CALLING From 4bbb604114b628aa1239fc41f5236b0b1fd4e5a8 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 16:27:43 +0100 Subject: [PATCH 1504/1921] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff227da8..ebb4b95a 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - [RetroSeq](https://github.com/tk2/RetroSeq) -**9. Rank variants - SV and SNV:** +**10. Rank variants - SV and SNV:** - [GENMOD](https://github.com/Clinical-Genomics/genmod) From e50756fde73afd0ffdb7a84b2efd5c1cac2d21bd Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 16:29:39 +0100 Subject: [PATCH 1505/1921] uncommenting lines --- workflows/raredisease.nf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 5fafd6a7..cb23fe7d 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -354,14 +354,14 @@ workflow RAREDISEASE { // // EXPANSIONHUNTER AND STRANGER // - //CALL_REPEAT_EXPANSIONS ( - // ch_mapped.genome_bam_bai, - // ch_variant_catalog, - // ch_case_info, - // ch_genome_fasta, - // ch_genome_fai - //) - //ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + CALL_REPEAT_EXPANSIONS ( + ch_mapped.genome_bam_bai, + ch_variant_catalog, + ch_case_info, + ch_genome_fasta, + ch_genome_fai + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) // // SNV CALLING From e048f9f0976ced4521f36b4c2d0b8898ef4daa01 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Tue, 9 Jan 2024 16:30:55 +0100 Subject: [PATCH 1506/1921] Tabix prior to BCF view --- .../variant_calling/call_sv_germlinecnvcaller.nf | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index a9420a62..4e27b14c 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -7,6 +7,7 @@ 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' include { BCFTOOLS_VIEW } from '../../../modules/nf-core/bcftools/view/main' +include { TABIX_TABIX } from '../../../modules/nf-core/tabix/tabix/main' workflow CALL_SV_GERMLINECNVCALLER { take: @@ -48,13 +49,22 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_POSTPROCESSGERMLINECNVCALLS ( ch_postproc_in ) + // GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments.view() + + TABIX_TABIX(GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments) + TABIX_TABIX.out.tbi.view() + GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments + .join(TABIX_TABIX.out.tbi, failOnMismatch:true) + .set {ch_segments_in} + ch_segments_in.view() // Filter out reference only (0/0) segments - BCFTOOLS_VIEW ( GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments, [], [], [] ) + BCFTOOLS_VIEW (ch_segments_in , [], [], [] ) ch_versions = ch_versions.mix(GATK4_COLLECTREADCOUNTS.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) + ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) emit: From 9726f06cde5d0c892ea2a22565fdfd532e5d3b5b Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Tue, 9 Jan 2024 16:45:51 +0100 Subject: [PATCH 1507/1921] Fix BNFTOOLS filtering config --- conf/modules/call_sv_germlinecnvcaller.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index c41251ae..6685dc6c 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -38,7 +38,7 @@ process { ext.prefix = { "${meta.id}_${model.simpleName}" } } - withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_VIEW' { + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:BCFTOOLS_VIEW' { ext.prefix = { "${meta.id}_gatkcnv_segments_reffiltered" } ext.args = { '--output-type z --exclude "N_ALT = 0" ' } } From 8cacd8f99960acd6040ad0b6246a81083539ade5 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 16:54:40 +0100 Subject: [PATCH 1508/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce1a867b..6a0e09ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) - New workflow for generating cgh files from SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) - Fastp to do adapter trimming. It can be skipped using `--skip_fastp` [#457](https://github.com/nf-core/raredisease/pull/457) +- New workflow for calling insertion of mobile elements [#440](https://github.com/nf-core/raredisease/pull/440) ### `Changed` From db50a4ba1e3bf9e19ee6535793bb442476d5c72f Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 17:40:23 +0100 Subject: [PATCH 1509/1921] updating and removing patch for vcf2cytosure --- modules.json | 2 +- modules/nf-core/vcf2cytosure/environment.yml | 1 + modules/nf-core/vcf2cytosure/meta.yml | 4 +- .../nf-core/vcf2cytosure/tests/main.nf.test | 73 +++++++++++++++++++ .../vcf2cytosure/tests/main.nf.test.snap | 44 +++++++++++ modules/nf-core/vcf2cytosure/tests/tags.yml | 2 + .../nf-core/vcf2cytosure/vcf2cytosure.diff | 23 ------ 7 files changed, 123 insertions(+), 26 deletions(-) create mode 100644 modules/nf-core/vcf2cytosure/tests/main.nf.test create mode 100644 modules/nf-core/vcf2cytosure/tests/main.nf.test.snap create mode 100644 modules/nf-core/vcf2cytosure/tests/tags.yml delete mode 100644 modules/nf-core/vcf2cytosure/vcf2cytosure.diff diff --git a/modules.json b/modules.json index e0a92fa6..c98929d7 100644 --- a/modules.json +++ b/modules.json @@ -475,7 +475,7 @@ }, "vcf2cytosure": { "branch": "master", - "git_sha": "2dba354d7c0a43a1e6d6ce26f408b4936d4ed619", + "git_sha": "8694793954175ddd3001ddfbc0e36782a674d8a7", "installed_by": ["modules"], "patch": "modules/nf-core/vcf2cytosure/vcf2cytosure.diff" }, diff --git a/modules/nf-core/vcf2cytosure/environment.yml b/modules/nf-core/vcf2cytosure/environment.yml index 30e0542f..d4bf9959 100644 --- a/modules/nf-core/vcf2cytosure/environment.yml +++ b/modules/nf-core/vcf2cytosure/environment.yml @@ -1,3 +1,4 @@ +name: vcf2cytosure channels: - conda-forge - bioconda diff --git a/modules/nf-core/vcf2cytosure/meta.yml b/modules/nf-core/vcf2cytosure/meta.yml index 39badd4c..2430f1ae 100644 --- a/modules/nf-core/vcf2cytosure/meta.yml +++ b/modules/nf-core/vcf2cytosure/meta.yml @@ -13,7 +13,7 @@ tools: homepage: "https://github.com/NBISweden/vcf2cytosure" documentation: "https://github.com/NBISweden/vcf2cytosure" tool_dev_url: "https://github.com/NBISweden/vcf2cytosure" - licence: "['MIT']" + licence: ["MIT"] input: - meta: @@ -53,7 +53,7 @@ input: VCF file with SNVs to calculate probe coverage, not compatible with coverage_bed pattern: "*.{vcf,vcf.gz}" - - blacklilst_bed: + - blacklist_bed: type: file description: Bed file with regions to exclude pattern: "*.bed" diff --git a/modules/nf-core/vcf2cytosure/tests/main.nf.test b/modules/nf-core/vcf2cytosure/tests/main.nf.test new file mode 100644 index 00000000..d017cb0e --- /dev/null +++ b/modules/nf-core/vcf2cytosure/tests/main.nf.test @@ -0,0 +1,73 @@ +nextflow_process { + + name "Test Process VCF2CYTOSURE" + script "../main.nf" + process "VCF2CYTOSURE" + + tag "modules" + tag "modules_nfcore" + tag "vcf2cytosure" + + test("homo sapiens - vcf - bed") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_sv_vcf'], checkIfExists: true) ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_coverage'], checkIfExists: true) ] + ] + input[2] = [ [:], [] ] + input[3] = [ [:], [] ] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.cgh).match("cgh") }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("homo sapiens - vcf - bed - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_sv_vcf'], checkIfExists: true) ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_coverage'], checkIfExists: true) ] + ] + input[2] = [ [:], [] ] + input[3] = [ [:], [] ] + input[4] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.cgh).match("cgh - stub") }, + { assert snapshot(process.out.versions).match("versions - stub") } + ) + } + + } + +} diff --git a/modules/nf-core/vcf2cytosure/tests/main.nf.test.snap b/modules/nf-core/vcf2cytosure/tests/main.nf.test.snap new file mode 100644 index 00000000..0a0fae29 --- /dev/null +++ b/modules/nf-core/vcf2cytosure/tests/main.nf.test.snap @@ -0,0 +1,44 @@ +{ + "cgh": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.cgh:md5,fc3f1ffac5b797881d992994d5d56550" + ] + ] + ], + "timestamp": "2023-12-21T18:33:25.202806" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,a1850e66d57cee0b98adb056c1dc3ebb" + ] + ], + "timestamp": "2023-12-21T18:33:25.205826" + }, + "cgh - stub": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.cgh:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "timestamp": "2023-12-21T18:38:06.660655" + }, + "versions - stub": { + "content": [ + [ + "versions.yml:md5,a1850e66d57cee0b98adb056c1dc3ebb" + ] + ], + "timestamp": "2023-12-21T18:38:06.663571" + } +} \ No newline at end of file diff --git a/modules/nf-core/vcf2cytosure/tests/tags.yml b/modules/nf-core/vcf2cytosure/tests/tags.yml new file mode 100644 index 00000000..88ff6038 --- /dev/null +++ b/modules/nf-core/vcf2cytosure/tests/tags.yml @@ -0,0 +1,2 @@ +vcf2cytosure: + - "modules/nf-core/vcf2cytosure/**" diff --git a/modules/nf-core/vcf2cytosure/vcf2cytosure.diff b/modules/nf-core/vcf2cytosure/vcf2cytosure.diff deleted file mode 100644 index f80980da..00000000 --- a/modules/nf-core/vcf2cytosure/vcf2cytosure.diff +++ /dev/null @@ -1,23 +0,0 @@ -Changes in module 'nf-core/vcf2cytosure' ---- modules/nf-core/vcf2cytosure/main.nf -+++ modules/nf-core/vcf2cytosure/main.nf -@@ -12,7 +12,7 @@ - tuple val(meta2), path(coverage_bed) - tuple val(meta3), path(cns) - tuple val(meta4), path(snv_vcf) -- path blacklist_bed -+ path(blacklist_bed) - - output: - tuple val(meta), path("*.cgh"), emit: cgh -@@ -56,7 +56,7 @@ - def prefix = task.ext.prefix ?: "${meta.id}" - - """ -- touch ${prefix}.xml -+ touch ${prefix}.cgh - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - -************************************************************ From a68e499f403aa164b179239057ad6df784973dde Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 17:49:10 +0100 Subject: [PATCH 1510/1921] updating and removing patch for tiddit cov --- modules.json | 2 +- modules/nf-core/tiddit/cov/environment.yml | 7 + modules/nf-core/tiddit/cov/main.nf | 2 +- modules/nf-core/tiddit/cov/meta.yml | 7 +- modules/nf-core/tiddit/cov/tests/main.nf.test | 160 ++++++++++++++++++ .../tiddit/cov/tests/main.nf.test.snap | 74 ++++++++ .../nf-core/tiddit/cov/tests/nextflow.config | 8 + modules/nf-core/tiddit/cov/tests/tags.yml | 2 + modules/nf-core/tiddit/cov/tiddit-cov.diff | 26 --- 9 files changed, 257 insertions(+), 31 deletions(-) create mode 100644 modules/nf-core/tiddit/cov/environment.yml create mode 100644 modules/nf-core/tiddit/cov/tests/main.nf.test create mode 100644 modules/nf-core/tiddit/cov/tests/main.nf.test.snap create mode 100644 modules/nf-core/tiddit/cov/tests/nextflow.config create mode 100644 modules/nf-core/tiddit/cov/tests/tags.yml delete mode 100644 modules/nf-core/tiddit/cov/tiddit-cov.diff diff --git a/modules.json b/modules.json index c98929d7..ea3913c2 100644 --- a/modules.json +++ b/modules.json @@ -449,7 +449,7 @@ }, "tiddit/cov": { "branch": "master", - "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", + "git_sha": "ae07bd3d3e229ca82bd94531648736d44367a391", "installed_by": ["modules"], "patch": "modules/nf-core/tiddit/cov/tiddit-cov.diff" }, diff --git a/modules/nf-core/tiddit/cov/environment.yml b/modules/nf-core/tiddit/cov/environment.yml new file mode 100644 index 00000000..6b024492 --- /dev/null +++ b/modules/nf-core/tiddit/cov/environment.yml @@ -0,0 +1,7 @@ +name: tiddit_cov +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::tiddit=3.6.1 diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf index e8cafaa5..20d4720e 100644 --- a/modules/nf-core/tiddit/cov/main.nf +++ b/modules/nf-core/tiddit/cov/main.nf @@ -2,7 +2,7 @@ process TIDDIT_COV { tag "$meta.id" label 'process_low' - conda "bioconda::tiddit=3.6.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tiddit:3.6.1--py38h24c8ff8_0' : 'biocontainers/tiddit:3.6.1--py38h24c8ff8_0' }" diff --git a/modules/nf-core/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml index 9cc586a9..c28546cc 100644 --- a/modules/nf-core/tiddit/cov/meta.yml +++ b/modules/nf-core/tiddit/cov/meta.yml @@ -12,7 +12,6 @@ tools: documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md doi: "10.12688/f1000research.11168.1" licence: ["GPL v3"] - input: - meta: type: map @@ -34,7 +33,6 @@ input: Reference genome file. Only needed when passing in CRAM instead of BAM. If not using CRAM, please pass an empty file instead. pattern: "*.fasta" - output: - meta: type: map @@ -43,7 +41,7 @@ output: e.g. [ id:'test', single_end:false ] - cov: type: file - description: The coverage of different regions. Optional. + description: The coverage of different regions in bed format. Optional. pattern: "*.bed" - wig: type: file @@ -56,3 +54,6 @@ output: authors: - "@projectoriented" - "@ramprasadn" +maintainers: + - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/tiddit/cov/tests/main.nf.test b/modules/nf-core/tiddit/cov/tests/main.nf.test new file mode 100644 index 00000000..72746648 --- /dev/null +++ b/modules/nf-core/tiddit/cov/tests/main.nf.test @@ -0,0 +1,160 @@ +nextflow_process { + + name "Test Process TIDDIT_COV" + script "../main.nf" + process "TIDDIT_COV" + + tag "modules" + tag "modules_nfcore" + tag "tiddit" + tag "tiddit/cov" + + test("homo_sapiens - cram - bed") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + ] + + input[1] = [ + [:], // meta map + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.cov).match("cov") }, + { assert process.out.cov[0][1] ==~ ".*/test.bed" }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("homo_sapiens - bam - bed") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + input[1] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.cov).match("cov") }, + { assert process.out.cov[0][1] ==~ ".*/test.bed" }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("homo_sapiens - cram - wig") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + ] + + input[1] = [ + [:], // meta map + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.wig).match("wig") }, + { assert process.out.wig[0][1] ==~ ".*/test.wig" }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("homo_sapiens - bam - wig") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + + input[1] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.wig).match("wig") }, + { assert process.out.wig[0][1] ==~ ".*/test.wig" }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + + test("homo_sapiens - stub") { + + options "-stub" + + when { + process { + """ + + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + ] + + input[1] = [ + [:], // meta map + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.cov).match("cov - stub") }, + { assert process.out.cov[0][1] ==~ ".*/test.bed" }, + { assert snapshot(process.out.wig).match("wig - stub") }, + { assert process.out.wig[0][1] ==~ ".*/test.wig" }, + { assert snapshot(process.out.versions).match("versions - stub") } + ) + } + + } + +} diff --git a/modules/nf-core/tiddit/cov/tests/main.nf.test.snap b/modules/nf-core/tiddit/cov/tests/main.nf.test.snap new file mode 100644 index 00000000..dcd24edc --- /dev/null +++ b/modules/nf-core/tiddit/cov/tests/main.nf.test.snap @@ -0,0 +1,74 @@ +{ + "wig": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.wig:md5,7c46b6ef30574acdce0ad854f40126ae" + ] + ] + ], + "timestamp": "2023-12-22T11:24:06.649602" + }, + "wig - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "timestamp": "2023-12-22T11:30:00.831686" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" + ] + ], + "timestamp": "2023-12-22T11:23:58.227251" + }, + "cov": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,caf0742f2d4a6f713ceb85268dd48c14" + ] + ] + ], + "timestamp": "2023-12-22T11:23:58.220115" + }, + "versions - stub": { + "content": [ + [ + "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" + ] + ], + "timestamp": "2023-12-22T11:30:00.834854" + }, + "cov - stub": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "timestamp": "2023-12-22T11:30:00.826974" + } +} \ No newline at end of file diff --git a/modules/nf-core/tiddit/cov/tests/nextflow.config b/modules/nf-core/tiddit/cov/tests/nextflow.config new file mode 100644 index 00000000..f83bd699 --- /dev/null +++ b/modules/nf-core/tiddit/cov/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + + + withName: TIDDIT_COV { + ext.args = '-w' + } + +} diff --git a/modules/nf-core/tiddit/cov/tests/tags.yml b/modules/nf-core/tiddit/cov/tests/tags.yml new file mode 100644 index 00000000..d5831f1d --- /dev/null +++ b/modules/nf-core/tiddit/cov/tests/tags.yml @@ -0,0 +1,2 @@ +tiddit/cov: + - "modules/nf-core/tiddit/cov/**" diff --git a/modules/nf-core/tiddit/cov/tiddit-cov.diff b/modules/nf-core/tiddit/cov/tiddit-cov.diff deleted file mode 100644 index acf8216f..00000000 --- a/modules/nf-core/tiddit/cov/tiddit-cov.diff +++ /dev/null @@ -1,26 +0,0 @@ -Changes in module 'nf-core/tiddit/cov' ---- modules/nf-core/tiddit/cov/meta.yml -+++ modules/nf-core/tiddit/cov/meta.yml -@@ -44,7 +44,7 @@ - - cov: - type: file - description: The coverage of different regions. Optional. -- pattern: "*.tab" -+ pattern: "*.bed" - - wig: - type: file - description: The coverage of different regions in WIG format. Optional. - ---- modules/nf-core/tiddit/cov/main.nf -+++ modules/nf-core/tiddit/cov/main.nf -@@ -41,7 +41,7 @@ - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.wig -- touch ${prefix}.tab -+ touch ${prefix}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - -************************************************************ From 630b347348d26b3749a95e2e5e03c3eacea7f346 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 18:02:15 +0100 Subject: [PATCH 1511/1921] trigging rerun of ci - adding blank line --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce1a867b..3f03698a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## v1.2.0 - Genie [xxxx-xx-xx] + ### `Added` - Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) From 54a20a3ca5abf7d8d947cb2ea75ccc33c112632a Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 9 Jan 2024 18:04:18 +0100 Subject: [PATCH 1512/1921] trigging rerun of ci - removing blank line --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f03698a..ce1a867b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## v1.2.0 - Genie [xxxx-xx-xx] - ### `Added` - Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) From ec5bddc363ce4da24148a26b930447c54f149933 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Jan 2024 05:49:22 +0100 Subject: [PATCH 1513/1921] found in deepvariant --- assets/foundin.hdr | 1 + conf/modules/call_snv_deepvariant.config | 8 ++++ conf/test_one_sample.config | 1 + lib/WorkflowRaredisease.groovy | 14 ++++++ subworkflows/local/call_snv.nf | 4 +- .../variant_calling/call_snv_deepvariant.nf | 45 ++++++++++++++----- workflows/raredisease.nf | 2 + 7 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 assets/foundin.hdr diff --git a/assets/foundin.hdr b/assets/foundin.hdr new file mode 100644 index 00000000..9b38b87f --- /dev/null +++ b/assets/foundin.hdr @@ -0,0 +1 @@ +##INFO= diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index 329bc15f..fdd7ece6 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -39,4 +39,12 @@ process { ext.prefix = { "${meta.id}_split_rmdup" } } + withName: '.*CALL_SNV_DEEPVARIANT:ZIP_TABIX_VARCALLERBED' { + ext.args2 = '-s 1 -b 2 -e 3' + } + + withName: '.*CALL_SNV_DEEPVARIANT:BCFTOOLS_ANNOTATE' { + ext.args = "-c CHROM,FROM,TO,FOUND_IN --output-type z" + ext.prefix = { "${meta.id}_split_rmdup_info" } + } } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index f39cb40c..cb40d008 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -43,6 +43,7 @@ params { 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" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" + score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" 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" svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index f45fcc7c..b6b58af6 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -35,6 +35,20 @@ class WorkflowRaredisease { return outfile } + // + // Create a bed file which includes the name of variant caller from fai + // + public static String makeBedWithVariantCallerInfo(fai, parent_dir, varcaller) { + def outfile = new File(parent_dir + '/' + varcaller +'.bed') + def writer = outfile.newWriter() + fai.eachLine { line -> + def split_str = line.tokenize("\t") + writer << [split_str[0],"1",split_str[1],varcaller].join("\t") + "\n" + } + writer.close() + return outfile + } + // // Get workflow summary for MultiQC // diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 6413f896..fdcc4629 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -28,6 +28,7 @@ workflow CALL_SNV { ch_call_interval // channel: [mandatory] [ path(intervals) ] ch_ml_model // channel: [mandatory] [ path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_foundin_header // channel: [mandatory] [ path(header) ] ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] main: @@ -42,7 +43,8 @@ workflow CALL_SNV { ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, - ch_case_info + ch_case_info, + ch_foundin_header ) ch_deepvar_vcf = CALL_SNV_DEEPVARIANT.out.vcf ch_deepvar_tbi = CALL_SNV_DEEPVARIANT.out.tabix diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 8324aa35..197869b8 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -2,18 +2,22 @@ // A variant caller workflow for deepvariant // -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../../modules/nf-core/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../../modules/nf-core/bcftools/norm/main' -include { DEEPVARIANT } from '../../../modules/nf-core/deepvariant/main' -include { GLNEXUS } from '../../../modules/nf-core/glnexus/main' -include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../../modules/nf-core/bcftools/norm/main' +include { DEEPVARIANT } from '../../../modules/nf-core/deepvariant/main' +include { GLNEXUS } from '../../../modules/nf-core/glnexus/main' +include { TABIX_BGZIPTABIX as ZIP_TABIX_VARCALLERBED } from '../../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' workflow CALL_SNV_DEEPVARIANT { take: - 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) ] + 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) ] + ch_foundin_header // channel: [mandatory] [ path(header) ] main: ch_versions = Channel.empty() @@ -48,6 +52,25 @@ workflow CALL_SNV_DEEPVARIANT { TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) + ch_genome_fai.map{meta, fai -> + return [meta, WorkflowRaredisease.makeBedWithVariantCallerInfo(fai, fai.parent.toString(), "deepvariant")] + } + .set { ch_varcallerinfo } + + ZIP_TABIX_VARCALLERBED (ch_varcallerinfo).gz_tbi + .map{meta,bed,tbi -> return [bed, tbi]} + .set{ch_varcallerbed} + + REMOVE_DUPLICATES_GL.out.vcf + .join(TABIX_GL.out.tbi) + .combine(ch_varcallerbed) + .combine(ch_foundin_header) + .set { ch_annotate_in } + + BCFTOOLS_ANNOTATE(ch_annotate_in) + + TABIX_ANNOTATE(BCFTOOLS_ANNOTATE.out.vcf) + ch_versions = ch_versions.mix(DEEPVARIANT.out.versions.first()) ch_versions = ch_versions.mix(GLNEXUS.out.versions) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_GL.out.versions) @@ -55,7 +78,7 @@ workflow CALL_SNV_DEEPVARIANT { ch_versions = ch_versions.mix(TABIX_GL.out.versions) emit: - vcf = REMOVE_DUPLICATES_GL.out.vcf // channel: [ val(meta), path(vcf) ] - tabix = TABIX_GL.out.tbi // channel: [ val(meta), path(tbi) ] + vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c4183c93..203b3b5b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -220,6 +220,7 @@ 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_foundin_header = Channel.fromPath("$projectDir/assets/foundin.hdr", checkIfExists: true).collect() ch_gcnvcaller_model = params.gcnvcaller_model ? Channel.fromPath(params.gcnvcaller_model).splitCsv ( header:true ) .map { row -> return [[id:file(row.models).simpleName], row.models] @@ -380,6 +381,7 @@ workflow RAREDISEASE { ch_call_interval, ch_ml_model, ch_case_info, + ch_foundin_header, Channel.value(params.sentieon_dnascope_pcr_indel_model) ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) From 7157ec5f3289ecc727a52bd1b5b4f24ccbdcf7df Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Jan 2024 07:49:00 +0100 Subject: [PATCH 1514/1921] found in sentieon and mutect2 --- conf/modules/call_snv_sentieon.config | 9 ++++ conf/modules/postprocess_MT_calls.config | 11 +++- subworkflows/local/call_snv.nf | 6 ++- .../variant_calling/call_snv_deepvariant.nf | 3 ++ .../variant_calling/call_snv_sentieon.nf | 52 ++++++++++++++----- .../variant_calling/postprocess_MT_calls.nf | 36 +++++++++++-- 6 files changed, 96 insertions(+), 21 deletions(-) diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 3abcd31c..2337ef4f 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -48,5 +48,14 @@ process { ext.args = '--output-type z --rm-dup none' ext.prefix = { "${meta.id}_split_rmdup" } } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:ZIP_TABIX_VARCALLERBED' { + ext.args2 = '-s 1 -b 2 -e 3' + } + + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCFTOOLS_ANNOTATE' { + ext.args = "-c CHROM,FROM,TO,FOUND_IN --output-type z" + ext.prefix = { "${meta.id}_split_rmdup_info" } + } } } diff --git a/conf/modules/postprocess_MT_calls.config b/conf/modules/postprocess_MT_calls.config index c97ea43d..07e266de 100644 --- a/conf/modules/postprocess_MT_calls.config +++ b/conf/modules/postprocess_MT_calls.config @@ -37,6 +37,15 @@ process { withName: '.*POSTPROCESS_MT_CALLS:BCFTOOLS_MERGE_MT' { ext.args = '--output-type z' + ext.prefix = { "${meta.id}_split_rmdup_merged" } + } + + withName: '.*POSTPROCESS_MT_CALLS:ZIP_TABIX_VARCALLERBED' { + ext.args2 = '-s 1 -b 2 -e 3' + } + + withName: '.*POSTPROCESS_MT_CALLS:BCFTOOLS_ANNOTATE' { + ext.args = "-c CHROM,FROM,TO,FOUND_IN --output-type z" ext.prefix = { "${meta.id}_mitochondria" } publishDir = [ path: { "${params.outdir}/call_snv/mitochondria" }, @@ -45,7 +54,7 @@ process { ] } - withName: '.*POSTPROCESS_MT_CALLS:TABIX_TABIX_MERGE' { + withName: '.*POSTPROCESS_MT_CALLS:TABIX_ANNOTATE' { publishDir = [ path: { "${params.outdir}/call_snv/mitochondria" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index fdcc4629..0f646461 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -59,7 +59,8 @@ workflow CALL_SNV { ch_call_interval, ch_ml_model, ch_case_info, - ch_pcr_indel_model + ch_pcr_indel_model, + ch_foundin_header ) ch_sentieon_vcf = CALL_SNV_SENTIEON.out.vcf ch_sentieon_tbi = CALL_SNV_SENTIEON.out.tabix @@ -102,7 +103,8 @@ workflow CALL_SNV { ch_genome_dictionary, ch_genome_fai, ch_mtshift_backchain, - ch_case_info + ch_case_info, + ch_foundin_header ) ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 197869b8..6ffea594 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -76,6 +76,9 @@ workflow CALL_SNV_DEEPVARIANT { ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_GL.out.versions) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_GL.out.versions) ch_versions = ch_versions.mix(TABIX_GL.out.versions) + ch_versions = ch_versions.mix(ZIP_TABIX_VARCALLERBED.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) + ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) emit: vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index a9f5d4f8..bccc830a 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -2,15 +2,18 @@ // A subworkflow to call SNVs by sentieon dnascope with a machine learning model. // -include { SENTIEON_DNASCOPE } from '../../../modules/nf-core/sentieon/dnascope/main' -include { SENTIEON_DNAMODELAPPLY } from '../../../modules/nf-core/sentieon/dnamodelapply/main' -include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge/main' -include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' -include { BCFTOOLS_NORM as REMOVE_DUPLICATES_SEN } from '../../../modules/nf-core/bcftools/norm/main' -include { TABIX_TABIX as TABIX_SEN } from '../../../modules/nf-core/tabix/tabix/main' -include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../../modules/nf-core/tabix/tabix/main' -include { BCFTOOLS_FILTER as BCF_FILTER_ONE } from '../../../modules/nf-core/bcftools/filter/main' -include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-core/bcftools/filter/main' +include { SENTIEON_DNASCOPE } from '../../../modules/nf-core/sentieon/dnascope/main' +include { SENTIEON_DNAMODELAPPLY } from '../../../modules/nf-core/sentieon/dnamodelapply/main' +include { BCFTOOLS_MERGE } from '../../../modules/nf-core/bcftools/merge/main' +include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_SEN } from '../../../modules/nf-core/bcftools/norm/main' +include { BCFTOOLS_NORM as REMOVE_DUPLICATES_SEN } from '../../../modules/nf-core/bcftools/norm/main' +include { TABIX_TABIX as TABIX_SEN } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_BCFTOOLS } from '../../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_FILTER as BCF_FILTER_ONE } from '../../../modules/nf-core/bcftools/filter/main' +include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-core/bcftools/filter/main' +include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' +include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_BGZIPTABIX as ZIP_TABIX_VARCALLERBED } from '../../../modules/nf-core/tabix/bgziptabix/main' workflow CALL_SNV_SENTIEON { take: @@ -23,7 +26,8 @@ workflow CALL_SNV_SENTIEON { ch_ml_model // channel: [mandatory] [ val(meta), path(model) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] - + ch_foundin_header // channel: [mandatory] [ path(header) ] + main: ch_versions = Channel.empty() @@ -85,6 +89,25 @@ workflow CALL_SNV_SENTIEON { TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) + ch_genome_fai.map{meta, fai -> + return [meta, WorkflowRaredisease.makeBedWithVariantCallerInfo(fai, fai.parent.toString(), "sentieon")] + } + .set { ch_varcallerinfo } + + ZIP_TABIX_VARCALLERBED (ch_varcallerinfo).gz_tbi + .map{meta,bed,tbi -> return [bed, tbi]} + .set{ch_varcallerbed} + + REMOVE_DUPLICATES_SEN.out.vcf + .join(TABIX_SEN.out.tbi) + .combine(ch_varcallerbed) + .combine(ch_foundin_header) + .set { ch_annotate_in } + + BCFTOOLS_ANNOTATE(ch_annotate_in) + + TABIX_ANNOTATE(BCFTOOLS_ANNOTATE.out.vcf) + ch_versions = ch_versions.mix(SENTIEON_DNASCOPE.out.versions.first()) ch_versions = ch_versions.mix(SENTIEON_DNAMODELAPPLY.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_MERGE.out.versions.first()) @@ -92,9 +115,12 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) ch_versions = ch_versions.mix(TABIX_SEN.out.versions.first()) ch_versions = ch_versions.mix(BCF_FILTER_ONE.out.versions.first()) + ch_versions = ch_versions.mix(ZIP_TABIX_VARCALLERBED.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) + ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) emit: - vcf = REMOVE_DUPLICATES_SEN.out.vcf // channel: [ val(meta), path(vcf) ] - tabix = TABIX_SEN.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index cb14c9b7..304d8bd4 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -11,6 +11,9 @@ include { TABIX_TABIX as TABIX_TABIX_MT2 } from '../../.. 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 { PICARD_LIFTOVERVCF } from '../../../modules/nf-core/picard/liftovervcf/main' +include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' +include { TABIX_BGZIPTABIX as ZIP_TABIX_VARCALLERBED } from '../../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' workflow POSTPROCESS_MT_CALLS { take: @@ -21,6 +24,7 @@ workflow POSTPROCESS_MT_CALLS { ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_mtshift_backchain // channel: [mandatory] [ val(meta), path(backchain) ] ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_foundin_header // channel: [mandatory] [ path(header) ] main: ch_versions = Channel.empty() @@ -93,9 +97,28 @@ workflow POSTPROCESS_MT_CALLS { BCFTOOLS_MERGE_MT.out.merged_variants .mix(ch_case_vcf.single) - .set { ch_annotation_in } + .set { ch_addfoundintag_in } - TABIX_TABIX_MERGE(ch_annotation_in) + TABIX_TABIX_MERGE(ch_addfoundintag_in) + + ch_genome_fai.map{meta, fai -> + return [meta, WorkflowRaredisease.makeBedWithVariantCallerInfo(fai, fai.parent.toString(), "mutect2")] + } + .set { ch_varcallerinfo } + + ZIP_TABIX_VARCALLERBED (ch_varcallerinfo).gz_tbi + .map{meta,bed,tbi -> return [bed, tbi]} + .set{ch_varcallerbed} + + ch_addfoundintag_in + .join(TABIX_TABIX_MERGE.out.tbi) + .combine(ch_varcallerbed) + .combine(ch_foundin_header) + .set { ch_annotate_in } + + BCFTOOLS_ANNOTATE(ch_annotate_in) + + TABIX_ANNOTATE(BCFTOOLS_ANNOTATE.out.vcf) ch_versions = ch_versions.mix(PICARD_LIFTOVERVCF.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.versions.first()) @@ -103,9 +126,12 @@ workflow POSTPROCESS_MT_CALLS { 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(ZIP_TABIX_VARCALLERBED.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) + ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) emit: - vcf = ch_annotation_in // channel: [ val(meta), path(vcf) ] - tbi = TABIX_TABIX_MERGE.out.tbi // 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) ] } From 9f36e558939608b971b0eca1d42ae86a8d246ce3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Jan 2024 08:23:36 +0100 Subject: [PATCH 1515/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce1a867b..303d8c07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) - New workflow for generating cgh files from SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) - Fastp to do adapter trimming. It can be skipped using `--skip_fastp` [#457](https://github.com/nf-core/raredisease/pull/457) +- Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471](https://github.com/nf-core/raredisease/pull/471) ### `Changed` From 084d23228888e5927e9af1ab2e2519c931c93e62 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Wed, 10 Jan 2024 08:44:58 +0100 Subject: [PATCH 1516/1921] Cleanup --- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 4 ---- 1 file changed, 4 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 4e27b14c..5e4347c3 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -49,14 +49,10 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_POSTPROCESSGERMLINECNVCALLS ( ch_postproc_in ) - // GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments.view() - TABIX_TABIX(GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments) - TABIX_TABIX.out.tbi.view() GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments .join(TABIX_TABIX.out.tbi, failOnMismatch:true) .set {ch_segments_in} - ch_segments_in.view() // Filter out reference only (0/0) segments BCFTOOLS_VIEW (ch_segments_in , [], [], [] ) From 5972088a0bcfb0aa3b9251d1b3ae099646ed7838 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Wed, 10 Jan 2024 08:59:55 +0100 Subject: [PATCH 1517/1921] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce1a867b..da62b9db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) - New workflow for generating cgh files from SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) - Fastp to do adapter trimming. It can be skipped using `--skip_fastp` [#457](https://github.com/nf-core/raredisease/pull/457) +- GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled ### `Changed` From 938591d547701a2b93d58d435e978f94a4200ae1 Mon Sep 17 00:00:00 2001 From: Jakob Willforss Date: Wed, 10 Jan 2024 09:08:09 +0100 Subject: [PATCH 1518/1921] Correct documented suffixes in output data --- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 5e4347c3..ef2cf71e 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -64,10 +64,10 @@ workflow CALL_SV_GERMLINECNVCALLER { ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) emit: - 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) ] - genotyped_filtered_segments_vcf = BCFTOOLS_VIEW.out.vcf // channel: [ val(meta), path(*.tar.gz) ] - denoised_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.denoised // channel: [ val(meta), path(*.tar.gz) ] + genotyped_intervals_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.intervals // channel: [ val(meta), path(*.vcf.gz) ] + genotyped_segments_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments // channel: [ val(meta), path(*.vcf.gz) ] + genotyped_filtered_segments_vcf = BCFTOOLS_VIEW.out.vcf // channel: [ val(meta), path(*.vcf.gz) ] + denoised_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.denoised // channel: [ val(meta), path(*.vcf.gz) ] versions = ch_versions // channel: [ versions.yml ] } From 7d413889c8f47a52b6a7eab240ecfa4690599d61 Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 10 Jan 2024 13:48:54 +0100 Subject: [PATCH 1519/1921] removing reference to patch in modules.json --- modules.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index ea3913c2..0f435238 100644 --- a/modules.json +++ b/modules.json @@ -450,8 +450,7 @@ "tiddit/cov": { "branch": "master", "git_sha": "ae07bd3d3e229ca82bd94531648736d44367a391", - "installed_by": ["modules"], - "patch": "modules/nf-core/tiddit/cov/tiddit-cov.diff" + "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", @@ -476,8 +475,7 @@ "vcf2cytosure": { "branch": "master", "git_sha": "8694793954175ddd3001ddfbc0e36782a674d8a7", - "installed_by": ["modules"], - "patch": "modules/nf-core/vcf2cytosure/vcf2cytosure.diff" + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", From 9bfc4c74edd074bede0c755eb5a2fb051c6030be Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:36:35 +0100 Subject: [PATCH 1520/1921] add bwa mem --- modules/nf-core/bwa/mem/environment.yml | 9 + modules/nf-core/bwa/mem/main.nf | 55 ++++++ modules/nf-core/bwa/mem/meta.yml | 58 ++++++ modules/nf-core/bwa/mem/tests/main.nf.test | 172 ++++++++++++++++++ .../nf-core/bwa/mem/tests/main.nf.test.snap | 126 +++++++++++++ modules/nf-core/bwa/mem/tests/tags.yml | 3 + 6 files changed, 423 insertions(+) create mode 100644 modules/nf-core/bwa/mem/environment.yml create mode 100644 modules/nf-core/bwa/mem/main.nf create mode 100644 modules/nf-core/bwa/mem/meta.yml create mode 100644 modules/nf-core/bwa/mem/tests/main.nf.test create mode 100644 modules/nf-core/bwa/mem/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwa/mem/tests/tags.yml diff --git a/modules/nf-core/bwa/mem/environment.yml b/modules/nf-core/bwa/mem/environment.yml new file mode 100644 index 00000000..c5b2a9ce --- /dev/null +++ b/modules/nf-core/bwa/mem/environment.yml @@ -0,0 +1,9 @@ +name: bwa_mem +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bwa=0.7.17 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.18 diff --git a/modules/nf-core/bwa/mem/main.nf b/modules/nf-core/bwa/mem/main.nf new file mode 100644 index 00000000..a3a82994 --- /dev/null +++ b/modules/nf-core/bwa/mem/main.nf @@ -0,0 +1,55 @@ +process BWA_MEM { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' : + 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' }" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + val sort_bam + + output: + tuple val(meta), path("*.bam"), emit: bam + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` + + bwa mem \\ + $args \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + | samtools $samtools_command $args2 --threads $task.cpus -o ${prefix}.bam - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//') + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwa/mem/meta.yml b/modules/nf-core/bwa/mem/meta.yml new file mode 100644 index 00000000..440fb1f9 --- /dev/null +++ b/modules/nf-core/bwa/mem/meta.yml @@ -0,0 +1,58 @@ +name: bwa_mem +description: Performs fastq alignment to a fasta reference using BWA +keywords: + - mem + - bwa + - alignment + - map + - fastq + - bam + - sam +tools: + - bwa: + description: | + BWA is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: http://bio-bwa.sourceforge.net/ + documentation: http://www.htslib.org/doc/samtools.html + arxiv: arXiv:1303.3997 + licence: ["GPL-3.0-or-later"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" +output: + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@jeremy1805" +maintainers: + - "@drpatelh" + - "@jeremy1805" diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test new file mode 100644 index 00000000..b199bb70 --- /dev/null +++ b/modules/nf-core/bwa/mem/tests/main.nf.test @@ -0,0 +1,172 @@ +nextflow_process { + + name "Test Process BWA_MEM" + tag "modules_nfcore" + tag "modules" + tag "bwa" + tag "bwa/mem" + script "../main.nf" + process "BWA_MEM" + + test("Single-End") { + + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWA_INDEX.out.index + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Single-End Sort") { + + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWA_INDEX.out.index + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Paired-End") { + + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWA_INDEX.out.index + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Paired-End Sort") { + + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWA_INDEX.out.index + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap new file mode 100644 index 00000000..bfb55fc7 --- /dev/null +++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap @@ -0,0 +1,126 @@ +{ + "Single-End": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,df203d7c7e8fef351408a909570c7952" + ] + ], + "1": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,df203d7c7e8fef351408a909570c7952" + ] + ], + "versions": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ] + } + ], + "timestamp": "2023-12-04T11:01:22.483594641" + }, + "Single-End Sort": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,8a52bd78fdcecb994c1f63897d5b431c" + ] + ], + "1": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,8a52bd78fdcecb994c1f63897d5b431c" + ] + ], + "versions": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ] + } + ], + "timestamp": "2023-12-04T11:01:30.180783483" + }, + "Paired-End": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,9815aef9ec763a60c53c3879be2d73ae" + ] + ], + "1": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,9815aef9ec763a60c53c3879be2d73ae" + ] + ], + "versions": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ] + } + ], + "timestamp": "2023-12-04T11:01:38.761983007" + }, + "Paired-End Sort": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,0f0cda73704c4f7ba08af482edcbbe88" + ] + ], + "1": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,0f0cda73704c4f7ba08af482edcbbe88" + ] + ], + "versions": [ + "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + ] + } + ], + "timestamp": "2023-12-04T11:01:46.284587802" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwa/mem/tests/tags.yml b/modules/nf-core/bwa/mem/tests/tags.yml new file mode 100644 index 00000000..82992d1f --- /dev/null +++ b/modules/nf-core/bwa/mem/tests/tags.yml @@ -0,0 +1,3 @@ +bwa/mem: + - modules/nf-core/bwa/index/** + - modules/nf-core/bwa/mem/** From 9c178a1a51cf5046a503fdb60f560f5371d8c79c Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Wed, 10 Jan 2024 16:51:24 +0100 Subject: [PATCH 1521/1921] bring back a few lines that was commented out --- subworkflows/local/call_structural_variants.nf | 11 +++++------ workflows/raredisease.nf | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 0007e251..ad45dc29 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -53,11 +53,10 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) } - // Uncomment - //CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) - // .vcf - // .collect{it[1]} - // .set { cnvnator_vcf } + CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) + .vcf + .collect{it[1]} + .set { cnvnator_vcf } CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) @@ -65,7 +64,7 @@ workflow CALL_STRUCTURAL_VARIANTS { if (params.skip_germlinecnvcaller) { tiddit_vcf .combine(manta_vcf) - // .combine(cnvnator_vcf) + .combine(cnvnator_vcf) .toList() .set { vcf_list } } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index cb23fe7d..76e37e47 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -242,7 +242,6 @@ workflow RAREDISEASE { : Channel.empty() ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() : Channel.empty() - //ch_me_references = params.mobile_element_references ? Channel.fromPath(params.mobile_element_references) ch_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") : Channel.empty() ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() From 30c8b8311dc1a96b80f18327952f85d2cc610e4d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Jan 2024 07:44:10 +0100 Subject: [PATCH 1522/1921] add bwa --- conf/modules/align_MT.config | 17 +++++++ ...wamem2.config => align_bwa_bwamem2.config} | 46 +++++++++++++++++-- conf/modules/convert_mt_bam_to_fastq.config | 1 + conf/modules/prepare_references.config | 6 ++- modules.json | 5 ++ nextflow.config | 2 +- nextflow_schema.json | 2 +- subworkflows/local/align.nf | 15 +++--- subworkflows/local/alignment/align_MT.nf | 9 +++- ...{align_bwamem2.nf => align_bwa_bwamem2.nf} | 21 ++++++--- subworkflows/local/prepare_references.nf | 6 ++- 11 files changed, 106 insertions(+), 24 deletions(-) rename conf/modules/{align_bwamem2.config => align_bwa_bwamem2.config} (51%) rename subworkflows/local/alignment/{align_bwamem2.nf => align_bwa_bwamem2.nf} (79%) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index 23ab1c8c..79c4e8d3 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -25,6 +25,14 @@ process { } } + if (params.aligner.equals("bwa")) { + withName: '.*ALIGN_MT:BWA_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}.sorted" } + } + } + if (params.aligner.equals("sentieon")) { withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } @@ -81,6 +89,15 @@ process { } } + + if (params.aligner.equals("bwa")) { + withName: '.*ALIGN_MT_SHIFT:BWA_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}.sorted" } + } + } + withName: '.*ALIGN_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged_shifted" } diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwa_bwamem2.config similarity index 51% rename from conf/modules/align_bwamem2.config rename to conf/modules/align_bwa_bwamem2.config index ba92f738..2ef55d8d 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -18,20 +18,21 @@ process { if (params.aligner.equals("bwamem2")) { - withName: '.*ALIGN:ALIGN_BWAMEM2:BWAMEM2_MEM' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}.sorted" } + ext.when = { params.aligner.equals("bwamem2")} } - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_STATS' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { ext.args = '-s --remove-overlaps' } - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_MERGE' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_MERGE' { ext.prefix = { "${meta.id}_sorted_merged" } } - withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:MARKDUPLICATES' { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ enabled: !params.save_mapped_as_cram, @@ -41,7 +42,42 @@ process { ] } - withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_INDEX_MARKDUP' { + withName: '.*ALIGN:ALIGN_BWA_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 } + ] + } + } + if (params.aligner.equals("bwa")) { + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.prefix = { "${meta.id}.sorted" } + ext.when = { params.aligner.equals("bwa")} + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { + ext.args = '-s --remove-overlaps' + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_MERGE' { + ext.prefix = { "${meta.id}_sorted_merged" } + } + + withName: '.*ALIGN:ALIGN_BWA_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 } + ] + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_INDEX_MARKDUP' { publishDir = [ enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config index 0365c452..07fb8177 100644 --- a/conf/modules/convert_mt_bam_to_fastq.config +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -19,6 +19,7 @@ process { withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { beforeScript = {"mkdir ./tmp"} + ext.prefix = { "${meta.id}.printreads" } ext.args = [ "-L ${params.mito_name}", "--read-filter MateOnSameContigOrNoMappedMateReadFilter", diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 101824ef..39a0a807 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -41,8 +41,12 @@ process { ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon"} } + withName: '.*PREPARE_REFERENCES:BWA_INDEX_MT_SHIFT' { + ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwa"} + } + withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { - ext.when = {!params.bwa && !(params.aligner == "sentieon")} + ext.when = {!params.bwa && (!(params.aligner == "sentieon") || params.aligner == "bwa")} } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { diff --git a/modules.json b/modules.json index e0a92fa6..049d09e5 100644 --- a/modules.json +++ b/modules.json @@ -55,6 +55,11 @@ "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, + "bwa/mem": { + "branch": "master", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "installed_by": ["modules"] + }, "bwamem2/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/nextflow.config b/nextflow.config index e65b343d..d19410d5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -317,7 +317,7 @@ includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' includeConfig 'conf/modules/align_MT.config' -includeConfig 'conf/modules/align_bwamem2.config' +includeConfig 'conf/modules/align_bwa_bwamem2.config' includeConfig 'conf/modules/align_sentieon.config' includeConfig 'conf/modules/annotate_cadd.config' includeConfig 'conf/modules/call_snv_MT.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 07988ec3..0801c5c1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -476,7 +476,7 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-align-center", - "enum": ["bwamem2", "sentieon"] + "enum": ["bwa", "bwamem2", "sentieon"] }, "min_trimmed_length": { "type": "integer", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index e7240f2c..51bbf3fb 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -3,7 +3,7 @@ // include { FASTP } from '../../modules/nf-core/fastp/main' -include { ALIGN_BWAMEM2 } from './alignment/align_bwamem2' +include { ALIGN_BWA_BWAMEM2 } from './alignment/align_bwa_bwamem2' include { ALIGN_SENTIEON } from './alignment/align_sentieon' include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' include { ALIGN_MT } from './alignment/align_MT' @@ -39,18 +39,19 @@ workflow ALIGN { ch_versions = ch_versions.mix(FASTP.out.versions) ch_fastp_json = FASTP.out.json } - - if (params.aligner.equals("bwamem2")) { - ALIGN_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 + + if (params.aligner.equals("bwamem2") || params.aligner.equals("bwa")) { + ALIGN_BWA_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 or bwa ch_reads, + ch_genome_bwaindex, ch_genome_bwamem2index, ch_genome_fasta, ch_genome_fai, val_platform ) - ch_bwamem2_bam = ALIGN_BWAMEM2.out.marked_bam - ch_bwamem2_bai = ALIGN_BWAMEM2.out.marked_bai - ch_versions = ch_versions.mix(ALIGN_BWAMEM2.out.versions) + ch_bwamem2_bam = ALIGN_BWA_BWAMEM2.out.marked_bam + ch_bwamem2_bai = ALIGN_BWA_BWAMEM2.out.marked_bai + ch_versions = ch_versions.mix(ALIGN_BWA_BWAMEM2.out.versions) } else if (params.aligner.equals("sentieon")) { ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon ch_reads, diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 29903c72..8f7930c7 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -2,6 +2,7 @@ // Align MT // +include { BWA_MEM as BWA_MEM_MT } from '../../../modules/nf-core/bwa/mem/main' include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' @@ -22,6 +23,7 @@ workflow ALIGN_MT { main: ch_versions = Channel.empty() + ch_bwa_bam = Channel.empty() ch_bwamem2_bam = Channel.empty() ch_sentieon_bam = Channel.empty() @@ -33,10 +35,13 @@ workflow ALIGN_MT { SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) ch_sentieon_bam = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) + } else if (params.aligner.equals("bwa")) { + BWA_MEM_MT ( ch_fastq, ch_bwaindex, true ) + ch_bwa_bam = BWA_MEM_MT.out.bam + ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) } - Channel.empty() - .mix(ch_bwamem2_bam, ch_sentieon_bam) + .mix(ch_bwamem2_bam, ch_sentieon_bam, ch_bwa_bam) .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) .set {ch_bam_ubam} diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf similarity index 79% rename from subworkflows/local/alignment/align_bwamem2.nf rename to subworkflows/local/alignment/align_bwa_bwamem2.nf index 75bd723e..10537898 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -2,6 +2,7 @@ // Map to reference, fetch stats for each demultiplexed read pair, merge, mark duplicates, and index. // +include { BWA_MEM } from '../../../modules/nf-core/bwa/mem/main' include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_ALIGN } from '../../../modules/nf-core/samtools/index/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MARKDUP } from '../../../modules/nf-core/samtools/index/main' @@ -10,9 +11,10 @@ include { SAMTOOLS_MERGE } from '../../../modules/nf-c include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' -workflow ALIGN_BWAMEM2 { +workflow ALIGN_BWA_BWAMEM2 { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] 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) ] @@ -22,16 +24,24 @@ workflow ALIGN_BWAMEM2 { ch_versions = Channel.empty() // Map, sort, and index - BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) + if (params.aligner.equals("bwa")) { + BWA_MEM ( ch_reads_input, ch_bwa_index, true ) + ch_align = BWA_MEM.out.bam + ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) + } else { + BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) + ch_align = BWAMEM2_MEM.out.bam + ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + } - SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) + SAMTOOLS_INDEX_ALIGN ( ch_align ) // Get stats for each demultiplexed read pair. - bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai, failOnMismatch:true, failOnDuplicate:true) + bam_sorted_indexed = ch_align.join(SAMTOOLS_INDEX_ALIGN.out.bai, failOnMismatch:true, failOnDuplicate:true) SAMTOOLS_STATS ( bam_sorted_indexed, [[],[]] ) // Merge multiple lane samples and index - BWAMEM2_MEM.out.bam + ch_align .map{ meta, bam -> new_id = meta.sample new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] @@ -52,7 +62,6 @@ workflow ALIGN_BWAMEM2 { 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()) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_ALIGN.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_MERGE.out.versions.first()) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 9752b3f3..0e56251c 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -3,6 +3,7 @@ // include { BWA_INDEX as BWA_INDEX_GENOME } from '../../modules/nf-core/bwa/index/main' +include { BWA_INDEX as BWA_INDEX_MT_SHIFT } from '../../modules/nf-core/bwa/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_MT_SHIFT } from '../../modules/nf-core/bwamem2/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' @@ -58,7 +59,9 @@ workflow PREPARE_REFERENCES { GATK_SD_MT_SHIFT(ch_mt_fasta_in) 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) + BWA_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) SENTIEON_BWAINDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) + ch_bwa_mtshift = Channel.empty().mix(SENTIEON_BWAINDEX_MT_SHIFT.out.index, BWA_INDEX_MT_SHIFT.out.index).collect() GATK_SHIFTFASTA.out.intervals .multiMap{ meta, files -> shift_intervals: @@ -106,6 +109,7 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(GATK_SD_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(GATK_SHIFTFASTA.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_MT_SHIFT.out.versions) + ch_versions = ch_versions.mix(BWA_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) ch_versions = ch_versions.mix(TABIX_PT.out.versions) @@ -132,7 +136,7 @@ workflow PREPARE_REFERENCES { 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_bwa_index = ch_bwa_mtshift // 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) ] From 88a8e4634feed8d4b2090f4e24652e94e50afee5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Jan 2024 08:06:32 +0100 Subject: [PATCH 1523/1921] update config --- conf/modules/convert_mt_bam_to_fastq.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config index 07fb8177..0365c452 100644 --- a/conf/modules/convert_mt_bam_to_fastq.config +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -19,7 +19,6 @@ process { withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { beforeScript = {"mkdir ./tmp"} - ext.prefix = { "${meta.id}.printreads" } ext.args = [ "-L ${params.mito_name}", "--read-filter MateOnSameContigOrNoMappedMateReadFilter", From b0d1f1faff77028490ff145ff2027cd71faa4d36 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Jan 2024 08:42:32 +0100 Subject: [PATCH 1524/1921] update docs --- CHANGELOG.md | 3 ++- README.md | 1 + docs/output.md | 9 +++++++-- docs/usage.md | 39 ++++++++++++++++++++------------------- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da62b9db..2e2e9792 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) - New workflow for generating cgh files from SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) - Fastp to do adapter trimming. It can be skipped using `--skip_fastp` [#457](https://github.com/nf-core/raredisease/pull/457) -- GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled +- GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled [#472](https://github.com/nf-core/raredisease/pull/472) +- bwa aligner [#474](https://github.com/nf-core/raredisease/pull/474) ### `Changed` diff --git a/README.md b/README.md index 3c36427a..2e37233f 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ On release, automated continuous integration tests run the pipeline on a full-si **2. Alignment:** - [Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) +- [BWA](https://github.com/lh3/bwa) - [Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) **3. Variant calling - SNV:** diff --git a/docs/output.md b/docs/output.md index 53460628..c80c7a79 100644 --- a/docs/output.md +++ b/docs/output.md @@ -16,6 +16,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Alignment](#alignment) - [Mapping](#mapping) - [Bwa-mem2](#bwa-mem2) + - [BWA](#bwa) - [Sentieon bwa mem](#sentieon-bwa-mem) - [Duplicate marking](#duplicate-marking) - [Picard's MarkDuplicates](#picards-markduplicates) @@ -74,15 +75,19 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) used to map the reads to a reference genome. The aligned reads are coordinate sorted with samtools sort. These files are treated as intermediates and are not placed in the output folder by default. +##### BWA + +[BWA](https://github.com/lh3/bwa) used to map the reads to a reference genome. The aligned reads are coordinate sorted with samtools sort. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to bwa. + ##### Sentieon bwa mem -[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen over bwamem2 by setting `--aligner` option to sentieon. +[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to sentieon. #### Duplicate marking ##### 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. 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. +[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 and bwa 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 diff --git a/docs/usage.md b/docs/usage.md index b4b500ce..b84b0978 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,20 +10,20 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -129,11 +129,11 @@ Do not use `-c ` to specify parameters as this will result in errors. Cust The above pipeline run specified with a params file in yaml format: -Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools. For example, you can align with either bwamem2 or Sentieon BWA mem and call SNVs with either DeepVariant or Sentieon DNAscope. You also have the option to turn off sections of the pipeline if you do not want to run the. For example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file. This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by Sentieon DNAscope. +Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools. For example, you can align with bwamem2 or bwa or Sentieon BWA mem and call SNVs with either DeepVariant or Sentieon DNAscope. You also have the option to turn off sections of the pipeline if you do not want to run the. For example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file. This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by Sentieon DNAscope. nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following categories: -1. Alignment (bwamem2/Sentieon BWA mem) +1. Alignment (bwamem2/bwa/Sentieon BWA mem) 2. QC stats from the alignment files 3. Repeat expansions (ExpansionsHunter & Stranger) 4. Variant calling - SNV (DeepVariant/Sentieon DNAscope) @@ -155,13 +155,14 @@ The mandatory and optional parameters for each category are tabulated below. | ------------------------------ | ------------------------------ | | aligner1 | fasta_fai3 | | fasta | bwamem23 | -| platform | known_dbsnp4 | -| mito_name/mt_fasta2 | known_dbsnp_tbi4 | +| platform | bwa3 | +| mito_name/mt_fasta2 | known_dbsnp4 | +| | known_dbsnp_tbi4 | | | min_trimmed_length5 | 1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
2f If mito_name is provided, mt_fasta can be generated by the pipeline.
-3fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
+3fasta_fai, bwa, and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
4Used only by Sentieon.
5Default value is 40. Used only by fastp.
From 0d24dbf2bef82a771c4fd061e0f28e879c47a7da Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Jan 2024 08:47:06 +0100 Subject: [PATCH 1525/1921] fix lint --- docs/usage.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index b84b0978..65421c3c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,20 +10,20 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From 0809a4083e7f7e28ff2476a639f7bd0f73aa46ce Mon Sep 17 00:00:00 2001 From: Alexander Koc Date: Thu, 11 Jan 2024 09:33:57 +0100 Subject: [PATCH 1526/1921] Change hardcoded platform value to params.platform --- conf/modules/align_MT.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index 23ab1c8c..2dcacdef 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -42,7 +42,7 @@ process { ext.args = { [ "--VALIDATION_STRINGENCY LENIENT", "--RGLB lib", - "--RGPL ILLUMINA", + "--RGPL ${params.platform}", "--RGPU barcode", "--RGSM ${meta.id}" ].join(' ').trim() } From a8b62e9a4c251a31797926ebda3bafedc445df48 Mon Sep 17 00:00:00 2001 From: Alexander Koc Date: Thu, 11 Jan 2024 10:47:07 +0100 Subject: [PATCH 1527/1921] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index da62b9db..3f7e0d50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced the parameter skip_mt_analysis which was used to turn on/off the mitochondrial workflow [#419](https://github.com/nf-core/raredisease/pull/419) - Adds a new parameter skip_mt_annotation which can be used to turn on/off annotation and ranking for mitochondrial SNVs [#419](https://github.com/nf-core/raredisease/pull/419) - Changed the name of the parameter from `skip_cnv_calling` to `skip_germlinecnvcaller` [#435](https://github.com/nf-core/raredisease/pull/435) +- Change hardcoded platform value to params.platform in align_MT.config [#475](https://github.com/nf-core/raredisease/pull/475) ### `Fixed` From 829282e3057ff711521b19dd8d30de319921bd51 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:45:16 +0100 Subject: [PATCH 1528/1921] review suggestions and switch fai to chromsizes --- lib/WorkflowRaredisease.groovy | 7 ++++--- subworkflows/local/call_snv.nf | 12 ++++++++---- .../local/variant_calling/call_snv_deepvariant.nf | 15 ++++++++------- .../local/variant_calling/call_snv_sentieon.nf | 5 +++-- .../local/variant_calling/postprocess_MT_calls.nf | 5 +++-- workflows/raredisease.nf | 1 + 6 files changed, 27 insertions(+), 18 deletions(-) diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index b6b58af6..02e91acd 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -36,12 +36,13 @@ class WorkflowRaredisease { } // - // Create a bed file which includes the name of variant caller from fai + // Create a bed file which includes the name of variant caller from chromsizes file // - public static String makeBedWithVariantCallerInfo(fai, parent_dir, varcaller) { + public static String makeBedWithVariantCallerInfo(chromsizes, varcaller) { + def parent_dir = chromsizes.parent.toString() def outfile = new File(parent_dir + '/' + varcaller +'.bed') def writer = outfile.newWriter() - fai.eachLine { line -> + chromsizes.eachLine { line -> def split_str = line.tokenize("\t") writer << [split_str[0],"1",split_str[1],varcaller].join("\t") + "\n" } diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 0f646461..8d926f0e 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -13,7 +13,8 @@ workflow CALL_SNV { take: ch_genome_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] ch_mt_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_mtshift_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_mtshift_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_chrsizes // channel: [mandatory] [ path(sizes) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] @@ -44,7 +45,8 @@ workflow CALL_SNV { ch_genome_fasta, ch_genome_fai, ch_case_info, - ch_foundin_header + ch_foundin_header, + ch_genome_chrsizes ) ch_deepvar_vcf = CALL_SNV_DEEPVARIANT.out.vcf ch_deepvar_tbi = CALL_SNV_DEEPVARIANT.out.tabix @@ -60,7 +62,8 @@ workflow CALL_SNV { ch_ml_model, ch_case_info, ch_pcr_indel_model, - ch_foundin_header + ch_foundin_header, + ch_genome_chrsizes ) ch_sentieon_vcf = CALL_SNV_SENTIEON.out.vcf ch_sentieon_tbi = CALL_SNV_SENTIEON.out.tabix @@ -104,7 +107,8 @@ workflow CALL_SNV { ch_genome_fai, ch_mtshift_backchain, ch_case_info, - ch_foundin_header + ch_foundin_header, + ch_genome_chrsizes ) ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 6ffea594..b20e19ae 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -13,11 +13,12 @@ include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf workflow CALL_SNV_DEEPVARIANT { take: - 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) ] - ch_foundin_header // channel: [mandatory] [ path(header) ] + 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) ] + ch_foundin_header // channel: [mandatory] [ path(header) ] + ch_genome_chrsizes // channel: [mandatory] [ path(chrsizes) ] main: ch_versions = Channel.empty() @@ -52,8 +53,8 @@ workflow CALL_SNV_DEEPVARIANT { TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) - ch_genome_fai.map{meta, fai -> - return [meta, WorkflowRaredisease.makeBedWithVariantCallerInfo(fai, fai.parent.toString(), "deepvariant")] + ch_genome_chrsizes.flatten().map{chromsizes -> + return [[id:'deepvariant'], WorkflowRaredisease.makeBedWithVariantCallerInfo(chromsizes, "deepvariant")] } .set { ch_varcallerinfo } diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index bccc830a..53db6095 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -27,6 +27,7 @@ workflow CALL_SNV_SENTIEON { ch_case_info // channel: [mandatory] [ val(case_info) ] ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] ch_foundin_header // channel: [mandatory] [ path(header) ] + ch_genome_chrsizes // channel: [mandatory] [ path(chrsizes) ] main: ch_versions = Channel.empty() @@ -89,8 +90,8 @@ workflow CALL_SNV_SENTIEON { TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) - ch_genome_fai.map{meta, fai -> - return [meta, WorkflowRaredisease.makeBedWithVariantCallerInfo(fai, fai.parent.toString(), "sentieon")] + ch_genome_chrsizes.flatten().map{chromsizes -> + return [[id:'sentieon_dnascope'], WorkflowRaredisease.makeBedWithVariantCallerInfo(chromsizes, "sentieon_dnascope")] } .set { ch_varcallerinfo } diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index 304d8bd4..81279a9c 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -25,6 +25,7 @@ workflow POSTPROCESS_MT_CALLS { ch_mtshift_backchain // channel: [mandatory] [ val(meta), path(backchain) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_foundin_header // channel: [mandatory] [ path(header) ] + ch_genome_chrsizes // channel: [mandatory] [ path(chrsizes) ] main: ch_versions = Channel.empty() @@ -101,8 +102,8 @@ workflow POSTPROCESS_MT_CALLS { TABIX_TABIX_MERGE(ch_addfoundintag_in) - ch_genome_fai.map{meta, fai -> - return [meta, WorkflowRaredisease.makeBedWithVariantCallerInfo(fai, fai.parent.toString(), "mutect2")] + ch_genome_chrsizes.flatten().map{chromsizes -> + return [[id:'mutect2'], WorkflowRaredisease.makeBedWithVariantCallerInfo(chromsizes, "mutect2")] } .set { ch_varcallerinfo } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 203b3b5b..ec1a2609 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -367,6 +367,7 @@ workflow RAREDISEASE { ch_mapped.genome_bam_bai, ch_mapped.mt_bam_bai, ch_mapped.mtshift_bam_bai, + ch_genome_chrsizes, ch_genome_fasta, ch_genome_fai, ch_genome_dictionary, From a64bd131bfc042a33d337ede93a968147357e520 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Thu, 11 Jan 2024 13:37:27 +0100 Subject: [PATCH 1529/1921] Update lib/WorkflowRaredisease.groovy --- lib/WorkflowRaredisease.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index 02e91acd..578dc6d6 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -44,7 +44,7 @@ class WorkflowRaredisease { def writer = outfile.newWriter() chromsizes.eachLine { line -> def split_str = line.tokenize("\t") - writer << [split_str[0],"1",split_str[1],varcaller].join("\t") + "\n" + writer << [split_str[0],"0",split_str[1],varcaller].join("\t") + "\n" } writer.close() return outfile From 9564c642706b9260fa86ee5f8fbae963ee0e130d Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Thu, 11 Jan 2024 14:03:46 +0100 Subject: [PATCH 1530/1921] add meta2 and meta3 to retroseq_call meta.yml --- modules/local/retroseq/call/meta.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/local/retroseq/call/meta.yml b/modules/local/retroseq/call/meta.yml index 98aa0c04..4c1e5b6c 100644 --- a/modules/local/retroseq/call/meta.yml +++ b/modules/local/retroseq/call/meta.yml @@ -31,10 +31,20 @@ input: type: file description: Index of the sorted BAM file pattern: "*.bam" + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` - fasta: type: file description: Reference genome in fasta format pattern: "*.fasta" + - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` - fai: type: file description: Reference FASTA index From 9bc4827c11fddf91386a7d55e094c9357757329b Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 11 Jan 2024 14:23:46 +0100 Subject: [PATCH 1531/1921] adds schema for svdb query inputs --- CHANGELOG.md | 3 ++- assets/svdb_query_bedpe_schema.json | 40 +++++++++++++++++++++++++++++ assets/svdb_query_vcf_schema.json | 40 +++++++++++++++++++++++++++++ nextflow_schema.json | 10 ++++++-- 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 assets/svdb_query_bedpe_schema.json create mode 100644 assets/svdb_query_vcf_schema.json diff --git a/CHANGELOG.md b/CHANGELOG.md index da62b9db..a19a0959 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ngsbits samplegender to check sex [#453](https://github.com/nf-core/raredisease/pull/453) - New workflow for generating cgh files from SV vcfs for interpretation in the CytosSure interpretation software. Turned off by default [#456](https://github.com/nf-core/raredisease/pull/456/) - Fastp to do adapter trimming. It can be skipped using `--skip_fastp` [#457](https://github.com/nf-core/raredisease/pull/457) -- GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled +- GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled [#472](https://github.com/nf-core/raredisease/pull/472) ### `Changed` @@ -37,6 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Replaced the parameter skip_mt_analysis which was used to turn on/off the mitochondrial workflow [#419](https://github.com/nf-core/raredisease/pull/419) - Adds a new parameter skip_mt_annotation which can be used to turn on/off annotation and ranking for mitochondrial SNVs [#419](https://github.com/nf-core/raredisease/pull/419) - Changed the name of the parameter from `skip_cnv_calling` to `skip_germlinecnvcaller` [#435](https://github.com/nf-core/raredisease/pull/435) +- Check SVDB query input files for existence and correct format [#476](https://github.com/nf-core/raredisease/pull/476) ### `Fixed` diff --git a/assets/svdb_query_bedpe_schema.json b/assets/svdb_query_bedpe_schema.json new file mode 100644 index 00000000..2d4331a1 --- /dev/null +++ b/assets/svdb_query_bedpe_schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", + "title": "Schema for SVDB query - BEDPE", + "description": "Schema for the SVDB query database input, bedpe version", + "type": "array", + "items": { + "type": "object", + "properties": { + "filename": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.bedpe$", + "errorMessage": "Path to query database cannot contain spaces and must be a bedpe file" + }, + "in_freq_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "In frequency key cannot contain spaces" + }, + "in_allele_count_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "In allele count key cannot contain spaces" + }, + "out_freq_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Out frequency key must be provided and cannot contain spaces" + }, + "out_allele_count_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Out allele count key must be provided and cannot contain spaces" + } + }, + "required": ["filename", "out_freq_info_key", "out_allele_count_info_key"] + } +} diff --git a/assets/svdb_query_vcf_schema.json b/assets/svdb_query_vcf_schema.json new file mode 100644 index 00000000..0bb8540a --- /dev/null +++ b/assets/svdb_query_vcf_schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", + "title": "Schema for SVDB query - VCF", + "description": "Schema for the SVDB query database input, VCF version", + "type": "array", + "items": { + "type": "object", + "properties": { + "filename": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.vcf?(\\.gz)?$", + "errorMessage": "Path to query database cannot contain spaces and must be a vcf file" + }, + "in_freq_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "In frequency key cannot contain spaces" + }, + "in_allele_count_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "In allele count key cannot contain spaces" + }, + "out_freq_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Out frequency key must be provided and cannot contain spaces" + }, + "out_allele_count_info_key": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Out allele count key must be provided and cannot contain spaces" + } + }, + "required": ["filename", "out_freq_info_key", "out_allele_count_info_key"] + } +} diff --git a/nextflow_schema.json b/nextflow_schema.json index 07988ec3..99fd3253 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -294,7 +294,10 @@ "format": "file-path", "description": "Databases used for structural variant annotation in chrA-posA-chrB-posB-type-count-frequency format.", "fa_icon": "fas fa-file-csv", - "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation." + "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation.", + "pattern": "^\\S+\\.csv$", + "mimetype": "text/csv", + "schema": "assets/svdb_query_bedpe_schema.json" }, "svdb_query_dbs": { "type": "string", @@ -302,7 +305,10 @@ "format": "file-path", "description": "Databases used for structural variant annotation in vcf format.", "fa_icon": "fas fa-file-csv", - "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation." + "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation.", + "pattern": "^\\S+\\.csv$", + "mimetype": "text/csv", + "schema": "assets/svdb_query_vcf_schema.json" }, "target_bed": { "type": "string", From 01a83137ff61268e64b85138f444361f5e9f2fc3 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 11 Jan 2024 15:35:02 +0100 Subject: [PATCH 1532/1921] Document order of chr in refrence genome --- docs/usage.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index b4b500ce..8dfd0cc4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -153,17 +153,18 @@ The mandatory and optional parameters for each category are tabulated below. | Mandatory | Optional | | ------------------------------ | ------------------------------ | -| aligner1 | fasta_fai3 | -| fasta | bwamem23 | -| platform | known_dbsnp4 | -| mito_name/mt_fasta2 | known_dbsnp_tbi4 | -| | min_trimmed_length5 | +| aligner1 | fasta_fai4 | +| fasta2 | bwamem24 | +| platform | known_dbsnp5 | +| mito_name/mt_fasta3 | known_dbsnp_tbi5 | +| | min_trimmed_length6 | 1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
-2f If mito_name is provided, mt_fasta can be generated by the pipeline.
-3fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
-4Used only by Sentieon.
-5Default value is 40. Used only by fastp.
+2Analysis set reference genome in fasta format, first 25 contigs need to be chromosome 1-22, X, Y and the mitochondria.
+3f If mito_name is provided, mt_fasta can be generated by the pipeline.
+4fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
+5Used only by Sentieon.
+6Default value is 40. Used only by fastp.
##### 2. QC stats from the alignment files From 97be745b715ded5625b1f8204e2924a27f3a56f6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Jan 2024 17:52:09 +0100 Subject: [PATCH 1533/1921] review suggestion --- conf/modules/align_bwa_bwamem2.config | 32 ++------------------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index 2ef55d8d..4d8b59e3 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -16,7 +16,8 @@ // process { - if (params.aligner.equals("bwamem2")) { + + if (params.aligner.equals("bwamem2") || params.aligner.equals("bwa")) { withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } @@ -24,35 +25,6 @@ process { ext.when = { params.aligner.equals("bwamem2")} } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { - ext.args = '-s --remove-overlaps' - } - - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_MERGE' { - ext.prefix = { "${meta.id}_sorted_merged" } - } - - withName: '.*ALIGN:ALIGN_BWA_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 } - ] - } - - withName: '.*ALIGN:ALIGN_BWA_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 } - ] - } - } - if (params.aligner.equals("bwa")) { - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}.sorted" } From e1963fb4fec61c34de251f73415d8621461cef7a Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Fri, 12 Jan 2024 17:32:31 +0100 Subject: [PATCH 1534/1921] Fix for getting chr sizes when fai is given --- subworkflows/local/prepare_references.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 9752b3f3..e91494c1 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -48,10 +48,10 @@ workflow PREPARE_REFERENCES { SENTIEON_BWAINDEX_GENOME(ch_genome_fasta).index.set{ch_sentieonbwa} SAMTOOLS_FAIDX_GENOME(ch_genome_fasta, [[],[]]) GATK_SD(ch_genome_fasta) - GET_CHROM_SIZES( SAMTOOLS_FAIDX_GENOME.out.fai ) + ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() + GET_CHROM_SIZES( ch_fai ) // MT indices - ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() SAMTOOLS_EXTRACT_MT(ch_genome_fasta, ch_fai) ch_mt_fasta_in = Channel.empty().mix(ch_mt_fasta, SAMTOOLS_EXTRACT_MT.out.fa).collect() SAMTOOLS_FAIDX_MT_SHIFT(ch_mt_fasta_in, [[],[]]) From 425863d72bc9879137e72206914faccdb7a334a9 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Mon, 15 Jan 2024 09:19:03 +0100 Subject: [PATCH 1535/1921] updating usage --- docs/usage.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 8dfd0cc4..80130c19 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -155,14 +155,15 @@ The mandatory and optional parameters for each category are tabulated below. | ------------------------------ | ------------------------------ | | aligner1 | fasta_fai4 | | fasta2 | bwamem24 | -| platform | known_dbsnp5 | -| mito_name/mt_fasta3 | known_dbsnp_tbi5 | +| platform | bwa4 | +| mito_name/mt_fasta3 | known_dbsnp5 | +| | known_dbsnp_tbi5 | | | min_trimmed_length6 | -1Default value is bwamem2, but if you have a valid license for Sentieon, you have the option to use Sentieon as well.
+1Default value is bwamem2. Other alternatives are bwa and sentieon (requires valid Sentieon license ).
2Analysis set reference genome in fasta format, first 25 contigs need to be chromosome 1-22, X, Y and the mitochondria.
3f If mito_name is provided, mt_fasta can be generated by the pipeline.
-4fasta_fai and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
+4fasta_fai, bwa and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
5Used only by Sentieon.
6Default value is 40. Used only by fastp.
From 1aed730b7c244cc4c19807b92fd1233335c10c4f Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Tue, 16 Jan 2024 13:38:27 +0100 Subject: [PATCH 1536/1921] fix number of me channels --- subworkflows/local/call_mobile_elements.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index c77a11d9..fd26e6d5 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -83,15 +83,15 @@ workflow CALL_MOBILE_ELEMENTS { // Concatenate the chromosome vcfs to sample vcfs BCFTOOLS_SORT_ME.out.vcf .map { meta, vcf -> [ meta - meta.subMap('interval'), vcf ] } - .groupTuple(size: 24) + .groupTuple(size: 25) .set { ch_vcfs } TABIX_ME_SPLIT.out.tbi .map { meta, tbi -> [ meta - meta.subMap('interval'), tbi ] } - .groupTuple(size: 24) + .groupTuple(size: 25) .set { ch_tbis } - ch_vcfs.join(ch_tbis) + ch_vcfs.join(ch_tbis, failOnMismatch: true) .set { ch_vcfs_tbis} BCFTOOLS_CONCAT_ME ( ch_vcfs_tbis ) From 088a94ded0c78f955c8bb4c79f5d71f1d07c2bcd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:46:27 +0100 Subject: [PATCH 1537/1921] update vep --- ...ces_v1.txt => variant_consequences_v2.txt} | 8 +- conf/modules/annotate_genome_snvs.config | 9 +- conf/modules/annotate_mt_snvs.config | 9 +- .../annotate_structural_variants.config | 4 +- conf/test.config | 9 +- conf/test_one_sample.config | 9 +- modules.json | 5 + .../nf-core/ensemblvep/vep/environment.yml | 7 ++ modules/nf-core/ensemblvep/vep/main.nf | 71 ++++++++++++++ modules/nf-core/ensemblvep/vep/meta.yml | 92 +++++++++++++++++++ nextflow_schema.json | 13 ++- subworkflows/local/annotate_genome_snvs.nf | 14 ++- subworkflows/local/annotate_mt_snvs.nf | 33 ++++--- .../local/annotate_structural_variants.nf | 30 +++--- workflows/raredisease.nf | 25 ++++- 15 files changed, 273 insertions(+), 65 deletions(-) rename assets/{variant_consequences_v1.txt => variant_consequences_v2.txt} (95%) create mode 100644 modules/nf-core/ensemblvep/vep/environment.yml create mode 100644 modules/nf-core/ensemblvep/vep/main.nf create mode 100644 modules/nf-core/ensemblvep/vep/meta.yml diff --git a/assets/variant_consequences_v1.txt b/assets/variant_consequences_v2.txt similarity index 95% rename from assets/variant_consequences_v1.txt rename to assets/variant_consequences_v2.txt index 0893a8b9..effe32b1 100644 --- a/assets/variant_consequences_v1.txt +++ b/assets/variant_consequences_v2.txt @@ -6,12 +6,14 @@ frameshift_variant stop_lost start_lost transcript_amplification +feature_elongation +feature_truncation inframe_insertion inframe_deletion missense_variant protein_altering_variant -splice_region_variant splice_donor_5th_base_variant +splice_region_variant splice_donor_region_variant splice_polypyrimidine_tract_variant incomplete_terminal_codon_variant @@ -26,6 +28,7 @@ non_coding_transcript_exon_variant intron_variant NMD_transcript_variant non_coding_transcript_variant +coding_transcript_variant upstream_gene_variant downstream_gene_variant TFBS_ablation @@ -33,7 +36,6 @@ TFBS_amplification TF_binding_site_variant regulatory_region_ablation regulatory_region_amplification -feature_elongation regulatory_region_variant -feature_truncation intergenic_variant +sequence_variant diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 6697c498..5b1e9928 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -79,16 +79,15 @@ process { ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } ext.args = [ '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--plugin LoFtool,LoFtool_scores.txt', + '--plugin pLI,pLI_values_107.txt', + '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 5000', '--buffer_size 20000', '--format vcf --max_sv_size 248956422', '--appris --biotype --cache --canonical --ccds --compress_output bgzip', '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', + '--hgvs --humdiv --no_progress --numbers', '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', '--uniprot --vcf' ].join(' ') diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 391a3e71..f0e46836 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -20,16 +20,15 @@ process { withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { ext.args = [ '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,vep_cache/LoFtool_scores.txt', - '--plugin pLI,vep_cache/pLI_values_107.txt', - '--plugin SpliceAI,snv=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=vep_cache/spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--plugin MaxEntScan,vep_cache/fordownload,SWA,NCSS', + '--plugin LoFtool,LoFtool_scores.txt', + '--plugin pLI,pLI_values_107.txt', + '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 0', '--buffer_size 20000', '--format vcf --fork 4 --max_sv_size 248956422', '--appris --biotype --cache --canonical --ccds --compress_output bgzip', '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --no_stats --numbers', + '--hgvs --humdiv --no_progress --numbers', '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', '--uniprot' ].join(' ') diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index b2ee6218..9f8f5f19 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -46,12 +46,12 @@ process { ext.args = [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin pLI,pLI_values_107.txt', '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', - '--no_progress --no_stats --numbers --per_gene --polyphen p', + '--no_progress --numbers --per_gene --polyphen p', '--protein --offline --regulatory --sift p', '--symbol --tsl --uniprot --vcf' ].join(' ') diff --git a/conf/test.config b/conf/test.config index d43f319b..5a5fdc39 100644 --- a/conf/test.config +++ b/conf/test.config @@ -56,11 +56,6 @@ params { vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" - vep_cache_version = 107 -} - -process { - withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_107.0" - } + vep_cache_version = 110 + vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index de8436c8..82795453 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -56,11 +56,6 @@ params { vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" - vep_cache_version = 107 -} - -process { - withName: '.*FILTERVEP.*' { - container = "docker.io/ensemblorg/ensembl-vep:release_107.0" - } + vep_cache_version = 110 + vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } diff --git a/modules.json b/modules.json index 9a1324fd..eac809df 100644 --- a/modules.json +++ b/modules.json @@ -115,6 +115,11 @@ "git_sha": "29984d70aea47d06f0062a1785d76c357dd40ea9", "installed_by": ["modules"] }, + "ensemblvep/vep": { + "branch": "master", + "git_sha": "214d575774c172062924ad3564b4f66655600730", + "installed_by": ["modules"] + }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", diff --git a/modules/nf-core/ensemblvep/vep/environment.yml b/modules/nf-core/ensemblvep/vep/environment.yml new file mode 100644 index 00000000..7a127746 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/environment.yml @@ -0,0 +1,7 @@ +name: ensemblvep_vep +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::ensembl-vep=110.0 diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf new file mode 100644 index 00000000..3a2b7423 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -0,0 +1,71 @@ +process ENSEMBLVEP_VEP { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/ensembl-vep:110.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" + + input: + tuple val(meta), path(vcf), path(custom_extra_files) + val genome + val species + val cache_version + path cache + tuple val(meta2), path(fasta) + path extra_files + + output: + tuple val(meta), path("*.vcf.gz") , optional:true, emit: vcf + tuple val(meta), path("*.tab.gz") , optional:true, emit: tab + tuple val(meta), path("*.json.gz") , optional:true, emit: json + path "*.summary.html" , emit: report + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json")? 'json' : args.contains("--tab")? 'tab' : 'vcf' + def compress_cmd = args.contains("--compress_output") ? '' : '--compress_output bgzip' + def prefix = task.ext.prefix ?: "${meta.id}" + def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" + def reference = fasta ? "--fasta $fasta" : "" + """ + vep \\ + -i $vcf \\ + -o ${prefix}.${file_extension}.gz \\ + $args \\ + $compress_cmd \\ + $reference \\ + --assembly $genome \\ + --species $species \\ + --cache \\ + --cache_version $cache_version \\ + --dir_cache $dir_cache \\ + --fork $task.cpus \\ + --stats_file ${prefix}.summary.html \\ + + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.vcf.gz + touch ${prefix}.tab.gz + touch ${prefix}.json.gz + touch ${prefix}.summary.html + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/ensemblvep/vep/meta.yml b/modules/nf-core/ensemblvep/vep/meta.yml new file mode 100644 index 00000000..d8ff8d14 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/meta.yml @@ -0,0 +1,92 @@ +name: ensemblvep_vep +description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled through `task.ext.args`. +keywords: + - annotation + - vcf + - json + - tab +tools: + - ensemblvep: + description: | + VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs + or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. + homepage: https://www.ensembl.org/info/docs/tools/vep/index.html + documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html + licence: ["Apache-2.0"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - custom_extra_files: + type: file + description: | + extra sample-specific files to be used with the `--custom` flag to be configured with ext.args + (optional) + - genome: + type: string + description: | + which genome to annotate with + - species: + type: string + description: | + which species to annotate with + - cache_version: + type: integer + description: | + which version of the cache to annotate with + - cache: + type: file + description: | + path to VEP cache (optional) + - meta2: + type: map + description: | + Groovy Map containing fasta reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: | + reference FASTA file (optional) + pattern: "*.{fasta,fa}" + - extra_files: + type: file + description: | + path to file(s) needed for plugins (optional) +output: + - vcf: + type: file + description: | + annotated vcf (optional) + pattern: "*.ann.vcf.gz" + - tab: + type: file + description: | + tab file with annotated variants (optional) + pattern: "*.ann.tab.gz" + - json: + type: file + description: | + json file with annotated variants (optional) + pattern: "*.ann.json.gz" + - report: + type: file + description: VEP report file + pattern: "*.html" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@maxulysse" + - "@matthdsm" + - "@nvnieuwk" +maintainers: + - "@maxulysse" + - "@matthdsm" + - "@nvnieuwk" diff --git a/nextflow_schema.json b/nextflow_schema.json index 1b1b7641..d29a9320 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -374,6 +374,15 @@ "help_text": "If no directory path is passed, vcf files will not be annotated by vep.", "fa_icon": "fas fa-folder-open" }, + "vep_plugin_files": { + "type": "string", + "exists": true, + "format": "file-path", + "description": "Databases used by both named and custom plugins to annotate variants.", + "fa_icon": "fas fa-file-csv", + "help_text": "Path to a file containing the absolute paths to databases and their indices used by VEP's custom and named plugins resources defined within the vcfanno toml file. One line per resource.", + "mimetype": "text/csv" + }, "vep_filters": { "type": "string", "exists": true, @@ -557,10 +566,10 @@ "properties": { "vep_cache_version": { "type": "integer", - "default": 107, + "default": 110, "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", "fa_icon": "fas fa-align-center", - "enum": [107] + "enum": [107, 110] } } }, diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 334b7d4b..291d3acd 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -11,7 +11,7 @@ include { UPD as UPD_SITES } from '../../modules/nf-core/up 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 { ENSEMBLVEP_VEP as ENSEMBLVEP_SNV } from '../../modules/nf-core/ensemblvep/vep/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' include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' @@ -36,6 +36,7 @@ workflow ANNOTATE_GENOME_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_vep_extra_files // channel: [mandatory] [ path(files) ] main: ch_cadd_vcf = Channel.empty() @@ -115,20 +116,23 @@ workflow ANNOTATE_GENOME_SNVS { } .set { ch_for_mix } - ch_vep_in = ch_for_mix.selvar.mix(ch_for_mix.cadd) + ch_for_mix.selvar.mix(ch_for_mix.cadd) + .map { meta, vcf -> return [meta, vcf, []]} + .set { ch_vep_in } + // Annotating with ensembl Vep ENSEMBLVEP_SNV( ch_vep_in, - ch_genome_fasta, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, - [] + ch_genome_fasta, + ch_vep_extra_files ) - ENSEMBLVEP_SNV.out.vcf_gz + ENSEMBLVEP_SNV.out.vcf .map { meta, vcf -> [meta - meta.subMap('scatterid'), vcf] } .set { ch_vep_out } diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 8f7c24eb..e1ed903a 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -2,13 +2,13 @@ // Annotate MT // -include { TABIX_TABIX as TABIX_TABIX_MT } 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 { ANNOTATE_CADD } from './annotation/annotate_cadd' -include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../modules/nf-core/tabix/bgziptabix/main' -include { HMTNOTE_ANNOTATE } from '../../modules/nf-core/hmtnote/annotate/main' +include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' +include { ENSEMBLVEP_VEP as ENSEMBLVEP_MT } from '../../modules/nf-core/ensemblvep/vep/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 { ANNOTATE_CADD } from './annotation/annotate_cadd' +include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../modules/nf-core/tabix/bgziptabix/main' +include { HMTNOTE_ANNOTATE } from '../../modules/nf-core/hmtnote/annotate/main' workflow ANNOTATE_MT_SNVS { take: @@ -22,6 +22,8 @@ workflow ANNOTATE_MT_SNVS { val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] + ch_vep_cache // channel: [mandatory] [ path(cache) ] + ch_vep_extra_files // channel: [mandatory] [ path(files) ] main: ch_cadd_vcf = Channel.empty() @@ -49,22 +51,27 @@ workflow ANNOTATE_MT_SNVS { return [it[0], it[2]] } .set { ch_for_mix } - ch_vep_in = ch_for_mix.merged.mix(ch_for_mix.cadd) + + ch_for_mix.merged.mix(ch_for_mix.cadd) + .tap { ch_haplogrep_in } + .map { meta, vcf -> return [meta, vcf, []]} + .set { ch_vep_in } + // 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, + ch_vep_extra_files ) // Running vcfanno - TABIX_TABIX_MT(ENSEMBLVEP_MT.out.vcf_gz) - ENSEMBLVEP_MT.out.vcf_gz + TABIX_TABIX_MT(ENSEMBLVEP_MT.out.vcf) + ENSEMBLVEP_MT.out.vcf .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} .set { ch_in_vcfanno } @@ -84,7 +91,7 @@ workflow ANNOTATE_MT_SNVS { ch_tbi_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } // Running haplogrep2 - HAPLOGREP2_CLASSIFY_MT(ch_vep_in, "vcf.gz") + HAPLOGREP2_CLASSIFY_MT(ch_haplogrep_in, "vcf.gz") ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX_MT.out.versions) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 6766a73c..d2d42027 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -2,12 +2,12 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' -include { SVDB_QUERY as SVDB_QUERY_BEDPE } from '../../modules/nf-core/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' -include { ENSEMBLVEP as ENSEMBLVEP_SV } from '../../modules/local/ensemblvep/main' -include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' +include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' +include { SVDB_QUERY as SVDB_QUERY_BEDPE } from '../../modules/nf-core/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' +include { ENSEMBLVEP_VEP as ENSEMBLVEP_SV } from '../../modules/nf-core/ensemblvep/vep/main' +include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/tabix/tabix/main' workflow ANNOTATE_STRUCTURAL_VARIANTS { @@ -20,6 +20,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_vep_cache // channel: [mandatory] [ path(cache) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + ch_vep_extra_files // channel: [mandatory] [ path(files) ] main: ch_versions = Channel.empty() @@ -97,18 +98,21 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { PICARD_SORTVCF.out.vcf.map { meta, vcf -> return [meta,vcf,[]] }.set { ch_sortvcf } BCFTOOLS_VIEW(ch_sortvcf, [], [], []) + .vcf + .map { meta, vcf -> return [meta, vcf, []]} + .set { ch_vep_in } ENSEMBLVEP_SV( - BCFTOOLS_VIEW.out.vcf, - ch_genome_fasta, + ch_vep_in, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, - [] + ch_genome_fasta, + ch_vep_extra_files ) - TABIX_VEP (ENSEMBLVEP_SV.out.vcf_gz) + TABIX_VEP (ENSEMBLVEP_SV.out.vcf) ch_versions = ch_versions.mix(SVDB_QUERY_DB.out.versions) ch_versions = ch_versions.mix(SVDB_QUERY_BEDPE.out.versions) @@ -118,7 +122,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(TABIX_VEP.out.versions) emit: - vcf_ann = ENSEMBLVEP_SV.out.vcf_gz // channel: [ val(meta), path(vcf) ] - tbi = TABIX_VEP.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf_ann = ENSEMBLVEP_SV.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = TABIX_VEP.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dac92ee9..2227303c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -275,7 +275,7 @@ workflow RAREDISEASE { 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_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v2.txt", checkIfExists: true).collect() ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() : Channel.value([]) ch_vcf2cytosure_blacklist = params.vcf2cytosure_blacklist ? Channel.fromPath(params.vcf2cytosure_blacklist).collect() @@ -286,6 +286,8 @@ workflow RAREDISEASE { : 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_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files).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) @@ -298,11 +300,25 @@ workflow RAREDISEASE { ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) } + // Read and store paths in the vep_plugin_files file + ch_vep_extra_files_unsplit.splitCsv ( header:true ) + .map { row -> + f = file(row.vep_files[0]) + if(f.isFile() || f.isDirectory()){ + return [f] + } else { + error("\nVep database file ${f} does not exist.") + } + } + .collect() + .set {ch_vep_extra_files} + // Input QC if (!params.skip_fastqc) { FASTQC (ch_reads) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) } + // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( ch_genome_dictionary, @@ -425,7 +441,8 @@ workflow RAREDISEASE { params.vep_cache_version, ch_vep_cache, ch_genome_fasta, - ch_genome_dictionary + ch_genome_dictionary, + ch_vep_extra_files ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) @@ -472,7 +489,8 @@ workflow RAREDISEASE { ch_vep_cache, ch_genome_fasta, ch_gnomad_af, - ch_scatter_split_intervals + ch_scatter_split_intervals, + ch_vep_extra_files ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) @@ -519,6 +537,7 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, + ch_vep_extra_files ).set {ch_mt_annotate} ch_versions = ch_versions.mix(ch_mt_annotate.versions) From 9434630d71cdb4dac710e7c03935cef0faccd2b7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:05:41 +0100 Subject: [PATCH 1538/1921] update usage --- docs/usage.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 34776196..6735eb07 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -225,7 +225,7 @@ The mandatory and optional parameters for each category are tabulated below. | vcfanno_resources2 | vcfanno_lua | | vcfanno_toml3 | vep_filters8 | | vep_cache_version | cadd_resources9 | -| vep_cache4 | | +| vep_cache4 | vep_plugin_files10 | | gnomad_af5 | | | score_config_snv6 | | @@ -233,7 +233,7 @@ The mandatory and optional parameters for each category are tabulated below. 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).
3Path to a vcfanno configuration file. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_config.toml).
4 VEP caches can be downloaded [here](https://www.ensembl.org/info/docs/tools/vep/script/vep_cache.html#cache). -VEP plugins and associated files may be installed in the cache directory, and the plugin pLI is mandatory to install. +VEP plugins may be installed in the cache directory, and the plugin pLI is mandatory to install. To supply files required by VEP plugins, use `vep_plugin_files` parameter. See example cache [here](https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz).
5 GnomAD VCF files can be downloaded from [here](https://gnomad.broadinstitute.org/downloads). The option `gnomad_af` expects a tab-delimited file with no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
@@ -241,6 +241,7 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl 7Used 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).
8 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). Not required if --skip_vep_filter is set to true.
9Path 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.
+10A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
> 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>") @@ -251,22 +252,22 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl | genome | reduced_penetrance | | svdb_query_dbs/svdb_query_bedpedbs1 | | | vep_cache_version | vep_filters | -| vep_cache | | +| vep_cache | vep_plugin_files | | score_config_sv | | 1 A CSV file that describes the databases (VCFs or BEDPEs) 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). ##### 9. Mitochondrial annotation -| Mandatory | Optional | -| ----------------- | ----------- | -| genome | vep_filters | -| mito_name | | -| vcfanno_resources | | -| vcfanno_toml | | -| vep_cache_version | | -| vep_cache | | -| score_config_mt | | +| Mandatory | Optional | +| ----------------- | ---------------- | +| genome | vep_filters | +| mito_name | vep_plugin_files | +| vcfanno_resources | | +| vcfanno_toml | | +| vep_cache_version | | +| vep_cache | | +| score_config_mt | | #### Run the pipeline From dc4e176116c288a09b735ea7f1416d7711d71793 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:21:44 +0100 Subject: [PATCH 1539/1921] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0878e5c8..dda4ef6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled [#472](https://github.com/nf-core/raredisease/pull/472) - bwa aligner [#474](https://github.com/nf-core/raredisease/pull/474) - Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471](https://github.com/nf-core/raredisease/pull/471) +- A new parameter `vep_plugin_files` to supply files required by vep plugins [#482](https://github.com/nf-core/raredisease/pull/482) ### `Changed` @@ -42,6 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changed the name of the parameter from `skip_cnv_calling` to `skip_germlinecnvcaller` [#435](https://github.com/nf-core/raredisease/pull/435) - Check SVDB query input files for existence and correct format [#476](https://github.com/nf-core/raredisease/pull/476) - Change hardcoded platform value to params.platform in align_MT.config [#475](https://github.com/nf-core/raredisease/pull/475) +- Installed the nf-core version of ensemblvep/vep module [#482](https://github.com/nf-core/raredisease/pull/482) ### `Fixed` From de9ff795de76bedf89cec51310dff3124b43cdf9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:30:50 +0100 Subject: [PATCH 1540/1921] fix lint error --- nextflow.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nextflow.config b/nextflow.config index a6551e77..0ff60379 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,6 +39,9 @@ params { cadd_resources = null platform = 'illumina' + // Annotation + vep_cache_version = 110 + // Bam_qc ngsbits_samplegender_method = 'xy' From 3ee9fed33c5c14af78c88b7e30f76d51f70d9e61 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:36:42 +0100 Subject: [PATCH 1541/1921] fix lint error --- main.nf | 2 +- nextflow.config | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/main.nf b/main.nf index 0ebf4e51..d87f9e02 100644 --- a/main.nf +++ b/main.nf @@ -54,7 +54,7 @@ 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.vep_plugin_files = WorkflowMain.getGenomeAttribute(params, 'vep_plugin_files') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VALIDATE & PRINT PARAMETER SUMMARY diff --git a/nextflow.config b/nextflow.config index 0ff60379..a6551e77 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,9 +39,6 @@ params { cadd_resources = null platform = 'illumina' - // Annotation - vep_cache_version = 110 - // Bam_qc ngsbits_samplegender_method = 'xy' From 098678592b697f107cc0d0e1f7ea82ca6ce961c9 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 18 Jan 2024 11:38:55 +0100 Subject: [PATCH 1542/1921] adding mobil element annotation --- bin/add_most_severe_pli.py | 3 +- conf/modules/annotate_mobile_elements.config | 82 +++++++++++++ conf/modules/call_mobile_elements.config | 3 +- nextflow.config | 8 +- nextflow_schema.json | 9 ++ .../local/annotate_consequence_pli.nf | 1 + .../local/annotate_mobile_elements.nf | 109 ++++++++++++++++++ subworkflows/local/call_mobile_elements.nf | 36 ++++-- workflows/raredisease.nf | 16 +++ 9 files changed, 250 insertions(+), 17 deletions(-) create mode 100644 conf/modules/annotate_mobile_elements.config create mode 100644 subworkflows/local/annotate_mobile_elements.nf diff --git a/bin/add_most_severe_pli.py b/bin/add_most_severe_pli.py index ce36768e..b578fe28 100755 --- a/bin/add_most_severe_pli.py +++ b/bin/add_most_severe_pli.py @@ -49,6 +49,7 @@ def construct_most_severe_pli_info(line: str, pli_ind: int) -> list: for field in info_fields: if field.startswith("CSQ="): transcripts = field.split("CSQ=")[1].split(",") + break pli_values = parse_vep_transcripts(transcripts, pli_ind) try: pli_max = max(pli_values) @@ -80,7 +81,7 @@ def write_pli_annotated_vcf(file_in: TextIO, file_out: TextIO): for line in file_in: if line.startswith("#"): file_out.write(line) - if line.startswith("##INFO=\n' diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config new file mode 100644 index 00000000..6cf5c0b4 --- /dev/null +++ b/conf/modules/annotate_mobile_elements.config @@ -0,0 +1,82 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Mobile element variant annotation options +// + +process { + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:.*' { + publishDir = [ + enabled: false + ] + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:SVDB_QUERY_DB' { + ext.args = { [ + '--bnd_distance 150', + '--overlap -1' + ].join(' ') } + ext.prefix = { "${meta.id}_me_svdb" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:PICARD_SORTVCF' { + ext.prefix = { "${meta.id}_sortvcf" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:ENSEMBLVEP_ME' { + ext.args = { [ + '--dir_cache vep_cache', + '--dir_plugins vep_cache/Plugins', + '--plugin pLI,vep_cache/pLI_values_107.txt', + '--appris --biotype --buffer_size 100 --canonical --cache --ccds', + '--compress_output bgzip --distance 5000 --domains', + '--exclude_predicted --force_overwrite --format vcf', + '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', + '--no_progress --no_stats --numbers --per_gene --polyphen p', + '--protein --offline --regulatory --sift p', + '--symbol --tsl --uniprot --vcf' + ].join(' ') } + ext.prefix = { "${meta.id}_svdbquery_vep" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:BCFTOOLS_VIEW_FILTER' { + // extend filter with arguments such as --exclude 'INFO/swegen_sva_FRQ > 0.1' + ext.args = { "--apply-filters PASS" } + ext.prefix = { "${meta.id}_filter" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:FILTERVEP_ME' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_me_${meta.set}" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_me_csq_${meta.set}" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_me_pli_${meta.set}" } + } + + withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_me_annotated_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/annotate_mobile_elements" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/call_mobile_elements.config b/conf/modules/call_mobile_elements.config index fabc6b94..f3622869 100644 --- a/conf/modules/call_mobile_elements.config +++ b/conf/modules/call_mobile_elements.config @@ -43,7 +43,7 @@ process { } withName: '.*CALL_MOBILE_ELEMENTS:BCFTOOLS_SORT_ME' { - ext.args = { '--output-type z' } + ext.args = { '--output-type z --temp-dir ./' } ext.prefix = { "${meta.id}_${meta.interval}_retroseq_sort" } } @@ -69,5 +69,4 @@ process { saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - } diff --git a/nextflow.config b/nextflow.config index a6551e77..fb27d0a6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -43,9 +43,10 @@ params { ngsbits_samplegender_method = 'xy' // File params - svdb_query_bedpedbs = null - svdb_query_dbs = null - mobile_element_references = null + svdb_query_bedpedbs = null + svdb_query_dbs = null + mobile_element_references = null + mobile_element_svdb_resources = null // Alignment aligner = 'bwamem2' @@ -331,6 +332,7 @@ includeConfig 'conf/modules/call_sv_manta.config' includeConfig 'conf/modules/call_sv_tiddit.config' includeConfig 'conf/modules/postprocess_MT_calls.config' includeConfig 'conf/modules/call_mobile_elements.config' +includeConfig 'conf/modules/annotate_mobile_elements.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 1b1b7641..41fc279b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -223,6 +223,15 @@ "format": "file-path", "schema": "assets/mobile_element_references_schema.json" }, + "mobile_element_svdb_resources": { + "type": "string", + "description": "File with mobile element allele frequency references", + "help_text": "Path to csv file listing files containing mobile element allele frequencies in reference populations. \nFormat: ,,,,", + "fa_icon": "fas fa-file", + "pattern": "^\\S+\\.csv$", + "mimetype": "text/csv", + "schema": "assets/svdb_query_vcf_schema.json" + }, "ml_model": { "type": "string", "exists": true, diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index aa0f257e..b84d948f 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -26,5 +26,6 @@ workflow ANNOTATE_CSQ_PLI { emit: vcf_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, vcf ] }.collect() // channel: [ val(meta), path(vcf) ] + tbi_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, tbi ] }.collect() // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf new file mode 100644 index 00000000..d07d6aaa --- /dev/null +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -0,0 +1,109 @@ +// +// A subworkflow to annotate structural variants. +// + +include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { ENSEMBLVEP as ENSEMBLVEP_ME } from '../../modules/local/ensemblvep/main' +include { ENSEMBLVEP_FILTERVEP as FILTERVEP_ME } from '../../modules/nf-core/ensemblvep/filtervep' +include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_FILTER } from '../../modules/nf-core/bcftools/view/main' +include { TABIX_BGZIPTABIX as BGZIP_TABIX_ME } from '../../modules/nf-core/tabix/bgziptabix/main' + +include { ANNOTATE_CSQ_PLI as ANNOTATE_CSQ_PLI_ME } from '../../subworkflows/local/annotate_consequence_pli.nf' + +workflow ANNOTATE_MOBILE_ELEMENTS { + + take: + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_me_svdb_resources // channel: [mandatory] [ path(csv) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + ch_vep_cache // channel: [mandatory] [ path(cache) ] + ch_variant_consequences // channel: [mandatory] [ path(consequences) ] + ch_vep_filters // channel: [mandatory] [ path(vep_filter) ] + val_vep_genome // string: [mandatory] GRCh37 or GRCh38 + val_vep_cache_version // string: [mandatory] default: 107 + + main: + ch_versions = Channel.empty() + ch_svdb_dbs = Channel.empty() + + ch_me_svdb_resources + .splitCsv ( header:true ) + .multiMap { row -> + vcf_dbs: row.filename + in_frqs: row.in_freq_info_key + in_occs: row.in_allele_count_info_key + out_frqs: row.out_freq_info_key + out_occs: row.out_allele_count_info_key + } + .set { ch_svdb_dbs } + + SVDB_QUERY_DB ( + ch_vcf, + ch_svdb_dbs.in_occs.toList(), + ch_svdb_dbs.in_frqs.toList(), + ch_svdb_dbs.out_occs.toList(), + ch_svdb_dbs.out_frqs.toList(), + ch_svdb_dbs.vcf_dbs.toList(), + [] + ) + + PICARD_SORTVCF( + SVDB_QUERY_DB.out.vcf, + ch_genome_fasta, + ch_genome_dictionary + ) + + ENSEMBLVEP_ME( + PICARD_SORTVCF.out.vcf, + ch_genome_fasta, + val_vep_genome, + "homo_sapiens", + val_vep_cache_version, + ch_vep_cache, + [] + ) + + ENSEMBLVEP_ME.out.vcf_gz + .map { meta, vcf -> + [ meta, vcf, [] ] + } + .set {ch_bcftools_filter_input } + + BCFTOOLS_VIEW_FILTER ( ch_bcftools_filter_input, [], [], [] ) + + BCFTOOLS_VIEW_FILTER.out.vcf + .multiMap { meta, vcf -> + clinical: [ meta + [ set: "clinical" ], vcf ] + research: [ meta + [ set: "research" ], vcf ] + } + .set { ch_clin_research_vcf } + + FILTERVEP_ME( + ch_clin_research_vcf.clinical, + ch_vep_filters + ) + + ch_clin_research_vcf.research + .mix( FILTERVEP_ME.out.output ) + .set { ch_annotate_csq_pli_me_input } + + + ANNOTATE_CSQ_PLI_ME ( + ch_annotate_csq_pli_me_input, + ch_variant_consequences + ) + + ch_versions = ch_versions.mix(SVDB_QUERY_DB.out.versions) + ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) + ch_versions = ch_versions.mix(ENSEMBLVEP_ME.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW_FILTER.out.versions) + ch_versions = ch_versions.mix(FILTERVEP_ME.out.versions) + ch_versions = ch_versions.mix(ANNOTATE_CSQ_PLI_ME.out.versions) + + emit: + vcf = ANNOTATE_CSQ_PLI_ME.out.vcf_ann // channel: [ val(meta), path(vcf) ] + tbi = ANNOTATE_CSQ_PLI_ME.out.tbi_ann // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index fd26e6d5..172027da 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -30,14 +30,16 @@ workflow CALL_MOBILE_ELEMENTS { ch_genome_fai .splitCsv(sep: "\t", elem: 1, limit: 25) .map { meta, fai -> [ fai.first() ] } + .collect() + .map { chr -> [ chr, chr.size() ] } + .transpose() .set { ch_chr } - // Building one bam channel per chromosome and adding interval + // Building one bam channel per chromosome and adding interval and the number of intervals ch_genome_bam_bai .combine(ch_chr) - .map { - meta, bam, bai, chr -> - return [ meta + [interval:chr], bam, bai ] + .map { meta, bam, bai, chr, nr_of_chrs -> + [ meta + [interval:chr, nr_of_intervals: nr_of_chrs], bam, bai ] } .set { ch_genome_bam_bai_interval } @@ -46,7 +48,7 @@ workflow CALL_MOBILE_ELEMENTS { ME_INDEX_SPLIT_ALIGNMENT ( ME_SPLIT_ALIGNMENT.out.bam ) ME_SPLIT_ALIGNMENT.out.bam - .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch:true, failOnDuplicate: true) + .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch: true, failOnDuplicate: true) .set { ch_retroseq_input } ch_me_references @@ -80,20 +82,32 @@ workflow CALL_MOBILE_ELEMENTS { BCFTOOLS_SORT_ME ( BCFTOOLS_REHEADER_ME.out.vcf ) TABIX_ME_SPLIT ( BCFTOOLS_SORT_ME.out.vcf ) - // Concatenate the chromosome vcfs to sample vcfs + // Preparing channels for input to bcftools concat + // resulting channel [ meta, [ vcf_1, vcf_2, ... ], [ tbi_1, tbi_2, ... ] ] BCFTOOLS_SORT_ME.out.vcf - .map { meta, vcf -> [ meta - meta.subMap('interval'), vcf ] } - .groupTuple(size: 25) + .map { meta, vcf -> + [ groupKey( meta - meta.subMap('interval'), meta.nr_of_intervals ), vcf ] + } + .groupTuple() + .map { meta, vcf -> + [ meta - meta.subMap('nr_of_intervals'), vcf ] + } .set { ch_vcfs } TABIX_ME_SPLIT.out.tbi - .map { meta, tbi -> [ meta - meta.subMap('interval'), tbi ] } - .groupTuple(size: 25) + .map { meta, vcf -> + [ groupKey( meta - meta.subMap('interval'), meta.nr_of_intervals ), vcf ] + } + .groupTuple() + .map { meta, vcf -> + [ meta - meta.subMap('nr_of_intervals'), vcf ] + } .set { ch_tbis } ch_vcfs.join(ch_tbis, failOnMismatch: true) - .set { ch_vcfs_tbis} + .set { ch_vcfs_tbis } + // Concatenate the chromosome vcfs to sample vcfs BCFTOOLS_CONCAT_ME ( ch_vcfs_tbis ) // Merge sample vcfs to a case vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dac92ee9..881e5bb6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -119,6 +119,7 @@ include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_MT } from '../subworkflows/local/an include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/annotate_genome_snvs' +include { ANNOTATE_MOBILE_ELEMENTS } from '../subworkflows/local/annotate_mobile_elements' include { ANNOTATE_MT_SNVS } from '../subworkflows/local/annotate_mt_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' @@ -245,6 +246,8 @@ workflow RAREDISEASE { : Channel.empty() ch_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") : Channel.empty() + ch_me_svdb_resources = params.mobile_element_svdb_resources ? Channel.fromPath(params.mobile_element_svdb_resources) + : Channel.empty() ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals @@ -611,6 +614,19 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_MOBILE_ELEMENTS.out.versions) + ANNOTATE_MOBILE_ELEMENTS( + CALL_MOBILE_ELEMENTS.out.vcf, + ch_me_svdb_resources, + ch_genome_fasta, + ch_genome_dictionary, + ch_vep_cache, + ch_variant_consequences, + ch_vep_filters, + params.genome, + params.vep_cache_version + ) + ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) + // // MODULE: Pipeline reporting // From 338186d2cc8b7f1ff34addb840de46a2c4751d33 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 18 Jan 2024 12:42:11 +0100 Subject: [PATCH 1543/1921] adding test data and updating parameter name --- conf/test.config | 3 ++- conf/test_one_sample.config | 3 ++- conf/test_sentieon.config | 3 ++- nextflow.config | 8 ++++---- nextflow_schema.json | 2 +- workflows/raredisease.nf | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/conf/test.config b/conf/test.config index d43f319b..99d6a38b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -42,8 +42,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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" - mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" + mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index de8436c8..3606b303 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -42,8 +42,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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" - mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" + mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index aca4b755..6084f1df 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -37,8 +37,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" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" - mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" + mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" 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/nextflow.config b/nextflow.config index fb27d0a6..50e0c6aa 100644 --- a/nextflow.config +++ b/nextflow.config @@ -43,10 +43,10 @@ params { ngsbits_samplegender_method = 'xy' // File params - svdb_query_bedpedbs = null - svdb_query_dbs = null - mobile_element_references = null - mobile_element_svdb_resources = null + svdb_query_bedpedbs = null + svdb_query_dbs = null + mobile_element_references = null + mobile_element_svdb_annotations = null // Alignment aligner = 'bwamem2' diff --git a/nextflow_schema.json b/nextflow_schema.json index 41fc279b..6eb22c9f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -223,7 +223,7 @@ "format": "file-path", "schema": "assets/mobile_element_references_schema.json" }, - "mobile_element_svdb_resources": { + "mobile_element_svdb_annotations": { "type": "string", "description": "File with mobile element allele frequency references", "help_text": "Path to csv file listing files containing mobile element allele frequencies in reference populations. \nFormat: ,,,,", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 881e5bb6..c765e1b0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -246,7 +246,7 @@ workflow RAREDISEASE { : Channel.empty() ch_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") : Channel.empty() - ch_me_svdb_resources = params.mobile_element_svdb_resources ? Channel.fromPath(params.mobile_element_svdb_resources) + ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) : Channel.empty() ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.value([[:],[]]) From 5ed33f6d3670ee76f39b7cd7cdb687be6cfc4cdd Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 18 Jan 2024 13:04:30 +0100 Subject: [PATCH 1544/1921] update changelog and add skip option --- CHANGELOG.md | 4 ++- conf/modules/annotate_mobile_elements.config | 1 + nextflow.config | 1 + nextflow_schema.json | 5 ++++ workflows/raredisease.nf | 30 ++++++++++++-------- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0878e5c8..9f2c697e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New workflow for calling insertion of mobile elements [#440](https://github.com/nf-core/raredisease/pull/440) - GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled [#472](https://github.com/nf-core/raredisease/pull/472) - bwa aligner [#474](https://github.com/nf-core/raredisease/pull/474) -- Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471](https://github.com/nf-core/raredisease/pull/471) +- Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471] +(https://github.com/nf-core/raredisease/pull/471) +- New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) ### `Changed` diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index 6cf5c0b4..0e04095c 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -18,6 +18,7 @@ process { withName: '.*ANNOTATE_MOBILE_ELEMENTS:.*' { + ext.when = !params.skip_me_annotation publishDir = [ enabled: false ] diff --git a/nextflow.config b/nextflow.config index 50e0c6aa..9634ad31 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,6 +32,7 @@ params { skip_qualimap = false skip_snv_annotation = false skip_sv_annotation = false + skip_me_annotation = false skip_mt_annotation = false skip_vcf2cytosure = true skip_vep_filter = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 6eb22c9f..853d3774 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -460,6 +460,11 @@ "description": "Specifies whether or not to skip Qualimap.", "fa_icon": "fas fa-toggle-on" }, + "skip_me_annotation": { + "type": "boolean", + "description": "Specifies whether or not to skip annotation of mobile_elements.", + "fa_icon": "fas fa-toggle-on" + }, "skip_mt_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotation of mitochondrial variants.", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c765e1b0..9481b930 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -67,6 +67,10 @@ if (!params.skip_vep_filter) { mandatoryParams += ["vep_filters"] } +if (!params.skip_me_annotation) { + mandatoryParams += ["mobile_element_svdb_annotations"] +} + for (param in mandatoryParams.unique()) { if (params[param] == null) { println("params." + param + " not set.") @@ -614,18 +618,20 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_MOBILE_ELEMENTS.out.versions) - ANNOTATE_MOBILE_ELEMENTS( - CALL_MOBILE_ELEMENTS.out.vcf, - ch_me_svdb_resources, - ch_genome_fasta, - ch_genome_dictionary, - ch_vep_cache, - ch_variant_consequences, - ch_vep_filters, - params.genome, - params.vep_cache_version - ) - ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) + if (!params.skip_me_annotation) { + ANNOTATE_MOBILE_ELEMENTS( + CALL_MOBILE_ELEMENTS.out.vcf, + ch_me_svdb_resources, + ch_genome_fasta, + ch_genome_dictionary, + ch_vep_cache, + ch_variant_consequences, + ch_vep_filters, + params.genome, + params.vep_cache_version + ) + ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) + } // // MODULE: Pipeline reporting From 33fb5e024feab5f2d33989791ff64b1c2f787721 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 18 Jan 2024 13:10:54 +0100 Subject: [PATCH 1545/1921] prettier on changelog --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f2c697e..93161c13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,8 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New workflow for calling insertion of mobile elements [#440](https://github.com/nf-core/raredisease/pull/440) - GATK CNVCaller uses segments instead of intervals, filters out "reference" segments between the calls, and fixes a bug with how `ch_readcount_intervals` was handled [#472](https://github.com/nf-core/raredisease/pull/472) - bwa aligner [#474](https://github.com/nf-core/raredisease/pull/474) -- Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471] -(https://github.com/nf-core/raredisease/pull/471) +- Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471](https://github.com/nf-core/raredisease/pull/471) - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) ### `Changed` From 252bb25e2cdfa43563ceec0bfd86e7179d4a9363 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 18 Jan 2024 13:52:53 +0100 Subject: [PATCH 1546/1921] prettier on devcontainer.jsonwq --- .devcontainer/devcontainer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4ecfbfe3..4a9bc5c7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,11 +18,11 @@ "python.linting.flake8Path": "/opt/conda/bin/flake8", "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", - "python.linting.pylintPath": "/opt/conda/bin/pylint" + "python.linting.pylintPath": "/opt/conda/bin/pylint", }, // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } - } + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"], + }, + }, } From 3b096e3e5f8301937f18158e5ac0bda2e9ab5709 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 18 Jan 2024 14:31:55 +0100 Subject: [PATCH 1547/1921] updating documentation --- docs/output.md | 30 ++++++++++++++++++++++++++++++ docs/usage.md | 11 +++++++++++ 2 files changed, 41 insertions(+) diff --git a/docs/output.md b/docs/output.md index c80c7a79..885c806e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -492,6 +492,36 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files
+### Mobile element analysis + +#### Calling mobile elements + +Mobile elements are identified from the bam file using [RetroSeq](https://github.com/tk2/RetroSeq) and the indiviual calls are merged to case VCF using SVDB. + +
+Output files + +- `call_mobile_elements/` + - `_mobile_elements.vcf.gz`: file containing mobile elements. + - `_mobile_elements.vcf.gz.tbi`: index of the file containing mobile elements. + +
+ +#### Annotating mobile elements + +The mobile elements are annotated with allele frequencies and allele counts using SVDB. These annotation files needed are preferably produced from a representative population. Further annoation is done using VEP and the resulting VCF is filtered using bcftools. The default filter is to only keep elements with `PASS` in the filter column but if no other post-processing is done we reccomend supplementing with an exclude expression based on population allele frequencies. The filtering key is dependent on the annotation files used but an example expression could look like this: `--exclude 'INFO/swegen_sva_FRQ > 0.1'`. If a list of HGNC id:s have been supplied with the option `--vep_filters`, variants matching those id:s will be presented in a seperate file using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html). This option can be disabled using the flag `--skip_vep_filter`. A VCF corresponding to the complete set of variants will also be produced. + +
+Output files + +- `rank_and_filter/` + - `_mobile_elements_annotated_research.vcf.gz`: VCF containting the complete set of annotated mobile elements. + - `_mobile_elements_annotated_research.vcf.gz.tbi`: Index for VCF containting the complete set of annotated mobile elements. + - `_mobile_elements_annotated_clinical.vcf.gz`: VCF containing selected annotated mobile elements. + - `_mobile_elements_annotated_clincial.vcf.gz.tbi`: Index for VCF containing selected annotated mobile elements. + +
+ ### Pipeline information [Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/usage.md b/docs/usage.md index 34776196..9c27621a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -268,6 +268,17 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl | vep_cache | | | score_config_mt | | +##### 10. Mobile element annotation + +| Mandatory | Optional | +| ------------------------------------------- | ----------- | +| genome | vep_filters | +| mobile_element_svdb_annotations1 | | +| vep_cache_version | | +| vep_cache | | + +1 A CSV file that describes the databases (VCFs) used by SVDB for annotating mobile elements with allele frequencies. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). + #### Run the pipeline You can directly supply the parameters in the command line (CLI) or use a config file from which the pipeline can import the parameters. From d14976bae0bc7a76b61190e4d432edd1489ad433 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Fri, 19 Jan 2024 11:27:01 +0100 Subject: [PATCH 1548/1921] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Lucía Peña-Pérez --- subworkflows/local/annotate_mobile_elements.nf | 2 +- subworkflows/local/call_mobile_elements.nf | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index d07d6aaa..04b15ad2 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -69,7 +69,7 @@ workflow ANNOTATE_MOBILE_ELEMENTS { .map { meta, vcf -> [ meta, vcf, [] ] } - .set {ch_bcftools_filter_input } + .set { ch_bcftools_filter_input } BCFTOOLS_VIEW_FILTER ( ch_bcftools_filter_input, [], [], [] ) diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 172027da..05e6355c 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -28,7 +28,7 @@ workflow CALL_MOBILE_ELEMENTS { // Building chromosome channels based on fasta index ch_genome_fai - .splitCsv(sep: "\t", elem: 1, limit: 25) + .splitCsv( sep: "\t", elem: 1, limit: 25 ) .map { meta, fai -> [ fai.first() ] } .collect() .map { chr -> [ chr, chr.size() ] } @@ -37,7 +37,7 @@ workflow CALL_MOBILE_ELEMENTS { // Building one bam channel per chromosome and adding interval and the number of intervals ch_genome_bam_bai - .combine(ch_chr) + .combine( ch_chr ) .map { meta, bam, bai, chr, nr_of_chrs -> [ meta + [interval:chr, nr_of_intervals: nr_of_chrs], bam, bai ] } @@ -48,7 +48,7 @@ workflow CALL_MOBILE_ELEMENTS { ME_INDEX_SPLIT_ALIGNMENT ( ME_SPLIT_ALIGNMENT.out.bam ) ME_SPLIT_ALIGNMENT.out.bam - .join(ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch: true, failOnDuplicate: true) + .join( ME_INDEX_SPLIT_ALIGNMENT.out.bai, failOnMismatch: true, failOnDuplicate: true ) .set { ch_retroseq_input } ch_me_references @@ -104,7 +104,7 @@ workflow CALL_MOBILE_ELEMENTS { } .set { ch_tbis } - ch_vcfs.join(ch_tbis, failOnMismatch: true) + ch_vcfs.join( ch_tbis, failOnMismatch: true ) .set { ch_vcfs_tbis } // Concatenate the chromosome vcfs to sample vcfs From 76fb0d438d800c9be00d721d08fea322709ff2e0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 20 Jan 2024 10:36:53 +0100 Subject: [PATCH 1549/1921] merge me --- conf/modules/annotate_mobile_elements.config | 4 +- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- modules/local/ensemblvep/main.nf | 80 ------------------- modules/local/ensemblvep/meta.yml | 73 ----------------- .../local/annotate_mobile_elements.nf | 27 ++++--- workflows/raredisease.nf | 3 +- 7 files changed, 21 insertions(+), 170 deletions(-) delete mode 100644 modules/local/ensemblvep/main.nf delete mode 100644 modules/local/ensemblvep/meta.yml diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index 0e04095c..442652a3 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -40,12 +40,12 @@ process { ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - '--plugin pLI,vep_cache/pLI_values_107.txt', + '--plugin pLI,pLI_values_107.txt', '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', - '--no_progress --no_stats --numbers --per_gene --polyphen p', + '--no_progress --numbers --per_gene --polyphen p', '--protein --offline --regulatory --sift p', '--symbol --tsl --uniprot --vcf' ].join(' ') } diff --git a/conf/test.config b/conf/test.config index 1347680d..fd2f873e 100644 --- a/conf/test.config +++ b/conf/test.config @@ -57,6 +57,6 @@ params { vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" - vep_cache_version = 110 + vep_cache_version = 107 vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 12eb9f39..d521a8a3 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -57,6 +57,6 @@ params { vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" - vep_cache_version = 110 + vep_cache_version = 107 vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf deleted file mode 100644 index 81d4191f..00000000 --- a/modules/local/ensemblvep/main.nf +++ /dev/null @@ -1,80 +0,0 @@ -process ENSEMBLVEP { - tag "$meta.id" - label 'process_medium' - - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error("Local VEP module does not support Conda. Please use Docker / Singularity / Podman instead.") - } - - container "docker.io/ensemblorg/ensembl-vep:release_107.0" - - input: - tuple val(meta), path(vcf) - tuple val(meta2), path(fasta) - val genome - val species - val cache_version - path cache - path extra_files - - output: - tuple val(meta), path("*.vcf") , optional:true, emit: vcf - tuple val(meta), path("*.tab") , optional:true, emit: tab - tuple val(meta), path("*.json") , optional:true, emit: json - tuple val(meta), path("*.vcf.gz") , optional:true, emit: vcf_gz - tuple val(meta), path("*.tab.gz") , optional:true, emit: tab_gz - tuple val(meta), path("*.json.gz"), optional:true, emit: json_gz - path "*.summary.html" , optional:true, emit: report - path "versions.yml" , emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json")? 'json' : args.contains("--tab")? 'tab' : 'vcf' - def compress_out = args.contains("--compress_output") ? '.gz' : '' - def prefix = task.ext.prefix ?: "${meta.id}" - def stats_file = args.contains("--no_stats") ? '' : "--stats_file ${prefix}.summary.html" - def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" - def reference = fasta ? "--fasta $fasta" : "" - - """ - vep \\ - -i $vcf \\ - -o ${prefix}.${file_extension}${compress_out} \\ - $args \\ - $reference \\ - --assembly $genome \\ - --species $species \\ - --cache \\ - --cache_version $cache_version \\ - --dir_cache $dir_cache \\ - --fork $task.cpus \\ - ${stats_file} - - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS - """ - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.vcf - touch ${prefix}.tab - touch ${prefix}.json - touch ${prefix}.vcf.gz - touch ${prefix}.tab.gz - touch ${prefix}.json.gz - touch ${prefix}.summary.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') - END_VERSIONS - """ -} diff --git a/modules/local/ensemblvep/meta.yml b/modules/local/ensemblvep/meta.yml deleted file mode 100644 index a4dde8a6..00000000 --- a/modules/local/ensemblvep/meta.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: ENSEMBLVEP -description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled through `task.ext.args`. -keywords: - - annotation -tools: - - ensemblvep: - description: | - VEP determines the effect of your variants (SNPs, insertions, deletions, CNVs - or structural variants) on genes, transcripts, and protein sequence, as well as regulatory regions. - homepage: https://www.ensembl.org/info/docs/tools/vep/index.html - documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html - licence: ["Apache-2.0"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - vcf to annotate - - genome: - type: value - description: | - which genome to annotate with - - species: - type: value - description: | - which species to annotate with - - cache_version: - type: value - description: | - which version of the cache to annotate with - - cache: - type: file - description: | - path to VEP cache (optional) - - fasta: - type: file - description: | - reference FASTA file (optional) - pattern: "*.{fasta,fa}" - - extra_files: - type: tuple - description: | - path to file(s) needed for plugins (optional) -output: - - vcf: - type: file - description: | - annotated vcf (optional) - pattern: "*.ann.vcf" - - tab: - type: file - description: | - tab file with annotated variants (optional) - pattern: "*.ann.tab" - - json: - type: file - description: | - json file with annotated variants (optional) - pattern: "*.ann.json" - - report: - type: file - description: VEP report file - pattern: "*.html" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@maxulysse" diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index 04b15ad2..dc6247bf 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -2,13 +2,12 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' -include { ENSEMBLVEP as ENSEMBLVEP_ME } from '../../modules/local/ensemblvep/main' -include { ENSEMBLVEP_FILTERVEP as FILTERVEP_ME } from '../../modules/nf-core/ensemblvep/filtervep' -include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_FILTER } from '../../modules/nf-core/bcftools/view/main' -include { TABIX_BGZIPTABIX as BGZIP_TABIX_ME } from '../../modules/nf-core/tabix/bgziptabix/main' - +include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { ENSEMBLVEP_VEP as ENSEMBLVEP_ME } from '../../modules/nf-core/ensemblvep/vep/main' +include { ENSEMBLVEP_FILTERVEP as FILTERVEP_ME } from '../../modules/nf-core/ensemblvep/filtervep' +include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_FILTER } from '../../modules/nf-core/bcftools/view/main' +include { TABIX_BGZIPTABIX as BGZIP_TABIX_ME } from '../../modules/nf-core/tabix/bgziptabix/main' include { ANNOTATE_CSQ_PLI as ANNOTATE_CSQ_PLI_ME } from '../../subworkflows/local/annotate_consequence_pli.nf' workflow ANNOTATE_MOBILE_ELEMENTS { @@ -23,6 +22,7 @@ workflow ANNOTATE_MOBILE_ELEMENTS { ch_vep_filters // channel: [mandatory] [ path(vep_filter) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 + ch_vep_extra_files // channel: [mandatory] [ path(files) ] main: ch_versions = Channel.empty() @@ -54,18 +54,21 @@ workflow ANNOTATE_MOBILE_ELEMENTS { ch_genome_fasta, ch_genome_dictionary ) + .vcf + .map { meta, vcf -> return [meta, vcf, []]} + .set { ch_vep_in } ENSEMBLVEP_ME( - PICARD_SORTVCF.out.vcf, - ch_genome_fasta, + ch_vep_in, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, - [] + ch_genome_fasta, + ch_vep_extra_files ) - ENSEMBLVEP_ME.out.vcf_gz + ENSEMBLVEP_ME.out.vcf .map { meta, vcf -> [ meta, vcf, [] ] } @@ -76,7 +79,7 @@ workflow ANNOTATE_MOBILE_ELEMENTS { BCFTOOLS_VIEW_FILTER.out.vcf .multiMap { meta, vcf -> clinical: [ meta + [ set: "clinical" ], vcf ] - research: [ meta + [ set: "research" ], vcf ] + research: [ meta + [ set: "research" ], vcf ] } .set { ch_clin_research_vcf } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e5781c17..0f2a4fe1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -647,7 +647,8 @@ workflow RAREDISEASE { ch_variant_consequences, ch_vep_filters, params.genome, - params.vep_cache_version + params.vep_cache_version, + ch_vep_extra_files ) ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) } From 8b14cd9c441b6b9aab4a3455e18db6755f3b6126 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 20 Jan 2024 16:24:04 +0100 Subject: [PATCH 1550/1921] add rtgtools --- modules.json | 5 + .../nf-core/rtgtools/vcfeval/environment.yml | 7 ++ modules/nf-core/rtgtools/vcfeval/main.nf | 90 ++++++++++++++ modules/nf-core/rtgtools/vcfeval/meta.yml | 112 ++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 modules/nf-core/rtgtools/vcfeval/environment.yml create mode 100644 modules/nf-core/rtgtools/vcfeval/main.nf create mode 100644 modules/nf-core/rtgtools/vcfeval/meta.yml diff --git a/modules.json b/modules.json index 9a1324fd..1c7da4d9 100644 --- a/modules.json +++ b/modules.json @@ -347,6 +347,11 @@ "git_sha": "d73505dd68b27b53b4002e84eea21a2819907562", "installed_by": ["modules"] }, + "rtgtools/vcfeval": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": ["modules"] + }, "samtools/faidx": { "branch": "master", "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe", diff --git a/modules/nf-core/rtgtools/vcfeval/environment.yml b/modules/nf-core/rtgtools/vcfeval/environment.yml new file mode 100644 index 00000000..e3c64996 --- /dev/null +++ b/modules/nf-core/rtgtools/vcfeval/environment.yml @@ -0,0 +1,7 @@ +name: rtgtools_vcfeval +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::rtg-tools=3.12.1 diff --git a/modules/nf-core/rtgtools/vcfeval/main.nf b/modules/nf-core/rtgtools/vcfeval/main.nf new file mode 100644 index 00000000..98f9adb1 --- /dev/null +++ b/modules/nf-core/rtgtools/vcfeval/main.nf @@ -0,0 +1,90 @@ +process RTGTOOLS_VCFEVAL { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/rtg-tools:3.12.1--hdfd78af_0': + 'biocontainers/rtg-tools:3.12.1--hdfd78af_0' }" + + input: + tuple val(meta), path(query_vcf), path(query_vcf_tbi), path(truth_vcf), path(truth_vcf_tbi), path(truth_bed), path(evaluation_bed) + tuple val(meta2), path(sdf) + + output: + tuple val(meta), path("*.tp.vcf.gz") , emit: tp_vcf + tuple val(meta), path("*.tp.vcf.gz.tbi") , emit: tp_tbi + tuple val(meta), path("*.fn.vcf.gz") , emit: fn_vcf + tuple val(meta), path("*.fn.vcf.gz.tbi") , emit: fn_tbi + tuple val(meta), path("*.fp.vcf.gz") , emit: fp_vcf + tuple val(meta), path("*.fp.vcf.gz.tbi") , emit: fp_tbi + tuple val(meta), path("*.tp-baseline.vcf.gz") , emit: baseline_vcf + tuple val(meta), path("*.tp-baseline.vcf.gz.tbi") , emit: baseline_tbi + tuple val(meta), path("*.snp_roc.tsv.gz") , emit: snp_roc + tuple val(meta), path("*.non_snp_roc.tsv.gz") , emit: non_snp_roc + tuple val(meta), path("*.weighted_roc.tsv.gz") , emit: weighted_roc + tuple val(meta), path("*.summary.txt") , emit: summary + tuple val(meta), path("*.phasing.txt") , emit: phasing + 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 bed_regions = truth_bed ? "--bed-regions=${truth_bed}" : "" + def eval_regions = evaluation_bed ? "--evaluation-regions=${evaluation_bed}" : "" + def truth_index = truth_vcf_tbi ? "" : "rtg index ${truth_vcf}" + def query_index = query_vcf_tbi ? "" : "rtg index ${query_vcf}" + def avail_mem = task.memory.toGiga() + "G" + + """ + ${truth_index} + ${query_index} + + rtg RTG_MEM=$avail_mem vcfeval \\ + ${args} \\ + --baseline=${truth_vcf} \\ + ${bed_regions} \\ + ${eval_regions} \\ + --calls=${query_vcf} \\ + --output=output \\ + --template=${sdf} \\ + --threads=${task.cpus} + + cd output/ + mv done progress .. + for f in * ; do mv "\$f" "../${prefix}.\$f" ; done + cd .. + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rtg-tools: \$(echo \$(rtg version | head -n 1 | awk '{print \$4}')) + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + touch ${prefix}.tp.vcf.gz + touch ${prefix}.tp.vcf.gz.tbi + touch ${prefix}.fn.vcf.gz + touch ${prefix}.fn.vcf.gz.tbi + touch ${prefix}.fp.vcf.gz + touch ${prefix}.fp.vcf.gz.tbi + touch ${prefix}.tp-baseline.vcf.gz + touch ${prefix}.tp-baseline.vcf.gz.tbi + touch ${prefix}.snp_roc.tsv.gz + touch ${prefix}.non_snp_roc.tsv.gz + touch ${prefix}.weighted_roc.tsv.gz + touch ${prefix}.summary.txt + touch ${prefix}.phasing.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rtg-tools: \$(echo \$(rtg version | head -n 1 | awk '{print \$4}')) + END_VERSIONS + """ +} diff --git a/modules/nf-core/rtgtools/vcfeval/meta.yml b/modules/nf-core/rtgtools/vcfeval/meta.yml new file mode 100644 index 00000000..f67a35c0 --- /dev/null +++ b/modules/nf-core/rtgtools/vcfeval/meta.yml @@ -0,0 +1,112 @@ +name: "rtgtools_vcfeval" +description: The VCFeval tool of RTG tools. It is used to evaluate called variants for agreement with a baseline variant set +keywords: + - benchmarking + - vcf + - rtg-tools +tools: + - "rtgtools": + description: "RealTimeGenomics Tools -- Utilities for accurate VCF comparison and manipulation" + homepage: "https://www.realtimegenomics.com/products/rtg-tools" + documentation: "https://github.com/RealTimeGenomics/rtg-tools" + tool_dev_url: "https://github.com/RealTimeGenomics/rtg-tools" + licence: "['BSD']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - query_vcf: + type: file + description: A VCF with called variants to benchmark against the standard + pattern: "*.{vcf,vcf.gz}" + - query_vcf_index: + type: file + description: The index of the called VCF (optional) + pattern: "*.tbi" + - truth_vcf: + type: file + description: A standard VCF to compare against + pattern: "*.{vcf,vcf.gz}" + - truth_vcf_index: + type: file + description: The index of the standard VCF (optional) + pattern: "*.tbi" + - truth_bed: + type: file + description: A BED file containining the strict regions where VCFeval should only evaluate the fully overlapping variants (optional) + pattern: "*.bed" + - evaluation_bed: + type: file + description: A BED file containing the regions where VCFeval will evaluate every fully and partially overlapping variant (optional) + pattern: "*.bed" + - sdf: + type: file + description: The SDF (RTG Sequence Data File) folder of the reference genome +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" + - tp_vcf: + type: file + description: A VCF file for the true positive variants + pattern: "*.tp.vcf.gz" + - tp_tbi: + type: file + description: The index of the VCF file for the true positive variants + pattern: "*.tp.vcf.gz.tbi" + - fn_vcf: + type: file + description: A VCF file for the false negative variants + pattern: "*.fn.vcf.gz" + - fn_tbi: + type: file + description: The index of the VCF file for the false negative variants + pattern: "*.fn.vcf.gz.tbi" + - fp_vcf: + type: file + description: A VCF file for the false positive variants + pattern: "*.fp.vcf.gz" + - fp_tbi: + type: file + description: The index of the VCF file for the false positive variants + pattern: "*.fp.vcf.gz.tbi" + - baseline_vcf: + type: file + description: A VCF file for the true positive variants from the baseline + pattern: "*.tp-baseline.vcf.gz" + - baseline_tbi: + type: file + description: The index of the VCF file for the true positive variants from the baseline + pattern: "*.tp-baseline.vcf.gz.tbi" + - snp_roc: + type: file + description: TSV files containing ROC data for the SNPs + pattern: "*.snp_roc.tsv.gz" + - non_snp_roc: + type: file + description: TSV files containing ROC data for all variants except SNPs + pattern: "*.non_snp_roc.tsv.gz" + - weighted_roc: + type: file + description: TSV files containing weighted ROC data for all variants + pattern: "*.weighted_snp_roc.tsv.gz" + - summary: + type: file + description: A TXT file containing the summary of the evaluation + pattern: "*.summary.txt" + - phasing: + type: file + description: A TXT file containing the data on the phasing + pattern: "*.phasing.txt" +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" From da1855f3e4863199f16221bd75918b58b99b8794 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:48:42 +0100 Subject: [PATCH 1551/1921] vcfeval --- assets/rtg_truthvcfs.json | 32 ++++++++++++++++ conf/modules/call_snv.config | 1 - conf/modules/variant_evaluation.config | 30 +++++++++++++++ main.nf | 1 + nextflow.config | 2 + nextflow_schema.json | 16 ++++++++ subworkflows/local/variant_evaluation.nf | 49 ++++++++++++++++++++++++ workflows/raredisease.nf | 22 ++++++++++- 8 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 assets/rtg_truthvcfs.json create mode 100644 conf/modules/variant_evaluation.config create mode 100644 subworkflows/local/variant_evaluation.nf diff --git a/assets/rtg_truthvcfs.json b/assets/rtg_truthvcfs.json new file mode 100644 index 00000000..35e1228e --- /dev/null +++ b/assets/rtg_truthvcfs.json @@ -0,0 +1,32 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", + "title": "Schema for RTGTOOLS/VCFEVAL VCFs", + "description": "Schema for the vcfeval's vcf input", + "type": "array", + "items": { + "type": "object", + "properties": { + "samplename": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Samplename cannot contain spaces" + }, + "vcf": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.vcf(\\.gz)?$", + "errorMessage": "Path to vcf files cannot contain spaces and must be a .vcf or .vcf.gz file" + }, + "bed": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.bed$", + "errorMessage": "Path to bed files cannot contain spaces" + } + }, + "required": ["vcf", "samplename", "bed"] + } +} diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config index 17926228..51f7a56f 100644 --- a/conf/modules/call_snv.config +++ b/conf/modules/call_snv.config @@ -22,7 +22,6 @@ process { withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { ext.args = "--exclude-intervals ${params.mito_name}" ext.prefix = { "${meta.id}_nomito" } - ext.when = { !params.skip_snv_annotation } publishDir = [ path: { "${params.outdir}/call_snv/genome" }, mode: params.publish_dir_mode, diff --git a/conf/modules/variant_evaluation.config b/conf/modules/variant_evaluation.config new file mode 100644 index 00000000..04ea6baa --- /dev/null +++ b/conf/modules/variant_evaluation.config @@ -0,0 +1,30 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Evaluate variants +// + +process { + withName: '.*VARIANT_EVALUATION.*' { + ext.when = { params.run_rtgvcfeval } + } + + withName: '.*VARIANT_EVALUATION:BCFTOOLS_REHEADER' { + beforeScript = { "echo ${meta.id} > ${meta.id}.txt" } + ext.args = { "--samples ${meta.id}.txt" } + ext.args2 = "--output-type z" + ext.when = { params.run_rtgvcfeval } + ext.prefix = { "${meta.id}_truthvcf" } + } +} diff --git a/main.nf b/main.nf index 0ebf4e51..ef782474 100644 --- a/main.nf +++ b/main.nf @@ -39,6 +39,7 @@ params.ngsbits_samplegender_method = WorkflowMain.getGenomeAttribute(params, 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.rtg_truthvcfs = WorkflowMain.getGenomeAttribute(params, 'rtg_truthvcfs') params.sequence_dictionary = WorkflowMain.getGenomeAttribute(params, 'sequence_dictionary') params.score_config_mt = WorkflowMain.getGenomeAttribute(params, 'score_config_mt') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') diff --git a/nextflow.config b/nextflow.config index 9634ad31..ecf0291d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,6 +23,7 @@ params { // Main options analysis_type = 'wgs' bait_padding = 100 + run_rtgvcfeval = false save_mapped_as_cram = false skip_eklipse = false skip_fastp = false @@ -334,6 +335,7 @@ includeConfig 'conf/modules/call_sv_tiddit.config' includeConfig 'conf/modules/postprocess_MT_calls.config' includeConfig 'conf/modules/call_mobile_elements.config' includeConfig 'conf/modules/annotate_mobile_elements.config' +includeConfig 'conf/modules/variant_evaluation.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 853d3774..68558759 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -271,6 +271,17 @@ "fa_icon": "fas fa-file-csv", "description": "File with gene ids that have reduced penetrance. For use with genmod" }, + "rtg_truthvcfs": { + "type": "string", + "exists": true, + "format": "file-path", + "description": "Vcf used for evaluating variant calls.", + "fa_icon": "fas fa-file-csv", + "help_text": "Path to comma-separated file containing information about the truth vcf files used by vcfeval.", + "pattern": "^\\S+\\.csv$", + "mimetype": "text/csv", + "schema": "assets/rtg_truthvcfs.json" + }, "save_reference": { "type": "boolean", "description": "If generated by the pipeline save the required indices/references in the results directory.", @@ -425,6 +436,11 @@ "description": "Method selection for ngs-bits samplegender", "fa_icon": "fas fa-align-center" }, + "run_rtgvcfeval": { + "type": "boolean", + "description": "Specifies whether to run rtgtools' vcfeval", + "fa_icon": "fas fa-toggle-on" + }, "save_mapped_as_cram": { "type": "boolean", "description": "Specifies whether to generate and publish alignment files as cram instead of bam", diff --git a/subworkflows/local/variant_evaluation.nf b/subworkflows/local/variant_evaluation.nf new file mode 100644 index 00000000..f0307484 --- /dev/null +++ b/subworkflows/local/variant_evaluation.nf @@ -0,0 +1,49 @@ +// +// A subworkflow to evaluate variants using truth vcfs. +// + +include { RTGTOOLS_VCFEVAL } from '../../modules/nf-core/rtgtools/vcfeval/main' +include { BCFTOOLS_REHEADER } from '../../modules/nf-core/bcftools/reheader/main' +include { TABIX_TABIX as TABIX_TRUTHVCF } from '../../modules/nf-core/tabix/tabix/main' + +workflow VARIANT_EVALUATION { + + take: + ch_snv_vcf_tbi // channel: [mandatory] [ val(meta), path(vcf) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_rtg_truthvcfs // channel: [mandatory] [ val(meta), path(dbs) ] + + main: + ch_versions = Channel.empty() + + ch_rtg_truthvcfs + .splitCsv ( header:true ) + .map { row -> + return [[id:row.samplename[0], bed:row.bed[0]], row.vcf[0], []] + } + .set { ch_rtgvcfs_dbs } + + BCFTOOLS_REHEADER (ch_rtgvcfs_dbs, [[:],[]]) + + TABIX_TRUTHVCF (BCFTOOLS_REHEADER.out.vcf) + + BCFTOOLS_REHEADER.out.vcf + .join(TABIX_TRUTHVCF.out.tbi) + .map { meta, vcf, tbi -> return [vcf, tbi, meta.bed]} + .set { ch_truthvcf_tbi } + + ch_snv_vcf_tbi + .combine(ch_truthvcf_tbi) + .map { meta, query, qidx, truth, tidx, tbed -> + return [meta, query, qidx, truth, tidx, tbed, []] + } + .set { ch_vcfeval_in } + + RTGTOOLS_VCFEVAL ( ch_vcfeval_in ) + + // ch_versions = ch_versions.mix(BUILD_BED.out.versions) + // ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) + + emit: + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9481b930..63205007 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -34,6 +34,10 @@ def mandatoryParams = [ ] def missingParamsCount = 0 +if (params.run_rtgvcfeval) { + mandatoryParams += ["rtg_truthvcfs"] +} + if (!params.skip_snv_annotation) { mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version", "gnomad_af", "score_config_snv"] @@ -126,6 +130,7 @@ include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/an include { ANNOTATE_MOBILE_ELEMENTS } from '../subworkflows/local/annotate_mobile_elements' include { ANNOTATE_MT_SNVS } from '../subworkflows/local/annotate_mt_snvs' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { CALL_MOBILE_ELEMENTS } from '../subworkflows/local/call_mobile_elements' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' @@ -138,8 +143,7 @@ include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/ra include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' -include { CALL_MOBILE_ELEMENTS } from '../subworkflows/local/call_mobile_elements' - +include { VARIANT_EVALUATION } from '../subworkflows/local/variant_evaluation' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -268,6 +272,8 @@ workflow RAREDISEASE { : ( ch_references.readcount_intervals ?: Channel.empty() ) ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) + ch_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() + : Channel.value([]) ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() @@ -397,6 +403,18 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) + // + // VARIANT EVALUATION + // + CALL_SNV.out.genome_vcf_tabix.view() + if (params.run_rtgvcfeval) { + VARIANT_EVALUATION ( + CALL_SNV.out.genome_vcf_tabix, + ch_genome_fai, + ch_rtg_truthvcfs + ) + } + // // SV CALLING // From 2559c22eb955f3d71485e0c7c5ca2c91f11279f4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 21 Jan 2024 13:54:19 +0100 Subject: [PATCH 1552/1921] add format --- modules.json | 5 ++ .../nf-core/rtgtools/format/environment.yml | 7 ++ modules/nf-core/rtgtools/format/main.nf | 66 +++++++++++++++++++ modules/nf-core/rtgtools/format/meta.yml | 51 ++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 modules/nf-core/rtgtools/format/environment.yml create mode 100644 modules/nf-core/rtgtools/format/main.nf create mode 100644 modules/nf-core/rtgtools/format/meta.yml diff --git a/modules.json b/modules.json index 1c7da4d9..0231c254 100644 --- a/modules.json +++ b/modules.json @@ -347,6 +347,11 @@ "git_sha": "d73505dd68b27b53b4002e84eea21a2819907562", "installed_by": ["modules"] }, + "rtgtools/format": { + "branch": "master", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "installed_by": ["modules"] + }, "rtgtools/vcfeval": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", diff --git a/modules/nf-core/rtgtools/format/environment.yml b/modules/nf-core/rtgtools/format/environment.yml new file mode 100644 index 00000000..15b3df5b --- /dev/null +++ b/modules/nf-core/rtgtools/format/environment.yml @@ -0,0 +1,7 @@ +name: rtgtools_format +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::rtg-tools=3.12.1 diff --git a/modules/nf-core/rtgtools/format/main.nf b/modules/nf-core/rtgtools/format/main.nf new file mode 100644 index 00000000..802d3b20 --- /dev/null +++ b/modules/nf-core/rtgtools/format/main.nf @@ -0,0 +1,66 @@ +process RTGTOOLS_FORMAT { + tag "$meta.id" + label 'process_low' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/rtg-tools:3.12.1--hdfd78af_0': + 'biocontainers/rtg-tools:3.12.1--hdfd78af_0' }" + + input: + tuple val(meta), path(input1), path(input2), path(sam_rg) + + output: + tuple val(meta), path("*.sdf"), emit: sdf + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def single = meta.containsKey("single_end") ? meta.single_end : true + + def input = single ? "${input1}" : "--left ${input1} --right ${input2}" + def rg = sam_rg ? "--sam-rg ${sam_rg}" : "" + + def avail_mem = "3G" + if (!task.memory) { + log.info '[RTG format] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + "M" + } + + """ + rtg RTG_MEM=${avail_mem} format \\ + ${args} \\ + ${rg} \\ + --output ${prefix}.sdf \\ + ${input} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rtg-tools: \$(echo \$(rtg version | head -n 1 | awk '{print \$4}')) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + def avail_mem = "3G" + if (!task.memory) { + log.info '[RTG format] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + "M" + } + """ + touch ${prefix}.sdf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rtg-tools: \$(echo \$(rtg version | head -n 1 | awk '{print \$4}')) + END_VERSIONS + """ +} diff --git a/modules/nf-core/rtgtools/format/meta.yml b/modules/nf-core/rtgtools/format/meta.yml new file mode 100644 index 00000000..8ed18f54 --- /dev/null +++ b/modules/nf-core/rtgtools/format/meta.yml @@ -0,0 +1,51 @@ +name: "rtgtools_format" +description: Converts the contents of sequence data files (FASTA/FASTQ/SAM/BAM) into the RTG Sequence Data File (SDF) format. +keywords: + - rtg + - fasta + - fastq + - bam + - sam +tools: + - "rtgtools": + description: "RealTimeGenomics Tools -- Utilities for accurate VCF comparison and manipulation" + homepage: "https://www.realtimegenomics.com/products/rtg-tools" + documentation: "https://github.com/RealTimeGenomics/rtg-tools" + tool_dev_url: "https://github.com/RealTimeGenomics/rtg-tools" + licence: "['BSD']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input1: + type: file + description: FASTA, FASTQ, BAM or SAM file. This should be the left input file when using paired end FASTQ/FASTA data + pattern: "*.{fasta,fa,fna,fastq,fastq.gz,fq,fq.gz,bam,sam}" + - input2: + type: file + description: The right input file when using paired end FASTQ/FASTA data + pattern: "*.{fasta,fa,fna,fastq,fastq.gz,fq,fq.gz}" + - sam_rg: + type: file + description: A file containing a single readgroup header as a SAM header. This can also be supplied as a string in `task.ext.args` as `--sam-rg `. + pattern: "*.{txt,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - sdf: + type: directory + description: The sequence dictionary format folder created from the input file(s) + pattern: "*.sdf" +authors: + - "@nvnieuwk" +maintainers: + - "@nvnieuwk" From 681885ddcbfac349764f615c1cd6fc4ccbcb8b74 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 21 Jan 2024 16:53:01 +0100 Subject: [PATCH 1553/1921] rtg format --- conf/modules/prepare_references.config | 4 ++++ conf/modules/variant_evaluation.config | 18 +++++++++++++++--- subworkflows/local/prepare_references.nf | 6 +++++- subworkflows/local/variant_evaluation.nf | 12 ++++++------ workflows/raredisease.nf | 8 ++++---- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 39a0a807..3721d220 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -53,6 +53,10 @@ process { ext.when = {!params.fai} } + withName: '.*PREPARE_REFERENCES:RTGTOOLS_FORMAT' { + ext.when = { !params.sdf && params.run_rtgvcfeval } + } + withName: '.*PREPARE_REFERENCES:SAMTOOLS_EXTRACT_MT' { ext.args = { " ${params.mito_name} -o ${meta.id}_mt.fa" } ext.when = {!params.mt_fasta} diff --git a/conf/modules/variant_evaluation.config b/conf/modules/variant_evaluation.config index 04ea6baa..4059b3a7 100644 --- a/conf/modules/variant_evaluation.config +++ b/conf/modules/variant_evaluation.config @@ -21,10 +21,22 @@ process { } withName: '.*VARIANT_EVALUATION:BCFTOOLS_REHEADER' { - beforeScript = { "echo ${meta.id} > ${meta.id}.txt" } - ext.args = { "--samples ${meta.id}.txt" } + beforeScript = { "echo ${meta.samplename} > ${meta.samplename}.txt" } + ext.args = { "--samples ${meta.samplename}.txt" } ext.args2 = "--output-type z" ext.when = { params.run_rtgvcfeval } - ext.prefix = { "${meta.id}_truthvcf" } + ext.prefix = { "${meta.samplename}_truthvcf" } } + + withName: '.*VARIANT_EVALUATION:RTGTOOLS_VCFEVAL' { + ext.args = { "--sample ${meta.samplename} --output-mode=split" } + ext.when = { params.run_rtgvcfeval } + ext.prefix = { "${meta.samplename}_vcfeval" } + publishDir = [ + path: { "${params.outdir}/rtgvcfeval" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index bacde149..b98b89d1 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -15,6 +15,7 @@ include { GATK4_PREPROCESSINTERVALS as GATK_PREPROCESS_WGS } from '../../modul 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 { RTGTOOLS_FORMAT } from '../../modules/nf-core/rtgtools/format/main' 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_MT_SHIFT } from '../../modules/nf-core/samtools/faidx/main' @@ -51,6 +52,8 @@ workflow PREPARE_REFERENCES { GATK_SD(ch_genome_fasta) ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() GET_CHROM_SIZES( ch_fai ) + ch_genome_fasta.map {meta, fasta -> return [meta, fasta, [], [] ]}.set {ch_rtgformat_in} + RTGTOOLS_FORMAT(ch_rtgformat_in) // MT indices SAMTOOLS_EXTRACT_MT(ch_genome_fasta, ch_fai) @@ -120,6 +123,7 @@ workflow PREPARE_REFERENCES { 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) + ch_versions = ch_versions.mix(RTGTOOLS_FORMAT.out.versions) emit: genome_bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] @@ -129,7 +133,7 @@ workflow PREPARE_REFERENCES { 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) ] - + sdf = RTGTOOLS_FORMAT.out.sdf // channel: [ val (meta), path(intervals) ] 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) ] diff --git a/subworkflows/local/variant_evaluation.nf b/subworkflows/local/variant_evaluation.nf index f0307484..f92dcd20 100644 --- a/subworkflows/local/variant_evaluation.nf +++ b/subworkflows/local/variant_evaluation.nf @@ -9,9 +9,10 @@ include { TABIX_TABIX as TABIX_TRUTHVCF } from '../../modules/nf-core/tabix/t workflow VARIANT_EVALUATION { take: - ch_snv_vcf_tbi // channel: [mandatory] [ val(meta), path(vcf) ] + ch_snv_vcf_tbi // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_rtg_truthvcfs // channel: [mandatory] [ val(meta), path(dbs) ] + ch_sdf // channel: [mandatory] [ val(meta), path(sdf) ] main: ch_versions = Channel.empty() @@ -19,7 +20,7 @@ workflow VARIANT_EVALUATION { ch_rtg_truthvcfs .splitCsv ( header:true ) .map { row -> - return [[id:row.samplename[0], bed:row.bed[0]], row.vcf[0], []] + return [[samplename:row.samplename[0], bed:row.bed[0]], row.vcf[0], []] } .set { ch_rtgvcfs_dbs } @@ -29,17 +30,16 @@ workflow VARIANT_EVALUATION { BCFTOOLS_REHEADER.out.vcf .join(TABIX_TRUTHVCF.out.tbi) - .map { meta, vcf, tbi -> return [vcf, tbi, meta.bed]} .set { ch_truthvcf_tbi } ch_snv_vcf_tbi .combine(ch_truthvcf_tbi) - .map { meta, query, qidx, truth, tidx, tbed -> - return [meta, query, qidx, truth, tidx, tbed, []] + .map { meta, query, qidx, meta2, truth, tidx -> + return [meta + [samplename: meta2.samplename] , query, qidx, truth, tidx, meta2.bed, []] } .set { ch_vcfeval_in } - RTGTOOLS_VCFEVAL ( ch_vcfeval_in ) + RTGTOOLS_VCFEVAL ( ch_vcfeval_in, ch_sdf ) // ch_versions = ch_versions.mix(BUILD_BED.out.versions) // ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 63205007..8ddccb1f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -254,7 +254,7 @@ workflow RAREDISEASE { : Channel.empty() ch_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") : Channel.empty() - ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) + ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) : Channel.empty() ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.value([[:],[]]) @@ -280,6 +280,7 @@ workflow RAREDISEASE { : Channel.value([]) ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() : Channel.value([]) + ch_sdf = ch_references.sdf ch_sv_dbs = params.svdb_query_dbs ? Channel.fromPath(params.svdb_query_dbs) : Channel.empty() ch_sv_bedpedbs = params.svdb_query_bedpedbs ? Channel.fromPath(params.svdb_query_bedpedbs) @@ -303,7 +304,6 @@ workflow RAREDISEASE { : Channel.value([]) ch_versions = ch_versions.mix(ch_references.versions) - // SV caller priority if (params.skip_germlinecnvcaller) { ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) @@ -406,12 +406,12 @@ workflow RAREDISEASE { // // VARIANT EVALUATION // - CALL_SNV.out.genome_vcf_tabix.view() if (params.run_rtgvcfeval) { VARIANT_EVALUATION ( CALL_SNV.out.genome_vcf_tabix, ch_genome_fai, - ch_rtg_truthvcfs + ch_rtg_truthvcfs, + ch_sdf ) } From e64f431425c869ef1441dd98b195942c10887c5e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:35:19 +0100 Subject: [PATCH 1554/1921] add sdf --- assets/rtg_truthvcfs.json | 4 ++-- main.nf | 1 + nextflow_schema.json | 8 ++++++++ subworkflows/local/variant_evaluation.nf | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/assets/rtg_truthvcfs.json b/assets/rtg_truthvcfs.json index 35e1228e..3c3fe1db 100644 --- a/assets/rtg_truthvcfs.json +++ b/assets/rtg_truthvcfs.json @@ -19,7 +19,7 @@ "pattern": "^\\S+\\.vcf(\\.gz)?$", "errorMessage": "Path to vcf files cannot contain spaces and must be a .vcf or .vcf.gz file" }, - "bed": { + "bedregions": { "type": "string", "format": "file-path", "exists": true, @@ -27,6 +27,6 @@ "errorMessage": "Path to bed files cannot contain spaces" } }, - "required": ["vcf", "samplename", "bed"] + "required": ["vcf", "samplename", "bedregions"] } } diff --git a/main.nf b/main.nf index ef782474..aebcea25 100644 --- a/main.nf +++ b/main.nf @@ -44,6 +44,7 @@ params.sequence_dictionary = WorkflowMain.getGenomeAttribute(params, params.score_config_mt = WorkflowMain.getGenomeAttribute(params, 'score_config_mt') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') +params.sdf = WorkflowMain.getGenomeAttribute(params, 'sdf') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.min_trimmed_length = WorkflowMain.getGenomeAttribute(params, 'min_trimmed_length') diff --git a/nextflow_schema.json b/nextflow_schema.json index 68558759..5c77956e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -309,6 +309,14 @@ "fa_icon": "fas fa-file", "description": "SV rank model config file for genmod." }, + "sdf": { + "type": "string", + "exists": true, + "format": "directory-path", + "description": "Directory for pre-built sdf index. Used by rtg/vcfeval", + "help_text": "If none provided, will be generated automatically from the FASTA reference.", + "fa_icon": "fas fa-folder-open" + }, "sequence_dictionary": { "type": "string", "exists": true, diff --git a/subworkflows/local/variant_evaluation.nf b/subworkflows/local/variant_evaluation.nf index f92dcd20..8d550cdf 100644 --- a/subworkflows/local/variant_evaluation.nf +++ b/subworkflows/local/variant_evaluation.nf @@ -20,7 +20,7 @@ workflow VARIANT_EVALUATION { ch_rtg_truthvcfs .splitCsv ( header:true ) .map { row -> - return [[samplename:row.samplename[0], bed:row.bed[0]], row.vcf[0], []] + return [[samplename:row.samplename[0], bedregions:row.bedregions[0]], row.vcf[0], []] } .set { ch_rtgvcfs_dbs } From 4c6851e0b85cf9ee58e43a1767f47a935da4d243 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:01:31 +0100 Subject: [PATCH 1555/1921] update module --- modules.json | 2 +- modules/nf-core/ensemblvep/vep/main.nf | 5 +- .../nf-core/ensemblvep/vep/tests/main.nf.test | 102 ++++++++++++++++++ .../ensemblvep/vep/tests/nextflow.config | 13 +++ .../ensemblvep/vep/tests/tab.gz.config | 5 + modules/nf-core/ensemblvep/vep/tests/tags.yml | 2 + .../nf-core/ensemblvep/vep/tests/vcf.config | 5 + 7 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/ensemblvep/vep/tests/main.nf.test create mode 100644 modules/nf-core/ensemblvep/vep/tests/nextflow.config create mode 100644 modules/nf-core/ensemblvep/vep/tests/tab.gz.config create mode 100644 modules/nf-core/ensemblvep/vep/tests/tags.yml create mode 100644 modules/nf-core/ensemblvep/vep/tests/vcf.config diff --git a/modules.json b/modules.json index eac809df..03000a35 100644 --- a/modules.json +++ b/modules.json @@ -117,7 +117,7 @@ }, "ensemblvep/vep": { "branch": "master", - "git_sha": "214d575774c172062924ad3564b4f66655600730", + "git_sha": "76a0696a60c41c57fc5f6040ac31b11ce5d4d8dd", "installed_by": ["modules"] }, "expansionhunter": { diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index 3a2b7423..a7fc5ad1 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -20,7 +20,7 @@ process ENSEMBLVEP_VEP { tuple val(meta), path("*.vcf.gz") , optional:true, emit: vcf tuple val(meta), path("*.tab.gz") , optional:true, emit: tab tuple val(meta), path("*.json.gz") , optional:true, emit: json - path "*.summary.html" , emit: report + path "*.summary.html" , optional:true, emit: report path "versions.yml" , emit: versions when: @@ -45,8 +45,7 @@ process ENSEMBLVEP_VEP { --cache \\ --cache_version $cache_version \\ --dir_cache $dir_cache \\ - --fork $task.cpus \\ - --stats_file ${prefix}.summary.html \\ + --fork $task.cpus cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test b/modules/nf-core/ensemblvep/vep/tests/main.nf.test new file mode 100644 index 00000000..f072dcab --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test @@ -0,0 +1,102 @@ +nextflow_process { + + name "Test Process ENSEMBLVEP_VEP" + script "modules/nf-core/ensemblvep/vep/main.nf" + process "ENSEMBLVEP_VEP" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "ensemblvep" + tag "ensemblvep/vep" + tag "ensemblvep/download" + + + test("test_ensemblvep_vep_fasta_vcf") { + + config "./vcf.config" + + setup { + run("ENSEMBLVEP_DOWNLOAD") { + script "../../download/main.nf" + process { + """ + input[0] = Channel.of([[id:"${params.vep_cache_version}_${params.vep_genome}"], params.vep_genome, params.vep_species, params.vep_cache_version]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + [] + ]) + input[1] = params.vep_genome + input[2] = params.vep_species + input[3] = params.vep_cache_version + input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } + input[5] = Channel.value([ + [id:"fasta"], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ]) + input[6] = [] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + } + + test("test_ensemblvep_vep_fasta_tab_gz") { + + config "./tab.gz.config" + + setup { + run("ENSEMBLVEP_DOWNLOAD") { + script "../../download/main.nf" + process { + """ + input[0] = Channel.of([[id:"${params.vep_cache_version}_${params.vep_genome}"], params.vep_genome, params.vep_species, params.vep_cache_version]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + [] + ]) + input[1] = params.vep_genome + input[2] = params.vep_species + input[3] = params.vep_cache_version + input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } + input[5] = Channel.value([ + [id:"fasta"], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ]) + input[6] = [] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v110.0")} + ) + } + } +} diff --git a/modules/nf-core/ensemblvep/vep/tests/nextflow.config b/modules/nf-core/ensemblvep/vep/tests/nextflow.config new file mode 100644 index 00000000..cfaef733 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/nextflow.config @@ -0,0 +1,13 @@ +params { + vep_cache_version = "110" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" +} + +process { + + withName: ENSEMBLVEP_DOWNLOAD { + ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + } + +} diff --git a/modules/nf-core/ensemblvep/vep/tests/tab.gz.config b/modules/nf-core/ensemblvep/vep/tests/tab.gz.config new file mode 100644 index 00000000..40eb03e5 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/tab.gz.config @@ -0,0 +1,5 @@ +process { + withName: ENSEMBLVEP_VEP { + ext.args = '--tab --compress_output bgzip' + } +} diff --git a/modules/nf-core/ensemblvep/vep/tests/tags.yml b/modules/nf-core/ensemblvep/vep/tests/tags.yml new file mode 100644 index 00000000..4aa4aa45 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/tags.yml @@ -0,0 +1,2 @@ +ensemblvep/vep: + - "modules/nf-core/ensemblvep/vep/**" diff --git a/modules/nf-core/ensemblvep/vep/tests/vcf.config b/modules/nf-core/ensemblvep/vep/tests/vcf.config new file mode 100644 index 00000000..ad8955a3 --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/vcf.config @@ -0,0 +1,5 @@ +process { + withName: ENSEMBLVEP_VEP { + ext.args = '--vcf' + } +} From ab36f9bb30c31095924129413186fedafb8b1958 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 22 Jan 2024 11:49:48 +0100 Subject: [PATCH 1556/1921] refactoring clinical research split --- conf/modules/annotate_consequence_pli.config | 33 ++---- conf/modules/annotate_mobile_elements.config | 7 +- conf/modules/generate_clinical_set.config | 76 ++++++++++++ conf/modules/rank_variants.config | 48 +++++--- conf/modules/raredisease.config | 62 ---------- nextflow.config | 1 + .../local/annotate_consequence_pli.nf | 4 +- .../local/annotate_mobile_elements.nf | 44 +++---- subworkflows/local/generate_clinical_set.nf | 45 ++++++++ workflows/raredisease.nf | 108 ++++++++---------- 10 files changed, 234 insertions(+), 194 deletions(-) create mode 100644 conf/modules/generate_clinical_set.config create mode 100644 subworkflows/local/generate_clinical_set.nf diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index 7fde1038..e9451357 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -21,20 +21,15 @@ process { } withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_genome_vep_csq" } + ext.prefix = { "${meta.id}_sv_csq_${meta.set}" } } withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_genome_vep_csq_pli" } + ext.prefix = { "${meta.id}_sv_csq_pli_${meta.set}" } } withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_genome_vep_csq_pli" } - publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + ext.prefix = { "${meta.id}_sv_csq_pli_${meta.set}" } } } } @@ -49,20 +44,15 @@ process { } withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_vep_csq" } + ext.prefix = { "${meta.id}_snv_csq_${meta.set}" } } withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_vep_csq_pli" } + ext.prefix = { "${meta.id}_snv_csq_pli_${meta.set}" } } withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_vep_csq_pli" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + ext.prefix = { "${meta.id}_snv_csq_pli_${meta.set}" } } } } @@ -77,20 +67,15 @@ process { } withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_mt_vep_csq" } + ext.prefix = { "${meta.id}_mt_csq_${meta.set}" } } withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_mt_vep_csq_pli" } + ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } } withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_mt_vep_csq_pli" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] + ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } } } } diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index 0e04095c..14992db2 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -58,12 +58,17 @@ process { ext.prefix = { "${meta.id}_filter" } } - withName: '.*ANNOTATE_MOBILE_ELEMENTS:FILTERVEP_ME' { + withName: '.*:ANNOTATE_MOBILE_ELEMENTS:GENERATE_CLINICAL_SET_ME:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_me_${meta.set}" } ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } + withName: '.*:ANNOTATE_MOBILE_ELEMENTS:GENERATE_CLINICAL_SET_ME:TABIX_BGZIP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_me_${meta.set}" } + } + withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:ADD_MOST_SEVERE_CSQ' { ext.prefix = { "${meta.id}_me_csq_${meta.set}" } } diff --git a/conf/modules/generate_clinical_set.config b/conf/modules/generate_clinical_set.config new file mode 100644 index 00000000..8de8d594 --- /dev/null +++ b/conf/modules/generate_clinical_set.config @@ -0,0 +1,76 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Filter out clinical and research variants +// + +// SNVs + +process { + withName: '.*:GENERATE_CLINICAL_SET_SNV:ENSEMBLVEP_FILTERVEP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_snv_${meta.set}" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + } + + withName: '.*:GENERATE_CLINICAL_SET_SNV:TABIX_BGZIP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_snv_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + +// SVs + +process { + withName: '.*:GENERATE_CLINICAL_SET_SV:ENSEMBLVEP_FILTERVEP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_sv_${meta.set}" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + } + + withName: '.*:GENERATE_CLINICAL_SET_SV:TABIX_BGZIP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_sv_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + +// MT variants + +process { + withName: '.*:GENERATE_CLINICAL_SET_MT:ENSEMBLVEP_FILTERVEP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_mt_${meta.set}" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + } + + withName: '.*:GENERATE_CLINICAL_SET_MT:TABIX_BGZIP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_mt_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 65da5cc3..b65d55ab 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -24,22 +24,30 @@ process { } withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' - } + ext.prefix = { "${meta.id}_sv_genmod_annotate_${meta.set}" } + ext.args = { [ + '--annotate_regions', + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + ].join(' ') } + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_snv_genmod_models_${meta.set}" } + ext.args = " --whole_gene " } withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + ext.prefix = { "${meta.id}_sv_genmod_score_${meta.set}" } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_ranked_sv" } + ext.prefix = { "${meta.id}_sv_genmod_compound_${meta.set}" } } withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { ext.args = "--output-type z" - ext.prefix = { "${meta.id}_ranked_sv" } + ext.prefix = { "${meta.id}_sv_ranked_${meta.set}" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, @@ -75,21 +83,25 @@ process { } withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' - } + ext.prefix = { "${meta.id}_snv_genmod_annotate_${meta.set}" } + ext.args = { [ + '--annotate_regions', + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + ].join(' ') } } withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_snv_genmod_models_${meta.set}" } ext.args = " --whole_gene " } withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { + ext.prefix = { "${meta.id}_snv_genmod_score_${meta.set}" } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_ranked_snv" } + ext.prefix = { "${meta.id}_snv_genmod_compound_${meta.set}" } } withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { @@ -97,7 +109,7 @@ process { } withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIP' { - ext.prefix = { "${meta.id}_ranked_snv" } + ext.prefix = { "${meta.id}_snv_ranked_${meta.set}" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, @@ -122,28 +134,32 @@ process { process { if (!params.skip_mt_annotation) { withName: '.*RANK_VARIANTS_MT:.*' { - ext.when = !params.skip_snv_annotation + ext.when = !params.skip_mt_annotation publishDir = [ enabled: false ] } withName: '.*RANK_VARIANTS_MT:GENMOD_ANNOTATE' { - ext.args = { - (params.genome == 'GRCh37') ? '--annotate_regions --genome-build 37' : '--annotate_regions --genome-build 38' - } + ext.prefix = { "${meta.id}_mt_genmod_annotate_${meta.set}" } + ext.args = { [ + '--annotate_regions', + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + ].join(' ') } } withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_mt_genmod_models_${meta.set}" } ext.args = " --whole_gene " } withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { + ext.prefix = { "${meta.id}_mt_genmod_score_${meta.set}" } ext.args = " --rank_results " } withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_ranked_mt" } + ext.prefix = { "${meta.id}_mt_genmod_compound_${meta.set}" } } withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { @@ -151,7 +167,7 @@ process { } withName: '.*RANK_VARIANTS_MT:TABIX_BGZIP' { - ext.prefix = { "${meta.id}_ranked_mt" } + ext.prefix = { "${meta.id}_mt_ranked_${meta.set}" } publishDir = [ path: { "${params.outdir}/rank_and_filter" }, mode: params.publish_dir_mode, diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 6287348e..2eae1c58 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -43,8 +43,6 @@ process { } } - - // // Smncopynumbercaller options // @@ -63,66 +61,6 @@ process { } } -// -// Filter out clincal and research variants -// - -process { - - withName: '.*FILTERVEP_SNV' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_clinical_snv" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } - } - - withName: '.*BGZIPTABIX_SNV' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_clinical_snv" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -process { - - withName: '.*FILTERVEP_SV' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_clinical_sv" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } - } - - withName: '.*BGZIPTABIX_SV' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_clinical_sv" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - -process { - withName: '.*FILTERVEP_MT' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_clinical_mt" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } - } - - withName: '.*BGZIPTABIX_MT' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_clinical_mt" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} - // // Multiqc options // diff --git a/nextflow.config b/nextflow.config index 9634ad31..1348548f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -334,6 +334,7 @@ includeConfig 'conf/modules/call_sv_tiddit.config' includeConfig 'conf/modules/postprocess_MT_calls.config' includeConfig 'conf/modules/call_mobile_elements.config' includeConfig 'conf/modules/annotate_mobile_elements.config' +includeConfig 'conf/modules/generate_clinical_set.config' // Function to ensure that resource requirements don't go beyond // a maximum limit diff --git a/subworkflows/local/annotate_consequence_pli.nf b/subworkflows/local/annotate_consequence_pli.nf index b84d948f..5b625a7b 100644 --- a/subworkflows/local/annotate_consequence_pli.nf +++ b/subworkflows/local/annotate_consequence_pli.nf @@ -25,7 +25,7 @@ workflow ANNOTATE_CSQ_PLI { ch_versions = ch_versions.mix(TABIX_BGZIPTABIX.out.versions) emit: - vcf_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, vcf ] }.collect() // channel: [ val(meta), path(vcf) ] - tbi_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, tbi ] }.collect() // channel: [ val(meta), path(tbi) ] + vcf_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, vcf ] } // channel: [ val(meta), path(vcf) ] + tbi_ann = TABIX_BGZIPTABIX.out.gz_tbi.map { meta, vcf, tbi -> return [ meta, tbi ] } // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index 04b15ad2..bcc8662c 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -2,14 +2,14 @@ // A subworkflow to annotate structural variants. // -include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' -include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' -include { ENSEMBLVEP as ENSEMBLVEP_ME } from '../../modules/local/ensemblvep/main' -include { ENSEMBLVEP_FILTERVEP as FILTERVEP_ME } from '../../modules/nf-core/ensemblvep/filtervep' include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_FILTER } from '../../modules/nf-core/bcftools/view/main' +include { ENSEMBLVEP as ENSEMBLVEP_ME } from '../../modules/local/ensemblvep/main' +include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' +include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' include { TABIX_BGZIPTABIX as BGZIP_TABIX_ME } from '../../modules/nf-core/tabix/bgziptabix/main' -include { ANNOTATE_CSQ_PLI as ANNOTATE_CSQ_PLI_ME } from '../../subworkflows/local/annotate_consequence_pli.nf' +include { ANNOTATE_CSQ_PLI as ANNOTATE_CSQ_PLI_ME } from '../../subworkflows/local/annotate_consequence_pli.nf' +include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_ME } from '../../subworkflows/local/generate_clinical_set.nf' workflow ANNOTATE_MOBILE_ELEMENTS { @@ -71,36 +71,24 @@ workflow ANNOTATE_MOBILE_ELEMENTS { } .set { ch_bcftools_filter_input } - BCFTOOLS_VIEW_FILTER ( ch_bcftools_filter_input, [], [], [] ) + BCFTOOLS_VIEW_FILTER( ch_bcftools_filter_input, [], [], [] ) - BCFTOOLS_VIEW_FILTER.out.vcf - .multiMap { meta, vcf -> - clinical: [ meta + [ set: "clinical" ], vcf ] - research: [ meta + [ set: "research" ], vcf ] - } - .set { ch_clin_research_vcf } - - FILTERVEP_ME( - ch_clin_research_vcf.clinical, + GENERATE_CLINICAL_SET_ME( + BCFTOOLS_VIEW_FILTER.out.vcf, ch_vep_filters ) - ch_clin_research_vcf.research - .mix( FILTERVEP_ME.out.output ) - .set { ch_annotate_csq_pli_me_input } - - - ANNOTATE_CSQ_PLI_ME ( - ch_annotate_csq_pli_me_input, + ANNOTATE_CSQ_PLI_ME( + GENERATE_CLINICAL_SET_ME.out.vcf, ch_variant_consequences ) - ch_versions = ch_versions.mix(SVDB_QUERY_DB.out.versions) - ch_versions = ch_versions.mix(PICARD_SORTVCF.out.versions) - ch_versions = ch_versions.mix(ENSEMBLVEP_ME.out.versions) - ch_versions = ch_versions.mix(BCFTOOLS_VIEW_FILTER.out.versions) - ch_versions = ch_versions.mix(FILTERVEP_ME.out.versions) - ch_versions = ch_versions.mix(ANNOTATE_CSQ_PLI_ME.out.versions) + ch_versions = ch_versions.mix( SVDB_QUERY_DB.out.versions ) + ch_versions = ch_versions.mix( PICARD_SORTVCF.out.versions ) + ch_versions = ch_versions.mix( ENSEMBLVEP_ME.out.versions ) + ch_versions = ch_versions.mix( BCFTOOLS_VIEW_FILTER.out.versions ) + ch_versions = ch_versions.mix( GENERATE_CLINICAL_SET_ME.out.versions ) + ch_versions = ch_versions.mix( ANNOTATE_CSQ_PLI_ME.out.versions ) emit: vcf = ANNOTATE_CSQ_PLI_ME.out.vcf_ann // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/generate_clinical_set.nf b/subworkflows/local/generate_clinical_set.nf new file mode 100644 index 00000000..e877c39b --- /dev/null +++ b/subworkflows/local/generate_clinical_set.nf @@ -0,0 +1,45 @@ +// +// Generarte clinical set of variants +// + +include { ENSEMBLVEP_FILTERVEP } from '../../modules/nf-core/ensemblvep/filtervep' +include { TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip' +include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix' + +workflow GENERATE_CLINICAL_SET { + take: + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_vep_filters // channel: [mandatory] [ path(feature_file) ] + + main: + ch_versions = Channel.empty() + + ch_vcf + .multiMap { meta, vcf -> + clinical: [ meta + [ set: "clinical" ], vcf ] + research: [ meta + [ set: "research" ], vcf ] + } + .set { ch_clin_research_vcf } + + ENSEMBLVEP_FILTERVEP( + ch_clin_research_vcf.clinical, + ch_vep_filters + ) + + TABIX_BGZIP( ENSEMBLVEP_FILTERVEP.out.output ) + + ch_clin_research_vcf.research + .mix( TABIX_BGZIP.out.output ) + .set { ch_clin_research_split } + + TABIX_TABIX( ch_clin_research_split ) + + ch_versions = ch_versions.mix( ENSEMBLVEP_FILTERVEP.out.versions ) + ch_versions = ch_versions.mix( TABIX_BGZIP.out.versions ) + ch_versions = ch_versions.mix( TABIX_TABIX.out.versions ) + + emit: + vcf = ch_clin_research_split // channel: [ val(meta), path(vcf) ] + tbi = TABIX_TABIX.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9481b930..e3904671 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -107,38 +107,35 @@ include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custo include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' -include { ENSEMBLVEP_FILTERVEP as FILTERVEP_MT } from '../modules/nf-core/ensemblvep/filtervep' -include { ENSEMBLVEP_FILTERVEP as FILTERVEP_SNV } from '../modules/nf-core/ensemblvep/filtervep' -include { ENSEMBLVEP_FILTERVEP as FILTERVEP_SV } from '../modules/nf-core/ensemblvep/filtervep' -include { TABIX_BGZIPTABIX as BGZIPTABIX_MT } from '../modules/nf-core/tabix/bgziptabix' -include { TABIX_BGZIPTABIX as BGZIPTABIX_SNV } from '../modules/nf-core/tabix/bgziptabix' -include { TABIX_BGZIPTABIX as BGZIPTABIX_SV } from '../modules/nf-core/tabix/bgziptabix' // // SUBWORKFLOWS // -include { ALIGN } from '../subworkflows/local/align' -include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_MT } from '../subworkflows/local/annotate_consequence_pli' -include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' -include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' -include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/annotate_genome_snvs' -include { ANNOTATE_MOBILE_ELEMENTS } from '../subworkflows/local/annotate_mobile_elements' -include { ANNOTATE_MT_SNVS } from '../subworkflows/local/annotate_mt_snvs' -include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' -include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' -include { CALL_SNV } from '../subworkflows/local/call_snv' -include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' -include { GENERATE_CYTOSURE_FILES } from '../subworkflows/local/generate_cytosure_files' -include { GENS } from '../subworkflows/local/gens' -include { PEDDY_CHECK } from '../subworkflows/local/peddy_check' -include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' -include { QC_BAM } from '../subworkflows/local/qc_bam' -include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/rank_variants' -include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' -include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' -include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' -include { CALL_MOBILE_ELEMENTS } from '../subworkflows/local/call_mobile_elements' +include { ALIGN } from '../subworkflows/local/align' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_MT } from '../subworkflows/local/annotate_consequence_pli' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' +include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/annotate_genome_snvs' +include { ANNOTATE_MOBILE_ELEMENTS } from '../subworkflows/local/annotate_mobile_elements' +include { ANNOTATE_MT_SNVS } from '../subworkflows/local/annotate_mt_snvs' +include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' +include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' +include { CALL_SNV } from '../subworkflows/local/call_snv' +include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' +include { GENERATE_CYTOSURE_FILES } from '../subworkflows/local/generate_cytosure_files' +include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_MT } from '../subworkflows/local/generate_clinical_set' +include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_SNV } from '../subworkflows/local/generate_clinical_set' +include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_SV } from '../subworkflows/local/generate_clinical_set' +include { GENS } from '../subworkflows/local/gens' +include { PEDDY_CHECK } from '../subworkflows/local/peddy_check' +include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' +include { QC_BAM } from '../subworkflows/local/qc_bam' +include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/rank_variants' +include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' +include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' +include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' +include { CALL_MOBILE_ELEMENTS } from '../subworkflows/local/call_mobile_elements' /* @@ -433,11 +430,17 @@ workflow RAREDISEASE { ch_vep_cache, ch_genome_fasta, ch_genome_dictionary - ).set {ch_sv_annotate} + ).set { ch_sv_annotate } ch_versions = ch_versions.mix(ch_sv_annotate.versions) - ANN_CSQ_PLI_SV ( + GENERATE_CLINICAL_SET_SV( ch_sv_annotate.vcf_ann, + ch_vep_filters + ) + ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SV.out.versions) + + ANN_CSQ_PLI_SV ( + GENERATE_CLINICAL_SET_SV.out.vcf, ch_variant_consequences ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SV.out.versions) @@ -450,15 +453,6 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) - FILTERVEP_SV( - RANK_VARIANTS_SV.out.vcf, - ch_vep_filters - ) - ch_versions = ch_versions.mix(FILTERVEP_SV.out.versions) - - BGZIPTABIX_SV(FILTERVEP_SV.out.output) - ch_versions = ch_versions.mix(BGZIPTABIX_SV.out.versions) - } // @@ -480,13 +474,17 @@ workflow RAREDISEASE { ch_genome_fasta, ch_gnomad_af, ch_scatter_split_intervals - ).set {ch_snv_annotate} + ).set { ch_snv_annotate } ch_versions = ch_versions.mix(ch_snv_annotate.versions) - ch_snv_annotate = ANNOTATE_GENOME_SNVS.out.vcf_ann + GENERATE_CLINICAL_SET_SNV( + ch_snv_annotate.vcf_ann, + ch_vep_filters + ) + ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SNV.out.versions) ANN_CSQ_PLI_SNV ( - ch_snv_annotate, + GENERATE_CLINICAL_SET_SNV.out.vcf, ch_variant_consequences ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) @@ -499,15 +497,6 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) - FILTERVEP_SNV( - RANK_VARIANTS_SNV.out.vcf, - ch_vep_filters - ) - ch_versions = ch_versions.mix(FILTERVEP_SNV.out.versions) - - BGZIPTABIX_SNV(FILTERVEP_SNV.out.output) - ch_versions = ch_versions.mix(BGZIPTABIX_SNV.out.versions) - } // @@ -526,11 +515,17 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - ).set {ch_mt_annotate} + ).set { ch_mt_annotate } ch_versions = ch_versions.mix(ch_mt_annotate.versions) - ANN_CSQ_PLI_MT ( + GENERATE_CLINICAL_SET_MT( ch_mt_annotate.vcf_ann, + ch_vep_filters + ) + ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_MT.out.versions) + + ANN_CSQ_PLI_MT( + GENERATE_CLINICAL_SET_MT.out.vcf, ch_variant_consequences ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_MT.out.versions) @@ -543,15 +538,6 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(RANK_VARIANTS_MT.out.versions) - FILTERVEP_MT( - RANK_VARIANTS_MT.out.vcf, - ch_vep_filters - ) - ch_versions = ch_versions.mix(FILTERVEP_MT.out.versions) - - BGZIPTABIX_MT(FILTERVEP_MT.out.output) - ch_versions = ch_versions.mix(BGZIPTABIX_MT.out.versions) - } // STEP 1.7: SMNCOPYNUMBERCALLER From a1e1950cc6848dd3edf21d067019fee20e4cae28 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 22 Jan 2024 11:54:47 +0100 Subject: [PATCH 1557/1921] update changelogwq --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93161c13..17c37e8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changed the name of the parameter from `skip_cnv_calling` to `skip_germlinecnvcaller` [#435](https://github.com/nf-core/raredisease/pull/435) - Check SVDB query input files for existence and correct format [#476](https://github.com/nf-core/raredisease/pull/476) - Change hardcoded platform value to params.platform in align_MT.config [#475](https://github.com/nf-core/raredisease/pull/475) +- The split into clincial and research VCFs is now done before ranking the varaints [#485](https://github.com/nf-core/raredisease/pull/485) ### `Fixed` From 1b1d6a125bef3a2179f35c5fb93494f54cfc43c4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:04:12 +0100 Subject: [PATCH 1558/1921] review suggestions --- assets/vep_plugin_files_schema.json | 19 +++++++++++++++++++ nextflow_schema.json | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 assets/vep_plugin_files_schema.json diff --git a/assets/vep_plugin_files_schema.json b/assets/vep_plugin_files_schema.json new file mode 100644 index 00000000..6f728a7b --- /dev/null +++ b/assets/vep_plugin_files_schema.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", + "title": "Schema for VEP plugin files and their indices", + "description": "Schema for VEP plugin files and their indices", + "type": "array", + "items": { + "type": "object", + "properties": { + "vep_files": { + "type": "string", + "format": "file-path", + "exists": true, + "errorMessage": "Path to vep plugin files and their indices" + } + }, + "required": ["vep_files"] + } +} diff --git a/nextflow_schema.json b/nextflow_schema.json index 64056370..e1d952f1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -390,7 +390,9 @@ "description": "Databases used by both named and custom plugins to annotate variants.", "fa_icon": "fas fa-file-csv", "help_text": "Path to a file containing the absolute paths to databases and their indices used by VEP's custom and named plugins resources defined within the vcfanno toml file. One line per resource.", - "mimetype": "text/csv" + "pattern": "^\\S+\\.csv$", + "mimetype": "text/csv", + "schema": "assets/vep_plugin_files_schema.json" }, "vep_filters": { "type": "string", From f1b75d4f8cceaae9968907946f968a721cf18191 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 Jan 2024 19:36:54 +0530 Subject: [PATCH 1559/1921] Apply suggestions from code review Co-authored-by: Anders Jemt --- subworkflows/local/annotate_genome_snvs.nf | 2 +- subworkflows/local/annotate_mobile_elements.nf | 2 +- subworkflows/local/annotate_mt_snvs.nf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 291d3acd..9e3d74d6 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -117,7 +117,7 @@ workflow ANNOTATE_GENOME_SNVS { .set { ch_for_mix } ch_for_mix.selvar.mix(ch_for_mix.cadd) - .map { meta, vcf -> return [meta, vcf, []]} + .map { meta, vcf -> return [meta, vcf, []] } .set { ch_vep_in } diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index dc6247bf..265ccce0 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -55,7 +55,7 @@ workflow ANNOTATE_MOBILE_ELEMENTS { ch_genome_dictionary ) .vcf - .map { meta, vcf -> return [meta, vcf, []]} + .map { meta, vcf -> return [meta, vcf, []] } .set { ch_vep_in } ENSEMBLVEP_ME( diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index e1ed903a..e7b8ae6a 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -54,7 +54,7 @@ workflow ANNOTATE_MT_SNVS { ch_for_mix.merged.mix(ch_for_mix.cadd) .tap { ch_haplogrep_in } - .map { meta, vcf -> return [meta, vcf, []]} + .map { meta, vcf -> return [meta, vcf, []] } .set { ch_vep_in } From 778c54e8012ad433dbc25b78f40e793255df1bf3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:13:40 +0100 Subject: [PATCH 1560/1921] review suggestions + updates --- CITATIONS.md | 4 +++ README.md | 4 +++ ...uthvcfs.json => rtg_truthvcfs_schema.json} | 9 +++++- conf/modules/qc_bam.config | 4 +-- docs/output.md | 32 +++++++++++++++++++ docs/usage.md | 12 +++++++ nextflow_schema.json | 2 +- subworkflows/local/prepare_references.nf | 3 +- subworkflows/local/variant_evaluation.nf | 13 +++++--- workflows/raredisease.nf | 3 +- 10 files changed, 75 insertions(+), 11 deletions(-) rename assets/{rtg_truthvcfs.json => rtg_truthvcfs_schema.json} (78%) diff --git a/CITATIONS.md b/CITATIONS.md index f9973ae3..1fb40da9 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -106,6 +106,10 @@ - [rhocall](https://github.com/dnil/rhocall) +- [RTG Tools (vcfeval)](https://github.com/RealTimeGenomics/rtg-tools) + + > John G. Cleary, Ross Braithwaite, Kurt Gaastra, Brian S. Hilbush, Stuart Inglis, Sean A. Irvine, Alan Jackson, Richard Littin, Mehul Rathod, David Ware, Justin M. Zook, Len Trigg, and Francisco M. De La Vega. "Comparing Variant Call Files for Performance Benchmarking of Next-Generation Sequencing Variant Calling Pipelines." bioRxiv, 2015. doi:10.1101/023754. + - [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 diff --git a/README.md b/README.md index 1e0a93ae..e0ba6cd9 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,10 @@ On release, automated continuous integration tests run the pipeline on a full-si - [GENMOD](https://github.com/Clinical-Genomics/genmod) +**11. Variant evaluation:** + +- [RTG Tools](https://github.com/RealTimeGenomics/rtg-tools) + Note that it is possible to include/exclude certain tools or steps. ## Usage diff --git a/assets/rtg_truthvcfs.json b/assets/rtg_truthvcfs_schema.json similarity index 78% rename from assets/rtg_truthvcfs.json rename to assets/rtg_truthvcfs_schema.json index 3c3fe1db..b6ae4d06 100644 --- a/assets/rtg_truthvcfs.json +++ b/assets/rtg_truthvcfs_schema.json @@ -25,8 +25,15 @@ "exists": true, "pattern": "^\\S+\\.bed$", "errorMessage": "Path to bed files cannot contain spaces" + }, + "evaluationregions": { + "type": "string", + "format": "file-path", + "exists": true, + "pattern": "^\\S+\\.bed$", + "errorMessage": "Path to bed files cannot contain spaces" } }, - "required": ["vcf", "samplename", "bedregions"] + "required": ["vcf", "samplename"] } } diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 48e7d3c1..1982a757 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -65,12 +65,12 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { - ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("bwamem2") } + ext.when = { params.analysis_type.equals("wgs") && !params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { - ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("bwamem2") } + ext.when = { params.analysis_type.equals("wgs") && !params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics_y" } } diff --git a/docs/output.md b/docs/output.md index 885c806e..fd2cd30b 100644 --- a/docs/output.md +++ b/docs/output.md @@ -65,6 +65,10 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [VEP](#vep-2) - [Rank variants and filtering](#rank-variants-and-filtering) - [GENMOD](#genmod) + - [Mobile element analysis](#mobile-element-analysis) + - [Calling mobile elements](#calling-mobile-elements) + - [Annotating mobile elements](#annotating-mobile-elements) + - [Variant evaluation](#variant-evaluation) - [Pipeline information](#pipeline-information) ### Alignment @@ -522,6 +526,34 @@ The mobile elements are annotated with allele frequencies and allele counts usin
+### Variant evaluation + +Provided a truth set, SNVs can be evaluated using RTG Tools' vcfeval engine. Output files generated are listed below with a short description, but if you'd like to know more about what's in each of the files, refer to RTG Tools documentation [here](https://www.animalgenome.org/bioinfo/resources/manuals/RTGOperationsManual.pdf). + +
+Output files + +- `rtgvcfeval/` + + - `_vcfeval.fn.vcf.gz`: contains variants from the baseline VCF which were not correctly called. + - `_vcfeval.fn.vcf.gz.tbi`: index of the \*fn.vcf file + - `_vcfeval.fp.vcf.gz`: contains variants from the calls VCF which do not agree with baseline variants. + - `_vcfeval.fp.vcf.gz.tbi`: index of the \*fp.vcf file + - `_vcfeval.non_snp_roc.tsv.gz`: contains ROC data derived from those variants which were not represented as + SNPs. + - `_vcfeval.phasing.txt`: containing the data on the phasing + - `_vcfeval.snp_roc.tsv.gz`: contains ROC data derived from only those variants which were represented as SNPs. + - `_vcfeval.summary.txt`: contains the match summary statistics printed to standard output. + - `_vcfeval.tp-baseline.vcf.gz`: contains those variants from the baseline VCF which agree with variants in the + calls VCF. + - `_vcfeval.tp-baseline.vcf.gz.tbi`: index of the \*tp-baseline.vcf file + - `_vcfeval.tp.vcf.gz`: contains those variants from the calls VCF which agree with variants in the baseline VCF + - `_vcfeval.tp.vcf.gz.tbi`: index of the \*tp.vcf file + - `_vcfeval.weighted_roc.tsv.gz`: contains ROC data derived from all analyzed call variants, regardless of their + representation. + +
+ ### Pipeline information [Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/usage.md b/docs/usage.md index 9c27621a..6dcff0b1 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -21,6 +21,8 @@ Table of contents: - [7. SNV annotation \& Ranking](#7-snv-annotation--ranking) - [8. SV annotation \& Ranking](#8-sv-annotation--ranking) - [9. Mitochondrial annotation](#9-mitochondrial-annotation) + - [10. Mobile element annoation](#10-mobile-element-annotation) + - [11. Variant evaluation](#11-variant-evaluation) - [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) @@ -279,6 +281,16 @@ 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 mobile elements with allele frequencies. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). +##### 11. Variant evaluation + +| Mandatory | Optional | +| -------------------------- | -------- | +| run_rtgvcfeval1 | sdf | +| rtg_truthvcfs2 | | + +1 This parameter is set to false by default, set it to true if if you'd like to run the evaluation subworkflow +2 A CSV file that describes the truth VCF files used by RTG Tools' vcfeval for evaluating SNVs. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rtg_example.csv). The file contains four columns `samplename,vcf,bedregions,evaluationregions` where samplename is the user assigned samplename in the input samplesheet, vcf is the path to the truth vcf file, bedregions and evaluationregions are the path to the bed files that are supposed to be passed through --bed_regions and --evaluation_regions options of vcfeval. + #### Run the pipeline You can directly supply the parameters in the command line (CLI) or use a config file from which the pipeline can import the parameters. diff --git a/nextflow_schema.json b/nextflow_schema.json index 5c77956e..a3051514 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -280,7 +280,7 @@ "help_text": "Path to comma-separated file containing information about the truth vcf files used by vcfeval.", "pattern": "^\\S+\\.csv$", "mimetype": "text/csv", - "schema": "assets/rtg_truthvcfs.json" + "schema": "assets/rtg_truthvcfs_schema.json" }, "save_reference": { "type": "boolean", diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index b98b89d1..64d33248 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -52,7 +52,8 @@ workflow PREPARE_REFERENCES { GATK_SD(ch_genome_fasta) ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() GET_CHROM_SIZES( ch_fai ) - ch_genome_fasta.map {meta, fasta -> return [meta, fasta, [], [] ]}.set {ch_rtgformat_in} + ch_genome_fasta.map { meta, fasta -> return [meta, fasta, [], [] ] } + .set {ch_rtgformat_in} RTGTOOLS_FORMAT(ch_rtgformat_in) // MT indices diff --git a/subworkflows/local/variant_evaluation.nf b/subworkflows/local/variant_evaluation.nf index 8d550cdf..435b05d8 100644 --- a/subworkflows/local/variant_evaluation.nf +++ b/subworkflows/local/variant_evaluation.nf @@ -20,7 +20,9 @@ workflow VARIANT_EVALUATION { ch_rtg_truthvcfs .splitCsv ( header:true ) .map { row -> - return [[samplename:row.samplename[0], bedregions:row.bedregions[0]], row.vcf[0], []] + evregions = row.evaluationregions[0].isEmpty() ? [] : row.evaluationregions[0] + bedregions = row.bedregions[0].isEmpty() ? [] : row.bedregions[0] + return [[samplename:row.samplename[0], bedregions:bedregions, evaluationregions:evregions], row.vcf[0], []] } .set { ch_rtgvcfs_dbs } @@ -35,15 +37,16 @@ workflow VARIANT_EVALUATION { ch_snv_vcf_tbi .combine(ch_truthvcf_tbi) .map { meta, query, qidx, meta2, truth, tidx -> - return [meta + [samplename: meta2.samplename] , query, qidx, truth, tidx, meta2.bed, []] + return [meta + [samplename: meta2.samplename] , query, qidx, truth, tidx, meta2.bedregions, meta2.evaluationregions] } .set { ch_vcfeval_in } RTGTOOLS_VCFEVAL ( ch_vcfeval_in, ch_sdf ) - // ch_versions = ch_versions.mix(BUILD_BED.out.versions) - // ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) + ch_versions = ch_versions.mix(BCFTOOLS_REHEADER.out.versions) + ch_versions = ch_versions.mix(TABIX_TRUTHVCF.out.versions) + ch_versions = ch_versions.mix(RTGTOOLS_VCFEVAL.out.versions) emit: - versions = ch_versions // channel: [ path(versions.yml) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8ddccb1f..49a6853c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -280,7 +280,8 @@ workflow RAREDISEASE { : Channel.value([]) ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() : Channel.value([]) - ch_sdf = ch_references.sdf + ch_sdf = params.sdf ? Channel.fromPath(params.sdf).map{it -> [[id:it[0].simpleName],it]}.collect() + : ch_references.sdf ch_sv_dbs = params.svdb_query_dbs ? Channel.fromPath(params.svdb_query_dbs) : Channel.empty() ch_sv_bedpedbs = params.svdb_query_bedpedbs ? Channel.fromPath(params.svdb_query_bedpedbs) From 1b7ba7f0ca60a903eb07f3319a993273a9a8ac9c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:15:53 +0100 Subject: [PATCH 1561/1921] add versions --- workflows/raredisease.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 49a6853c..5e3ff3ef 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -415,6 +415,7 @@ workflow RAREDISEASE { ch_sdf ) } + ch_versions = ch_versions.mix(VARIANT_EVALUATION.out.versions) // // SV CALLING From db3d45a0241263857858e74a103b375e67523117 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:20:35 +0100 Subject: [PATCH 1562/1921] fix error --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 73b73bf4..8f043395 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -430,8 +430,8 @@ workflow RAREDISEASE { ch_rtg_truthvcfs, ch_sdf ) + ch_versions = ch_versions.mix(VARIANT_EVALUATION.out.versions) } - ch_versions = ch_versions.mix(VARIANT_EVALUATION.out.versions) // // SV CALLING From 2427ddc6c0b8b985290f0be60f9861df30e1ba44 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 24 Jan 2024 22:16:29 +0100 Subject: [PATCH 1563/1921] modules updaate --- .devcontainer/devcontainer.json | 8 +- modules.json | 180 +++++------ modules/nf-core/bcftools/annotate/main.nf | 6 +- modules/nf-core/bcftools/annotate/meta.yml | 6 +- modules/nf-core/bcftools/concat/main.nf | 6 +- modules/nf-core/bcftools/concat/meta.yml | 8 +- modules/nf-core/bcftools/filter/main.nf | 6 +- modules/nf-core/bcftools/filter/meta.yml | 3 + modules/nf-core/bcftools/merge/main.nf | 6 +- modules/nf-core/bcftools/merge/meta.yml | 5 + modules/nf-core/bcftools/norm/main.nf | 6 +- modules/nf-core/bcftools/norm/meta.yml | 3 + modules/nf-core/bcftools/reheader/main.nf | 18 +- modules/nf-core/bcftools/reheader/meta.yml | 11 +- modules/nf-core/bcftools/roh/main.nf | 6 +- modules/nf-core/bcftools/roh/meta.yml | 8 +- modules/nf-core/bcftools/sort/main.nf | 7 +- modules/nf-core/bcftools/sort/meta.yml | 5 +- modules/nf-core/bcftools/view/main.nf | 6 +- modules/nf-core/bcftools/view/meta.yml | 3 +- modules/nf-core/bwa/index/main.nf | 18 +- modules/nf-core/bwa/index/meta.yml | 3 + modules/nf-core/bwamem2/index/main.nf | 17 +- modules/nf-core/bwamem2/index/meta.yml | 2 + modules/nf-core/bwamem2/mem/main.nf | 6 +- modules/nf-core/bwamem2/mem/meta.yml | 2 + modules/nf-core/cadd/main.nf | 2 +- modules/nf-core/cadd/meta.yml | 5 +- modules/nf-core/cat/cat/main.nf | 11 +- modules/nf-core/cat/cat/tests/main.nf.test | 6 +- .../nf-core/cat/cat/tests/main.nf.test.snap | 92 ++++-- modules/nf-core/chromograph/main.nf | 2 +- modules/nf-core/chromograph/meta.yml | 5 +- modules/nf-core/cnvnator/cnvnator/main.nf | 2 +- modules/nf-core/cnvnator/cnvnator/meta.yml | 5 +- modules/nf-core/cnvnator/convert2vcf/main.nf | 2 +- modules/nf-core/cnvnator/convert2vcf/meta.yml | 5 +- .../dumpsoftwareversions/environment.yml | 2 +- .../custom/dumpsoftwareversions/main.nf | 4 +- .../dumpsoftwareversions/tests/main.nf.test | 7 +- .../tests/main.nf.test.snap | 50 +-- modules/nf-core/deepvariant/meta.yml | 6 +- modules/nf-core/ensemblvep/filtervep/main.nf | 2 +- modules/nf-core/ensemblvep/filtervep/meta.yml | 7 +- modules/nf-core/expansionhunter/main.nf | 6 +- modules/nf-core/expansionhunter/meta.yml | 5 +- modules/nf-core/fastp/main.nf | 18 ++ modules/nf-core/fastp/tests/main.nf.test | 302 ++++++++++++++++-- modules/nf-core/fastp/tests/main.nf.test.snap | 63 +++- modules/nf-core/fastqc/tests/main.nf.test | 265 ++++++++++----- .../nf-core/fastqc/tests/main.nf.test.snap | 12 +- .../nf-core/gatk4/bedtointervallist/main.nf | 5 +- .../nf-core/gatk4/bedtointervallist/meta.yml | 6 +- .../nf-core/gatk4/collectreadcounts/main.nf | 5 +- .../nf-core/gatk4/collectreadcounts/meta.yml | 13 +- .../gatk4/createsequencedictionary/main.nf | 5 +- .../gatk4/createsequencedictionary/meta.yml | 7 +- .../nf-core/gatk4/denoisereadcounts/main.nf | 5 +- .../nf-core/gatk4/denoisereadcounts/meta.yml | 9 +- .../determinegermlinecontigploidy/main.nf | 3 +- .../determinegermlinecontigploidy/meta.yml | 11 +- .../nf-core/gatk4/filtermutectcalls/main.nf | 5 +- .../nf-core/gatk4/filtermutectcalls/meta.yml | 12 +- .../nf-core/gatk4/germlinecnvcaller/main.nf | 9 +- .../nf-core/gatk4/germlinecnvcaller/meta.yml | 27 +- .../nf-core/gatk4/intervallisttools/main.nf | 5 +- .../nf-core/gatk4/intervallisttools/meta.yml | 12 +- .../nf-core/gatk4/mergebamalignment/main.nf | 5 +- .../nf-core/gatk4/mergebamalignment/meta.yml | 4 + modules/nf-core/gatk4/mergevcfs/main.nf | 5 +- modules/nf-core/gatk4/mergevcfs/meta.yml | 7 +- modules/nf-core/gatk4/mutect2/main.nf | 5 +- modules/nf-core/gatk4/mutect2/meta.yml | 10 +- .../gatk4/postprocessgermlinecnvcalls/main.nf | 3 +- .../postprocessgermlinecnvcalls/meta.yml | 7 +- .../nf-core/gatk4/preprocessintervals/main.nf | 5 +- .../gatk4/preprocessintervals/meta.yml | 16 +- modules/nf-core/gatk4/printreads/main.nf | 5 +- modules/nf-core/gatk4/printreads/meta.yml | 9 +- modules/nf-core/gatk4/revertsam/main.nf | 5 +- modules/nf-core/gatk4/revertsam/meta.yml | 5 +- modules/nf-core/gatk4/samtofastq/main.nf | 5 +- modules/nf-core/gatk4/samtofastq/meta.yml | 5 +- modules/nf-core/gatk4/selectvariants/main.nf | 5 +- modules/nf-core/gatk4/selectvariants/meta.yml | 7 +- modules/nf-core/gatk4/shiftfasta/main.nf | 5 +- modules/nf-core/gatk4/shiftfasta/meta.yml | 8 +- modules/nf-core/gatk4/splitintervals/main.nf | 5 +- modules/nf-core/gatk4/splitintervals/meta.yml | 9 +- .../nf-core/gatk4/variantfiltration/main.nf | 5 +- .../nf-core/gatk4/variantfiltration/meta.yml | 6 +- modules/nf-core/genmod/annotate/main.nf | 2 +- modules/nf-core/genmod/annotate/meta.yml | 4 +- modules/nf-core/genmod/compound/main.nf | 2 +- modules/nf-core/genmod/compound/meta.yml | 4 +- modules/nf-core/genmod/models/main.nf | 2 +- modules/nf-core/genmod/models/meta.yml | 5 +- modules/nf-core/genmod/score/main.nf | 2 +- modules/nf-core/genmod/score/meta.yml | 5 +- modules/nf-core/glnexus/main.nf | 2 +- modules/nf-core/glnexus/meta.yml | 5 +- modules/nf-core/haplocheck/main.nf | 2 +- modules/nf-core/haplocheck/meta.yml | 9 +- modules/nf-core/haplogrep2/classify/main.nf | 2 +- modules/nf-core/haplogrep2/classify/meta.yml | 6 +- modules/nf-core/hmtnote/annotate/main.nf | 2 +- modules/nf-core/hmtnote/annotate/meta.yml | 6 +- modules/nf-core/manta/germline/main.nf | 27 +- modules/nf-core/manta/germline/meta.yml | 12 +- modules/nf-core/mosdepth/main.nf | 6 +- modules/nf-core/mosdepth/meta.yml | 14 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 6 +- modules/nf-core/multiqc/meta.yml | 1 - modules/nf-core/multiqc/tests/main.nf.test | 48 ++- modules/nf-core/peddy/main.nf | 2 +- modules/nf-core/peddy/meta.yml | 6 +- .../picard/addorreplacereadgroups/main.nf | 11 +- .../picard/addorreplacereadgroups/meta.yml | 10 +- .../nf-core/picard/collecthsmetrics/main.nf | 6 +- .../nf-core/picard/collecthsmetrics/meta.yml | 5 +- .../picard/collectmultiplemetrics/main.nf | 8 +- .../picard/collectmultiplemetrics/meta.yml | 2 + .../nf-core/picard/collectwgsmetrics/main.nf | 6 +- .../nf-core/picard/collectwgsmetrics/meta.yml | 5 + modules/nf-core/picard/liftovervcf/main.nf | 6 +- modules/nf-core/picard/liftovervcf/meta.yml | 13 +- modules/nf-core/picard/markduplicates/main.nf | 10 +- .../nf-core/picard/markduplicates/meta.yml | 4 + .../nf-core/picard/renamesampleinvcf/main.nf | 6 +- .../nf-core/picard/renamesampleinvcf/meta.yml | 9 +- modules/nf-core/picard/sortvcf/main.nf | 6 +- modules/nf-core/picard/sortvcf/meta.yml | 5 +- modules/nf-core/qualimap/bamqc/main.nf | 6 +- modules/nf-core/qualimap/bamqc/meta.yml | 4 +- modules/nf-core/rhocall/annotate/main.nf | 2 +- modules/nf-core/rhocall/annotate/meta.yml | 6 +- modules/nf-core/samtools/faidx/main.nf | 6 +- modules/nf-core/samtools/faidx/meta.yml | 4 + modules/nf-core/samtools/index/main.nf | 6 +- modules/nf-core/samtools/index/meta.yml | 4 + modules/nf-core/samtools/merge/main.nf | 11 +- modules/nf-core/samtools/merge/meta.yml | 10 + modules/nf-core/samtools/sort/main.nf | 6 +- modules/nf-core/samtools/sort/meta.yml | 3 + modules/nf-core/samtools/stats/main.nf | 6 +- modules/nf-core/samtools/stats/meta.yml | 4 + modules/nf-core/samtools/view/main.nf | 19 +- modules/nf-core/samtools/view/meta.yml | 5 + modules/nf-core/sentieon/bwaindex/main.nf | 31 +- modules/nf-core/sentieon/bwaindex/meta.yml | 3 + modules/nf-core/sentieon/bwamem/main.nf | 29 +- modules/nf-core/sentieon/bwamem/meta.yml | 2 + modules/nf-core/sentieon/datametrics/main.nf | 29 +- modules/nf-core/sentieon/datametrics/meta.yml | 7 +- modules/nf-core/sentieon/dedup/main.nf | 39 ++- modules/nf-core/sentieon/dedup/meta.yml | 2 + .../nf-core/sentieon/dnamodelapply/main.nf | 34 +- .../nf-core/sentieon/dnamodelapply/meta.yml | 7 +- modules/nf-core/sentieon/dnascope/main.nf | 34 +- modules/nf-core/sentieon/dnascope/meta.yml | 3 +- modules/nf-core/sentieon/readwriter/main.nf | 29 +- modules/nf-core/sentieon/readwriter/meta.yml | 4 +- modules/nf-core/sentieon/wgsmetrics/main.nf | 31 +- modules/nf-core/sentieon/wgsmetrics/meta.yml | 7 +- modules/nf-core/smncopynumbercaller/main.nf | 2 +- modules/nf-core/smncopynumbercaller/meta.yml | 5 +- modules/nf-core/stranger/main.nf | 2 +- modules/nf-core/stranger/meta.yml | 5 +- modules/nf-core/svdb/merge/main.nf | 2 +- modules/nf-core/svdb/merge/meta.yml | 2 + modules/nf-core/tabix/bgzip/main.nf | 2 +- modules/nf-core/tabix/bgzip/meta.yml | 5 + modules/nf-core/tabix/bgziptabix/main.nf | 2 +- modules/nf-core/tabix/bgziptabix/meta.yml | 3 + modules/nf-core/tabix/tabix/main.nf | 2 +- modules/nf-core/tabix/tabix/meta.yml | 4 + modules/nf-core/tiddit/sv/main.nf | 2 +- modules/nf-core/tiddit/sv/meta.yml | 2 + modules/nf-core/ucsc/wigtobigwig/main.nf | 2 +- modules/nf-core/ucsc/wigtobigwig/meta.yml | 6 +- modules/nf-core/untar/main.nf | 2 +- modules/nf-core/untar/meta.yml | 5 + modules/nf-core/upd/main.nf | 2 +- modules/nf-core/upd/meta.yml | 2 + modules/nf-core/vcfanno/main.nf | 6 +- modules/nf-core/vcfanno/meta.yml | 7 +- 187 files changed, 1541 insertions(+), 751 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4a9bc5c7..4ecfbfe3 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,11 +18,11 @@ "python.linting.flake8Path": "/opt/conda/bin/flake8", "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", - "python.linting.pylintPath": "/opt/conda/bin/pylint", + "python.linting.pylintPath": "/opt/conda/bin/pylint" }, // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"], - }, - }, + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] + } + } } diff --git a/modules.json b/modules.json index 03000a35..c386c370 100644 --- a/modules.json +++ b/modules.json @@ -7,52 +7,52 @@ "nf-core": { "bcftools/annotate": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", - "git_sha": "bd4e0df3319c171072d09dade42e3c06fa373779", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "f7219b428dc69f93aa19f219fb7ce8eae8720400", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", - "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", - "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/sort": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "bwa/mem": { @@ -62,47 +62,47 @@ }, "bwamem2/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "cadd": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "d593e8f6b7d1bbbb2acf43a4b9efeeac8d6720f2", + "git_sha": "81f27e75847087865299cc46605deb3b09b4e0a2", "installed_by": ["modules"] }, "chromograph": { "branch": "master", - "git_sha": "aad210ba51500be029740d088b4b4827f6f41509", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "cnvnator/cnvnator": { "branch": "master", - "git_sha": "e0fcafde1e74156695fc27e90a6ad6325065e6c5", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "cnvnator/convert2vcf": { "branch": "master", - "git_sha": "e0fcafde1e74156695fc27e90a6ad6325065e6c5", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "bba7e362e4afead70653f84d8700588ea28d0f9e", + "git_sha": "8ec825f465b9c17f9d83000022995b4f7de6fe93", "installed_by": ["modules"] }, "deepvariant": { "branch": "master", - "git_sha": "ed67f2fadd6d2a155b296f728e6b1f8c92ddc1a6", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "eklipse": { @@ -112,7 +112,7 @@ }, "ensemblvep/filtervep": { "branch": "master", - "git_sha": "29984d70aea47d06f0062a1785d76c357dd40ea9", + "git_sha": "214d575774c172062924ad3564b4f66655600730", "installed_by": ["modules"] }, "ensemblvep/vep": { @@ -122,174 +122,174 @@ }, "expansionhunter": { "branch": "master", - "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "3c77ca9aac783e76c3614a06db3bfe4fef619bde", + "git_sha": "c9488585ce7bd35ccd2a30faa2371454c8112fb9", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "65ad3e0b9a4099592e1102e92e10455dc661cf53", + "git_sha": "c9488585ce7bd35ccd2a30faa2371454c8112fb9", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/collectreadcounts": { "branch": "master", - "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/denoisereadcounts": { "branch": "master", - "git_sha": "38c559b2a8b9a8cda62fa215521f581eb979c773", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", - "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"], "patch": "modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff" }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "8c4542e5d421c4690cf1fa6ec729e9304763fdaf", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"], "patch": "modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff" }, "gatk4/preprocessintervals": { "branch": "master", - "git_sha": "1226419498a14d17f98d12d6488d333b0dbd0418", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", - "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "glnexus": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "haplocheck": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "hmtnote/annotate": { "branch": "master", - "git_sha": "a746b933e61f43f8932aa2f867d5ec7f0ded352b", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "80dbd95c558a0ebb2123d95f50c093a7f714a0d7", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "ebb27711cd5f4de921244bfa81c676504072d31c", + "git_sha": "69e3eb17fb31b772b18f134d6e8f8b93ee980e65", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "4ab13872435962dadc239979554d13709e20bf29", + "git_sha": "8ec825f465b9c17f9d83000022995b4f7de6fe93", "installed_by": ["modules"] }, "ngsbits/samplegender": { @@ -299,142 +299,142 @@ }, "peddy": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "0ce3ab0ac301f160225b22254fa238478b4389f2", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", - "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", - "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", + "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "260677adfe5eecf5f64d3db726f6854d4497b49b", "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", - "git_sha": "d73505dd68b27b53b4002e84eea21a2819907562", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "a0f7be95788366c1923171e358da7d049eb440f9", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", + "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", "installed_by": ["modules"] }, "sentieon/bwaindex": { "branch": "master", - "git_sha": "49af8ed458e28729e483bc96e5a57c28163b9ea0", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "sentieon/bwamem": { "branch": "master", - "git_sha": "149b4746c6e16ef84f64db5bb245d5b9495fdc3f", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "sentieon/datametrics": { "branch": "master", - "git_sha": "127edadc279e19da093fdd513926c6cdee82c306", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "sentieon/dedup": { "branch": "master", - "git_sha": "915a0b16ba3e40ef59e7b44843b3118e17a9c906", + "git_sha": "740119f83a28777fdd846da87196b6ebc32a0e1d", "installed_by": ["modules"] }, "sentieon/dnamodelapply": { "branch": "master", - "git_sha": "43ef68091a1188fd8dc4c03f9341b556803c7514", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "sentieon/dnascope": { "branch": "master", - "git_sha": "4fb6fdc8046ec09cd30f92a2a252e9a0ba4a6309", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "sentieon/readwriter": { "branch": "master", - "git_sha": "b28e4dde755117e8dab5d6e85e292f145b8b53c3", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "sentieon/wgsmetrics": { "branch": "master", - "git_sha": "b1e9314b919f498e116bfc1417b7185185e99261", + "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", "installed_by": ["modules"] }, "smncopynumbercaller": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "stranger": { "branch": "master", - "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", - "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "svdb/query": { @@ -444,17 +444,17 @@ }, "tabix/bgzip": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "591b71642820933dcb3c954c934b397bd00d8e5e", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "tiddit/cov": { @@ -464,22 +464,22 @@ }, "tiddit/sv": { "branch": "master", - "git_sha": "1c90a501d102b800c27697f5ef39a6e217ab1915", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "66290981ab6038ea86177ade40b9449bc790b0ce", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "d0b4fc03af52a1cc8c6fb4493b921b57352b1dd8", + "git_sha": "e719354ba77df0a1bd310836aa2039b45c29d620", "installed_by": ["modules"] }, "upd": { "branch": "master", - "git_sha": "9b159849d74f0eef251168c81c16da08215bbad5", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "vcf2cytosure": { @@ -489,7 +489,7 @@ }, "vcfanno": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "b558cd24f8751dcda51f957391f5f9cb83e28586", "installed_by": ["modules"] } } diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf index 49eec2e8..27ebfd4a 100644 --- a/modules/nf-core/bcftools/annotate/main.nf +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_ANNOTATE { tag "$meta.id" label 'process_low' - conda "bioconda::bcftools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(input), path(index), path(annotations), path(annotations_index), path(header_lines) diff --git a/modules/nf-core/bcftools/annotate/meta.yml b/modules/nf-core/bcftools/annotate/meta.yml index 60f053ea..f3aa463b 100644 --- a/modules/nf-core/bcftools/annotate/meta.yml +++ b/modules/nf-core/bcftools/annotate/meta.yml @@ -13,7 +13,6 @@ tools: documentation: https://samtools.github.io/bcftools/bcftools.html#annotate doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] - input: - meta: type: map @@ -35,7 +34,6 @@ input: - header_lines: type: file description: Contains lines to append to the output VCF header - output: - meta: type: map @@ -50,7 +48,9 @@ output: type: file description: Compressed annotated VCF file pattern: "*{vcf,vcf.gz,bcf,bcf.gz}" - authors: - "@projectoriented" - "@ramprasadn" +maintainers: + - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index 244a42cc..a5830a25 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcfs), path(tbi) diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index e8c83cd6..91cb54d5 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -5,7 +5,6 @@ keywords: - concat - bcftools - VCF - tools: - concat: description: | @@ -21,12 +20,12 @@ input: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - vcfs: - type: files + type: list description: | List containing 2 or more vcf files e.g. [ 'file1.vcf', 'file2.vcf' ] - tbi: - type: files + type: list description: | List containing 2 or more index files (optional) e.g. [ 'file1.tbi', 'file2.tbi' ] @@ -47,3 +46,6 @@ output: authors: - "@abhi18av" - "@nvnieuwk" +maintainers: + - "@abhi18av" + - "@nvnieuwk" diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf index 099eedc7..1a40cb93 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/bcftools/filter/meta.yml b/modules/nf-core/bcftools/filter/meta.yml index 05a6d828..5b111fc3 100644 --- a/modules/nf-core/bcftools/filter/meta.yml +++ b/modules/nf-core/bcftools/filter/meta.yml @@ -39,3 +39,6 @@ output: authors: - "@joseespinosa" - "@drpatelh" +maintainers: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index eec740ed..b85d3fec 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcfs), path(tbis) diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml index 7bbe5216..87707140 100644 --- a/modules/nf-core/bcftools/merge/meta.yml +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -81,3 +81,8 @@ authors: - "@drpatelh" - "@nvnieuwk" - "@ramprasadn" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@nvnieuwk" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index 608f20a1..47d3dab1 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/norm/meta.yml b/modules/nf-core/bcftools/norm/meta.yml index 33ebea36..1f3e1b62 100644 --- a/modules/nf-core/bcftools/norm/meta.yml +++ b/modules/nf-core/bcftools/norm/meta.yml @@ -56,3 +56,6 @@ output: authors: - "@abhi18av" - "@ramprasadn" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/reheader/main.nf b/modules/nf-core/bcftools/reheader/main.nf index 28d567a2..82527167 100644 --- a/modules/nf-core/bcftools/reheader/main.nf +++ b/modules/nf-core/bcftools/reheader/main.nf @@ -2,13 +2,13 @@ process BCFTOOLS_REHEADER { tag "$meta.id" label 'process_low' - conda "bioconda::bcftools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: - tuple val(meta), path(vcf), path(header) + tuple val(meta), path(vcf), path(header), path(samples) tuple val(meta2), path(fai) output: @@ -21,8 +21,9 @@ process BCFTOOLS_REHEADER { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def update_sequences = fai ? "-f $fai" : "" - def new_header = header ? "-h $header" : "" + def fai_argument = fai ? "--fai $fai" : "" + def header_argument = header ? "--header $header" : "" + def samples_argument = samples ? "--samples $samples" : "" def args2 = task.ext.args2 ?: '--output-type z' def extension = args2.contains("--output-type b") || args2.contains("-Ob") ? "bcf.gz" : @@ -33,8 +34,9 @@ process BCFTOOLS_REHEADER { """ bcftools \\ reheader \\ - $update_sequences \\ - $new_header \\ + $fai_argument \\ + $header_argument \\ + $samples_argument \\ $args \\ --threads $task.cpus \\ $vcf \\ diff --git a/modules/nf-core/bcftools/reheader/meta.yml b/modules/nf-core/bcftools/reheader/meta.yml index 60704ab4..690d4ead 100644 --- a/modules/nf-core/bcftools/reheader/meta.yml +++ b/modules/nf-core/bcftools/reheader/meta.yml @@ -12,7 +12,6 @@ tools: documentation: http://samtools.github.io/bcftools/bcftools.html#reheader doi: 10.1093/gigascience/giab008 licence: ["MIT"] - input: - meta: type: map @@ -27,6 +26,10 @@ input: type: file description: New header to add to the VCF pattern: "*.{header.txt}" + - samples: + type: file + description: File containing sample names to update (one sample per line) + pattern: "*.{samples.txt}" - meta2: type: map description: | @@ -36,7 +39,6 @@ input: type: file description: Fasta index to update header sequences with pattern: "*.{fai}" - output: - meta: type: map @@ -51,8 +53,11 @@ output: type: file description: VCF with updated header, bgzipped per default pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" - authors: - "@bjohnnyd" - "@jemten" - "@ramprasadn" +maintainers: + - "@bjohnnyd" + - "@jemten" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf index d8a8bc79..8e03e47d 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/roh/meta.yml b/modules/nf-core/bcftools/roh/meta.yml index fa0fd088..ee928a8f 100644 --- a/modules/nf-core/bcftools/roh/meta.yml +++ b/modules/nf-core/bcftools/roh/meta.yml @@ -2,6 +2,9 @@ name: "bcftools_roh" description: A program for detecting runs of homo/autozygosity. Only bi-allelic sites are considered. keywords: - roh + - biallelic + - homozygosity + - autozygosity tools: - "roh": description: "A program for detecting runs of homo/autozygosity. Only bi-allelic sites are considered." @@ -9,7 +12,6 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] - input: - meta: type: map @@ -38,7 +40,6 @@ input: - targets_file: type: file description: "Targets can be specified either on command line or in a VCF, BED, or tab-delimited file (the default)." - output: - meta: type: map @@ -53,6 +54,7 @@ output: type: file description: Contains site-specific and/or per-region runs of homo/autozygosity calls. pattern: "*.{roh}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index ef41fd25..c982944c 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_SORT { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcf) @@ -30,6 +30,7 @@ process BCFTOOLS_SORT { bcftools \\ sort \\ --output ${prefix}.${extension} \\ + --temp-dir . \\ $args \\ $vcf diff --git a/modules/nf-core/bcftools/sort/meta.yml b/modules/nf-core/bcftools/sort/meta.yml index 0c244a48..84747c6d 100644 --- a/modules/nf-core/bcftools/sort/meta.yml +++ b/modules/nf-core/bcftools/sort/meta.yml @@ -12,7 +12,6 @@ tools: tool_dev_url: https://github.com/samtools/bcftools doi: "10.1093/bioinformatics/btp352" licence: ["MIT"] - input: - meta: type: map @@ -23,7 +22,6 @@ input: type: file description: The VCF/BCF file to be sorted pattern: "*.{vcf.gz,vcf,bcf}" - output: - meta: type: map @@ -38,6 +36,7 @@ output: type: file description: Sorted VCF file pattern: "*.{vcf.gz}" - authors: - "@Gwennid" +maintainers: + - "@Gwennid" diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index 86f807d3..a9d93fa6 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'biocontainers/bcftools:1.17--haef29d1_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': + 'biocontainers/bcftools:1.18--h8b25389_0' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/bcftools/view/meta.yml b/modules/nf-core/bcftools/view/meta.yml index 326fd1fa..eaa12b56 100644 --- a/modules/nf-core/bcftools/view/meta.yml +++ b/modules/nf-core/bcftools/view/meta.yml @@ -5,7 +5,6 @@ keywords: - view - bcftools - VCF - tools: - view: description: | @@ -61,3 +60,5 @@ output: pattern: "versions.yml" authors: - "@abhi18av" +maintainers: + - "@abhi18av" diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index 8d2e56d9..24b5a2ea 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -2,7 +2,7 @@ process BWA_INDEX { tag "$fasta" label 'process_single' - conda "bioconda::bwa=0.7.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bwa:0.7.17--hed695b0_7' : 'biocontainers/bwa:0.7.17--hed695b0_7' }" @@ -18,13 +18,14 @@ process BWA_INDEX { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${fasta.baseName}" + def args = task.ext.args ?: '' """ mkdir bwa bwa \\ index \\ $args \\ - -p bwa/${fasta.baseName} \\ + -p bwa/${prefix} \\ $fasta cat <<-END_VERSIONS > versions.yml @@ -34,14 +35,15 @@ process BWA_INDEX { """ stub: + def prefix = task.ext.prefix ?: "${fasta.baseName}" """ mkdir bwa - touch bwa/genome.amb - touch bwa/genome.ann - touch bwa/genome.bwt - touch bwa/genome.pac - touch bwa/genome.sa + touch bwa/${prefix}.amb + touch bwa/${prefix}.ann + touch bwa/${prefix}.bwt + touch bwa/${prefix}.pac + touch bwa/${prefix}.sa cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml index 2c6cfcd7..730628d0 100644 --- a/modules/nf-core/bwa/index/meta.yml +++ b/modules/nf-core/bwa/index/meta.yml @@ -40,3 +40,6 @@ output: authors: - "@drpatelh" - "@maxulysse" +maintainers: + - "@drpatelh" + - "@maxulysse" diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf index 30940852..b7688285 100644 --- a/modules/nf-core/bwamem2/index/main.nf +++ b/modules/nf-core/bwamem2/index/main.nf @@ -2,7 +2,7 @@ process BWAMEM2_INDEX { tag "$fasta" label 'process_single' - conda "bioconda::bwa-mem2=2.2.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0' : 'biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" @@ -18,13 +18,14 @@ process BWAMEM2_INDEX { task.ext.when == null || task.ext.when script: + def prefix = task.ext.prefix ?: "${fasta}" def args = task.ext.args ?: '' """ mkdir bwamem2 bwa-mem2 \\ index \\ $args \\ - $fasta -p bwamem2/${fasta} + $fasta -p bwamem2/${prefix} cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -33,13 +34,15 @@ process BWAMEM2_INDEX { """ stub: + def prefix = task.ext.prefix ?: "${fasta}" + """ mkdir bwamem2 - touch bwamem2/${fasta}.0123 - touch bwamem2/${fasta}.ann - touch bwamem2/${fasta}.pac - touch bwamem2/${fasta}.amb - touch bwamem2/${fasta}.bwt.2bit.64 + touch bwamem2/${prefix}.0123 + touch bwamem2/${prefix}.ann + touch bwamem2/${prefix}.pac + touch bwamem2/${prefix}.amb + touch bwamem2/${prefix}.bwt.2bit.64 cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml index 40c26c38..c14a1092 100644 --- a/modules/nf-core/bwamem2/index/meta.yml +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -38,3 +38,5 @@ output: pattern: "versions.yml" authors: - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf index d427dea3..b3874fc9 100644 --- a/modules/nf-core/bwamem2/mem/main.nf +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -2,10 +2,10 @@ process BWAMEM2_MEM { tag "$meta.id" label 'process_high' - conda "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.16.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' : - 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:6351200f24497efba12c219c2bea4bb0f69a9d47-0' : + 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:6351200f24497efba12c219c2bea4bb0f69a9d47-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 bc3dfcdd..04891b26 100644 --- a/modules/nf-core/bwamem2/mem/meta.yml +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -57,3 +57,5 @@ output: pattern: "versions.yml" authors: - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/cadd/main.nf b/modules/nf-core/cadd/main.nf index 0f644811..d4fab1f4 100644 --- a/modules/nf-core/cadd/main.nf +++ b/modules/nf-core/cadd/main.nf @@ -2,7 +2,7 @@ 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" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0': 'biocontainers/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0' }" diff --git a/modules/nf-core/cadd/meta.yml b/modules/nf-core/cadd/meta.yml index b54f5951..df84d237 100644 --- a/modules/nf-core/cadd/meta.yml +++ b/modules/nf-core/cadd/meta.yml @@ -12,7 +12,6 @@ tools: 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 @@ -29,7 +28,6 @@ input: 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 @@ -44,6 +42,7 @@ output: type: file description: Annotated tsv file pattern: "*.{tsv,tsv.gz}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index 970ab760..adbdbd7b 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -22,6 +22,8 @@ process CAT_CAT { def args2 = task.ext.args2 ?: '' def file_list = files_in.collect { it.toString() } + // choose appropriate concatenation tool depending on input and output format + // | input | output | command1 | command2 | // |-----------|------------|----------|----------| // | gzipped | gzipped | cat | | @@ -30,7 +32,7 @@ process CAT_CAT { // | ungzipped | gzipped | cat | pigz | // Use input file ending as default - prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}" + prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}" out_zip = prefix.endsWith('.gz') in_zip = file_list[0].endsWith('.gz') command1 = (in_zip && !out_zip) ? 'zcat' : 'cat' @@ -68,3 +70,10 @@ process CAT_CAT { END_VERSIONS """ } + +// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz +def getFileSuffix(filename) { + def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ + return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) +} + diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index ed5a4f12..aaae04f9 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -83,8 +83,7 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} + { assert snapshot(process.out).match() } ) } } @@ -142,8 +141,7 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 423571ba..0c9bfe8d 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -1,10 +1,4 @@ { - "test_cat_unzipped_zipped_size": { - "content": [ - 375 - ], - "timestamp": "2023-10-16T14:33:08.049445686" - }, "test_cat_unzipped_unzipped": { "content": [ { @@ -67,31 +61,36 @@ ], "timestamp": "2023-10-16T14:32:49.642741302" }, - "test_cat_zipped_zipped_lines": { - "content": [ - [ - "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", - "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", - "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", - "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", - "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", - "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" - ] - ], - "timestamp": "2023-10-16T14:32:33.629048645" - }, - "test_cat_unzipped_zipped_lines": { + "test_cat_zipped_zipped": { "content": [ - [ - ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", - "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", - "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", - "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", - "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", - "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } ], - "timestamp": "2023-10-16T14:33:08.038830506" + "timestamp": "2024-01-12T14:02:02.999254641" }, "test_cat_one_file_unzipped_zipped_lines": { "content": [ @@ -106,16 +105,41 @@ ], "timestamp": "2023-10-16T14:33:21.39642399" }, - "test_cat_zipped_zipped_size": { + "test_cat_unzipped_zipped": { "content": [ - 78 + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "1": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ], + "file_out": [ + [ + { + "id": "test", + "single_end": true + }, + "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2" + ] + ], + "versions": [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + } ], - "timestamp": "2023-10-16T14:32:33.641869244" + "timestamp": "2024-01-12T14:08:26.948048418" }, "test_cat_one_file_unzipped_zipped_size": { "content": [ 374 ], - "timestamp": "2023-10-16T14:33:21.4094373" + "timestamp": "2024-01-12T14:10:22.445700266" } -} \ No newline at end of file +} diff --git a/modules/nf-core/chromograph/main.nf b/modules/nf-core/chromograph/main.nf index 9049dbfa..dd67e1ba 100644 --- a/modules/nf-core/chromograph/main.nf +++ b/modules/nf-core/chromograph/main.nf @@ -2,7 +2,7 @@ process CHROMOGRAPH { tag "$meta.id" label 'process_single' - conda "bioconda::chromograph=1.3.1" + conda "${moduleDir}/environment.yml" 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' }" diff --git a/modules/nf-core/chromograph/meta.yml b/modules/nf-core/chromograph/meta.yml index cac5c7aa..0fd7250f 100644 --- a/modules/nf-core/chromograph/meta.yml +++ b/modules/nf-core/chromograph/meta.yml @@ -13,7 +13,6 @@ tools: homepage: "https://github.com/Clinical-Genomics/chromograph" documentation: "https://github.com/Clinical-Genomics/chromograph/blob/master/README.md" licence: "['MIT']" - input: - meta: type: map @@ -73,7 +72,6 @@ input: - sites: type: file description: Bed file containing UPD sites - output: - meta: type: map @@ -88,6 +86,7 @@ output: type: file description: Directory containing the plots in png format pattern: "*.png" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/cnvnator/cnvnator/main.nf b/modules/nf-core/cnvnator/cnvnator/main.nf index 6eb8a4f0..07393639 100644 --- a/modules/nf-core/cnvnator/cnvnator/main.nf +++ b/modules/nf-core/cnvnator/cnvnator/main.nf @@ -2,7 +2,7 @@ process CNVNATOR_CNVNATOR { tag "$meta.id" label 'process_single' - conda "bioconda::cnvnator=0.4.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvnator:0.4.1--py310h2dce045_7': 'biocontainers/cnvnator:0.4.1--py310h2dce045_7' }" diff --git a/modules/nf-core/cnvnator/cnvnator/meta.yml b/modules/nf-core/cnvnator/cnvnator/meta.yml index ea4f09be..2afbacde 100644 --- a/modules/nf-core/cnvnator/cnvnator/meta.yml +++ b/modules/nf-core/cnvnator/cnvnator/meta.yml @@ -11,7 +11,6 @@ tools: documentation: "https://github.com/abyzovlab/CNVnator/blob/master/README.md" tool_dev_url: "https://github.com/abyzovlab/CNVnator" licence: "['MIT']" - input: - meta: type: map @@ -53,7 +52,6 @@ input: type: file description: Path to a fasta file index pattern: "*.fai" - output: - output_meta: type: map @@ -72,6 +70,7 @@ output: type: file description: A tab file containing cnvnator calls pattern: "*.tab" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/cnvnator/convert2vcf/main.nf b/modules/nf-core/cnvnator/convert2vcf/main.nf index 1ca05ab0..87dd031a 100644 --- a/modules/nf-core/cnvnator/convert2vcf/main.nf +++ b/modules/nf-core/cnvnator/convert2vcf/main.nf @@ -2,7 +2,7 @@ process CNVNATOR_CONVERT2VCF { tag "$meta.id" label 'process_single' - conda "bioconda::cnvnator=0.4.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/cnvnator:0.4.1--py310h2dce045_7': 'biocontainers/cnvnator:0.4.1--py310h2dce045_7' }" diff --git a/modules/nf-core/cnvnator/convert2vcf/meta.yml b/modules/nf-core/cnvnator/convert2vcf/meta.yml index 5df7bc65..8e8c8006 100644 --- a/modules/nf-core/cnvnator/convert2vcf/meta.yml +++ b/modules/nf-core/cnvnator/convert2vcf/meta.yml @@ -11,7 +11,6 @@ tools: documentation: "https://github.com/abyzovlab/CNVnator/blob/master/README.md" tool_dev_url: "https://github.com/abyzovlab/CNVnator" licence: "['MIT']" - input: - meta: type: map @@ -22,7 +21,6 @@ input: type: file description: A tab file containing CNVnator calls pattern: "*.tab" - output: - meta: type: map @@ -37,6 +35,7 @@ output: type: file description: CNVnator calls in vcf format pattern: "*.vcf" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/custom/dumpsoftwareversions/environment.yml b/modules/nf-core/custom/dumpsoftwareversions/environment.yml index f0c63f69..9b3272bc 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/environment.yml +++ b/modules/nf-core/custom/dumpsoftwareversions/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::multiqc=1.17 + - bioconda::multiqc=1.19 diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 7685b33c..f2187611 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -4,8 +4,8 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { // Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.17--pyhdfd78af_0' : - 'biocontainers/multiqc:1.17--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' : + 'biocontainers/multiqc:1.19--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test index eec1db10..b1e1630b 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test +++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test @@ -31,7 +31,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.versions, + file(process.out.mqc_yml[0]).readLines()[0..10], + file(process.out.yml[0]).readLines()[0..7] + ).match() + } ) } } diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap index 4274ed57..5f59a936 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap +++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap @@ -1,27 +1,33 @@ { "Should run without failures": { "content": [ - { - "0": [ - "software_versions.yml:md5,1c851188476409cda5752ce971b20b58" - ], - "1": [ - "software_versions_mqc.yml:md5,2570f4ba271ad08357b0d3d32a9cf84d" - ], - "2": [ - "versions.yml:md5,3843ac526e762117eedf8825b40683df" - ], - "mqc_yml": [ - "software_versions_mqc.yml:md5,2570f4ba271ad08357b0d3d32a9cf84d" - ], - "versions": [ - "versions.yml:md5,3843ac526e762117eedf8825b40683df" - ], - "yml": [ - "software_versions.yml:md5,1c851188476409cda5752ce971b20b58" - ] - } + [ + "versions.yml:md5,76d454d92244589d32455833f7c1ba6d" + ], + [ + "data: \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\", + " \\n\\n\\n \\n \\n\\", + " \\ \\n\\n\\n\\n \\n \\", + " \\ \\n \\n\\n\\n\\n\\", + " \\n\\n \\n \\n\\", + " \\ \\n\\n\\n\\n\\n\\n \\n\\", + " \\ \\n \\n\\n\\n\\n\\", + " \\n\\n \\n \\n\\" + ], + [ + "CUSTOM_DUMPSOFTWAREVERSIONS:", + " python: 3.11.7", + " yaml: 5.4.1", + "TOOL1:", + " tool1: 0.11.9", + "TOOL2:", + " tool2: '1.9'", + "Workflow:" + ] ], - "timestamp": "2023-11-03T14:43:22.157011" + "timestamp": "2024-01-09T23:01:18.710682" } -} +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml index c7d11ae3..a50dc57d 100644 --- a/modules/nf-core/deepvariant/meta.yml +++ b/modules/nf-core/deepvariant/meta.yml @@ -12,7 +12,6 @@ tools: tool_dev_url: https://github.com/google/deepvariant doi: "10.1038/nbt.4235" licence: ["BSD-3-clause"] - input: - meta: type: map @@ -58,7 +57,6 @@ input: type: file description: GZI index of reference fasta file pattern: "*.gzi" - output: - meta: type: map @@ -77,7 +75,9 @@ output: type: file description: File containing software version pattern: "*.{version.txt}" - authors: - "@abhi18av" - "@ramprasadn" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/ensemblvep/filtervep/main.nf b/modules/nf-core/ensemblvep/filtervep/main.nf index 7fa2477a..53abf772 100644 --- a/modules/nf-core/ensemblvep/filtervep/main.nf +++ b/modules/nf-core/ensemblvep/filtervep/main.nf @@ -2,7 +2,7 @@ process ENSEMBLVEP_FILTERVEP { tag "$meta.id" label 'process_single' - conda "bioconda::ensembl-vep=110.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ensembl-vep:110.0--pl5321h2a3209d_0' : 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" diff --git a/modules/nf-core/ensemblvep/filtervep/meta.yml b/modules/nf-core/ensemblvep/filtervep/meta.yml index 603c0040..bde3aa16 100644 --- a/modules/nf-core/ensemblvep/filtervep/meta.yml +++ b/modules/nf-core/ensemblvep/filtervep/meta.yml @@ -1,4 +1,4 @@ -name: "ensemblvep_filtervep" +name: ensemblvep_filtervep description: Filter variants based on Ensembl Variant Effect Predictor (VEP) annotations. keywords: - annotation @@ -13,7 +13,6 @@ tools: homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html licence: ["Apache-2.0"] - input: - meta: type: map @@ -27,7 +26,6 @@ input: - feature_file: type: file description: File containing features on separate lines. To be used with --filter option. - output: - meta: type: map @@ -42,6 +40,7 @@ output: type: file description: VCF/TAB file pattern: "*.{vcf,tab,txt,tsv}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/expansionhunter/main.nf b/modules/nf-core/expansionhunter/main.nf index b5339bf6..008b13ad 100644 --- a/modules/nf-core/expansionhunter/main.nf +++ b/modules/nf-core/expansionhunter/main.nf @@ -2,10 +2,10 @@ process EXPANSIONHUNTER { tag "$meta.id" label 'process_low' - conda "bioconda::expansionhunter=4.0.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/expansionhunter:4.0.2--he785bd8_0' : - 'biocontainers/expansionhunter:4.0.2--he785bd8_0' }" + 'https://depot.galaxyproject.org/singularity/expansionhunter:5.0.0--hf366f20_0' : + 'biocontainers/expansionhunter:5.0.0--hf366f20_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml index 0d2b10d6..b970ced4 100644 --- a/modules/nf-core/expansionhunter/meta.yml +++ b/modules/nf-core/expansionhunter/meta.yml @@ -14,7 +14,6 @@ tools: documentation: https://github.com/Illumina/ExpansionHunter/blob/master/docs/01_Introduction.md doi: "10.1093/bioinformatics/btz431" licence: ["Apache-2.0"] - input: - meta: type: map @@ -52,7 +51,6 @@ input: type: file description: JSON file with repeat expansion sites to genotype pattern: "*.json" - output: - meta: type: map @@ -71,6 +69,7 @@ output: type: file description: JSON with repeat expansions pattern: "*.json.gz" - authors: - "@jemten" +maintainers: + - "@jemten" diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 5fac3c1a..2a3b679e 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -99,4 +99,22 @@ process FASTP { END_VERSIONS """ } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end + def touch_reads = is_single_output ? "${prefix}.fastp.fastq.gz" : "${prefix}_1.fastp.fastq.gz ${prefix}_2.fastp.fastq.gz" + def touch_merged = (!is_single_output && save_merged) ? "touch ${prefix}.merged.fastq.gz" : "" + """ + touch $touch_reads + touch "${prefix}.fastp.json" + touch "${prefix}.fastp.html" + touch "${prefix}.fastp.log" + $touch_merged + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g") + END_VERSIONS + """ } diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index f610b735..fa7e5b4d 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -19,11 +19,10 @@ nextflow_process { save_trimmed_fail = false save_merged = false - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:true ], - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] - ] - + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -57,6 +56,66 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_single_end-for_stub_match") + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_single_end-stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + + assertAll( + { assert process.success }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_single_end-for_stub_match") + }, { assert snapshot(process.out.versions).match("versions") } ) } @@ -74,12 +133,11 @@ nextflow_process { save_trimmed_fail = false save_merged = false - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] - ] - + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -127,6 +185,66 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_paired_end-for_stub_match") + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_paired_end-stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_paired_end-for_stub_match") + }, { assert snapshot(process.out.versions).match("versions") } ) } @@ -144,10 +262,10 @@ nextflow_process { save_trimmed_fail = false save_merged = false - input[0] = [ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: true) ] - ] - + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -181,6 +299,66 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_interleaved-for_stub_match") + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("fastp test_fastp_interleaved-stub") { + + options '-stub' + + config './nextflow.config' + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = false + + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + ]) + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { file(it[1]).getName() } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_interleaved-for_stub_match") + }, { assert snapshot(process.out.versions).match("versions") } ) } @@ -198,9 +376,10 @@ nextflow_process { save_trimmed_fail = true save_merged = false - input[0] = [ [ id:'test', single_end:true ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -258,13 +437,11 @@ nextflow_process { save_trimmed_fail = true save_merged = false - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) - ] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -337,11 +514,11 @@ nextflow_process { adapter_fasta = [] save_trimmed_fail = false save_merged = true - - input[0] = [ [ id:'test', single_end:false ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged @@ -399,6 +576,66 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_paired_end_merged-for_stub_match") + }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("test_fastp_paired_end_merged-stub") { + + options '-stub' + + when { + params { + outdir = "$outputDir" + } + process { + """ + adapter_fasta = [] + save_trimmed_fail = false + save_merged = true + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = adapter_fasta + input[2] = save_trimmed_fail + input[3] = save_merged + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + ( + [process.out.reads[0][0].toString()] + // meta + process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + + process.out.json.collect { file(it[1]).getName() } + + process.out.html.collect { file(it[1]).getName() } + + process.out.log.collect { file(it[1]).getName() } + + process.out.reads_fail.collect { file(it[1]).getName() } + + process.out.reads_merged.collect { file(it[1]).getName() } + ).sort() + ).match("test_fastp_paired_end_merged-for_stub_match") + }, { assert snapshot(process.out.versions).match("versions") } ) } @@ -412,14 +649,15 @@ nextflow_process { } process { """ - adapter_fasta = file("https://github.com/nf-core/test-datasets/raw/modules/data/delete_me/fastp/adapters.fasta", checkIfExists: true) + adapter_fasta = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) save_trimmed_fail = false save_merged = true - input[0] = [ [ id:'test', single_end:false ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) input[1] = adapter_fasta input[2] = save_trimmed_fail input[3] = save_merged diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 0fa68c7d..6a71b680 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,4 +1,19 @@ { + "test_fastp_paired_end-for_stub_match": { + "content": [ + [ + [ + "test_1.fastp.fastq.gz", + "test_2.fastp.fastq.gz" + ], + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=false}" + ] + ], + "timestamp": "2024-01-17T18:07:15.398827" + }, "fastp test_fastp_interleaved_json": { "content": [ [ @@ -11,7 +26,23 @@ ] ] ], - "timestamp": "2023-10-17T11:04:45.794175881" + "timestamp": "2024-01-17T18:08:06.123035" + }, + "test_fastp_paired_end_merged-for_stub_match": { + "content": [ + [ + [ + "test_1.fastp.fastq.gz", + "test_2.fastp.fastq.gz" + ], + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "test.merged.fastq.gz", + "{id=test, single_end=false}" + ] + ], + "timestamp": "2024-01-17T18:10:13.467574" }, "test_fastp_single_end_json": { "content": [ @@ -25,7 +56,7 @@ ] ] ], - "timestamp": "2023-10-17T11:04:10.566343705" + "timestamp": "2024-01-17T18:06:00.223817" }, "versions": { "content": [ @@ -33,7 +64,31 @@ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], - "timestamp": "2023-10-17T11:04:10.582076024" + "timestamp": "2024-01-17T18:06:00.248422" + }, + "test_fastp_interleaved-for_stub_match": { + "content": [ + [ + "test.fastp.fastq.gz", + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=true}" + ] + ], + "timestamp": "2024-01-17T18:08:06.127974" + }, + "test_fastp_single_end-for_stub_match": { + "content": [ + [ + "test.fastp.fastq.gz", + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=true}" + ] + ], + "timestamp": "2024-01-17T18:06:00.244202" }, "test_fastp_single_end_trim_fail_json": { "content": [ @@ -47,6 +102,6 @@ ] ] ], - "timestamp": "2023-10-17T11:05:00.379878948" + "timestamp": "2024-01-17T18:08:41.942317" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index b9e8f926..1f21c664 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -3,24 +3,20 @@ nextflow_process { name "Test Process FASTQC" script "../main.nf" process "FASTQC" + tag "modules" tag "modules_nfcore" tag "fastqc" - test("Single-Read") { + test("sarscov2 single-end [fastq]") { when { - params { - outdir = "$outputDir" - } process { """ - input[0] = [ + input[0] = Channel.of([ [ id: 'test', single_end:true ], - [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) - ] - ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) """ } } @@ -28,82 +24,189 @@ nextflow_process { then { assertAll ( { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. // looks like this:
Mon 2 Oct 2023
test.gz
// https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - { assert process.out.html.get(0).get(1) ==~ ".*/test_fastqc.html" }, - { assert path(process.out.html.get(0).get(1)).getText().contains("") }, - { assert snapshot(process.out.versions).match("versions") }, - { assert process.out.zip.get(0).get(1) ==~ ".*/test_fastqc.zip" } + + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("sarscov2 paired-end [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("sarscov2 interleaved [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("versions") } ) } } -// TODO -// // -// // Test with paired-end data -// // -// workflow test_fastqc_paired_end { -// input = [ -// [id: 'test', single_end: false], // meta map -// [ -// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) -// ] -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with interleaved data -// // -// workflow test_fastqc_interleaved { -// input = [ -// [id: 'test', single_end: false], // meta map -// file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: true) -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with bam data -// // -// workflow test_fastqc_bam { -// input = [ -// [id: 'test', single_end: false], // meta map -// file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with multiple samples -// // -// workflow test_fastqc_multiple { -// input = [ -// [id: 'test', single_end: false], // meta map -// [ -// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true), -// file(params.test_data['sarscov2']['illumina']['test2_2_fastq_gz'], checkIfExists: true) -// ] -// ] - -// FASTQC ( input ) -// } - -// // -// // Test with custom prefix -// // -// workflow test_fastqc_custom_prefix { -// input = [ -// [ id:'mysample', single_end:true ], // meta map -// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) -// ] - -// FASTQC ( input ) -// } + + test("sarscov2 paired-end [bam]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("sarscov2 multiple [fastq]") { + + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert path(process.out.html[0][1][2]).text.contains("") }, + { assert path(process.out.html[0][1][3]).text.contains("") }, + + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("sarscov2 custom_prefix") { + + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("sarscov2 single-end [fastq] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id: 'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out.html.collect { file(it[1]).getName() } + + process.out.zip.collect { file(it[1]).getName() } + + process.out.versions ).match() } + ) + } + } + } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 636a32ce..5d624bb8 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,10 +1,20 @@ { + "sarscov2 single-end [fastq] - stub": { + "content": [ + [ + "test.html", + "test.zip", + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "timestamp": "2024-01-17T18:40:57.254299" + }, "versions": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], - "timestamp": "2023-10-09T23:40:54+0000" + "timestamp": "2024-01-17T18:36:50.033627" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index a23abd06..88b24b1a 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -2,7 +2,7 @@ process GATK4_BEDTOINTERVALLIST { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -29,7 +29,8 @@ process GATK4_BEDTOINTERVALLIST { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" BedToIntervalList \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + BedToIntervalList \\ --INPUT $bed \\ --OUTPUT ${prefix}.interval_list \\ --SEQUENCE_DICTIONARY $dict \\ diff --git a/modules/nf-core/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml index 40daf752..187da885 100644 --- a/modules/nf-core/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/gatk4/bedtointervallist/meta.yml @@ -2,8 +2,9 @@ name: gatk4_bedtointervallist description: Creates an interval list from a bed file and a reference dict keywords: - bed - - interval list - bedtointervallist + - gatk4 + - interval list tools: - gatk4: description: | @@ -45,3 +46,6 @@ output: authors: - "@kevinmenden" - "@ramprasadn" +maintainers: + - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/collectreadcounts/main.nf b/modules/nf-core/gatk4/collectreadcounts/main.nf index ce1985bc..1cc36941 100644 --- a/modules/nf-core/gatk4/collectreadcounts/main.nf +++ b/modules/nf-core/gatk4/collectreadcounts/main.nf @@ -2,7 +2,7 @@ process GATK4_COLLECTREADCOUNTS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -37,7 +37,8 @@ process GATK4_COLLECTREADCOUNTS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" CollectReadCounts \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + CollectReadCounts \\ --input $input \\ --intervals $intervals \\ --output ${prefix}.$extension \\ diff --git a/modules/nf-core/gatk4/collectreadcounts/meta.yml b/modules/nf-core/gatk4/collectreadcounts/meta.yml index 938011c1..25fb8b8c 100644 --- a/modules/nf-core/gatk4/collectreadcounts/meta.yml +++ b/modules/nf-core/gatk4/collectreadcounts/meta.yml @@ -1,23 +1,18 @@ 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: + - collectreadcounts - 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. + 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 @@ -63,7 +58,6 @@ input: type: file description: Optional - Sequence dictionary of the reference FASTA file pattern: "*.dict" - output: - meta: type: map @@ -82,6 +76,7 @@ output: type: file description: The read counts in TSV format pattern: "*.tsv" - authors: - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index 15a86bea..b47ad162 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -2,7 +2,7 @@ process GATK4_CREATESEQUENCEDICTIONARY { tag "$fasta" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -27,7 +27,8 @@ process GATK4_CREATESEQUENCEDICTIONARY { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" CreateSequenceDictionary \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + CreateSequenceDictionary \\ --REFERENCE $fasta \\ --URI $fasta \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index a421e681..f9d70be0 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -1,9 +1,10 @@ name: gatk4_createsequencedictionary description: Creates a sequence dictionary for a reference sequence keywords: + - createsequencedictionary - dictionary - fasta - - createsequencedictionary + - gatk4 tools: - gatk: description: | @@ -14,7 +15,6 @@ tools: 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 @@ -37,3 +37,6 @@ output: authors: - "@maxulysse" - "@ramprasadn" +maintainers: + - "@maxulysse" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/denoisereadcounts/main.nf b/modules/nf-core/gatk4/denoisereadcounts/main.nf index e60aeda1..b1191c27 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/main.nf +++ b/modules/nf-core/gatk4/denoisereadcounts/main.nf @@ -2,7 +2,7 @@ process GATK4_DENOISEREADCOUNTS { tag "$meta.id" label 'process_single' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -30,7 +30,8 @@ process GATK4_DENOISEREADCOUNTS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" DenoiseReadCounts \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + DenoiseReadCounts \\ ${args} \\ --tmp-dir . \\ --input ${counts} \\ diff --git a/modules/nf-core/gatk4/denoisereadcounts/meta.yml b/modules/nf-core/gatk4/denoisereadcounts/meta.yml index 0bb2f389..f2bd853f 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/meta.yml +++ b/modules/nf-core/gatk4/denoisereadcounts/meta.yml @@ -1,9 +1,9 @@ name: "gatk4_denoisereadcounts" description: Denoises read counts to produce denoised copy ratios keywords: - - gatk4 - - denoisereadcounts - copyratios + - denoisereadcounts + - gatk4 tools: - gatk4: description: | @@ -15,7 +15,6 @@ tools: doi: 10.1158/1538-7445.AM2017-3590 tool_dev_url: "https://github.com/broadinstitute/gatk" licence: ["Apache-2.0"] - input: - meta: type: map @@ -35,7 +34,6 @@ input: type: file description: Panel of normals file hdf5 or tsv format. pattern: "*.{hdf5}" - output: - meta: type: map @@ -54,6 +52,7 @@ output: type: file description: Denoised copy ratios file pattern: "*.{tsv}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf index 3c21e743..5af101f8 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf @@ -39,7 +39,8 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" DetermineGermlineContigPloidy \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + DetermineGermlineContigPloidy \\ ${input_list} \\ --output ./ \\ --output-prefix ${prefix} \\ diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml index 667d622e..56eb4089 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml @@ -1,10 +1,10 @@ name: "gatk4_determinegermlinecontigploidy" description: Determines the baseline contig ploidy for germline samples given counts data keywords: - - gatk4 - - determinegermlinecontigploidy - - counts - copy number + - counts + - determinegermlinecontigploidy + - gatk4 tools: - gatk4: description: | @@ -15,7 +15,6 @@ tools: 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 @@ -49,7 +48,6 @@ input: Optional - A folder containing the ploidy model. When a model is supplied to tool will run in CASE mode. pattern: '*-model/' - output: - meta: type: map @@ -70,6 +68,7 @@ output: 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: "*-model/" - authors: - "@nvnieuwk" +maintainers: + - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf index d0cf5b4a..fa6b46ab 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/main.nf +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -2,7 +2,7 @@ process GATK4_FILTERMUTECTCALLS { tag "$meta.id" label 'process_low' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -38,7 +38,8 @@ process GATK4_FILTERMUTECTCALLS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" FilterMutectCalls \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + FilterMutectCalls \\ --variant $vcf \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ diff --git a/modules/nf-core/gatk4/filtermutectcalls/meta.yml b/modules/nf-core/gatk4/filtermutectcalls/meta.yml index 1a6faecb..736c8386 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/meta.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/meta.yml @@ -3,9 +3,10 @@ description: | Filters the raw output of mutect2, can optionally use outputs of calculatecontamination and learnreadorientationmodel to improve filtering. keywords: - filtermutectcalls - - mutect2 + - filter - gatk4 - - filtervcf + - mutect2 + - vcf tools: - gatk4: description: | @@ -15,7 +16,6 @@ tools: 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 - input: - meta: type: map @@ -76,7 +76,6 @@ input: type: file description: GATK sequence dictionary pattern: "*.dict" - output: - vcf: type: file @@ -94,8 +93,11 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@GCJMackenzie" - "@maxulysse" - "@ramprasadn" +maintainers: + - "@GCJMackenzie" + - "@maxulysse" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index 441e730f..f42ceb6a 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/main.nf +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -9,8 +9,9 @@ process GATK4_GERMLINECNVCALLER { tuple val(meta), path(tsv), path(intervals), path(ploidy), path(model) output: - tuple val(meta), path("*-cnv-calls/*-calls"), emit: calls, optional: true - tuple val(meta), path("*-cnv-model/*-model"), emit: model, optional: true + tuple val(meta), path("*-cnv-model/*-calls"), emit: cohortcalls, optional: true + tuple val(meta), path("*-cnv-model/*-model"), emit: cohortmodel, optional: true + tuple val(meta), path("*-cnv-calls/*-calls"), emit: casecalls , optional: true path "versions.yml" , emit: versions when: @@ -36,7 +37,8 @@ process GATK4_GERMLINECNVCALLER { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" GermlineCNVCaller \\ + gatk --java-options "-Xmx${avail_mem}g -XX:-UsePerfData" \\ + GermlineCNVCaller \\ $input_list \\ $ploidy_command \\ $output_command \\ @@ -60,6 +62,7 @@ process GATK4_GERMLINECNVCALLER { """ mkdir -p ${prefix}-cnv-calls/${prefix}-calls mkdir -p ${prefix}-cnv-model/${prefix}-model + mkdir -p ${prefix}-cnv-model/${prefix}-calls 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 b7430927..d4715ff0 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml +++ b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml @@ -2,19 +2,15 @@ name: "gatk4_germlinecnvcaller" description: Calls copy-number variants in germline samples given their counts and the output of DetermineGermlineContigPloidy. keywords: - gatk - - gatk4_germlinecnvcaller - germline contig ploidy + - 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. + 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 @@ -34,10 +30,9 @@ input: description: Optional - directory containing the model produced by germlinecnvcaller cohort mode pattern: "*-cnv-model/*-model" - ploidy: - type: file + type: directory description: Directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode pattern: "*-calls" - output: - meta: type: map @@ -48,15 +43,21 @@ output: type: file description: File containing software versions pattern: "versions.yml" - - calls: - type: file + - cohortcalls: + type: directory description: Tar gzipped directory containing calls produced by germlinecnvcaller case mode - pattern: "*-cnv-calls/*-calls" - - model: + pattern: "*-cnv-model/*-calls" + - cohortmodel: type: directory description: Optional - Tar gzipped directory containing the model produced by germlinecnvcaller cohort mode pattern: "*-cnv-model/*-model" - + - casecalls: + type: directory + description: Tar gzipped directory containing calls produced by germlinecnvcaller case mode + pattern: "*-cnv-calls/*-calls" authors: - "@ryanjameskennedy" - "@ViktorHy" +maintainers: + - "@ryanjameskennedy" + - "@ViktorHy" diff --git a/modules/nf-core/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf index 0054659a..10baa752 100644 --- a/modules/nf-core/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/gatk4/intervallisttools/main.nf @@ -2,7 +2,7 @@ process GATK4_INTERVALLISTTOOLS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -31,7 +31,8 @@ process GATK4_INTERVALLISTTOOLS { mkdir ${prefix}_split - gatk --java-options "-Xmx${avail_mem}M" IntervalListTools \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + IntervalListTools \\ --INPUT $intervals \\ --OUTPUT ${prefix}_split \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/intervallisttools/meta.yml b/modules/nf-core/gatk4/intervallisttools/meta.yml index 804645f3..748dccfc 100644 --- a/modules/nf-core/gatk4/intervallisttools/meta.yml +++ b/modules/nf-core/gatk4/intervallisttools/meta.yml @@ -1,10 +1,10 @@ name: gatk4_intervallisttools - description: Splits the interval list file into unique, equally-sized interval files and place it under a directory keywords: - - sort - bed - - interval list + - gatk4 + - interval_list + - sort tools: - gatk4: description: | @@ -15,19 +15,16 @@ tools: 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 ] - - interval_list: type: file description: Interval list file pattern: "*.interval_list" - output: - meta: type: map @@ -42,6 +39,7 @@ output: type: file description: Interval list files pattern: "*.interval_list" - authors: - "@praveenraj2018" +maintainers: + - "@praveenraj2018" diff --git a/modules/nf-core/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf index 35d2e71e..f970421f 100644 --- a/modules/nf-core/gatk4/mergebamalignment/main.nf +++ b/modules/nf-core/gatk4/mergebamalignment/main.nf @@ -2,7 +2,7 @@ process GATK4_MERGEBAMALIGNMENT { tag "$meta.id" label 'process_low' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -30,7 +30,8 @@ process GATK4_MERGEBAMALIGNMENT { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" MergeBamAlignment \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + MergeBamAlignment \\ --UNMAPPED_BAM $unmapped \\ --ALIGNED_BAM $aligned \\ --OUTPUT ${prefix}.bam \\ diff --git a/modules/nf-core/gatk4/mergebamalignment/meta.yml b/modules/nf-core/gatk4/mergebamalignment/meta.yml index 9d8ae84b..af4a3f18 100644 --- a/modules/nf-core/gatk4/mergebamalignment/meta.yml +++ b/modules/nf-core/gatk4/mergebamalignment/meta.yml @@ -3,6 +3,7 @@ description: Merge unmapped with mapped BAM files keywords: - alignment - bam + - gatk4 - merge - mergebamalignment tools: @@ -57,3 +58,6 @@ output: authors: - "@kevinmenden" - "@ramprasadn" +maintainers: + - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf index dfb5b33a..3362c2bd 100644 --- a/modules/nf-core/gatk4/mergevcfs/main.nf +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -2,7 +2,7 @@ process GATK4_MERGEVCFS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -32,7 +32,8 @@ process GATK4_MERGEVCFS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" MergeVcfs \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + MergeVcfs \\ $input_list \\ --OUTPUT ${prefix}.vcf.gz \\ $reference_command \\ diff --git a/modules/nf-core/gatk4/mergevcfs/meta.yml b/modules/nf-core/gatk4/mergevcfs/meta.yml index db8c4cb0..30290a85 100644 --- a/modules/nf-core/gatk4/mergevcfs/meta.yml +++ b/modules/nf-core/gatk4/mergevcfs/meta.yml @@ -1,8 +1,9 @@ name: gatk4_mergevcfs description: Merges several vcf files keywords: - - vcf + - gatk4 - merge + - vcf tools: - gatk4: description: | @@ -32,7 +33,6 @@ input: type: file description: Optional Sequence Dictionary as input pattern: "*.dict" - output: - vcf: type: file @@ -42,10 +42,11 @@ output: type: file description: index files for the merged vcf files pattern: "*.tbi" - - versions: type: file description: File containing software versions pattern: "versions.yml" authors: - "@kevinmenden" +maintainers: + - "@kevinmenden" diff --git a/modules/nf-core/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf index bddc3688..721e94f3 100644 --- a/modules/nf-core/gatk4/mutect2/main.nf +++ b/modules/nf-core/gatk4/mutect2/main.nf @@ -2,7 +2,7 @@ process GATK4_MUTECT2 { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -42,7 +42,8 @@ process GATK4_MUTECT2 { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" Mutect2 \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + Mutect2 \\ $inputs \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ diff --git a/modules/nf-core/gatk4/mutect2/meta.yml b/modules/nf-core/gatk4/mutect2/meta.yml index 4842c229..21c928ed 100644 --- a/modules/nf-core/gatk4/mutect2/meta.yml +++ b/modules/nf-core/gatk4/mutect2/meta.yml @@ -2,8 +2,10 @@ name: gatk4_mutect2 description: Call somatic SNVs and indels via local assembly of haplotypes. keywords: - gatk4 - - mutect2 - haplotype + - indels + - mutect2 + - snvs - somatic tools: - gatk4: @@ -15,7 +17,6 @@ tools: 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 @@ -77,7 +78,6 @@ input: type: file description: Index for the panel of normals. pattern: "*.vcf.gz.tbi" - output: - vcf: type: file @@ -99,7 +99,9 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@GCJMackenzie" - "@ramprasadn" +maintainers: + - "@GCJMackenzie" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index d916c2af..ef9a34a3 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -35,7 +35,8 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" PostprocessGermlineCNVCalls \\ + gatk --java-options "-Xmx${avail_mem}g -XX:-UsePerfData" \\ + PostprocessGermlineCNVCalls \\ $calls_command \\ $model_command \\ $ploidy_command \\ diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml index 92e06cae..a724da11 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml @@ -1,9 +1,9 @@ name: "gatk4_postprocessgermlinecnvcalls" description: Postprocesses the output of GermlineCNVCaller and generates VCFs and denoised copy ratios keywords: + - copy number - gatk4 - postprocessgermlinecnvcalls - - copy number tools: - gatk4: description: | @@ -14,7 +14,6 @@ tools: 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 @@ -37,7 +36,6 @@ input: 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: "*-cnv-model/*-model" - output: - meta: type: map @@ -60,6 +58,7 @@ output: type: file description: Intervals VCF file pattern: "*.vcf.gz" - authors: - "@ryanjameskennedy" +maintainers: + - "@ryanjameskennedy" diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf index aff482f7..61b281da 100644 --- a/modules/nf-core/gatk4/preprocessintervals/main.nf +++ b/modules/nf-core/gatk4/preprocessintervals/main.nf @@ -2,7 +2,7 @@ process GATK4_PREPROCESSINTERVALS { tag "$fasta" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -35,7 +35,8 @@ process GATK4_PREPROCESSINTERVALS { } """ - gatk --java-options "-Xmx${avail_mem}M" PreprocessIntervals \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + PreprocessIntervals \\ $include_command \\ $exclude_command \\ --reference $fasta \\ diff --git a/modules/nf-core/gatk4/preprocessintervals/meta.yml b/modules/nf-core/gatk4/preprocessintervals/meta.yml index 8b6ae9b3..cf3f6ac4 100644 --- a/modules/nf-core/gatk4/preprocessintervals/meta.yml +++ b/modules/nf-core/gatk4/preprocessintervals/meta.yml @@ -1,21 +1,17 @@ name: "gatk4_preprocessintervals" description: Prepares bins for coverage collection. keywords: + - bed - gatk4 - - preprocessintervals - interval - - bed + - preprocessintervals tools: - "gatk4": - description: - Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools - with a primary focus on variant discovery and genotyping. Its powerful processing engine - and high-performance computing features make it capable of taking on projects of any size. + description: Developed in the Data Sciences Platform at the Broad Institute, the toolkit offers a wide variety of tools with a primary focus on variant discovery and genotyping. Its powerful processing engine and high-performance computing features make it capable of taking on projects of any size. homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: "10.1158/1538-7445.AM2017-3590" licence: ["Apache-2.0"] - input: - meta: type: map @@ -62,7 +58,6 @@ input: 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 @@ -77,8 +72,11 @@ output: type: file description: Processed interval list file pattern: "*.{bed,interval_list}" - authors: - "@ryanjameskennedy" - "@ViktorHy" - "@ramprasadn" +maintainers: + - "@ryanjameskennedy" + - "@ViktorHy" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf index 084d0b46..281096bb 100644 --- a/modules/nf-core/gatk4/printreads/main.nf +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -2,7 +2,7 @@ process GATK4_PRINTREADS { tag "$meta.id" label 'process_single' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -36,7 +36,8 @@ process GATK4_PRINTREADS { error("Output filename is the same as input filename. Please specify a different prefix.") } """ - gatk --java-options "-Xmx${avail_mem}M" PrintReads \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + PrintReads \\ $args \\ --reference $fasta \\ --input $input \\ diff --git a/modules/nf-core/gatk4/printreads/meta.yml b/modules/nf-core/gatk4/printreads/meta.yml index 8150c7a7..aca7e188 100644 --- a/modules/nf-core/gatk4/printreads/meta.yml +++ b/modules/nf-core/gatk4/printreads/meta.yml @@ -1,11 +1,11 @@ name: "gatk4_printreads" description: Print reads in the SAM/BAM/CRAM file keywords: - - gatk4 - bam - cram - - sam + - gatk4 - printreads + - sam tools: - gatk4: description: | @@ -16,7 +16,6 @@ tools: 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 @@ -58,7 +57,6 @@ input: type: file description: reference fasta dictionary file pattern: "*.{dict}" - output: - meta: type: map @@ -81,6 +79,7 @@ output: type: file description: Sorted SAM file pattern: "*.{sam}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf index 768b1eed..da3a71f9 100644 --- a/modules/nf-core/gatk4/revertsam/main.nf +++ b/modules/nf-core/gatk4/revertsam/main.nf @@ -2,7 +2,7 @@ process GATK4_REVERTSAM { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -28,7 +28,8 @@ process GATK4_REVERTSAM { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" RevertSam \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + RevertSam \\ --INPUT $bam \\ --OUTPUT ${prefix}.reverted.bam \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/revertsam/meta.yml b/modules/nf-core/gatk4/revertsam/meta.yml index 6cc97d86..ac6c0d0f 100644 --- a/modules/nf-core/gatk4/revertsam/meta.yml +++ b/modules/nf-core/gatk4/revertsam/meta.yml @@ -1,8 +1,9 @@ name: gatk4_revertsam description: Reverts SAM or BAM files to a previous state. keywords: - - sam + - gatk4 - revert + - sam tools: - gatk4: description: | @@ -34,3 +35,5 @@ output: pattern: "versions.yml" authors: - "@kevinmenden" +maintainers: + - "@kevinmenden" diff --git a/modules/nf-core/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf index f838b95a..02bf2152 100644 --- a/modules/nf-core/gatk4/samtofastq/main.nf +++ b/modules/nf-core/gatk4/samtofastq/main.nf @@ -2,7 +2,7 @@ process GATK4_SAMTOFASTQ { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -29,7 +29,8 @@ process GATK4_SAMTOFASTQ { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" SamToFastq \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + SamToFastq \\ --INPUT $bam \\ $output \\ --TMP_DIR . \\ diff --git a/modules/nf-core/gatk4/samtofastq/meta.yml b/modules/nf-core/gatk4/samtofastq/meta.yml index 60ca6aee..b61ef4fc 100644 --- a/modules/nf-core/gatk4/samtofastq/meta.yml +++ b/modules/nf-core/gatk4/samtofastq/meta.yml @@ -2,7 +2,8 @@ name: gatk4_samtofastq description: Converts BAM/SAM file to FastQ format keywords: - bed - - interval list + - gatk4 + - interval_list tools: - gatk4: description: | @@ -34,3 +35,5 @@ output: pattern: "versions.yml" authors: - "@kevinmenden" +maintainers: + - "@kevinmenden" diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index 609cb8cc..f81a019b 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -2,7 +2,7 @@ process GATK4_SELECTVARIANTS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -30,7 +30,8 @@ process GATK4_SELECTVARIANTS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" SelectVariants \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + SelectVariants \\ --variant $vcf \\ --output ${prefix}.selectvariants.vcf.gz \\ $interval \\ diff --git a/modules/nf-core/gatk4/selectvariants/meta.yml b/modules/nf-core/gatk4/selectvariants/meta.yml index 46605d15..5bd0fc69 100644 --- a/modules/nf-core/gatk4/selectvariants/meta.yml +++ b/modules/nf-core/gatk4/selectvariants/meta.yml @@ -1,7 +1,6 @@ name: gatk4_selectvariants description: Select a subset of variants from a VCF file keywords: - - gatk - gatk4 - selectvariants - vcf @@ -16,7 +15,6 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] - input: - meta: type: map @@ -35,7 +33,6 @@ input: type: file description: One or more genomic intervals over which to operate pattern: ".intervals" - output: - meta: type: map @@ -54,7 +51,9 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@mjcipriano" - "@ramprasadn" +maintainers: + - "@mjcipriano" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/shiftfasta/main.nf b/modules/nf-core/gatk4/shiftfasta/main.nf index ab0e578c..b0ff3ed0 100644 --- a/modules/nf-core/gatk4/shiftfasta/main.nf +++ b/modules/nf-core/gatk4/shiftfasta/main.nf @@ -2,7 +2,7 @@ process GATK4_SHIFTFASTA { tag "$meta.id" label 'process_single' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -36,7 +36,8 @@ process GATK4_SHIFTFASTA { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" ShiftFasta \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + ShiftFasta \\ --reference $fasta \\ --output ${prefix}_shift.fasta \\ --shift-back-output ${prefix}_shift.back_chain \\ diff --git a/modules/nf-core/gatk4/shiftfasta/meta.yml b/modules/nf-core/gatk4/shiftfasta/meta.yml index 6d563ded..c1ab0c2f 100644 --- a/modules/nf-core/gatk4/shiftfasta/meta.yml +++ b/modules/nf-core/gatk4/shiftfasta/meta.yml @@ -1,9 +1,10 @@ name: "gatk4_shiftfasta" description: Create a fasta with the bases shifted by offset keywords: + - gatk4 - mitochondria - - shiftfasta - shiftchain + - shiftfasta - shiftintervals tools: - gatk4: @@ -16,7 +17,6 @@ tools: tool_dev_url: "https://github.com/broadinstitute/gatk" doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] - input: - meta: type: map @@ -45,7 +45,6 @@ input: type: file description: sequence dictionary file pattern: "*.{dict}" - output: - meta: type: map @@ -76,6 +75,7 @@ output: type: file description: Intervals file for the shifted fasta file pattern: "*.{shifted.intervals}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index 3cb18373..957f1675 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -2,7 +2,7 @@ process GATK4_SPLITINTERVALS { tag "$meta.id" label 'process_low' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -32,7 +32,8 @@ process GATK4_SPLITINTERVALS { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" SplitIntervals \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + SplitIntervals \\ --output ${prefix} \\ --intervals $intervals \\ $reference \\ diff --git a/modules/nf-core/gatk4/splitintervals/meta.yml b/modules/nf-core/gatk4/splitintervals/meta.yml index a249f077..c92bad8b 100644 --- a/modules/nf-core/gatk4/splitintervals/meta.yml +++ b/modules/nf-core/gatk4/splitintervals/meta.yml @@ -1,8 +1,9 @@ name: gatk4_splitintervals description: Split intervals into sub-interval files. keywords: - - interval - bed + - gatk4 + - interval - splitintervals tools: - gatk4: @@ -12,7 +13,6 @@ tools: tool_dev_url: https://github.com/broadinstitute/gatk doi: "10.1158/1538-7445.AM2017-3590" licence: ["BSD-3-clause"] - input: - meta: type: map @@ -50,7 +50,6 @@ input: type: file description: Reference sequence dictionary pattern: "*.dict" - output: - meta: type: map @@ -65,7 +64,9 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@nvnieuwk" - "@ramprasadn" +maintainers: + - "@nvnieuwk" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index 387ff8ca..1c4d8ad0 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -2,7 +2,7 @@ process GATK4_VARIANTFILTRATION { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.4.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" @@ -32,7 +32,8 @@ process GATK4_VARIANTFILTRATION { avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}M" VariantFiltration \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ + VariantFiltration \\ --variant $vcf \\ --output ${prefix}.vcf.gz \\ --reference $fasta \\ diff --git a/modules/nf-core/gatk4/variantfiltration/meta.yml b/modules/nf-core/gatk4/variantfiltration/meta.yml index 2260f37b..11915a94 100644 --- a/modules/nf-core/gatk4/variantfiltration/meta.yml +++ b/modules/nf-core/gatk4/variantfiltration/meta.yml @@ -1,9 +1,10 @@ name: gatk4_variantfiltration description: Filter variants keywords: - - vcf - filter + - gatk4 - variantfiltration + - vcf tools: - gatk4: description: | @@ -71,3 +72,6 @@ output: authors: - "@kevinmenden" - "@ramprasadn" +maintainers: + - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf index 43ae0d19..13b7aff8 100644 --- a/modules/nf-core/genmod/annotate/main.nf +++ b/modules/nf-core/genmod/annotate/main.nf @@ -2,7 +2,7 @@ process GENMOD_ANNOTATE { tag "$meta.id" label 'process_medium' - conda "bioconda::genmod=3.7.4" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" diff --git a/modules/nf-core/genmod/annotate/meta.yml b/modules/nf-core/genmod/annotate/meta.yml index b142f96b..81aac686 100644 --- a/modules/nf-core/genmod/annotate/meta.yml +++ b/modules/nf-core/genmod/annotate/meta.yml @@ -9,7 +9,6 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" input: - meta: @@ -35,6 +34,7 @@ output: type: vcf description: Annotated VCF file pattern: "*.{vcf}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf index 149a03d8..d58f5fc4 100644 --- a/modules/nf-core/genmod/compound/main.nf +++ b/modules/nf-core/genmod/compound/main.nf @@ -2,7 +2,7 @@ process GENMOD_COMPOUND { tag "$meta.id" label 'process_medium' - conda "bioconda::genmod=3.7.4" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" diff --git a/modules/nf-core/genmod/compound/meta.yml b/modules/nf-core/genmod/compound/meta.yml index 831ba341..378bedfc 100644 --- a/modules/nf-core/genmod/compound/meta.yml +++ b/modules/nf-core/genmod/compound/meta.yml @@ -9,7 +9,6 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" input: - meta: @@ -35,6 +34,7 @@ output: type: file description: Output VCF file pattern: "*.{vcf}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf index 3f5700d6..15dc077b 100644 --- a/modules/nf-core/genmod/models/main.nf +++ b/modules/nf-core/genmod/models/main.nf @@ -2,7 +2,7 @@ process GENMOD_MODELS { tag "$meta.id" label 'process_medium' - conda "bioconda::genmod=3.7.4 conda-forge::python=3.4.5" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" diff --git a/modules/nf-core/genmod/models/meta.yml b/modules/nf-core/genmod/models/meta.yml index 240f79df..ea3295ac 100644 --- a/modules/nf-core/genmod/models/meta.yml +++ b/modules/nf-core/genmod/models/meta.yml @@ -9,7 +9,6 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" input: - meta: @@ -29,7 +28,6 @@ input: type: file description: ped file pattern: "*.{ped}" - output: - meta: type: map @@ -44,6 +42,7 @@ output: type: file description: Output VCF file pattern: "*.{vcf}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf index d1efade5..362ca074 100644 --- a/modules/nf-core/genmod/score/main.nf +++ b/modules/nf-core/genmod/score/main.nf @@ -2,7 +2,7 @@ process GENMOD_SCORE { tag "$meta.id" label 'process_medium' - conda "bioconda::genmod=3.7.4" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" diff --git a/modules/nf-core/genmod/score/meta.yml b/modules/nf-core/genmod/score/meta.yml index 26bb22ae..49dddcb1 100644 --- a/modules/nf-core/genmod/score/meta.yml +++ b/modules/nf-core/genmod/score/meta.yml @@ -9,7 +9,6 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" input: - meta: @@ -29,7 +28,6 @@ input: type: file description: rank model config file pattern: "*.{ini}" - output: - meta: type: map @@ -44,6 +42,7 @@ output: type: file description: Output VCF file pattern: "*.{vcf}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/glnexus/main.nf b/modules/nf-core/glnexus/main.nf index 2bd4580a..eb86b9b8 100644 --- a/modules/nf-core/glnexus/main.nf +++ b/modules/nf-core/glnexus/main.nf @@ -2,7 +2,7 @@ process GLNEXUS { tag "$meta.id" label 'process_medium' - conda "bioconda::glnexus=1.4.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/glnexus:1.4.1--h40d77a6_0' : 'biocontainers/glnexus:1.4.1--h40d77a6_0' }" diff --git a/modules/nf-core/glnexus/meta.yml b/modules/nf-core/glnexus/meta.yml index 89e4c74e..4944ebde 100644 --- a/modules/nf-core/glnexus/meta.yml +++ b/modules/nf-core/glnexus/meta.yml @@ -8,10 +8,8 @@ tools: description: scalable gVCF merging and joint variant calling for population sequencing projects. homepage: https://github.com/dnanexus-rnd/GLnexus documentation: https://github.com/dnanexus-rnd/GLnexus/wiki/Getting-Started - doi: 10.1101/343970 licence: ["Apache-2.0"] - input: - meta: type: map @@ -22,7 +20,6 @@ input: type: list description: Input genomic vcf files pattern: "*.{gvcf,gvcf.gz,g.vcf,g.vcf.gz}" - output: - versions: type: file @@ -34,3 +31,5 @@ output: pattern: "*.bcf" authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/haplocheck/main.nf b/modules/nf-core/haplocheck/main.nf index 464f5dbf..0d26c449 100644 --- a/modules/nf-core/haplocheck/main.nf +++ b/modules/nf-core/haplocheck/main.nf @@ -2,7 +2,7 @@ process HAPLOCHECK { tag "$meta.id" label 'process_low' - conda "bioconda::haplocheck=1.3.3" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/haplocheck:1.3.3--h4a94de4_0': 'biocontainers/haplocheck:1.3.3--h4a94de4_0' }" diff --git a/modules/nf-core/haplocheck/meta.yml b/modules/nf-core/haplocheck/meta.yml index 79da6a40..273b5b1c 100644 --- a/modules/nf-core/haplocheck/meta.yml +++ b/modules/nf-core/haplocheck/meta.yml @@ -16,40 +16,35 @@ tools: tool_dev_url: "https://github.com/genepi/haplocheck" doi: 10.1101/gr.256545.119 licence: "['MIT']" - input: - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - vcf: type: file description: VCF file pattern: "*.{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" - - txt: type: file description: Raw report in txt format pattern: "*.{txt}" - - html: type: file description: Haplocheck HTML report pattern: "*.{html}" - authors: - "@lmtani" +maintainers: + - "@lmtani" diff --git a/modules/nf-core/haplogrep2/classify/main.nf b/modules/nf-core/haplogrep2/classify/main.nf index 7f775cae..8ef9a033 100644 --- a/modules/nf-core/haplogrep2/classify/main.nf +++ b/modules/nf-core/haplogrep2/classify/main.nf @@ -2,7 +2,7 @@ process HAPLOGREP2_CLASSIFY { tag "$meta.id" label 'process_low' - conda "bioconda::haplogrep=2.4.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/haplogrep:2.4.0--hdfd78af_0': 'biocontainers/haplogrep:2.4.0--hdfd78af_0' }" diff --git a/modules/nf-core/haplogrep2/classify/meta.yml b/modules/nf-core/haplogrep2/classify/meta.yml index d21cc9b5..8174218e 100644 --- a/modules/nf-core/haplogrep2/classify/meta.yml +++ b/modules/nf-core/haplogrep2/classify/meta.yml @@ -8,9 +8,7 @@ tools: homepage: "https://github.com/seppinho/haplogrep-cmd" documentation: "https://github.com/seppinho/haplogrep-cmd" tool_dev_url: "https://github.com/seppinho/haplogrep-cmd" - licence: "['MIT']" - input: - meta: type: map @@ -24,7 +22,6 @@ input: - format: type: string description: either "vcf", "fasta" or "hsd" - output: - meta: type: map @@ -39,6 +36,7 @@ output: type: file description: text file with classification information pattern: "*.{txt}" - authors: - "@lucpen" +maintainers: + - "@lucpen" diff --git a/modules/nf-core/hmtnote/annotate/main.nf b/modules/nf-core/hmtnote/annotate/main.nf index d523d047..2fca73f4 100644 --- a/modules/nf-core/hmtnote/annotate/main.nf +++ b/modules/nf-core/hmtnote/annotate/main.nf @@ -2,7 +2,7 @@ process HMTNOTE_ANNOTATE { tag "$meta.id" label 'process_low' - conda "bioconda::hmtnote=0.7.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/hmtnote:0.7.2--pyhdfd78af_1': 'biocontainers/hmtnote:0.7.2--pyhdfd78af_1' }" diff --git a/modules/nf-core/hmtnote/annotate/meta.yml b/modules/nf-core/hmtnote/annotate/meta.yml index 44cf88ca..4ab41831 100644 --- a/modules/nf-core/hmtnote/annotate/meta.yml +++ b/modules/nf-core/hmtnote/annotate/meta.yml @@ -9,10 +9,8 @@ tools: description: Human mitochondrial variants annotation using HmtVar. homepage: https://github.com/robertopreste/HmtNote documentation: https://hmtnote.readthedocs.io/en/latest/usage.html - doi: "10.1101/600619" licence: ["MIT"] - input: - meta: type: map @@ -22,7 +20,6 @@ input: type: file description: vcf file pattern: "*.vcf" - output: - meta: type: map @@ -36,6 +33,7 @@ output: type: file description: annotated vcf pattern: "*_annotated.vcf" - authors: - "@sysbiocoder" +maintainers: + - "@sysbiocoder" diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index e052b7c9..5d5666c6 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -3,7 +3,7 @@ process MANTA_GERMLINE { label 'process_medium' label 'error_retry' - conda "bioconda::manta=1.6.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/manta:1.6.0--h9ee0642_1' : 'biocontainers/manta:1.6.0--h9ee0642_1' }" @@ -13,6 +13,7 @@ process MANTA_GERMLINE { tuple val(meta), path(input), path(index), path(target_bed), path(target_bed_tbi) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) + path(config) output: tuple val(meta), path("*candidate_small_indels.vcf.gz") , emit: candidate_small_indels_vcf @@ -31,27 +32,29 @@ process MANTA_GERMLINE { def prefix = task.ext.prefix ?: "${meta.id}" def input_files = input.collect{"--bam ${it}"}.join(' ') def options_manta = target_bed ? "--callRegions $target_bed" : "" + def config_option = config ? "--config ${config}" : "" """ - configManta.py \ - ${input_files} \ - --reference $fasta \ - --runDir manta \ - $options_manta \ + configManta.py \\ + ${input_files} \\ + ${config_option} \\ + --reference $fasta \\ + --runDir manta \\ + $options_manta \\ $args python manta/runWorkflow.py -m local -j $task.cpus - mv manta/results/variants/candidateSmallIndels.vcf.gz \ + mv manta/results/variants/candidateSmallIndels.vcf.gz \\ ${prefix}.candidate_small_indels.vcf.gz - mv manta/results/variants/candidateSmallIndels.vcf.gz.tbi \ + mv manta/results/variants/candidateSmallIndels.vcf.gz.tbi \\ ${prefix}.candidate_small_indels.vcf.gz.tbi - mv manta/results/variants/candidateSV.vcf.gz \ + mv manta/results/variants/candidateSV.vcf.gz \\ ${prefix}.candidate_sv.vcf.gz - mv manta/results/variants/candidateSV.vcf.gz.tbi \ + mv manta/results/variants/candidateSV.vcf.gz.tbi \\ ${prefix}.candidate_sv.vcf.gz.tbi - mv manta/results/variants/diploidSV.vcf.gz \ + mv manta/results/variants/diploidSV.vcf.gz \\ ${prefix}.diploid_sv.vcf.gz - mv manta/results/variants/diploidSV.vcf.gz.tbi \ + mv manta/results/variants/diploidSV.vcf.gz.tbi \\ ${prefix}.diploid_sv.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/manta/germline/meta.yml b/modules/nf-core/manta/germline/meta.yml index 2eb16ada..72ed15f8 100644 --- a/modules/nf-core/manta/germline/meta.yml +++ b/modules/nf-core/manta/germline/meta.yml @@ -16,7 +16,6 @@ tools: tool_dev_url: https://github.com/Illumina/manta doi: "10.1093/bioinformatics/btv710" licence: ["GPL v3"] - input: - meta: type: map @@ -57,7 +56,10 @@ input: type: file description: Genome reference FASTA index file pattern: "*.{fa.fai,fasta.fai}" - + - config: + type: file + description: Manta configuration file + pattern: "*.{ini,conf,config}" output: - meta: type: map @@ -92,7 +94,11 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@maxulysse" - "@ramprasadn" + - "@nvnieuwk" +maintainers: + - "@maxulysse" + - "@ramprasadn" + - "@nvnieuwk" diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index 74db3a27..c7e24303 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -2,10 +2,10 @@ process MOSDEPTH { tag "$meta.id" label 'process_medium' - conda "bioconda::mosdepth=0.3.3" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.3--hdfd78af_1' : - 'biocontainers/mosdepth:0.3.3--hdfd78af_1'}" + 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.6--hd299d5a_0' : + 'biocontainers/mosdepth:0.3.6--hd299d5a_0'}" input: tuple val(meta), path(bam), path(bai), path(bed) diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml index adf3893f..9caaf2cd 100644 --- a/modules/nf-core/mosdepth/meta.yml +++ b/modules/nf-core/mosdepth/meta.yml @@ -26,19 +26,14 @@ input: type: file description: Index for BAM/CRAM file pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing bed information - e.g. [ id:'test' ] - bed: type: file description: BED file with intersected intervals pattern: "*.{bed}" - - meta3: + - meta2: type: map description: | - Groovy Map containing reference information + Groovy Map containing bed information e.g. [ id:'test' ] - fasta: type: file @@ -107,3 +102,8 @@ authors: - "@drpatelh" - "@ramprasadn" - "@matthdsm" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@ramprasadn" + - "@matthdsm" diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index bc0bdb5b..7625b752 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::multiqc=1.18 + - bioconda::multiqc=1.19 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 00cc48d2..1b9f7c43 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.18--pyhdfd78af_0' : - 'biocontainers/multiqc:1.18--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' : + 'biocontainers/multiqc:1.19--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" @@ -43,7 +43,7 @@ process MULTIQC { stub: """ - touch multiqc_data + mkdir multiqc_data touch multiqc_plots touch multiqc_report.html diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index f1aa660e..45a9bc35 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,4 +1,3 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: multiqc description: Aggregate results from bioinformatics analyses across many samples into a single report keywords: diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index c2dad217..d0438eda 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -7,12 +7,9 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" - test("MULTIQC: FASTQC") { + test("sarscov2 single-end [fastqc]") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)]) @@ -26,20 +23,17 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert path(process.out.report.get(0)).exists() }, - { assert path(process.out.data.get(0)).exists() }, - { assert path(process.out.versions.get(0)).getText().contains("multiqc") } + { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, + { assert process.out.data[0] ==~ ".*/multiqc_data" }, + { assert snapshot(process.out.versions).match("versions") } ) } } - test("MULTIQC: FASTQC and a config file") { + test("sarscov2 single-end [fastqc] [config]") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)]) @@ -53,9 +47,35 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert path(process.out.report.get(0)).exists() }, - { assert path(process.out.data.get(0)).exists() }, - { assert path(process.out.versions.get(0)).getText().contains("multiqc") } + { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, + { assert process.out.data[0] ==~ ".*/multiqc_data" }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + } + + test("sarscov2 single-end [fastqc] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)]) + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.report.collect { file(it).getName() } + + process.out.data.collect { file(it).getName() } + + process.out.plots.collect { file(it).getName() } + + process.out.versions ).match() } ) } diff --git a/modules/nf-core/peddy/main.nf b/modules/nf-core/peddy/main.nf index 6671de73..b6be28c6 100644 --- a/modules/nf-core/peddy/main.nf +++ b/modules/nf-core/peddy/main.nf @@ -2,7 +2,7 @@ process PEDDY { tag "$meta.id" label 'process_low' - conda "bioconda::peddy=0.4.8" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/peddy:0.4.8--pyh5e36f6f_0' : 'biocontainers/peddy:0.4.8--pyh5e36f6f_0' }" diff --git a/modules/nf-core/peddy/meta.yml b/modules/nf-core/peddy/meta.yml index 4c72b286..24a82e19 100644 --- a/modules/nf-core/peddy/meta.yml +++ b/modules/nf-core/peddy/meta.yml @@ -4,7 +4,6 @@ keywords: - pedigrees - ped - family - tools: - peddy: description: genotype, ped correspondence check, ancestry check, sex check. directly, quickly on VCF @@ -13,7 +12,6 @@ tools: tool_dev_url: https://github.com/brentp/peddy doi: "10.1016/j.ajhg.2017.01.017" licence: ["MIT"] - input: - meta: type: map @@ -32,7 +30,6 @@ input: type: file description: TBI file pattern: "*.{vcf.gz.tbi}" - output: - meta: type: map @@ -59,6 +56,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@rannick" +maintainers: + - "@rannick" diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index a2a8d1c3..dc1a387d 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -2,10 +2,10 @@ process PICARD_ADDORREPLACEREADGROUPS { tag "$meta.id" label 'process_low' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -27,6 +27,9 @@ process PICARD_ADDORREPLACEREADGROUPS { } else { avail_mem = (task.memory.mega*0.8).intValue() } + + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ picard \\ -Xmx${avail_mem}M \\ @@ -43,6 +46,8 @@ process PICARD_ADDORREPLACEREADGROUPS { stub: def prefix = task.ext.prefix ?: "${meta.id}" + + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ touch ${prefix}.bam diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml index 28f584c3..ab573ac8 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/meta.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -4,6 +4,7 @@ keywords: - add - replace - read-group + - picard tools: - picard: description: | @@ -13,7 +14,6 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037226472-AddOrReplaceReadGroups-Picard- tool_dev_url: https://github.com/broadinstitute/picard licence: ["MIT"] - input: - meta: type: map @@ -24,7 +24,6 @@ input: type: file description: Input BAM file pattern: "*.{bam}" - output: - meta: type: map @@ -43,10 +42,15 @@ output: type: file description: BAM index file pattern: "*.{bai}" - authors: - "@sateeshperi" - "@mjcipriano" - "@hseabolt" - "@cmatKhan" - "@muffato" +maintainers: + - "@sateeshperi" + - "@mjcipriano" + - "@hseabolt" + - "@cmatKhan" + - "@muffato" diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index d721bc6f..b798452d 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTHSMETRICS { tag "$meta.id" label 'process_single' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(bam), path(bai), path(bait_intervals), path(target_intervals) diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml index fecad0e5..4b296fe0 100644 --- a/modules/nf-core/picard/collecthsmetrics/meta.yml +++ b/modules/nf-core/picard/collecthsmetrics/meta.yml @@ -17,7 +17,6 @@ tools: documentation: https://broadinstitute.github.io/picard/ tool_dev_url: https://github.com/broadinstitute/picard/ licence: ["MIT"] - input: - meta: type: map @@ -83,7 +82,9 @@ output: type: file description: Alignment metrics files generated by picard pattern: "*_{metrics}" - authors: - "@projectoriented" - "@matthdsm" +maintainers: + - "@projectoriented" + - "@matthdsm" diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 91fe9170..5640ce94 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTMULTIPLEMETRICS { tag "$meta.id" label 'process_single' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta) , path(bam), path(bai) @@ -14,7 +14,7 @@ process PICARD_COLLECTMULTIPLEMETRICS { output: tuple val(meta), path("*_metrics"), emit: metrics - tuple val(meta), path("*.pdf") , emit: pdf + tuple val(meta), path("*.pdf") , emit: pdf, optional: true path "versions.yml" , emit: versions when: diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml index 22656080..67bba57b 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml @@ -66,3 +66,5 @@ output: pattern: "versions.yml" authors: - "@drpatelh" +maintainers: + - "@drpatelh" diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 1d59334c..35f4129c 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -2,10 +2,10 @@ process PICARD_COLLECTWGSMETRICS { tag "$meta.id" label 'process_single' - conda "bioconda::picard=3.0.0 r::r-base" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index 19906f08..5576ef92 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -68,3 +68,8 @@ authors: - "@flowuenne" - "@lassefolkersen" - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@flowuenne" + - "@lassefolkersen" + - "@ramprasadn" diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf index bfb004f7..ab7212a1 100644 --- a/modules/nf-core/picard/liftovervcf/main.nf +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -2,10 +2,10 @@ process PICARD_LIFTOVERVCF { tag "$meta.id" label 'process_low' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/picard/liftovervcf/meta.yml b/modules/nf-core/picard/liftovervcf/meta.yml index 6023e5f9..9ccba6d2 100644 --- a/modules/nf-core/picard/liftovervcf/meta.yml +++ b/modules/nf-core/picard/liftovervcf/meta.yml @@ -10,14 +10,11 @@ tools: homepage: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard tool_dev_url: https://github.com/broadinstitute/picard - licence: ["MIT"] - input: - meta: type: map - description: Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + description: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - input_vcf: type: file description: VCF file @@ -48,12 +45,10 @@ input: - chain: type: file description: The liftover chain file - output: - meta: type: map - description: Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + description: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - versions: type: file description: File containing software versions @@ -66,7 +61,9 @@ output: type: file description: VCF file containing unsuccessfully lifted variants pattern: "*.{unlifted.vcf.gz}" - authors: - "@lucpen" - "@ramprasadn" +maintainers: + - "@lucpen" + - "@ramprasadn" diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index facd7efb..80930cc4 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(bam) @@ -30,6 +30,9 @@ process PICARD_MARKDUPLICATES { } else { avail_mem = (task.memory.mega*0.8).intValue() } + + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ picard \\ -Xmx${avail_mem}M \\ @@ -48,6 +51,7 @@ process PICARD_MARKDUPLICATES { stub: def prefix = task.ext.prefix ?: "${meta.id}" + if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ touch ${prefix}.bam touch ${prefix}.bam.bai diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index f7693d2f..1ab90c07 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -69,3 +69,7 @@ authors: - "@drpatelh" - "@projectoriented" - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf index 75dd64b7..d44b1829 100644 --- a/modules/nf-core/picard/renamesampleinvcf/main.nf +++ b/modules/nf-core/picard/renamesampleinvcf/main.nf @@ -3,10 +3,10 @@ process PICARD_RENAMESAMPLEINVCF { tag "$meta.id" label 'process_single' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/picard/renamesampleinvcf/meta.yml b/modules/nf-core/picard/renamesampleinvcf/meta.yml index ac678983..528002d0 100644 --- a/modules/nf-core/picard/renamesampleinvcf/meta.yml +++ b/modules/nf-core/picard/renamesampleinvcf/meta.yml @@ -3,6 +3,7 @@ description: changes name of sample in the vcf file keywords: - picard - picard/renamesampleinvcf + - vcf tools: - "picard": description: | @@ -11,9 +12,7 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ tool_dev_url: "https://github.com/broadinstitute/picard" - - licence: "['MIT']" - + licence: ["MIT"] input: - meta: type: map @@ -24,7 +23,6 @@ input: type: file description: VCF file pattern: "*.{vcf,vcf.gz}" - output: - meta: type: map @@ -39,6 +37,7 @@ output: type: file description: VCF file pattern: "*.{vcf,vcf.gz}" - authors: - "@Lucpen" +maintainers: + - "@Lucpen" diff --git a/modules/nf-core/picard/sortvcf/main.nf b/modules/nf-core/picard/sortvcf/main.nf index b8b1f833..5359caae 100644 --- a/modules/nf-core/picard/sortvcf/main.nf +++ b/modules/nf-core/picard/sortvcf/main.nf @@ -2,10 +2,10 @@ process PICARD_SORTVCF { tag "$meta.id" label 'process_medium' - conda "bioconda::picard=3.0.0" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'biocontainers/picard:3.0.0--hdfd78af_1' }" + 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : + 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/picard/sortvcf/meta.yml b/modules/nf-core/picard/sortvcf/meta.yml index 0a19784d..62507a08 100644 --- a/modules/nf-core/picard/sortvcf/meta.yml +++ b/modules/nf-core/picard/sortvcf/meta.yml @@ -10,7 +10,6 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/command-line-overview.html#SortVcf licence: ["MIT"] - input: - meta: type: map @@ -39,7 +38,6 @@ input: type: file description: Reference genome dictionary file pattern: "*.{dict}" - output: - meta: type: map @@ -54,6 +52,7 @@ output: type: file description: Sorted VCF file pattern: "*.{vcf}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf index fef7307a..8140e143 100644 --- a/modules/nf-core/qualimap/bamqc/main.nf +++ b/modules/nf-core/qualimap/bamqc/main.nf @@ -2,10 +2,10 @@ process QUALIMAP_BAMQC { tag "$meta.id" label 'process_medium' - conda "bioconda::qualimap=2.2.2d" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/qualimap:2.2.2d--1' : - 'biocontainers/qualimap:2.2.2d--1' }" + 'https://depot.galaxyproject.org/singularity/qualimap:2.3--hdfd78af_0' : + 'biocontainers/qualimap:2.3--hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/qualimap/bamqc/meta.yml b/modules/nf-core/qualimap/bamqc/meta.yml index 303532eb..7756d497 100644 --- a/modules/nf-core/qualimap/bamqc/meta.yml +++ b/modules/nf-core/qualimap/bamqc/meta.yml @@ -36,7 +36,7 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - results: - type: dir + type: directory description: Qualimap results dir pattern: "*/*" - versions: @@ -45,3 +45,5 @@ output: pattern: "versions.yml" authors: - "@phue" +maintainers: + - "@phue" diff --git a/modules/nf-core/rhocall/annotate/main.nf b/modules/nf-core/rhocall/annotate/main.nf index a55578ab..78de45c1 100644 --- a/modules/nf-core/rhocall/annotate/main.nf +++ b/modules/nf-core/rhocall/annotate/main.nf @@ -2,7 +2,7 @@ process RHOCALL_ANNOTATE { tag "$meta.id" label 'process_medium' - conda "bioconda::rhocall=0.5.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/rhocall:0.5.1--py39hbf8eff0_0': 'biocontainers/rhocall:0.5.1--py39hbf8eff0_0' }" diff --git a/modules/nf-core/rhocall/annotate/meta.yml b/modules/nf-core/rhocall/annotate/meta.yml index 96e10d96..ecc8e1e4 100644 --- a/modules/nf-core/rhocall/annotate/meta.yml +++ b/modules/nf-core/rhocall/annotate/meta.yml @@ -10,9 +10,7 @@ tools: homepage: "https://github.com/dnil/rhocall" documentation: "https://github.com/dnil/rhocall" tool_dev_url: "https://github.com/dnil" - licence: "['GPL v3']" - input: - meta: type: map @@ -40,7 +38,6 @@ input: type: file description: BED file with AZ windows. pattern: "*.{bed}" - output: - meta: type: map @@ -55,6 +52,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 59ed3088..d3461627 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : + 'biocontainers/samtools:1.18--h50ea8bc_1' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index 957b25e5..e189af28 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -55,3 +55,7 @@ authors: - "@drpatelh" - "@ewels" - "@phue" +maintainers: + - "@drpatelh" + - "@ewels" + - "@phue" diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 0b20aa4b..8ad18fdc 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : + 'biocontainers/samtools:1.18--h50ea8bc_1' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 8bd2fa6f..01a4ee03 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -51,3 +51,7 @@ authors: - "@drpatelh" - "@ewels" - "@maxulysse" +maintainers: + - "@drpatelh" + - "@ewels" + - "@maxulysse" diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index b73b7cb2..e104b90a 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : + 'biocontainers/samtools:1.18--h50ea8bc_1' }" input: tuple val(meta), path(input_files, stageAs: "?/*") @@ -16,6 +16,7 @@ process SAMTOOLS_MERGE { tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram tuple val(meta), path("*.csi") , optional:true, emit: csi + tuple val(meta), path("*.crai") , optional:true, emit: crai path "versions.yml" , emit: versions @@ -43,10 +44,14 @@ process SAMTOOLS_MERGE { """ stub: + def args = task.ext.args ?: '' prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + def index_type = file_type == "bam" ? "csi" : "crai" + def index = args.contains("--write-index") ? "touch ${prefix}.${index_type}" : "" """ touch ${prefix}.${file_type} + ${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 3a815f74..2e8f3dbb 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -65,9 +65,19 @@ output: type: file description: BAM index file (optional) pattern: "*.csi" + - crai: + type: file + description: CRAM index file (optional) + pattern: "*.crai" authors: - "@drpatelh" - "@yuukiiwa " - "@maxulysse" - "@FriederikeHanssen" - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@yuukiiwa " + - "@maxulysse" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 2b7753fd..4a666d42 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : + 'biocontainers/samtools:1.18--h50ea8bc_1' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 07328431..2200de72 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -46,3 +46,6 @@ output: authors: - "@drpatelh" - "@ewels" +maintainers: + - "@drpatelh" + - "@ewels" diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 4a2607de..7539140a 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.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : + 'biocontainers/samtools:1.18--h50ea8bc_1' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 90e6345f..735ff812 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -57,3 +57,7 @@ authors: - "@drpatelh" - "@FriederikeHanssen" - "@ramprasadn" +maintainers: + - "@drpatelh" + - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index cb91facf..0b5a2912 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_VIEW { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.17" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : + 'biocontainers/samtools:1.18--h50ea8bc_1' }" input: tuple val(meta), path(input), path(index) @@ -53,10 +53,19 @@ process SAMTOOLS_VIEW { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + + def index = args.contains("--write-index") ? "touch ${prefix}.csi" : "" + """ - touch ${prefix}.bam - touch ${prefix}.cram + touch ${prefix}.${file_type} + ${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 3b05450b..3dadafae 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -82,3 +82,8 @@ authors: - "@joseespinosa" - "@FriederikeHanssen" - "@priyanka-surana" +maintainers: + - "@drpatelh" + - "@joseespinosa" + - "@FriederikeHanssen" + - "@priyanka-surana" diff --git a/modules/nf-core/sentieon/bwaindex/main.nf b/modules/nf-core/sentieon/bwaindex/main.nf index 38e1d3a3..0d99cb67 100644 --- a/modules/nf-core/sentieon/bwaindex/main.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -3,7 +3,10 @@ process SENTIEON_BWAINDEX { label 'process_high' label 'sentieon' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(fasta) @@ -16,13 +19,20 @@ process SENTIEON_BWAINDEX { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "bwa/${task.ext.prefix}" : "bwa/${fasta.baseName}" """ + $fix_ld_library_path + mkdir bwa sentieon \\ @@ -39,11 +49,18 @@ process SENTIEON_BWAINDEX { """ stub: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + """ + $fix_ld_library_path + mkdir bwa touch bwa/genome.amb diff --git a/modules/nf-core/sentieon/bwaindex/meta.yml b/modules/nf-core/sentieon/bwaindex/meta.yml index 5d91e225..0af45ad8 100644 --- a/modules/nf-core/sentieon/bwaindex/meta.yml +++ b/modules/nf-core/sentieon/bwaindex/meta.yml @@ -39,3 +39,6 @@ output: authors: - "@drpatelh" - "@maxulysse" +maintainers: + - "@drpatelh" + - "@maxulysse" diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index b58835fd..e25515e7 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -5,7 +5,10 @@ process SENTIEON_BWAMEM { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(reads) @@ -21,10 +24,15 @@ process SENTIEON_BWAMEM { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' @@ -47,6 +55,8 @@ process SENTIEON_BWAMEM { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` sentieon bwa mem \\ @@ -64,8 +74,19 @@ process SENTIEON_BWAMEM { """ stub: + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' + } + def prefix = task.ext.prefix ?: "${meta.id}" """ + $fix_ld_library_path + touch ${prefix}.bam touch ${prefix}.bam.bai diff --git a/modules/nf-core/sentieon/bwamem/meta.yml b/modules/nf-core/sentieon/bwamem/meta.yml index 9987e8c9..0859a923 100644 --- a/modules/nf-core/sentieon/bwamem/meta.yml +++ b/modules/nf-core/sentieon/bwamem/meta.yml @@ -71,3 +71,5 @@ output: pattern: "versions.yml" authors: - "@asp8200" +maintainers: + - "@asp8200" diff --git a/modules/nf-core/sentieon/datametrics/main.nf b/modules/nf-core/sentieon/datametrics/main.nf index 831a8f68..3be2d11a 100644 --- a/modules/nf-core/sentieon/datametrics/main.nf +++ b/modules/nf-core/sentieon/datametrics/main.nf @@ -5,7 +5,10 @@ process SENTIEON_DATAMETRICS { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai) @@ -25,10 +28,15 @@ process SENTIEON_DATAMETRICS { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def input = bam.sort().collect{"-i $it"}.join(' ') @@ -51,6 +59,8 @@ process SENTIEON_DATAMETRICS { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + sentieon \\ driver \\ -t $task.cpus \\ @@ -70,8 +80,19 @@ process SENTIEON_DATAMETRICS { """ stub: + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' + } + def prefix = task.ext.prefix ?: "${meta.id}" """ + $fix_ld_library_path + touch ${prefix}_mq_metrics.txt touch ${prefix}_qd_metrics.txt touch ${prefix}_gc_summary.txt diff --git a/modules/nf-core/sentieon/datametrics/meta.yml b/modules/nf-core/sentieon/datametrics/meta.yml index bac58b9a..d2d1450a 100644 --- a/modules/nf-core/sentieon/datametrics/meta.yml +++ b/modules/nf-core/sentieon/datametrics/meta.yml @@ -1,4 +1,4 @@ -name: "sentieon_datametrics" +name: sentieon_datametrics description: Collects multiple quality metrics from a bam file keywords: - metrics @@ -11,7 +11,6 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ - input: - meta: type: map @@ -44,7 +43,6 @@ input: type: file description: Index of the genome fasta file pattern: "*.fai" - output: - meta: type: map @@ -79,6 +77,7 @@ output: type: file description: File containing the information about statistical distribution of insert sizes pattern: "*.txt" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf index c83d5e55..316993cc 100644 --- a/modules/nf-core/sentieon/dedup/main.nf +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -5,7 +5,10 @@ process SENTIEON_DEDUP { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai) @@ -26,10 +29,15 @@ process SENTIEON_DEDUP { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def args3 = task.ext.args3 ?: '' @@ -58,6 +66,8 @@ process SENTIEON_DEDUP { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + sentieon driver $args $input_list -r ${fasta} --algo LocusCollector $args2 --fun score_info ${prefix}.score sentieon driver $args3 -t $task.cpus $input_list -r ${fasta} --algo Dedup $args4 --score_info ${prefix}.score --metrics ${metrics} ${prefix}${suffix} # This following tsv-file is produced in order to get a proper tsv-file with Dedup-metrics for importing in MultiQC as "custom content". @@ -71,12 +81,25 @@ process SENTIEON_DEDUP { """ stub: + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' + } def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: ".cram" // The suffix should be either ".cram" or ".bam". + def metrics = task.ext.metrics ?: "${prefix}${suffix}.metrics" """ - touch ${prefix}.cram - touch ${prefix}.cram.crai - touch ${prefix}.metrics - touch ${prefix}.score + $fix_ld_library_path + + touch "${prefix}${suffix}" + touch "${prefix}${suffix}\$(echo ${suffix} | sed 's/m\$/i/')" + touch "${metrics}" + touch "${metrics}.multiqc.tsv" + touch "${prefix}.score" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/sentieon/dedup/meta.yml b/modules/nf-core/sentieon/dedup/meta.yml index ec0565d9..0efbb96c 100644 --- a/modules/nf-core/sentieon/dedup/meta.yml +++ b/modules/nf-core/sentieon/dedup/meta.yml @@ -86,3 +86,5 @@ output: pattern: "versions.yml" authors: - "@asp8200" +maintainers: + - "@asp8200" diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf index 3fe9a28f..1cbb02e3 100644 --- a/modules/nf-core/sentieon/dnamodelapply/main.nf +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -5,7 +5,10 @@ process SENTIEON_DNAMODELAPPLY { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(vcf), path(idx) @@ -22,10 +25,15 @@ process SENTIEON_DNAMODELAPPLY { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' @@ -48,6 +56,8 @@ process SENTIEON_DNAMODELAPPLY { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + sentieon driver \\ -t $task.cpus \\ -r $fasta \\ @@ -64,12 +74,20 @@ process SENTIEON_DNAMODELAPPLY { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + + def prefix = task.ext.prefix ?: "${meta.id}" + """ + $fix_ld_library_path + touch ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi diff --git a/modules/nf-core/sentieon/dnamodelapply/meta.yml b/modules/nf-core/sentieon/dnamodelapply/meta.yml index ec429bea..25076545 100644 --- a/modules/nf-core/sentieon/dnamodelapply/meta.yml +++ b/modules/nf-core/sentieon/dnamodelapply/meta.yml @@ -1,4 +1,4 @@ -name: "sentieon_dnamodelapply" +name: sentieon_dnamodelapply description: modifies the input VCF file by adding the MLrejected FILTER to the variants keywords: - dnamodelapply @@ -12,7 +12,6 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ - input: - meta: type: map @@ -54,7 +53,6 @@ input: type: file description: machine learning model file pattern: "*.model" - output: - meta: type: map @@ -73,6 +71,7 @@ output: type: file description: Index of the input VCF file pattern: "*.{tbi}" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index 6be42a17..7e5adefc 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -5,7 +5,10 @@ process SENTIEON_DNASCOPE { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai), path(intervals) @@ -29,10 +32,15 @@ process SENTIEON_DNASCOPE { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' // options for the driver def args2 = task.ext.args2 ?: '' // options for the vcf generation def args3 = task.ext.args3 ?: '' // options for the gvcf generation @@ -72,6 +80,8 @@ process SENTIEON_DNASCOPE { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + sentieon driver $args -r $fasta -t $task.cpus -i $bam $interval $vcf_cmd $gvcf_cmd cat <<-END_VERSIONS > versions.yml @@ -81,12 +91,20 @@ process SENTIEON_DNASCOPE { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + + def prefix = task.ext.prefix ?: "${meta.id}" + """ + $fix_ld_library_path + touch ${prefix}.unfiltered.vcf.gz touch ${prefix}.unfiltered.vcf.gz.tbi touch ${prefix}.g.vcf.gz diff --git a/modules/nf-core/sentieon/dnascope/meta.yml b/modules/nf-core/sentieon/dnascope/meta.yml index 34e0b97b..6b61cee8 100644 --- a/modules/nf-core/sentieon/dnascope/meta.yml +++ b/modules/nf-core/sentieon/dnascope/meta.yml @@ -114,6 +114,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/sentieon/readwriter/main.nf b/modules/nf-core/sentieon/readwriter/main.nf index 080b3ad7..b9afe576 100644 --- a/modules/nf-core/sentieon/readwriter/main.nf +++ b/modules/nf-core/sentieon/readwriter/main.nf @@ -5,7 +5,10 @@ process SENTIEON_READWRITER { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(input), path(index) @@ -22,10 +25,15 @@ process SENTIEON_READWRITER { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def input_str = input.sort().collect{"-i $it"}.join(' ') @@ -52,6 +60,8 @@ process SENTIEON_READWRITER { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + sentieon \\ driver \\ -t $task.cpus \\ @@ -69,10 +79,21 @@ process SENTIEON_READWRITER { """ stub: + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' + } + def prefix = task.ext.prefix ?: "${meta.id}" format = input.extension == "bam" ? "bam" : "cram" index = format == "bam" ? "bam.bai" : "cram.crai" """ + $fix_ld_library_path + touch ${prefix}.${format} touch ${prefix}.${index} diff --git a/modules/nf-core/sentieon/readwriter/meta.yml b/modules/nf-core/sentieon/readwriter/meta.yml index 23dcfcab..d2bbec28 100644 --- a/modules/nf-core/sentieon/readwriter/meta.yml +++ b/modules/nf-core/sentieon/readwriter/meta.yml @@ -44,7 +44,6 @@ input: type: file description: The index of the FASTA reference. pattern: "*.fai" - output: - meta: type: map @@ -66,6 +65,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/sentieon/wgsmetrics/main.nf b/modules/nf-core/sentieon/wgsmetrics/main.nf index fd7fdae5..b16641d9 100644 --- a/modules/nf-core/sentieon/wgsmetrics/main.nf +++ b/modules/nf-core/sentieon/wgsmetrics/main.nf @@ -5,7 +5,10 @@ process SENTIEON_WGSMETRICS { secret 'SENTIEON_LICENSE_BASE64' - container 'nf-core/sentieon:202112.06' + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : + 'biocontainers/sentieon:202308.01--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai) @@ -22,10 +25,15 @@ process SENTIEON_WGSMETRICS { task.ext.when == null || task.ext.when script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" @@ -49,6 +57,8 @@ process SENTIEON_WGSMETRICS { echo "Decoded and exported Sentieon test-license system environment variables" fi + $fix_ld_library_path + sentieon \\ driver \\ -t $task.cpus \\ @@ -65,12 +75,19 @@ process SENTIEON_WGSMETRICS { """ stub: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "Sentieon modules do not support Conda. Please use Docker / Singularity / Podman instead." + // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. + // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. + // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. + if (workflow.containerEngine == 'singularity') { + fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' + } else { + fix_ld_library_path = '' } + def prefix = task.ext.prefix ?: "${meta.id}" """ + $fix_ld_library_path + touch ${prefix}.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/sentieon/wgsmetrics/meta.yml b/modules/nf-core/sentieon/wgsmetrics/meta.yml index 09fb9eca..86431e1c 100644 --- a/modules/nf-core/sentieon/wgsmetrics/meta.yml +++ b/modules/nf-core/sentieon/wgsmetrics/meta.yml @@ -1,4 +1,4 @@ -name: "sentieon_wgsmetrics" +name: sentieon_wgsmetrics description: Collects whole genome quality metrics from a bam file keywords: - metrics @@ -11,7 +11,6 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ - input: - meta: type: map @@ -53,7 +52,6 @@ input: type: file description: bed or interval_list file containing interval in the reference that will be used in the analysis pattern: "*.{bed,interval_list}" - output: - meta: type: map @@ -68,6 +66,7 @@ output: type: file description: File containing the information about mean base quality score for each sequencing cycle pattern: "*.txt" - authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index 15abea2c..efe0a639 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -2,7 +2,7 @@ process SMNCOPYNUMBERCALLER { tag "$meta.id" label 'process_low' - conda "bioconda::smncopynumbercaller=1.1.2" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/smncopynumbercaller:1.1.2--py310h7cba7a3_0' : 'biocontainers/smncopynumbercaller:1.1.2--py310h7cba7a3_0' }" diff --git a/modules/nf-core/smncopynumbercaller/meta.yml b/modules/nf-core/smncopynumbercaller/meta.yml index 6d4e10b3..bb2690e9 100644 --- a/modules/nf-core/smncopynumbercaller/meta.yml +++ b/modules/nf-core/smncopynumbercaller/meta.yml @@ -10,7 +10,6 @@ tools: tool_dev_url: "https://github.com/Illumina/SMNCopyNumberCaller" doi: "10.1038/s41436-020-0754-0" licence: "Apache License Version 2.0" - input: - bam: type: file @@ -25,7 +24,6 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - output: - meta: type: map @@ -44,6 +42,7 @@ output: type: file description: File containing software versions pattern: "versions.yml" - authors: - "@peterpru" +maintainers: + - "@peterpru" diff --git a/modules/nf-core/stranger/main.nf b/modules/nf-core/stranger/main.nf index 0c8a3412..dd44bb99 100644 --- a/modules/nf-core/stranger/main.nf +++ b/modules/nf-core/stranger/main.nf @@ -2,7 +2,7 @@ process STRANGER { tag "$meta.id" label 'process_low' - conda "bioconda::stranger=0.8.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/stranger:0.8.1--pyh5e36f6f_0': 'biocontainers/stranger:0.8.1--pyh5e36f6f_0' }" diff --git a/modules/nf-core/stranger/meta.yml b/modules/nf-core/stranger/meta.yml index eefad398..5e0bc0bb 100644 --- a/modules/nf-core/stranger/meta.yml +++ b/modules/nf-core/stranger/meta.yml @@ -13,7 +13,6 @@ tools: tool_dev_url: https://github.com/moonso/stranger doi: "10.5281/zenodo.4548873" licence: ["MIT"] - input: - meta: type: map @@ -33,7 +32,6 @@ input: type: file description: json file with repeat expansion sites to genotype pattern: "*.{json}" - output: - meta: type: map @@ -48,6 +46,7 @@ output: type: file description: annotated VCF with keys STR_STATUS, NormalMax and PathologicMin pattern: "*.{vcf.gz}" - authors: - "@ljmesi" +maintainers: + - "@ljmesi" diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 0bd94499..0d9967dd 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -1,7 +1,7 @@ process SVDB_MERGE { tag "$meta.id" label 'process_medium' - conda "bioconda::svdb=2.8.1 bioconda::samtools=1.16.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0': 'biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0' }" diff --git a/modules/nf-core/svdb/merge/meta.yml b/modules/nf-core/svdb/merge/meta.yml index 92a5a128..84265acb 100644 --- a/modules/nf-core/svdb/merge/meta.yml +++ b/modules/nf-core/svdb/merge/meta.yml @@ -39,3 +39,5 @@ output: pattern: "*_sv_merge.vcf.gz" authors: - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf index 8c47d9e2..7772e9ad 100644 --- a/modules/nf-core/tabix/bgzip/main.nf +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -2,7 +2,7 @@ process TABIX_BGZIP { tag "$meta.id" label 'process_single' - conda "bioconda::tabix=1.11" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : 'biocontainers/tabix:1.11--hdfd78af_0' }" diff --git a/modules/nf-core/tabix/bgzip/meta.yml b/modules/nf-core/tabix/bgzip/meta.yml index c3ea2107..621d49ea 100644 --- a/modules/nf-core/tabix/bgzip/meta.yml +++ b/modules/nf-core/tabix/bgzip/meta.yml @@ -45,3 +45,8 @@ authors: - "@drpatelh" - "@maxulysse" - "@nvnieuwk" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" + - "@nvnieuwk" diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index d6c5a760..f9482690 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -2,7 +2,7 @@ process TABIX_BGZIPTABIX { tag "$meta.id" label 'process_single' - conda "bioconda::tabix=1.11" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : 'biocontainers/tabix:1.11--hdfd78af_0' }" diff --git a/modules/nf-core/tabix/bgziptabix/meta.yml b/modules/nf-core/tabix/bgziptabix/meta.yml index 2761e271..438aba4d 100644 --- a/modules/nf-core/tabix/bgziptabix/meta.yml +++ b/modules/nf-core/tabix/bgziptabix/meta.yml @@ -48,3 +48,6 @@ output: authors: - "@maxulysse" - "@DLBPointon" +maintainers: + - "@maxulysse" + - "@DLBPointon" diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index 5bf332ef..c304a8a3 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -2,7 +2,7 @@ process TABIX_TABIX { tag "$meta.id" label 'process_single' - conda "bioconda::tabix=1.11" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : 'biocontainers/tabix:1.11--hdfd78af_0' }" diff --git a/modules/nf-core/tabix/tabix/meta.yml b/modules/nf-core/tabix/tabix/meta.yml index fcc6e524..ae5b4f43 100644 --- a/modules/nf-core/tabix/tabix/meta.yml +++ b/modules/nf-core/tabix/tabix/meta.yml @@ -43,3 +43,7 @@ authors: - "@joseespinosa" - "@drpatelh" - "@maxulysse" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@maxulysse" diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 67a0670d..0f4bc7cb 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -2,7 +2,7 @@ process TIDDIT_SV { tag "$meta.id" label 'process_medium' - conda "bioconda::tiddit=3.6.1" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tiddit:3.6.1--py38h24c8ff8_0' : 'biocontainers/tiddit:3.6.1--py38h24c8ff8_0' }" diff --git a/modules/nf-core/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml index 8b41c69c..b13ae5cd 100644 --- a/modules/nf-core/tiddit/sv/meta.yml +++ b/modules/nf-core/tiddit/sv/meta.yml @@ -53,3 +53,5 @@ output: pattern: "versions.yml" authors: - "@maxulysse" +maintainers: + - "@maxulysse" diff --git a/modules/nf-core/ucsc/wigtobigwig/main.nf b/modules/nf-core/ucsc/wigtobigwig/main.nf index c5f215b1..4b7adb62 100644 --- a/modules/nf-core/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/ucsc/wigtobigwig/main.nf @@ -3,7 +3,7 @@ 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=447" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ucsc-wigtobigwig:447--h2a80c09_1' : 'biocontainers/ucsc-wigtobigwig:447--h2a80c09_1' }" diff --git a/modules/nf-core/ucsc/wigtobigwig/meta.yml b/modules/nf-core/ucsc/wigtobigwig/meta.yml index 470967db..f7476480 100644 --- a/modules/nf-core/ucsc/wigtobigwig/meta.yml +++ b/modules/nf-core/ucsc/wigtobigwig/meta.yml @@ -11,7 +11,6 @@ tools: or bedGraph format) to binary big wig format homepage: http://www.genome.ucsc.edu/goldenPath/help/bigWig.html licence: ["varies; see http://genome.ucsc.edu/license"] - input: - meta: type: map @@ -25,7 +24,6 @@ input: - chromsizes: type: file description: chromosome sizes file - output: - versions: type: file @@ -35,7 +33,9 @@ output: type: file description: bigwig file pattern: "*.{bw}" - authors: - "@jianhong" - "@projectoriented" +maintainers: + - "@jianhong" + - "@projectoriented" diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 61461c39..8a75bb95 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -2,7 +2,7 @@ process UNTAR { tag "$archive" label 'process_single' - conda "conda-forge::sed=4.7 conda-forge::grep=3.11 conda-forge::tar=1.34" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : 'nf-core/ubuntu:20.04' }" diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index db241a6e..a9a2110f 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -39,3 +39,8 @@ authors: - "@drpatelh" - "@matthdsm" - "@jfy133" +maintainers: + - "@joseespinosa" + - "@drpatelh" + - "@matthdsm" + - "@jfy133" diff --git a/modules/nf-core/upd/main.nf b/modules/nf-core/upd/main.nf index a73fcd45..c4bcaf17 100644 --- a/modules/nf-core/upd/main.nf +++ b/modules/nf-core/upd/main.nf @@ -3,7 +3,7 @@ process UPD { tag "$meta.id" label 'process_single' - conda "bioconda::upd=0.1.1" + conda "${moduleDir}/environment.yml" 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' }" diff --git a/modules/nf-core/upd/meta.yml b/modules/nf-core/upd/meta.yml index f99ca01f..7682e337 100644 --- a/modules/nf-core/upd/meta.yml +++ b/modules/nf-core/upd/meta.yml @@ -40,3 +40,5 @@ output: pattern: "*.{bed}" authors: - "@hrydbeck" +maintainers: + - "@hrydbeck" diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index a2a078da..25c131b1 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -2,10 +2,10 @@ process VCFANNO { tag "$meta.id" label 'process_low' - conda "bioconda::vcfanno=0.3.3" + conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/vcfanno:0.3.3--h9ee0642_0': - 'biocontainers/vcfanno:0.3.3--h9ee0642_0' }" + 'https://depot.galaxyproject.org/singularity/vcfanno:0.3.5--h9ee0642_0': + 'biocontainers/vcfanno:0.3.5--h9ee0642_0' }" input: tuple val(meta), path(vcf), path(tbi), path(specific_resources) diff --git a/modules/nf-core/vcfanno/meta.yml b/modules/nf-core/vcfanno/meta.yml index 86fea0c4..89c781ad 100644 --- a/modules/nf-core/vcfanno/meta.yml +++ b/modules/nf-core/vcfanno/meta.yml @@ -10,12 +10,10 @@ keywords: tools: - vcfanno: description: annotate a VCF with other VCFs/BEDs/tabixed files - documentation: https://github.com/brentp/vcfanno#vcfanno tool_dev_url: https://github.com/brentp/vcfanno doi: "10.1186/s13059-016-0973-5" license: ["MIT"] - input: - meta: type: map @@ -44,7 +42,6 @@ input: - resources: type: map description: List of reference files defined in toml config, must also include indices if bgzipped. - output: - meta: type: map @@ -59,7 +56,9 @@ output: type: file description: Annotated VCF file pattern: "*.vcf" - authors: - "@projectoriented" - "@matthdsm" +maintainers: + - "@projectoriented" + - "@matthdsm" From 25980921be607b6b491a0518bc9784e2a18200aa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Jan 2024 09:55:09 +0100 Subject: [PATCH 1564/1921] modify RG construction --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9481b930..fb7efc55 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -166,7 +166,7 @@ workflow RAREDISEASE { .combine( ch_original_input ) .map { counts, meta, fastq1, fastq2 -> new_meta = meta + [num_lanes:counts[meta.id], - read_group:"\'@RG\\tID:"+ fastq1.toString().split('/')[-1] + "\\tPL:ILLUMINA\\tSM:"+meta.id+"\'"] + read_group:"\'@RG\\tID:"+ fastq1.toString().split('/')[-1] + "\\tPL:" + params.platform.toUpperCase() + "\\tSM:" + meta.id + "\'"] if (!fastq2) { return [ new_meta + [ single_end:true ], [ fastq1 ] ] } else { From 04079e0143f9ca64953d74eee8c68aa53867add0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Jan 2024 11:09:25 +0100 Subject: [PATCH 1565/1921] update modules --- .../nf-core/bcftools/annotate/environment.yml | 7 + .../nf-core/bcftools/concat/environment.yml | 7 + .../bcftools/concat/tests/main.nf.test | 108 ++ .../bcftools/concat/tests/main.nf.test.snap | 43 + .../bcftools/concat/tests/nextflow.config | 3 + .../nf-core/bcftools/concat/tests/tags.yml | 2 + .../nf-core/bcftools/filter/environment.yml | 7 + .../nf-core/bcftools/merge/environment.yml | 7 + modules/nf-core/bcftools/norm/environment.yml | 7 + .../nf-core/bcftools/reheader/environment.yml | 7 + .../bcftools/reheader/tests/bcf.config | 4 + .../bcftools/reheader/tests/main.nf.test | 197 +++ .../bcftools/reheader/tests/main.nf.test.snap | 166 +++ .../nf-core/bcftools/reheader/tests/tags.yml | 2 + .../bcftools/reheader/tests/vcf.config | 4 + .../bcftools/reheader/tests/vcf.gz.config | 4 + modules/nf-core/bcftools/roh/environment.yml | 7 + modules/nf-core/bcftools/sort/environment.yml | 7 + modules/nf-core/bcftools/view/environment.yml | 7 + .../nf-core/bcftools/view/tests/main.nf.test | 103 ++ .../bcftools/view/tests/main.nf.test.snap | 45 + .../bcftools/view/tests/nextflow.config | 3 + modules/nf-core/bcftools/view/tests/tags.yml | 2 + modules/nf-core/bwa/index/environment.yml | 7 + modules/nf-core/bwa/index/tests/main.nf.test | 33 + .../nf-core/bwa/index/tests/main.nf.test.snap | 43 + modules/nf-core/bwa/index/tests/tags.yml | 2 + modules/nf-core/bwamem2/index/environment.yml | 7 + modules/nf-core/bwamem2/mem/environment.yml | 9 + .../nf-core/bwamem2/mem/tests/main.nf.test | 213 +++ .../bwamem2/mem/tests/main.nf.test.snap | 47 + modules/nf-core/bwamem2/mem/tests/tags.yml | 2 + modules/nf-core/cadd/environment.yml | 9 + modules/nf-core/chromograph/environment.yml | 7 + .../nf-core/cnvnator/cnvnator/environment.yml | 7 + .../cnvnator/convert2vcf/environment.yml | 7 + modules/nf-core/deepvariant/environment.yml | 5 + .../ensemblvep/filtervep/environment.yml | 7 + .../nf-core/expansionhunter/environment.yml | 7 + .../gatk4/bedtointervallist/environment.yml | 7 + .../gatk4/collectreadcounts/environment.yml | 7 + .../createsequencedictionary/environment.yml | 7 + .../gatk4/denoisereadcounts/environment.yml | 7 + .../environment.yml | 5 + .../gatk4/filtermutectcalls/environment.yml | 7 + .../gatk4/germlinecnvcaller/environment.yml | 5 + .../gatk4/intervallisttools/environment.yml | 7 + .../gatk4/mergebamalignment/environment.yml | 7 + .../nf-core/gatk4/mergevcfs/environment.yml | 7 + modules/nf-core/gatk4/mutect2/environment.yml | 7 + .../environment.yml | 5 + .../gatk4/preprocessintervals/environment.yml | 7 + .../nf-core/gatk4/printreads/environment.yml | 7 + .../nf-core/gatk4/revertsam/environment.yml | 7 + .../nf-core/gatk4/samtofastq/environment.yml | 7 + .../gatk4/selectvariants/environment.yml | 7 + .../nf-core/gatk4/shiftfasta/environment.yml | 7 + .../gatk4/splitintervals/environment.yml | 7 + .../gatk4/variantfiltration/environment.yml | 7 + .../nf-core/genmod/annotate/environment.yml | 7 + .../nf-core/genmod/compound/environment.yml | 7 + modules/nf-core/genmod/models/environment.yml | 8 + modules/nf-core/genmod/score/environment.yml | 7 + modules/nf-core/glnexus/environment.yml | 7 + modules/nf-core/haplocheck/environment.yml | 7 + .../haplogrep2/classify/environment.yml | 7 + .../nf-core/hmtnote/annotate/environment.yml | 7 + .../nf-core/manta/germline/environment.yml | 7 + modules/nf-core/mosdepth/environment.yml | 8 + modules/nf-core/mosdepth/tests/main.nf.test | 260 ++++ .../nf-core/mosdepth/tests/main.nf.test.snap | 1145 +++++++++++++++++ .../nf-core/mosdepth/tests/quantized.config | 3 + modules/nf-core/mosdepth/tests/tags.yml | 2 + .../nf-core/mosdepth/tests/threshold.config | 3 + modules/nf-core/mosdepth/tests/window.config | 3 + .../nf-core/multiqc/tests/main.nf.test.snap | 21 + modules/nf-core/peddy/environment.yml | 7 + .../addorreplacereadgroups/environment.yml | 7 + .../picard/collecthsmetrics/environment.yml | 7 + .../collectmultiplemetrics/environment.yml | 7 + .../picard/collectwgsmetrics/environment.yml | 8 + .../picard/liftovervcf/environment.yml | 7 + .../picard/markduplicates/environment.yml | 7 + .../picard/markduplicates/tests/main.nf.test | 111 ++ .../markduplicates/tests/main.nf.test.snap | 44 + .../markduplicates/tests/nextflow.config | 6 + .../picard/markduplicates/tests/tags.yml | 2 + .../picard/renamesampleinvcf/environment.yml | 7 + .../nf-core/picard/sortvcf/environment.yml | 7 + .../nf-core/qualimap/bamqc/environment.yml | 7 + .../nf-core/qualimap/bamqc/tests/main.nf.test | 39 + .../qualimap/bamqc/tests/main.nf.test.snap | 11 + modules/nf-core/qualimap/bamqc/tests/tags.yml | 2 + .../nf-core/rhocall/annotate/environment.yml | 7 + .../nf-core/samtools/faidx/environment.yml | 7 + .../nf-core/samtools/index/environment.yml | 7 + .../samtools/index/tests/csi.nextflow.config | 7 + .../nf-core/samtools/index/tests/main.nf.test | 87 ++ .../samtools/index/tests/main.nf.test.snap | 28 + modules/nf-core/samtools/index/tests/tags.yml | 2 + .../nf-core/samtools/merge/environment.yml | 7 + .../nf-core/samtools/merge/tests/index.config | 3 + .../nf-core/samtools/merge/tests/main.nf.test | 156 +++ .../samtools/merge/tests/main.nf.test.snap | 68 + modules/nf-core/samtools/merge/tests/tags.yml | 2 + modules/nf-core/samtools/sort/environment.yml | 7 + .../nf-core/samtools/sort/tests/main.nf.test | 73 ++ .../samtools/sort/tests/main.nf.test.snap | 48 + .../samtools/sort/tests/nextflow.config | 7 + modules/nf-core/samtools/sort/tests/tags.yml | 3 + .../nf-core/samtools/stats/environment.yml | 7 + .../nf-core/samtools/stats/tests/main.nf.test | 78 ++ .../samtools/stats/tests/main.nf.test.snap | 64 + modules/nf-core/samtools/stats/tests/tags.yml | 2 + modules/nf-core/samtools/view/environment.yml | 7 + .../nf-core/samtools/view/tests/bam.config | 3 + .../samtools/view/tests/bam_index.config | 3 + .../nf-core/samtools/view/tests/main.nf.test | 231 ++++ .../samtools/view/tests/main.nf.test.snap | 140 ++ modules/nf-core/samtools/view/tests/tags.yml | 2 + .../nf-core/sentieon/bwaindex/environment.yml | 7 + .../nf-core/sentieon/bwamem/environment.yml | 7 + .../sentieon/datametrics/environment.yml | 7 + .../nf-core/sentieon/dedup/environment.yml | 7 + .../sentieon/dnamodelapply/environment.yml | 7 + .../nf-core/sentieon/dnascope/environment.yml | 7 + .../sentieon/readwriter/environment.yml | 7 + .../sentieon/wgsmetrics/environment.yml | 7 + .../smncopynumbercaller/environment.yml | 7 + modules/nf-core/stranger/environment.yml | 7 + modules/nf-core/svdb/merge/environment.yml | 9 + modules/nf-core/tabix/bgzip/environment.yml | 7 + .../nf-core/tabix/bgziptabix/environment.yml | 7 + modules/nf-core/tabix/tabix/environment.yml | 7 + modules/nf-core/tiddit/sv/environment.yml | 7 + .../nf-core/ucsc/wigtobigwig/environment.yml | 7 + modules/nf-core/untar/environment.yml | 11 + modules/nf-core/untar/tests/main.nf.test | 55 + modules/nf-core/untar/tests/main.nf.test.snap | 34 + modules/nf-core/untar/tests/tags.yml | 2 + modules/nf-core/upd/environment.yml | 7 + modules/nf-core/vcfanno/environment.yml | 7 + modules/nf-core/vcfanno/tests/main.nf.test | 106 ++ .../nf-core/vcfanno/tests/main.nf.test.snap | 73 ++ modules/nf-core/vcfanno/tests/nextflow.config | 4 + modules/nf-core/vcfanno/tests/tags.yml | 2 + 146 files changed, 4561 insertions(+) create mode 100644 modules/nf-core/bcftools/annotate/environment.yml create mode 100644 modules/nf-core/bcftools/concat/environment.yml create mode 100644 modules/nf-core/bcftools/concat/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/concat/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/concat/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/concat/tests/tags.yml create mode 100644 modules/nf-core/bcftools/filter/environment.yml create mode 100644 modules/nf-core/bcftools/merge/environment.yml create mode 100644 modules/nf-core/bcftools/norm/environment.yml create mode 100644 modules/nf-core/bcftools/reheader/environment.yml create mode 100644 modules/nf-core/bcftools/reheader/tests/bcf.config create mode 100644 modules/nf-core/bcftools/reheader/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/reheader/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/reheader/tests/tags.yml create mode 100644 modules/nf-core/bcftools/reheader/tests/vcf.config create mode 100644 modules/nf-core/bcftools/reheader/tests/vcf.gz.config create mode 100644 modules/nf-core/bcftools/roh/environment.yml create mode 100644 modules/nf-core/bcftools/sort/environment.yml create mode 100644 modules/nf-core/bcftools/view/environment.yml create mode 100644 modules/nf-core/bcftools/view/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/view/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/view/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/view/tests/tags.yml create mode 100644 modules/nf-core/bwa/index/environment.yml create mode 100644 modules/nf-core/bwa/index/tests/main.nf.test create mode 100644 modules/nf-core/bwa/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwa/index/tests/tags.yml create mode 100644 modules/nf-core/bwamem2/index/environment.yml create mode 100644 modules/nf-core/bwamem2/mem/environment.yml create mode 100644 modules/nf-core/bwamem2/mem/tests/main.nf.test create mode 100644 modules/nf-core/bwamem2/mem/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwamem2/mem/tests/tags.yml create mode 100644 modules/nf-core/cadd/environment.yml create mode 100644 modules/nf-core/chromograph/environment.yml create mode 100644 modules/nf-core/cnvnator/cnvnator/environment.yml create mode 100644 modules/nf-core/cnvnator/convert2vcf/environment.yml create mode 100644 modules/nf-core/deepvariant/environment.yml create mode 100644 modules/nf-core/ensemblvep/filtervep/environment.yml create mode 100644 modules/nf-core/expansionhunter/environment.yml create mode 100644 modules/nf-core/gatk4/bedtointervallist/environment.yml create mode 100644 modules/nf-core/gatk4/collectreadcounts/environment.yml create mode 100644 modules/nf-core/gatk4/createsequencedictionary/environment.yml create mode 100644 modules/nf-core/gatk4/denoisereadcounts/environment.yml create mode 100644 modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml create mode 100644 modules/nf-core/gatk4/filtermutectcalls/environment.yml create mode 100644 modules/nf-core/gatk4/germlinecnvcaller/environment.yml create mode 100644 modules/nf-core/gatk4/intervallisttools/environment.yml create mode 100644 modules/nf-core/gatk4/mergebamalignment/environment.yml create mode 100644 modules/nf-core/gatk4/mergevcfs/environment.yml create mode 100644 modules/nf-core/gatk4/mutect2/environment.yml create mode 100644 modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml create mode 100644 modules/nf-core/gatk4/preprocessintervals/environment.yml create mode 100644 modules/nf-core/gatk4/printreads/environment.yml create mode 100644 modules/nf-core/gatk4/revertsam/environment.yml create mode 100644 modules/nf-core/gatk4/samtofastq/environment.yml create mode 100644 modules/nf-core/gatk4/selectvariants/environment.yml create mode 100644 modules/nf-core/gatk4/shiftfasta/environment.yml create mode 100644 modules/nf-core/gatk4/splitintervals/environment.yml create mode 100644 modules/nf-core/gatk4/variantfiltration/environment.yml create mode 100644 modules/nf-core/genmod/annotate/environment.yml create mode 100644 modules/nf-core/genmod/compound/environment.yml create mode 100644 modules/nf-core/genmod/models/environment.yml create mode 100644 modules/nf-core/genmod/score/environment.yml create mode 100644 modules/nf-core/glnexus/environment.yml create mode 100644 modules/nf-core/haplocheck/environment.yml create mode 100644 modules/nf-core/haplogrep2/classify/environment.yml create mode 100644 modules/nf-core/hmtnote/annotate/environment.yml create mode 100644 modules/nf-core/manta/germline/environment.yml create mode 100644 modules/nf-core/mosdepth/environment.yml create mode 100644 modules/nf-core/mosdepth/tests/main.nf.test create mode 100644 modules/nf-core/mosdepth/tests/main.nf.test.snap create mode 100644 modules/nf-core/mosdepth/tests/quantized.config create mode 100644 modules/nf-core/mosdepth/tests/tags.yml create mode 100644 modules/nf-core/mosdepth/tests/threshold.config create mode 100644 modules/nf-core/mosdepth/tests/window.config create mode 100644 modules/nf-core/multiqc/tests/main.nf.test.snap create mode 100644 modules/nf-core/peddy/environment.yml create mode 100644 modules/nf-core/picard/addorreplacereadgroups/environment.yml create mode 100644 modules/nf-core/picard/collecthsmetrics/environment.yml create mode 100644 modules/nf-core/picard/collectmultiplemetrics/environment.yml create mode 100644 modules/nf-core/picard/collectwgsmetrics/environment.yml create mode 100644 modules/nf-core/picard/liftovervcf/environment.yml create mode 100644 modules/nf-core/picard/markduplicates/environment.yml create mode 100644 modules/nf-core/picard/markduplicates/tests/main.nf.test create mode 100644 modules/nf-core/picard/markduplicates/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/markduplicates/tests/nextflow.config create mode 100644 modules/nf-core/picard/markduplicates/tests/tags.yml create mode 100644 modules/nf-core/picard/renamesampleinvcf/environment.yml create mode 100644 modules/nf-core/picard/sortvcf/environment.yml create mode 100644 modules/nf-core/qualimap/bamqc/environment.yml create mode 100644 modules/nf-core/qualimap/bamqc/tests/main.nf.test create mode 100644 modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap create mode 100644 modules/nf-core/qualimap/bamqc/tests/tags.yml create mode 100644 modules/nf-core/rhocall/annotate/environment.yml create mode 100644 modules/nf-core/samtools/faidx/environment.yml create mode 100644 modules/nf-core/samtools/index/environment.yml create mode 100644 modules/nf-core/samtools/index/tests/csi.nextflow.config create mode 100644 modules/nf-core/samtools/index/tests/main.nf.test create mode 100644 modules/nf-core/samtools/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/index/tests/tags.yml create mode 100644 modules/nf-core/samtools/merge/environment.yml create mode 100644 modules/nf-core/samtools/merge/tests/index.config create mode 100644 modules/nf-core/samtools/merge/tests/main.nf.test create mode 100644 modules/nf-core/samtools/merge/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/merge/tests/tags.yml create mode 100644 modules/nf-core/samtools/sort/environment.yml create mode 100644 modules/nf-core/samtools/sort/tests/main.nf.test create mode 100644 modules/nf-core/samtools/sort/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/sort/tests/nextflow.config create mode 100644 modules/nf-core/samtools/sort/tests/tags.yml create mode 100644 modules/nf-core/samtools/stats/environment.yml create mode 100644 modules/nf-core/samtools/stats/tests/main.nf.test create mode 100644 modules/nf-core/samtools/stats/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/stats/tests/tags.yml create mode 100644 modules/nf-core/samtools/view/environment.yml create mode 100644 modules/nf-core/samtools/view/tests/bam.config create mode 100644 modules/nf-core/samtools/view/tests/bam_index.config create mode 100644 modules/nf-core/samtools/view/tests/main.nf.test create mode 100644 modules/nf-core/samtools/view/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/view/tests/tags.yml create mode 100644 modules/nf-core/sentieon/bwaindex/environment.yml create mode 100644 modules/nf-core/sentieon/bwamem/environment.yml create mode 100644 modules/nf-core/sentieon/datametrics/environment.yml create mode 100644 modules/nf-core/sentieon/dedup/environment.yml create mode 100644 modules/nf-core/sentieon/dnamodelapply/environment.yml create mode 100644 modules/nf-core/sentieon/dnascope/environment.yml create mode 100644 modules/nf-core/sentieon/readwriter/environment.yml create mode 100644 modules/nf-core/sentieon/wgsmetrics/environment.yml create mode 100644 modules/nf-core/smncopynumbercaller/environment.yml create mode 100644 modules/nf-core/stranger/environment.yml create mode 100644 modules/nf-core/svdb/merge/environment.yml create mode 100644 modules/nf-core/tabix/bgzip/environment.yml create mode 100644 modules/nf-core/tabix/bgziptabix/environment.yml create mode 100644 modules/nf-core/tabix/tabix/environment.yml create mode 100644 modules/nf-core/tiddit/sv/environment.yml create mode 100644 modules/nf-core/ucsc/wigtobigwig/environment.yml create mode 100644 modules/nf-core/untar/environment.yml create mode 100644 modules/nf-core/untar/tests/main.nf.test create mode 100644 modules/nf-core/untar/tests/main.nf.test.snap create mode 100644 modules/nf-core/untar/tests/tags.yml create mode 100644 modules/nf-core/upd/environment.yml create mode 100644 modules/nf-core/vcfanno/environment.yml create mode 100644 modules/nf-core/vcfanno/tests/main.nf.test create mode 100644 modules/nf-core/vcfanno/tests/main.nf.test.snap create mode 100644 modules/nf-core/vcfanno/tests/nextflow.config create mode 100644 modules/nf-core/vcfanno/tests/tags.yml diff --git a/modules/nf-core/bcftools/annotate/environment.yml b/modules/nf-core/bcftools/annotate/environment.yml new file mode 100644 index 00000000..e0abc8d2 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_annotate +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/concat/environment.yml b/modules/nf-core/bcftools/concat/environment.yml new file mode 100644 index 00000000..ff0200df --- /dev/null +++ b/modules/nf-core/bcftools/concat/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_concat +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test b/modules/nf-core/bcftools/concat/tests/main.nf.test new file mode 100644 index 00000000..bf1a5f3f --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test @@ -0,0 +1,108 @@ +nextflow_process { + + name "Test Process BCFTOOLS_CONCAT" + script "../main.nf" + process "BCFTOOLS_CONCAT" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/concat" + + config "./nextflow.config" + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]") { + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz_tbi'], checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], []]") { + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + ], + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub") { + + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz_tbi'], checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap new file mode 100644 index 00000000..7344e6e3 --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap @@ -0,0 +1,43 @@ +{ + "sarscov2 - [[vcf1, vcf2], []]": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,4bcd0afd89f56c5d433f6b6abc44d0a6" + ] + ], + [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ] + ], + "timestamp": "2023-11-29T13:52:27.03724666" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3.vcf.gz:md5,4bcd0afd89f56c5d433f6b6abc44d0a6" + ] + ], + [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ] + ], + "timestamp": "2023-11-29T13:52:21.468988293" + }, + "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { + "content": [ + "test3.vcf.gz", + [ + "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + ] + ], + "timestamp": "2023-11-29T13:41:04.716017811" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/nextflow.config b/modules/nf-core/bcftools/concat/tests/nextflow.config new file mode 100644 index 00000000..f3e1e98c --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = "--no-version" +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/tags.yml b/modules/nf-core/bcftools/concat/tests/tags.yml new file mode 100644 index 00000000..21710d4e --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/concat: + - "modules/nf-core/bcftools/concat/**" diff --git a/modules/nf-core/bcftools/filter/environment.yml b/modules/nf-core/bcftools/filter/environment.yml new file mode 100644 index 00000000..b2698757 --- /dev/null +++ b/modules/nf-core/bcftools/filter/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_filter +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/merge/environment.yml b/modules/nf-core/bcftools/merge/environment.yml new file mode 100644 index 00000000..55de7cd3 --- /dev/null +++ b/modules/nf-core/bcftools/merge/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_merge +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/norm/environment.yml b/modules/nf-core/bcftools/norm/environment.yml new file mode 100644 index 00000000..fe80e4e7 --- /dev/null +++ b/modules/nf-core/bcftools/norm/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_norm +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/reheader/environment.yml b/modules/nf-core/bcftools/reheader/environment.yml new file mode 100644 index 00000000..aab0dc92 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_reheader +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/reheader/tests/bcf.config b/modules/nf-core/bcftools/reheader/tests/bcf.config new file mode 100644 index 00000000..2b7dff55 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/bcf.config @@ -0,0 +1,4 @@ +process { + ext.args2 = { "--no-version --output-type b" } + ext.prefix = "tested" +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/reheader/tests/main.nf.test b/modules/nf-core/bcftools/reheader/tests/main.nf.test new file mode 100644 index 00000000..f3200cb3 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/main.nf.test @@ -0,0 +1,197 @@ +nextflow_process { + + name "Test Process BCFTOOLS_REHEADER" + script "../main.nf" + process "BCFTOOLS_REHEADER" + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/reheader" + + test("sarscov2 - [vcf, [], []], fai - vcf output") { + + config "./vcf.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - vcf.gz output") { + + config "./vcf.gz.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - bcf output") { + + config "./bcf.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, header, []], []") { + + config "./vcf.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + [] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], samples], fai") { + + config "./vcf.config" + when { + + process { + """ + ch_no_samples = Channel.of([ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + [] + ]) + ch_samples = Channel.of(["samples.txt", "new_name"]) + .collectFile(newLine:true) + input[0] = ch_no_samples.combine(ch_samples) + input[1] = [ + [ id:'genome' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - stub") { + + options "-stub" + config "./vcf.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + process.out.versions, + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap b/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap new file mode 100644 index 00000000..112736a1 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap @@ -0,0 +1,166 @@ +{ + "sarscov2 - [vcf, [], []], fai - vcf output": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ] + } + ], + "timestamp": "2023-11-29T13:05:44.058376693" + }, + "sarscov2 - [vcf, [], []], fai - bcf output": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.bcf.gz:md5,c31d9afd8614832c2a46d9a55682c97a" + ] + ], + "1": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.bcf.gz:md5,c31d9afd8614832c2a46d9a55682c97a" + ] + ], + "versions": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ] + } + ], + "timestamp": "2023-11-29T13:06:03.793372514" + }, + "sarscov2 - [vcf, [], []], fai - vcf.gz output": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf.gz:md5,a1e45fe6d2b386fc2611766e5d2937ee" + ] + ], + "1": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf.gz:md5,a1e45fe6d2b386fc2611766e5d2937ee" + ] + ], + "versions": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ] + } + ], + "timestamp": "2023-11-29T13:05:53.954090441" + }, + "sarscov2 - [vcf, [], []], fai - stub": { + "content": [ + "tested.vcf", + [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ] + ], + "timestamp": "2023-11-29T13:06:33.549685303" + }, + "sarscov2 - [vcf, [], samples], fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf:md5,c64c373c10b0be24b29d6f18708ec1e8" + ] + ], + "1": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf:md5,c64c373c10b0be24b29d6f18708ec1e8" + ] + ], + "versions": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ] + } + ], + "timestamp": "2023-11-29T13:06:23.474745156" + }, + "sarscov2 - [vcf, header, []], []": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf:md5,3189bc9a720d5d5d3006bf72d91300cb" + ] + ], + "1": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "tested.vcf:md5,3189bc9a720d5d5d3006bf72d91300cb" + ] + ], + "versions": [ + "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + ] + } + ], + "timestamp": "2023-11-29T13:06:13.841648691" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/reheader/tests/tags.yml b/modules/nf-core/bcftools/reheader/tests/tags.yml new file mode 100644 index 00000000..c252941e --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/reheader: + - modules/nf-core/bcftools/reheader/** diff --git a/modules/nf-core/bcftools/reheader/tests/vcf.config b/modules/nf-core/bcftools/reheader/tests/vcf.config new file mode 100644 index 00000000..820f2ae6 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/vcf.config @@ -0,0 +1,4 @@ +process { + ext.args2 = { "--no-version" } + ext.prefix = "tested" +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/reheader/tests/vcf.gz.config b/modules/nf-core/bcftools/reheader/tests/vcf.gz.config new file mode 100644 index 00000000..c3031c31 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/vcf.gz.config @@ -0,0 +1,4 @@ +process { + ext.args2 = { "--no-version --output-type z" } + ext.prefix = "tested" +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/roh/environment.yml b/modules/nf-core/bcftools/roh/environment.yml new file mode 100644 index 00000000..7a9ee9bd --- /dev/null +++ b/modules/nf-core/bcftools/roh/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_roh +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/sort/environment.yml b/modules/nf-core/bcftools/sort/environment.yml new file mode 100644 index 00000000..89cf911d --- /dev/null +++ b/modules/nf-core/bcftools/sort/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_sort +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/view/environment.yml b/modules/nf-core/bcftools/view/environment.yml new file mode 100644 index 00000000..8937c6da --- /dev/null +++ b/modules/nf-core/bcftools/view/environment.yml @@ -0,0 +1,7 @@ +name: bcftools_view +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bcftools=1.18 diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test b/modules/nf-core/bcftools/view/tests/main.nf.test new file mode 100644 index 00000000..c285674c --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/main.nf.test @@ -0,0 +1,103 @@ +nextflow_process { + + name "Test Process BCFTOOLS_VIEW" + script "../main.nf" + process "BCFTOOLS_VIEW" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/view" + + config "./nextflow.config" + + test("sarscov2 - [vcf, tbi], [], [], []") { + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], vcf, tsv, []") { + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true) + ] + input[1] = file(params.test_data['sarscov2']['illumina']['test3_vcf_gz'], checkIfExists: true) + input[2] = file(params.test_data['sarscov2']['illumina']['test2_vcf_targets_tsv_gz'], checkIfExists: true) + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap new file mode 100644 index 00000000..049ac252 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -0,0 +1,45 @@ +{ + "sarscov2 - [vcf, tbi], vcf, tsv, []": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out.vcf.gz:md5,3c47ba1a6aa4ef9b3ad800175814d739" + ] + ], + [ + "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" + ] + ], + "timestamp": "2023-11-29T14:27:10.724842996" + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { + "content": [ + "out.vcf.gz", + [ + "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" + ] + ], + "timestamp": "2023-11-29T14:27:17.445846794" + }, + "sarscov2 - [vcf, tbi], [], [], []": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out.vcf.gz:md5,a1e45fe6d2b386fc2611766e5d2937ee" + ] + ], + [ + "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" + ] + ], + "timestamp": "2023-11-29T14:27:03.328392594" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/nextflow.config b/modules/nf-core/bcftools/view/tests/nextflow.config new file mode 100644 index 00000000..b05aa504 --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = '--no-version' +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/tags.yml b/modules/nf-core/bcftools/view/tests/tags.yml new file mode 100644 index 00000000..43b1f0aa --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/view: + - "modules/nf-core/bcftools/view/**" diff --git a/modules/nf-core/bwa/index/environment.yml b/modules/nf-core/bwa/index/environment.yml new file mode 100644 index 00000000..5d3cb323 --- /dev/null +++ b/modules/nf-core/bwa/index/environment.yml @@ -0,0 +1,7 @@ +name: bwa_index +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bwa=0.7.17 diff --git a/modules/nf-core/bwa/index/tests/main.nf.test b/modules/nf-core/bwa/index/tests/main.nf.test new file mode 100644 index 00000000..5fc8d496 --- /dev/null +++ b/modules/nf-core/bwa/index/tests/main.nf.test @@ -0,0 +1,33 @@ +nextflow_process { + + name "Test Process BWA_INDEX" + tag "modules_nfcore" + tag "modules" + tag "bwa" + tag "bwa/index" + script "../main.nf" + process "BWA_INDEX" + + test("BWA index") { + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bwa/index/tests/main.nf.test.snap b/modules/nf-core/bwa/index/tests/main.nf.test.snap new file mode 100644 index 00000000..e51ad5bf --- /dev/null +++ b/modules/nf-core/bwa/index/tests/main.nf.test.snap @@ -0,0 +1,43 @@ +{ + "BWA index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.bwt:md5,0469c30a1e239dd08f68afe66fde99da", + "genome.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66", + "genome.sa:md5,ab3952cabf026b48cd3eb5bccbb636d1" + ] + ] + ], + "1": [ + "versions.yml:md5,0f20525da90e7489a7ebb02adca3265f" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.bwt:md5,0469c30a1e239dd08f68afe66fde99da", + "genome.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66", + "genome.sa:md5,ab3952cabf026b48cd3eb5bccbb636d1" + ] + ] + ], + "versions": [ + "versions.yml:md5,0f20525da90e7489a7ebb02adca3265f" + ] + } + ], + "timestamp": "2023-10-17T17:20:20.180927714" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwa/index/tests/tags.yml b/modules/nf-core/bwa/index/tests/tags.yml new file mode 100644 index 00000000..28bb483c --- /dev/null +++ b/modules/nf-core/bwa/index/tests/tags.yml @@ -0,0 +1,2 @@ +bwa/index: + - modules/nf-core/bwa/index/** diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml new file mode 100644 index 00000000..26b43917 --- /dev/null +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -0,0 +1,7 @@ +name: bwamem2_index +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml new file mode 100644 index 00000000..227d8690 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -0,0 +1,9 @@ +name: bwamem2_mem +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bwa-mem2=2.2.1 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.18 diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test new file mode 100644 index 00000000..d7912069 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -0,0 +1,213 @@ +nextflow_process { + + name "Test Process BWAMEM2_MEM" + script "../main.nf" + process "BWAMEM2_MEM" + + tag "modules" + tag "modules_nfcore" + tag "bwamem2" + tag "bwamem2/mem" + + test("sarscov2 - fastq, index, false") { + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + input[1] = BWAMEM2_INDEX.out.index + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, true") { + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + input[1] = BWAMEM2_INDEX.out.index + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, false") { + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWAMEM2_INDEX.out.index + input[2] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, true") { + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWAMEM2_INDEX.out.index + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, true - stub") { + + options "-stub" + + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + ] + ] + input[1] = BWAMEM2_INDEX.out.index + input[2] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap new file mode 100644 index 00000000..db7dd392 --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "sarscov2 - [fastq1, fastq2], index, true": { + "content": [ + "test.bam", + [ + "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + ] + ], + "timestamp": "2023-12-04T11:49:07.89544697" + }, + "sarscov2 - [fastq1, fastq2], index, false": { + "content": [ + "test.bam", + [ + "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + ] + ], + "timestamp": "2023-12-04T11:48:56.319355195" + }, + "sarscov2 - [fastq1, fastq2], index, true - stub": { + "content": [ + "test.bam", + [ + "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + ] + ], + "timestamp": "2023-12-04T11:49:17.499101941" + }, + "sarscov2 - fastq, index, false": { + "content": [ + "test.bam", + [ + "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + ] + ], + "timestamp": "2023-12-04T11:48:31.351628851" + }, + "sarscov2 - fastq, index, true": { + "content": [ + "test.bam", + [ + "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + ] + ], + "timestamp": "2023-12-04T11:48:43.978452504" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwamem2/mem/tests/tags.yml b/modules/nf-core/bwamem2/mem/tests/tags.yml new file mode 100644 index 00000000..134efb2b --- /dev/null +++ b/modules/nf-core/bwamem2/mem/tests/tags.yml @@ -0,0 +1,2 @@ +bwamem2/mem: + - "modules/nf-core/bwamem2/mem/**" diff --git a/modules/nf-core/cadd/environment.yml b/modules/nf-core/cadd/environment.yml new file mode 100644 index 00000000..6a21f71e --- /dev/null +++ b/modules/nf-core/cadd/environment.yml @@ -0,0 +1,9 @@ +name: cadd +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::cadd-scripts=1.6 + - anaconda::conda=4.14.0 + - conda-forge::mamba=1.4.0 diff --git a/modules/nf-core/chromograph/environment.yml b/modules/nf-core/chromograph/environment.yml new file mode 100644 index 00000000..4fe69462 --- /dev/null +++ b/modules/nf-core/chromograph/environment.yml @@ -0,0 +1,7 @@ +name: chromograph +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::chromograph=1.3.1 diff --git a/modules/nf-core/cnvnator/cnvnator/environment.yml b/modules/nf-core/cnvnator/cnvnator/environment.yml new file mode 100644 index 00000000..8b7ecaef --- /dev/null +++ b/modules/nf-core/cnvnator/cnvnator/environment.yml @@ -0,0 +1,7 @@ +name: cnvnator_cnvnator +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::cnvnator=0.4.1 diff --git a/modules/nf-core/cnvnator/convert2vcf/environment.yml b/modules/nf-core/cnvnator/convert2vcf/environment.yml new file mode 100644 index 00000000..d324fb04 --- /dev/null +++ b/modules/nf-core/cnvnator/convert2vcf/environment.yml @@ -0,0 +1,7 @@ +name: cnvnator_convert2vcf +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::cnvnator=0.4.1 diff --git a/modules/nf-core/deepvariant/environment.yml b/modules/nf-core/deepvariant/environment.yml new file mode 100644 index 00000000..648a76de --- /dev/null +++ b/modules/nf-core/deepvariant/environment.yml @@ -0,0 +1,5 @@ +name: deepvariant +channels: + - conda-forge + - bioconda + - defaults diff --git a/modules/nf-core/ensemblvep/filtervep/environment.yml b/modules/nf-core/ensemblvep/filtervep/environment.yml new file mode 100644 index 00000000..d84dc89e --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/environment.yml @@ -0,0 +1,7 @@ +name: ensemblvep_filtervep +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::ensembl-vep=110.0 diff --git a/modules/nf-core/expansionhunter/environment.yml b/modules/nf-core/expansionhunter/environment.yml new file mode 100644 index 00000000..76edd1ef --- /dev/null +++ b/modules/nf-core/expansionhunter/environment.yml @@ -0,0 +1,7 @@ +name: expansionhunter +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::expansionhunter=5.0.0 diff --git a/modules/nf-core/gatk4/bedtointervallist/environment.yml b/modules/nf-core/gatk4/bedtointervallist/environment.yml new file mode 100644 index 00000000..e7cb4280 --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_bedtointervallist +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/collectreadcounts/environment.yml b/modules/nf-core/gatk4/collectreadcounts/environment.yml new file mode 100644 index 00000000..ebc83800 --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_collectreadcounts +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml new file mode 100644 index 00000000..db663e14 --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_createsequencedictionary +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/denoisereadcounts/environment.yml b/modules/nf-core/gatk4/denoisereadcounts/environment.yml new file mode 100644 index 00000000..bcb2ff35 --- /dev/null +++ b/modules/nf-core/gatk4/denoisereadcounts/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_denoisereadcounts +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml b/modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml new file mode 100644 index 00000000..c30de090 --- /dev/null +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml @@ -0,0 +1,5 @@ +name: gatk4_determinegermlinecontigploidy +channels: + - conda-forge + - bioconda + - defaults diff --git a/modules/nf-core/gatk4/filtermutectcalls/environment.yml b/modules/nf-core/gatk4/filtermutectcalls/environment.yml new file mode 100644 index 00000000..8057d765 --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_filtermutectcalls +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/germlinecnvcaller/environment.yml b/modules/nf-core/gatk4/germlinecnvcaller/environment.yml new file mode 100644 index 00000000..02ce4dd3 --- /dev/null +++ b/modules/nf-core/gatk4/germlinecnvcaller/environment.yml @@ -0,0 +1,5 @@ +name: gatk4_germlinecnvcaller +channels: + - conda-forge + - bioconda + - defaults diff --git a/modules/nf-core/gatk4/intervallisttools/environment.yml b/modules/nf-core/gatk4/intervallisttools/environment.yml new file mode 100644 index 00000000..b70e5e14 --- /dev/null +++ b/modules/nf-core/gatk4/intervallisttools/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_intervallisttools +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/mergebamalignment/environment.yml b/modules/nf-core/gatk4/mergebamalignment/environment.yml new file mode 100644 index 00000000..08a1df23 --- /dev/null +++ b/modules/nf-core/gatk4/mergebamalignment/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_mergebamalignment +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/mergevcfs/environment.yml b/modules/nf-core/gatk4/mergevcfs/environment.yml new file mode 100644 index 00000000..d6c3e51a --- /dev/null +++ b/modules/nf-core/gatk4/mergevcfs/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_mergevcfs +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/mutect2/environment.yml b/modules/nf-core/gatk4/mutect2/environment.yml new file mode 100644 index 00000000..54da66ce --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_mutect2 +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml new file mode 100644 index 00000000..a515d065 --- /dev/null +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml @@ -0,0 +1,5 @@ +name: gatk4_postprocessgermlinecnvcalls +channels: + - conda-forge + - bioconda + - defaults diff --git a/modules/nf-core/gatk4/preprocessintervals/environment.yml b/modules/nf-core/gatk4/preprocessintervals/environment.yml new file mode 100644 index 00000000..542d9efd --- /dev/null +++ b/modules/nf-core/gatk4/preprocessintervals/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_preprocessintervals +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/printreads/environment.yml b/modules/nf-core/gatk4/printreads/environment.yml new file mode 100644 index 00000000..7387f5d1 --- /dev/null +++ b/modules/nf-core/gatk4/printreads/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_printreads +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/revertsam/environment.yml b/modules/nf-core/gatk4/revertsam/environment.yml new file mode 100644 index 00000000..0ce7dddc --- /dev/null +++ b/modules/nf-core/gatk4/revertsam/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_revertsam +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/samtofastq/environment.yml b/modules/nf-core/gatk4/samtofastq/environment.yml new file mode 100644 index 00000000..584c3d83 --- /dev/null +++ b/modules/nf-core/gatk4/samtofastq/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_samtofastq +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/selectvariants/environment.yml b/modules/nf-core/gatk4/selectvariants/environment.yml new file mode 100644 index 00000000..404bafde --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_selectvariants +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/shiftfasta/environment.yml b/modules/nf-core/gatk4/shiftfasta/environment.yml new file mode 100644 index 00000000..381a22c0 --- /dev/null +++ b/modules/nf-core/gatk4/shiftfasta/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_shiftfasta +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/splitintervals/environment.yml b/modules/nf-core/gatk4/splitintervals/environment.yml new file mode 100644 index 00000000..6b347417 --- /dev/null +++ b/modules/nf-core/gatk4/splitintervals/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_splitintervals +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/gatk4/variantfiltration/environment.yml b/modules/nf-core/gatk4/variantfiltration/environment.yml new file mode 100644 index 00000000..cc16bc0e --- /dev/null +++ b/modules/nf-core/gatk4/variantfiltration/environment.yml @@ -0,0 +1,7 @@ +name: gatk4_variantfiltration +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::gatk4=4.4.0.0 diff --git a/modules/nf-core/genmod/annotate/environment.yml b/modules/nf-core/genmod/annotate/environment.yml new file mode 100644 index 00000000..6ca55014 --- /dev/null +++ b/modules/nf-core/genmod/annotate/environment.yml @@ -0,0 +1,7 @@ +name: genmod_annotate +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::genmod=3.7.4 diff --git a/modules/nf-core/genmod/compound/environment.yml b/modules/nf-core/genmod/compound/environment.yml new file mode 100644 index 00000000..565143f9 --- /dev/null +++ b/modules/nf-core/genmod/compound/environment.yml @@ -0,0 +1,7 @@ +name: genmod_compound +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::genmod=3.7.4 diff --git a/modules/nf-core/genmod/models/environment.yml b/modules/nf-core/genmod/models/environment.yml new file mode 100644 index 00000000..ff0de822 --- /dev/null +++ b/modules/nf-core/genmod/models/environment.yml @@ -0,0 +1,8 @@ +name: genmod_models +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::genmod=3.7.4 + - conda-forge::python=3.4.5 diff --git a/modules/nf-core/genmod/score/environment.yml b/modules/nf-core/genmod/score/environment.yml new file mode 100644 index 00000000..a09ee359 --- /dev/null +++ b/modules/nf-core/genmod/score/environment.yml @@ -0,0 +1,7 @@ +name: genmod_score +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::genmod=3.7.4 diff --git a/modules/nf-core/glnexus/environment.yml b/modules/nf-core/glnexus/environment.yml new file mode 100644 index 00000000..922214e8 --- /dev/null +++ b/modules/nf-core/glnexus/environment.yml @@ -0,0 +1,7 @@ +name: glnexus +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::glnexus=1.4.1 diff --git a/modules/nf-core/haplocheck/environment.yml b/modules/nf-core/haplocheck/environment.yml new file mode 100644 index 00000000..8d06a67e --- /dev/null +++ b/modules/nf-core/haplocheck/environment.yml @@ -0,0 +1,7 @@ +name: haplocheck +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::haplocheck=1.3.3 diff --git a/modules/nf-core/haplogrep2/classify/environment.yml b/modules/nf-core/haplogrep2/classify/environment.yml new file mode 100644 index 00000000..12949452 --- /dev/null +++ b/modules/nf-core/haplogrep2/classify/environment.yml @@ -0,0 +1,7 @@ +name: haplogrep2_classify +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::haplogrep=2.4.0 diff --git a/modules/nf-core/hmtnote/annotate/environment.yml b/modules/nf-core/hmtnote/annotate/environment.yml new file mode 100644 index 00000000..46bd87aa --- /dev/null +++ b/modules/nf-core/hmtnote/annotate/environment.yml @@ -0,0 +1,7 @@ +name: hmtnote_annotate +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::hmtnote=0.7.2 diff --git a/modules/nf-core/manta/germline/environment.yml b/modules/nf-core/manta/germline/environment.yml new file mode 100644 index 00000000..4a63d308 --- /dev/null +++ b/modules/nf-core/manta/germline/environment.yml @@ -0,0 +1,7 @@ +name: manta_germline +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::manta=1.6.0 diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml new file mode 100644 index 00000000..88c7126c --- /dev/null +++ b/modules/nf-core/mosdepth/environment.yml @@ -0,0 +1,8 @@ +name: mosdepth +channels: + - conda-forge + - bioconda + - defaults +dependencies: + # renovate: datasource=conda depName=bioconda/mosdepth + - mosdepth=0.3.6 diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test new file mode 100644 index 00000000..d991f819 --- /dev/null +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -0,0 +1,260 @@ +nextflow_process { + + name "Test Process MOSDEPTH" + script "../main.nf" + process "MOSDEPTH" + + tag "modules" + tag "modules_nfcore" + tag "mosdepth" + + test("homo_sapiens - bam, bai, []") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + [] + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - bam, bai, bed") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - cram, crai, []") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + [] + ] + input[1] = [ + [ id:'test' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - cram, crai, bed") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + ] + input[1] = [ + [ id:'test' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - bam, bai, [] - window") { + + config "./window.config" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + [] + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - bam, bai, [] - quantized") { + + config "./quantized.config" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + [] + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - bam, bai, bed - thresholds") { + + config "./threshold.config" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - bam, bai, bed - fail") { + + config "./window.config" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.failed } + ) + } + + } + + test("homo_sapiens - bam, bai, [] - stub") { + + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + ] + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.global_txt[0][1]).name, + file(process.out.summary_txt[0][1]).name, + file(process.out.regions_txt[0][1]).name, + file(process.out.per_base_d4[0][1]).name, + file(process.out.per_base_bed[0][1]).name, + file(process.out.per_base_csi[0][1]).name, + file(process.out.regions_bed[0][1]).name, + file(process.out.regions_csi[0][1]).name, + file(process.out.quantized_bed[0][1]).name, + file(process.out.quantized_csi[0][1]).name, + file(process.out.thresholds_bed[0][1]).name, + file(process.out.thresholds_csi[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap new file mode 100644 index 00000000..dc4d9508 --- /dev/null +++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap @@ -0,0 +1,1145 @@ +{ + "homo_sapiens - bam, bai, [] - stub": { + "content": [ + "test.global.dist.txt", + "test.summary.txt", + "test.region.dist.txt", + "test.per-base.d4", + "test.per-base.bed.gz", + "test.per-base.bed.gz.csi", + "test.regions.bed.gz", + "test.regions.bed.gz.csi", + "test.quantized.bed.gz", + "test.quantized.bed.gz.csi", + "test.thresholds.bed.gz", + "test.thresholds.bed.gz.csi", + [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + ], + "timestamp": "2023-11-27T15:14:34.897155161" + }, + "homo_sapiens - cram, crai, bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + ] + ], + "8": [ + + ], + "9": [ + + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + + ], + "quantized_csi": [ + + ], + "regions_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + ] + ], + "regions_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + ] + ], + "regions_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "thresholds_bed": [ + + ], + "thresholds_csi": [ + + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:47:18.171150781" + }, + "homo_sapiens - bam, bai, [] - quantized": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,4f0d231060cbde4efdd673863bd2fb59" + ] + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" + ] + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" + ] + ], + "quantized_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" + ] + ], + "regions_bed": [ + + ], + "regions_csi": [ + + ], + "regions_txt": [ + + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,4f0d231060cbde4efdd673863bd2fb59" + ] + ], + "thresholds_bed": [ + + ], + "thresholds_csi": [ + + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:47:29.228103864" + }, + "homo_sapiens - bam, bai, bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + ] + ], + "8": [ + + ], + "9": [ + + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + + ], + "quantized_csi": [ + + ], + "regions_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + ] + ], + "regions_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + ] + ], + "regions_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "thresholds_bed": [ + + ], + "thresholds_csi": [ + + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:47:04.537716314" + }, + "homo_sapiens - bam, bai, [] - window": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" + ] + ], + "8": [ + + ], + "9": [ + + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + + ], + "quantized_csi": [ + + ], + "regions_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" + ] + ], + "regions_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" + ] + ], + "regions_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" + ] + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "thresholds_bed": [ + + ], + "thresholds_csi": [ + + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:47:23.708536171" + }, + "homo_sapiens - bam, bai, []": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,4f0d231060cbde4efdd673863bd2fb59" + ] + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + + ], + "quantized_csi": [ + + ], + "regions_bed": [ + + ], + "regions_csi": [ + + ], + "regions_txt": [ + + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,4f0d231060cbde4efdd673863bd2fb59" + ] + ], + "thresholds_bed": [ + + ], + "thresholds_csi": [ + + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:46:56.975710077" + }, + "homo_sapiens - cram, crai, []": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,4f0d231060cbde4efdd673863bd2fb59" + ] + ], + "10": [ + + ], + "11": [ + + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + + ], + "quantized_csi": [ + + ], + "regions_bed": [ + + ], + "regions_csi": [ + + ], + "regions_txt": [ + + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,4f0d231060cbde4efdd673863bd2fb59" + ] + ], + "thresholds_bed": [ + + ], + "thresholds_csi": [ + + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:47:12.09259995" + }, + "homo_sapiens - bam, bai, bed - thresholds": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" + ] + ], + "12": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + ] + ], + "8": [ + + ], + "9": [ + + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.global.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + ] + ], + "per_base_d4": [ + + ], + "quantized_bed": [ + + ], + "quantized_csi": [ + + ], + "regions_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + ] + ], + "regions_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + ] + ], + "regions_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.region.dist.txt:md5,e82e90c7d508a135b5a8a7cd6933452e" + ] + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.mosdepth.summary.txt:md5,96c037f769974b904beb53edc4f56d82" + ] + ], + "thresholds_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" + ] + ], + "thresholds_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" + ] + ], + "versions": [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] + } + ], + "timestamp": "2023-11-27T14:49:44.311847326" + } +} \ No newline at end of file diff --git a/modules/nf-core/mosdepth/tests/quantized.config b/modules/nf-core/mosdepth/tests/quantized.config new file mode 100644 index 00000000..63c55350 --- /dev/null +++ b/modules/nf-core/mosdepth/tests/quantized.config @@ -0,0 +1,3 @@ +process { + ext.args = "--quantize 0:1:4:100:200" +} \ No newline at end of file diff --git a/modules/nf-core/mosdepth/tests/tags.yml b/modules/nf-core/mosdepth/tests/tags.yml new file mode 100644 index 00000000..5cd2e08e --- /dev/null +++ b/modules/nf-core/mosdepth/tests/tags.yml @@ -0,0 +1,2 @@ +mosdepth: + - "modules/nf-core/mosdepth/**" diff --git a/modules/nf-core/mosdepth/tests/threshold.config b/modules/nf-core/mosdepth/tests/threshold.config new file mode 100644 index 00000000..9b014ddf --- /dev/null +++ b/modules/nf-core/mosdepth/tests/threshold.config @@ -0,0 +1,3 @@ +process { + ext.args = "--thresholds 1,10,20,30" +} \ No newline at end of file diff --git a/modules/nf-core/mosdepth/tests/window.config b/modules/nf-core/mosdepth/tests/window.config new file mode 100644 index 00000000..7a0f755c --- /dev/null +++ b/modules/nf-core/mosdepth/tests/window.config @@ -0,0 +1,3 @@ +process { + ext.args = "--by 100" +} \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap new file mode 100644 index 00000000..d37e7304 --- /dev/null +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -0,0 +1,21 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,14e9a2661241abd828f4f06a7b5c222d" + ] + ], + "timestamp": "2024-01-09T23:02:49.911994" + }, + "sarscov2 single-end [fastqc] - stub": { + "content": [ + [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", + "versions.yml:md5,14e9a2661241abd828f4f06a7b5c222d" + ] + ], + "timestamp": "2024-01-09T23:03:14.524346" + } +} \ No newline at end of file diff --git a/modules/nf-core/peddy/environment.yml b/modules/nf-core/peddy/environment.yml new file mode 100644 index 00000000..00e7cebe --- /dev/null +++ b/modules/nf-core/peddy/environment.yml @@ -0,0 +1,7 @@ +name: peddy +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::peddy=0.4.8 diff --git a/modules/nf-core/picard/addorreplacereadgroups/environment.yml b/modules/nf-core/picard/addorreplacereadgroups/environment.yml new file mode 100644 index 00000000..d7d2c6c0 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/environment.yml @@ -0,0 +1,7 @@ +name: picard_addorreplacereadgroups +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/collecthsmetrics/environment.yml b/modules/nf-core/picard/collecthsmetrics/environment.yml new file mode 100644 index 00000000..fbeab71b --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/environment.yml @@ -0,0 +1,7 @@ +name: picard_collecthsmetrics +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/collectmultiplemetrics/environment.yml b/modules/nf-core/picard/collectmultiplemetrics/environment.yml new file mode 100644 index 00000000..79b33280 --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/environment.yml @@ -0,0 +1,7 @@ +name: picard_collectmultiplemetrics +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml new file mode 100644 index 00000000..6a0b9258 --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml @@ -0,0 +1,8 @@ +name: picard_collectwgsmetrics +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 + - r::r-base diff --git a/modules/nf-core/picard/liftovervcf/environment.yml b/modules/nf-core/picard/liftovervcf/environment.yml new file mode 100644 index 00000000..e953ec95 --- /dev/null +++ b/modules/nf-core/picard/liftovervcf/environment.yml @@ -0,0 +1,7 @@ +name: picard_liftovervcf +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml new file mode 100644 index 00000000..58b795f5 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/environment.yml @@ -0,0 +1,7 @@ +name: picard_markduplicates +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test new file mode 100644 index 00000000..b2bba094 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -0,0 +1,111 @@ +nextflow_process { + + name "Test Process PICARD_MARKDUPLICATES" + script "../main.nf" + process "PICARD_MARKDUPLICATES" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/markduplicates" + + test("sarscov2 - bam, fasta, fai - sorted bam") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions + ).match() } + ) + } + } + + test("sarscov2 - bam, fasta, fai - unsorted bam") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions + ).match() } + ) + } + } + + test("homo_sapiens - cram, fasta, fai") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions + ).match() } + ) + } + } + +} diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap new file mode 100644 index 00000000..cd788a4d --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -0,0 +1,44 @@ +{ + "sarscov2 - bam, fasta, fai - unsorted bam": { + "content": [ + "test.marked.bam", + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + ] + ], + "timestamp": "2023-11-28T10:50:37.735339781" + }, + "homo_sapiens - cram, fasta, fai": { + "content": [ + "test.marked.bam", + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + ] + ], + "timestamp": "2023-11-28T10:50:48.897954543" + }, + "sarscov2 - bam, fasta, fai - sorted bam": { + "content": [ + "test.marked.bam", + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + ] + ], + "timestamp": "2023-11-28T10:50:26.591387512" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/markduplicates/tests/nextflow.config b/modules/nf-core/picard/markduplicates/tests/nextflow.config new file mode 100644 index 00000000..02818dd6 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: PICARD_MARKDUPLICATES { + ext.prefix = { "${meta.id}.marked" } + ext.args = '--ASSUME_SORT_ORDER queryname' + } +} diff --git a/modules/nf-core/picard/markduplicates/tests/tags.yml b/modules/nf-core/picard/markduplicates/tests/tags.yml new file mode 100644 index 00000000..4f213d62 --- /dev/null +++ b/modules/nf-core/picard/markduplicates/tests/tags.yml @@ -0,0 +1,2 @@ +picard/markduplicates: + - modules/nf-core/picard/markduplicates/** diff --git a/modules/nf-core/picard/renamesampleinvcf/environment.yml b/modules/nf-core/picard/renamesampleinvcf/environment.yml new file mode 100644 index 00000000..3e7d8eb5 --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/environment.yml @@ -0,0 +1,7 @@ +name: picard_renamesampleinvcf +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/picard/sortvcf/environment.yml b/modules/nf-core/picard/sortvcf/environment.yml new file mode 100644 index 00000000..f1dbb6b9 --- /dev/null +++ b/modules/nf-core/picard/sortvcf/environment.yml @@ -0,0 +1,7 @@ +name: picard_sortvcf +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::picard=3.1.1 diff --git a/modules/nf-core/qualimap/bamqc/environment.yml b/modules/nf-core/qualimap/bamqc/environment.yml new file mode 100644 index 00000000..3f30d0cd --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/environment.yml @@ -0,0 +1,7 @@ +name: qualimap_bamqc +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::qualimap=2.3 diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test b/modules/nf-core/qualimap/bamqc/tests/main.nf.test new file mode 100644 index 00000000..5447fe68 --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test @@ -0,0 +1,39 @@ +nextflow_process { + + name "Test Process QUALIMAP_BAMQC" + script "../main.nf" + process "QUALIMAP_BAMQC" + tag "modules" + tag "modules_nfcore" + tag "qualimap" + tag "qualimap/bamqc" + + test("homo_sapiens [BAM]") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert path("${process.out.results[0][1]}/qualimapReport.html").exists() }, + { assert snapshot( + path("${process.out.results[0][1]}/genome_results.txt"), + process.out.versions) + .match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap new file mode 100644 index 00000000..782f7d23 --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap @@ -0,0 +1,11 @@ +{ + "homo_sapiens [BAM]": { + "content": [ + "genome_results.txt:md5,45103d63ba82df2b905eb04819c32dd3", + [ + "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" + ] + ], + "timestamp": "2024-01-11T14:36:07.836508" + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/tests/tags.yml b/modules/nf-core/qualimap/bamqc/tests/tags.yml new file mode 100644 index 00000000..b2b5eb6f --- /dev/null +++ b/modules/nf-core/qualimap/bamqc/tests/tags.yml @@ -0,0 +1,2 @@ +qualimap/bamqc: + - modules/nf-core/qualimap/bamqc/** diff --git a/modules/nf-core/rhocall/annotate/environment.yml b/modules/nf-core/rhocall/annotate/environment.yml new file mode 100644 index 00000000..5a00600f --- /dev/null +++ b/modules/nf-core/rhocall/annotate/environment.yml @@ -0,0 +1,7 @@ +name: rhocall_annotate +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::rhocall=0.5.1 diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml new file mode 100644 index 00000000..01ccbcc7 --- /dev/null +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -0,0 +1,7 @@ +name: samtools_faidx +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml new file mode 100644 index 00000000..296ed99e --- /dev/null +++ b/modules/nf-core/samtools/index/environment.yml @@ -0,0 +1,7 @@ +name: samtools_index +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config new file mode 100644 index 00000000..0ed260ef --- /dev/null +++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_INDEX { + ext.args = '-c' + } + +} diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test new file mode 100644 index 00000000..c76a9169 --- /dev/null +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -0,0 +1,87 @@ +nextflow_process { + + name "Test Process SAMTOOLS_INDEX" + script "../main.nf" + process "SAMTOOLS_INDEX" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/index" + + test("sarscov2 [BAI]") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out.bai).match("bai") }, + { assert path(process.out.versions.get(0)).getText().contains("samtools") } + ) + } + } + + test("homo_sapiens [CRAI]") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out.crai).match("crai") }, + { assert path(process.out.versions.get(0)).getText().contains("samtools") } + ) + } + } + + test("homo_sapiens [CSI]") { + + config "./csi.nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert path(process.out.csi.get(0).get(1)).exists() }, + { assert path(process.out.versions.get(0)).getText().contains("samtools") } + ) + } + } +} diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap new file mode 100644 index 00000000..b3baee7f --- /dev/null +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -0,0 +1,28 @@ +{ + "crai": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ] + ], + "timestamp": "2023-11-15T15:17:37.30801" + }, + "bai": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ] + ], + "timestamp": "2023-11-15T15:17:30.869234" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml new file mode 100644 index 00000000..e0f58a7a --- /dev/null +++ b/modules/nf-core/samtools/index/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/index: + - modules/nf-core/samtools/index/** diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml new file mode 100644 index 00000000..1f7fe49f --- /dev/null +++ b/modules/nf-core/samtools/merge/environment.yml @@ -0,0 +1,7 @@ +name: samtools_merge +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 diff --git a/modules/nf-core/samtools/merge/tests/index.config b/modules/nf-core/samtools/merge/tests/index.config new file mode 100644 index 00000000..8c5668cf --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--write-index" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test new file mode 100644 index 00000000..024f9f70 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -0,0 +1,156 @@ +nextflow_process { + + name "Test Process SAMTOOLS_MERGE" + script "../main.nf" + process "SAMTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/merge" + + test("sarscov2 - [bam1, bam2, bam3], [], []") { + + config "./index.config" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + file(process.out.csi[0][1]).name, + process.out.crai, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [cram1, cram2], fasta, fai") { + + config "./index.config" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true), + ] + ] + input[1] = [ + [id:'genome'], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.cram[0][1]).name, + process.out.bam, + file(process.out.crai[0][1]).name, + process.out.csi, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - bam, [], []") { + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), + ] + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + process.out.crai, + process.out.csi, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [bam1, bam2, bam3], [], [] - stub") { + + config "./index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + [ + file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + file(process.out.csi[0][1]).name, + process.out.crai, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap new file mode 100644 index 00000000..3ab57d81 --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "sarscov2 - bam, [], []": { + "content": [ + "test.bam", + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + ] + ], + "timestamp": "2023-12-04T17:13:30.244841621" + }, + "sarscov2 - [bam1, bam2, bam3], [], [] - stub": { + "content": [ + "test.bam", + [ + + ], + "test.csi", + [ + + ], + [ + "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + ] + ], + "timestamp": "2023-12-04T17:10:14.861445721" + }, + "homo_sapiens - [cram1, cram2], fasta, fai": { + "content": [ + "test.cram", + [ + + ], + "test.cram.crai", + [ + + ], + [ + "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + ] + ], + "timestamp": "2023-12-04T17:09:29.716002618" + }, + "sarscov2 - [bam1, bam2, bam3], [], []": { + "content": [ + "test.bam", + [ + + ], + "test.bam.csi", + [ + + ], + [ + "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + ] + ], + "timestamp": "2023-12-04T17:08:42.329973045" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/tests/tags.yml b/modules/nf-core/samtools/merge/tests/tags.yml new file mode 100644 index 00000000..b869abcb --- /dev/null +++ b/modules/nf-core/samtools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/merge: + - "modules/nf-core/samtools/merge/**" diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml new file mode 100644 index 00000000..cd50868c --- /dev/null +++ b/modules/nf-core/samtools/sort/environment.yml @@ -0,0 +1,7 @@ +name: samtools_sort +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test new file mode 100644 index 00000000..abb80978 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -0,0 +1,73 @@ +nextflow_process { + + name "Test Process SAMTOOLS_SORT" + script "../main.nf" + process "SAMTOOLS_SORT" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/sort" + + test("test_samtools_sort") { + + config "./nextflow.config" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [ + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("test_samtools_sort_stub") { + + config "./nextflow.config" + options "-stub-run" + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [ + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap new file mode 100644 index 00000000..ff722259 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -0,0 +1,48 @@ +{ + "test_samtools_sort": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + ] + } + ], + "timestamp": "2023-12-04T11:11:22.005628301" + }, + "test_samtools_sort_stub": { + "content": [ + "test.sorted.bam", + [ + "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + ] + ], + "timestamp": "2023-12-04T17:47:22.314445935" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config new file mode 100644 index 00000000..d0f35086 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + } + +} diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml new file mode 100644 index 00000000..cd63ea20 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/tags.yml @@ -0,0 +1,3 @@ +samtools/sort: + - modules/nf-core/samtools/sort/** + - tests/modules/nf-core/samtools/sort/** diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml new file mode 100644 index 00000000..b89ce647 --- /dev/null +++ b/modules/nf-core/samtools/stats/environment.yml @@ -0,0 +1,7 @@ +name: samtools_stats +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test new file mode 100644 index 00000000..20c3efe1 --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -0,0 +1,78 @@ +nextflow_process { + + name "Test Process SAMTOOLS_STATS" + script "../main.nf" + process "SAMTOOLS_STATS" + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/stats" + + test("SAMTOOLS STATS Should run without failures") { + + when { + params { + + outdir = "$outputDir" + } + process { + """ + // define inputs of the process here. + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + + ] + input[1] = [[],[]] + """ + + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + + } + + test("SAMTOOLS CRAM Should run without failures") { + + when { + params { + + outdir = "$outputDir" + } + process { + """ + // define inputs of the process here + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true) + + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + """ + } + + + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + + } + + +} diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap new file mode 100644 index 00000000..025c83a5 --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -0,0 +1,64 @@ +{ + "SAMTOOLS STATS Should run without failures": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def" + ] + ], + "1": [ + "versions.yml:md5,650a365c6635001436008350ae83337c" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def" + ] + ], + "versions": [ + "versions.yml:md5,650a365c6635001436008350ae83337c" + ] + } + ], + "timestamp": "2023-12-04T11:07:28.26821485" + }, + "SAMTOOLS CRAM Should run without failures": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43" + ] + ], + "1": [ + "versions.yml:md5,650a365c6635001436008350ae83337c" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43" + ] + ], + "versions": [ + "versions.yml:md5,650a365c6635001436008350ae83337c" + ] + } + ], + "timestamp": "2023-12-04T11:07:50.356233402" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml new file mode 100644 index 00000000..7c28e30f --- /dev/null +++ b/modules/nf-core/samtools/stats/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/stats: + - modules/nf-core/samtools/stats/** diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml new file mode 100644 index 00000000..99aa69d0 --- /dev/null +++ b/modules/nf-core/samtools/view/environment.yml @@ -0,0 +1,7 @@ +name: samtools_view +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::samtools=1.18 diff --git a/modules/nf-core/samtools/view/tests/bam.config b/modules/nf-core/samtools/view/tests/bam.config new file mode 100644 index 00000000..c10d1081 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/bam.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-fmt bam" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/bam_index.config b/modules/nf-core/samtools/view/tests/bam_index.config new file mode 100644 index 00000000..771ae033 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/bam_index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-fmt bam --write-index" +} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test new file mode 100644 index 00000000..89ed3555 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -0,0 +1,231 @@ +nextflow_process { + + name "Test Process SAMTOOLS_VIEW" + script "../main.nf" + process "SAMTOOLS_VIEW" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/view" + + test("sarscov2 - [bam, []], [], []") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + process.out.sam, + process.out.bai, + process.out.crai, + process.out.csi, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [cram, crai], fasta, []") { + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.cram[0][1]).name, + process.out.bam, + process.out.sam, + process.out.bai, + process.out.crai, + process.out.csi, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [cram, []], fasta, [] - bam output") { + + config "./bam.config" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + process.out.sam, + process.out.bai, + process.out.crai, + process.out.csi, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [cram, []], fasta, [] - bam & index output") { + + config "./bam_index.config" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + process.out.sam, + file(process.out.csi[0][1]).name, + process.out.crai, + process.out.bai, + process.out.versions + ).match() } + ) + } + + } + + test("homo_sapiens - [cram, []], fasta, qname - bam & index output") { + + config "./bam_index.config" + + when { + process { + """ + input[0] = [ + [ id: 'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = Channel.of("testN:2817", "testN:2814").collectFile(name: "readnames.list", newLine: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + process.out.sam, + file(process.out.csi[0][1]).name, + process.out.crai, + process.out.bai, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [bam, []], [], [] - stub") { + + options "-stub" + config "./bam_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + [] + ] + input[1] = [[],[]] + input[2] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.cram, + process.out.sam, + file(process.out.csi[0][1]).name, + process.out.crai, + process.out.bai, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap new file mode 100644 index 00000000..83427491 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -0,0 +1,140 @@ +{ + "homo_sapiens - [cram, []], fasta, [] - bam output": { + "content": [ + "test.bam", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] + ], + "timestamp": "2023-12-04T17:41:17.563069206" + }, + "sarscov2 - [bam, []], [], []": { + "content": [ + "test.bam", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] + ], + "timestamp": "2023-12-04T17:41:03.206994564" + }, + "homo_sapiens - [cram, []], fasta, qname - bam & index output": { + "content": [ + "test.bam", + [ + + ], + [ + + ], + "test.bam.csi", + [ + + ], + [ + + ], + [ + "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] + ], + "timestamp": "2023-12-04T17:44:39.165289759" + }, + "homo_sapiens - [cram, []], fasta, [] - bam & index output": { + "content": [ + "test.bam", + [ + + ], + [ + + ], + "test.bam.csi", + [ + + ], + [ + + ], + [ + "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] + ], + "timestamp": "2023-12-04T17:44:32.25731224" + }, + "sarscov2 - [bam, []], [], [] - stub": { + "content": [ + "test.bam", + [ + + ], + [ + + ], + "test.csi", + [ + + ], + [ + + ], + [ + "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] + ], + "timestamp": "2023-12-04T17:44:45.81037195" + }, + "homo_sapiens - [cram, crai], fasta, []": { + "content": [ + "test.cram", + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] + ], + "timestamp": "2023-12-04T17:41:10.730011823" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/view/tests/tags.yml b/modules/nf-core/samtools/view/tests/tags.yml new file mode 100644 index 00000000..4fdf1dd1 --- /dev/null +++ b/modules/nf-core/samtools/view/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/view: + - "modules/nf-core/samtools/view/**" diff --git a/modules/nf-core/sentieon/bwaindex/environment.yml b/modules/nf-core/sentieon/bwaindex/environment.yml new file mode 100644 index 00000000..ce0a85e4 --- /dev/null +++ b/modules/nf-core/sentieon/bwaindex/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_bwaindex +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/bwamem/environment.yml b/modules/nf-core/sentieon/bwamem/environment.yml new file mode 100644 index 00000000..c090bfa5 --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_bwamem +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/datametrics/environment.yml b/modules/nf-core/sentieon/datametrics/environment.yml new file mode 100644 index 00000000..df094207 --- /dev/null +++ b/modules/nf-core/sentieon/datametrics/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_datametrics +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/dedup/environment.yml b/modules/nf-core/sentieon/dedup/environment.yml new file mode 100644 index 00000000..622cf739 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_dedup +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/dnamodelapply/environment.yml b/modules/nf-core/sentieon/dnamodelapply/environment.yml new file mode 100644 index 00000000..6d27d44a --- /dev/null +++ b/modules/nf-core/sentieon/dnamodelapply/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_dnamodelapply +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/dnascope/environment.yml b/modules/nf-core/sentieon/dnascope/environment.yml new file mode 100644 index 00000000..45c2116c --- /dev/null +++ b/modules/nf-core/sentieon/dnascope/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_dnascope +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/readwriter/environment.yml b/modules/nf-core/sentieon/readwriter/environment.yml new file mode 100644 index 00000000..67dd1505 --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_readwriter +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/sentieon/wgsmetrics/environment.yml b/modules/nf-core/sentieon/wgsmetrics/environment.yml new file mode 100644 index 00000000..24878e29 --- /dev/null +++ b/modules/nf-core/sentieon/wgsmetrics/environment.yml @@ -0,0 +1,7 @@ +name: sentieon_wgsmetrics +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::sentieon=202308.01 diff --git a/modules/nf-core/smncopynumbercaller/environment.yml b/modules/nf-core/smncopynumbercaller/environment.yml new file mode 100644 index 00000000..3da92eeb --- /dev/null +++ b/modules/nf-core/smncopynumbercaller/environment.yml @@ -0,0 +1,7 @@ +name: smncopynumbercaller +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::smncopynumbercaller=1.1.2 diff --git a/modules/nf-core/stranger/environment.yml b/modules/nf-core/stranger/environment.yml new file mode 100644 index 00000000..78455053 --- /dev/null +++ b/modules/nf-core/stranger/environment.yml @@ -0,0 +1,7 @@ +name: stranger +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::stranger=0.8.1 diff --git a/modules/nf-core/svdb/merge/environment.yml b/modules/nf-core/svdb/merge/environment.yml new file mode 100644 index 00000000..4aad50da --- /dev/null +++ b/modules/nf-core/svdb/merge/environment.yml @@ -0,0 +1,9 @@ +name: svdb_merge +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - svdb=2.8.1 + # renovate: datasource=conda depName=bioconda/samtools + - samtools=1.16.1 diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml new file mode 100644 index 00000000..4fe40c56 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -0,0 +1,7 @@ +name: tabix_bgzip +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::tabix=1.11 diff --git a/modules/nf-core/tabix/bgziptabix/environment.yml b/modules/nf-core/tabix/bgziptabix/environment.yml new file mode 100644 index 00000000..028461c9 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/environment.yml @@ -0,0 +1,7 @@ +name: tabix_bgziptabix +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::tabix=1.11 diff --git a/modules/nf-core/tabix/tabix/environment.yml b/modules/nf-core/tabix/tabix/environment.yml new file mode 100644 index 00000000..7167fb87 --- /dev/null +++ b/modules/nf-core/tabix/tabix/environment.yml @@ -0,0 +1,7 @@ +name: tabix_tabix +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::tabix=1.11 diff --git a/modules/nf-core/tiddit/sv/environment.yml b/modules/nf-core/tiddit/sv/environment.yml new file mode 100644 index 00000000..d0367f17 --- /dev/null +++ b/modules/nf-core/tiddit/sv/environment.yml @@ -0,0 +1,7 @@ +name: tiddit_sv +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::tiddit=3.6.1 diff --git a/modules/nf-core/ucsc/wigtobigwig/environment.yml b/modules/nf-core/ucsc/wigtobigwig/environment.yml new file mode 100644 index 00000000..3e88a5dd --- /dev/null +++ b/modules/nf-core/ucsc/wigtobigwig/environment.yml @@ -0,0 +1,7 @@ +name: ucsc_wigtobigwig +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::ucsc-wigtobigwig=447 diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml new file mode 100644 index 00000000..0c9cbb10 --- /dev/null +++ b/modules/nf-core/untar/environment.yml @@ -0,0 +1,11 @@ +name: untar + +channels: + - conda-forge + - bioconda + - defaults + +dependencies: + - conda-forge::grep=3.11 + - conda-forge::sed=4.7 + - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test new file mode 100644 index 00000000..679e83c7 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test @@ -0,0 +1,55 @@ +nextflow_process { + + name "Test Process UNTAR" + script "../main.nf" + process "UNTAR" + + tag "modules" + tag "modules_nfcore" + tag "untar" + + test("test_untar") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out.untar).match("test_untar") }, + ) + } + + } + + test("test_untar_onlyfiles") { + + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out.untar).match("test_untar_onlyfiles") }, + ) + } + + } + +} diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap new file mode 100644 index 00000000..ace42576 --- /dev/null +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -0,0 +1,34 @@ +{ + "test_untar_onlyfiles": { + "content": [ + [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ] + ], + "timestamp": "2023-10-18T11:56:46.878844" + }, + "test_untar": { + "content": [ + [ + [ + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ] + ], + "timestamp": "2023-10-18T11:56:08.16574" + } +} \ No newline at end of file diff --git a/modules/nf-core/untar/tests/tags.yml b/modules/nf-core/untar/tests/tags.yml new file mode 100644 index 00000000..feb6f15c --- /dev/null +++ b/modules/nf-core/untar/tests/tags.yml @@ -0,0 +1,2 @@ +untar: + - modules/nf-core/untar/** diff --git a/modules/nf-core/upd/environment.yml b/modules/nf-core/upd/environment.yml new file mode 100644 index 00000000..77b65227 --- /dev/null +++ b/modules/nf-core/upd/environment.yml @@ -0,0 +1,7 @@ +name: upd +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::upd=0.1.1 diff --git a/modules/nf-core/vcfanno/environment.yml b/modules/nf-core/vcfanno/environment.yml new file mode 100644 index 00000000..f336cc6b --- /dev/null +++ b/modules/nf-core/vcfanno/environment.yml @@ -0,0 +1,7 @@ +name: vcfanno +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::vcfanno=0.3.5 diff --git a/modules/nf-core/vcfanno/tests/main.nf.test b/modules/nf-core/vcfanno/tests/main.nf.test new file mode 100644 index 00000000..b28431b2 --- /dev/null +++ b/modules/nf-core/vcfanno/tests/main.nf.test @@ -0,0 +1,106 @@ +nextflow_process { + + name "Test Process VCFANNO" + script "../main.nf" + process "VCFANNO" + + tag "modules" + tag "modules_nfcore" + tag "vcfanno" + + test("sarscov2 - [vcf(gz), tbi, vcf], [], toml, [vcf, tbi]") { + + when { + process { + """ + input[0] = [ + [ id:'test_compressed', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists:true) + ] + input[1] = file(params.test_data['homo_sapiens']['genome']['vcfanno_toml'], checkIfExists: true) + input[2] = [] + input[3] = [ + file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz", checkIfExists: true), + file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz.tbi",checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], vcf], [], toml, [vcf, tbi]") { + + when { + process { + """ + input[0] = [ + [ id:'test_uncompressed', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + [], + file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists:true) + ] + input[1] = file(params.test_data['homo_sapiens']['genome']['vcfanno_toml'], checkIfExists: true) + input[2] = [] + input[3] = [ + file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz", checkIfExists: true), + file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz.tbi",checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf(gz), tbi, vcf], [], toml, [vcf, tbi] - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test_compressed', single_end:false ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists:true) + ] + input[1] = file(params.test_data['homo_sapiens']['genome']['vcfanno_toml'], checkIfExists: true) + input[2] = [] + input[3] = [ + file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz", checkIfExists: true), + file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz.tbi",checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + +} diff --git a/modules/nf-core/vcfanno/tests/main.nf.test.snap b/modules/nf-core/vcfanno/tests/main.nf.test.snap new file mode 100644 index 00000000..7e5f737c --- /dev/null +++ b/modules/nf-core/vcfanno/tests/main.nf.test.snap @@ -0,0 +1,73 @@ +{ + "sarscov2 - [vcf(gz), tbi, vcf], [], toml, [vcf, tbi] - stub": { + "content": [ + "test_compressed.vcf", + [ + "versions.yml:md5,5ff0991b612706ce15d82eb1564513b0" + ] + ], + "timestamp": "2023-12-06T12:18:25.69588598" + }, + "sarscov2 - [vcf(gz), tbi, vcf], [], toml, [vcf, tbi]": { + "content": [ + { + "0": [ + [ + { + "id": "test_compressed", + "single_end": false + }, + "test_compressed.vcf:md5,d3cf5a6eaf6cca5b957833a313c5fbf4" + ] + ], + "1": [ + "versions.yml:md5,5ff0991b612706ce15d82eb1564513b0" + ], + "vcf": [ + [ + { + "id": "test_compressed", + "single_end": false + }, + "test_compressed.vcf:md5,d3cf5a6eaf6cca5b957833a313c5fbf4" + ] + ], + "versions": [ + "versions.yml:md5,5ff0991b612706ce15d82eb1564513b0" + ] + } + ], + "timestamp": "2023-12-06T12:21:13.209704154" + }, + "sarscov2 - [vcf, [], vcf], [], toml, [vcf, tbi]": { + "content": [ + { + "0": [ + [ + { + "id": "test_uncompressed", + "single_end": false + }, + "test_uncompressed.vcf:md5,d3cf5a6eaf6cca5b957833a313c5fbf4" + ] + ], + "1": [ + "versions.yml:md5,5ff0991b612706ce15d82eb1564513b0" + ], + "vcf": [ + [ + { + "id": "test_uncompressed", + "single_end": false + }, + "test_uncompressed.vcf:md5,d3cf5a6eaf6cca5b957833a313c5fbf4" + ] + ], + "versions": [ + "versions.yml:md5,5ff0991b612706ce15d82eb1564513b0" + ] + } + ], + "timestamp": "2023-12-06T12:21:19.255212216" + } +} \ No newline at end of file diff --git a/modules/nf-core/vcfanno/tests/nextflow.config b/modules/nf-core/vcfanno/tests/nextflow.config new file mode 100644 index 00000000..af28ad82 --- /dev/null +++ b/modules/nf-core/vcfanno/tests/nextflow.config @@ -0,0 +1,4 @@ +process { + + +} \ No newline at end of file diff --git a/modules/nf-core/vcfanno/tests/tags.yml b/modules/nf-core/vcfanno/tests/tags.yml new file mode 100644 index 00000000..e861bd53 --- /dev/null +++ b/modules/nf-core/vcfanno/tests/tags.yml @@ -0,0 +1,2 @@ +vcfanno: + - "modules/nf-core/vcfanno/**" From 38340bae3b533c085282d2f18f4e8eb34c4bb038 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Jan 2024 11:53:20 +0100 Subject: [PATCH 1566/1921] update subworkflows --- subworkflows/local/call_mobile_elements.nf | 2 +- subworkflows/local/call_repeat_expansions.nf | 2 +- subworkflows/local/variant_calling/call_sv_manta.nf | 4 ++-- subworkflows/local/variant_evaluation.nf | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/call_mobile_elements.nf b/subworkflows/local/call_mobile_elements.nf index 05e6355c..000b68cb 100644 --- a/subworkflows/local/call_mobile_elements.nf +++ b/subworkflows/local/call_mobile_elements.nf @@ -76,7 +76,7 @@ workflow CALL_MOBILE_ELEMENTS { // Fix the vcf by adding header, sorting and indexing BCFTOOLS_REHEADER_ME ( - RETROSEQ_CALL.out.vcf.map{ meta, vcf -> [ meta, vcf, [] ] }, + RETROSEQ_CALL.out.vcf.map{ meta, vcf -> [ meta, vcf, [], [] ] }, ch_genome_fai ) BCFTOOLS_SORT_ME ( BCFTOOLS_REHEADER_ME.out.vcf ) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 8e527eab..1fd76cb9 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -33,7 +33,7 @@ workflow CALL_REPEAT_EXPANSIONS { // Fix header and rename sample BCFTOOLS_REHEADER_EXP ( - EXPANSIONHUNTER.out.vcf.map{ meta, vcf -> [ meta, vcf, [] ]}, + EXPANSIONHUNTER.out.vcf.map{ meta, vcf -> [ meta, vcf, [], [] ]}, ch_genome_fai ) RENAMESAMPLE_EXP ( BCFTOOLS_REHEADER_EXP.out.vcf ) diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 818da23c..06b5f086 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -32,13 +32,13 @@ workflow CALL_SV_MANTA { .combine(bai_file_list) .map { it -> it + [ [], [] ] } .set { manta_input } - MANTA ( manta_input, ch_genome_fasta, ch_genome_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_genome_fasta, ch_genome_fai ) + MANTA ( manta_input, ch_genome_fasta, ch_genome_fai, [] ) } ch_versions = MANTA.out.versions diff --git a/subworkflows/local/variant_evaluation.nf b/subworkflows/local/variant_evaluation.nf index 435b05d8..af4ed2a2 100644 --- a/subworkflows/local/variant_evaluation.nf +++ b/subworkflows/local/variant_evaluation.nf @@ -22,7 +22,7 @@ workflow VARIANT_EVALUATION { .map { row -> evregions = row.evaluationregions[0].isEmpty() ? [] : row.evaluationregions[0] bedregions = row.bedregions[0].isEmpty() ? [] : row.bedregions[0] - return [[samplename:row.samplename[0], bedregions:bedregions, evaluationregions:evregions], row.vcf[0], []] + return [[samplename:row.samplename[0], bedregions:bedregions, evaluationregions:evregions], row.vcf[0], [], []] } .set { ch_rtgvcfs_dbs } From 2b76d6b0fedb3828f8adebc18538cfca7110b6c2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 Jan 2024 12:02:14 +0100 Subject: [PATCH 1567/1921] fix lint --- .devcontainer/devcontainer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4ecfbfe3..4a9bc5c7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,11 +18,11 @@ "python.linting.flake8Path": "/opt/conda/bin/flake8", "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", - "python.linting.pylintPath": "/opt/conda/bin/pylint" + "python.linting.pylintPath": "/opt/conda/bin/pylint", }, // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } - } + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"], + }, + }, } From c9d8960570e6d052e5c65f222cb83ace6795944b Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 25 Jan 2024 15:54:54 +0100 Subject: [PATCH 1568/1921] updates output documentation --- CHANGELOG.md | 1 + docs/output.md | 32 ++++++++++++++++++-------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 309a21ce..2a7922da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Change hardcoded platform value to params.platform in align_MT.config [#475](https://github.com/nf-core/raredisease/pull/475) - The split into clincial and research VCFs is now done before ranking the varaints [#485](https://github.com/nf-core/raredisease/pull/485) - Installed the nf-core version of ensemblvep/vep module [#482](https://github.com/nf-core/raredisease/pull/482) +- The filenames of the ranked output VCF files have been changed. See [output.md](docs/output.md#filtering-and-ranking) for more information[#485](https://github.com/nf-core/raredisease/pull/485) ### `Fixed` diff --git a/docs/output.md b/docs/output.md index fd2cd30b..12edd9c4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -471,28 +471,32 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files -### Rank variants and filtering +### Filtering and ranking + +#### Filter_vep + +[filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) is used to subset the variants based on a list of HGNC ID:s. Typpical use case is that you want to filter your results to only include variants in a predefined set of clinically relevant genes. This step is optional and can be disabled by using the flag `--skip_vep_filter`. You will always get the complete VCF together with the clinical VCF. #### GENMOD -[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. VCF file annotated by GENMOD are further filtered using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) to separate clinically relevant variants. You can skip the filtering step by setting --skip_vep_filter to true. +[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. Each variant variant will be asigned a predictded pathogenicity score. The score will be given both as a raw score and a normalized score with values between 0 and 1. The tags in the INFO field are `RankScore` and `RankScoreNormalized`. The score can be configured to fit your annotations and preferences by modifying the score config file.
Output files - `rank_and_filter/` - - `_clinical_mt.vcf.gz`: file containing clinically relevant mitochondrial SNVs. - - `_clinical_mt.vcf.gz.tbi`: index of the file containing clinically relevant mitochondrial SNVs. - - `_clinical_snv.vcf.gz`: file containing clinically relevant SNVs (does not include mitochondrial variants). - - `_clinical_snv.vcf.gz.tbi`: index of the file containing clinically relevant SNVs. - - `_clinical_sv.vcf.gz`: file containing clinically relevant SVs (includes mitochondrial variants). - - `_clinical_sv.vcf.gz.tbi`: index of the file containing clinically relevant SVs. - - `_ranked_mt.vcf.gz`: file containing mitochondrial SNV annotations with their rank scores. - - `_ranked_mt.vcf.gz.tbi`: index of the file containing mitochondrial SNV annotations with their rank scores. - - `_ranked_snv.vcf.gz`: file containing SNV annotations with their rank scores (does not include mitochondrial variants). - - `_ranked_snv.vcf.gz.tbi`: index of the file containing SNV annotations with their rank scores. - - `_ranked_sv.vcf.gz`: file containing SV annotations with their rank scores (includes mitochondrial variants). - - `_ranked_sv.vcf.gz.tbi`: index of the file containing SV annotations with their rank scores. + - `_mt_ranked_clinical.vcf.gz`: file containing clinically relevant mitochondrial SNVs. + - `_mt_ranked_clinical.vcf.gz.tbi`: index of the file containing clinically relevant mitochondrial SNVs. + - `_mt_ranked_research.vcf.gz`: file containing mitochondrial SNV annotations with their rank scores. + - `_mt_ranked_research.vcf.gz.tbi`: index of the file containing mitochondrial SNV annotations with their rank scores. + - `_snv_ranked_clinical.vcf.gz`: file containing clinically relevant SNVs (does not include mitochondrial variants). + - `_snv_ranked_clinical.vcf.gz.tbi`: index of the file containing clinically relevant SNVs. + - `_snv_ranked_research.vcf.gz`: file containing SNV annotations with their rank scores (does not include mitochondrial variants). + - `_snv_ranked_research.vcf.gz.tbi`: index of the file containing SNV annotations with their rank scores. + - `_sv_ranked_clinical.vcf.gz`: file containing clinically relevant SVs (includes mitochondrial variants). + - `_sv_ranked_clinical.vcf.gz.tbi`: index of the file containing clinically relevant SVs. + - `_sv_ranked_research.vcf.gz`: file containing SV annotations with their rank scores (includes mitochondrial variants). + - `_sv_ranked_resarch.vcf.gz.tbi`: index of the file containing SV annotations with their rank scores.
From 9c7d04e377934eaf2f2f0358efba04a8c32f18a7 Mon Sep 17 00:00:00 2001 From: jemten Date: Thu, 25 Jan 2024 17:03:06 +0100 Subject: [PATCH 1569/1921] fixing review comments --- docs/output.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/output.md b/docs/output.md index 12edd9c4..080c73ac 100644 --- a/docs/output.md +++ b/docs/output.md @@ -356,8 +356,6 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e - `annotate_snv/genome` - `_rohann_vcfanno_filter_vep.vcf.gz`: file containing bcftools roh, vcfanno, and vep annotations. - `_rohann_vcfanno_filter_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. - - `_vep_csq_pli.vcf.gz`: file containing bcftools roh, vcfanno, vep, consequence and pli annotations. - - `_vep_csq_pli.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, vep, consequence and pli annotations. @@ -395,8 +393,6 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e - `annotate_sv/` - `_svdbquery_vep.vcf.gz`: file containing svdb query, and vep annotations. - `_svdbquery_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. - - `_vep_csq_pli.vcf.gz`: file containing bcftools roh, vcfanno, vep, consequence and pli annotations. - - `_vep_csq_pli.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, vep, consequence and pli annotations. @@ -475,11 +471,11 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files #### Filter_vep -[filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) is used to subset the variants based on a list of HGNC ID:s. Typpical use case is that you want to filter your results to only include variants in a predefined set of clinically relevant genes. This step is optional and can be disabled by using the flag `--skip_vep_filter`. You will always get the complete VCF together with the clinical VCF. +[filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html) is used to subset the variants based on a list of HGNC ID:s. Typical use case is that you want to filter your results to only include variants in a predefined set of clinically relevant genes. This step is optional and can be disabled by using the flag `--skip_vep_filter`. You will always get the complete VCF together with the clinical VCF. #### GENMOD -[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. Each variant variant will be asigned a predictded pathogenicity score. The score will be given both as a raw score and a normalized score with values between 0 and 1. The tags in the INFO field are `RankScore` and `RankScoreNormalized`. The score can be configured to fit your annotations and preferences by modifying the score config file. +[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. Each variant will be assigned a predicted pathogenicity score. The score will be given both as a raw score and a normalized score with values between 0 and 1. The tags in the INFO field are `RankScore` and `RankScoreNormalized`. The score can be configured to fit your annotations and preferences by modifying the score config file.
Output files From e6973d793c70eec7344fbdf5bd46412e604d8110 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 27 Jan 2024 14:16:08 +0100 Subject: [PATCH 1570/1921] update schema --- assets/vep_plugin_files_schema.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/assets/vep_plugin_files_schema.json b/assets/vep_plugin_files_schema.json index 6f728a7b..55695b6e 100644 --- a/assets/vep_plugin_files_schema.json +++ b/assets/vep_plugin_files_schema.json @@ -9,7 +9,14 @@ "properties": { "vep_files": { "type": "string", - "format": "file-path", + "anyOf": [ + { + "format": "file-path" + }, + { + "format": "directory-path" + } + ], "exists": true, "errorMessage": "Path to vep plugin files and their indices" } From 2ec7cf13c4fa93901655d5ba47100dc745afdaeb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Jan 2024 13:43:50 +0100 Subject: [PATCH 1571/1921] refactor --- conf/modules/align_MT.config | 14 +++++++------ conf/modules/align_bwa_bwamem2.config | 1 + conf/modules/annotate_cadd.config | 2 +- conf/modules/call_mobile_elements.config | 1 + conf/modules/call_repeat_expansions.config | 4 +++- conf/modules/call_snv.config | 2 +- conf/modules/call_sv_MT.config | 1 + conf/modules/convert_mt_bam_to_fastq.config | 12 +++++------ conf/modules/postprocess_MT_calls.config | 2 +- conf/modules/qc_bam.config | 4 ++++ workflows/raredisease.nf | 22 +++++++++++---------- 11 files changed, 39 insertions(+), 26 deletions(-) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index cb4b55ba..e88f7e88 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -42,7 +42,7 @@ process { } withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.args = '--TMP_DIR . --CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged" } } @@ -52,12 +52,13 @@ process { "--RGLB lib", "--RGPL ${params.platform}", "--RGPU barcode", - "--RGSM ${meta.id}" + "--RGSM ${meta.id}", + "--TMP_DIR ./temp_folder" ].join(' ').trim() } } withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.args = '--TMP_DIR . --VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates" } } @@ -99,7 +100,7 @@ process { } withName: '.*ALIGN_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { - ext.args = '--CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' + ext.args = '--TMP_DIR . --CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' ext.prefix = { "${meta.id}_merged_shifted" } } @@ -109,12 +110,13 @@ process { "--RGLB lib", "--RGPL ${params.platform}", "--RGPU barcode", - "--RGSM ${meta.id}" + "--RGSM ${meta.id}", + "--TMP_DIR ." ].join(' ').trim() } } withName: '.*ALIGN_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' + ext.args = '--TMP_DIR . --VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' ext.prefix = { "${meta.id}_markduplicates_shifted" } } diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index 4d8b59e3..15453e0e 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -40,6 +40,7 @@ process { } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:MARKDUPLICATES' { + ext.args = "--TMP_DIR ." ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ enabled: !params.save_mapped_as_cram, diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index 5cba1d6a..438beeb5 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -16,7 +16,7 @@ // process { - if (params.cadd_resources != null) { + if (!params.cadd_resources != "null") { withName: '.*:ANNOTATE_CADD.*' { ext.when = { ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } } diff --git a/conf/modules/call_mobile_elements.config b/conf/modules/call_mobile_elements.config index f3622869..0a5e4faf 100644 --- a/conf/modules/call_mobile_elements.config +++ b/conf/modules/call_mobile_elements.config @@ -38,6 +38,7 @@ process { } withName: '.*CALL_MOBILE_ELEMENTS:BCFTOOLS_REHEADER_ME' { + ext.args = "--temp-prefix ." ext.args2 = { '--output-type v' } ext.prefix = { "${meta.id}_${meta.interval}_retroseq_reheader" } } diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 13a7e519..db12e4ff 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -24,11 +24,12 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { - ext.args = { ("${meta.sex}" == 1) ? '--sex male' : '--sex female' } + ext.args = { ("${meta.sex}" == '1') ? '--sex male' : '--sex female' } ext.prefix = { "${meta.id}_exphunter" } } withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { + ext.args = "--temp-prefix ." ext.prefix = { "${meta.id}_reheader" } } @@ -66,6 +67,7 @@ process { withName: '.*CALL_REPEAT_EXPANSIONS:COMPRESS_STRANGER' { ext.prefix = { "${meta.id}_repeat_expansion" } + ext.args = '--output-type z' publishDir = [ path: { "${params.outdir}/repeat_expansions" }, mode: params.publish_dir_mode, diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config index 51f7a56f..92eda8cf 100644 --- a/conf/modules/call_snv.config +++ b/conf/modules/call_snv.config @@ -20,7 +20,7 @@ process { } withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { - ext.args = "--exclude-intervals ${params.mito_name}" + ext.args = { "--exclude-intervals ${params.mito_name}" } ext.prefix = { "${meta.id}_nomito" } publishDir = [ path: { "${params.outdir}/call_snv/genome" }, diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config index 606ef429..b7022829 100644 --- a/conf/modules/call_sv_MT.config +++ b/conf/modules/call_sv_MT.config @@ -28,6 +28,7 @@ process { if (!params.skip_eklipse){ withName: '.*CALL_SV_MT:EKLIPSE' { + ext.args = "-tmp ." publishDir = [ path: { "${params.outdir}/call_sv/mitochondria" }, mode: params.publish_dir_mode, diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config index 0365c452..66c81425 100644 --- a/conf/modules/convert_mt_bam_to_fastq.config +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -18,19 +18,19 @@ process { withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { - beforeScript = {"mkdir ./tmp"} - ext.args = [ + ext.args = { [ "-L ${params.mito_name}", "--read-filter MateOnSameContigOrNoMappedMateReadFilter", - "--read-filter MateUnmappedAndUnmappedReadFilter" - ].join(" ").trim() + "--read-filter MateUnmappedAndUnmappedReadFilter", + "--tmp-dir ." + ].join(" ").trim() } } withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_REVERTSAM_MT' { - ext.args = '--OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' + ext.args = '--TMP_DIR . --OUTPUT_BY_READGROUP false --VALIDATION_STRINGENCY LENIENT --ATTRIBUTE_TO_CLEAR FT --ATTRIBUTE_TO_CLEAR CO --SORT_ORDER queryname --RESTORE_ORIGINAL_QUALITIES false' } withName: '.*ALIGN:CONVERT_MT_BAM_TO_FASTQ:GATK4_SAMTOFASTQ_MT' { - ext.args = '--VALIDATION_STRINGENCY LENIENT' + ext.args = '--VALIDATION_STRINGENCY LENIENT --TMP_DIR .' } } diff --git a/conf/modules/postprocess_MT_calls.config b/conf/modules/postprocess_MT_calls.config index 07e266de..ba6e8abf 100644 --- a/conf/modules/postprocess_MT_calls.config +++ b/conf/modules/postprocess_MT_calls.config @@ -18,7 +18,7 @@ process { withName: '.*POSTPROCESS_MT_CALLS:GATK4_MERGEVCFS_LIFT_UNLIFT_MT' { - ext.prefix = { "${meta.id}_merged" } + ext.prefix = { "${meta.id}_merged_liftunlift" } } withName: '.*POSTPROCESS_MT_CALLS:GATK4_VARIANTFILTRATION_MT' { diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 1982a757..61daf4d6 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -25,10 +25,12 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTMULTIPLEMETRICS' { + ext.args = "--TMP_DIR ." ext.prefix = { "${meta.id}_multiplemetrics" } } withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { + ext.args = "--TMP_DIR ." ext.when = { !params.target_bed.equals(null) } ext.prefix = { "${meta.id}_hsmetrics" } } @@ -65,11 +67,13 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { + ext.args = "--TMP_DIR ." ext.when = { params.analysis_type.equals("wgs") && !params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { + ext.args = "--TMP_DIR ." ext.when = { params.analysis_type.equals("wgs") && !params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics_y" } } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ec55bb7f..9f402370 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -312,17 +312,19 @@ workflow RAREDISEASE { } // Read and store paths in the vep_plugin_files file - ch_vep_extra_files_unsplit.splitCsv ( header:true ) - .map { row -> - f = file(row.vep_files[0]) - if(f.isFile() || f.isDirectory()){ - return [f] - } else { - error("\nVep database file ${f} does not exist.") + if (params.vep_plugin_files) { + ch_vep_extra_files_unsplit.splitCsv ( header:true ) + .map { row -> + f = file(row.vep_files[0]) + if(f.isFile() || f.isDirectory()){ + return [f] + } else { + error("\nVep database file ${f} does not exist.") + } } - } - .collect() - .set {ch_vep_extra_files} + .collect() + .set {ch_vep_extra_files} + } // Input QC if (!params.skip_fastqc) { From a78b52c0157f3e8e101974438c7562ba9970badc Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 29 Jan 2024 14:03:48 +0100 Subject: [PATCH 1572/1921] fix vepvep configs --- conf/modules/annotate_genome_snvs.config | 6 +++--- conf/modules/annotate_mobile_elements.config | 2 +- conf/modules/annotate_mt_snvs.config | 6 +++--- conf/modules/annotate_structural_variants.config | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 5b1e9928..c1bb9144 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -77,10 +77,10 @@ process { withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } - ext.args = [ + ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', - '--plugin pLI,pLI_values_107.txt', + "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 5000', '--buffer_size 20000', @@ -90,7 +90,7 @@ process { '--hgvs --humdiv --no_progress --numbers', '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', '--uniprot --vcf' - ].join(' ') + ].join(' ') } } withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index cb62894d..e94f67af 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -40,7 +40,7 @@ process { ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - '--plugin pLI,pLI_values_107.txt', + "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index f0e46836..dfa7ea2f 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -18,10 +18,10 @@ process { if (!params.skip_mt_annotation) { withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { - ext.args = [ + ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', - '--plugin pLI,pLI_values_107.txt', + "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 0', '--buffer_size 20000', @@ -31,7 +31,7 @@ process { '--hgvs --humdiv --no_progress --numbers', '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', '--uniprot' - ].join(' ') + ].join(' ') } } withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 9f8f5f19..74425f31 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -43,10 +43,10 @@ process { } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { - ext.args = [ + ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - '--plugin pLI,pLI_values_107.txt', + "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', @@ -54,7 +54,7 @@ process { '--no_progress --numbers --per_gene --polyphen p', '--protein --offline --regulatory --sift p', '--symbol --tsl --uniprot --vcf' - ].join(' ') + ].join(' ') } ext.prefix = { "${meta.id}_svdbquery_vep" } publishDir = [ path: { "${params.outdir}/annotate_sv" }, From 17860c92d69a402bc15bd26f87bee5926e3ecf49 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Mon, 29 Jan 2024 17:36:31 +0100 Subject: [PATCH 1573/1921] fix input channel for vcf2cytosure subworkflow --- subworkflows/local/generate_cytosure_files.nf | 10 +++++++--- workflows/raredisease.nf | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf index 3d716f92..561411ab 100644 --- a/subworkflows/local/generate_cytosure_files.nf +++ b/subworkflows/local/generate_cytosure_files.nf @@ -8,7 +8,8 @@ include { VCF2CYTOSURE } from '../../modules/nf-core workflow GENERATE_CYTOSURE_FILES { take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_tbi // channel: [mandatory] [ val(meta), path(vcf_index) ] ch_bam // channel: [mandatory] [ val(meta), path(bam) ] ch_blacklist // channel: [optional] [path(blacklist)] @@ -17,8 +18,11 @@ workflow GENERATE_CYTOSURE_FILES { TIDDIT_COV_VCF2CYTOSURE (ch_bam, [[],[]]) - // Build channel: [val(sample_meta). path(vcf), path(vcf_index)] - ch_bam.combine(ch_vcf).map { + // Build channel: [val(sample_meta), path(vcf), path(vcf_index)] + ch_vcf.join( ch_tbi, failOnMismatch: true ) + .set { ch_vcf_tbi } + + ch_bam.combine(ch_vcf_tbi).map { meta_sample, bam, meta_case, vcf, tbi -> return [ meta_sample, vcf, tbi ] }.set { ch_sample_vcf } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ec55bb7f..54fe83a8 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -610,7 +610,8 @@ workflow RAREDISEASE { // Generate CGH files from sequencing data, turned off by default if ( !params.skip_vcf2cytosure && params.analysis_type != "wes" ) { GENERATE_CYTOSURE_FILES ( - BGZIPTABIX_SV.out.gz_tbi, + ch_sv_annotate.vcf_ann, + ch_sv_annotate.tbi, ch_mapped.genome_marked_bam, ch_vcf2cytosure_blacklist ) From 1fb1d91c4511caa1f976710e110181acb7b22f42 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Jan 2024 23:09:00 +0100 Subject: [PATCH 1574/1921] add genomecov --- modules.json | 5 + .../bedtools/genomecov/environment.yml | 7 ++ modules/nf-core/bedtools/genomecov/main.nf | 70 +++++++++++ modules/nf-core/bedtools/genomecov/meta.yml | 59 +++++++++ .../bedtools/genomecov/tests/main.nf.test | 118 ++++++++++++++++++ .../genomecov/tests/main.nf.test.snap | 95 ++++++++++++++ .../bedtools/genomecov/tests/nextflow.config | 7 ++ .../nf-core/bedtools/genomecov/tests/tags.yml | 2 + 8 files changed, 363 insertions(+) create mode 100644 modules/nf-core/bedtools/genomecov/environment.yml create mode 100644 modules/nf-core/bedtools/genomecov/main.nf create mode 100644 modules/nf-core/bedtools/genomecov/meta.yml create mode 100644 modules/nf-core/bedtools/genomecov/tests/main.nf.test create mode 100644 modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap create mode 100644 modules/nf-core/bedtools/genomecov/tests/nextflow.config create mode 100644 modules/nf-core/bedtools/genomecov/tests/tags.yml diff --git a/modules.json b/modules.json index e33ea340..e86e65d7 100644 --- a/modules.json +++ b/modules.json @@ -50,6 +50,11 @@ "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", "installed_by": ["modules"] }, + "bedtools/genomecov": { + "branch": "master", + "git_sha": "575e1bc54b083fb15e7dd8b5fcc40bea60e8ce83", + "installed_by": ["modules"] + }, "bwa/index": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", diff --git a/modules/nf-core/bedtools/genomecov/environment.yml b/modules/nf-core/bedtools/genomecov/environment.yml new file mode 100644 index 00000000..8fbe20c3 --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/environment.yml @@ -0,0 +1,7 @@ +name: bedtools_genomecov +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/genomecov/main.nf b/modules/nf-core/bedtools/genomecov/main.nf new file mode 100644 index 00000000..7a4d9c45 --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/main.nf @@ -0,0 +1,70 @@ +process BEDTOOLS_GENOMECOV { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bedtools:2.31.1--hf5e1c6e_0' : + 'biocontainers/bedtools:2.31.1--hf5e1c6e_0' }" + + input: + tuple val(meta), path(intervals), val(scale) + path sizes + val extension + + output: + tuple val(meta), path("*.${extension}"), emit: genomecov + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args_list = args.tokenize() + args += (scale > 0 && scale != 1) ? " -scale $scale" : "" + if (!args_list.contains('-bg') && (scale > 0 && scale != 1)) { + args += " -bg" + } + + def prefix = task.ext.prefix ?: "${meta.id}" + if (intervals.name =~ /\.bam/) { + """ + bedtools \\ + genomecov \\ + -ibam $intervals \\ + $args \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ + } else { + """ + bedtools \\ + genomecov \\ + -i $intervals \\ + -g $sizes \\ + $args \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ + } + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/bedtools/genomecov/meta.yml b/modules/nf-core/bedtools/genomecov/meta.yml new file mode 100644 index 00000000..2b2385e3 --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/meta.yml @@ -0,0 +1,59 @@ +name: bedtools_genomecov +description: Computes histograms (default), per-base reports (-d) and BEDGRAPH (-bg) summaries of feature coverage (e.g., aligned sequences) for a given genome. +keywords: + - bed + - bam + - genomecov + - bedtools + - histogram +tools: + - bedtools: + description: | + A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + documentation: https://bedtools.readthedocs.io/en/latest/content/tools/genomecov.html + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - scale: + type: integer + description: Number containing the scale factor for the output. Set to 1 to disable. Setting to a value other than 1 will also get the -bg bedgraph output format as this is required for this command switch + - sizes: + type: file + description: Tab-delimited table of chromosome names in the first column and chromosome sizes in the second column + - extension: + type: string + description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", ".tab", etc.) It is set arbitrarily by the user and corresponds to the file format which depends on arguments. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genomecov: + type: file + description: Computed genome coverage file + pattern: "*.${extension}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@edmundmiller" + - "@sruthipsuresh" + - "@drpatelh" + - "@sidorov-si" + - "@chris-cheshire" +maintainers: + - "@edmundmiller" + - "@sruthipsuresh" + - "@drpatelh" + - "@sidorov-si" + - "@chris-cheshire" diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test b/modules/nf-core/bedtools/genomecov/tests/main.nf.test new file mode 100644 index 00000000..21e69aed --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test @@ -0,0 +1,118 @@ +nextflow_process { + name "Test Process BEDTOOLS_GENOMECOV" + script "../main.nf" + process "BEDTOOLS_GENOMECOV" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "bedtools" + tag "bedtools/genomecov" + + test("sarscov2 - no scale") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + 1 + ] + // sizes + input[1] = [] + // extension + input[2] = "txt" + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("no_scale") } + ) + } + + } + + test("sarscov2 - dummy sizes") { + when { + process { + """ + input[0] = [ + [ id:'test'], + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + 0.5 + ] + // sizes + input[1] = file('dummy_chromosome_sizes') + // extension + input[2] = 'txt' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("dummy_sizes") } + ) + } + + } + + test("sarscov2 - scale") { + when { + process { + """ + input[0] = [ + [ id:'test'], + file(params.test_data['sarscov2']['genome']['baits_bed'], checkIfExists: true), + 0.5 + ] + // sizes + input[1] = file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + // extension + input[2] = 'txt' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("scale") } + ) + } + + } + + test("stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + 1 + ] + // sizes + input[1] = [] + // extension + input[2] = 'txt' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(file(process.out.genomecov[0][1]).name).match("stub") } + ) + } + + } + +} diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap new file mode 100644 index 00000000..8f9191e4 --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap @@ -0,0 +1,95 @@ +{ + "dummy_sizes": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,01291b6e1beab72e046653e709eb0e10" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,01291b6e1beab72e046653e709eb0e10" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "timestamp": "2023-12-05T17:35:58.35232" + }, + "no_scale": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "timestamp": "2023-12-05T17:35:51.142496" + }, + "stub": { + "content": [ + "test.coverage.txt" + ], + "timestamp": "2023-12-05T17:36:13.084709" + }, + "scale": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "timestamp": "2023-12-05T17:36:05.962006" + } +} \ No newline at end of file diff --git a/modules/nf-core/bedtools/genomecov/tests/nextflow.config b/modules/nf-core/bedtools/genomecov/tests/nextflow.config new file mode 100644 index 00000000..bdb74ae5 --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: BEDTOOLS_GENOMECOV { + ext.prefix = { "${meta.id}.coverage" } + } + +} diff --git a/modules/nf-core/bedtools/genomecov/tests/tags.yml b/modules/nf-core/bedtools/genomecov/tests/tags.yml new file mode 100644 index 00000000..55fce478 --- /dev/null +++ b/modules/nf-core/bedtools/genomecov/tests/tags.yml @@ -0,0 +1,2 @@ +bedtools/genomecov: + - "modules/nf-core/bedtools/genomecov/**" From 8c32fe124df1a95c4ce857ad5cac262b4ec16d63 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:20:32 +0100 Subject: [PATCH 1575/1921] add subsample_mt --- conf/modules/subsample_mt.config | 23 +++++++++++++++++++++++ nextflow.config | 3 ++- subworkflows/local/subsample_mt.nf | 22 ++++++++++++++++++++++ workflows/raredisease.nf | 3 +++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 conf/modules/subsample_mt.config create mode 100644 subworkflows/local/subsample_mt.nf diff --git a/conf/modules/subsample_mt.config b/conf/modules/subsample_mt.config new file mode 100644 index 00000000..079affe9 --- /dev/null +++ b/conf/modules/subsample_mt.config @@ -0,0 +1,23 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Subsample MT +// + +process { + withName: '.*BEDTOOLS_GENOMECOV' { + ext.args = { "-dz" } + ext.prefix = { "${meta.id}" } + } +} diff --git a/nextflow.config b/nextflow.config index 681972ca..c851ac89 100644 --- a/nextflow.config +++ b/nextflow.config @@ -243,7 +243,7 @@ if (!params.igenomes_ignore) { // Load nf-core/raredisease custom config try { - includeConfig "${params.custom_config_base}/pipeline/raredisease.config" + includeConfig "https://raw.githubusercontent.com/nf-core/configs/683bae73d91856a97cd1dbbfe3e3dde4ae5373a1/pipeline/raredisease.config" } catch (Exception e) { System.err.println("WARNING: Could not load nf-core/config/raredisease profiles: ${params.custom_config_base}/pipeline/raredisease.config") } @@ -337,6 +337,7 @@ includeConfig 'conf/modules/call_mobile_elements.config' includeConfig 'conf/modules/annotate_mobile_elements.config' includeConfig 'conf/modules/generate_clinical_set.config' includeConfig 'conf/modules/variant_evaluation.config' +includeConfig 'conf/modules/subsample_mt.config' // Function to ensure that resource requirements don't go beyond // a maximum limit diff --git a/subworkflows/local/subsample_mt.nf b/subworkflows/local/subsample_mt.nf new file mode 100644 index 00000000..6ffe8c98 --- /dev/null +++ b/subworkflows/local/subsample_mt.nf @@ -0,0 +1,22 @@ +// +// A subworkflow to subsample MT alignments +// + +include { BEDTOOLS_GENOMECOV } from '../../modules/nf-core/bedtools/genomecov/main' + +workflow SUBSAMPLE_MT { + + take: + ch_mt_marked_bam // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] + + main: + + ch_mt_marked_bam.map {meta, bam -> return [meta, bam, []]}.set {ch_genomecov_in} + + BEDTOOLS_GENOMECOV (ch_genomecov_in, [], []) + + ch_versions = ch_versions.mix(BEDTOOLS_GENOMECOV.out.versions.first()) + + emit: + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9f402370..1ee3f1c9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -140,6 +140,7 @@ include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkf include { RANK_VARIANTS as RANK_VARIANTS_SNV } from '../subworkflows/local/rank_variants' include { RANK_VARIANTS as RANK_VARIANTS_SV } from '../subworkflows/local/rank_variants' include { SCATTER_GENOME } from '../subworkflows/local/scatter_genome' +include { SUBSAMPLE_MT } from '../subworkflows/local/subsample_mt' include { VARIANT_EVALUATION } from '../subworkflows/local/variant_evaluation' /* @@ -362,6 +363,8 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) + SUBSAMPLE_MT(ch_mapped.mt_marked_bam) + // // BAM QUALITY CHECK // From b434944db334a09f934767e33b9269639bef0518 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:58:16 +0100 Subject: [PATCH 1576/1921] fix few lint errors --- main.nf | 3 --- nextflow.config | 3 +++ nextflow_schema.json | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/main.nf b/main.nf index ee2294fe..72b342a3 100644 --- a/main.nf +++ b/main.nf @@ -35,7 +35,6 @@ params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, params.mobile_element_references = WorkflowMain.getGenomeAttribute(params, 'mobile_element_references') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') params.mt_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_fasta') -params.ngsbits_samplegender_method = WorkflowMain.getGenomeAttribute(params, 'ngsbits_samplegender_method') params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 'ploidy_model') params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') params.readcount_intervals = WorkflowMain.getGenomeAttribute(params, 'readcount_intervals') @@ -47,7 +46,6 @@ params.score_config_sv = WorkflowMain.getGenomeAttribute(params, params.sdf = WorkflowMain.getGenomeAttribute(params, 'sdf') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') -params.min_trimmed_length = WorkflowMain.getGenomeAttribute(params, 'min_trimmed_length') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filters') params.vcf2cytosure_blacklist = WorkflowMain.getGenomeAttribute(params, 'vcf2cytosure_blacklist') @@ -55,7 +53,6 @@ params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') 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.vep_plugin_files = WorkflowMain.getGenomeAttribute(params, 'vep_plugin_files') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/nextflow.config b/nextflow.config index 8957a411..7fec01c5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -59,6 +59,9 @@ params { cnvnator_binsize = 1000 variant_caller = 'deepvariant' + // variant annotation + vep_cache_version = 110 + // sentieon Defaults ml_model = '' diff --git a/nextflow_schema.json b/nextflow_schema.json index 04c55dd6..74b35fd8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -451,9 +451,9 @@ "ngsbits_samplegender_method": { "type": "string", "default": "xy", - "enum": ["xy", "hetx", "sry"], "description": "Method selection for ngs-bits samplegender", - "fa_icon": "fas fa-align-center" + "fa_icon": "fas fa-align-center", + "enum": ["xy", "hetx", "sry"] }, "run_rtgvcfeval": { "type": "boolean", @@ -569,7 +569,7 @@ "description": "Interval in the reference that will be used in the software" }, "cnvnator_binsize": { - "type": "number", + "type": "integer", "description": "Bin size for CNVnator", "default": 1000, "fa_icon": "fas fa-align-center" @@ -591,7 +591,7 @@ }, "variant_type": { "type": "string", - "default": "snp", + "default": "snp,indel", "description": "Specifies the variant types for sentieon variant caller.", "fa_icon": "fas fa-align-center", "enum": ["snp", "indel", "snp,indel"] From d3942a5432b98e1502b7e687da11dd2cde1aa6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=ADa=20Pe=C3=B1a-P=C3=A9rez?= Date: Tue, 30 Jan 2024 11:46:50 +0100 Subject: [PATCH 1577/1921] Apply suggestions from code review --- conf/modules/annotate_genome_snvs.config | 2 +- conf/modules/annotate_mobile_elements.config | 2 +- conf/modules/annotate_mt_snvs.config | 2 +- conf/modules/annotate_structural_variants.config | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index c1bb9144..09891e43 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -80,7 +80,7 @@ process { ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', - "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", + "--plugin pLI,pLI_values.txt", '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 5000', '--buffer_size 20000', diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index e94f67af..98f8fa15 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -40,7 +40,7 @@ process { ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", + "--plugin pLI,pLI_values.txt", '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index dfa7ea2f..0ee1c471 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -21,7 +21,7 @@ process { ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', - "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", + "--plugin pLI,pLI_values.txt", '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 0', '--buffer_size 20000', diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 74425f31..89f88b30 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -46,7 +46,7 @@ process { ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - "--plugin pLI,pLI_values_${params.vep_cache_version}.txt", + "--plugin pLI,pLI_values.txt", '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', From 24afea99b7056bd26f5c970ec27b39fbab9130bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luc=C3=ADa=20Pe=C3=B1a-P=C3=A9rez?= Date: Tue, 30 Jan 2024 11:48:19 +0100 Subject: [PATCH 1578/1921] Apply suggestions from code review --- conf/modules/annotate_genome_snvs.config | 2 +- conf/modules/annotate_mobile_elements.config | 2 +- conf/modules/annotate_mt_snvs.config | 2 +- conf/modules/annotate_structural_variants.config | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 09891e43..bf748350 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -80,7 +80,7 @@ process { ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', - "--plugin pLI,pLI_values.txt", + '--plugin pLI,pLI_values.txt', '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 5000', '--buffer_size 20000', diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index 98f8fa15..dec67a22 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -40,7 +40,7 @@ process { ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - "--plugin pLI,pLI_values.txt", + '--plugin pLI,pLI_values.txt', '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 0ee1c471..45260fb2 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -21,7 +21,7 @@ process { ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', - "--plugin pLI,pLI_values.txt", + '--plugin pLI,pLI_values.txt', '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', '--distance 0', '--buffer_size 20000', diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 89f88b30..62faeda7 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -46,7 +46,7 @@ process { ext.args = { [ '--dir_cache vep_cache', '--dir_plugins vep_cache/Plugins', - "--plugin pLI,pLI_values.txt", + '--plugin pLI,pLI_values.txt', '--appris --biotype --buffer_size 100 --canonical --cache --ccds', '--compress_output bgzip --distance 5000 --domains', '--exclude_predicted --force_overwrite --format vcf', From 0a44420eeac1dc8d529dcae0e525f10da0ac7ee9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Jan 2024 13:23:42 +0100 Subject: [PATCH 1579/1921] fix pre-commit --- .devcontainer/devcontainer.json | 8 +- .editorconfig | 4 +- .github/workflows/download_pipeline.yml | 2 +- assets/svrank_model.ini | 443 ------------------ subworkflows/local/call_repeat_expansions.nf | 4 +- .../local/variant_calling/call_sv_MT.nf | 2 +- workflows/raredisease.nf | 126 ++--- 7 files changed, 73 insertions(+), 516 deletions(-) delete mode 100644 assets/svrank_model.ini diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4a9bc5c7..4ecfbfe3 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,11 +18,11 @@ "python.linting.flake8Path": "/opt/conda/bin/flake8", "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", - "python.linting.pylintPath": "/opt/conda/bin/pylint", + "python.linting.pylintPath": "/opt/conda/bin/pylint" }, // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"], - }, - }, + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] + } + } } diff --git a/.editorconfig b/.editorconfig index 9b990088..8c4ce4d0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -27,6 +27,6 @@ indent_size = unset [README.md] indent_style = unset -# ignore python -[*.{py}] +# ignore python and markdown +[*.{py,md}] indent_style = unset diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 8611458a..8a330045 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -64,4 +64,4 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./ NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results diff --git a/assets/svrank_model.ini b/assets/svrank_model.ini deleted file mode 100644 index 510aadf1..00000000 --- a/assets/svrank_model.ini +++ /dev/null @@ -1,443 +0,0 @@ -[Version] - version = 1.8 - name = svrank_model - -[Categories] - [[allele_frequency]] - category_aggregation = min - - [[clinical_significance]] - category_aggregation = sum - - [[consequence]] - category_aggregation = max - - [[gene_intolerance_prediction]] - category_aggregation = sum - - [[inheritance_models]] - category_aggregation = min - - [[variant_call_quality_filter]] - category_aggregate = sum - - [[variant_length]] - category_aggregation = min - - [[variant_type]] - category_aggregation = min - -[gnomad_sv] - category = allele_frequency - data_type = float - description = Gnomad sv genomes frequency - field = INFO - info_key = gnomad_svAF - record_rule = max - separators = ',', - - [[not_reported]] - score = 6 - - [[common]] - score = -12 - lower = 0.02 - upper = 1.1 - - [[intermediate]] - score = 1 - lower = 0.005 - upper = 0.02 - - [[rare]] - score = 2 - lower = 0.0005 - upper = 0.005 - - [[very_rare]] - score = 4 - lower = 0 - upper = 0.0005 - -[swegen] - category = allele_frequency - data_type = float - description = Swegen genomes frequency - field = INFO - info_key = swegenAF - record_rule = max - separators = ',', - - [[not_reported]] - score = 6 - - [[common]] - score = -12 - lower = 0.02 - upper = 1.1 - - [[intermediate]] - score = 1 - lower = 0.005 - upper = 0.02 - - [[rare]] - score = 2 - lower = 0.0005 - upper = 0.005 - - [[very_rare]] - score = 4 - lower = 0 - upper = 0.0005 - -[sv_len] - category = variant_length - data_type = integer - description = The length of the structural variant - field = INFO - info_key = SVLEN - record_rule = min - separators = ',', - - [[not_reported]] - score = 0 - - [[long_pos]] - score = 3 - lower = 1000001 - upper = 100000000 - - [[long_neg]] - score = 3 - lower = -100000000 - upper = -1000001 - - [[medium_pos]] - score = 3 - lower = 50001 - upper = 1000000 - - [[medium_neg]] - score = 3 - lower = -1000000 - upper = -50001 - -[gene_intolerance_score] - category = gene_intolerance_prediction - data_type = float - description = Gnomad gene intolerance prediction - field = INFO - info_key = most_severe_pli - record_rule = max - separators = None - - [[not_reported]] - score = 0 - - [[low_intolerance]] - score = 0 - lower = 0 - upper = 0.90 - - [[medium_intolerance]] - score = 2 - lower = 0.90 - upper = 0.99 - - [[high_intolerance]] - score = 4 - lower = 0.99 - upper = 1.1 - -[genetic_models] - data_type = string - description = The inheritance models followed for the variant - category = inheritance_models - field = INFO - info_key = GeneticModels - record_rule = max - separators = ',', ':', '|', - - [[ad]] - priority = 1 - score = 3 - string = 'AD' - - [[ad_dn]] - priority = 1 - score = 3 - string = 'AD_dn' - - [[ar]] - priority = 1 - score = 3 - string = 'AR_hom' - - [[ar_dn]] - priority = 1 - score = 3 - string = 'AR_hom_dn' - - [[ar_comp]] - priority = 1 - score = 3 - string = 'AR_comp' - - [[ar_comp_dn]] - priority = 1 - score = 3 - string = 'AR_comp_dn' - - [[xr]] - priority = 1 - score = 3 - string = 'XR' - - [[xr_dn]] - priority = 1 - score = 3 - string = 'XR_dn' - - [[xd]] - priority = 1 - score = 3 - string = 'XD' - - [[xd_dn]] - priority = 1 - score = 3 - string = 'XD_dn' - - [[not_reported]] - score = 0 - -[model_score] - category = variant_call_quality_filter - data_type = integer - description = The inheritance model score - field = INFO - info_key = ModelScore - record_rule = min - separators = ',',':', - - [[not_reported]] - score = 0 - - [[low_qual]] - score = -5 - lower = 0 - upper = 20 - - [[high_qual]] - score = 0 - lower = 20 - upper = 300 - -[most_severe_consequence] - category = consequence - data_type = string - description = The most severe consequence for this variant - field = INFO - info_key = most_severe_consequence - record_rule = max - separators = ',', ':', '|', - - [[transcript_ablation]] - score = 10 - priority = 6 - string = 'transcript_ablation' - - [[initiator_codon_variant]] - score = 9 - priority = 5 - string = 'initiator_codon_variant' - - [[frameshift_variant]] - score = 8 - priority = 5 - string = 'frameshift_variant' - - [[stop_gained]] - score = 8 - priority = 5 - string = 'stop_gained' - - [[start_lost]] - score = 8 - priority = 5 - string = 'start_lost' - - [[stop_lost]] - score = 8 - priority = 5 - string = 'stop_lost' - - [[splice_acceptor_variant]] - score = 8 - priority = 5 - string = 'splice_acceptor_variant' - - [[splice_donor_variant]] - score = 8 - priority = 5 - string = 'splice_donor_variant' - - [[coding_sequence_variant]] - score = 7 - priority = 4 - string = 'coding_sequence_variant' - - [[inframe_deletion]] - score = 5 - priority = 4 - string = 'inframe_deletion' - - [[transcript_amplification]] - score = 5 - priority = 4 - string = 'transcript_amplification' - - [[splice_region_variant]] - score = 5 - priority = 4 - string = 'splice_region_variant' - - [[missense_variant]] - score = 5 - priority = 4 - string = 'missense_variant' - - [[protein_altering_variant]] - score = 5 - priority = 4 - string = 'protein_altering_variant' - - [[inframe_insertion]] - score = 5 - priority = 4 - string = 'inframe_insertion' - - [[incomplete_terminal_codon_variant]] - score = 5 - priority = 4 - string = 'incomplete_terminal_codon_variant' - - [[non_coding_transcript_exon_variant]] - score = 3 - priority = 2 - string = 'non_coding_transcript_exon_variant' - - [[synonymous_variant]] - score = 2 - priority = 2 - string = 'synonymous_variant' - - [[mature_mirna_variant]] - score = 1 - priority = 2 - string = 'mature_mirna_variant' - - [[non_coding_transcript_variant]] - score = 1 - priority = 2 - string = 'non_coding_transcript_variant' - - [[regulatory_region_variant]] - score = 1 - priority = 2 - string = 'regulatory_region_variant' - - [[upstream_gene_variant]] - score = 1 - priority = 2 - string = 'upstream_gene_variant' - - [[regulatory_region_amplification]] - score = 1 - priority = 2 - string = 'regulatory_region_amplification' - - [[tfbs_amplification]] - score = 1 - priority = 2 - string = 'tfbs_amplification' - - [[5_prime_utr_variant]] - score = 1 - priority = 2 - string = '5_prime_utr_variant' - - [[intron_variant]] - score = 1 - priority = 2 - string = 'intron_variant' - - [[3_prime_utr_variant]] - score = 1 - priority = 2 - string = '3_prime_utr_variant' - - [[feature_truncation]] - score = 1 - priority = 2 - string = 'feature_truncation' - - [[TF_binding_site_variant]] - score = 1 - priority = 2 - string = 'TF_binding_site_variant' - - [[stop_retained_variant]] - score = 1 - priority = 2 - string = 'stop_retained_variant' - - [[feature_elongation]] - score = 1 - priority = 2 - string = 'feature_elongation' - - [[regulatory_region_ablation]] - score = 1 - priority = 2 - string = 'regulatory_region_ablation' - - [[tfbs_ablation]] - score = 1 - priority = 2 - string = 'tfbs_ablation' - - [[downstream_gene_variant]] - score = 1 - priority = 2 - string = 'downstream_gene_variant' - - [[NMD_transcript_variant]] - score = 1 - priority = 2 - string = 'NMD_transcript_variant' - - [[intergenic_variant]] - score = 0 - priority = 0 - string = 'intergenic_variant' - - [[not_reported]] - score = 0 - -[filter] - category = variant_call_quality_filter - data_type = string - description = The filters for the variant - field = FILTER - record_rule = min - separators = ';', - - [[not_reported]] - score = 0 - - [[pass]] - score = 3 - priority = 1 - string = 'PASS' diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 1fd76cb9..9d86072c 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -62,7 +62,7 @@ workflow CALL_REPEAT_EXPANSIONS { STRANGER ( SVDB_MERGE_REPEATS.out.vcf, ch_variant_catalog ) COMPRESS_STRANGER ( STRANGER.out.vcf.map{ meta, vcf -> [meta, vcf, [] ]}, - [], [], [] + [], [], [] ) INDEX_STRANGER ( COMPRESS_STRANGER.out.vcf ) @@ -78,7 +78,7 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(COMPRESS_STRANGER.out.versions.first()) ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) - emit: +emit: vcf = ch_vcf_idx // channel: [ val(meta), path(vcf), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_sv_MT.nf b/subworkflows/local/variant_calling/call_sv_MT.nf index 7d6f4ede..7ce39b42 100644 --- a/subworkflows/local/variant_calling/call_sv_MT.nf +++ b/subworkflows/local/variant_calling/call_sv_MT.nf @@ -22,7 +22,7 @@ workflow CALL_SV_MT { ch_eklipse_genes = EKLIPSE.out.genes ch_eklipse_circos = EKLIPSE.out.circos ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) - } + } MT_DELETION(ch_bam_bai, ch_fasta) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 09d38c54..f01871ce 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -221,40 +221,40 @@ workflow RAREDISEASE { // 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).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_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() + : Channel.value([]) + ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).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_foundin_header = Channel.fromPath("$projectDir/assets/foundin.hdr", checkIfExists: true).collect() - ch_gcnvcaller_model = params.gcnvcaller_model ? Channel.fromPath(params.gcnvcaller_model).splitCsv ( header:true ) + 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() - : ch_references.genome_bwamem2_index + : 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() + : 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_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") - : Channel.empty() - ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) - : Channel.empty() - ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.value([[:],[]]) + 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_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") + : Channel.empty() + ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) + : Channel.empty() + ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals ch_mtshift_backchain = ch_references.mtshift_backchain ch_mtshift_bwaindex = ch_references.mtshift_bwa_index @@ -263,45 +263,45 @@ 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() - : 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_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() - : Channel.value([]) - ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).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_sdf = params.sdf ? Channel.fromPath(params.sdf).map{it -> [[id:it[0].simpleName],it]}.collect() - : ch_references.sdf - ch_sv_dbs = params.svdb_query_dbs ? Channel.fromPath(params.svdb_query_dbs) - : Channel.empty() - ch_sv_bedpedbs = params.svdb_query_bedpedbs ? Channel.fromPath(params.svdb_query_bedpedbs) - : Channel.empty() + ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).map{ it -> [[id:it[0].simpleName], it] }.collect() + : 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_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() + : Channel.value([]) + ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).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_sdf = params.sdf ? Channel.fromPath(params.sdf).map{it -> [[id:it[0].simpleName],it]}.collect() + : ch_references.sdf + ch_sv_dbs = params.svdb_query_dbs ? Channel.fromPath(params.svdb_query_dbs) + : Channel.empty() + ch_sv_bedpedbs = params.svdb_query_bedpedbs ? Channel.fromPath(params.svdb_query_bedpedbs) + : Channel.empty() 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_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_v2.txt", checkIfExists: true).collect() - ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() - : Channel.value([]) - ch_vcf2cytosure_blacklist = params.vcf2cytosure_blacklist ? Channel.fromPath(params.vcf2cytosure_blacklist).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_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() + : Channel.value([]) + ch_vcf2cytosure_blacklist = params.vcf2cytosure_blacklist ? Channel.fromPath(params.vcf2cytosure_blacklist).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 = ( 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_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files).collect() - : Channel.value([]) - ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters).collect() - : Channel.value([]) + : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) + ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files).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) // SV caller priority From bbc94c0bdb39b4982abd2e9eca2746f107d09831 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Jan 2024 18:10:29 +0100 Subject: [PATCH 1580/1921] update expansionhunter --- conf/modules/call_repeat_expansions.config | 17 +++++++++ modules.json | 2 +- modules/nf-core/expansionhunter/main.nf | 8 ++-- modules/nf-core/expansionhunter/meta.yml | 10 ++++- .../expansionhunter/tests/main.nf.test | 37 +++++++++++++++++++ .../expansionhunter/tests/main.nf.test.snap | 15 ++++++++ .../nf-core/expansionhunter/tests/tags.yml | 2 + subworkflows/local/call_repeat_expansions.nf | 8 ++++ 8 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 modules/nf-core/expansionhunter/tests/main.nf.test create mode 100644 modules/nf-core/expansionhunter/tests/main.nf.test.snap create mode 100644 modules/nf-core/expansionhunter/tests/tags.yml diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 13a7e519..e31911a7 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -28,6 +28,23 @@ process { ext.prefix = { "${meta.id}_exphunter" } } + withName: '.*CALL_REPEAT_EXPANSIONS:SAMTOOLS_SORT' { + ext.prefix = { "${meta.id}_exphunter_sorted" } + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*CALL_REPEAT_EXPANSIONS:SAMTOOLS_INDEX' { + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { ext.prefix = { "${meta.id}_reheader" } } diff --git a/modules.json b/modules.json index e33ea340..3ea648f7 100644 --- a/modules.json +++ b/modules.json @@ -122,7 +122,7 @@ }, "expansionhunter": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "3c4b0007393248aa7419a9ec3d14f391cd702f48", "installed_by": ["modules"] }, "fastp": { diff --git a/modules/nf-core/expansionhunter/main.nf b/modules/nf-core/expansionhunter/main.nf index 008b13ad..bea5916a 100644 --- a/modules/nf-core/expansionhunter/main.nf +++ b/modules/nf-core/expansionhunter/main.nf @@ -14,9 +14,10 @@ process EXPANSIONHUNTER { tuple val(meta4), path(variant_catalog) output: - tuple val(meta), path("*.vcf.gz") , emit: vcf - tuple val(meta), path("*.json.gz") , emit: json - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.json.gz") , emit: json + tuple val(meta), path("*_realigned.bam") , emit: bam + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -49,6 +50,7 @@ process EXPANSIONHUNTER { """ touch ${prefix}.vcf.gz touch ${prefix}.json.gz + touch ${prefix}_realigned.bam cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml index b970ced4..698529dc 100644 --- a/modules/nf-core/expansionhunter/meta.yml +++ b/modules/nf-core/expansionhunter/meta.yml @@ -24,6 +24,10 @@ input: type: file description: BAM/CRAM file pattern: "*.{bam,cram}" + - bai: + type: file + description: Index of BAM/CRAM file + pattern: "*.{bai,crai}" - meta2: type: map description: | @@ -38,7 +42,7 @@ input: description: | Groovy Map containing reference information e.g. [ id:'test' ] - - fasta: + - fasta_fai: type: file description: Reference genome index pattern: "*.fai" @@ -61,6 +65,10 @@ output: type: file description: File containing software versions pattern: "versions.yml" + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" - vcf: type: file description: VCF with repeat expansions diff --git a/modules/nf-core/expansionhunter/tests/main.nf.test b/modules/nf-core/expansionhunter/tests/main.nf.test new file mode 100644 index 00000000..6204460a --- /dev/null +++ b/modules/nf-core/expansionhunter/tests/main.nf.test @@ -0,0 +1,37 @@ +nextflow_process { + + name "Test Process EXPANSIONHUNTER" + script "modules/nf-core/expansionhunter/main.nf" + process "EXPANSIONHUNTER" + tag "modules" + tag "modules_nfcore" + tag "expansionhunter" + + test("expansionhunter") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + ] + input[1] = [[id:'fasta'],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] + input[2] = [[id:'fasta_fai'],file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)] + input[3] = [[id:'catalogue'],file(params.test_data['homo_sapiens']['genome']['repeat_expansions'], checkIfExists: true)] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.size() == 8}, + {assert path(process.out.json.get(0).get(1)).linesGzip.size() == 27}, + {assert snapshot(process.out.bam).match()} + ) + } + + } + +} diff --git a/modules/nf-core/expansionhunter/tests/main.nf.test.snap b/modules/nf-core/expansionhunter/tests/main.nf.test.snap new file mode 100644 index 00000000..a98fb599 --- /dev/null +++ b/modules/nf-core/expansionhunter/tests/main.nf.test.snap @@ -0,0 +1,15 @@ +{ + "expansionhunter": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_realigned.bam:md5,b37a72c0b97b45e63636a9758f3144d7" + ] + ] + ], + "timestamp": "2024-01-26T17:35:10.45442497" + } +} \ No newline at end of file diff --git a/modules/nf-core/expansionhunter/tests/tags.yml b/modules/nf-core/expansionhunter/tests/tags.yml new file mode 100644 index 00000000..03266351 --- /dev/null +++ b/modules/nf-core/expansionhunter/tests/tags.yml @@ -0,0 +1,2 @@ +expansionhunter: + - "modules/nf-core/expansionhunter/**" diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 1fd76cb9..fda99625 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -8,6 +8,8 @@ include { BCFTOOLS_VIEW as COMPRESS_STRANGER } from '../../modules/nf- include { EXPANSIONHUNTER } from '../../modules/nf-core/expansionhunter/main' include { PICARD_RENAMESAMPLEINVCF as RENAMESAMPLE_EXP } from '../../modules/nf-core/picard/renamesampleinvcf/main' include { STRANGER } from '../../modules/nf-core/stranger/main' +include { SAMTOOLS_SORT } from '../../modules/nf-core/samtools/sort/main' +include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/main' include { SVDB_MERGE as SVDB_MERGE_REPEATS } from '../../modules/nf-core/svdb/merge/main' include { TABIX_BGZIPTABIX as BGZIPTABIX_EXP } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as INDEX_STRANGER } from '../../modules/nf-core/tabix/tabix/main' @@ -31,6 +33,10 @@ workflow CALL_REPEAT_EXPANSIONS { ch_variant_catalog ) + // Sort and index realigned bam + SAMTOOLS_SORT(EXPANSIONHUNTER.out.bam) + SAMTOOLS_INDEX(SAMTOOLS_SORT.out.bam) + // Fix header and rename sample BCFTOOLS_REHEADER_EXP ( EXPANSIONHUNTER.out.vcf.map{ meta, vcf -> [ meta, vcf, [], [] ]}, @@ -77,6 +83,8 @@ workflow CALL_REPEAT_EXPANSIONS { ch_versions = ch_versions.mix(STRANGER.out.versions.first()) ch_versions = ch_versions.mix(COMPRESS_STRANGER.out.versions.first()) ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) emit: vcf = ch_vcf_idx // channel: [ val(meta), path(vcf), path(tbi) ] From ea5d37284995e25dbf19f691635e5c6099b46ecf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 09:56:08 +0100 Subject: [PATCH 1581/1921] cnvnator patch --- modules.json | 3 +- .../cnvnator/cnvnator/cnvnator-cnvnator.diff | 49 +++++++++++++++++++ modules/nf-core/cnvnator/cnvnator/main.nf | 13 +++-- .../local/variant_calling/call_sv_cnvnator.nf | 10 ++-- 4 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff diff --git a/modules.json b/modules.json index e33ea340..f7eae8be 100644 --- a/modules.json +++ b/modules.json @@ -88,7 +88,8 @@ "cnvnator/cnvnator": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff" }, "cnvnator/convert2vcf": { "branch": "master", diff --git a/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff b/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff new file mode 100644 index 00000000..8186aa08 --- /dev/null +++ b/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff @@ -0,0 +1,49 @@ +Changes in module 'nf-core/cnvnator/cnvnator' +--- modules/nf-core/cnvnator/cnvnator/main.nf ++++ modules/nf-core/cnvnator/cnvnator/main.nf +@@ -1,6 +1,7 @@ + process CNVNATOR_CNVNATOR { + tag "$meta.id" + label 'process_single' ++ stageInMode 'copy' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +@@ -12,11 +13,12 @@ + tuple val(meta2), path(root) + tuple val(meta3), path(fasta) + tuple val(meta4), path(fai) ++ val step + + output: +- tuple val(output_meta), path("${prefix}.root"), emit: root +- tuple val(output_meta), path("${prefix}.tab") , emit: tab, optional: true +- path "versions.yml" , emit: versions ++ tuple val(output_meta), path("${output_meta.id}_${step}.root"), emit: root ++ tuple val(output_meta), path("*.tab") , emit: tab, optional: true ++ path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when +@@ -32,7 +34,11 @@ + reference = '' + } + calls_cmd = args.contains("-call") ? "> ${prefix}.tab" : '' ++ mv_cmd = "mv ${prefix}.root ${prefix}_${step}.root" ++ steps = ["his", "stat", "partition", "call"] ++ cp_cmd = steps.contains(step) ? "cp ${root} ${prefix}.root" :"" + """ ++ $cp_cmd + cnvnator \\ + -root ${prefix}.root \\ + $args \\ +@@ -40,6 +46,7 @@ + $input_cmd \\ + $calls_cmd + ++ $mv_cmd + cat <<-END_VERSIONS > versions.yml + "${task.process}": + CNVnator: \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) + +************************************************************ diff --git a/modules/nf-core/cnvnator/cnvnator/main.nf b/modules/nf-core/cnvnator/cnvnator/main.nf index 07393639..9f08c6b2 100644 --- a/modules/nf-core/cnvnator/cnvnator/main.nf +++ b/modules/nf-core/cnvnator/cnvnator/main.nf @@ -1,6 +1,7 @@ process CNVNATOR_CNVNATOR { tag "$meta.id" label 'process_single' + stageInMode 'copy' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -12,11 +13,12 @@ process CNVNATOR_CNVNATOR { tuple val(meta2), path(root) tuple val(meta3), path(fasta) tuple val(meta4), path(fai) + val step output: - tuple val(output_meta), path("${prefix}.root"), emit: root - tuple val(output_meta), path("${prefix}.tab") , emit: tab, optional: true - path "versions.yml" , emit: versions + tuple val(output_meta), path("${output_meta.id}_${step}.root"), emit: root + tuple val(output_meta), path("*.tab") , emit: tab, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -32,7 +34,11 @@ process CNVNATOR_CNVNATOR { reference = '' } calls_cmd = args.contains("-call") ? "> ${prefix}.tab" : '' + mv_cmd = "mv ${prefix}.root ${prefix}_${step}.root" + steps = ["his", "stat", "partition", "call"] + cp_cmd = steps.contains(step) ? "cp ${root} ${prefix}.root" :"" """ + $cp_cmd cnvnator \\ -root ${prefix}.root \\ $args \\ @@ -40,6 +46,7 @@ process CNVNATOR_CNVNATOR { $input_cmd \\ $calls_cmd + $mv_cmd cat <<-END_VERSIONS > versions.yml "${task.process}": CNVnator: \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) diff --git a/subworkflows/local/variant_calling/call_sv_cnvnator.nf b/subworkflows/local/variant_calling/call_sv_cnvnator.nf index 0d5c5423..995b6919 100644 --- a/subworkflows/local/variant_calling/call_sv_cnvnator.nf +++ b/subworkflows/local/variant_calling/call_sv_cnvnator.nf @@ -22,11 +22,11 @@ workflow CALL_SV_CNVNATOR { main: ch_versions = Channel.empty() - CNVNATOR_RD ( ch_bam_bai, [[:],[]], [[:],[]], [[:],[]] ) - CNVNATOR_HIST ( [[:],[],[]], CNVNATOR_RD.out.root, ch_fasta, ch_fai ) - CNVNATOR_STAT ( [[:],[],[]], CNVNATOR_HIST.out.root, [[:],[]], [[:],[]] ) - CNVNATOR_PARTITION ( [[:],[],[]], CNVNATOR_STAT.out.root, [[:],[]], [[:],[]] ) - CNVNATOR_CALL ( [[:],[],[]], CNVNATOR_PARTITION.out.root, [[:],[]], [[:],[]] ) + CNVNATOR_RD ( ch_bam_bai, [[:],[]], [[:],[]], [[:],[]], "rd" ) + CNVNATOR_HIST ( [[:],[],[]], CNVNATOR_RD.out.root, ch_fasta, ch_fai, "his" ) + CNVNATOR_STAT ( [[:],[],[]], CNVNATOR_HIST.out.root, [[:],[]], [[:],[]], "stat" ) + CNVNATOR_PARTITION ( [[:],[],[]], CNVNATOR_STAT.out.root, [[:],[]], [[:],[]], "partition" ) + CNVNATOR_CALL ( [[:],[],[]], CNVNATOR_PARTITION.out.root, [[:],[]], [[:],[]], "call" ) CNVNATOR_CONVERT2VCF (CNVNATOR_CALL.out.tab).vcf .collect{it[1]} .toList() From ed71e16e69fa77d9a29ec560cc0d3532f64be2d4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 10:03:39 +0100 Subject: [PATCH 1582/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a7922da..c0a0bcdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The split into clincial and research VCFs is now done before ranking the varaints [#485](https://github.com/nf-core/raredisease/pull/485) - Installed the nf-core version of ensemblvep/vep module [#482](https://github.com/nf-core/raredisease/pull/482) - The filenames of the ranked output VCF files have been changed. See [output.md](docs/output.md#filtering-and-ranking) for more information[#485](https://github.com/nf-core/raredisease/pull/485) +- Patched cnvnator module so that the processes didn't have to rerun after a failed run [#503](https://github.com/nf-core/raredisease/pull/503). ### `Fixed` From 6140c3c677fac3034f2ff7a508aab371077cea97 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 10:11:17 +0100 Subject: [PATCH 1583/1921] remove stageinmode --- modules/nf-core/cnvnator/cnvnator/main.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/nf-core/cnvnator/cnvnator/main.nf b/modules/nf-core/cnvnator/cnvnator/main.nf index 9f08c6b2..7c9361ef 100644 --- a/modules/nf-core/cnvnator/cnvnator/main.nf +++ b/modules/nf-core/cnvnator/cnvnator/main.nf @@ -1,7 +1,6 @@ process CNVNATOR_CNVNATOR { tag "$meta.id" label 'process_single' - stageInMode 'copy' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? From 2869cc58913e58aa3936f95ff2e3e969b183f271 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 10:21:00 +0100 Subject: [PATCH 1584/1921] update stub --- .../cnvnator/cnvnator/cnvnator-cnvnator.diff | 23 ++++++++++--------- modules/nf-core/cnvnator/cnvnator/main.nf | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff b/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff index 8186aa08..f06d7f6c 100644 --- a/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff +++ b/modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff @@ -1,15 +1,7 @@ Changes in module 'nf-core/cnvnator/cnvnator' --- modules/nf-core/cnvnator/cnvnator/main.nf +++ modules/nf-core/cnvnator/cnvnator/main.nf -@@ -1,6 +1,7 @@ - process CNVNATOR_CNVNATOR { - tag "$meta.id" - label 'process_single' -+ stageInMode 'copy' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -@@ -12,11 +13,12 @@ +@@ -12,11 +12,12 @@ tuple val(meta2), path(root) tuple val(meta3), path(fasta) tuple val(meta4), path(fai) @@ -25,7 +17,7 @@ Changes in module 'nf-core/cnvnator/cnvnator' when: task.ext.when == null || task.ext.when -@@ -32,7 +34,11 @@ +@@ -32,7 +33,11 @@ reference = '' } calls_cmd = args.contains("-call") ? "> ${prefix}.tab" : '' @@ -37,7 +29,7 @@ Changes in module 'nf-core/cnvnator/cnvnator' cnvnator \\ -root ${prefix}.root \\ $args \\ -@@ -40,6 +46,7 @@ +@@ -40,6 +45,7 @@ $input_cmd \\ $calls_cmd @@ -45,5 +37,14 @@ Changes in module 'nf-core/cnvnator/cnvnator' cat <<-END_VERSIONS > versions.yml "${task.process}": CNVnator: \$(echo \$(cnvnator 2>&1 | sed -n '3p' | sed 's/CNVnator v//')) +@@ -52,7 +58,7 @@ + output_meta = bam ? meta : meta2 + def calls_cmd = args.contains("-call") ? "touch ${prefix}.tab" : '' + """ +- touch ${prefix}.root ++ touch ${prefix}_${step}.root + $calls_cmd + + cat <<-END_VERSIONS > versions.yml ************************************************************ diff --git a/modules/nf-core/cnvnator/cnvnator/main.nf b/modules/nf-core/cnvnator/cnvnator/main.nf index 7c9361ef..66427cd1 100644 --- a/modules/nf-core/cnvnator/cnvnator/main.nf +++ b/modules/nf-core/cnvnator/cnvnator/main.nf @@ -58,7 +58,7 @@ process CNVNATOR_CNVNATOR { output_meta = bam ? meta : meta2 def calls_cmd = args.contains("-call") ? "touch ${prefix}.tab" : '' """ - touch ${prefix}.root + touch ${prefix}_${step}.root $calls_cmd cat <<-END_VERSIONS > versions.yml From 772c610c1a469eac59d6f3d19a59ad6e27b5e3bf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:25:25 +0100 Subject: [PATCH 1585/1921] update cadd config --- conf/modules/annotate_cadd.config | 36 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index 438beeb5..4ac5b618 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -16,28 +16,26 @@ // process { - if (!params.cadd_resources != "null") { - withName: '.*:ANNOTATE_CADD.*' { - ext.when = { ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } - } + withName: '.*:ANNOTATE_CADD.*' { + ext.when = { ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } + } - withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { - ext.args = { "--output-type z --types indels" } - ext.prefix = { "${vcf.simpleName}_indels" } - } + withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { + ext.args = { "--output-type z --types indels" } + ext.prefix = { "${vcf.simpleName}_indels" } + } - withName: '.*:ANNOTATE_CADD:CADD' { - ext.args = { "-g ${params.genome}" } - ext.prefix = { "${vcf.simpleName}_cadd" } - } + withName: '.*:ANNOTATE_CADD:CADD' { + ext.args = { "-g ${params.genome}" } + ext.prefix = { "${vcf.simpleName}_cadd" } + } - withName: '.*:ANNOTATE_CADD:TABIX_CADD' { - ext.args = { "--force --sequence 1 --begin 2 --end 2" } - } + withName: '.*:ANNOTATE_CADD:TABIX_CADD' { + ext.args = { "--force --sequence 1 --begin 2 --end 2" } + } - withName: '.*:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { - ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } - ext.prefix = { "${input.simpleName}_ann" } - } + withName: '.*:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { + ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } + ext.prefix = { "${input.simpleName}_ann" } } } From 217780b1c8e60cab7ed4457d58ed8742ec91309e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 15:40:04 +0100 Subject: [PATCH 1586/1921] fix case_channel construction --- workflows/raredisease.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3cc83d3b..8b7e6a20 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -762,13 +762,13 @@ def create_case_channel(List rows) { if (item.phenotype == 2) { probands.add(item.sample) } - if ( (item.paternal!=0) && (item.paternal!="") && (item.maternal!=0) && (item.maternal!="") ) { + if ( (item.paternal!="0") && (item.paternal!="") && (item.maternal!="0") && (item.maternal!="") ) { upd_children.add(item.sample) } - if ( (item.paternal!=0) && (item.paternal!="") ) { + if ( (item.paternal!="0") && (item.paternal!="") ) { father = item.paternal } - if ( (item.maternal!=0) && (item.maternal!="") ) { + if ( (item.maternal!="0") && (item.maternal!="") ) { mother = item.maternal } } From 8f8f41ddfc106a3aa226584993ef1dd87bb2381c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:30:15 +0100 Subject: [PATCH 1587/1921] review suggestion --- conf/modules/call_repeat_expansions.config | 2 +- docs/output.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 23d3e2f8..39934a4b 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -83,7 +83,7 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:COMPRESS_STRANGER' { - ext.prefix = { "${meta.id}_repeat_expansion" } + ext.prefix = { "${meta.id}_repeat_expansion_stranger" } ext.args = '--output-type z' publishDir = [ path: { "${params.outdir}/repeat_expansions" }, diff --git a/docs/output.md b/docs/output.md index 080c73ac..43ca906d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -301,6 +301,10 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. - `repeat_expansions/` - `_repeat_expansion.vcf.gz`: file containing variant calls. - `_repeat_expansion.vcf.gz.tbi`: index of the file containing variant calls. + - `_exphunter_sorted.bam`: A BAMlet containing alignments of reads that overlap or located in close proximity to each variant identified by ExpansionHunter + - `_exphunter_sorted.bam.bai`: Index of the BAMlet file + - `_repeat_expansion_stranger.vcf.gz`: Output from ExpansionHunter annotated with the pathologic implications of the repeat sizes by Stranger. + - `_repeat_expansion_stranger.vcf.gz`: Index of the Stranger VCF file.
From a6093f41aca79c2d25777807dfb9bf9126b090f1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:47:56 +0100 Subject: [PATCH 1588/1921] update docs --- docs/output.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index 43ca906d..6cc3ecf9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -303,8 +303,6 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. - `_repeat_expansion.vcf.gz.tbi`: index of the file containing variant calls. - `_exphunter_sorted.bam`: A BAMlet containing alignments of reads that overlap or located in close proximity to each variant identified by ExpansionHunter - `_exphunter_sorted.bam.bai`: Index of the BAMlet file - - `_repeat_expansion_stranger.vcf.gz`: Output from ExpansionHunter annotated with the pathologic implications of the repeat sizes by Stranger. - - `_repeat_expansion_stranger.vcf.gz`: Index of the Stranger VCF file. @@ -316,8 +314,8 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. Output files - `repeat_expansions/` - - `_repeat_expansion.vcf.gz`: file containing variant calls. - - `_repeat_expansion.vcf.gz.tbi`: index of the file containing variant calls. + - `_repeat_expansion_stranger.vcf.gz`: file containing variant calls. + - `_repeat_expansion_stranger.vcf.gz.tbi`: index of the file containing variant calls. From a51428a081a2d41439f5ed2f2293a246e9fc0b5d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 21:45:56 +0100 Subject: [PATCH 1589/1921] chromograph viz --- conf/modules/qc_bam.config | 5 +++++ subworkflows/local/qc_bam.nf | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 61daf4d6..93b0f2db 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -50,6 +50,11 @@ process { ext.args = '-clip' } + withName: '.*QC_BAM:CHROMOGRAPH_COV' { + ext.args = '--euploid --step 500' + ext.prefix = { "${meta2.id}_chromographcov" } + } + withName: '.*QC_BAM:MOSDEPTH' { ext.args = '--d4' ext.prefix = { "${meta.id}_mosdepth" } diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index d4ae2842..9bb5a2a4 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -4,13 +4,14 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/picard/collectmultiplemetrics/main' include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/picard/collecthsmetrics/main' +include { CHROMOGRAPH as CHROMOGRAPH_COV } from '../../modules/nf-core/chromograph/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/qualimap/bamqc/main' include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' -include { SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' include { NGSBITS_SAMPLEGENDER } from '../../modules/nf-core/ngsbits/samplegender/main' @@ -51,6 +52,8 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, ch_chrom_sizes) + CHROMOGRAPH_COV([[:],[]], TIDDIT_COV.out.wig, [[:],[]], [[:],[]], [[:],[]], [[:],[]], [[:],[]]) + ch_bam_bai.map{ meta, bam, bai -> [meta, bam, bai, []]}.set{ch_mosdepth_in} MOSDEPTH (ch_mosdepth_in, ch_genome_fasta) From 88b1035797d470be6e944926c25af0b661ff40b1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:23:46 +0100 Subject: [PATCH 1590/1921] local module --- conf/modules/call_snv_deepvariant.config | 2 +- conf/modules/call_snv_sentieon.config | 2 +- conf/modules/postprocess_MT_calls.config | 2 +- lib/WorkflowRaredisease.groovy | 15 ------ modules/local/add_varcallername_to_bed.nf | 47 +++++++++++++++++++ .../variant_calling/call_snv_deepvariant.nf | 8 ++-- .../variant_calling/call_snv_sentieon.nf | 8 ++-- .../variant_calling/postprocess_MT_calls.nf | 8 ++-- 8 files changed, 62 insertions(+), 30 deletions(-) create mode 100644 modules/local/add_varcallername_to_bed.nf diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index fdd7ece6..02c2b384 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -39,7 +39,7 @@ process { ext.prefix = { "${meta.id}_split_rmdup" } } - withName: '.*CALL_SNV_DEEPVARIANT:ZIP_TABIX_VARCALLERBED' { + withName: '.*CALL_SNV_DEEPVARIANT:ADD_VARCALLER_TO_BED' { ext.args2 = '-s 1 -b 2 -e 3' } diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 2337ef4f..83cedb9f 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -49,7 +49,7 @@ process { ext.prefix = { "${meta.id}_split_rmdup" } } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:ZIP_TABIX_VARCALLERBED' { + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:ADD_VARCALLER_TO_BED' { ext.args2 = '-s 1 -b 2 -e 3' } diff --git a/conf/modules/postprocess_MT_calls.config b/conf/modules/postprocess_MT_calls.config index ba6e8abf..1b4c8357 100644 --- a/conf/modules/postprocess_MT_calls.config +++ b/conf/modules/postprocess_MT_calls.config @@ -40,7 +40,7 @@ process { ext.prefix = { "${meta.id}_split_rmdup_merged" } } - withName: '.*POSTPROCESS_MT_CALLS:ZIP_TABIX_VARCALLERBED' { + withName: '.*POSTPROCESS_MT_CALLS:ADD_VARCALLER_TO_BED' { ext.args2 = '-s 1 -b 2 -e 3' } diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index 578dc6d6..f45fcc7c 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -35,21 +35,6 @@ class WorkflowRaredisease { return outfile } - // - // Create a bed file which includes the name of variant caller from chromsizes file - // - public static String makeBedWithVariantCallerInfo(chromsizes, varcaller) { - def parent_dir = chromsizes.parent.toString() - def outfile = new File(parent_dir + '/' + varcaller +'.bed') - def writer = outfile.newWriter() - chromsizes.eachLine { line -> - def split_str = line.tokenize("\t") - writer << [split_str[0],"0",split_str[1],varcaller].join("\t") + "\n" - } - writer.close() - return outfile - } - // // Get workflow summary for MultiQC // diff --git a/modules/local/add_varcallername_to_bed.nf b/modules/local/add_varcallername_to_bed.nf new file mode 100644 index 00000000..b9d57d5d --- /dev/null +++ b/modules/local/add_varcallername_to_bed.nf @@ -0,0 +1,47 @@ +process ADD_VARCALLER_TO_BED { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : + 'biocontainers/tabix:1.11--hdfd78af_0' }" + + input: + tuple val(meta), path(chromsizes) + + output: + tuple val(meta), path("*.gz"), path("*.tbi"), optional: true, emit: gz_tbi + 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 variant_caller = "${meta.id}" + """ + awk '{print \$1"\t0\t"\$2"\t$variant_caller\"}' $chromsizes > ${variant_caller}.bed + bgzip --threads ${task.cpus} -c $args ${variant_caller}.bed > ${prefix}.bed.gz + tabix $args2 ${prefix}.bed.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bed.gz + touch ${prefix}.bed.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index b20e19ae..4fc6ab4d 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -7,9 +7,9 @@ include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../../modules/nf include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../../modules/nf-core/bcftools/norm/main' include { DEEPVARIANT } from '../../../modules/nf-core/deepvariant/main' include { GLNEXUS } from '../../../modules/nf-core/glnexus/main' -include { TABIX_BGZIPTABIX as ZIP_TABIX_VARCALLERBED } from '../../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' +include { ADD_VARCALLER_TO_BED } from '../../../modules/local/add_varcallername_to_bed' workflow CALL_SNV_DEEPVARIANT { take: @@ -54,11 +54,11 @@ workflow CALL_SNV_DEEPVARIANT { TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) ch_genome_chrsizes.flatten().map{chromsizes -> - return [[id:'deepvariant'], WorkflowRaredisease.makeBedWithVariantCallerInfo(chromsizes, "deepvariant")] + return [[id:'deepvariant'], chromsizes] } .set { ch_varcallerinfo } - ZIP_TABIX_VARCALLERBED (ch_varcallerinfo).gz_tbi + ADD_VARCALLER_TO_BED (ch_varcallerinfo).gz_tbi .map{meta,bed,tbi -> return [bed, tbi]} .set{ch_varcallerbed} @@ -77,7 +77,7 @@ workflow CALL_SNV_DEEPVARIANT { ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_GL.out.versions) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_GL.out.versions) ch_versions = ch_versions.mix(TABIX_GL.out.versions) - ch_versions = ch_versions.mix(ZIP_TABIX_VARCALLERBED.out.versions) + ch_versions = ch_versions.mix(ADD_VARCALLER_TO_BED.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 53db6095..d0586c82 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -13,7 +13,7 @@ include { BCFTOOLS_FILTER as BCF_FILTER_ONE } from '../../../modules/nf include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-core/bcftools/filter/main' include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' -include { TABIX_BGZIPTABIX as ZIP_TABIX_VARCALLERBED } from '../../../modules/nf-core/tabix/bgziptabix/main' +include { ADD_VARCALLER_TO_BED } from '../../../modules/local/add_varcallername_to_bed' workflow CALL_SNV_SENTIEON { take: @@ -91,11 +91,11 @@ workflow CALL_SNV_SENTIEON { TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) ch_genome_chrsizes.flatten().map{chromsizes -> - return [[id:'sentieon_dnascope'], WorkflowRaredisease.makeBedWithVariantCallerInfo(chromsizes, "sentieon_dnascope")] + return [[id:'sentieon_dnascope'], chromsizes] } .set { ch_varcallerinfo } - ZIP_TABIX_VARCALLERBED (ch_varcallerinfo).gz_tbi + ADD_VARCALLER_TO_BED (ch_varcallerinfo).gz_tbi .map{meta,bed,tbi -> return [bed, tbi]} .set{ch_varcallerbed} @@ -116,7 +116,7 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(REMOVE_DUPLICATES_SEN.out.versions.first()) ch_versions = ch_versions.mix(TABIX_SEN.out.versions.first()) ch_versions = ch_versions.mix(BCF_FILTER_ONE.out.versions.first()) - ch_versions = ch_versions.mix(ZIP_TABIX_VARCALLERBED.out.versions) + ch_versions = ch_versions.mix(ADD_VARCALLER_TO_BED.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index 81279a9c..4cd79882 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -12,7 +12,7 @@ include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../.. include { TABIX_TABIX as TABIX_TABIX_MERGE } from '../../../modules/nf-core/tabix/tabix/main' include { PICARD_LIFTOVERVCF } from '../../../modules/nf-core/picard/liftovervcf/main' include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' -include { TABIX_BGZIPTABIX as ZIP_TABIX_VARCALLERBED } from '../../../modules/nf-core/tabix/bgziptabix/main' +include { ADD_VARCALLER_TO_BED } from '../../../modules/local/add_varcallername_to_bed' include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' workflow POSTPROCESS_MT_CALLS { @@ -103,11 +103,11 @@ workflow POSTPROCESS_MT_CALLS { TABIX_TABIX_MERGE(ch_addfoundintag_in) ch_genome_chrsizes.flatten().map{chromsizes -> - return [[id:'mutect2'], WorkflowRaredisease.makeBedWithVariantCallerInfo(chromsizes, "mutect2")] + return [[id:'mutect2'], chromsizes] } .set { ch_varcallerinfo } - ZIP_TABIX_VARCALLERBED (ch_varcallerinfo).gz_tbi + ADD_VARCALLER_TO_BED (ch_varcallerinfo).gz_tbi .map{meta,bed,tbi -> return [bed, tbi]} .set{ch_varcallerbed} @@ -127,7 +127,7 @@ workflow POSTPROCESS_MT_CALLS { 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(ZIP_TABIX_VARCALLERBED.out.versions) + ch_versions = ch_versions.mix(ADD_VARCALLER_TO_BED.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions) ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) From 1a3db637b6a99202ed2d6e36cdd4bd9f15ab55d6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:27:59 +0100 Subject: [PATCH 1591/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0a0bcdf..56899343 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of ensemblvep/vep module [#482](https://github.com/nf-core/raredisease/pull/482) - The filenames of the ranked output VCF files have been changed. See [output.md](docs/output.md#filtering-and-ranking) for more information[#485](https://github.com/nf-core/raredisease/pull/485) - Patched cnvnator module so that the processes didn't have to rerun after a failed run [#503](https://github.com/nf-core/raredisease/pull/503). +- Added a local module to generate bed files with variant caller names [#503](https://github.com/nf-core/raredisease/pull/505). ### `Fixed` From 06c211fe3383c6d729f647d07acd772f349db04d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:16:21 +0100 Subject: [PATCH 1592/1921] Update CHANGELOG.md Co-authored-by: Anders Jemt --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56899343..55ea2691 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,7 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Installed the nf-core version of ensemblvep/vep module [#482](https://github.com/nf-core/raredisease/pull/482) - The filenames of the ranked output VCF files have been changed. See [output.md](docs/output.md#filtering-and-ranking) for more information[#485](https://github.com/nf-core/raredisease/pull/485) - Patched cnvnator module so that the processes didn't have to rerun after a failed run [#503](https://github.com/nf-core/raredisease/pull/503). -- Added a local module to generate bed files with variant caller names [#503](https://github.com/nf-core/raredisease/pull/505). +- Added a local module to generate bed files with variant caller names [#505](https://github.com/nf-core/raredisease/pull/505). ### `Fixed` From 9f72dc4d36518c7c4035780e6ab58e358d58a5a9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:16:35 +0100 Subject: [PATCH 1593/1921] Update modules/local/add_varcallername_to_bed.nf Co-authored-by: Anders Jemt --- modules/local/add_varcallername_to_bed.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/add_varcallername_to_bed.nf b/modules/local/add_varcallername_to_bed.nf index b9d57d5d..11190c2a 100644 --- a/modules/local/add_varcallername_to_bed.nf +++ b/modules/local/add_varcallername_to_bed.nf @@ -11,7 +11,7 @@ process ADD_VARCALLER_TO_BED { tuple val(meta), path(chromsizes) output: - tuple val(meta), path("*.gz"), path("*.tbi"), optional: true, emit: gz_tbi + tuple val(meta), path("*.gz"), path("*.tbi"), emit: gz_tbi path "versions.yml" , emit: versions when: From bed0a9af2bc7ecfecd67501acec4402a0cc5a46f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:35:59 +0100 Subject: [PATCH 1594/1921] update modules --- modules.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules.json b/modules.json index ff937852..ad60caa0 100644 --- a/modules.json +++ b/modules.json @@ -133,7 +133,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "c9488585ce7bd35ccd2a30faa2371454c8112fb9", + "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { @@ -240,22 +240,22 @@ }, "genmod/annotate": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", "installed_by": ["modules"] }, "glnexus": { @@ -330,7 +330,7 @@ }, "picard/markduplicates": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "ec833ac4c29db6005d18baccf3306f557c46b006", "installed_by": ["modules"] }, "picard/renamesampleinvcf": { @@ -345,7 +345,7 @@ }, "qualimap/bamqc": { "branch": "master", - "git_sha": "260677adfe5eecf5f64d3db726f6854d4497b49b", + "git_sha": "6b0e4fe14ca1b12e131f64608f0bbaf36fd11451", "installed_by": ["modules"] }, "rhocall/annotate": { @@ -385,7 +385,7 @@ }, "samtools/stats": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "ec833ac4c29db6005d18baccf3306f557c46b006", "installed_by": ["modules"] }, "samtools/view": { From faf45a3c56fc80513469b8478a707605091a5ea3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:36:14 +0100 Subject: [PATCH 1595/1921] update modules --- modules/nf-core/fastqc/tests/main.nf.test | 14 +-- .../nf-core/fastqc/tests/main.nf.test.snap | 76 ++++++++++++++++- .../nf-core/genmod/annotate/environment.yml | 2 +- modules/nf-core/genmod/annotate/main.nf | 4 +- modules/nf-core/genmod/annotate/meta.yml | 5 +- .../genmod/annotate/tests/main.nf.test | 34 ++++++++ .../genmod/annotate/tests/nextflow.config | 5 ++ .../nf-core/genmod/annotate/tests/tags.yml | 2 + .../nf-core/genmod/compound/environment.yml | 2 +- modules/nf-core/genmod/compound/main.nf | 4 +- modules/nf-core/genmod/compound/meta.yml | 3 +- .../genmod/compound/tests/main.nf.test | 33 +++++++ .../nf-core/genmod/compound/tests/tags.yml | 2 + modules/nf-core/genmod/models/environment.yml | 3 +- modules/nf-core/genmod/models/main.nf | 4 +- modules/nf-core/genmod/models/meta.yml | 3 +- .../nf-core/genmod/models/tests/main.nf.test | 35 ++++++++ modules/nf-core/genmod/models/tests/tags.yml | 2 + modules/nf-core/genmod/score/environment.yml | 2 +- modules/nf-core/genmod/score/main.nf | 4 +- modules/nf-core/genmod/score/meta.yml | 3 +- .../nf-core/genmod/score/tests/main.nf.test | 35 ++++++++ modules/nf-core/genmod/score/tests/tags.yml | 2 + .../picard/markduplicates/tests/main.nf.test | 85 +++++++++---------- .../markduplicates/tests/main.nf.test.snap | 66 ++++++++++---- .../nf-core/qualimap/bamqc/tests/main.nf.test | 18 ++-- .../qualimap/bamqc/tests/main.nf.test.snap | 13 ++- .../nf-core/samtools/stats/environment.yml | 1 + 28 files changed, 356 insertions(+), 106 deletions(-) create mode 100644 modules/nf-core/genmod/annotate/tests/main.nf.test create mode 100644 modules/nf-core/genmod/annotate/tests/nextflow.config create mode 100644 modules/nf-core/genmod/annotate/tests/tags.yml create mode 100644 modules/nf-core/genmod/compound/tests/main.nf.test create mode 100644 modules/nf-core/genmod/compound/tests/tags.yml create mode 100644 modules/nf-core/genmod/models/tests/main.nf.test create mode 100644 modules/nf-core/genmod/models/tests/tags.yml create mode 100644 modules/nf-core/genmod/score/tests/main.nf.test create mode 100644 modules/nf-core/genmod/score/tests/tags.yml diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 1f21c664..70edae4d 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -33,7 +33,7 @@ nextflow_process { { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("
") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("fastqc_versions_single") } ) } } @@ -63,7 +63,7 @@ nextflow_process { { assert path(process.out.html[0][1][0]).text.contains("") }, { assert path(process.out.html[0][1][1]).text.contains("") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("fastqc_versions_paired") } ) } } @@ -89,7 +89,7 @@ nextflow_process { { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } ) } } @@ -115,7 +115,7 @@ nextflow_process { { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("fastqc_versions_bam") } ) } } @@ -153,7 +153,7 @@ nextflow_process { { assert path(process.out.html[0][1][2]).text.contains("") }, { assert path(process.out.html[0][1][3]).text.contains("") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } ) } } @@ -179,7 +179,7 @@ nextflow_process { { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, { assert path(process.out.html[0][1]).text.contains("") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } ) } } @@ -204,7 +204,7 @@ nextflow_process { { assert process.success }, { assert snapshot(process.out.html.collect { file(it[1]).getName() } + process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match() } + process.out.versions ).match("fastqc_stub") } ) } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 5d624bb8..86f7c311 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,5 +1,17 @@ { - "sarscov2 single-end [fastq] - stub": { + "fastqc_versions_interleaved": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:40:07.293713" + }, + "fastqc_stub": { "content": [ [ "test.html", @@ -7,14 +19,70 @@ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], - "timestamp": "2024-01-17T18:40:57.254299" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:31:01.425198" + }, + "fastqc_versions_multiple": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:40:55.797907" + }, + "fastqc_versions_bam": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:40:26.795862" + }, + "fastqc_versions_single": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:39:27.043675" + }, + "fastqc_versions_paired": { + "content": [ + [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:39:47.584191" }, - "versions": { + "fastqc_versions_custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], - "timestamp": "2024-01-17T18:36:50.033627" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-31T17:41:14.576531" } } \ No newline at end of file diff --git a/modules/nf-core/genmod/annotate/environment.yml b/modules/nf-core/genmod/annotate/environment.yml index 6ca55014..ac8140fd 100644 --- a/modules/nf-core/genmod/annotate/environment.yml +++ b/modules/nf-core/genmod/annotate/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::genmod=3.7.4 + - bioconda::genmod=3.8.2 diff --git a/modules/nf-core/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf index 13b7aff8..eb161187 100644 --- a/modules/nf-core/genmod/annotate/main.nf +++ b/modules/nf-core/genmod/annotate/main.nf @@ -4,8 +4,8 @@ process GENMOD_ANNOTATE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': + 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/annotate/meta.yml b/modules/nf-core/genmod/annotate/meta.yml index 81aac686..3c876ac5 100644 --- a/modules/nf-core/genmod/annotate/meta.yml +++ b/modules/nf-core/genmod/annotate/meta.yml @@ -3,13 +3,14 @@ description: for annotating regions, frequencies, cadd scores keywords: - annotate - genmod + - ranking tools: - "genmod": description: "Annotate genetic inheritance models in variant files" homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" + licence: ["MIT"] input: - meta: type: map @@ -31,7 +32,7 @@ output: description: File containing software versions pattern: "versions.yml" - vcf: - type: vcf + type: file description: Annotated VCF file pattern: "*.{vcf}" authors: diff --git a/modules/nf-core/genmod/annotate/tests/main.nf.test b/modules/nf-core/genmod/annotate/tests/main.nf.test new file mode 100644 index 00000000..746de32b --- /dev/null +++ b/modules/nf-core/genmod/annotate/tests/main.nf.test @@ -0,0 +1,34 @@ +nextflow_process { + + name "Test Process GENMOD_ANNOTATE" + script "modules/nf-core/genmod/annotate/main.nf" + process "GENMOD_ANNOTATE" + config "./nextflow.config" + tag "modules" + tag "modules_nfcore" + tag "genmod" + tag "genmod/annotate" + + test("genmod_annotate") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['homo_sapiens']['illumina']['genmod_vcf_gz'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/genmod/annotate/tests/nextflow.config b/modules/nf-core/genmod/annotate/tests/nextflow.config new file mode 100644 index 00000000..a1860460 --- /dev/null +++ b/modules/nf-core/genmod/annotate/tests/nextflow.config @@ -0,0 +1,5 @@ +process{ + withName: GENMOD_ANNOTATE { + ext.args = " --annotate_regions " + } +} diff --git a/modules/nf-core/genmod/annotate/tests/tags.yml b/modules/nf-core/genmod/annotate/tests/tags.yml new file mode 100644 index 00000000..88bb35a1 --- /dev/null +++ b/modules/nf-core/genmod/annotate/tests/tags.yml @@ -0,0 +1,2 @@ +genmod/annotate: + - modules/nf-core/genmod/annotate/** diff --git a/modules/nf-core/genmod/compound/environment.yml b/modules/nf-core/genmod/compound/environment.yml index 565143f9..1e2561fd 100644 --- a/modules/nf-core/genmod/compound/environment.yml +++ b/modules/nf-core/genmod/compound/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::genmod=3.7.4 + - bioconda::genmod=3.8.2 diff --git a/modules/nf-core/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf index d58f5fc4..1731b722 100644 --- a/modules/nf-core/genmod/compound/main.nf +++ b/modules/nf-core/genmod/compound/main.nf @@ -4,8 +4,8 @@ process GENMOD_COMPOUND { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': + 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/compound/meta.yml b/modules/nf-core/genmod/compound/meta.yml index 378bedfc..aa5f7da5 100644 --- a/modules/nf-core/genmod/compound/meta.yml +++ b/modules/nf-core/genmod/compound/meta.yml @@ -3,13 +3,14 @@ description: Score compounds keywords: - compound - genmod + - ranking tools: - "genmod": description: "Annotate genetic inheritance models in variant files" homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/genmod/compound/tests/main.nf.test b/modules/nf-core/genmod/compound/tests/main.nf.test new file mode 100644 index 00000000..cf234186 --- /dev/null +++ b/modules/nf-core/genmod/compound/tests/main.nf.test @@ -0,0 +1,33 @@ +nextflow_process { + + name "Test Process GENMOD_COMPOUND" + script "modules/nf-core/genmod/compound/main.nf" + process "GENMOD_COMPOUND" + tag "modules" + tag "modules_nfcore" + tag "genmod" + tag "genmod/compound" + + test("genmod_compound") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['homo_sapiens']['genome']['genmod_compound_vcf_mt'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/genmod/compound/tests/tags.yml b/modules/nf-core/genmod/compound/tests/tags.yml new file mode 100644 index 00000000..870b35e8 --- /dev/null +++ b/modules/nf-core/genmod/compound/tests/tags.yml @@ -0,0 +1,2 @@ +genmod/compound: + - modules/nf-core/genmod/compound/** diff --git a/modules/nf-core/genmod/models/environment.yml b/modules/nf-core/genmod/models/environment.yml index ff0de822..62a746c7 100644 --- a/modules/nf-core/genmod/models/environment.yml +++ b/modules/nf-core/genmod/models/environment.yml @@ -4,5 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::genmod=3.7.4 - - conda-forge::python=3.4.5 + - bioconda::genmod=3.8.2 diff --git a/modules/nf-core/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf index 15dc077b..0504574a 100644 --- a/modules/nf-core/genmod/models/main.nf +++ b/modules/nf-core/genmod/models/main.nf @@ -4,8 +4,8 @@ process GENMOD_MODELS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': + 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/models/meta.yml b/modules/nf-core/genmod/models/meta.yml index ea3295ac..dd9001e0 100644 --- a/modules/nf-core/genmod/models/meta.yml +++ b/modules/nf-core/genmod/models/meta.yml @@ -3,13 +3,14 @@ description: annotate models of inheritance keywords: - models - genmod + - ranking tools: - "genmod": description: "Annotate genetic inheritance models in variant files" homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/genmod/models/tests/main.nf.test b/modules/nf-core/genmod/models/tests/main.nf.test new file mode 100644 index 00000000..a69bb136 --- /dev/null +++ b/modules/nf-core/genmod/models/tests/main.nf.test @@ -0,0 +1,35 @@ +nextflow_process { + + name "Test Process GENMOD_MODELS" + script "modules/nf-core/genmod/models/main.nf" + process "GENMOD_MODELS" + tag "modules" + tag "modules_nfcore" + tag "genmod" + tag "genmod/models" + + test("genmod_models") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['genmod_annotate_vcf_gz'], checkIfExists: true) + ] + input[1] = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true) + input[2] = [] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/genmod/models/tests/tags.yml b/modules/nf-core/genmod/models/tests/tags.yml new file mode 100644 index 00000000..72b3b6bb --- /dev/null +++ b/modules/nf-core/genmod/models/tests/tags.yml @@ -0,0 +1,2 @@ +genmod/models: + - modules/nf-core/genmod/models/** diff --git a/modules/nf-core/genmod/score/environment.yml b/modules/nf-core/genmod/score/environment.yml index a09ee359..bacc4cec 100644 --- a/modules/nf-core/genmod/score/environment.yml +++ b/modules/nf-core/genmod/score/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::genmod=3.7.4 + - bioconda::genmod=3.8.2 diff --git a/modules/nf-core/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf index 362ca074..15be5f74 100644 --- a/modules/nf-core/genmod/score/main.nf +++ b/modules/nf-core/genmod/score/main.nf @@ -4,8 +4,8 @@ process GENMOD_SCORE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': + 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/score/meta.yml b/modules/nf-core/genmod/score/meta.yml index 49dddcb1..8998b00c 100644 --- a/modules/nf-core/genmod/score/meta.yml +++ b/modules/nf-core/genmod/score/meta.yml @@ -2,6 +2,7 @@ name: "genmod_score" description: Score the variants of a vcf based on their annotation keywords: - score + - ranking - genmod tools: - "genmod": @@ -9,7 +10,7 @@ tools: homepage: "https://github.com/Clinical-Genomics/genmod" documentation: "https://github.com/Clinical-Genomics/genmod" tool_dev_url: "https://github.com/moonso" - licence: "['MIT']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/genmod/score/tests/main.nf.test b/modules/nf-core/genmod/score/tests/main.nf.test new file mode 100644 index 00000000..d9296fb4 --- /dev/null +++ b/modules/nf-core/genmod/score/tests/main.nf.test @@ -0,0 +1,35 @@ +nextflow_process { + + name "Test Process GENMOD_SCORE" + script "modules/nf-core/genmod/score/main.nf" + process "GENMOD_SCORE" + tag "modules" + tag "modules_nfcore" + tag "genmod" + tag "genmod/score" + + test("genmod_score") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['illumina']['genmod_models_vcf_gz'], checkIfExists: true) + ] + input[1] = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true) + input[2] = file(params.test_data['homo_sapiens']['illumina']['rank_model'], checkIfExists: true) + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/genmod/score/tests/tags.yml b/modules/nf-core/genmod/score/tests/tags.yml new file mode 100644 index 00000000..cef831ed --- /dev/null +++ b/modules/nf-core/genmod/score/tests/tags.yml @@ -0,0 +1,2 @@ +genmod/score: + - modules/nf-core/genmod/score/** diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test index b2bba094..c5a29b4b 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -9,23 +9,23 @@ nextflow_process { tag "picard" tag "picard/markduplicates" - test("sarscov2 - bam, fasta, fai - sorted bam") { + test("sarscov2 [unsorted bam]") { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] - input[1] = [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'genome' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] - input[2] = [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ [ id:'genome' ], - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -33,32 +33,30 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - path(process.out.metrics.get(0).get(1)).readLines()[0..2], - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("unsorted_bam_name") }, + { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("unsorted_bam_metrics") }, + { assert snapshot(process.out.versions).match("unsorted_bam_versions") } ) } } - test("sarscov2 - bam, fasta, fai - unsorted bam") { + test("sarscov2 [sorted bam]") { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) - ] - input[1] = [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'genome' ], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) - ] - input[2] = [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ [ id:'genome' ], - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -66,32 +64,30 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - path(process.out.metrics.get(0).get(1)).readLines()[0..2], - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("sorted_bam_name") }, + { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("sorted_bam_metrics") }, + { assert snapshot(process.out.versions).match("sorted_bam_versions") } ) } } - test("homo_sapiens - cram, fasta, fai") { + test("homo_sapiens [cram]") { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) - ] - input[1] = [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] - input[2] = [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) - ] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -99,13 +95,10 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - path(process.out.metrics.get(0).get(1)).readLines()[0..2], - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_name") }, + { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("cram_metrics") }, + { assert snapshot(process.out.versions).match("cram_versions") } ) } } - } diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap index cd788a4d..31c9130d 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -1,44 +1,74 @@ { - "sarscov2 - bam, fasta, fai - unsorted bam": { + "sorted_bam_versions": { "content": [ - "test.marked.bam", - [ - "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", - "## htsjdk.samtools.metrics.StringHeader" - ], [ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" ] ], - "timestamp": "2023-11-28T10:50:37.735339781" + "timestamp": "2024-01-19T10:26:45.092349" }, - "homo_sapiens - cram, fasta, fai": { + "unsorted_bam_name": { + "content": [ + "test.marked.bam" + ], + "timestamp": "2024-01-19T10:26:28.100755" + }, + "cram_metrics": { "content": [ - "test.marked.bam", [ "## htsjdk.samtools.metrics.StringHeader", "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" - ], - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" ] ], - "timestamp": "2023-11-28T10:50:48.897954543" + "timestamp": "2024-01-19T10:27:03.253071" }, - "sarscov2 - bam, fasta, fai - sorted bam": { + "sorted_bam_metrics": { "content": [ - "test.marked.bam", [ "## htsjdk.samtools.metrics.StringHeader", "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" - ], + ] + ], + "timestamp": "2024-01-19T10:26:45.086503" + }, + "cram_name": { + "content": [ + "test.marked.bam" + ], + "timestamp": "2024-01-19T10:27:03.241617" + }, + "cram_versions": { + "content": [ [ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" ] ], - "timestamp": "2023-11-28T10:50:26.591387512" + "timestamp": "2024-01-19T10:27:03.26989" + }, + "unsorted_bam_versions": { + "content": [ + [ + "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + ] + ], + "timestamp": "2024-01-19T10:26:28.159071" + }, + "unsorted_bam_metrics": { + "content": [ + [ + "## htsjdk.samtools.metrics.StringHeader", + "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader" + ] + ], + "timestamp": "2024-01-19T10:26:28.143979" + }, + "sorted_bam_name": { + "content": [ + "test.marked.bam" + ], + "timestamp": "2024-01-19T10:26:45.080116" } } \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test b/modules/nf-core/qualimap/bamqc/tests/main.nf.test index 5447fe68..ba2260ca 100644 --- a/modules/nf-core/qualimap/bamqc/tests/main.nf.test +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test @@ -8,7 +8,7 @@ nextflow_process { tag "qualimap" tag "qualimap/bamqc" - test("homo_sapiens [BAM]") { + test("homo_sapiens [bam]") { when { params { @@ -16,11 +16,13 @@ nextflow_process { } process { """ - input[0] = [ + gff = [] + + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] - input[1] = [] + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + input[1] = gff """ } } @@ -29,10 +31,8 @@ nextflow_process { assertAll ( { assert process.success }, { assert path("${process.out.results[0][1]}/qualimapReport.html").exists() }, - { assert snapshot( - path("${process.out.results[0][1]}/genome_results.txt"), - process.out.versions) - .match() } + { assert snapshot(path("${process.out.results[0][1]}/genome_results.txt")).match("genome_results") }, + { assert snapshot(process.out.versions).match("versions") } ) } } diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap index 782f7d23..25148df2 100644 --- a/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap @@ -1,11 +1,16 @@ { - "homo_sapiens [BAM]": { + "genome_results": { + "content": [ + "genome_results.txt:md5,45103d63ba82df2b905eb04819c32dd3" + ], + "timestamp": "2024-01-19T12:05:00.122103" + }, + "versions": { "content": [ - "genome_results.txt:md5,45103d63ba82df2b905eb04819c32dd3", [ "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" ] ], - "timestamp": "2024-01-11T14:36:07.836508" + "timestamp": "2024-01-19T12:05:00.131485" } -} \ No newline at end of file +} diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index b89ce647..b45ba90c 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -5,3 +5,4 @@ channels: - defaults dependencies: - bioconda::samtools=1.18 + - bioconda::htslib=1.18 From ff858d717b98f1a9beee96b7b3abba716a2e9427 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 17:06:20 +0100 Subject: [PATCH 1596/1921] update chromograph --- modules.json | 2 +- modules/nf-core/chromograph/main.nf | 4 +- modules/nf-core/chromograph/meta.yml | 2 +- .../nf-core/chromograph/tests/main.nf.test | 38 +++++++++++++++++++ modules/nf-core/chromograph/tests/tags.yml | 2 + 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/chromograph/tests/main.nf.test create mode 100644 modules/nf-core/chromograph/tests/tags.yml diff --git a/modules.json b/modules.json index ff937852..522fd84f 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ }, "chromograph": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "f05512229a501df5d67273bb7358c5f69667f40d", "installed_by": ["modules"] }, "cnvnator/cnvnator": { diff --git a/modules/nf-core/chromograph/main.nf b/modules/nf-core/chromograph/main.nf index dd67e1ba..e1374e48 100644 --- a/modules/nf-core/chromograph/main.nf +++ b/modules/nf-core/chromograph/main.nf @@ -4,8 +4,8 @@ process CHROMOGRAPH { conda "${moduleDir}/environment.yml" 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' }" + 'https://depot.galaxyproject.org/singularity/chromograph:1.3.1--pyhdfd78af_2': + 'biocontainers/chromograph:1.3.1--pyhdfd78af_2' }" input: tuple val(meta), path(autozyg) diff --git a/modules/nf-core/chromograph/meta.yml b/modules/nf-core/chromograph/meta.yml index 0fd7250f..6540d9f0 100644 --- a/modules/nf-core/chromograph/meta.yml +++ b/modules/nf-core/chromograph/meta.yml @@ -12,7 +12,7 @@ tools: 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']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/chromograph/tests/main.nf.test b/modules/nf-core/chromograph/tests/main.nf.test new file mode 100644 index 00000000..caba8829 --- /dev/null +++ b/modules/nf-core/chromograph/tests/main.nf.test @@ -0,0 +1,38 @@ +nextflow_process { + + name "Test Process CHROMOGRAPH" + script "modules/nf-core/chromograph/main.nf" + process "CHROMOGRAPH" + tag "modules" + tag "modules_nfcore" + tag "chromograph" + + test("test_chromograph_sites") { + + when { + process { + """ + input[0] = [[:],[]] + input[1] = [[:],[]] + input[2] = [[:],[]] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = [[:],[]] + input[6] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['genome']['updsites_bed'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert process.out.plots.get(0).get(1) ==~ ".*/test"} + ) + } + + } + +} diff --git a/modules/nf-core/chromograph/tests/tags.yml b/modules/nf-core/chromograph/tests/tags.yml new file mode 100644 index 00000000..e60ad9db --- /dev/null +++ b/modules/nf-core/chromograph/tests/tags.yml @@ -0,0 +1,2 @@ +chromograph: + - "modules/nf-core/chromograph/**" From f814060f4f21761d58909d99a59fa6b20908efca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 02:55:26 +0100 Subject: [PATCH 1597/1921] add subsample --- conf/modules/subsample_mt.config | 21 ++++++++++- modules/local/calculate_seed_fraction.nf | 45 ++++++++++++++++++++++++ subworkflows/local/subsample_mt.nf | 26 +++++++++++--- workflows/raredisease.nf | 3 +- 4 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 modules/local/calculate_seed_fraction.nf diff --git a/conf/modules/subsample_mt.config b/conf/modules/subsample_mt.config index 079affe9..7ce80bed 100644 --- a/conf/modules/subsample_mt.config +++ b/conf/modules/subsample_mt.config @@ -16,8 +16,27 @@ // process { - withName: '.*BEDTOOLS_GENOMECOV' { + withName: '.*SUBSAMPLE_MT:BEDTOOLS_GENOMECOV' { ext.args = { "-dz" } ext.prefix = { "${meta.id}" } } + + withName: '.*SUBSAMPLE_MT:SAMTOOLS_VIEW' { + ext.args = { "--output-fmt BAM -h -F 4 -s ${meta.seedfrac}" } + ext.prefix = { "${meta.id}_mt_subsample" } + publishDir = [ + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*SUBSAMPLE_MT:SAMTOOLS_INDEX' { + publishDir = [ + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + } diff --git a/modules/local/calculate_seed_fraction.nf b/modules/local/calculate_seed_fraction.nf new file mode 100644 index 00000000..6d776e14 --- /dev/null +++ b/modules/local/calculate_seed_fraction.nf @@ -0,0 +1,45 @@ +process CALCULATE_SEED_FRACTION { + tag "$meta.id" + label 'process_low' + + conda "conda-forge::python=3.8.3" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.8.3' : + 'biocontainers/python:3.8.3' }" + + input: + tuple val(meta), path(cov) + + output: + tuple val(meta), path("seedfrac.csv"), emit: csv + 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}" + """ + export MT_COVERAGE=`awk '{cov += \$3}END{ if (NR > 0) print cov / NR }' $cov` + + python -c "import os;print('%0.6f' % (30+ 150/float(os.environ['MT_COVERAGE'])))" >seedfrac.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + calculate_seed_fraction: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ + + stub: + """ + touch seedfrac.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + calculate_seed_fraction: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ +} diff --git a/subworkflows/local/subsample_mt.nf b/subworkflows/local/subsample_mt.nf index 6ffe8c98..b8d3ff2f 100644 --- a/subworkflows/local/subsample_mt.nf +++ b/subworkflows/local/subsample_mt.nf @@ -2,20 +2,38 @@ // A subworkflow to subsample MT alignments // -include { BEDTOOLS_GENOMECOV } from '../../modules/nf-core/bedtools/genomecov/main' +include { BEDTOOLS_GENOMECOV } from '../../modules/nf-core/bedtools/genomecov/main' +include { CALCULATE_SEED_FRACTION } from '../../modules/local/calculate_seed_fraction' +include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' +include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/main' workflow SUBSAMPLE_MT { take: - ch_mt_marked_bam // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] + ch_mt_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] main: + ch_versions = Channel.empty() - ch_mt_marked_bam.map {meta, bam -> return [meta, bam, []]}.set {ch_genomecov_in} + ch_mt_bam_bai.map {meta, bam, bai -> return [meta, bam, -1]}.set {ch_genomecov_in} - BEDTOOLS_GENOMECOV (ch_genomecov_in, [], []) + BEDTOOLS_GENOMECOV (ch_genomecov_in, [], "genomecov") + + CALCULATE_SEED_FRACTION (BEDTOOLS_GENOMECOV.out.genomecov).csv + .join(ch_mt_bam_bai, failOnMismatch:true) + .map{meta, seedfrac, bam, bai -> + return [meta + [seedfrac: file(seedfrac).text.readLines()[0]], bam, bai] + } + .set { ch_subsample_in } + + SAMTOOLS_VIEW(ch_subsample_in, [[:],[]], []) + + SAMTOOLS_INDEX(SAMTOOLS_VIEW.out.bam) ch_versions = ch_versions.mix(BEDTOOLS_GENOMECOV.out.versions.first()) + ch_versions = ch_versions.mix(CALCULATE_SEED_FRACTION.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_VIEW.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) emit: versions = ch_versions // channel: [ path(versions.yml) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6884787d..eebb7886 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -363,8 +363,9 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - SUBSAMPLE_MT(ch_mapped.mt_marked_bam) + SUBSAMPLE_MT(ch_mapped.mt_bam_bai) + return // // BAM QUALITY CHECK // From c05325a0d2d3f35db254a5f178e966839be5b312 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 02:55:54 +0100 Subject: [PATCH 1598/1921] fix return --- workflows/raredisease.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eebb7886..ed9f62a5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -365,7 +365,6 @@ workflow RAREDISEASE { SUBSAMPLE_MT(ch_mapped.mt_bam_bai) - return // // BAM QUALITY CHECK // From 4aa778dd2d28a8e188bc47623369358745802343 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:56:02 +0100 Subject: [PATCH 1599/1921] add params --- docs/output.md | 13 ++++++++++++ modules/local/calculate_seed_fraction.nf | 4 +++- nextflow.config | 3 +++ nextflow_schema.json | 25 ++++++++++++++++++++++-- subworkflows/local/subsample_mt.nf | 11 +++++++++-- workflows/raredisease.nf | 9 ++++++++- 6 files changed, 59 insertions(+), 6 deletions(-) diff --git a/docs/output.md b/docs/output.md index 6cc3ecf9..90ac6f51 100644 --- a/docs/output.md +++ b/docs/output.md @@ -21,6 +21,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Duplicate marking](#duplicate-marking) - [Picard's MarkDuplicates](#picards-markduplicates) - [Sentieon Dedup](#sentieon-dedup) + - [Subsample mitochondrial alignments](#subsample-mitochondrial-alignments) - [Quality control and reporting](#quality-control-and-reporting) - [Quality control](#quality-control) - [FastQC](#fastqc) @@ -115,6 +116,18 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `*.metrics`: Text file containing the dedup metrics. +#### Subsample mitochondrial alignments + +[Samtools view](https://www.htslib.org/doc/samtools-view.html) is used by the pipeline to subsample mitochondrial alignments to a user specified coverage. + +
+Output files from Alignment + +- `{outputdir}/alignment/` + - `_mt_subsample.bam`: Alignment file in bam format. + - `_mt_subsample.bam.bai`: Index of the corresponding bam file. +
+ ### Quality control and reporting #### Quality control diff --git a/modules/local/calculate_seed_fraction.nf b/modules/local/calculate_seed_fraction.nf index 6d776e14..1c367b38 100644 --- a/modules/local/calculate_seed_fraction.nf +++ b/modules/local/calculate_seed_fraction.nf @@ -9,6 +9,8 @@ process CALCULATE_SEED_FRACTION { input: tuple val(meta), path(cov) + val rd + val seed output: tuple val(meta), path("seedfrac.csv"), emit: csv @@ -23,7 +25,7 @@ process CALCULATE_SEED_FRACTION { """ export MT_COVERAGE=`awk '{cov += \$3}END{ if (NR > 0) print cov / NR }' $cov` - python -c "import os;print('%0.6f' % (30+ 150/float(os.environ['MT_COVERAGE'])))" >seedfrac.csv + python -c "import os;print('%0.6f' % ($seed+ $rd/float(os.environ['MT_COVERAGE'])))" >seedfrac.csv cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/nextflow.config b/nextflow.config index a18da1fb..69dd2cae 100644 --- a/nextflow.config +++ b/nextflow.config @@ -35,6 +35,7 @@ params { skip_sv_annotation = false skip_me_annotation = false skip_mt_annotation = false + skip_mt_subsample = false skip_vcf2cytosure = true skip_vep_filter = false gens_switch = false @@ -53,6 +54,8 @@ params { // Alignment aligner = 'bwamem2' min_trimmed_length = 40 + mt_subsample_rd = 150 + mt_subsample_seed = 30 rmdup = false // Variant calling diff --git a/nextflow_schema.json b/nextflow_schema.json index 74b35fd8..79045f6d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -27,7 +27,8 @@ "type": "string", "format": "directory-path", "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.", - "fa_icon": "fas fa-folder-open" + "fa_icon": "fas fa-folder-open", + "default": "results" }, "email": { "type": "string", @@ -212,7 +213,8 @@ "type": "string", "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" + "fa_icon": "fas fa-align-center", + "default": "chrM" }, "mobile_element_references": { "type": "string", @@ -505,6 +507,11 @@ "description": "Specifies whether or not to skip annotation of mitochondrial variants.", "fa_icon": "fas fa-toggle-on" }, + "skip_mt_subsample": { + "type": "boolean", + "description": "Specifies whether or not to subsample mt alignment.", + "fa_icon": "fas fa-toggle-on" + }, "skip_snv_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotate SNV subworkflow.", @@ -549,6 +556,20 @@ "help_text": "Minimum length of reads after adapter trimming. Shorter reads are discarded. The program default is 15 bp. ", "fa_icon": "fas fa-less-than" }, + "mt_subsample_rd": { + "type": "integer", + "default": 150, + "description": "Expected coverage to subsample mt alignment to.", + "help_text": "To know more about this parameter check samtools' view documentation.", + "fa_icon": "fas fa-less-than" + }, + "mt_subsample_seed": { + "type": "integer", + "default": 30, + "description": "Subsampling seed used to influence which subset of mitochondrial reads is kept. ", + "help_text": "To know more about this parameter check samtools' view documentation.", + "fa_icon": "fas fa-less-than" + }, "rmdup": { "type": "boolean", "description": "Specifies whether duplicates reads should be removed prior to variant calling.", diff --git a/subworkflows/local/subsample_mt.nf b/subworkflows/local/subsample_mt.nf index b8d3ff2f..dd6b87b0 100644 --- a/subworkflows/local/subsample_mt.nf +++ b/subworkflows/local/subsample_mt.nf @@ -10,7 +10,9 @@ include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/m workflow SUBSAMPLE_MT { take: - ch_mt_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_mt_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + val_mt_subsample_rd // channel: [mandatory] [ val(read_dept) ] + val_mt_subsample_seed // channel: [mandatory] [ val(seed) ] main: ch_versions = Channel.empty() @@ -19,7 +21,12 @@ workflow SUBSAMPLE_MT { BEDTOOLS_GENOMECOV (ch_genomecov_in, [], "genomecov") - CALCULATE_SEED_FRACTION (BEDTOOLS_GENOMECOV.out.genomecov).csv + CALCULATE_SEED_FRACTION ( + BEDTOOLS_GENOMECOV.out.genomecov, + val_mt_subsample_rd, + val_mt_subsample_seed + ) + .csv .join(ch_mt_bam_bai, failOnMismatch:true) .map{meta, seedfrac, bam, bai -> return [meta + [seedfrac: file(seedfrac).text.readLines()[0]], bam, bai] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ed9f62a5..01a9bb88 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -363,7 +363,14 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - SUBSAMPLE_MT(ch_mapped.mt_bam_bai) + if (params.skip_mt_subsample) { + SUBSAMPLE_MT( + ch_mapped.mt_bam_bai, + params.mt_subsample_rd, + params.mt_subsample_seed + ) + ch_versions = ch_versions.mix(SUBSAMPLE_MT.out.versions) + } // // BAM QUALITY CHECK From 05be462f9a4e2172563e162c6f4d6ede1f208e71 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:00:44 +0100 Subject: [PATCH 1600/1921] update conditional --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 01a9bb88..650ca446 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -363,7 +363,7 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - if (params.skip_mt_subsample) { + if (!params.skip_mt_subsample) { SUBSAMPLE_MT( ch_mapped.mt_bam_bai, params.mt_subsample_rd, From a722bc194df30865053a1824d8f3b153feb76dd9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:04:59 +0100 Subject: [PATCH 1601/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ea2691..17fc2667 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471](https://github.com/nf-core/raredisease/pull/471) - A new parameter `vep_plugin_files` to supply files required by vep plugins [#482](https://github.com/nf-core/raredisease/pull/482) - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) +- Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). ### `Changed` From 1f4368dbe5eb7fdc9cb79a125e88d3c7cbc49dd1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:06:56 +0100 Subject: [PATCH 1602/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ea2691..1059ff5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add FOUND_IN tag, which mentions the variant caller that found the mutation, in the INFO column of the vcf files [#471](https://github.com/nf-core/raredisease/pull/471) - A new parameter `vep_plugin_files` to supply files required by vep plugins [#482](https://github.com/nf-core/raredisease/pull/482) - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) +- Chromograph to plot coverage across chromosomes [#507](https://github.com/nf-core/raredisease/pull/507) ### `Changed` From b1f0c847322155d57906a6cb80b900729926a068 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:16:50 +0100 Subject: [PATCH 1603/1921] update output docs --- docs/output.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/output.md b/docs/output.md index 6cc3ecf9..f287ce08 100644 --- a/docs/output.md +++ b/docs/output.md @@ -27,6 +27,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Mosdepth](#mosdepth) - [Picard tools](#picard-tools) - [Qualimap](#qualimap) + - [Chromograph coverage](#chromograph-coverage) - [Sention WgsMetricsAlgo](#sention-wgsmetricsalgo) - [TIDDIT's cov and UCSC WigToBigWig](#tiddits-cov-and-ucsc-wigtobigwig) - [Reporting](#reporting) @@ -183,6 +184,16 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `{outputdir}/qc_bam/_qualimap/` this directory includes a qualimap report and associated raw statistic files. You can open the .html file in your internet browser to see the in-depth report. +##### Chromograph coverage + +[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 + +- `{outputdir}/qc_bam/_chromographcov/*.png` plots showing coverage across chromosomes for each chromosome. +
+ ##### Sention WgsMetricsAlgo [Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) is the Sentieon's equivalent of Picard's CollectWgsMetrics. From 0273a3757728a55791198729f2b46ac8368d4183 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 31 Jan 2024 21:45:56 +0100 Subject: [PATCH 1604/1921] chromograph viz --- conf/modules/qc_bam.config | 5 +++++ subworkflows/local/qc_bam.nf | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 61daf4d6..93b0f2db 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -50,6 +50,11 @@ process { ext.args = '-clip' } + withName: '.*QC_BAM:CHROMOGRAPH_COV' { + ext.args = '--euploid --step 500' + ext.prefix = { "${meta2.id}_chromographcov" } + } + withName: '.*QC_BAM:MOSDEPTH' { ext.args = '--d4' ext.prefix = { "${meta.id}_mosdepth" } diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index d4ae2842..9bb5a2a4 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -4,13 +4,14 @@ include { PICARD_COLLECTMULTIPLEMETRICS } from '../../modules/nf-core/picard/collectmultiplemetrics/main' include { PICARD_COLLECTHSMETRICS } from '../../modules/nf-core/picard/collecthsmetrics/main' +include { CHROMOGRAPH as CHROMOGRAPH_COV } from '../../modules/nf-core/chromograph/main' include { QUALIMAP_BAMQC } from '../../modules/nf-core/qualimap/bamqc/main' include { TIDDIT_COV } from '../../modules/nf-core/tiddit/cov/main' include { MOSDEPTH } from '../../modules/nf-core/mosdepth/main' include { UCSC_WIGTOBIGWIG } from '../../modules/nf-core/ucsc/wigtobigwig/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS } from '../../modules/nf-core/picard/collectwgsmetrics/main' include { PICARD_COLLECTWGSMETRICS as PICARD_COLLECTWGSMETRICS_Y } from '../../modules/nf-core/picard/collectwgsmetrics/main' -include { SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' +include { SENTIEON_WGSMETRICS } from '../../modules/nf-core/sentieon/wgsmetrics/main' include { SENTIEON_WGSMETRICS as SENTIEON_WGSMETRICS_Y } from '../../modules/nf-core/sentieon/wgsmetrics/main' include { NGSBITS_SAMPLEGENDER } from '../../modules/nf-core/ngsbits/samplegender/main' @@ -51,6 +52,8 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, ch_chrom_sizes) + CHROMOGRAPH_COV([[:],[]], TIDDIT_COV.out.wig, [[:],[]], [[:],[]], [[:],[]], [[:],[]], [[:],[]]) + ch_bam_bai.map{ meta, bam, bai -> [meta, bam, bai, []]}.set{ch_mosdepth_in} MOSDEPTH (ch_mosdepth_in, ch_genome_fasta) From 8e39cb8e2c0fc27a5356b6760604ae3afea3a90d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Feb 2024 17:06:20 +0100 Subject: [PATCH 1605/1921] update chromograph --- modules.json | 2 +- modules/nf-core/chromograph/main.nf | 4 +- modules/nf-core/chromograph/meta.yml | 2 +- .../nf-core/chromograph/tests/main.nf.test | 38 +++++++++++++++++++ modules/nf-core/chromograph/tests/tags.yml | 2 + 5 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 modules/nf-core/chromograph/tests/main.nf.test create mode 100644 modules/nf-core/chromograph/tests/tags.yml diff --git a/modules.json b/modules.json index 2b008539..ffdf8a5f 100644 --- a/modules.json +++ b/modules.json @@ -87,7 +87,7 @@ }, "chromograph": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "f05512229a501df5d67273bb7358c5f69667f40d", "installed_by": ["modules"] }, "cnvnator/cnvnator": { diff --git a/modules/nf-core/chromograph/main.nf b/modules/nf-core/chromograph/main.nf index dd67e1ba..e1374e48 100644 --- a/modules/nf-core/chromograph/main.nf +++ b/modules/nf-core/chromograph/main.nf @@ -4,8 +4,8 @@ process CHROMOGRAPH { conda "${moduleDir}/environment.yml" 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' }" + 'https://depot.galaxyproject.org/singularity/chromograph:1.3.1--pyhdfd78af_2': + 'biocontainers/chromograph:1.3.1--pyhdfd78af_2' }" input: tuple val(meta), path(autozyg) diff --git a/modules/nf-core/chromograph/meta.yml b/modules/nf-core/chromograph/meta.yml index 0fd7250f..6540d9f0 100644 --- a/modules/nf-core/chromograph/meta.yml +++ b/modules/nf-core/chromograph/meta.yml @@ -12,7 +12,7 @@ tools: 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']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/chromograph/tests/main.nf.test b/modules/nf-core/chromograph/tests/main.nf.test new file mode 100644 index 00000000..caba8829 --- /dev/null +++ b/modules/nf-core/chromograph/tests/main.nf.test @@ -0,0 +1,38 @@ +nextflow_process { + + name "Test Process CHROMOGRAPH" + script "modules/nf-core/chromograph/main.nf" + process "CHROMOGRAPH" + tag "modules" + tag "modules_nfcore" + tag "chromograph" + + test("test_chromograph_sites") { + + when { + process { + """ + input[0] = [[:],[]] + input[1] = [[:],[]] + input[2] = [[:],[]] + input[3] = [[:],[]] + input[4] = [[:],[]] + input[5] = [[:],[]] + input[6] = [ + [ id:'test', single_end:false ], // meta map + file(params.test_data['homo_sapiens']['genome']['updsites_bed'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert process.out.plots.get(0).get(1) ==~ ".*/test"} + ) + } + + } + +} diff --git a/modules/nf-core/chromograph/tests/tags.yml b/modules/nf-core/chromograph/tests/tags.yml new file mode 100644 index 00000000..e60ad9db --- /dev/null +++ b/modules/nf-core/chromograph/tests/tags.yml @@ -0,0 +1,2 @@ +chromograph: + - "modules/nf-core/chromograph/**" From c18ee8ef42c37eaa1496c4ea06130102974c8b73 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:06:56 +0100 Subject: [PATCH 1606/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17fc2667..db07d7eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A new parameter `vep_plugin_files` to supply files required by vep plugins [#482](https://github.com/nf-core/raredisease/pull/482) - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) - Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). +- Chromograph to plot coverage across chromosomes [#507](https://github.com/nf-core/raredisease/pull/507) ### `Changed` From e50e30c52fc5ea7f250d6d960b19cf8ce2a69258 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:16:50 +0100 Subject: [PATCH 1607/1921] update output docs --- docs/output.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/output.md b/docs/output.md index 90ac6f51..7004fc1a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -28,6 +28,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Mosdepth](#mosdepth) - [Picard tools](#picard-tools) - [Qualimap](#qualimap) + - [Chromograph coverage](#chromograph-coverage) - [Sention WgsMetricsAlgo](#sention-wgsmetricsalgo) - [TIDDIT's cov and UCSC WigToBigWig](#tiddits-cov-and-ucsc-wigtobigwig) - [Reporting](#reporting) @@ -196,6 +197,16 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `{outputdir}/qc_bam/_qualimap/` this directory includes a qualimap report and associated raw statistic files. You can open the .html file in your internet browser to see the in-depth report. +##### Chromograph coverage + +[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 + +- `{outputdir}/qc_bam/_chromographcov/*.png` plots showing coverage across chromosomes for each chromosome. +
+ ##### Sention WgsMetricsAlgo [Sentieon's WgsMetricsAlgo](https://support.sentieon.com/manual/usages/general/) is the Sentieon's equivalent of Picard's CollectWgsMetrics. From a9c3d9cbe2d57972651f5bae2dfc7b8b47933e7c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:04:59 +0100 Subject: [PATCH 1608/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index db07d7eb..d5135e7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) - Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). - Chromograph to plot coverage across chromosomes [#507](https://github.com/nf-core/raredisease/pull/507) +- Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). ### `Changed` From fca0ac638b1f8c4aed3b84614ced7521965e14e2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 15:49:03 +0100 Subject: [PATCH 1609/1921] review suggestions --- docs/output.md | 2 +- subworkflows/local/subsample_mt.nf | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/output.md b/docs/output.md index 7004fc1a..e6e231e2 100644 --- a/docs/output.md +++ b/docs/output.md @@ -119,7 +119,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d #### Subsample mitochondrial alignments -[Samtools view](https://www.htslib.org/doc/samtools-view.html) is used by the pipeline to subsample mitochondrial alignments to a user specified coverage. +[Samtools view](https://www.htslib.org/doc/samtools-view.html) is used by the pipeline to subsample mitochondrial alignments to a user specified coverage. The file is mainly intended to be used for visualization of MT alignments in IGV. The non-subsampled bam file is used for variant calling and other downstream analysis steps.
Output files from Alignment diff --git a/subworkflows/local/subsample_mt.nf b/subworkflows/local/subsample_mt.nf index dd6b87b0..d8da5aae 100644 --- a/subworkflows/local/subsample_mt.nf +++ b/subworkflows/local/subsample_mt.nf @@ -25,13 +25,13 @@ workflow SUBSAMPLE_MT { BEDTOOLS_GENOMECOV.out.genomecov, val_mt_subsample_rd, val_mt_subsample_seed - ) - .csv - .join(ch_mt_bam_bai, failOnMismatch:true) - .map{meta, seedfrac, bam, bai -> - return [meta + [seedfrac: file(seedfrac).text.readLines()[0]], bam, bai] - } - .set { ch_subsample_in } + ) + .csv + .join(ch_mt_bam_bai, failOnMismatch:true) + .map{meta, seedfrac, bam, bai -> + return [meta + [seedfrac: file(seedfrac).text.readLines()[0]], bam, bai] + } + .set { ch_subsample_in } SAMTOOLS_VIEW(ch_subsample_in, [[:],[]], []) From cf6c313a9231c3c9695b443cf098d0ec6f5b9e52 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 15:57:52 +0100 Subject: [PATCH 1610/1921] fix lint error --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index e6e231e2..37f7d4f8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -119,7 +119,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d #### Subsample mitochondrial alignments -[Samtools view](https://www.htslib.org/doc/samtools-view.html) is used by the pipeline to subsample mitochondrial alignments to a user specified coverage. The file is mainly intended to be used for visualization of MT alignments in IGV. The non-subsampled bam file is used for variant calling and other downstream analysis steps. +[Samtools view](https://www.htslib.org/doc/samtools-view.html) is used by the pipeline to subsample mitochondrial alignments to a user specified coverage. The file is mainly intended to be used for visualization of MT alignments in IGV. The non-subsampled bam file is used for variant calling and other downstream analysis steps.
Output files from Alignment From 73729cfbb8a14b09e95cff2dddb8122011439938 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 21:03:23 +0100 Subject: [PATCH 1611/1921] add two params --- assets/variant_consequences_v2.txt | 41 ------------------ conf/test.config | 4 +- conf/test_one_sample.config | 4 +- main.nf | 2 + nextflow_schema.json | 69 +++++++++++++++++++++++++----- workflows/raredisease.nf | 21 +++++---- 6 files changed, 79 insertions(+), 62 deletions(-) delete mode 100644 assets/variant_consequences_v2.txt diff --git a/assets/variant_consequences_v2.txt b/assets/variant_consequences_v2.txt deleted file mode 100644 index effe32b1..00000000 --- a/assets/variant_consequences_v2.txt +++ /dev/null @@ -1,41 +0,0 @@ -transcript_ablation -splice_acceptor_variant -splice_donor_variant -stop_gained -frameshift_variant -stop_lost -start_lost -transcript_amplification -feature_elongation -feature_truncation -inframe_insertion -inframe_deletion -missense_variant -protein_altering_variant -splice_donor_5th_base_variant -splice_region_variant -splice_donor_region_variant -splice_polypyrimidine_tract_variant -incomplete_terminal_codon_variant -start_retained_variant -stop_retained_variant -synonymous_variant -coding_sequence_variant -mature_miRNA_variant -5_prime_UTR_variant -3_prime_UTR_variant -non_coding_transcript_exon_variant -intron_variant -NMD_transcript_variant -non_coding_transcript_variant -coding_transcript_variant -upstream_gene_variant -downstream_gene_variant -TFBS_ablation -TFBS_amplification -TF_binding_site_variant -regulatory_region_ablation -regulatory_region_amplification -regulatory_region_variant -intergenic_variant -sequence_variant diff --git a/conf/test.config b/conf/test.config index fd2f873e..75e7a92f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -43,7 +43,7 @@ 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" - mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" @@ -55,6 +55,8 @@ params { vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" + variant_consequences_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" + variant_consequences_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index d521a8a3..f54448f8 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -43,7 +43,7 @@ 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" - mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" + mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" @@ -55,6 +55,8 @@ params { vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" + variant_consequences_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" + variant_consequences_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 diff --git a/main.nf b/main.nf index 72b342a3..6c38b158 100644 --- a/main.nf +++ b/main.nf @@ -47,6 +47,8 @@ params.sdf = WorkflowMain.getGenomeAttribute(params, 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.variant_consequences_snv = WorkflowMain.getGenomeAttribute(params, 'variant_consequences_snv') +params.variant_consequences_sv = WorkflowMain.getGenomeAttribute(params, 'variant_consequences_sv') params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filters') params.vcf2cytosure_blacklist = WorkflowMain.getGenomeAttribute(params, 'vcf2cytosure_blacklist') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') diff --git a/nextflow_schema.json b/nextflow_schema.json index 79045f6d..47c4f0ae 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,9 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["outdir"], + "required": [ + "outdir" + ], "properties": { "input": { "type": "string", @@ -423,7 +425,11 @@ "description": "Path to the file containing HGNC_IDs of interest on separate lines." } }, - "required": ["fasta", "intervals_wgs", "intervals_y"] + "required": [ + "fasta", + "intervals_wgs", + "intervals_y" + ] }, "analysis_options": { "title": "Analysis options", @@ -436,7 +442,11 @@ "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-align-center", - "enum": ["wgs", "wes", "mito"] + "enum": [ + "wgs", + "wes", + "mito" + ] }, "gens_switch": { "type": "boolean", @@ -448,14 +458,20 @@ "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"] + "enum": [ + "illumina" + ] }, "ngsbits_samplegender_method": { "type": "string", "default": "xy", "description": "Method selection for ngs-bits samplegender", "fa_icon": "fas fa-align-center", - "enum": ["xy", "hetx", "sry"] + "enum": [ + "xy", + "hetx", + "sry" + ] }, "run_rtgvcfeval": { "type": "boolean", @@ -547,7 +563,11 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-align-center", - "enum": ["bwa", "bwamem2", "sentieon"] + "enum": [ + "bwa", + "bwamem2", + "sentieon" + ] }, "min_trimmed_length": { "type": "integer", @@ -608,14 +628,21 @@ "default": "deepvariant", "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", "fa_icon": "fas fa-random", - "enum": ["deepvariant", "sentieon"] + "enum": [ + "deepvariant", + "sentieon" + ] }, "variant_type": { "type": "string", "default": "snp,indel", "description": "Specifies the variant types for sentieon variant caller.", "fa_icon": "fas fa-align-center", - "enum": ["snp", "indel", "snp,indel"] + "enum": [ + "snp", + "indel", + "snp,indel" + ] } } }, @@ -625,12 +652,27 @@ "fa_icon": "fas fa-user-cog", "description": "Options used to facilitate the annotation of the variants.", "properties": { + "variant_consequences_snv": { + "type": "string", + "description": "File containing list of SO terms listed in the order of severity from most severe to lease severe for annotating genomic and mitochondrial SNVs.", + "help_text": "For more information check https://grch37.ensembl.org/info/genome/variation/prediction/predicted_data.html", + "fa_icon": "fas fa-file-csv" + }, + "variant_consequences_sv": { + "type": "string", + "description": "File containing list of SO terms listed in the order of severity from most severe to lease severe for annotating genomic SVs.", + "help_text": "For more information check https://grch37.ensembl.org/info/genome/variation/prediction/predicted_data.html", + "fa_icon": "fas fa-file-csv" + }, "vep_cache_version": { "type": "integer", "default": 110, "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", "fa_icon": "fas fa-align-center", - "enum": [107, 110] + "enum": [ + 107, + 110 + ] } } }, @@ -742,7 +784,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": { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 650ca446..3d8984c5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -40,11 +40,11 @@ if (params.run_rtgvcfeval) { if (!params.skip_snv_annotation) { mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version", - "gnomad_af", "score_config_snv"] + "gnomad_af", "score_config_snv", "variant_consequences_snv"] } if (!params.skip_sv_annotation) { - mandatoryParams += ["genome", "vep_cache", "vep_cache_version", "score_config_sv"] + mandatoryParams += ["genome", "vep_cache", "vep_cache_version", "score_config_sv", "variant_consequences_sv"] if (!params.svdb_query_bedpedbs && !params.svdb_query_dbs) { println("params.svdb_query_bedpedbs or params.svdb_query_dbs should be set.") missingParamsCount += 1 @@ -52,7 +52,7 @@ if (!params.skip_sv_annotation) { } if (!params.skip_mt_annotation) { - mandatoryParams += ["genome", "mito_name", "vcfanno_resources", "vcfanno_toml", "vep_cache_version", "vep_cache"] + mandatoryParams += ["genome", "mito_name", "vcfanno_resources", "vcfanno_toml", "vep_cache_version", "vep_cache", "variant_consequences_snv"] } if (params.analysis_type.equals("wes")) { @@ -72,7 +72,7 @@ if (!params.skip_vep_filter) { } if (!params.skip_me_annotation) { - mandatoryParams += ["mobile_element_svdb_annotations"] + mandatoryParams += ["mobile_element_svdb_annotations", "variant_consequences_snv"] } for (param in mandatoryParams.unique()) { @@ -288,7 +288,10 @@ workflow RAREDISEASE { 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_v2.txt", checkIfExists: true).collect() + ch_variant_consequences_snv = params.variant_consequences_snv ? Channel.fromPath(params.variant_consequences_snv).collect() + : Channel.value([]) + ch_variant_consequences_sv = params.variant_consequences_sv ? Channel.fromPath(params.variant_consequences_sv).collect() + : Channel.value([]) ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() : Channel.value([]) ch_vcf2cytosure_blacklist = params.vcf2cytosure_blacklist ? Channel.fromPath(params.vcf2cytosure_blacklist).collect() @@ -490,7 +493,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_SV ( GENERATE_CLINICAL_SET_SV.out.vcf, - ch_variant_consequences + ch_variant_consequences_sv ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SV.out.versions) @@ -535,7 +538,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_SNV ( GENERATE_CLINICAL_SET_SNV.out.vcf, - ch_variant_consequences + ch_variant_consequences_snv ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) @@ -577,7 +580,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_MT( GENERATE_CLINICAL_SET_MT.out.vcf, - ch_variant_consequences + ch_variant_consequences_snv ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_MT.out.versions) @@ -663,7 +666,7 @@ workflow RAREDISEASE { ch_genome_fasta, ch_genome_dictionary, ch_vep_cache, - ch_variant_consequences, + ch_variant_consequences_sv, ch_vep_filters, params.genome, params.vep_cache_version, From 1ea4ba1892c378266d895e9ec2ac653491ea3415 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 21:56:04 +0100 Subject: [PATCH 1612/1921] update changelog and docs --- CHANGELOG.md | 1 + docs/usage.md | 50 ++++++++++++++++++++++++++++---------------------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db07d7eb..06a3851f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) - Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). - Chromograph to plot coverage across chromosomes [#507](https://github.com/nf-core/raredisease/pull/507) +- Added two new parameters `variant_consequences_snv` and `variant_consequences_sv` to supply variant consequence files for annotating SNVs and SVs. [#509](https://github.com/nf-core/raredisease/pull/509) ### `Changed` diff --git a/docs/usage.md b/docs/usage.md index 8f1ec601..f75baed9 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -221,15 +221,16 @@ The mandatory and optional parameters for each category are tabulated below. ##### 7. SNV annotation & Ranking -| Mandatory | Optional | -| ----------------------------- | ------------------------------ | -| genome1 | reduced_penetrance7 | -| vcfanno_resources2 | vcfanno_lua | -| vcfanno_toml3 | vep_filters8 | -| vep_cache_version | cadd_resources9 | -| vep_cache4 | vep_plugin_files10 | -| gnomad_af5 | | -| score_config_snv6 | | +| Mandatory | Optional | +| ------------------------------------ | ------------------------------ | +| genome1 | reduced_penetrance8 | +| vcfanno_resources2 | vcfanno_lua | +| vcfanno_toml3 | vep_filters9 | +| vep_cache_version | cadd_resources10 | +| vep_cache4 | vep_plugin_files11 | +| gnomad_af5 | | +| score_config_snv6 | | +| variant_consequences_snv7 | | 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).
@@ -240,10 +241,11 @@ See example cache [here](https://raw.githubusercontent.com/nf-core/test-datasets 5 GnomAD VCF files can be downloaded from [here](https://gnomad.broadinstitute.org/downloads). The option `gnomad_af` expects a tab-delimited file with no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
6Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
-7Used 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).
-8 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). Not required if --skip_vep_filter is set to true.
-9Path 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.
-10A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
+7File containing list of SO terms listed in the order of severity from most severe to lease severe for annotating genomic and mitochondrial SNVs. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/variant_consequences_v2.txt). You can learn more about these terms [here](https://grch37.ensembl.org/info/genome/variation/prediction/predicted_data.html). +8Used 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).
+9 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). Not required if --skip_vep_filter is set to true.
+10Path 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.
+11A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
> 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>") @@ -256,20 +258,23 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl | vep_cache_version | vep_filters | | vep_cache | vep_plugin_files | | score_config_sv | | +| variant_consequences_sv2 | | 1 A CSV file that describes the databases (VCFs or BEDPEs) 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). +2 File containing list of SO terms listed in the order of severity from most severe to lease severe for annotating genomic SVs. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/variant_consequences_v2.txt). You can learn more about these terms [here](https://grch37.ensembl.org/info/genome/variation/prediction/predicted_data.html). ##### 9. Mitochondrial annotation -| Mandatory | Optional | -| ----------------- | ---------------- | -| genome | vep_filters | -| mito_name | vep_plugin_files | -| vcfanno_resources | | -| vcfanno_toml | | -| vep_cache_version | | -| vep_cache | | -| score_config_mt | | +| Mandatory | Optional | +| ------------------------ | ---------------- | +| genome | vep_filters | +| mito_name | vep_plugin_files | +| vcfanno_resources | | +| vcfanno_toml | | +| vep_cache_version | | +| vep_cache | | +| score_config_mt | | +| variant_consequences_snv | | ##### 10. Mobile element annotation @@ -279,6 +284,7 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl | mobile_element_svdb_annotations1 | | | vep_cache_version | | | vep_cache | | +| variant_consequences_sv | | 1 A CSV file that describes the databases (VCFs) used by SVDB for annotating mobile elements with allele frequencies. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). From 66194d68647ea43eaf3ee47483acc30c094ac5ca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 21:58:57 +0100 Subject: [PATCH 1613/1921] prettier --- nextflow_schema.json | 57 ++++++++------------------------------------ 1 file changed, 10 insertions(+), 47 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 47c4f0ae..a5b71b42 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,9 +10,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": [ - "outdir" - ], + "required": ["outdir"], "properties": { "input": { "type": "string", @@ -425,11 +423,7 @@ "description": "Path to the file containing HGNC_IDs of interest on separate lines." } }, - "required": [ - "fasta", - "intervals_wgs", - "intervals_y" - ] + "required": ["fasta", "intervals_wgs", "intervals_y"] }, "analysis_options": { "title": "Analysis options", @@ -442,11 +436,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-align-center", - "enum": [ - "wgs", - "wes", - "mito" - ] + "enum": ["wgs", "wes", "mito"] }, "gens_switch": { "type": "boolean", @@ -458,20 +448,14 @@ "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" - ] + "enum": ["illumina"] }, "ngsbits_samplegender_method": { "type": "string", "default": "xy", "description": "Method selection for ngs-bits samplegender", "fa_icon": "fas fa-align-center", - "enum": [ - "xy", - "hetx", - "sry" - ] + "enum": ["xy", "hetx", "sry"] }, "run_rtgvcfeval": { "type": "boolean", @@ -563,11 +547,7 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-align-center", - "enum": [ - "bwa", - "bwamem2", - "sentieon" - ] + "enum": ["bwa", "bwamem2", "sentieon"] }, "min_trimmed_length": { "type": "integer", @@ -628,21 +608,14 @@ "default": "deepvariant", "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", "fa_icon": "fas fa-random", - "enum": [ - "deepvariant", - "sentieon" - ] + "enum": ["deepvariant", "sentieon"] }, "variant_type": { "type": "string", "default": "snp,indel", "description": "Specifies the variant types for sentieon variant caller.", "fa_icon": "fas fa-align-center", - "enum": [ - "snp", - "indel", - "snp,indel" - ] + "enum": ["snp", "indel", "snp,indel"] } } }, @@ -669,10 +642,7 @@ "default": 110, "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", "fa_icon": "fas fa-align-center", - "enum": [ - 107, - 110 - ] + "enum": [107, 110] } } }, @@ -784,14 +754,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": { From c7fe536d8ca9e013b9a99a3618354b8deccc4732 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Feb 2024 21:59:25 +0100 Subject: [PATCH 1614/1921] remove whitespace --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3d8984c5..69b7f031 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -288,9 +288,9 @@ workflow RAREDISEASE { 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_snv = params.variant_consequences_snv ? Channel.fromPath(params.variant_consequences_snv).collect() + ch_variant_consequences_snv = params.variant_consequences_snv ? Channel.fromPath(params.variant_consequences_snv).collect() : Channel.value([]) - ch_variant_consequences_sv = params.variant_consequences_sv ? Channel.fromPath(params.variant_consequences_sv).collect() + ch_variant_consequences_sv = params.variant_consequences_sv ? Channel.fromPath(params.variant_consequences_sv).collect() : Channel.value([]) ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() : Channel.value([]) From 083cf77100ccbf2c8ba8538efe0cc4b00bedf1d5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 4 Feb 2024 03:04:36 +0100 Subject: [PATCH 1615/1921] add vep_filters_scout_fmt --- CHANGELOG.md | 1 + conf/modules/annotate_mobile_elements.config | 2 +- conf/modules/generate_clinical_set.config | 6 +- docs/usage.md | 64 +++++++++---------- main.nf | 1 + nextflow_schema.json | 7 ++ .../local/annotate_mobile_elements.nf | 4 +- subworkflows/local/generate_clinical_set.nf | 16 +++-- workflows/raredisease.nf | 41 ++++++++++-- 9 files changed, 91 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db07d7eb..7e5331a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) - Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). - Chromograph to plot coverage across chromosomes [#507](https://github.com/nf-core/raredisease/pull/507) +- Added a new parameter `vep_filters_scout_fmt` to supply a bed like file exported by scout to be used in filter_vep [#511](https://github.com/nf-core/raredisease/pull/511). ### `Changed` diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index dec67a22..aa119729 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -61,7 +61,7 @@ process { withName: '.*:ANNOTATE_MOBILE_ELEMENTS:GENERATE_CLINICAL_SET_ME:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_me_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } } withName: '.*:ANNOTATE_MOBILE_ELEMENTS:GENERATE_CLINICAL_SET_ME:TABIX_BGZIP' { diff --git a/conf/modules/generate_clinical_set.config b/conf/modules/generate_clinical_set.config index 8de8d594..794e284b 100644 --- a/conf/modules/generate_clinical_set.config +++ b/conf/modules/generate_clinical_set.config @@ -21,7 +21,7 @@ process { withName: '.*:GENERATE_CLINICAL_SET_SNV:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_snv_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } } withName: '.*:GENERATE_CLINICAL_SET_SNV:TABIX_BGZIP' { @@ -41,7 +41,7 @@ process { withName: '.*:GENERATE_CLINICAL_SET_SV:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_sv_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } } withName: '.*:GENERATE_CLINICAL_SET_SV:TABIX_BGZIP' { @@ -61,7 +61,7 @@ process { withName: '.*:GENERATE_CLINICAL_SET_MT:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_mt_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } } withName: '.*:GENERATE_CLINICAL_SET_MT:TABIX_BGZIP' { diff --git a/docs/usage.md b/docs/usage.md index 8f1ec601..1fb9e24a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -221,15 +221,15 @@ The mandatory and optional parameters for each category are tabulated below. ##### 7. SNV annotation & Ranking -| Mandatory | Optional | -| ----------------------------- | ------------------------------ | -| genome1 | reduced_penetrance7 | -| vcfanno_resources2 | vcfanno_lua | -| vcfanno_toml3 | vep_filters8 | -| vep_cache_version | cadd_resources9 | -| vep_cache4 | vep_plugin_files10 | -| gnomad_af5 | | -| score_config_snv6 | | +| Mandatory | Optional | +| ----------------------------- | --------------------------------------------- | +| genome1 | reduced_penetrance7 | +| vcfanno_resources2 | vcfanno_lua | +| vcfanno_toml3 | vep_filters/vep_filters_scout_fmt8 | +| vep_cache_version | cadd_resources9 | +| vep_cache4 | vep_plugin_files10 | +| gnomad_af5 | | +| score_config_snv6 | | 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).
@@ -241,7 +241,7 @@ See example cache [here](https://raw.githubusercontent.com/nf-core/test-datasets no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
6Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
7Used 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).
-8 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). Not required if --skip_vep_filter is set to true.
+8 File containing 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. This file can either contain IDs on separate lines (`vep_filter`) or in the format exported by [scout](https://github.com/Clinical-Genomics/scout) (`vep_filters_scout_fmt`). 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). Not required if --skip_vep_filter is set to true.
9Path 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.
10A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
@@ -249,36 +249,36 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl ##### 8. SV annotation & Ranking -| Mandatory | Optional | -| ---------------------------------------------- | ------------------ | -| genome | reduced_penetrance | -| svdb_query_dbs/svdb_query_bedpedbs1 | | -| vep_cache_version | vep_filters | -| vep_cache | vep_plugin_files | -| score_config_sv | | +| Mandatory | Optional | +| ---------------------------------------------- | --------------------------------- | +| genome | reduced_penetrance | +| svdb_query_dbs/svdb_query_bedpedbs1 | | +| vep_cache_version | vep_filters/vep_filters_scout_fmt | +| vep_cache | vep_plugin_files | +| score_config_sv | | 1 A CSV file that describes the databases (VCFs or BEDPEs) 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). ##### 9. Mitochondrial annotation -| Mandatory | Optional | -| ----------------- | ---------------- | -| genome | vep_filters | -| mito_name | vep_plugin_files | -| vcfanno_resources | | -| vcfanno_toml | | -| vep_cache_version | | -| vep_cache | | -| score_config_mt | | +| Mandatory | Optional | +| ----------------- | --------------------------------- | +| genome | vep_filters/vep_filters_scout_fmt | +| mito_name | vep_plugin_files | +| vcfanno_resources | | +| vcfanno_toml | | +| vep_cache_version | | +| vep_cache | | +| score_config_mt | | ##### 10. Mobile element annotation -| Mandatory | Optional | -| ------------------------------------------- | ----------- | -| genome | vep_filters | -| mobile_element_svdb_annotations1 | | -| vep_cache_version | | -| vep_cache | | +| Mandatory | Optional | +| ------------------------------------------- | --------------------------------- | +| genome | vep_filters/vep_filters_scout_fmt | +| mobile_element_svdb_annotations1 | | +| vep_cache_version | | +| vep_cache | | 1 A CSV file that describes the databases (VCFs) used by SVDB for annotating mobile elements with allele frequencies. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). diff --git a/main.nf b/main.nf index 72b342a3..e50414cf 100644 --- a/main.nf +++ b/main.nf @@ -48,6 +48,7 @@ params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 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.vep_filters_scout_fmt = WorkflowMain.getGenomeAttribute(params, 'vep_filters_scout_fmt') params.vcf2cytosure_blacklist = WorkflowMain.getGenomeAttribute(params, 'vcf2cytosure_blacklist') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, 'vcfanno_toml') diff --git a/nextflow_schema.json b/nextflow_schema.json index 79045f6d..8501516d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -421,6 +421,13 @@ "format": "path", "fa_icon": "fas fa-file-csv", "description": "Path to the file containing HGNC_IDs of interest on separate lines." + }, + "vep_filters_scout_fmt": { + "type": "string", + "exists": true, + "format": "path", + "fa_icon": "fas fa-table", + "description": "Path to a bed like file exported by scout, which contains HGNC_IDs to be used in filter_vep." } }, "required": ["fasta", "intervals_wgs", "intervals_y"] diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index 362474ea..53fecd0a 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -20,7 +20,7 @@ workflow ANNOTATE_MOBILE_ELEMENTS { ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_vep_cache // channel: [mandatory] [ path(cache) ] ch_variant_consequences // channel: [mandatory] [ path(consequences) ] - ch_vep_filters // channel: [mandatory] [ path(vep_filter) ] + ch_hgnc_ids // channel: [mandatory] [ val(hgnc_ids) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_extra_files // channel: [mandatory] [ path(files) ] @@ -79,7 +79,7 @@ workflow ANNOTATE_MOBILE_ELEMENTS { GENERATE_CLINICAL_SET_ME( BCFTOOLS_VIEW_FILTER.out.vcf, - ch_vep_filters + ch_hgnc_ids ) ANNOTATE_CSQ_PLI_ME( diff --git a/subworkflows/local/generate_clinical_set.nf b/subworkflows/local/generate_clinical_set.nf index e877c39b..87250ff9 100644 --- a/subworkflows/local/generate_clinical_set.nf +++ b/subworkflows/local/generate_clinical_set.nf @@ -8,25 +8,29 @@ include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix' workflow GENERATE_CLINICAL_SET { take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] - ch_vep_filters // channel: [mandatory] [ path(feature_file) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_hgnc_ids // channel: [mandatory] [ val(hgnc_ids) ] main: ch_versions = Channel.empty() ch_vcf - .multiMap { meta, vcf -> - clinical: [ meta + [ set: "clinical" ], vcf ] + .combine(ch_hgnc_ids) + .multiMap { meta, vcf, ids -> + clinical: [ meta + [ set: "clinical", hgnc_ids:ids ], vcf ] research: [ meta + [ set: "research" ], vcf ] } .set { ch_clin_research_vcf } ENSEMBLVEP_FILTERVEP( ch_clin_research_vcf.clinical, - ch_vep_filters + [] ) + .output + .map {meta, vcf -> [ meta - meta.subMap('hgnc_ids'), vcf ]} + .set { ch_filtervep_out } - TABIX_BGZIP( ENSEMBLVEP_FILTERVEP.out.output ) + TABIX_BGZIP( ch_filtervep_out ) ch_clin_research_vcf.research .mix( TABIX_BGZIP.out.output ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 650ca446..f6908f79 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -68,7 +68,13 @@ if (!params.skip_germlinecnvcaller) { } if (!params.skip_vep_filter) { - mandatoryParams += ["vep_filters"] + if (!params.vep_filters && !params.vep_filters_scout_fmt) { + println("params.vep_filters or params.vep_filters_scout_fmt should be set.") + missingParamsCount += 1 + } else if (params.vep_filters && params.vep_filters_scout_fmt) { + println("Either params.vep_filters or params.vep_filters_scout_fmt should be set.") + missingParamsCount += 1 + } } if (!params.skip_me_annotation) { @@ -301,8 +307,10 @@ workflow RAREDISEASE { : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files).collect() : Channel.value([]) - ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters).collect() - : Channel.value([]) + ch_vep_filters_std_fmt = params.vep_filters ? Channel.fromPath(params.vep_filters).splitCsv().collect() + : Channel.empty() + ch_vep_filters_scout_fmt = params.vep_filters_scout_fmt ? Channel.fromPath(params.vep_filters_scout_fmt).collect() + : Channel.empty() ch_versions = ch_versions.mix(ch_references.versions) // SV caller priority @@ -327,6 +335,13 @@ workflow RAREDISEASE { .set {ch_vep_extra_files} } + // Read and store hgnc ids in a channel + ch_vep_filters_scout_fmt + .map { it -> parseHgncIds(it.text) } + .mix (ch_vep_filters_std_fmt) + .toList() + .set {ch_hgnc_ids} + // Input QC if (!params.skip_fastqc) { FASTQC (ch_reads) @@ -484,7 +499,7 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_SV( ch_sv_annotate.vcf_ann, - ch_vep_filters + ch_hgnc_ids ) ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SV.out.versions) @@ -529,7 +544,7 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_SNV( ch_snv_annotate.vcf_ann, - ch_vep_filters + ch_hgnc_ids ) ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SNV.out.versions) @@ -571,7 +586,7 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_MT( ch_mt_annotate.vcf_ann, - ch_vep_filters + ch_hgnc_ids ) ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_MT.out.versions) @@ -664,7 +679,7 @@ workflow RAREDISEASE { ch_genome_dictionary, ch_vep_cache, ch_variant_consequences, - ch_vep_filters, + ch_hgnc_ids, params.genome, params.vep_cache_version, ch_vep_extra_files @@ -793,6 +808,18 @@ def create_case_channel(List rows) { return case_info } +// create hgnc list +def parseHgncIds(List text) { + def ids = [] + lines = text[0].tokenize("\n") + for(int i = 0; i Date: Sun, 4 Feb 2024 11:48:55 +0100 Subject: [PATCH 1616/1921] add subsample skip to configs --- conf/test.config | 3 ++- conf/test_one_sample.config | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index fd2f873e..1afc2549 100644 --- a/conf/test.config +++ b/conf/test.config @@ -30,6 +30,7 @@ params { skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI + skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' @@ -56,7 +57,7 @@ params { vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" + vep_filters = "/home/ramprasad.neethiraj/nextflow/raredisease/hgnc_test.txt" vep_cache_version = 107 vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index d521a8a3..f73e7520 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -30,6 +30,7 @@ params { skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI + skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_single.csv' From 7da3f2db16e498429a547517dfd3597d01699598 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 4 Feb 2024 11:52:43 +0100 Subject: [PATCH 1617/1921] update file path --- conf/test.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test.config b/conf/test.config index 1afc2549..e542fa50 100644 --- a/conf/test.config +++ b/conf/test.config @@ -57,7 +57,7 @@ params { vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "/home/ramprasad.neethiraj/nextflow/raredisease/hgnc_test.txt" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } From 41349cf6e6191b9af4aa27c89336e007f1164368 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 4 Feb 2024 20:19:13 +0100 Subject: [PATCH 1618/1921] Free space step in ci.yaml --- .github/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a97b039d..276a9ab0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,13 @@ jobs: - "-profile test,docker" - "-profile test_one_sample,docker" steps: + - name: Free some space + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + - name: Check out pipeline code uses: actions/checkout@v4 From 8d120cd1f452ce92b77edcffb4023687b5cdf59a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:05:51 +0100 Subject: [PATCH 1619/1921] add rhocall_viz --- conf/modules/annotate_rhocallviz.config | 46 ++++++++++++++++ subworkflows/local/annotate_genome_snvs.nf | 7 +++ .../local/annotation/annotate_rhocallviz.nf | 52 +++++++++++++++++++ workflows/raredisease.nf | 4 +- 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 conf/modules/annotate_rhocallviz.config create mode 100644 subworkflows/local/annotation/annotate_rhocallviz.nf diff --git a/conf/modules/annotate_rhocallviz.config b/conf/modules/annotate_rhocallviz.config new file mode 100644 index 00000000..d5f09ab9 --- /dev/null +++ b/conf/modules/annotate_rhocallviz.config @@ -0,0 +1,46 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// rhocall viz options +// + +process { + + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.sample}" } + ext.args = { "--output-type z --min-ac 1 --samples ${meta.sample}" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:BCFTOOLS_ROH' { + ext.prefix = { "${meta.sample}" } + ext.args = { "--AF-tag GNOMADAF --skip-indels" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:BCFTOOLS_VIEW_UNCOMPRESS' { + ext.prefix = { "${meta.sample}" } + ext.args = { "--output-type v" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:RHOCALL_VIZ' { + ext.prefix = { "${meta.sample}_rhocallviz" } + ext.args = { "--aftag GNOMADAF --wig" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:UCSC_WIGTOBIGWIG' { + ext.prefix = { "${meta.sample}_rhocallviz" } + ext.args = { "-clip" } + } + + +} diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 9e3d74d6..fe59303d 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -19,6 +19,7 @@ include { TABIX_TABIX as TABIX_BCFTOOLS_CONCAT } from '../../modules/nf-core/ta 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 './annotation/annotate_cadd' +include { ANNOTATE_RHOCALLVIZ } from './annotation/annotate_rhocallviz' workflow ANNOTATE_GENOME_SNVS { @@ -35,8 +36,10 @@ workflow ANNOTATE_GENOME_SNVS { ch_vep_cache // channel: [mandatory] [ path(cache) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_gnomad_af // channel: [optional] [ path(tab), path(tbi) ] + ch_samples // channel: [mandatory] [ val(sample_meta) ] ch_split_intervals // channel: [mandatory] [ path(intervals) ] ch_vep_extra_files // channel: [mandatory] [ path(files) ] + ch_genome_chrsizes // channel: [mandatory] [ path(sizes) ] main: ch_cadd_vcf = Channel.empty() @@ -77,6 +80,9 @@ workflow ANNOTATE_GENOME_SNVS { ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) + //rhocall_viz + ANNOTATE_RHOCALLVIZ(ZIP_TABIX_VCFANNO.out.gz_tbi, ch_samples, ch_genome_chrsizes) + BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi, [], [], []) // filter on frequencies TABIX_BCFTOOLS_VIEW (BCFTOOLS_VIEW.out.vcf) @@ -171,6 +177,7 @@ workflow ANNOTATE_GENOME_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(ANNOTATE_RHOCALLVIZ.out.versions) emit: vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/annotation/annotate_rhocallviz.nf b/subworkflows/local/annotation/annotate_rhocallviz.nf new file mode 100644 index 00000000..37aeb02d --- /dev/null +++ b/subworkflows/local/annotation/annotate_rhocallviz.nf @@ -0,0 +1,52 @@ +// +// A subworkflow to plot binned zygosity and RHO-regions. +// + +include { BCFTOOLS_VIEW } from '../../../modules/nf-core/bcftools/view/main' +include { TABIX_TABIX } from '../../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_ROH } from '../../../modules/nf-core/bcftools/roh/main' +include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_UNCOMPRESS } from '../../../modules/nf-core/bcftools/view/main' +include { RHOCALL_VIZ } from '../../../modules/nf-core/rhocall/viz/main' +include { UCSC_WIGTOBIGWIG } from '../../../modules/nf-core/ucsc/wigtobigwig/main' + +workflow ANNOTATE_RHOCALLVIZ { + + take: + ch_vcf_tbi // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] + ch_samples // channel: [mandatory] [ val(sample_meta) ] + ch_genome_chrsizes // channel: [mandatory] [ path(sizes) ] + + main: + ch_versions = Channel.empty() + + ch_vcf_tbi + .combine(ch_samples) + .map {meta, vcf, tbi, meta2 -> return [meta2,vcf,tbi]} + .set { ch_rhocall_viz } + + BCFTOOLS_VIEW(ch_rhocall_viz, [],[],[]) + + TABIX_TABIX(BCFTOOLS_VIEW.out.vcf) + + BCFTOOLS_VIEW.out.vcf + .join(TABIX_TABIX.out.tbi) + .set {ch_roh_in } + + BCFTOOLS_ROH(ch_roh_in, [[],[]], [], [], [], []) + + BCFTOOLS_VIEW_UNCOMPRESS(ch_roh_in,[],[],[]) + + RHOCALL_VIZ( BCFTOOLS_VIEW_UNCOMPRESS.out.vcf, BCFTOOLS_ROH.out.roh) + + UCSC_WIGTOBIGWIG(RHOCALL_VIZ.out.wig, ch_genome_chrsizes) + + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions.first()) + ch_versions = ch_versions.mix(TABIX_TABIX.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_VIEW_UNCOMPRESS.out.versions.first()) + ch_versions = ch_versions.mix(RHOCALL_VIZ.out.versions.first()) + ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) + + emit: + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 650ca446..13f8458f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -522,8 +522,10 @@ workflow RAREDISEASE { ch_vep_cache, ch_genome_fasta, ch_gnomad_af, + ch_samples, ch_scatter_split_intervals, - ch_vep_extra_files + ch_vep_extra_files, + ch_genome_chrsizes ).set { ch_snv_annotate } ch_versions = ch_versions.mix(ch_snv_annotate.versions) From 6e4ee90ecc4ccc4dd2a5956205eae82da8ee14ac Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:39:10 +0100 Subject: [PATCH 1620/1921] output docs --- conf/modules/annotate_rhocallviz.config | 12 ++++++++++-- docs/output.md | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/conf/modules/annotate_rhocallviz.config b/conf/modules/annotate_rhocallviz.config index d5f09ab9..cfeb8d7e 100644 --- a/conf/modules/annotate_rhocallviz.config +++ b/conf/modules/annotate_rhocallviz.config @@ -35,12 +35,20 @@ process { withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:RHOCALL_VIZ' { ext.prefix = { "${meta.sample}_rhocallviz" } ext.args = { "--aftag GNOMADAF --wig" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:UCSC_WIGTOBIGWIG' { ext.prefix = { "${meta.sample}_rhocallviz" } ext.args = { "-clip" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome/${meta.sample}_rhocallviz" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } - - } diff --git a/docs/output.md b/docs/output.md index 37f7d4f8..2f782cf4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -52,6 +52,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [VEP](#vep) - [UPD](#upd) - [Chromograph](#chromograph) + - [Rhocall viz](#rhocall-viz) - [Annotation - SV](#annotation---sv) - [SVDB query](#svdb-query) - [VEP](#vep-1) @@ -403,6 +404,19 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e
+#### Rhocall viz + +[Rhocall viz](https://github.com/dnil/rhocall) plots binned zygosity and RHO-regions. + +
+Output files + +- `annotate_snv/genome/_rhocallviz/_rhocallviz.bed`: file containing regions of homozygosity in bed format. +- `annotate_snv/genome/_rhocallviz/_rhocallviz.wig`: file containing the fraction of homozygous SNPs in wig format. +- `annotate_snv/genome/_rhocallviz/_rhocallviz.bw`: file containing the fraction of homozygous SNPs in bigwig format. + +
+ ### Annotation - SV #### SVDB query From fb2529fab34e965d7d798a908e7f18bec3f69122 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 6 Feb 2024 14:04:12 +0100 Subject: [PATCH 1621/1921] add bcftools view --- modules/nf-core/bcftools/view/main.nf | 18 ++++++++++++++---- modules/nf-core/bcftools/view/meta.yml | 2 +- .../bcftools/view/tests/main.nf.test.snap | 12 ++++++------ .../bcftools/view/tests/nextflow.config | 4 ++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index a9d93fa6..f3474885 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -14,8 +14,8 @@ process BCFTOOLS_VIEW { path(samples) output: - tuple val(meta), path("*.gz") , emit: vcf - path "versions.yml" , emit: versions + 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 @@ -26,9 +26,14 @@ process BCFTOOLS_VIEW { def regions_file = regions ? "--regions-file ${regions}" : "" def targets_file = targets ? "--targets-file ${targets}" : "" def samples_file = samples ? "--samples-file ${samples}" : "" + def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : + args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : + args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : + args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : + "vcf" """ bcftools view \\ - --output ${prefix}.vcf.gz \\ + --output ${prefix}.${extension} \\ ${regions_file} \\ ${targets_file} \\ ${samples_file} \\ @@ -44,8 +49,13 @@ process BCFTOOLS_VIEW { stub: 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}.vcf.gz + touch ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/view/meta.yml b/modules/nf-core/bcftools/view/meta.yml index eaa12b56..6baa34a6 100644 --- a/modules/nf-core/bcftools/view/meta.yml +++ b/modules/nf-core/bcftools/view/meta.yml @@ -53,7 +53,7 @@ output: - vcf: type: file description: VCF normalized output file - pattern: "*.{vcf.gz}" + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" - versions: type: file description: File containing software versions diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap index 049ac252..b59be932 100644 --- a/modules/nf-core/bcftools/view/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -7,23 +7,23 @@ "id": "out", "single_end": false }, - "out.vcf.gz:md5,3c47ba1a6aa4ef9b3ad800175814d739" + "out.vcf:md5,1bcbd0eff25d316ba915d06463aab17b" ] ], [ "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" ] ], - "timestamp": "2023-11-29T14:27:10.724842996" + "timestamp": "2024-02-05T17:12:20.799849895" }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { "content": [ - "out.vcf.gz", + "out.vcf", [ "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" ] ], - "timestamp": "2023-11-29T14:27:17.445846794" + "timestamp": "2024-02-05T16:53:34.652746985" }, "sarscov2 - [vcf, tbi], [], [], []": { "content": [ @@ -33,13 +33,13 @@ "id": "out", "single_end": false }, - "out.vcf.gz:md5,a1e45fe6d2b386fc2611766e5d2937ee" + "out.vcf:md5,8e722884ffb75155212a3fc053918766" ] ], [ "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" ] ], - "timestamp": "2023-11-29T14:27:03.328392594" + "timestamp": "2024-02-05T17:12:14.247465409" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/nextflow.config b/modules/nf-core/bcftools/view/tests/nextflow.config index b05aa504..932e3ba6 100644 --- a/modules/nf-core/bcftools/view/tests/nextflow.config +++ b/modules/nf-core/bcftools/view/tests/nextflow.config @@ -1,3 +1,3 @@ process { - ext.args = '--no-version' -} \ No newline at end of file + ext.args = '--no-version --output-type v' +} From 70edfa3834badd2da192cbef98ffecf480e883f6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 6 Feb 2024 14:11:34 +0100 Subject: [PATCH 1622/1921] add rhocall_viz --- modules.json | 7 ++- modules/nf-core/rhocall/viz/environment.yml | 7 +++ modules/nf-core/rhocall/viz/main.nf | 53 ++++++++++++++++++ modules/nf-core/rhocall/viz/meta.yml | 52 ++++++++++++++++++ .../nf-core/rhocall/viz/tests/main.nf.test | 54 +++++++++++++++++++ .../rhocall/viz/tests/main.nf.test.snap | 47 ++++++++++++++++ .../nf-core/rhocall/viz/tests/nextflow.config | 3 ++ modules/nf-core/rhocall/viz/tests/tags.yml | 2 + 8 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 modules/nf-core/rhocall/viz/environment.yml create mode 100644 modules/nf-core/rhocall/viz/main.nf create mode 100644 modules/nf-core/rhocall/viz/meta.yml create mode 100644 modules/nf-core/rhocall/viz/tests/main.nf.test create mode 100644 modules/nf-core/rhocall/viz/tests/main.nf.test.snap create mode 100644 modules/nf-core/rhocall/viz/tests/nextflow.config create mode 100644 modules/nf-core/rhocall/viz/tests/tags.yml diff --git a/modules.json b/modules.json index ffdf8a5f..3f475b74 100644 --- a/modules.json +++ b/modules.json @@ -47,7 +47,7 @@ }, "bcftools/view": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "7157328de1724e26d8ed3b13bb715fde62912896", "installed_by": ["modules"] }, "bedtools/genomecov": { @@ -358,6 +358,11 @@ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, + "rhocall/viz": { + "branch": "master", + "git_sha": "6ea51097105e91adc656aa965de2f2a7c9c9b923", + "installed_by": ["modules"] + }, "rtgtools/format": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", diff --git a/modules/nf-core/rhocall/viz/environment.yml b/modules/nf-core/rhocall/viz/environment.yml new file mode 100644 index 00000000..6e5b352f --- /dev/null +++ b/modules/nf-core/rhocall/viz/environment.yml @@ -0,0 +1,7 @@ +name: "rhocall_viz" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::rhocall=0.5.1" diff --git a/modules/nf-core/rhocall/viz/main.nf b/modules/nf-core/rhocall/viz/main.nf new file mode 100644 index 00000000..7c4b9d07 --- /dev/null +++ b/modules/nf-core/rhocall/viz/main.nf @@ -0,0 +1,53 @@ +process RHOCALL_VIZ { + tag "$meta.id" + label 'process_medium' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/rhocall:0.5.1--py39hbf8eff0_0': + 'biocontainers/rhocall:0.5.1--py39hbf8eff0_0' }" + + input: + tuple val(meta), path(vcf) + tuple val(meta2), path(roh) + + output: + tuple val(meta), path("${prefix}/${prefix}.bed"), emit: bed + tuple val(meta), path("${prefix}/${prefix}.wig"), emit: wig + 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}" + """ + rhocall \\ + viz \\ + $args \\ + -r $roh \\ + --out_dir ${prefix} \\ + $vcf + + mv ${prefix}/output.bed ${prefix}/${prefix}.bed + mv ${prefix}/output.wig ${prefix}/${prefix}.wig + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rhocall: \$(echo \$(rhocall --version 2>&1) | sed 's/rhocall, version //' ) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}/${prefix}.bed + touch ${prefix}/${prefix}.wig + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + rhocall: \$(echo \$(rhocall --version 2>&1) | sed 's/rhocall, version //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/rhocall/viz/meta.yml b/modules/nf-core/rhocall/viz/meta.yml new file mode 100644 index 00000000..bbcad9ba --- /dev/null +++ b/modules/nf-core/rhocall/viz/meta.yml @@ -0,0 +1,52 @@ +name: "rhocall_viz" +description: Call regions of homozygosity and make tentative UPD calls +keywords: + - roh + - bcftools + - runs_of_homozygosity +tools: + - "rhocall": + description: "Call regions of homozygosity and make tentative UPD calls." + homepage: "https://github.com/dnil/rhocall" + documentation: "https://github.com/dnil/rhocall" + tool_dev_url: "https://github.com/dnil" + licence: ["GPL v3"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - vcf: + type: file + description: VCF file + pattern: "*.{vcf}" + - roh: + type: file + description: Input RHO file produced from rhocall + pattern: "*.{roh}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - bed: + type: file + description: Bed file containing roh calls + pattern: "*.{bed}" + - wig: + type: file + description: Wig file containing roh calls + pattern: "*.{wig}" + +authors: + - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/rhocall/viz/tests/main.nf.test b/modules/nf-core/rhocall/viz/tests/main.nf.test new file mode 100644 index 00000000..094e7d07 --- /dev/null +++ b/modules/nf-core/rhocall/viz/tests/main.nf.test @@ -0,0 +1,54 @@ +nextflow_process { + + name "Test Process RHOCALL_VIZ" + script "../main.nf" + process "RHOCALL_VIZ" + + tag "modules" + tag "modules_nfcore" + tag "rhocall" + tag "rhocall/viz" + tag "bcftools/roh" + + config "./nextflow.config" + + test("sarscov2 - vcf, roh") { + + + setup { + run("BCFTOOLS_ROH") { + script "../../../bcftools/roh/main.nf" + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true)] + + input[1] = [[],[]] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + """ + } + } + } + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true)] + input[1] = BCFTOOLS_ROH.out.roh + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/rhocall/viz/tests/main.nf.test.snap b/modules/nf-core/rhocall/viz/tests/main.nf.test.snap new file mode 100644 index 00000000..cba4067f --- /dev/null +++ b/modules/nf-core/rhocall/viz/tests/main.nf.test.snap @@ -0,0 +1,47 @@ +{ + "sarscov2 - vcf, roh": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed:md5,4579710bbd8e1e4449274d261c439891" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.wig:md5,ab2d23269213f6331f18b7ad6ca94a5f" + ] + ], + "2": [ + "versions.yml:md5,079291120b14dd6b9368dd1cff72518e" + ], + "bed": [ + [ + { + "id": "test" + }, + "test.bed:md5,4579710bbd8e1e4449274d261c439891" + ] + ], + "versions": [ + "versions.yml:md5,079291120b14dd6b9368dd1cff72518e" + ], + "wig": [ + [ + { + "id": "test" + }, + "test.wig:md5,ab2d23269213f6331f18b7ad6ca94a5f" + ] + ] + } + ], + "timestamp": "2024-02-05T17:57:24.70125206" + } +} \ No newline at end of file diff --git a/modules/nf-core/rhocall/viz/tests/nextflow.config b/modules/nf-core/rhocall/viz/tests/nextflow.config new file mode 100644 index 00000000..2217be8e --- /dev/null +++ b/modules/nf-core/rhocall/viz/tests/nextflow.config @@ -0,0 +1,3 @@ +env { + MPLCONFIGDIR = "/tmp" +} diff --git a/modules/nf-core/rhocall/viz/tests/tags.yml b/modules/nf-core/rhocall/viz/tests/tags.yml new file mode 100644 index 00000000..bc2d74a7 --- /dev/null +++ b/modules/nf-core/rhocall/viz/tests/tags.yml @@ -0,0 +1,2 @@ +rhocall/viz: + - "modules/nf-core/rhocall/viz/**" From 41221fdcb4e6dc05a824fc3092db4bba1fe486e6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Feb 2024 09:37:34 +0100 Subject: [PATCH 1623/1921] Update CHANGELOG.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 454380f9..7c0256e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New workflow for annotating mobile elements [#483](https://github.com/nf-core/raredisease/pull/483) - Added a functionality to subsample mitochondrial alignment, and a new parameter `skip_mt_subsample` to skip the subworkflow [#508](https://github.com/nf-core/raredisease/pull/508). - Chromograph to plot coverage across chromosomes [#507](https://github.com/nf-core/raredisease/pull/507) -- Added a new parameter `vep_filters_scout_fmt` to supply a bed like file exported by scout to be used in filter_vep [#511](https://github.com/nf-core/raredisease/pull/511). +- Added a new parameter `vep_filters_scout_fmt` to supply a bed-like file exported by scout to be used in filter_vep [#511](https://github.com/nf-core/raredisease/pull/511). - Added two new parameters `variant_consequences_snv` and `variant_consequences_sv` to supply variant consequence files for annotating SNVs and SVs. [#509](https://github.com/nf-core/raredisease/pull/509) ### `Changed` From f6d4d6b51277ed018104c5e5036c7d84b0903498 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Feb 2024 09:37:40 +0100 Subject: [PATCH 1624/1921] Update nextflow_schema.json Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 561d1296..9b72083d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -427,7 +427,7 @@ "exists": true, "format": "path", "fa_icon": "fas fa-table", - "description": "Path to a bed like file exported by scout, which contains HGNC_IDs to be used in filter_vep." + "description": "Path to a bed-like file exported by scout, which contains HGNC_IDs to be used in filter_vep." } }, "required": ["fasta", "intervals_wgs", "intervals_y"] From dd2dd7e49125e6b7b5b333c0e102a52713859bba Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Feb 2024 13:59:06 +0100 Subject: [PATCH 1625/1921] fix errors --- conf/modules/annotate_mobile_elements.config | 2 +- modules.json | 4 ++-- modules/nf-core/bcftools/view/main.nf | 1 + modules/nf-core/rhocall/viz/main.nf | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index aa119729..bed2c0a7 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -54,7 +54,7 @@ process { withName: '.*ANNOTATE_MOBILE_ELEMENTS:BCFTOOLS_VIEW_FILTER' { // extend filter with arguments such as --exclude 'INFO/swegen_sva_FRQ > 0.1' - ext.args = { "--apply-filters PASS" } + ext.args = { "--apply-filters PASS --output-type z" } ext.prefix = { "${meta.id}_filter" } } diff --git a/modules.json b/modules.json index 3f475b74..1076a6d6 100644 --- a/modules.json +++ b/modules.json @@ -47,7 +47,7 @@ }, "bcftools/view": { "branch": "master", - "git_sha": "7157328de1724e26d8ed3b13bb715fde62912896", + "git_sha": "1013101da4252623fd7acf19cc581bae91d4f839", "installed_by": ["modules"] }, "bedtools/genomecov": { @@ -360,7 +360,7 @@ }, "rhocall/viz": { "branch": "master", - "git_sha": "6ea51097105e91adc656aa965de2f2a7c9c9b923", + "git_sha": "1013101da4252623fd7acf19cc581bae91d4f839", "installed_by": ["modules"] }, "rtgtools/format": { diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index f3474885..5237adc8 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -48,6 +48,7 @@ process BCFTOOLS_VIEW { """ 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" : diff --git a/modules/nf-core/rhocall/viz/main.nf b/modules/nf-core/rhocall/viz/main.nf index 7c4b9d07..4191ef3b 100644 --- a/modules/nf-core/rhocall/viz/main.nf +++ b/modules/nf-core/rhocall/viz/main.nf @@ -42,6 +42,7 @@ process RHOCALL_VIZ { stub: prefix = task.ext.prefix ?: "${meta.id}" """ + mkdir ${prefix} touch ${prefix}/${prefix}.bed touch ${prefix}/${prefix}.wig From 8178f32a1cfb4776ac1b574a4ea8d37dcf552b58 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Feb 2024 15:23:39 +0100 Subject: [PATCH 1626/1921] update config --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index 69dd2cae..72bb3f34 100644 --- a/nextflow.config +++ b/nextflow.config @@ -337,6 +337,7 @@ includeConfig 'conf/modules/annotate_mobile_elements.config' includeConfig 'conf/modules/generate_clinical_set.config' includeConfig 'conf/modules/variant_evaluation.config' includeConfig 'conf/modules/subsample_mt.config' +includeConfig 'conf/modules/annotate_rhocallviz.config' // Function to ensure that resource requirements don't go beyond // a maximum limit From f10869bbb1e43e2d0ce5d1c98b475e8109166337 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 11 Feb 2024 13:36:41 +0100 Subject: [PATCH 1627/1921] alignment --- conf/modules/align_MT.config | 25 ++++++++++++------------- conf/modules/align_bwa_bwamem2.config | 8 ++++---- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index e88f7e88..5ffec1c0 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -21,7 +21,7 @@ process { withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted" } } } @@ -29,7 +29,7 @@ process { withName: '.*ALIGN_MT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted" } } } @@ -37,13 +37,13 @@ process { withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes"))} - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted" } } } withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--TMP_DIR . --CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged" } + ext.prefix = { "${meta.id}_sorted_merged" } } withName: '.*ALIGN_MT:PICARD_ADDORREPLACEREADGROUPS_MT' { @@ -59,11 +59,11 @@ process { withName: '.*ALIGN_MT:PICARD_MARKDUPLICATES_MT' { ext.args = '--TMP_DIR . --VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates" } + ext.prefix = { "${meta.id}_sorted_merged_md" } } withName: '.*ALIGN_MT:SAMTOOLS_SORT_MT' { - ext.prefix = { "${meta.id}_sorted" } + ext.prefix = { "${meta.id}_sorted_merged_md_sorted" } } } @@ -78,7 +78,7 @@ process { withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted_shifted" } } } @@ -86,22 +86,21 @@ process { withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes"))} - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted_shifted" } } } - if (params.aligner.equals("bwa")) { withName: '.*ALIGN_MT_SHIFT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted_shifted" } } } withName: '.*ALIGN_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { ext.args = '--TMP_DIR . --CREATE_INDEX true --MAX_GAPS -1 --SORT_ORDER queryname --INCLUDE_SECONDARY_ALIGNMENTS false --PAIRED_RUN false --VALIDATION_STRINGENCY LENIENT' - ext.prefix = { "${meta.id}_merged_shifted" } + ext.prefix = { "${meta.id}_sorted_merged_shifted" } } withName: '.*ALIGN_MT_SHIFT:PICARD_ADDORREPLACEREADGROUPS_MT' { @@ -117,11 +116,11 @@ process { withName: '.*ALIGN_MT_SHIFT:PICARD_MARKDUPLICATES_MT' { ext.args = '--TMP_DIR . --VALIDATION_STRINGENCY LENIENT --CREATE_INDEX true' - ext.prefix = { "${meta.id}_markduplicates_shifted" } + ext.prefix = { "${meta.id}_sorted_merged_md_shifted" } } withName: '.*ALIGN_MT_SHIFT:SAMTOOLS_SORT_MT' { - ext.prefix = { "${meta.id}_sorted_shifted" } + ext.prefix = { "${meta.id}_sorted_merged_md_sorted_shifted" } } } diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index 15453e0e..e91360fc 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -21,14 +21,14 @@ process { withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.prefix = { "${meta.id}.sorted" } - ext.when = { params.aligner.equals("bwamem2")} + ext.prefix = { "${meta.id}_sorted" } + ext.when = { params.aligner.equals("bwamem2") } } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.prefix = { "${meta.id}.sorted" } - ext.when = { params.aligner.equals("bwa")} + ext.prefix = { "${meta.id}_sorted" } + ext.when = { params.aligner.equals("bwa") } } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { From 04af72affb1223da4f6747ced5897f67cea3932c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 12 Feb 2024 09:33:17 +0100 Subject: [PATCH 1628/1921] call sv --- conf/modules/call_sv_germlinecnvcaller.config | 2 +- docs/output.md | 4 ++-- modules.json | 2 +- modules/nf-core/eklipse/main.nf | 8 ++++---- modules/nf-core/eklipse/tests/main.nf.test.snap | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index 6685dc6c..5f85c0f9 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -39,7 +39,7 @@ process { } withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_gatkcnv_segments_reffiltered" } + ext.prefix = { "${meta.id}_gatkcnv_segments_refiltered" } ext.args = { '--output-type z --exclude "N_ALT = 0" ' } } } diff --git a/docs/output.md b/docs/output.md index 2f782cf4..4edd4376 100644 --- a/docs/output.md +++ b/docs/output.md @@ -462,8 +462,8 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen [eKLIPse](https://github.com/dooguypapua/eKLIPse) allows the detection and quantification of large mtDNA rearrangements. - `call_sv/mitochondria` - - `eKLIPse_deletions.csv`: file containing all predicted deletions. - - `eKLIPse_genes.csv`: file summarizing cumulated deletions per mtDNA gene. + - `eKLIPse__deletions.csv`: file containing all predicted deletions. + - `eKLIPse__genes.csv`: file summarizing cumulated deletions per mtDNA gene. - `eKLIPse_.png`: circos plot. #### Annotation: diff --git a/modules.json b/modules.json index 1076a6d6..e98107a0 100644 --- a/modules.json +++ b/modules.json @@ -113,7 +113,7 @@ }, "eklipse": { "branch": "master", - "git_sha": "0031772de29283811deb989a5b42d0310d35ec22", + "git_sha": "7f265c2db4b1394c9303a3eb51e25d8447767347", "installed_by": ["modules"] }, "ensemblvep/filtervep": { diff --git a/modules/nf-core/eklipse/main.nf b/modules/nf-core/eklipse/main.nf index b50df3c1..98c57789 100644 --- a/modules/nf-core/eklipse/main.nf +++ b/modules/nf-core/eklipse/main.nf @@ -33,8 +33,8 @@ process EKLIPSE { -in infile.txt \\ $args \\ -ref $ref_gb - mv eKLIPse_*/eKLIPse_deletions.csv eKLIPse_deletions.csv - mv eKLIPse_*/eKLIPse_genes.csv eKLIPse_genes.csv + mv eKLIPse_*/eKLIPse_deletions.csv eKLIPse_${prefix}_deletions.csv + mv eKLIPse_*/eKLIPse_genes.csv eKLIPse_${prefix}_genes.csv mv eKLIPse_*/eKLIPse_${prefix}.png eKLIPse_${prefix}.png cat <<-END_VERSIONS > versions.yml @@ -47,8 +47,8 @@ process EKLIPSE { def prefix = task.ext.prefix ?: "${meta.id}" def VERSION = "1.8" """ - touch eKLIPse_deletions.csv - touch eKLIPse_genes.csv + touch eKLIPse_${prefix}_deletions.csv + touch eKLIPse_${prefix}_genes.csv touch eKLIPse_${prefix}.png cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/eklipse/tests/main.nf.test.snap b/modules/nf-core/eklipse/tests/main.nf.test.snap index 87d79dac..5969a1da 100644 --- a/modules/nf-core/eklipse/tests/main.nf.test.snap +++ b/modules/nf-core/eklipse/tests/main.nf.test.snap @@ -1,11 +1,11 @@ { - "eklipse": { + "homo_sapiens [bam]": { "content": [ - "eKLIPse_deletions.csv:md5,8bcfdb8f3e8a63dcd211c2a53b6ca0a7", - "eKLIPse_genes.csv:md5,ec1a1f31d018ca66a46d8a2d17bc8d18", + "eKLIPse_test_deletions.csv:md5,8bcfdb8f3e8a63dcd211c2a53b6ca0a7", + "eKLIPse_test_genes.csv:md5,ec1a1f31d018ca66a46d8a2d17bc8d18", "eKLIPse_test.png:md5,d1ea2a548bc4f8d321b1128a61ea8b0a", "versions.yml:md5,8e6ebaa9abf72ced91c1f56acd10f131" ], - "timestamp": "2023-11-22T18:02:08.245264064" + "timestamp": "2024-02-11T14:55:25.205208435" } } \ No newline at end of file From 55edd59e399054849ca2de4e17472080aff486a8 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 11:45:58 +0100 Subject: [PATCH 1629/1921] updating gens subworkflow --- conf/modules/gens.config | 19 +++++-- modules/local/gens/main.nf | 14 ++--- nextflow.config | 4 +- nextflow_schema.json | 10 ++-- subworkflows/local/call_snv.nf | 26 +++++++--- subworkflows/local/gens.nf | 28 +++++++--- .../variant_calling/call_snv_deepvariant.nf | 8 +-- .../variant_calling/call_snv_sentieon.nf | 11 ++-- workflows/raredisease.nf | 52 +++++++++++-------- 9 files changed, 114 insertions(+), 58 deletions(-) diff --git a/conf/modules/gens.config b/conf/modules/gens.config index 3a3f6ccf..fdd798f5 100644 --- a/conf/modules/gens.config +++ b/conf/modules/gens.config @@ -16,17 +16,26 @@ // process { - if (params.gens_switch) { + if (!params.skip_gens && params.analysis_type != "wes") { withName: '.*GENS:.*' { publishDir = [ - path: { "${params.outdir}/gens" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } withName: '.*GENS:COLLECTREADCOUNTS' { - ext.args = '--interval-merging-rule OVERLAPPING_ONLY' + ext.args = { [ + '--interval-merging-rule OVERLAPPING_ONLY', + '--format HDF5' + ].join(' ') } + } + + withName: '.*GENS:GENERATE_DATA' { + publishDir = [ + path: { "${params.outdir}/gens" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } } diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 34399885..6708e79c 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -2,24 +2,26 @@ process GENS { tag "$meta.id" label 'process_medium' - container 'docker.io/raysloks/gens_preproc:1.0.1' + container 'docker.io/clinicalgenomics/gens_preproc:1.0.11' input: tuple val(meta), path(read_counts) - path vcf + tuple val(meta2), path(gvcf) path gnomad_positions output: - tuple val(meta), path('*.cov.bed.gz'), emit: cov - tuple val(meta), path('*.baf.bed.gz'), emit: baf - path "versions.yml" , emit: versions + tuple val(meta), path('*.cov.bed.gz') , emit: cov + tuple val(meta), path('*.cov.bed.gz.tbi'), emit: cov_index + tuple val(meta), path('*.baf.bed.gz') , emit: baf + tuple val(meta), path('*.baf.bed.gz.tbi'), emit: baf_index + path "versions.yml" , emit: versions script: def prefix = task.ext.prefix ?: "${meta.id}" """ generate_gens_data.pl \\ $read_counts \\ - $vcf \\ + $gvcf \\ $prefix \\ $gnomad_positions diff --git a/nextflow.config b/nextflow.config index 72bb3f34..6e55e55a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -28,8 +28,11 @@ params { skip_eklipse = false skip_fastp = false skip_fastqc = false + skip_gens = true skip_germlinecnvcaller = false skip_haplocheck = false + skip_me_annotation = false + skip_mt_annotation = false skip_qualimap = false skip_snv_annotation = false skip_sv_annotation = false @@ -38,7 +41,6 @@ params { skip_mt_subsample = false skip_vcf2cytosure = true skip_vep_filter = false - gens_switch = false cadd_resources = null platform = 'illumina' diff --git a/nextflow_schema.json b/nextflow_schema.json index 9b72083d..1ea97d44 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -445,11 +445,6 @@ "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", @@ -489,6 +484,11 @@ "description": "Specifies whether or not to skip haplocheck.", "fa_icon": "fas fa-toggle-on" }, + "skip_gens": { + "type": "boolean", + "description": "Specifies whether or not to skip gens preprocessing subworkflow.", + "fa_icon": "fas fa-toggle-on" + }, "skip_germlinecnvcaller": { "type": "boolean", "description": "Specifies whether or not to skip CNV calling using GATK's GermlineCNVCaller", diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 8d926f0e..3e76ab91 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -33,11 +33,15 @@ workflow CALL_SNV { ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] main: - ch_versions = Channel.empty() - ch_deepvar_vcf = Channel.empty() - ch_deepvar_tbi = Channel.empty() - ch_sentieon_vcf = Channel.empty() - ch_sentieon_tbi = Channel.empty() + ch_versions = Channel.empty() + ch_deepvar_vcf = Channel.empty() + ch_deepvar_tbi = Channel.empty() + ch_deepvar_gvcf = Channel.empty() + ch_deepvar_gtbi = Channel.empty() + ch_sentieon_vcf = Channel.empty() + ch_sentieon_tbi = Channel.empty() + ch_sentieon_gvcf = Channel.empty() + ch_sentieon_gtbi = Channel.empty() if (params.variant_caller.equals("deepvariant")) { CALL_SNV_DEEPVARIANT ( // triggered only when params.variant_caller is set as deepvariant @@ -50,6 +54,8 @@ workflow CALL_SNV { ) ch_deepvar_vcf = CALL_SNV_DEEPVARIANT.out.vcf ch_deepvar_tbi = CALL_SNV_DEEPVARIANT.out.tabix + ch_deepvar_gvcf = CALL_SNV_DEEPVARIANT.out.gvcf + ch_deepvar_gtbi = CALL_SNV_DEEPVARIANT.out.gvcf_tabix ch_versions = ch_versions.mix(CALL_SNV_DEEPVARIANT.out.versions) } else if (params.variant_caller.equals("sentieon")) { CALL_SNV_SENTIEON( // triggered only when params.variant_caller is set as sentieon @@ -67,11 +73,15 @@ workflow CALL_SNV { ) ch_sentieon_vcf = CALL_SNV_SENTIEON.out.vcf ch_sentieon_tbi = CALL_SNV_SENTIEON.out.tabix + ch_sentieon_gvcf = CALL_SNV_SENTIEON.out.gvcf + ch_sentieon_gtbi = CALL_SNV_SENTIEON.out.gtbi ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) } - ch_vcf = Channel.empty().mix(ch_deepvar_vcf, ch_sentieon_vcf) - ch_tabix = Channel.empty().mix(ch_deepvar_tbi, ch_sentieon_tbi) + ch_vcf = Channel.empty().mix(ch_deepvar_vcf, ch_sentieon_vcf) + ch_tabix = Channel.empty().mix(ch_deepvar_tbi, ch_sentieon_tbi) + ch_gvcf = Channel.empty().mix(ch_deepvar_gvcf, ch_sentieon_gvcf) + ch_gtabix = Channel.empty().mix(ch_deepvar_gtbi, ch_sentieon_gtbi) ch_vcf .join(ch_tabix, failOnMismatch:true, failOnDuplicate:true) @@ -120,6 +130,8 @@ workflow CALL_SNV { genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] genome_vcf_tabix = ch_genome_vcf_tabix // channel: [ val(meta), path(vcf), path(tbi) ] + genome_gvcf = ch_gvcf // channel: [ val(meta), path(gvcf) ] + genome_gtabix = ch_gtabix // channel: [ val(meta), path(gtbi) ] mt_vcf = POSTPROCESS_MT_CALLS.out.vcf // channel: [ val(meta), path(vcf) ] mt_tabix = POSTPROCESS_MT_CALLS.out.tbi // channel: [ val(meta), path(tbi) ] versions = ch_versions // channel: [ path(versions.yml) ] diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index fdee366d..30f94cc3 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -9,7 +9,7 @@ include { GENS as GENS_GENERATE } from '../../modules/loc workflow GENS { take: ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_gvcf // channel: [mandatory] [ val(meta), path(gvcf) ] 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) ] @@ -21,11 +21,27 @@ workflow GENS { main: ch_versions = Channel.empty() - COLLECTREADCOUNTS (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_sequence_dictionary, ch_interval_list) - - DENOISEREADCOUNTS (COLLECTREADCOUNTS.out.read_counts, ch_pon) - - GENS_GENERATE (DENOISEREADCOUNTS.out.standardized_read_counts, ch_vcf.map { meta, vcf -> vcf }, ch_gnomad_pos) + ch_bam_bai + .combine(ch_interval_list) + .set { ch_bam_bai_intervals } + + COLLECTREADCOUNTS ( + ch_bam_bai_intervals, + ch_genome_fasta, + ch_genome_fai, + ch_genome_dictionary + ) + + DENOISEREADCOUNTS ( + COLLECTREADCOUNTS.out.hdf5, + ch_pon + ) + + GENS_GENERATE ( + DENOISEREADCOUNTS.out.standardized, + ch_gvcf, + ch_gnomad_pos + ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions.first()) ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions.first()) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 4fc6ab4d..c3477d67 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -82,7 +82,9 @@ workflow CALL_SNV_DEEPVARIANT { ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) emit: - vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] - tabix = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] + gvcf = DEEPVARIANT.out.gvcf // channel: [ val(meta), path(gvcf)] + gvcf_tabix = DEEPVARIANT.out.gvcf_tbi // channel: [ val(meta), path(gvcf_tbi)] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index d0586c82..a84be1ed 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -47,7 +47,8 @@ workflow CALL_SNV_SENTIEON { ch_ml_model, ch_pcr_indel_model, 'VARIANT', - false) + true + ) ch_dnamodelapply_in = SENTIEON_DNASCOPE.out.vcf.join(SENTIEON_DNASCOPE.out.vcf_tbi) @@ -121,7 +122,9 @@ workflow CALL_SNV_SENTIEON { ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions) emit: - vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] - tabix = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] + tabix = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] + gvcf = SENTIEON_DNASCOPE.out.gvcf // channel: [ val(meta), path(gvcf) ] + gvcf_tbi = SENTIEON_DNASCOPE.out.gvcf_tbi // channel: [ val(meta), path(gvcf_tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 342812db..b60ddad9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -81,6 +81,10 @@ if (!params.skip_me_annotation) { mandatoryParams += ["mobile_element_svdb_annotations", "variant_consequences_snv"] } +if (!params.skip_gens) { + mandatoryParams += ["gens_gnomad_pos", "gens_interval_list", "gens_pon"] +} + for (param in mandatoryParams.unique()) { if (params[param] == null) { println("params." + param + " not set.") @@ -246,22 +250,28 @@ workflow RAREDISEASE { : 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_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") - : Channel.empty() - ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) - : Channel.empty() - ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.value([[:],[]]) + ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.genome_dict + ch_gens_gnomad_pos = params.gens_gnomad_pos ? Channel.fromPath(params.gens_gnomad_pos).collect() + : Channel.empty() + ch_gens_interval_list = params.gens_interval_list ? Channel.fromPath(params.gens_interval_list).collect() + : Channel.empty() + ch_gens_pon = params.gens_pon ? Channel.fromPath(params.gens_pon).map { it -> [ [id:it[0].simpleName], it ] }.collect() + : Channel.empty() + 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_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") + : Channel.empty() + ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) + : Channel.empty() + ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals ch_mtshift_backchain = ch_references.mtshift_backchain ch_mtshift_bwaindex = ch_references.mtshift_bwa_index @@ -651,15 +661,15 @@ workflow RAREDISEASE { } // GENS - if (params.gens_switch) { + if ( !params.skip_gens && params.analysis_type != "wes" ) { GENS ( ch_mapped.genome_bam_bai, - CALL_SNV.out.vcf, + CALL_SNV.out.genome_gvcf, ch_genome_fasta, ch_genome_fai, - file(params.gens_interval_list), - file(params.gens_pon), - file(params.gens_gnomad_pos), + ch_gens_interval_list, + ch_gens_pon, + ch_gens_gnomad_pos, ch_case_info, ch_genome_dictionary ) From 0abbb659ff090f0abb91485585461ee787e23555 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 11:52:55 +0100 Subject: [PATCH 1630/1921] fixing linting --- workflows/raredisease.nf | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b60ddad9..edb69b39 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -250,28 +250,28 @@ workflow RAREDISEASE { : 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_gens_gnomad_pos = params.gens_gnomad_pos ? Channel.fromPath(params.gens_gnomad_pos).collect() - : Channel.empty() - ch_gens_interval_list = params.gens_interval_list ? Channel.fromPath(params.gens_interval_list).collect() - : Channel.empty() - ch_gens_pon = params.gens_pon ? Channel.fromPath(params.gens_pon).map { it -> [ [id:it[0].simpleName], it ] }.collect() - : Channel.empty() - 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_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") - : Channel.empty() - ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) - : Channel.empty() - ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.value([[:],[]]) + ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.genome_dict + ch_gens_gnomad_pos = params.gens_gnomad_pos ? Channel.fromPath(params.gens_gnomad_pos).collect() + : Channel.empty() + ch_gens_interval_list = params.gens_interval_list ? Channel.fromPath(params.gens_interval_list).collect() + : Channel.empty() + ch_gens_pon = params.gens_pon ? Channel.fromPath(params.gens_pon).map { it -> [ [id:it[0].simpleName], it ] }.collect() + : Channel.empty() + 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_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") + : Channel.empty() + ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) + : Channel.empty() + ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals ch_mtshift_backchain = ch_references.mtshift_backchain ch_mtshift_bwaindex = ch_references.mtshift_bwa_index From 12c538209770b60532009593b7ce664764a5384a Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 17:09:12 +0100 Subject: [PATCH 1631/1921] splited gens_pon in gens_pon_male and gens_pon_female --- CHANGELOG.md | 3 ++- main.nf | 3 ++- nextflow_schema.json | 15 ++++++++++++--- subworkflows/local/gens.nf | 36 +++++++++++++++++++++++++++--------- workflows/raredisease.nf | 9 ++++++--- 5 files changed, 49 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c0256e2..3d852b52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,10 +64,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated modules from nf-core [#412](https://github.com/nf-core/raredisease/pull/412) - If present, remove duplicate entries in probands and upd_children in the meta. [#420](https://github.com/nf-core/raredisease/pull/420) - Fixes vep starting as many instances as the square of the number of scatters. [#405](https://github.com/nf-core/raredisease/pull/405) -- Replaced the logic where we added an arbitrary substring to keep file names unique after alignment which we then removed using a split operator, with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425/files) +- Replaced the logic where we added an arbitrary substring to keep file names unique after alignment which we then removed using a split operator, with a simple copy operation. [#425](https://github.com/nf-core/raredisease/pull/425) - Preventing a crash of rhocall annotate in the case of running four individuals whereof two are affected. - Fixed memory qualifier in gatk4 germlinecnvcaller and postprocessgermlinecnvcalls - Fixed wrong process names when outputting versions in `ALIGN_SENTIEON` and `CALL_SNV`. +- Fixed gens subworkflow [#515](https://github.com/nf-core/raredisease/pull/515) ### `Updated` diff --git a/main.nf b/main.nf index 5327e44e..9b19e359 100644 --- a/main.nf +++ b/main.nf @@ -24,7 +24,8 @@ params.call_interval = WorkflowMain.getGenomeAttribute(params, 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_pon_female = WorkflowMain.getGenomeAttribute(params, 'gens_pon_female') +params.gens_pon_male = WorkflowMain.getGenomeAttribute(params, 'gens_pon_male') 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') diff --git a/nextflow_schema.json b/nextflow_schema.json index 1ea97d44..03ab1c6a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -135,13 +135,22 @@ "help_text": "This file contains the binning intervals used for CollectReadCounts.", "hidden": true }, - "gens_pon": { + "gens_pon_female": { "type": "string", "exists": true, "format": "file-path", "fa_icon": "fas fa-file", - "description": "Path to panel of normals for Gens.", - "help_text": "The panel used to run DenoiseReadCounts.", + "description": "Path to female panel of normals for Gens.", + "help_text": "The female panel used to run DenoiseReadCounts.", + "hidden": true + }, + "gens_pon_male": { + "type": "string", + "exists": true, + "format": "file-path", + "fa_icon": "fas fa-file", + "description": "Path to male panel of normals for Gens.", + "help_text": "The male panel used to run DenoiseReadCounts.", "hidden": true }, "gnomad_af": { diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 30f94cc3..e9b86360 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -2,9 +2,10 @@ // A preprocessing workflow for Gens // -include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/nf-core/gatk4/collectreadcounts/main' -include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS } from '../../modules/nf-core/gatk4/denoisereadcounts/main' -include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' +include { GATK4_COLLECTREADCOUNTS as COLLECTREADCOUNTS } from '../../modules/nf-core/gatk4/collectreadcounts/main' +include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS_FEMALE } from '../../modules/nf-core/gatk4/denoisereadcounts/main' +include { GATK4_DENOISEREADCOUNTS as DENOISEREADCOUNTS_MALE } from '../../modules/nf-core/gatk4/denoisereadcounts/main' +include { GENS as GENS_GENERATE } from '../../modules/local/gens/main' workflow GENS { take: @@ -13,7 +14,8 @@ workflow GENS { 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_pon_female // channel: [mandatory] [ path(pon) ] + ch_pon_male // 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) ] @@ -32,19 +34,35 @@ workflow GENS { ch_genome_dictionary ) - DENOISEREADCOUNTS ( - COLLECTREADCOUNTS.out.hdf5, - ch_pon + COLLECTREADCOUNTS.out.hdf5 + .branch { meta, counts -> + female: meta.sex.equals(2) || meta.sex.equals(0) + male: meta.sex.equals(1) + } + .set { ch_denoisereadcounts_in } + + DENOISEREADCOUNTS_FEMALE ( + ch_denoisereadcounts_in.female, + ch_pon_female + ) + + DENOISEREADCOUNTS_MALE ( + ch_denoisereadcounts_in.male, + ch_pon_male ) + DENOISEREADCOUNTS_FEMALE.out.standardized + .mix(DENOISEREADCOUNTS_MALE.out.standardized) + .set { ch_denoisereadcounts_out } GENS_GENERATE ( - DENOISEREADCOUNTS.out.standardized, + ch_denoisereadcounts_out, ch_gvcf, ch_gnomad_pos ) ch_versions = ch_versions.mix(COLLECTREADCOUNTS.out.versions.first()) - ch_versions = ch_versions.mix(DENOISEREADCOUNTS.out.versions.first()) + ch_versions = ch_versions.mix(DENOISEREADCOUNTS_FEMALE.out.versions.first()) + ch_versions = ch_versions.mix(DENOISEREADCOUNTS_MALE.out.versions.first()) ch_versions = ch_versions.mix(GENS_GENERATE.out.versions.first()) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index edb69b39..dcac59c9 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -82,7 +82,7 @@ if (!params.skip_me_annotation) { } if (!params.skip_gens) { - mandatoryParams += ["gens_gnomad_pos", "gens_interval_list", "gens_pon"] + mandatoryParams += ["gens_gnomad_pos", "gens_interval_list", "gens_pon_female", "gens_pon_male"] } for (param in mandatoryParams.unique()) { @@ -256,7 +256,9 @@ workflow RAREDISEASE { : Channel.empty() ch_gens_interval_list = params.gens_interval_list ? Channel.fromPath(params.gens_interval_list).collect() : Channel.empty() - ch_gens_pon = params.gens_pon ? Channel.fromPath(params.gens_pon).map { it -> [ [id:it[0].simpleName], it ] }.collect() + ch_gens_pon_female = params.gens_pon_female ? Channel.fromPath(params.gens_pon_female).map { it -> [ [id:it[0].simpleName], it ] }.collect() + : Channel.empty() + ch_gens_pon_male = params.gens_pon_male ? Channel.fromPath(params.gens_pon_male).map { it -> [ [id:it[0].simpleName], it ] }.collect() : Channel.empty() ch_gnomad_afidx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() : ch_references.gnomad_af_idx @@ -668,7 +670,8 @@ workflow RAREDISEASE { ch_genome_fasta, ch_genome_fai, ch_gens_interval_list, - ch_gens_pon, + ch_gens_pon_female, + ch_gens_pon_male, ch_gens_gnomad_pos, ch_case_info, ch_genome_dictionary From 63bcbc117c07ce01727b8c81d28b592038cbc77d Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 17:32:02 +0100 Subject: [PATCH 1632/1921] fix publishing of gens outfiles --- conf/modules/gens.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/modules/gens.config b/conf/modules/gens.config index fdd798f5..6882775c 100644 --- a/conf/modules/gens.config +++ b/conf/modules/gens.config @@ -30,7 +30,8 @@ process { ].join(' ') } } - withName: '.*GENS:GENERATE_DATA' { + withName: '.*GENS:GENS_GENERATE' { + ext.prefix = { "${meta.id}_gens" } publishDir = [ path: { "${params.outdir}/gens" }, mode: params.publish_dir_mode, From a91c4b421f11ef46a5266d9d140cba99e77c3711 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 17:41:37 +0100 Subject: [PATCH 1633/1921] Add error message when trying to run gens with conda --- modules/local/gens/main.nf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/local/gens/main.nf b/modules/local/gens/main.nf index 6708e79c..33731814 100644 --- a/modules/local/gens/main.nf +++ b/modules/local/gens/main.nf @@ -17,6 +17,10 @@ process GENS { path "versions.yml" , emit: versions script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "The gens pre-processing module does not support Conda. Please use Docker / Singularity / Podman instead." + } def prefix = task.ext.prefix ?: "${meta.id}" """ generate_gens_data.pl \\ From 8e0935e3df6859f83e507df85bb3f97951777c07 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 18:24:04 +0100 Subject: [PATCH 1634/1921] add usage --- docs/usage.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index b1ec69cd..878fe121 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -23,6 +23,7 @@ Table of contents: - [9. Mitochondrial annotation](#9-mitochondrial-annotation) - [10. Mobile element annoation](#10-mobile-element-annotation) - [11. Variant evaluation](#11-variant-evaluation) + - [12. Prepare data CNV visualization in Gens](#12-prepare-data-for-cnv-visualisation-in-gens) - [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) @@ -298,6 +299,21 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl 1 This parameter is set to false by default, set it to true if if you'd like to run the evaluation subworkflow 2 A CSV file that describes the truth VCF files used by RTG Tools' vcfeval for evaluating SNVs. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rtg_example.csv). The file contains four columns `samplename,vcf,bedregions,evaluationregions` where samplename is the user assigned samplename in the input samplesheet, vcf is the path to the truth vcf file, bedregions and evaluationregions are the path to the bed files that are supposed to be passed through --bed_regions and --evaluation_regions options of vcfeval. +##### 12. Prepare data for CNV visualisation in Gens + +Optionally the read data can be prepared for CNV visualization in [Gens](https://github.com/Clinical-Genomics-Lund/gens). This subworkflow is turned off by default. You can activate it by supplying the option `--skip_gens false`. + +| Mandatory | Optional | +| ------------------------------ | -------- | +| gens_pon_female1 | | +| gens_pon_male1 | | +| gens_interval_list2 | | +| gens_gnomad_pos3 | | + +1 Instructions on how to generate the panel of normals can be found [here](https://github.com/Clinical-Genomics-Lund/gens?tab=readme-ov-file#create-pon)
+2 Interval list for CollectReadCounts. Instructions on how to generate the interval list file can be found [here](https://github.com/Clinical-Genomics-Lund/gens?tab=readme-ov-file#create-pon)
+3 File containing SNVs to be used for the B-allele frequency calculations. The developers of gens uses SNVs in gnomad with an allele frecuency above 5%. + #### Run the pipeline You can directly supply the parameters in the command line (CLI) or use a config file from which the pipeline can import the parameters. From 8812ea7a084f9eca8c9db50356c26847f59e1fdc Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 18:33:12 +0100 Subject: [PATCH 1635/1921] adding gens output description --- docs/output.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/output.md b/docs/output.md index 2f782cf4..448322da 100644 --- a/docs/output.md +++ b/docs/output.md @@ -72,6 +72,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Calling mobile elements](#calling-mobile-elements) - [Annotating mobile elements](#annotating-mobile-elements) - [Variant evaluation](#variant-evaluation) + - [Gens](#gens) - [Pipeline information](#pipeline-information) ### Alignment @@ -594,6 +595,22 @@ Provided a truth set, SNVs can be evaluated using RTG Tools' vcfeval engine. Out
+### Gens + +The sequencing data can be prepared for visualization of CNVs in [Gens](https://github.com/Clinical-Genomics-Lund/gens). This subworkflow is turned off by default. You can activate it by supplying the option `--skip_gens false`. You can read more about how to setup Gens [here](https://github.com/Clinical-Genomics-Lund/gens). + +
+Output files + +- `gens/` + + - `_gens.baf.bed.gz`: contains sample b-allele frequencies in bed format. + - `_gens.baf.bed.gz.tbi`: index of the \*baf.bed.gz file. + - `_gens.cov.bed.gz`: contains sample coverage in bed format. + - `_gens.cov.bed.gz.tbi`: index of the \*cov.bed.gz file. + +
+ ### Pipeline information [Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. From 0793a2c56a6cfffa4c8b115e3695dd33a5e76e3c Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 13 Feb 2024 18:37:24 +0100 Subject: [PATCH 1636/1921] add citation --- CITATIONS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CITATIONS.md b/CITATIONS.md index 1fb40da9..36b3cd7b 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -60,6 +60,8 @@ > Magnusson M, Hughes T, Glabilloy, Bitdeli Chef. genmod: Version 3.7.3. Published online November 15, 2018. doi:10.5281/ZENODO.3841142 +- [Gens](https://github.com/Clinical-Genomics-Lund/gens) + - [GLnexus](https://academic.oup.com/bioinformatics/article/36/24/5582/6064144) > Yun T, Li H, Chang PC, Lin MF, Carroll A, McLean CY. Accurate, scalable cohort variant calls using DeepVariant and GLnexus. Robinson P, ed. Bioinformatics. 2021;36(24):5582-5589. doi:10.1093/bioinformatics/btaa1081 From 48cf0b30b516a29949cca1e21d29579d23ab8075 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Wed, 14 Feb 2024 13:35:53 +0100 Subject: [PATCH 1637/1921] aligning comments --- subworkflows/local/gens.nf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index e9b86360..93f1ac0a 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -9,16 +9,16 @@ include { GENS as GENS_GENERATE } from '../../modu workflow GENS { take: - ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_gvcf // channel: [mandatory] [ val(meta), path(gvcf) ] - 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_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_gvcf // channel: [mandatory] [ val(meta), path(gvcf) ] + 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_female // channel: [mandatory] [ path(pon) ] - ch_pon_male // 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) ] + ch_pon_male // 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() From b4808d5913d8f05da502545ae24d1ce694a9096f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Feb 2024 16:43:22 +0100 Subject: [PATCH 1638/1921] standardized output file names --- conf/modules/annotate_genome_snvs.config | 27 +++--- conf/modules/annotate_mt_snvs.config | 85 ++++++++++--------- .../annotate_structural_variants.config | 2 +- conf/modules/call_structural_variants.config | 1 + conf/modules/generate_clinical_set.config | 17 +--- conf/modules/qc_bam.config | 1 + conf/modules/rank_variants.config | 4 +- docs/output.md | 20 ++--- modules.json | 7 +- modules/nf-core/gatk4/selectvariants/main.nf | 12 +-- .../gatk4/selectvariants/tests/main.nf.test | 64 ++++++++++++++ .../gatk4/selectvariants/tests/tags.yml | 2 + .../hmtnote/annotate/hmtnote-annotate.diff | 42 +++++++++ modules/nf-core/hmtnote/annotate/main.nf | 10 +-- modules/nf-core/svdb/merge/main.nf | 8 +- modules/nf-core/svdb/merge/tests/main.nf.test | 57 +++++++++++++ modules/nf-core/svdb/merge/tests/tags.yml | 2 + subworkflows/local/annotate_genome_snvs.nf | 12 ++- subworkflows/local/annotate_mt_snvs.nf | 17 ++-- .../local/annotate_structural_variants.nf | 4 +- 20 files changed, 284 insertions(+), 110 deletions(-) create mode 100644 modules/nf-core/gatk4/selectvariants/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/selectvariants/tests/tags.yml create mode 100644 modules/nf-core/hmtnote/annotate/hmtnote-annotate.diff create mode 100644 modules/nf-core/svdb/merge/tests/main.nf.test create mode 100644 modules/nf-core/svdb/merge/tests/tags.yml diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index bf748350..768aeee3 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -25,26 +25,29 @@ process { withName: '.*ANNOTATE_GENOME_SNVS:RHOCALL_ANNOTATE' { ext.args = { "--v14 " } - ext.prefix = { "${meta.id}_rohann" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ZIP_TABIX_ROHCALL' { + ext.prefix = { "${input.simpleName}" } } withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { - ext.prefix = { "${meta.id}_rohann_vcfanno" } + ext.prefix = { "${vcf.simpleName}_vcfanno" } } withName: '.*ANNOTATE_GENOME_SNVS:UPD_SITES' { - ext.prefix = { "${meta.id}_rohann_vcfanno_upd_sites" } + ext.prefix = { "${vcf.simpleName}_upd_sites" } ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} sites"} } withName: '.*ANNOTATE_GENOME_SNVS:UPD_REGIONS' { - ext.prefix = { "${meta.id}_rohann_vcfanno_upd_regions" } + ext.prefix = { "${vcf.simpleName}_upd_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_GENOME_SNVS:CHROMOGRAPH_SITES' { - ext.prefix = { "${meta7.id}_rohann_vcfanno_upd_sites_chromograph" } + ext.prefix = { "${sites.simpleName}_chromograph" } ext.args = { "--euploid" } tag = {"${meta7.id}"} publishDir = [ @@ -55,7 +58,7 @@ process { } withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_REGIONS' { - ext.prefix = { "${meta6.id}_rohann_vcfanno_upd_regions_chromograph" } + ext.prefix = { "${regions.simpleName}_chromograph" } ext.args = { '--euploid' } ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } tag = {"${meta6.id}"} @@ -66,17 +69,21 @@ process { ] } + withName: '.*ANNOTATE_GENOME_SNVS:ZIP_TABIX_VCFANNO' { + ext.prefix = { "${input.simpleName}" } + } + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_rohann_vcfanno_filter" } + ext.prefix = { "${vcf.simpleName}_filter" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } } withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { - ext.prefix = { "${meta.id}_${intervals.simpleName}" } + ext.prefix = { "${vcf.simpleName}_${intervals.simpleName}" } } withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { - ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_vep" } + ext.prefix = { "${meta.prefix}_vep_${meta.scatterid}" } ext.args = { [ '--dir_plugins vep_cache/Plugins', '--plugin LoFtool,LoFtool_scores.txt', @@ -94,7 +101,7 @@ process { } withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { - ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } + ext.prefix = { "${meta.prefix}_vep" } publishDir = [ path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 45260fb2..3e25c36f 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -16,49 +16,52 @@ // process { - if (!params.skip_mt_annotation) { - withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { - ext.args = { [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,LoFtool_scores.txt', - '--plugin pLI,pLI_values.txt', - '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--distance 0', - '--buffer_size 20000', - '--format vcf --fork 4 --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', - '--uniprot' - ].join(' ') } - } + withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { + ext.args = { [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,LoFtool_scores.txt', + '--plugin pLI,pLI_values.txt', + '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--distance 0', + '--buffer_size 20000', + '--format vcf --fork 4 --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl --vcf', + '--uniprot' + ].join(' ') } + ext.prefix = { "${meta.prefix}" } + } - withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { - ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/mitochondria" }, - mode: params.publish_dir_mode, - pattern: "*{vcf.gz,vcf.gz.tbi}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_MT_SNVS:VCFANNO_MT' { + ext.prefix = { "${meta.prefix}" } + } - withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { - ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } - ext.args = '--offline' - publishDir = [ - enabled: false - ] - } + withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { + ext.prefix = { "${meta.prefix}" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/mitochondria" }, + mode: params.publish_dir_mode, + pattern: "*{vcf.gz,vcf.gz.tbi}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { + ext.prefix = { "${meta.prefix}_uncompressed" } + ext.args = '--offline' + publishDir = [ + enabled: false + ] + } - withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { - ext.prefix = { "${meta.id}_haplogrep" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/mitochondria" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { + ext.prefix = { "${meta.prefix}_haplogrep" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/mitochondria" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index 62faeda7..f8666a82 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -35,7 +35,7 @@ process { } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { - ext.prefix = { "${meta.id}_sortvcf" } + ext.prefix = { "${meta.id}_svdbquery" } } withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config index 3a59868d..f8da7840 100644 --- a/conf/modules/call_structural_variants.config +++ b/conf/modules/call_structural_variants.config @@ -24,6 +24,7 @@ process { } withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { + ext.prefix = {"${meta.id}_sv"} ext.args = '--pass_only --same_order' publishDir = [ path: { "${params.outdir}/call_sv/genome" }, diff --git a/conf/modules/generate_clinical_set.config b/conf/modules/generate_clinical_set.config index 794e284b..4ab31579 100644 --- a/conf/modules/generate_clinical_set.config +++ b/conf/modules/generate_clinical_set.config @@ -27,11 +27,6 @@ process { withName: '.*:GENERATE_CLINICAL_SET_SNV:TABIX_BGZIP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_snv_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } } @@ -40,18 +35,13 @@ process { process { withName: '.*:GENERATE_CLINICAL_SET_SV:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_sv_${meta.set}" } + ext.prefix = { "${input.simpleName}_sv_${meta.set}" } ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } } withName: '.*:GENERATE_CLINICAL_SET_SV:TABIX_BGZIP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_sv_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } } @@ -67,10 +57,5 @@ process { withName: '.*:GENERATE_CLINICAL_SET_MT:TABIX_BGZIP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_mt_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } } diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 93b0f2db..d57670c7 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -48,6 +48,7 @@ process { withName: '.*QC_BAM:UCSC_WIGTOBIGWIG' { ext.args = '-clip' + ext.prefix = { "${meta.id}_tidditcov" } } withName: '.*QC_BAM:CHROMOGRAPH_COV' { diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index b65d55ab..a17dee05 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -31,8 +31,8 @@ process { ].join(' ') } } - withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { - ext.prefix = { "${meta.id}_snv_genmod_models_${meta.set}" } + withName: '.*RANK_VARIANTS_SV:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_sv_genmod_models_${meta.set}" } ext.args = " --whole_gene " } diff --git a/docs/output.md b/docs/output.md index 4edd4376..0df151b9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -265,8 +265,8 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ Output files - `call_snv/genome` - - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. - - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. + - `_nomito.vcf.gz`: normalized vcf file containing no MT variants. + - `_nomito.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -278,8 +278,8 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. Output files - `call_snv/genome` - - `_nomito.selectvariants.vcf.gz`: normalized vcf file containing no MT variants. - - `_nomito.selectvariants.vcf.gz.tbi`: index of the vcf file containing no MT variants. + - `_nomito.vcf.gz`: normalized vcf file containing no MT variants. + - `_nomito.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -381,8 +381,8 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e Output files - `annotate_snv/genome` - - `_rohann_vcfanno_filter_vep.vcf.gz`: file containing bcftools roh, vcfanno, and vep annotations. - - `_rohann_vcfanno_filter_vep.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, and vep annotations. + - `_rhocall_vcfanno_filter_.vcf.gz`: file containing bcftools roh, vcfanno, cadd and vep annotations. + - `_rhocall_vcfanno_filter_.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, cadd and vep annotations. @@ -455,7 +455,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen [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. - `call_sv/mitochondria` - - `.txt`: file containing deletions. + - `_mt_del.txt`: file containing deletions. ##### eKLIPse @@ -476,7 +476,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen Output files - `annotate_snv/mitochondria` - - `_haplogrep.txt`: file containing haplogroup information. + - `_mitochondria_haplogrep.txt`: file containing haplogroup information. @@ -502,8 +502,8 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Output files - `annotate_snv/mitochondria` - - `_vep_vcfanno_hmtnote_mt.vcf.gz`: file containing mitochondrial annotations. - - `_vep_vcfanno_hmtnote_mt.vcf.gz.tbi`: index of the file containing mitochondrial annotations. + - `_mitochondria_vep_vcfanno_hmtnote.vcf.gz`: file containing mitochondrial annotations. + - `_mitochondria_vep_vcfanno_hmtnote.vcf.gz.tbi`: index of the file containing mitochondrial annotations. diff --git a/modules.json b/modules.json index e98107a0..cf999956 100644 --- a/modules.json +++ b/modules.json @@ -225,7 +225,7 @@ }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "47cd015ac64f0294ae65a589693604127132a686", "installed_by": ["modules"] }, "gatk4/shiftfasta": { @@ -281,7 +281,8 @@ "hmtnote/annotate": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/hmtnote/annotate/hmtnote-annotate.diff" }, "manta/germline": { "branch": "master", @@ -455,7 +456,7 @@ }, "svdb/merge": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d9c95c45db561814ff6c46a0c0574581e81beaae", "installed_by": ["modules"] }, "svdb/query": { diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index f81a019b..139d7835 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -11,9 +11,9 @@ process GATK4_SELECTVARIANTS { tuple val(meta), path(vcf), path(vcf_idx), path (intervals) output: - tuple val(meta), path("*.selectvariants.vcf.gz") , emit: vcf - tuple val(meta), path("*.selectvariants.vcf.gz.tbi") , emit: tbi - path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -33,7 +33,7 @@ process GATK4_SELECTVARIANTS { gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ SelectVariants \\ --variant $vcf \\ - --output ${prefix}.selectvariants.vcf.gz \\ + --output ${prefix}.vcf.gz \\ $interval \\ --tmp-dir . \\ $args @@ -47,8 +47,8 @@ process GATK4_SELECTVARIANTS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.selectvariants.vcf.gz - touch ${prefix}.selectvariants.vcf.gz.tbi + touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/selectvariants/tests/main.nf.test b/modules/nf-core/gatk4/selectvariants/tests/main.nf.test new file mode 100644 index 00000000..d1622dad --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/tests/main.nf.test @@ -0,0 +1,64 @@ +nextflow_process { + + name "Test Process GATK4_SELECTVARIANTS" + script "modules/nf-core/gatk4/selectvariants/main.nf" + process "GATK4_SELECTVARIANTS" + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/selectvariants" + + test("selectvariants - vcf input") { + + when { + params { + // define parameters here. Example: + // outdir = "tests/results" + } + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_idx'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['genome_interval_list'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + + } + + test("selectvariants - gz input") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), + [] + ] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/selectvariants/tests/tags.yml b/modules/nf-core/gatk4/selectvariants/tests/tags.yml new file mode 100644 index 00000000..d9fb50f7 --- /dev/null +++ b/modules/nf-core/gatk4/selectvariants/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/selectvariants: + - "modules/nf-core/gatk4/selectvariants/**" diff --git a/modules/nf-core/hmtnote/annotate/hmtnote-annotate.diff b/modules/nf-core/hmtnote/annotate/hmtnote-annotate.diff new file mode 100644 index 00000000..3723cf2f --- /dev/null +++ b/modules/nf-core/hmtnote/annotate/hmtnote-annotate.diff @@ -0,0 +1,42 @@ +Changes in module 'nf-core/hmtnote/annotate' +--- modules/nf-core/hmtnote/annotate/main.nf ++++ modules/nf-core/hmtnote/annotate/main.nf +@@ -11,7 +11,7 @@ + tuple val(meta), path(vcf) + + output: +- tuple val(meta), path("*_annotated.vcf"), emit: vcf ++ tuple val(meta), path("${prefix}.vcf"), emit: vcf + path "versions.yml" , emit: versions + + when: +@@ -19,13 +19,13 @@ + + script: + def args = task.ext.args ?: '' +- def prefix = task.ext.prefix ?: "${meta.id}" ++ prefix = task.ext.prefix ?: "${meta.id}" + + """ + hmtnote \\ + annotate \\ + $vcf \\ +- ${prefix}_annotated.vcf \\ ++ ${prefix}.vcf \\ + $args + + cat <<-END_VERSIONS > versions.yml +@@ -34,9 +34,9 @@ + END_VERSIONS + """ + stub: +- def prefix = task.ext.prefix ?: "${meta.id}" ++ prefix = task.ext.prefix ?: "${meta.id}" + """ +- touch ${prefix}_annotated.vcf ++ touch ${prefix}.vcf + cat <<-END_VERSIONS > versions.yml + "${task.process}": + hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) + +************************************************************ diff --git a/modules/nf-core/hmtnote/annotate/main.nf b/modules/nf-core/hmtnote/annotate/main.nf index 2fca73f4..8d727df3 100644 --- a/modules/nf-core/hmtnote/annotate/main.nf +++ b/modules/nf-core/hmtnote/annotate/main.nf @@ -11,7 +11,7 @@ process HMTNOTE_ANNOTATE { tuple val(meta), path(vcf) output: - tuple val(meta), path("*_annotated.vcf"), emit: vcf + tuple val(meta), path("${prefix}.vcf"), emit: vcf path "versions.yml" , emit: versions when: @@ -19,13 +19,13 @@ process HMTNOTE_ANNOTATE { script: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" """ hmtnote \\ annotate \\ $vcf \\ - ${prefix}_annotated.vcf \\ + ${prefix}.vcf \\ $args cat <<-END_VERSIONS > versions.yml @@ -34,9 +34,9 @@ process HMTNOTE_ANNOTATE { END_VERSIONS """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_annotated.vcf + touch ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": hmtnote: \$(echo \$(hmtnote --version 2>&1) | sed 's/^.*hmtnote, version //; s/Using.*\$//' )) diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 0d9967dd..827d11b3 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -11,7 +11,7 @@ process SVDB_MERGE { val (priority) output: - tuple val(meta), path("*_sv_merge.vcf.gz"), emit: vcf + tuple val(meta), path("*.vcf.gz"), emit: vcf path "versions.yml" , emit: versions when: @@ -35,8 +35,8 @@ process SVDB_MERGE { $args \\ $prio \\ --vcf $input \\ - > ${prefix}_sv_merge.vcf - bgzip ${prefix}_sv_merge.vcf + > ${prefix}.vcf + bgzip ${prefix}.vcf cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -48,7 +48,7 @@ process SVDB_MERGE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_sv_merge.vcf.gz + touch ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/svdb/merge/tests/main.nf.test b/modules/nf-core/svdb/merge/tests/main.nf.test new file mode 100644 index 00000000..f06b5998 --- /dev/null +++ b/modules/nf-core/svdb/merge/tests/main.nf.test @@ -0,0 +1,57 @@ +nextflow_process { + + name "Test Process SVDB_MERGE" + script "modules/nf-core/svdb/merge/main.nf" + process "SVDB_MERGE" + tag "modules" + tag "modules_nfcore" + tag "svdb" + tag "svdb/merge" + + test("test_svdb_merge") { + + when { + process { + """ + input[0] = [[ id:'test' ], // meta map + [file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists: true) ] + ] + input[1] = [ 'tiddit', 'cnvnator'] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") } + ) + } + + } + + test("test_svdb_merge_noprio") { + + when { + process { + """ + input[0] = [[ id:'test' ], // meta map + [file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists: true) ] + ] + input[1] = [] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") } + ) + } + + } + +} diff --git a/modules/nf-core/svdb/merge/tests/tags.yml b/modules/nf-core/svdb/merge/tests/tags.yml new file mode 100644 index 00000000..8501d907 --- /dev/null +++ b/modules/nf-core/svdb/merge/tests/tags.yml @@ -0,0 +1,2 @@ +svdb/merge: + - modules/nf-core/svdb/merge/** diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index fe59303d..e2f10a1e 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -93,7 +93,7 @@ workflow ANNOTATE_GENOME_SNVS { .combine(ch_split_intervals) .map { meta, vcf, tbi, interval -> - return [meta + [scatterid:interval.baseName], vcf, tbi, interval] + return [meta + [scatterid:interval.baseName, prefix: vcf.simpleName], vcf, tbi, interval] } .set { ch_vcf_scatter_in } @@ -118,7 +118,7 @@ workflow ANNOTATE_GENOME_SNVS { selvar: it[2].equals(null) return [it[0], it[1]] cadd: !(it[2].equals(null)) - return [it[0], it[2]] + return [it[0] + [prefix: it[0].prefix + "_cadd"], it[2]] } .set { ch_for_mix } @@ -156,9 +156,13 @@ workflow ANNOTATE_GENOME_SNVS { BCFTOOLS_CONCAT (ch_concat_in) - TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) + BCFTOOLS_CONCAT.out.vcf + .map { meta, vcf -> [meta - meta.subMap('prefix'), vcf] } + .set { ch_concat_out } - ch_vep_ann = BCFTOOLS_CONCAT.out.vcf + TABIX_BCFTOOLS_CONCAT (ch_concat_out) + + ch_vep_ann = ch_concat_out ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index e7b8ae6a..5cbf261f 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -46,9 +46,9 @@ workflow ANNOTATE_MT_SNVS { .join(ch_cadd_vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] merged: it[2].equals(null) - return [it[0], it[1]] + return [it[0]+ [prefix: it[1].simpleName + "_vep"], it[1]] cadd: !(it[2].equals(null)) - return [it[0], it[2]] + return [it[0] + [prefix: it[1].simpleName + "_cadd_vep"], it[2]] } .set { ch_for_mix } @@ -73,15 +73,18 @@ workflow ANNOTATE_MT_SNVS { TABIX_TABIX_MT(ENSEMBLVEP_MT.out.vcf) ENSEMBLVEP_MT.out.vcf .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) - .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} + .map { meta, vcf, tbi -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, []]} .set { ch_in_vcfanno } - VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) + VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources).vcf + .map { meta, vcf -> return [meta + [prefix: meta.prefix + "_hmtnote"], vcf]} + .set {ch_hmtnote_in} // HMTNOTE ANNOTATE - HMTNOTE_ANNOTATE(VCFANNO_MT.out.vcf) - HMTNOTE_ANNOTATE.out.vcf.map{meta, vcf -> - return [meta, WorkflowRaredisease.replaceSpacesInInfoColumn(vcf, vcf.parent.toString(), vcf.baseName)] + HMTNOTE_ANNOTATE(ch_hmtnote_in) + HMTNOTE_ANNOTATE.out.vcf + .map{meta, vcf -> + return [meta, WorkflowRaredisease.replaceSpacesInInfoColumn(vcf, vcf.parent.toString(), vcf.baseName)] } .set { ch_hmtnote_reformatted } ZIP_TABIX_HMTNOTE(ch_hmtnote_reformatted) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index d2d42027..db73f5a1 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -95,7 +95,9 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { PICARD_SORTVCF(ch_querypedbed_out, ch_genome_fasta, ch_genome_dictionary) - PICARD_SORTVCF.out.vcf.map { meta, vcf -> return [meta,vcf,[]] }.set { ch_sortvcf } + PICARD_SORTVCF.out.vcf + .map { meta, vcf -> return [meta,vcf,[]] } + .set { ch_sortvcf } BCFTOOLS_VIEW(ch_sortvcf, [], [], []) .vcf From 2d3982cdbf1c1a282927c50979c9f9148825237d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:24:32 +0100 Subject: [PATCH 1639/1921] update mt_delsuffix --- modules/local/mt_deletion_script.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/mt_deletion_script.nf b/modules/local/mt_deletion_script.nf index 02d55876..f363b949 100644 --- a/modules/local/mt_deletion_script.nf +++ b/modules/local/mt_deletion_script.nf @@ -38,7 +38,7 @@ process MT_DELETION { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}_mt_del.txt + touch ${prefix}.txt cat <<-END_VERSIONS > versions.yml "${task.process}": From 62d5ae74022c14476cd13370992e3308b8df7eda Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:25:16 +0100 Subject: [PATCH 1640/1921] update docs --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 61ec49c8..e98721db 100644 --- a/docs/output.md +++ b/docs/output.md @@ -456,7 +456,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen [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. - `call_sv/mitochondria` - - `_mt_del.txt`: file containing deletions. + - `.txt`: file containing deletions. ##### eKLIPse From 3099751ff9f7d469e01361e45ad5d0e3c00c27bf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 16 Feb 2024 13:55:29 +0100 Subject: [PATCH 1641/1921] review suggestions --- conf/modules/call_snv.config | 2 +- conf/modules/call_sv_MT.config | 1 + docs/output.md | 10 +++++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config index 92eda8cf..1170d515 100644 --- a/conf/modules/call_snv.config +++ b/conf/modules/call_snv.config @@ -21,7 +21,7 @@ process { withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { ext.args = { "--exclude-intervals ${params.mito_name}" } - ext.prefix = { "${meta.id}_nomito" } + ext.prefix = { "${meta.id}_snv" } publishDir = [ path: { "${params.outdir}/call_snv/genome" }, mode: params.publish_dir_mode, diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config index b7022829..05f98e84 100644 --- a/conf/modules/call_sv_MT.config +++ b/conf/modules/call_sv_MT.config @@ -19,6 +19,7 @@ process { withName: '.*CALL_SV_MT:MT_DELETION' { ext.args = '-s --insert-size 16000' + ext.prefix = { "${meta.id}_mitochondria_deletions" } publishDir = [ path: { "${params.outdir}/call_sv/mitochondria" }, mode: params.publish_dir_mode, diff --git a/docs/output.md b/docs/output.md index e98721db..281ac7dd 100644 --- a/docs/output.md +++ b/docs/output.md @@ -266,8 +266,8 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ Output files - `call_snv/genome` - - `_nomito.vcf.gz`: normalized vcf file containing no MT variants. - - `_nomito.vcf.gz.tbi`: index of the vcf file containing no MT variants. + - `_snv.vcf.gz`: normalized vcf file containing no MT variants. + - `_snv.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -279,8 +279,8 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. Output files - `call_snv/genome` - - `_nomito.vcf.gz`: normalized vcf file containing no MT variants. - - `_nomito.vcf.gz.tbi`: index of the vcf file containing no MT variants. + - `_snv.vcf.gz`: normalized vcf file containing no MT variants. + - `_snv.vcf.gz.tbi`: index of the vcf file containing no MT variants. @@ -456,7 +456,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen [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. - `call_sv/mitochondria` - - `.txt`: file containing deletions. + - `_mitochondria_deletions.txt`: file containing deletions. ##### eKLIPse From 0e10aec89ee2f9750993f3c0abb7194766847dd3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Feb 2024 00:30:28 +0100 Subject: [PATCH 1642/1921] update modules.json --- modules.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules.json b/modules.json index 3e3e0ebc..5c9cf3ff 100644 --- a/modules.json +++ b/modules.json @@ -101,11 +101,6 @@ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, - "custom/dumpsoftwareversions": { - "branch": "master", - "git_sha": "8ec825f465b9c17f9d83000022995b4f7de6fe93", - "installed_by": ["modules"] - }, "deepvariant": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", From b8b151d37b498be0c342c25522205da84301ad87 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Feb 2024 13:43:18 +0100 Subject: [PATCH 1643/1921] move function to utils --- subworkflows/local/annotate_mt_snvs.nf | 17 +---------------- .../utils_nfcore_raredisease_pipeline/main.nf | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 7b6f6123..f28744f6 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -2,6 +2,7 @@ // Annotate MT // +include { replaceSpacesInInfoColumn } from './utils_nfcore_raredisease_pipeline/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' include { ENSEMBLVEP_VEP as ENSEMBLVEP_MT } from '../../modules/nf-core/ensemblvep/vep/main' include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../modules/nf-core/haplogrep2/classify/main' @@ -109,19 +110,3 @@ workflow ANNOTATE_MT_SNVS { report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] versions = ch_versions // channel: [ path(versions.yml) ] } - -def replaceSpacesInInfoColumn(vcf_file, parent_dir, base_name) { - def outfile = new File(parent_dir + '/' + base_name + '_formatted.vcf') - def writer = outfile.newWriter() - vcf_file.eachLine { line -> - if (line.startsWith("#")) { - writer << line + "\n" - } else { - def split_str = line.tokenize("\t") - split_str[7] = split_str.getAt(7).replaceAll(" ","_") - writer << split_str.join("\t") + "\n" - } - } - writer.close() - return outfile -} diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 9af82548..a99c6ed0 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -187,6 +187,24 @@ def getGenomeAttribute(attribute) { } return null } +// +// Replace spaces in vcf files with underscores +// +def replaceSpacesInInfoColumn(vcf_file, parent_dir, base_name) { + def outfile = new File(parent_dir + '/' + base_name + '_formatted.vcf') + def writer = outfile.newWriter() + vcf_file.eachLine { line -> + if (line.startsWith("#")) { + writer << line + "\n" + } else { + def split_str = line.tokenize("\t") + split_str[7] = split_str.getAt(7).replaceAll(" ","_") + writer << split_str.join("\t") + "\n" + } + } + writer.close() + return outfile +} // // Exit pipeline if incorrect --genome key provided From 72b6fc43a5f2132918b3c9d5369afdc725625a70 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Feb 2024 15:10:12 +0100 Subject: [PATCH 1644/1921] update ci --- .github/workflows/ci.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a50230b8..99541374 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,13 +30,6 @@ jobs: - "-profile test,docker" - "-profile test_one_sample,docker" steps: - - name: Free some space - run: | - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - - name: Check out pipeline code uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 From 9a751d6c02aab7164f1ee748db5bbc8aa07c1cec Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Feb 2024 13:39:58 +0100 Subject: [PATCH 1645/1921] vcf2cytosure rename samples --- assets/sample_id_map.json | 24 +++++++++++++++ conf/modules/generate_cytosure_files.config | 7 +++++ nextflow.config | 1 + nextflow_schema.json | 11 +++++++ subworkflows/local/generate_cytosure_files.nf | 29 +++++++++++++------ workflows/raredisease.nf | 3 ++ 6 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 assets/sample_id_map.json diff --git a/assets/sample_id_map.json b/assets/sample_id_map.json new file mode 100644 index 00000000..aaba0319 --- /dev/null +++ b/assets/sample_id_map.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", + "title": "Schema for customerid_internalid_map", + "description": "Schema for the file provided with params.customerid_internalid_map", + "type": "array", + "items": { + "type": "object", + "properties": { + "customer_id": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Customer id cannot contain spaces" + }, + "internal_id": { + "type": "string", + "pattern": "^\\S+$", + "errorMessage": "Internal id cannot contain spaces", + "meta": ["id"] + } + }, + "required": ["customer_id", "internal_id"] + } +} diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index 323b64e3..b052206c 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -33,6 +33,13 @@ process { ext.prefix = { ${meta.id} } } + withName: '.*GENERATE_CYTOSURE_FILES:BCFTOOLS_REHEADER_SV_VCF' { + beforeScript = { "echo ${meta.custid} > ${meta.custid}.txt" } + ext.args = { "--samples ${meta.custid}.txt" } + ext.args2 = "--output-type v" + ext.prefix = { ${meta.id} } + } + withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { ext.args = { [ meta.sex.equals(1) ? '--sex male' : '--sex female', diff --git a/nextflow.config b/nextflow.config index 110fd186..d8591f15 100644 --- a/nextflow.config +++ b/nextflow.config @@ -74,6 +74,7 @@ params { reduced_penetrance = null readcount_intervals = null rtg_truthvcfs = null + sample_id_map = null sequence_dictionary = null score_config_mt = null score_config_snv = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 8230597d..0fbfdad4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -375,6 +375,17 @@ "help_text": "Should be Stranger's extended JSON as described at https://github.com/Clinical-Genomics/stranger/blob/master/stranger/resources/variant_catalog_grch37.json. This file is used by both ExpansionHunter and Stranger", "fa_icon": "fas fa-file" }, + "sample_id_map": { + "type": "string", + "exists": true, + "format": "file-path", + "description": "Path to a file containing internal ids and customer ids in csv format.", + "fa_icon": "fas fa-file-csv", + "mimetype": "text/csv", + "schema": "assets/sample_id_map.json", + "help_text": "Optional file to rename sample ids in the vcf2cytosure vcf", + "pattern": "^\\S+\\.csv$" + }, "vcf2cytosure_blacklist": { "type": "string", "help_text": "Optional file to blacklist regions for VCF2cytosure", diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf index 561411ab..036ed595 100644 --- a/subworkflows/local/generate_cytosure_files.nf +++ b/subworkflows/local/generate_cytosure_files.nf @@ -2,16 +2,18 @@ // Convert VCF with structural variations to the “.CGH” format used by the CytoSure Interpret Software // -include { BCFTOOLS_VIEW as SPLIT_AND_FILTER_SV_VCF } from '../../modules/nf-core/bcftools/view/main' -include { TIDDIT_COV as TIDDIT_COV_VCF2CYTOSURE } from '../../modules/nf-core/tiddit/cov/main' -include { VCF2CYTOSURE } from '../../modules/nf-core/vcf2cytosure/main' +include { BCFTOOLS_VIEW as SPLIT_AND_FILTER_SV_VCF } from '../../modules/nf-core/bcftools/view/main' +include { BCFTOOLS_REHEADER as BCFTOOLS_REHEADER_SV_VCF } from '../../modules/nf-core/bcftools/reheader/main' +include { TIDDIT_COV as TIDDIT_COV_VCF2CYTOSURE } from '../../modules/nf-core/tiddit/cov/main' +include { VCF2CYTOSURE } from '../../modules/nf-core/vcf2cytosure/main' workflow GENERATE_CYTOSURE_FILES { take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] - ch_tbi // channel: [mandatory] [ val(meta), path(vcf_index) ] - ch_bam // channel: [mandatory] [ val(meta), path(bam) ] - ch_blacklist // channel: [optional] [path(blacklist)] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_tbi // channel: [mandatory] [ val(meta), path(vcf_index) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_sample_id_map // channel: [optional] [val(id), val(id)] + ch_blacklist // channel: [optional] [path(blacklist)] main: ch_versions = Channel.empty() @@ -24,14 +26,22 @@ workflow GENERATE_CYTOSURE_FILES { ch_bam.combine(ch_vcf_tbi).map { meta_sample, bam, meta_case, vcf, tbi -> - return [ meta_sample, vcf, tbi ] + new_meta = ['id':meta_sample.sample] + return [ new_meta, vcf, tbi ] }.set { ch_sample_vcf } // Split vcf into sample vcf:s and frequency filter SPLIT_AND_FILTER_SV_VCF ( ch_sample_vcf, [], [], [] ) + SPLIT_AND_FILTER_SV_VCF.out.vcf + .join(ch_sample_id_map) + .map { meta, vcf, custid -> return [meta+[custid:custid], vcf, [], []]} + .set { ch_reheader_in } + + BCFTOOLS_REHEADER_SV_VCF ( ch_reheader_in, [[:],[]] ) + VCF2CYTOSURE ( - SPLIT_AND_FILTER_SV_VCF.out.vcf, + BCFTOOLS_REHEADER_SV_VCF.out.vcf, TIDDIT_COV_VCF2CYTOSURE.out.cov, [[:], []], [[:], []], ch_blacklist @@ -40,6 +50,7 @@ workflow GENERATE_CYTOSURE_FILES { ch_versions = ch_versions.mix(TIDDIT_COV_VCF2CYTOSURE.out.versions.first()) ch_versions = ch_versions.mix(SPLIT_AND_FILTER_SV_VCF.out.versions.first()) ch_versions = ch_versions.mix(VCF2CYTOSURE.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_SV_VCF.out.versions.first()) emit: versions = ch_versions // channel: [ versions.yml ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1a5b85e0..ae4eb986 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -244,6 +244,8 @@ workflow RAREDISEASE { : Channel.value([]) ch_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() : Channel.value([]) + ch_sample_id_map = params.sample_id_map ? Channel.fromSamplesheet("sample_id_map") + : Channel.value([]) ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() @@ -613,6 +615,7 @@ workflow RAREDISEASE { ch_sv_annotate.vcf_ann, ch_sv_annotate.tbi, ch_mapped.genome_marked_bam, + ch_sample_id_map, ch_vcf2cytosure_blacklist ) ch_versions = ch_versions.mix(GENERATE_CYTOSURE_FILES.out.versions) From 1d3b525c79965cd7e34b9b70197e7ab92857c020 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:32:15 +0100 Subject: [PATCH 1646/1921] update config --- conf/modules/generate_cytosure_files.config | 6 +- subworkflows/local/generate_cytosure_files.nf | 56 +++++++++++++++---- workflows/raredisease.nf | 2 +- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index b052206c..1cd076f3 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -30,14 +30,14 @@ process { '--output-type z', "--exclude 'gnomad_svAF > 0.05'" ].join(' ') } - ext.prefix = { ${meta.id} } + ext.prefix = { "${meta.id}" } } withName: '.*GENERATE_CYTOSURE_FILES:BCFTOOLS_REHEADER_SV_VCF' { beforeScript = { "echo ${meta.custid} > ${meta.custid}.txt" } ext.args = { "--samples ${meta.custid}.txt" } ext.args2 = "--output-type v" - ext.prefix = { ${meta.id} } + ext.prefix = { "${meta.custid}" } } withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { @@ -46,7 +46,7 @@ process { '--size 5000', '--maxbnd 5000' ].join(' ') } - ext.prefix = { "${meta.id}" } + ext.prefix = { "${meta.custid}" ? "${meta.custid}" : "${meta.id}" } publishDir = [ path: { "${params.outdir}/vcf2cytosure" }, mode: params.publish_dir_mode, diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf index 036ed595..0f480a02 100644 --- a/subworkflows/local/generate_cytosure_files.nf +++ b/subworkflows/local/generate_cytosure_files.nf @@ -16,7 +16,8 @@ workflow GENERATE_CYTOSURE_FILES { ch_blacklist // channel: [optional] [path(blacklist)] main: - ch_versions = Channel.empty() + ch_versions = Channel.empty() + ch_reheader_out = Channel.empty() TIDDIT_COV_VCF2CYTOSURE (ch_bam, [[],[]]) @@ -24,24 +25,56 @@ workflow GENERATE_CYTOSURE_FILES { ch_vcf.join( ch_tbi, failOnMismatch: true ) .set { ch_vcf_tbi } - ch_bam.combine(ch_vcf_tbi).map { - meta_sample, bam, meta_case, vcf, tbi -> - new_meta = ['id':meta_sample.sample] - return [ new_meta, vcf, tbi ] - }.set { ch_sample_vcf } + ch_bam.combine(ch_vcf_tbi) + .map { + meta_sample, bam, meta_case, vcf, tbi -> + new_meta = ['id':meta_sample.sample] + return [ new_meta, vcf, tbi ] + } + .join(ch_sample_id_map, remainder: true) + .branch { it -> + id: it[3].equals(null) + return [it[0] + [custid:it[0].id], it[1], it[2]] + custid: !(it[3].equals(null)) + return [it[0] + [custid:it[3]], it[1], it[2]] + } + .set { ch_for_mix } + + Channel.empty() + .mix(ch_for_mix.id, ch_for_mix.custid) + .set { ch_sample_vcf } // Split vcf into sample vcf:s and frequency filter SPLIT_AND_FILTER_SV_VCF ( ch_sample_vcf, [], [], [] ) + if (params.sample_id_map != null) { + + SPLIT_AND_FILTER_SV_VCF.out.vcf + .map { meta, vcf -> return [meta, vcf, [], []]} + .set { ch_reheader_in } + + BCFTOOLS_REHEADER_SV_VCF ( ch_reheader_in, [[:],[]] ).vcf + .set {ch_reheader_out} + + ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_SV_VCF.out.versions.first()) + } + SPLIT_AND_FILTER_SV_VCF.out.vcf - .join(ch_sample_id_map) - .map { meta, vcf, custid -> return [meta+[custid:custid], vcf, [], []]} - .set { ch_reheader_in } + .join(ch_reheader_out, remainder: true) + .branch { it -> + split: it[2].equals(null) + return [it[0], it[1]] + reheader: !(it[2].equals(null)) + return [it[0], it[2]] + } + .set { ch_for_mix } - BCFTOOLS_REHEADER_SV_VCF ( ch_reheader_in, [[:],[]] ) + Channel.empty() + .mix(ch_for_mix.split, ch_for_mix.reheader) + .set { ch_vcf2cytosure_in } VCF2CYTOSURE ( - BCFTOOLS_REHEADER_SV_VCF.out.vcf, + ch_vcf2cytosure_in, TIDDIT_COV_VCF2CYTOSURE.out.cov, [[:], []], [[:], []], ch_blacklist @@ -50,7 +83,6 @@ workflow GENERATE_CYTOSURE_FILES { ch_versions = ch_versions.mix(TIDDIT_COV_VCF2CYTOSURE.out.versions.first()) ch_versions = ch_versions.mix(SPLIT_AND_FILTER_SV_VCF.out.versions.first()) ch_versions = ch_versions.mix(VCF2CYTOSURE.out.versions.first()) - ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_SV_VCF.out.versions.first()) emit: versions = ch_versions // channel: [ versions.yml ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ae4eb986..47983d38 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -245,7 +245,7 @@ workflow RAREDISEASE { ch_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() : Channel.value([]) ch_sample_id_map = params.sample_id_map ? Channel.fromSamplesheet("sample_id_map") - : Channel.value([]) + : Channel.empty() ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() From 6c0a241a04fb5fd0c5713fd0cc286e99ac0dbb17 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:25:14 +0100 Subject: [PATCH 1647/1921] add rename_align_files --- modules/local/rename_align_files.nf | 30 +++++++++++++++++++++++++++++ workflows/raredisease.nf | 23 +++++++++++++++------- 2 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 modules/local/rename_align_files.nf diff --git a/modules/local/rename_align_files.nf b/modules/local/rename_align_files.nf new file mode 100644 index 00000000..da9f890b --- /dev/null +++ b/modules/local/rename_align_files.nf @@ -0,0 +1,30 @@ +process RENAME_ALIGN_FILES { + tag "$meta.id" + label 'process_single' + + 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' : + 'biocontainers/gnu-wget:1.18--0' }" + + input: + tuple val(meta), path(input) + val(extension) + + output: + path("*.{bam,bai}"), emit: output + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + ln -s $input ${meta.sample}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + ln: \$(echo \$(ln --version 2>&1 | head -n 1 | cut -d ' ' -f4)) + END_VERSIONS + """ +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1a5b85e0..f6c8d3c5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -101,9 +101,16 @@ if (missingParamsCount>0) { // MODULE: Installed directly from nf-core/modules // -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' -include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' +include { FASTQC } from '../modules/nf-core/fastqc/main' +include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' + +// +// MODULE: Local modules +// + +include { RENAME_ALIGN_FILES as RENAME_BAM_FOR_SMNCALLER } from '../modules/local/rename_align_files' +include { RENAME_ALIGN_FILES as RENAME_BAI_FOR_SMNCALLER } from '../modules/local/rename_align_files' // // SUBWORKFLOWS @@ -578,13 +585,13 @@ workflow RAREDISEASE { } // STEP 1.7: SMNCOPYNUMBERCALLER - ch_mapped.genome_bam_bai - .collect{it[1]} + RENAME_BAM_FOR_SMNCALLER(ch_mapped.genome_marked_bam, "bam").output + .collect{it} .toList() .set { ch_bam_list } - ch_mapped.genome_bam_bai - .collect{it[2]} + RENAME_BAI_FOR_SMNCALLER(ch_mapped.genome_marked_bai, "bam.bai").output + .collect{it} .toList() .set { ch_bai_list } @@ -596,6 +603,8 @@ workflow RAREDISEASE { SMNCOPYNUMBERCALLER ( ch_bams_bais ) + ch_versions = ch_versions.mix(RENAME_BAM_FOR_SMNCALLER.out.versions) + ch_versions = ch_versions.mix(RENAME_BAI_FOR_SMNCALLER.out.versions) ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) // ped correspondence, sex check, ancestry check From 82fbae9cb5f5c9bb56de38f14c35604f21bbc0e3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Feb 2024 01:38:39 +0100 Subject: [PATCH 1648/1921] chromograph autozyg --- conf/modules/annotate_rhocallviz.config | 11 +++++++++++ docs/output.md | 2 ++ subworkflows/local/annotation/annotate_rhocallviz.nf | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/conf/modules/annotate_rhocallviz.config b/conf/modules/annotate_rhocallviz.config index cfeb8d7e..bf33d35e 100644 --- a/conf/modules/annotate_rhocallviz.config +++ b/conf/modules/annotate_rhocallviz.config @@ -42,6 +42,17 @@ process { ] } + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:CHROMOGRAPH_AUTOZYG' { + ext.prefix = { "${autozyg.simpleName}_autozyg_chromograph" } + ext.args = { "--euploid" } + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*ANNOTATE_GENOME_SNVS:ANNOTATE_RHOCALLVIZ:UCSC_WIGTOBIGWIG' { ext.prefix = { "${meta.sample}_rhocallviz" } ext.args = { "-clip" } diff --git a/docs/output.md b/docs/output.md index 281ac7dd..02258209 100644 --- a/docs/output.md +++ b/docs/output.md @@ -402,6 +402,8 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e - `_rohann_vcfanno_upd_sites_.png`: file containing a plot showing upd sites across chromosomes. - `annotate_snv/genome/*regions_chromograph` - `_rohann_vcfanno_upd_regions_.png`: file containing a plot showing upd regions across chromosomes. +- `annotate_snv/genome/*autozyg_chromograph` + - `_rhocallviz_.png`: file containing a plot showing regions of autozygosity across chromosomes. diff --git a/subworkflows/local/annotation/annotate_rhocallviz.nf b/subworkflows/local/annotation/annotate_rhocallviz.nf index 37aeb02d..c01eda52 100644 --- a/subworkflows/local/annotation/annotate_rhocallviz.nf +++ b/subworkflows/local/annotation/annotate_rhocallviz.nf @@ -8,6 +8,7 @@ include { BCFTOOLS_ROH } from '../../../modules/nf- include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_UNCOMPRESS } from '../../../modules/nf-core/bcftools/view/main' include { RHOCALL_VIZ } from '../../../modules/nf-core/rhocall/viz/main' include { UCSC_WIGTOBIGWIG } from '../../../modules/nf-core/ucsc/wigtobigwig/main' +include { CHROMOGRAPH as CHROMOGRAPH_AUTOZYG } from '../../../modules/nf-core/chromograph/main' workflow ANNOTATE_RHOCALLVIZ { @@ -36,11 +37,14 @@ workflow ANNOTATE_RHOCALLVIZ { BCFTOOLS_VIEW_UNCOMPRESS(ch_roh_in,[],[],[]) - RHOCALL_VIZ( BCFTOOLS_VIEW_UNCOMPRESS.out.vcf, BCFTOOLS_ROH.out.roh) + RHOCALL_VIZ(BCFTOOLS_VIEW_UNCOMPRESS.out.vcf, BCFTOOLS_ROH.out.roh) + + CHROMOGRAPH_AUTOZYG(RHOCALL_VIZ.out.bed, [[],[]], [[],[]], [[],[]], [[],[]], [[],[]], [[],[]]) UCSC_WIGTOBIGWIG(RHOCALL_VIZ.out.wig, ch_genome_chrsizes) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions.first()) + ch_versions = ch_versions.mix(CHROMOGRAPH_AUTOZYG.out.versions.first()) ch_versions = ch_versions.mix(TABIX_TABIX.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_VIEW_UNCOMPRESS.out.versions.first()) From e44865eb090822c325975c44fe6eb3e70139ce9a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:22:45 +0100 Subject: [PATCH 1649/1921] add args --- conf/modules/call_repeat_expansions.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 39934a4b..7fbcdc4c 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -71,6 +71,7 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:SPLIT_MULTIALLELICS_EXP' { + ext.args = '--output-type z --multiallelics -both' ext.prefix = { "${meta.id}_split_exp" } } From a7ef5c91822cb11fcaa1660a4d887f5bb59030bf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:21:42 +0100 Subject: [PATCH 1650/1921] review suggestion --- subworkflows/local/generate_cytosure_files.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/generate_cytosure_files.nf b/subworkflows/local/generate_cytosure_files.nf index 0f480a02..70ec8e81 100644 --- a/subworkflows/local/generate_cytosure_files.nf +++ b/subworkflows/local/generate_cytosure_files.nf @@ -28,7 +28,7 @@ workflow GENERATE_CYTOSURE_FILES { ch_bam.combine(ch_vcf_tbi) .map { meta_sample, bam, meta_case, vcf, tbi -> - new_meta = ['id':meta_sample.sample] + new_meta = ['id':meta_sample.sample, 'sex':meta_sample.sex] return [ new_meta, vcf, tbi ] } .join(ch_sample_id_map, remainder: true) From 7edad86e843e916164bc0d39a8dcbc9c479ba893 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:25:05 +0100 Subject: [PATCH 1651/1921] update files unchanged --- .github/CONTRIBUTING.md | 2 +- .nf-core.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 479c9fef..5b0c2c80 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -29,7 +29,7 @@ If you're not used to this workflow with git, you can start with some [docs from You have the option to test your changes locally by running the pipeline. For receiving warnings about process selectors and other `debug` information, it is recommended to use the debug profile. Execute all the tests with the following command: ```bash -nf-test test --profile debug,test,docker --verbose +nextflow run . -profile debug,test,docker --outdir ``` When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. diff --git a/.nf-core.yml b/.nf-core.yml index 629a06e7..285d7803 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -2,6 +2,7 @@ lint: files_exist: - conf/modules.config files_unchanged: + - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md - docs/images/nf-core-raredisease_logo_dark.png - docs/images/nf-core-raredisease_logo_light.png From ccfa0aa117cb7163e3be0757e18706390ee23fce Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Mar 2024 10:04:25 +0100 Subject: [PATCH 1652/1921] modules update --- modules.json | 82 +-- modules/nf-core/bwa/index/tests/main.nf.test | 4 +- modules/nf-core/bwa/mem/environment.yml | 3 +- modules/nf-core/bwa/mem/main.nf | 4 +- modules/nf-core/bwa/mem/tests/main.nf.test | 21 +- .../nf-core/bwa/mem/tests/main.nf.test.snap | 56 ++- modules/nf-core/bwamem2/mem/environment.yml | 3 +- modules/nf-core/bwamem2/mem/main.nf | 4 +- .../nf-core/bwamem2/mem/tests/main.nf.test | 62 ++- .../bwamem2/mem/tests/main.nf.test.snap | 40 +- modules/nf-core/cat/cat/tests/main.nf.test | 29 +- .../nf-core/cat/cat/tests/main.nf.test.snap | 92 ++-- modules/nf-core/fastp/tests/main.nf.test | 30 +- modules/nf-core/fastp/tests/main.nf.test.snap | 257 +++++++++- .../gatk4/bedtointervallist/environment.yml | 2 +- .../nf-core/gatk4/bedtointervallist/main.nf | 4 +- .../gatk4/collectreadcounts/environment.yml | 2 +- .../nf-core/gatk4/collectreadcounts/main.nf | 4 +- .../createsequencedictionary/environment.yml | 2 +- .../gatk4/createsequencedictionary/main.nf | 4 +- .../gatk4/denoisereadcounts/environment.yml | 2 +- .../nf-core/gatk4/denoisereadcounts/main.nf | 4 +- .../denoisereadcounts/tests/main.nf.test | 75 +++ .../denoisereadcounts/tests/main.nf.test.snap | 29 ++ .../denoisereadcounts/tests/nextflow.config | 9 + .../gatk4/denoisereadcounts/tests/tags.yml | 6 + .../environment.yml | 5 - .../determinegermlinecontigploidy/main.nf | 4 +- .../gatk4/filtermutectcalls/environment.yml | 2 +- .../nf-core/gatk4/filtermutectcalls/main.nf | 4 +- .../gatk4/germlinecnvcaller/environment.yml | 5 - .../nf-core/gatk4/germlinecnvcaller/main.nf | 4 +- .../gatk4/intervallisttools/environment.yml | 2 +- .../nf-core/gatk4/intervallisttools/main.nf | 4 +- .../gatk4/mergebamalignment/environment.yml | 2 +- .../nf-core/gatk4/mergebamalignment/main.nf | 4 +- .../nf-core/gatk4/mergevcfs/environment.yml | 2 +- modules/nf-core/gatk4/mergevcfs/main.nf | 4 +- modules/nf-core/gatk4/mergevcfs/meta.yml | 2 +- .../gatk4/mergevcfs/tests/main.nf.test | 87 ++++ .../gatk4/mergevcfs/tests/main.nf.test.snap | 35 ++ .../nf-core/gatk4/mergevcfs/tests/tags.yml | 2 + modules/nf-core/gatk4/mutect2/environment.yml | 2 +- modules/nf-core/gatk4/mutect2/main.nf | 4 +- .../environment.yml | 5 - .../gatk4/postprocessgermlinecnvcalls/main.nf | 4 +- .../gatk4/preprocessintervals/environment.yml | 2 +- .../nf-core/gatk4/preprocessintervals/main.nf | 4 +- .../nf-core/gatk4/printreads/environment.yml | 2 +- modules/nf-core/gatk4/printreads/main.nf | 4 +- .../nf-core/gatk4/revertsam/environment.yml | 2 +- modules/nf-core/gatk4/revertsam/main.nf | 4 +- .../nf-core/gatk4/samtofastq/environment.yml | 2 +- modules/nf-core/gatk4/samtofastq/main.nf | 4 +- .../gatk4/selectvariants/environment.yml | 2 +- modules/nf-core/gatk4/selectvariants/main.nf | 4 +- .../nf-core/gatk4/shiftfasta/environment.yml | 2 +- modules/nf-core/gatk4/shiftfasta/main.nf | 4 +- .../gatk4/splitintervals/environment.yml | 2 +- modules/nf-core/gatk4/splitintervals/main.nf | 4 +- .../gatk4/variantfiltration/environment.yml | 2 +- .../nf-core/gatk4/variantfiltration/main.nf | 4 +- .../nf-core/samtools/faidx/environment.yml | 3 +- modules/nf-core/samtools/faidx/main.nf | 4 +- .../nf-core/samtools/index/environment.yml | 3 +- modules/nf-core/samtools/index/main.nf | 4 +- .../nf-core/samtools/index/tests/main.nf.test | 36 +- .../samtools/index/tests/main.nf.test.snap | 54 +- .../nf-core/samtools/merge/environment.yml | 3 +- modules/nf-core/samtools/merge/main.nf | 4 +- .../nf-core/samtools/merge/tests/main.nf.test | 125 ++--- .../samtools/merge/tests/main.nf.test.snap | 220 +++++++-- modules/nf-core/samtools/sort/environment.yml | 3 +- modules/nf-core/samtools/sort/main.nf | 4 +- .../nf-core/samtools/sort/tests/main.nf.test | 33 +- .../samtools/sort/tests/main.nf.test.snap | 47 +- .../nf-core/samtools/stats/environment.yml | 4 +- modules/nf-core/samtools/stats/main.nf | 4 +- .../nf-core/samtools/stats/tests/main.nf.test | 53 +- .../samtools/stats/tests/main.nf.test.snap | 32 +- modules/nf-core/samtools/view/environment.yml | 3 +- modules/nf-core/samtools/view/main.nf | 4 +- .../nf-core/samtools/view/tests/main.nf.test | 193 ++++---- .../samtools/view/tests/main.nf.test.snap | 466 +++++++++++++++--- modules/nf-core/sentieon/bwaindex/main.nf | 4 +- modules/nf-core/sentieon/bwamem/main.nf | 4 +- modules/nf-core/sentieon/datametrics/main.nf | 4 +- modules/nf-core/sentieon/dedup/main.nf | 4 +- .../nf-core/sentieon/dnamodelapply/main.nf | 4 +- modules/nf-core/sentieon/dnascope/main.nf | 4 +- modules/nf-core/sentieon/readwriter/main.nf | 4 +- modules/nf-core/sentieon/wgsmetrics/main.nf | 4 +- modules/nf-core/svdb/merge/environment.yml | 3 +- modules/nf-core/svdb/merge/main.nf | 4 +- modules/nf-core/svdb/merge/meta.yml | 2 +- modules/nf-core/svdb/merge/tests/main.nf.test | 18 +- modules/nf-core/untar/tests/main.nf.test | 8 - modules/nf-core/untar/tests/main.nf.test.snap | 12 +- 98 files changed, 1729 insertions(+), 713 deletions(-) create mode 100644 modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/denoisereadcounts/tests/nextflow.config create mode 100644 modules/nf-core/gatk4/denoisereadcounts/tests/tags.yml delete mode 100644 modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml delete mode 100644 modules/nf-core/gatk4/germlinecnvcaller/environment.yml create mode 100644 modules/nf-core/gatk4/mergevcfs/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/mergevcfs/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/mergevcfs/tests/tags.yml delete mode 100644 modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml diff --git a/modules.json b/modules.json index 370d1472..54d8ed01 100644 --- a/modules.json +++ b/modules.json @@ -57,12 +57,12 @@ }, "bwa/index": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "6278bf9afd4a4b2d00fa6052250e73da3d91546f", "installed_by": ["modules"] }, "bwa/mem": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "5908e575322666ccc33911a28b06e3f82260fe54", "installed_by": ["modules"] }, "bwamem2/index": { @@ -72,7 +72,7 @@ }, "bwamem2/mem": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "74363e1acc38eaedeede8d429477397c1a6f9e18", "installed_by": ["modules"] }, "cadd": { @@ -82,7 +82,7 @@ }, "cat/cat": { "branch": "master", - "git_sha": "81f27e75847087865299cc46605deb3b09b4e0a2", + "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", "installed_by": ["modules"] }, "chromograph": { @@ -128,7 +128,7 @@ }, "fastp": { "branch": "master", - "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c", + "git_sha": "003920c7f9a8ae19b69a97171922880220bedf56", "installed_by": ["modules"] }, "fastqc": { @@ -138,104 +138,104 @@ }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/collectreadcounts": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/denoisereadcounts": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "87e46f8fe8b056486a80c14b1d61e7cd6046bc06", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "87e46f8fe8b056486a80c14b1d61e7cd6046bc06", "installed_by": ["modules"], "patch": "modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff" }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "194fca815cf594646e638fa5476acbcc296f1850", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "87e46f8fe8b056486a80c14b1d61e7cd6046bc06", "installed_by": ["modules"], "patch": "modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff" }, "gatk4/preprocessintervals": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "47cd015ac64f0294ae65a589693604127132a686", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", "installed_by": ["modules"] }, "genmod/annotate": { @@ -371,72 +371,72 @@ }, "samtools/faidx": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "ec833ac4c29db6005d18baccf3306f557c46b006", + "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c", + "git_sha": "0bd7d2333a88483aa0476acea172e9f5f6dd83bb", "installed_by": ["modules"] }, "sentieon/bwaindex": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/bwamem": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/datametrics": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/dedup": { "branch": "master", - "git_sha": "740119f83a28777fdd846da87196b6ebc32a0e1d", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/dnamodelapply": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/dnascope": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/readwriter": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "sentieon/wgsmetrics": { "branch": "master", - "git_sha": "89b6873f15dd31ed17f4d10ede2fa623e2a128ff", + "git_sha": "220da1aa7d6ab6555817035041dd2fc05cb518d3", "installed_by": ["modules"] }, "smncopynumbercaller": { @@ -451,7 +451,7 @@ }, "svdb/merge": { "branch": "master", - "git_sha": "d9c95c45db561814ff6c46a0c0574581e81beaae", + "git_sha": "ba3f3df395d2719dcef5c67189042a1dc555c701", "installed_by": ["modules"] }, "svdb/query": { @@ -491,7 +491,7 @@ }, "untar": { "branch": "master", - "git_sha": "e719354ba77df0a1bd310836aa2039b45c29d620", + "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", "installed_by": ["modules"] }, "upd": { diff --git a/modules/nf-core/bwa/index/tests/main.nf.test b/modules/nf-core/bwa/index/tests/main.nf.test index 5fc8d496..af33e73c 100644 --- a/modules/nf-core/bwa/index/tests/main.nf.test +++ b/modules/nf-core/bwa/index/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [id: 'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -29,5 +29,5 @@ nextflow_process { } } - + } diff --git a/modules/nf-core/bwa/mem/environment.yml b/modules/nf-core/bwa/mem/environment.yml index c5b2a9ce..3f136d0a 100644 --- a/modules/nf-core/bwa/mem/environment.yml +++ b/modules/nf-core/bwa/mem/environment.yml @@ -6,4 +6,5 @@ channels: dependencies: - bwa=0.7.17 # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.18 + - samtools=1.19.2 + - htslib=1.19.1 diff --git a/modules/nf-core/bwa/mem/main.nf b/modules/nf-core/bwa/mem/main.nf index a3a82994..54ec0f16 100644 --- a/modules/nf-core/bwa/mem/main.nf +++ b/modules/nf-core/bwa/mem/main.nf @@ -4,8 +4,8 @@ process BWA_MEM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' : - 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:9c0128851101dafef65cef649826d2dbe6bedd7e-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:a34558545ae1413d94bde4578787ebef08027945-0' : + 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:a34558545ae1413d94bde4578787ebef08027945-0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test index b199bb70..2696e4bf 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test +++ b/modules/nf-core/bwa/mem/tests/main.nf.test @@ -5,6 +5,7 @@ nextflow_process { tag "modules" tag "bwa" tag "bwa/mem" + tag "bwa/index" script "../main.nf" process "BWA_MEM" @@ -17,7 +18,7 @@ nextflow_process { """ input[0] = [ [id: 'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -30,7 +31,7 @@ nextflow_process { input[0] = [ [ id:'test', single_end:true ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ] input[1] = BWA_INDEX.out.index @@ -57,7 +58,7 @@ nextflow_process { """ input[0] = [ [id: 'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -70,7 +71,7 @@ nextflow_process { input[0] = [ [ id:'test', single_end:true ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ] input[1] = BWA_INDEX.out.index @@ -97,7 +98,7 @@ nextflow_process { """ input[0] = [ [id: 'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -110,8 +111,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ] input[1] = BWA_INDEX.out.index @@ -138,7 +139,7 @@ nextflow_process { """ input[0] = [ [id: 'test'], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] """ } @@ -151,8 +152,8 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ] input[1] = BWA_INDEX.out.index diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap index bfb55fc7..e4fd8cc0 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap @@ -8,11 +8,11 @@ "id": "test", "single_end": true }, - "test.bam:md5,df203d7c7e8fef351408a909570c7952" + "test.bam:md5,a74710a0345b4717bb4431bf9c257120" ] ], "1": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ], "bam": [ [ @@ -20,15 +20,19 @@ "id": "test", "single_end": true }, - "test.bam:md5,df203d7c7e8fef351408a909570c7952" + "test.bam:md5,a74710a0345b4717bb4431bf9c257120" ] ], "versions": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ] } ], - "timestamp": "2023-12-04T11:01:22.483594641" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T11:11:48.440661587" }, "Single-End Sort": { "content": [ @@ -39,11 +43,11 @@ "id": "test", "single_end": true }, - "test.bam:md5,8a52bd78fdcecb994c1f63897d5b431c" + "test.bam:md5,cb1e038bc4d990683fa485d632550b54" ] ], "1": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ], "bam": [ [ @@ -51,15 +55,19 @@ "id": "test", "single_end": true }, - "test.bam:md5,8a52bd78fdcecb994c1f63897d5b431c" + "test.bam:md5,cb1e038bc4d990683fa485d632550b54" ] ], "versions": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ] } ], - "timestamp": "2023-12-04T11:01:30.180783483" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T11:11:56.086493265" }, "Paired-End": { "content": [ @@ -70,11 +78,11 @@ "id": "test", "single_end": false }, - "test.bam:md5,9815aef9ec763a60c53c3879be2d73ae" + "test.bam:md5,aea123a3828a99da1906126355f15a12" ] ], "1": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ], "bam": [ [ @@ -82,15 +90,19 @@ "id": "test", "single_end": false }, - "test.bam:md5,9815aef9ec763a60c53c3879be2d73ae" + "test.bam:md5,aea123a3828a99da1906126355f15a12" ] ], "versions": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ] } ], - "timestamp": "2023-12-04T11:01:38.761983007" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T11:12:03.474974773" }, "Paired-End Sort": { "content": [ @@ -101,11 +113,11 @@ "id": "test", "single_end": false }, - "test.bam:md5,0f0cda73704c4f7ba08af482edcbbe88" + "test.bam:md5,4682087bcdc3617384b375093fecd8dd" ] ], "1": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ], "bam": [ [ @@ -113,14 +125,18 @@ "id": "test", "single_end": false }, - "test.bam:md5,0f0cda73704c4f7ba08af482edcbbe88" + "test.bam:md5,4682087bcdc3617384b375093fecd8dd" ] ], "versions": [ - "versions.yml:md5,a18ac8ef8cfcc7b2cc262c49d4c064f9" + "versions.yml:md5,c32f719a68bb2966c8511d808154d42d" ] } ], - "timestamp": "2023-12-04T11:01:46.284587802" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T11:12:10.721510817" } } \ No newline at end of file diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml index 227d8690..cbf06d39 100644 --- a/modules/nf-core/bwamem2/mem/environment.yml +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -6,4 +6,5 @@ channels: dependencies: - bwa-mem2=2.2.1 # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.18 + - samtools=1.19.2 + - htslib=1.19.1 diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf index b3874fc9..29f90778 100644 --- a/modules/nf-core/bwamem2/mem/main.nf +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -4,8 +4,8 @@ process BWAMEM2_MEM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:6351200f24497efba12c219c2bea4bb0f69a9d47-0' : - 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:6351200f24497efba12c219c2bea4bb0f69a9d47-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' : + 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test index d7912069..365a0c43 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -8,6 +8,7 @@ nextflow_process { tag "modules_nfcore" tag "bwamem2" tag "bwamem2/mem" + tag "bwamem2/index" test("sarscov2 - fastq, index, false") { @@ -16,7 +17,10 @@ nextflow_process { script "../../index/main.nf" process { """ - input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) """ } } @@ -25,10 +29,10 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) - ] + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) input[1] = BWAMEM2_INDEX.out.index input[2] = false """ @@ -54,7 +58,10 @@ nextflow_process { script "../../index/main.nf" process { """ - input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) """ } } @@ -63,10 +70,10 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) - ] + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) input[1] = BWAMEM2_INDEX.out.index input[2] = true """ @@ -92,7 +99,10 @@ nextflow_process { script "../../index/main.nf" process { """ - input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) """ } } @@ -101,13 +111,13 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ] + ]) input[1] = BWAMEM2_INDEX.out.index input[2] = false """ @@ -133,7 +143,10 @@ nextflow_process { script "../../index/main.nf" process { """ - input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) """ } } @@ -142,13 +155,13 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ] + ]) input[1] = BWAMEM2_INDEX.out.index input[2] = true """ @@ -176,7 +189,10 @@ nextflow_process { script "../../index/main.nf" process { """ - input[0] = [ [:], file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) ] + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) """ } } @@ -185,13 +201,13 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ - file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] - ] + ]) input[1] = BWAMEM2_INDEX.out.index input[2] = true """ diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap index db7dd392..84be71c6 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -3,45 +3,65 @@ "content": [ "test.bam", [ - "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], - "timestamp": "2023-12-04T11:49:07.89544697" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T13:30:22.691288603" }, "sarscov2 - [fastq1, fastq2], index, false": { "content": [ "test.bam", [ - "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], - "timestamp": "2023-12-04T11:48:56.319355195" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T13:30:11.276168706" }, "sarscov2 - [fastq1, fastq2], index, true - stub": { "content": [ "test.bam", [ - "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], - "timestamp": "2023-12-04T11:49:17.499101941" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T13:30:32.07431961" }, "sarscov2 - fastq, index, false": { "content": [ "test.bam", [ - "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], - "timestamp": "2023-12-04T11:48:31.351628851" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T13:29:48.586760544" }, "sarscov2 - fastq, index, true": { "content": [ "test.bam", [ - "versions.yml:md5,f653bf29c6597481cd0345bd66aafd8a" + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], - "timestamp": "2023-12-04T11:48:43.978452504" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-19T13:29:59.846686393" } } \ No newline at end of file diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index aaae04f9..fcee2d19 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -19,8 +19,8 @@ nextflow_process { [ [ id:'genome', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -45,8 +45,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -72,8 +72,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) ] ] """ @@ -83,7 +83,8 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, + { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} ) } } @@ -101,8 +102,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['contigs_genome_maf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true) ] ] """ @@ -130,8 +131,8 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true), - file(params.test_data['sarscov2']['genome']['genome_sizes'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) ] ] """ @@ -141,7 +142,8 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, + { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} ) } } @@ -158,7 +160,7 @@ nextflow_process { [ [ id:'test', single_end:true ], [ - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] ] """ @@ -174,4 +176,3 @@ nextflow_process { } } } - diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 0c9bfe8d..423571ba 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -1,4 +1,10 @@ { + "test_cat_unzipped_zipped_size": { + "content": [ + 375 + ], + "timestamp": "2023-10-16T14:33:08.049445686" + }, "test_cat_unzipped_unzipped": { "content": [ { @@ -61,36 +67,31 @@ ], "timestamp": "2023-10-16T14:32:49.642741302" }, - "test_cat_zipped_zipped": { + "test_cat_zipped_zipped_lines": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9" - ] - ], - "1": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ], - "file_out": [ - [ - { - "id": "test", - "single_end": true - }, - "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9" - ] - ], - "versions": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - } + [ + "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", + "MT192765.1\tGenbank\tgene\t259\t21548\t.\t+\t.\tParent=unknown_transcript_1", + "MT192765.1\tGenbank\tCDS\t259\t13461\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", + "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", + "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ] + ], + "timestamp": "2023-10-16T14:32:33.629048645" + }, + "test_cat_unzipped_zipped_lines": { + "content": [ + [ + ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", + "GTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGT", + "GTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAG", + "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", + "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", + "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ] ], - "timestamp": "2024-01-12T14:02:02.999254641" + "timestamp": "2023-10-16T14:33:08.038830506" }, "test_cat_one_file_unzipped_zipped_lines": { "content": [ @@ -105,41 +106,16 @@ ], "timestamp": "2023-10-16T14:33:21.39642399" }, - "test_cat_unzipped_zipped": { + "test_cat_zipped_zipped_size": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2" - ] - ], - "1": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ], - "file_out": [ - [ - { - "id": "test", - "single_end": true - }, - "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2" - ] - ], - "versions": [ - "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" - ] - } + 78 ], - "timestamp": "2024-01-12T14:08:26.948048418" + "timestamp": "2023-10-16T14:32:33.641869244" }, "test_cat_one_file_unzipped_zipped_size": { "content": [ 374 ], - "timestamp": "2024-01-12T14:10:22.445700266" + "timestamp": "2023-10-16T14:33:21.4094373" } -} +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index fa7e5b4d..9b3f9a38 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -67,9 +67,9 @@ nextflow_process { process.out.reads_fail.collect { file(it[1]).getName() } + process.out.reads_merged.collect { file(it[1]).getName() } ).sort() - ).match("test_fastp_single_end-for_stub_match") + ).match("test_fastp_single_end-_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_single_end") } ) } } @@ -116,7 +116,7 @@ nextflow_process { ).sort() ).match("test_fastp_single_end-for_stub_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_single_end_stub") } ) } } @@ -196,9 +196,9 @@ nextflow_process { process.out.reads_fail.collect { file(it[1]).getName() } + process.out.reads_merged.collect { file(it[1]).getName() } ).sort() - ).match("test_fastp_paired_end-for_stub_match") + ).match("test_fastp_paired_end_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end") } ) } } @@ -245,7 +245,7 @@ nextflow_process { ).sort() ).match("test_fastp_paired_end-for_stub_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end-stub") } ) } } @@ -310,9 +310,9 @@ nextflow_process { process.out.reads_fail.collect { file(it[1]).getName() } + process.out.reads_merged.collect { file(it[1]).getName() } ).sort() - ).match("test_fastp_interleaved-for_stub_match") + ).match("test_fastp_interleaved-_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_interleaved") } ) } } @@ -359,7 +359,7 @@ nextflow_process { ).sort() ).match("test_fastp_interleaved-for_stub_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_interleaved-stub") } ) } } @@ -420,7 +420,7 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_single_end_trim_fail") } ) } } @@ -498,7 +498,7 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end_trim_fail") } ) } } @@ -587,9 +587,9 @@ nextflow_process { process.out.reads_fail.collect { file(it[1]).getName() } + process.out.reads_merged.collect { file(it[1]).getName() } ).sort() - ).match("test_fastp_paired_end_merged-for_stub_match") + ).match("test_fastp_paired_end_merged_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end_merged") } ) } } @@ -636,7 +636,7 @@ nextflow_process { ).sort() ).match("test_fastp_paired_end_merged-for_stub_match") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end_merged_stub") } ) } } @@ -716,7 +716,7 @@ nextflow_process { { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } } }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out.versions).match("versions_paired_end_merged_adapterlist") } ) } } diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 6a71b680..b4c0e1dd 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,19 +1,4 @@ { - "test_fastp_paired_end-for_stub_match": { - "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] - ], - "timestamp": "2024-01-17T18:07:15.398827" - }, "fastp test_fastp_interleaved_json": { "content": [ [ @@ -26,6 +11,10 @@ ] ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-17T18:08:06.123035" }, "test_fastp_paired_end_merged-for_stub_match": { @@ -42,8 +31,24 @@ "{id=test, single_end=false}" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-17T18:10:13.467574" }, + "versions_interleaved": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:56:24.615634793" + }, "test_fastp_single_end_json": { "content": [ [ @@ -56,15 +61,169 @@ ] ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-17T18:06:00.223817" }, - "versions": { + "versions_paired_end": { "content": [ [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], - "timestamp": "2024-01-17T18:06:00.248422" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:55:42.333545689" + }, + "test_fastp_paired_end_match": { + "content": [ + [ + [ + "test_1.fastp.fastq.gz", + "test_2.fastp.fastq.gz" + ], + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=false}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T12:03:06.431833729" + }, + "test_fastp_interleaved-_match": { + "content": [ + [ + "test.fastp.fastq.gz", + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=true}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T12:03:37.827323085" + }, + "test_fastp_paired_end_merged_match": { + "content": [ + [ + [ + "test_1.fastp.fastq.gz", + "test_2.fastp.fastq.gz" + ], + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "test.merged.fastq.gz", + "{id=test, single_end=false}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T12:08:44.496251446" + }, + "versions_single_end_stub": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:55:27.354051299" + }, + "versions_interleaved-stub": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:56:46.535528418" + }, + "versions_single_end_trim_fail": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:59:03.724591407" + }, + "test_fastp_paired_end-for_stub_match": { + "content": [ + [ + [ + "test_1.fastp.fastq.gz", + "test_2.fastp.fastq.gz" + ], + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=false}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-01-17T18:07:15.398827" + }, + "versions_paired_end-stub": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:56:06.50017282" + }, + "versions_single_end": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:55:07.67921647" + }, + "versions_paired_end_merged_stub": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:59:47.350653154" }, "test_fastp_interleaved-for_stub_match": { "content": [ @@ -76,8 +235,24 @@ "{id=test, single_end=true}" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-17T18:08:06.127974" }, + "versions_paired_end_trim_fail": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:59:18.140484878" + }, "test_fastp_single_end-for_stub_match": { "content": [ [ @@ -88,8 +263,52 @@ "{id=test, single_end=true}" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-17T18:06:00.244202" }, + "test_fastp_single_end-_match": { + "content": [ + [ + "test.fastp.fastq.gz", + "test.fastp.html", + "test.fastp.json", + "test.fastp.log", + "{id=test, single_end=true}" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:57:30.791982648" + }, + "versions_paired_end_merged_adapterlist": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T12:05:37.845370554" + }, + "versions_paired_end_merged": { + "content": [ + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-01T11:59:32.860543858" + }, "test_fastp_single_end_trim_fail_json": { "content": [ [ @@ -102,6 +321,10 @@ ] ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-17T18:08:41.942317" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/environment.yml b/modules/nf-core/gatk4/bedtointervallist/environment.yml index e7cb4280..d6fbe2e7 100644 --- a/modules/nf-core/gatk4/bedtointervallist/environment.yml +++ b/modules/nf-core/gatk4/bedtointervallist/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 88b24b1a..68863d67 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -4,8 +4,8 @@ process GATK4_BEDTOINTERVALLIST { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bed) diff --git a/modules/nf-core/gatk4/collectreadcounts/environment.yml b/modules/nf-core/gatk4/collectreadcounts/environment.yml index ebc83800..d09cd890 100644 --- a/modules/nf-core/gatk4/collectreadcounts/environment.yml +++ b/modules/nf-core/gatk4/collectreadcounts/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/collectreadcounts/main.nf b/modules/nf-core/gatk4/collectreadcounts/main.nf index 1cc36941..2c545d22 100644 --- a/modules/nf-core/gatk4/collectreadcounts/main.nf +++ b/modules/nf-core/gatk4/collectreadcounts/main.nf @@ -4,8 +4,8 @@ process GATK4_COLLECTREADCOUNTS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(input_index), path(intervals) diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml index db663e14..78822ad0 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/environment.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index b47ad162..c7f1d75b 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -4,8 +4,8 @@ process GATK4_CREATESEQUENCEDICTIONARY { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/gatk4/denoisereadcounts/environment.yml b/modules/nf-core/gatk4/denoisereadcounts/environment.yml index bcb2ff35..a03cf4a9 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/environment.yml +++ b/modules/nf-core/gatk4/denoisereadcounts/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/denoisereadcounts/main.nf b/modules/nf-core/gatk4/denoisereadcounts/main.nf index b1191c27..878e85c6 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/main.nf +++ b/modules/nf-core/gatk4/denoisereadcounts/main.nf @@ -4,8 +4,8 @@ process GATK4_DENOISEREADCOUNTS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(counts) diff --git a/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test new file mode 100644 index 00000000..35ad8f79 --- /dev/null +++ b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test @@ -0,0 +1,75 @@ +nextflow_process { + + name "Test Process GATK4_DENOISEREADCOUNTS" + script "../main.nf" + config "./nextflow.config" + process "GATK4_DENOISEREADCOUNTS" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/createreadcountpanelofnormals" + tag "gatk4/collectreadcounts" + tag "gatk4/preprocessintervals" + tag "gatk4/denoisereadcounts" + + test("test_gatk4_denoisereadcounts") { + setup { + run("GATK4_PREPROCESSINTERVALS"){ + script "../../preprocessintervals/main.nf" + process { + """ + input[0] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)]) + input[1] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)]) + input[2] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true)]) + input[3] = [[],[]] + input[4] = [[],[]] + """ + } + } + run("GATK4_COLLECTREADCOUNTS"){ + script "../../collectreadcounts/main.nf" + process { + """ + intervals = GATK4_PREPROCESSINTERVALS.out.interval_list.map {meta, list -> list} + input[0] = Channel.of( + [[ id:'test', single_end:false ], file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)], + ) + .combine( intervals) + input[1] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)]) + input[2] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)]) + input[3] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true)]) + """ + } + } + run("GATK4_CREATEREADCOUNTPANELOFNORMALS"){ + script "../../createreadcountpanelofnormals/main.nf" + process { + """ + input[0] = GATK4_COLLECTREADCOUNTS.out.tsv.groupTuple() + """ + } + } + } + + when { + process { + """ + input[0] = GATK4_COLLECTREADCOUNTS.out.tsv.first() + input[1] = GATK4_CREATEREADCOUNTPANELOFNORMALS.out.pon + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.standardized, + process.out.denoised + ).match() } + ) + } + + } +} diff --git a/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap new file mode 100644 index 00000000..000283b3 --- /dev/null +++ b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap @@ -0,0 +1,29 @@ +{ + "test_gatk4_denoisereadcounts": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_standardizedCR.tsv:md5,f9e56b8e12b4dadc91a6d977fa79c6a8" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_denoisedCR.tsv:md5,f9e56b8e12b4dadc91a6d977fa79c6a8" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-20T14:45:41.834159" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/denoisereadcounts/tests/nextflow.config b/modules/nf-core/gatk4/denoisereadcounts/tests/nextflow.config new file mode 100644 index 00000000..e67bb684 --- /dev/null +++ b/modules/nf-core/gatk4/denoisereadcounts/tests/nextflow.config @@ -0,0 +1,9 @@ +docker.runOptions = '--platform=linux/amd64 -e "HOME=${HOME}" -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro -v $HOME:$HOME' +process { + withName: GATK4_COLLECTREADCOUNTS { + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + } + withName: GATK4_CREATEREADCOUNTPANELOFNORMALS { + ext.args = "--minimum-interval-median-percentile 1.0 --number-of-eigensamples 2" + } +} diff --git a/modules/nf-core/gatk4/denoisereadcounts/tests/tags.yml b/modules/nf-core/gatk4/denoisereadcounts/tests/tags.yml new file mode 100644 index 00000000..5f105a82 --- /dev/null +++ b/modules/nf-core/gatk4/denoisereadcounts/tests/tags.yml @@ -0,0 +1,6 @@ +gatk4/denoisereadcounts: + - "modules/nf-core/gatk4/denoisereadcounts/**" + - "modules/nf-core/gatk4/createreadcountpanelofnormals/**" + - "modules/nf-core/gatk4/collectreadcounts/**" + - "modules/nf-core/gatk4/preprocessintervals/**" + - "modules/nf-core/gatk4/denoisereadcounts/**" diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml b/modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml deleted file mode 100644 index c30de090..00000000 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: gatk4_determinegermlinecontigploidy -channels: - - conda-forge - - bioconda - - defaults diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf index 5af101f8..71a67f70 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf @@ -4,7 +4,7 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { label 'process_single' //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 - container "nf-core/gatk:4.4.0.0" //Biocontainers is missing a package + container "nf-core/gatk:4.5.0.0" //Biocontainers is missing a package input: tuple val(meta), path(counts), path(bed), path(exclude_beds) @@ -39,6 +39,8 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { avail_mem = (task.memory.mega*0.8).intValue() } """ + export THEANO_FLAGS="base_compiledir=\$PWD" + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ DetermineGermlineContigPloidy \\ ${input_list} \\ diff --git a/modules/nf-core/gatk4/filtermutectcalls/environment.yml b/modules/nf-core/gatk4/filtermutectcalls/environment.yml index 8057d765..7494d84d 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/environment.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf index fa6b46ab..38dd44c7 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/main.nf +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -4,8 +4,8 @@ process GATK4_FILTERMUTECTCALLS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf), path(vcf_tbi), path(stats), path(orientationbias), path(segmentation), path(table), val(estimate) diff --git a/modules/nf-core/gatk4/germlinecnvcaller/environment.yml b/modules/nf-core/gatk4/germlinecnvcaller/environment.yml deleted file mode 100644 index 02ce4dd3..00000000 --- a/modules/nf-core/gatk4/germlinecnvcaller/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: gatk4_germlinecnvcaller -channels: - - conda-forge - - bioconda - - defaults diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index f42ceb6a..535b14c5 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 "nf-core/gatk:4.4.0.0" //Biocontainers is missing a package + container "nf-core/gatk:4.5.0.0" //Biocontainers is missing a package input: tuple val(meta), path(tsv), path(intervals), path(ploidy), path(model) @@ -37,6 +37,8 @@ process GATK4_GERMLINECNVCALLER { avail_mem = (task.memory.mega*0.8).intValue() } """ + export THEANO_FLAGS="base_compiledir=\$PWD" + gatk --java-options "-Xmx${avail_mem}g -XX:-UsePerfData" \\ GermlineCNVCaller \\ $input_list \\ diff --git a/modules/nf-core/gatk4/intervallisttools/environment.yml b/modules/nf-core/gatk4/intervallisttools/environment.yml index b70e5e14..a4026f98 100644 --- a/modules/nf-core/gatk4/intervallisttools/environment.yml +++ b/modules/nf-core/gatk4/intervallisttools/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf index 10baa752..400fa038 100644 --- a/modules/nf-core/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/gatk4/intervallisttools/main.nf @@ -4,8 +4,8 @@ process GATK4_INTERVALLISTTOOLS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) diff --git a/modules/nf-core/gatk4/mergebamalignment/environment.yml b/modules/nf-core/gatk4/mergebamalignment/environment.yml index 08a1df23..0ea7b0d7 100644 --- a/modules/nf-core/gatk4/mergebamalignment/environment.yml +++ b/modules/nf-core/gatk4/mergebamalignment/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf index f970421f..0085026c 100644 --- a/modules/nf-core/gatk4/mergebamalignment/main.nf +++ b/modules/nf-core/gatk4/mergebamalignment/main.nf @@ -4,8 +4,8 @@ process GATK4_MERGEBAMALIGNMENT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(aligned), path(unmapped) diff --git a/modules/nf-core/gatk4/mergevcfs/environment.yml b/modules/nf-core/gatk4/mergevcfs/environment.yml index d6c3e51a..efd9faa2 100644 --- a/modules/nf-core/gatk4/mergevcfs/environment.yml +++ b/modules/nf-core/gatk4/mergevcfs/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf index 3362c2bd..9e8d4391 100644 --- a/modules/nf-core/gatk4/mergevcfs/main.nf +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -4,8 +4,8 @@ process GATK4_MERGEVCFS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/gatk4/mergevcfs/meta.yml b/modules/nf-core/gatk4/mergevcfs/meta.yml index 30290a85..996053fc 100644 --- a/modules/nf-core/gatk4/mergevcfs/meta.yml +++ b/modules/nf-core/gatk4/mergevcfs/meta.yml @@ -29,7 +29,7 @@ input: description: | Groovy Map containing reference information e.g. [ id:'genome'] - - ref_dict: + - dict: type: file description: Optional Sequence Dictionary as input pattern: "*.dict" diff --git a/modules/nf-core/gatk4/mergevcfs/tests/main.nf.test b/modules/nf-core/gatk4/mergevcfs/tests/main.nf.test new file mode 100644 index 00000000..77ace10a --- /dev/null +++ b/modules/nf-core/gatk4/mergevcfs/tests/main.nf.test @@ -0,0 +1,87 @@ +nextflow_process { + + name "Test Process GATK4_MERGEVCFS" + script "../main.nf" + process "GATK4_MERGEVCFS" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/mergevcfs" + + test("test_gatk4_mergevcfs") { + when { + process { + """ + input[0] = [ [ id:'test' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) ]] + input[1] = [ [], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + file(process.out.tbi.get(0).get(1)).name + ).match("test_gatk4_mergevcfs") + }, + ) + } + + } + + test("test_gatk4_mergevcfs_no_dict") { + when { + process { + """ + input[0] = [ [ id:'test' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) ]] + input[1] = [ [],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + file(process.out.tbi.get(0).get(1)).name + ).match("test_gatk4_mergevcfs_no_dict") + }, + ) + } + + } + + test("test_gatk4_mergevcfs_no_dict_stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test' ], [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/dbsnp_146.hg38.vcf.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) ]] + input[1] = [ [],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + file(process.out.tbi.get(0).get(1)).name + ).match("test_gatk4_mergevcfs_no_dict_stub") + }, + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/mergevcfs/tests/main.nf.test.snap b/modules/nf-core/gatk4/mergevcfs/tests/main.nf.test.snap new file mode 100644 index 00000000..62cceed5 --- /dev/null +++ b/modules/nf-core/gatk4/mergevcfs/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "test_gatk4_mergevcfs_no_dict_stub": { + "content": [ + "test.vcf.gz", + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-14T14:57:40.784590995" + }, + "test_gatk4_mergevcfs": { + "content": [ + "test.vcf.gz", + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-14T14:56:42.178255913" + }, + "test_gatk4_mergevcfs_no_dict": { + "content": [ + "test.vcf.gz", + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-14T14:57:11.404322124" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/mergevcfs/tests/tags.yml b/modules/nf-core/gatk4/mergevcfs/tests/tags.yml new file mode 100644 index 00000000..d2a74ba2 --- /dev/null +++ b/modules/nf-core/gatk4/mergevcfs/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/mergevcfs: + - "modules/nf-core/gatk4/mergevcfs/**" diff --git a/modules/nf-core/gatk4/mutect2/environment.yml b/modules/nf-core/gatk4/mutect2/environment.yml index 54da66ce..86f4bfae 100644 --- a/modules/nf-core/gatk4/mutect2/environment.yml +++ b/modules/nf-core/gatk4/mutect2/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf index 721e94f3..79d8d282 100644 --- a/modules/nf-core/gatk4/mutect2/main.nf +++ b/modules/nf-core/gatk4/mutect2/main.nf @@ -4,8 +4,8 @@ process GATK4_MUTECT2 { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(input_index), path(intervals) diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml deleted file mode 100644 index a515d065..00000000 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/environment.yml +++ /dev/null @@ -1,5 +0,0 @@ -name: gatk4_postprocessgermlinecnvcalls -channels: - - conda-forge - - bioconda - - defaults diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index ef9a34a3..31db78bc 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 "nf-core/gatk:4.4.0.0" //Biocontainers is missing a package + container "nf-core/gatk:4.5.0.0" //Biocontainers is missing a package input: tuple val(meta), path(calls), path(model), path(ploidy) @@ -35,6 +35,8 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { avail_mem = (task.memory.mega*0.8).intValue() } """ + export THEANO_FLAGS="base_compiledir=\$PWD" + gatk --java-options "-Xmx${avail_mem}g -XX:-UsePerfData" \\ PostprocessGermlineCNVCalls \\ $calls_command \\ diff --git a/modules/nf-core/gatk4/preprocessintervals/environment.yml b/modules/nf-core/gatk4/preprocessintervals/environment.yml index 542d9efd..ec0b09e9 100644 --- a/modules/nf-core/gatk4/preprocessintervals/environment.yml +++ b/modules/nf-core/gatk4/preprocessintervals/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf index 61b281da..dffc4bb1 100644 --- a/modules/nf-core/gatk4/preprocessintervals/main.nf +++ b/modules/nf-core/gatk4/preprocessintervals/main.nf @@ -4,8 +4,8 @@ process GATK4_PREPROCESSINTERVALS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/gatk4/printreads/environment.yml b/modules/nf-core/gatk4/printreads/environment.yml index 7387f5d1..d1dd0b3e 100644 --- a/modules/nf-core/gatk4/printreads/environment.yml +++ b/modules/nf-core/gatk4/printreads/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf index 281096bb..f97180ad 100644 --- a/modules/nf-core/gatk4/printreads/main.nf +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -4,8 +4,8 @@ process GATK4_PRINTREADS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/gatk4/revertsam/environment.yml b/modules/nf-core/gatk4/revertsam/environment.yml index 0ce7dddc..f169a89a 100644 --- a/modules/nf-core/gatk4/revertsam/environment.yml +++ b/modules/nf-core/gatk4/revertsam/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf index da3a71f9..635784ab 100644 --- a/modules/nf-core/gatk4/revertsam/main.nf +++ b/modules/nf-core/gatk4/revertsam/main.nf @@ -4,8 +4,8 @@ process GATK4_REVERTSAM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/gatk4/samtofastq/environment.yml b/modules/nf-core/gatk4/samtofastq/environment.yml index 584c3d83..1f881bb7 100644 --- a/modules/nf-core/gatk4/samtofastq/environment.yml +++ b/modules/nf-core/gatk4/samtofastq/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf index 02bf2152..35b9b76d 100644 --- a/modules/nf-core/gatk4/samtofastq/main.nf +++ b/modules/nf-core/gatk4/samtofastq/main.nf @@ -4,8 +4,8 @@ process GATK4_SAMTOFASTQ { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/gatk4/selectvariants/environment.yml b/modules/nf-core/gatk4/selectvariants/environment.yml index 404bafde..f2711e44 100644 --- a/modules/nf-core/gatk4/selectvariants/environment.yml +++ b/modules/nf-core/gatk4/selectvariants/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index 139d7835..c342ee93 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -4,8 +4,8 @@ process GATK4_SELECTVARIANTS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf), path(vcf_idx), path (intervals) diff --git a/modules/nf-core/gatk4/shiftfasta/environment.yml b/modules/nf-core/gatk4/shiftfasta/environment.yml index 381a22c0..58ebf089 100644 --- a/modules/nf-core/gatk4/shiftfasta/environment.yml +++ b/modules/nf-core/gatk4/shiftfasta/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/shiftfasta/main.nf b/modules/nf-core/gatk4/shiftfasta/main.nf index b0ff3ed0..350ff8d3 100644 --- a/modules/nf-core/gatk4/shiftfasta/main.nf +++ b/modules/nf-core/gatk4/shiftfasta/main.nf @@ -4,8 +4,8 @@ process GATK4_SHIFTFASTA { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/gatk4/splitintervals/environment.yml b/modules/nf-core/gatk4/splitintervals/environment.yml index 6b347417..b2e8c1b0 100644 --- a/modules/nf-core/gatk4/splitintervals/environment.yml +++ b/modules/nf-core/gatk4/splitintervals/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index 957f1675..d59b6afb 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -4,8 +4,8 @@ process GATK4_SPLITINTERVALS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) diff --git a/modules/nf-core/gatk4/variantfiltration/environment.yml b/modules/nf-core/gatk4/variantfiltration/environment.yml index cc16bc0e..0812b6f2 100644 --- a/modules/nf-core/gatk4/variantfiltration/environment.yml +++ b/modules/nf-core/gatk4/variantfiltration/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::gatk4=4.4.0.0 + - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index 1c4d8ad0..388c60ab 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -4,8 +4,8 @@ process GATK4_VARIANTFILTRATION { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 01ccbcc7..3e95dd71 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.18 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index d3461627..cfe7ad95 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 296ed99e..a5e50649 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.18 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 8ad18fdc..dc14f98d 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index c76a9169..bb7756d1 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -8,7 +8,7 @@ nextflow_process { tag "samtools" tag "samtools/index" - test("sarscov2 [BAI]") { + test("bai") { when { params { @@ -16,10 +16,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) """ } } @@ -28,12 +28,12 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot(process.out.bai).match("bai") }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out.versions).match("bai_versions") } ) } } - test("homo_sapiens [CRAI]") { + test("crai") { when { params { @@ -41,10 +41,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) """ } } @@ -53,12 +53,12 @@ nextflow_process { assertAll ( { assert process.success }, { assert snapshot(process.out.crai).match("crai") }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out.versions).match("crai_versions") } ) } } - test("homo_sapiens [CSI]") { + test("csi") { config "./csi.nextflow.config" @@ -68,10 +68,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) """ } } @@ -80,7 +80,7 @@ nextflow_process { assertAll ( { assert process.success }, { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert path(process.out.versions.get(0)).getText().contains("samtools") } + { assert snapshot(process.out.versions).match("csi_versions") } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index b3baee7f..3dc8e7de 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,28 +1,74 @@ { + "crai_versions": { + "content": [ + [ + "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:00.324667957" + }, + "csi_versions": { + "content": [ + [ + "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:07.885103162" + }, "crai": { "content": [ [ [ { - "id": "test" + "id": "test", + "single_end": false }, "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" ] ] ], - "timestamp": "2023-11-15T15:17:37.30801" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:41:38.446424" }, "bai": { "content": [ [ [ { - "id": "test" + "id": "test", + "single_end": false }, "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" ] ] ], - "timestamp": "2023-11-15T15:17:30.869234" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:40:46.579747" + }, + "bai_versions": { + "content": [ + [ + "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:11:51.641425452" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml index 1f7fe49f..fc669b1b 100644 --- a/modules/nf-core/samtools/merge/environment.yml +++ b/modules/nf-core/samtools/merge/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.18 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index e104b90a..a3048c28 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_MERGE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test index 024f9f70..40b36e82 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -9,21 +9,19 @@ nextflow_process { tag "samtools" tag "samtools/merge" - test("sarscov2 - [bam1, bam2, bam3], [], []") { + test("bams") { config "./index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) input[1] = [[],[]] input[2] = [[],[]] """ @@ -33,40 +31,35 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") }, + { assert snapshot(process.out.cram).match("bams_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_csi") }, + { assert snapshot(process.out.crai).match("bams_crai") }, + { assert snapshot(process.out.versions).match("bams_versions") } ) } - } - test("homo_sapiens - [cram1, cram2], fasta, fai") { + test("crams") { config "./index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true), - ] - ] - input[1] = [ - [id:'genome'], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] - input[2] = [ - [id:'genome'], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true) ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) """ } } @@ -74,27 +67,24 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.cram[0][1]).name, - process.out.bam, - file(process.out.crai[0][1]).name, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.cram[0][1]).name).match("crams_cram") }, + { assert snapshot(process.out.bam).match("crams_bam") }, + { assert snapshot(file(process.out.crai[0][1]).name).match("crams_crai") }, + { assert snapshot(process.out.csi).match("crams_csi") }, + { assert snapshot(process.out.versions).match("crams_versions") } ) } - } - test("sarscov2 - bam, [], []") { + test("bam") { when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true) ] + ]) input[1] = [[],[]] input[2] = [[],[]] """ @@ -104,19 +94,16 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.versions).match("bam_versions") } ) } - } - test("sarscov2 - [bam1, bam2, bam3], [], [] - stub") { + test("bams_stub") { config "./index.config" options "-stub" @@ -124,14 +111,12 @@ nextflow_process { when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_methylated_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ] + ]) input[1] = [[],[]] input[2] = [[],[]] """ @@ -141,16 +126,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") }, + { assert snapshot(process.out.cram).match("bams_stub_cram") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bams_stub_csi") }, + { assert snapshot(process.out.crai).match("bams_stub_crai") }, + { assert snapshot(process.out.versions).match("bams_stub_versions") } ) } - } - } diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap index 3ab57d81..f7da7699 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -1,68 +1,228 @@ { - "sarscov2 - bam, [], []": { + "crams_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.647389" + }, + "bams_stub_cram": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.937013" + }, + "bams_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.928616" + }, + "bams_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.923289" + }, + "bams_cram": { + "content": [ [ - ], - [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" ] ], - "timestamp": "2023-12-04T17:13:30.244841621" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.925716" }, - "sarscov2 - [bam1, bam2, bam3], [], [] - stub": { + "crams_csi": { "content": [ - "test.bam", [ - ], - "test.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.655959" + }, + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.319539" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:16:33.782637377" + }, + "bams_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:49:24.92719" + }, + "bams_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.940498" + }, + "bam_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.328852" + }, + "bams_stub_versions": { + "content": [ [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" ] ], - "timestamp": "2023-12-04T17:10:14.861445721" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:16:42.594476052" }, - "homo_sapiens - [cram1, cram2], fasta, fai": { + "bam_cram": { "content": [ - "test.cram", [ - ], - "test.cram.crai", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.324219" + }, + "bams_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.933153" + }, + "bams_versions": { + "content": [ + [ + "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:16:04.805335656" + }, + "crams_bam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.650652" + }, + "crams_versions": { + "content": [ [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" + "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" ] ], - "timestamp": "2023-12-04T17:09:29.716002618" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:16:25.889394689" }, - "sarscov2 - [bam1, bam2, bam3], [], []": { + "bam_csi": { "content": [ - "test.bam", [ - ], - "test.bam.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:10.33292" + }, + "crams_crai": { + "content": [ + "test.cram.crai" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:00.653512" + }, + "bams_stub_crai": { + "content": [ [ - ], - [ - "versions.yml:md5,71986103374bdddb2e3093d20e7d06cb" ] ], - "timestamp": "2023-12-04T17:08:42.329973045" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T18:50:19.943839" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index cd50868c..4d898e48 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.18 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 4a666d42..cdd8305d 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index abb80978..31e24b88 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -8,7 +8,7 @@ nextflow_process { tag "samtools" tag "samtools/sort" - test("test_samtools_sort") { + test("bam") { config "./nextflow.config" @@ -18,12 +18,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test', single_end:false ], - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) """ } } @@ -34,10 +32,9 @@ nextflow_process { { assert snapshot(process.out).match() } ) } - } - test("test_samtools_sort_stub") { + test("bam_stub") { config "./nextflow.config" options "-stub-run" @@ -48,12 +45,10 @@ nextflow_process { } process { """ - input[0] = [ - [ id:'test', single_end:false ], - [ - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true) - ] - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) """ } } @@ -61,13 +56,9 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, + { assert snapshot(process.out.versions).match("bam_stub_versions") } ) } - } - } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index ff722259..a7cf0210 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,5 +1,27 @@ { - "test_samtools_sort": { + "bam_stub_bam": { + "content": [ + "test.sorted.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:21:04.364044" + }, + "bam_stub_versions": { + "content": [ + [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:15:00.20800281" + }, + "bam": { "content": [ { "0": [ @@ -8,14 +30,14 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06" + "test.sorted.bam:md5,c6ea1346ec4aae007eb40b708935088c" ] ], "1": [ ], "2": [ - "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ], "bam": [ [ @@ -23,26 +45,21 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06" + "test.sorted.bam:md5,c6ea1346ec4aae007eb40b708935088c" ] ], "csi": [ ], "versions": [ - "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ] } ], - "timestamp": "2023-12-04T11:11:22.005628301" - }, - "test_samtools_sort_stub": { - "content": [ - "test.sorted.bam", - [ - "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80" - ] - ], - "timestamp": "2023-12-04T17:47:22.314445935" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:14:52.736359271" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index b45ba90c..67bb0ca4 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -4,5 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.18 - - bioconda::htslib=1.18 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 7539140a..52b00f4b 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_STATS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test index 20c3efe1..e3d5cb14 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -8,71 +8,58 @@ nextflow_process { tag "samtools" tag "samtools/stats" - test("SAMTOOLS STATS Should run without failures") { + test("bam") { when { params { - outdir = "$outputDir" } process { """ - // define inputs of the process here. - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) - - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) input[1] = [[],[]] """ - } } then { assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + {assert process.success}, + {assert snapshot(process.out).match()} ) } - } - test("SAMTOOLS CRAM Should run without failures") { + test("cram") { when { params { - outdir = "$outputDir" } process { """ - // define inputs of the process here - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true) - - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) """ } - - } then { assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + {assert process.success}, + {assert snapshot(process.out).match()} ) } - } - - } diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap index 025c83a5..1b7c9ba4 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "SAMTOOLS STATS Should run without failures": { + "cram": { "content": [ { "0": [ @@ -8,11 +8,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def" + "test.stats:md5,01812900aa4027532906c5d431114233" ] ], "1": [ - "versions.yml:md5,650a365c6635001436008350ae83337c" + "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" ], "stats": [ [ @@ -20,17 +20,21 @@ "id": "test", "single_end": false }, - "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def" + "test.stats:md5,01812900aa4027532906c5d431114233" ] ], "versions": [ - "versions.yml:md5,650a365c6635001436008350ae83337c" + "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" ] } ], - "timestamp": "2023-12-04T11:07:28.26821485" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:15:25.562429714" }, - "SAMTOOLS CRAM Should run without failures": { + "bam": { "content": [ { "0": [ @@ -39,11 +43,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43" + "test.stats:md5,5d8681bf541199898c042bf400391d59" ] ], "1": [ - "versions.yml:md5,650a365c6635001436008350ae83337c" + "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" ], "stats": [ [ @@ -51,14 +55,18 @@ "id": "test", "single_end": false }, - "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43" + "test.stats:md5,5d8681bf541199898c042bf400391d59" ] ], "versions": [ - "versions.yml:md5,650a365c6635001436008350ae83337c" + "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" ] } ], - "timestamp": "2023-12-04T11:07:50.356233402" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:15:07.857611509" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index 99aa69d0..b0676f33 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -4,4 +4,5 @@ channels: - bioconda - defaults dependencies: - - bioconda::samtools=1.18 + - bioconda::samtools=1.19.2 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 0b5a2912..5a8989d6 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' : - 'biocontainers/samtools:1.18--h50ea8bc_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test index 89ed3555..45a0defb 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -9,16 +9,16 @@ nextflow_process { tag "samtools" tag "samtools/view" - test("sarscov2 - [bam, []], [], []") { + test("bam") { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), [] - ] + ]) input[1] = [[],[]] input[2] = [] """ @@ -28,34 +28,31 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - process.out.bai, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_bam") }, + { assert snapshot(process.out.bai).match("bam_bai") }, + { assert snapshot(process.out.crai).match("bam_crai") }, + { assert snapshot(process.out.cram).match("bam_cram") }, + { assert snapshot(process.out.csi).match("bam_csi") }, + { assert snapshot(process.out.sam).match("bam_sam") }, + { assert snapshot(process.out.versions).match("bam_versions") } ) } - } - test("homo_sapiens - [cram, crai], fasta, []") { + test("cram") { when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true) - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = [] """ } @@ -64,36 +61,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.cram[0][1]).name, - process.out.bam, - process.out.sam, - process.out.bai, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.cram[0][1]).name).match("cram_cram") }, + { assert snapshot(process.out.bai).match("cram_bai") }, + { assert snapshot(process.out.bam).match("cram_bam") }, + { assert snapshot(process.out.crai).match("cram_crai") }, + { assert snapshot(process.out.csi).match("cram_csi") }, + { assert snapshot(process.out.sam).match("cram_sam") }, + { assert snapshot(process.out.versions).match("cram_versions") } ) } - } - test("homo_sapiens - [cram, []], fasta, [] - bam output") { + test("cram_to_bam") { config "./bam.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), [] - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = [] """ } @@ -102,36 +96,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - process.out.bai, - process.out.crai, - process.out.csi, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_bam") }, + { assert snapshot(process.out.bai).match("cram_to_bam_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_cram") }, + { assert snapshot(process.out.csi).match("cram_to_bam_csi") }, + { assert snapshot(process.out.sam).match("cram_to_bam_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_versions") } ) } - } - test("homo_sapiens - [cram, []], fasta, [] - bam & index output") { + test("cram_to_bam_index") { config "./bam_index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), [] - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = [] """ } @@ -140,36 +131,33 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.bai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_csi") }, + { assert snapshot(process.out.bai).match("cram_to_bam_index_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_index_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_index_cram") }, + { assert snapshot(process.out.sam).match("cram_to_bam_index_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_index_versions") } ) } - } - test("homo_sapiens - [cram, []], fasta, qname - bam & index output") { + test("cram_to_bam_index_qname") { config "./bam_index.config" when { process { """ - input[0] = [ - [ id: 'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), [] - ] - input[1] = [ - [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) - ] + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) input[2] = Channel.of("testN:2817", "testN:2814").collectFile(name: "readnames.list", newLine: true) """ } @@ -178,21 +166,18 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.bai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_index_qname_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("cram_to_bam_index_qname_csi") }, + { assert snapshot(process.out.bai).match("cram_to_bam_index_qname_bai") }, + { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, + { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, + { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, + { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } ) } - } - test("sarscov2 - [bam, []], [], [] - stub") { + test("bam_stub") { options "-stub" config "./bam_index.config" @@ -200,11 +185,11 @@ nextflow_process { when { process { """ - input[0] = [ + input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true), [] - ] + ]) input[1] = [[],[]] input[2] = [] """ @@ -214,18 +199,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.cram, - process.out.sam, - file(process.out.csi[0][1]).name, - process.out.crai, - process.out.bai, - process.out.versions - ).match() } + { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, + { assert snapshot(file(process.out.csi[0][1]).name).match("bam_stub_csi") }, + { assert snapshot(process.out.bai).match("bam_stub_bai") }, + { assert snapshot(process.out.crai).match("bam_stub_crai") }, + { assert snapshot(process.out.cram).match("bam_stub_cram") }, + { assert snapshot(process.out.sam).match("bam_stub_sam") }, + { assert snapshot(process.out.versions).match("bam_stub_versions") } ) } - } - } diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap index 83427491..f55943a7 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -1,140 +1,488 @@ { - "homo_sapiens - [cram, []], fasta, [] - bam output": { + "bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.256068" + }, + "cram_to_bam_index_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.958617" + }, + "bam_stub_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.065301" + }, + "bam_bai": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.258578" + }, + "bam_stub_bai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.071284" + }, + "bam_stub_versions": { + "content": [ [ - - ], + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:13:09.713353823" + }, + "cram_to_bam_index_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.972288" + }, + "cram_to_bam_sam": { + "content": [ [ - ], - [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" ] ], - "timestamp": "2023-12-04T17:41:17.563069206" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.999247" }, - "sarscov2 - [bam, []], [], []": { + "cram_to_bam_index_sam": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.976457" + }, + "cram_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.497581" + }, + "cram_csi": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.50038" + }, + "cram_to_bam_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.992239" + }, + "cram_to_bam_index_qname_csi": { + "content": [ + "test.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.325496" + }, + "bam_stub_sam": { + "content": [ [ - ], - [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" ] ], - "timestamp": "2023-12-04T17:41:03.206994564" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.079529" }, - "homo_sapiens - [cram, []], fasta, qname - bam & index output": { + "cram_cram": { + "content": [ + "test.cram" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.490286" + }, + "bam_csi": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.262882" + }, + "cram_to_bam_crai": { + "content": [ [ - ], - "test.bam.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.989247" + }, + "cram_to_bam_index_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.967681" + }, + "cram_to_bam_index_qname_versions": { + "content": [ [ - - ], + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:13:03.935041046" + }, + "cram_to_bam_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.982361" + }, + "cram_to_bam_index_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.95456" + }, + "cram_to_bam_index_versions": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" ] ], - "timestamp": "2023-12-04T17:44:39.165289759" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:55.910685496" }, - "homo_sapiens - [cram, []], fasta, [] - bam & index output": { + "cram_to_bam_bai": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.98601" + }, + "cram_to_bam_versions": { + "content": [ [ - - ], - "test.bam.csi", + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:47.715221169" + }, + "cram_bam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.495512" + }, + "bam_stub_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.076908" + }, + "cram_to_bam_index_qname_bai": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] ], - "timestamp": "2023-12-04T17:44:32.25731224" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" }, - "sarscov2 - [bam, []], [], [] - stub": { + "cram_to_bam_index_qname_crai": { "content": [ - "test.bam", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.330789" + }, + "cram_bai": { + "content": [ [ - ], - "test.csi", + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.493129" + }, + "bam_stub_crai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.074313" + }, + "cram_to_bam_index_qname_bam": { + "content": [ + "test.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "bam_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:31.692607421" + }, + "cram_to_bam_index_qname_cram": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.333248" + }, + "bam_crai": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] ], - "timestamp": "2023-12-04T17:44:45.81037195" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.259774" }, - "homo_sapiens - [cram, crai], fasta, []": { + "bam_cram": { "content": [ - "test.cram", [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.261287" + }, + "cram_to_bam_csi": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:04.995454" + }, + "cram_sam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:56.502625" + }, + "cram_versions": { + "content": [ + [ + "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.01.0" + }, + "timestamp": "2024-02-13T16:12:39.913411036" + }, + "bam_sam": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:37:51.264651" + }, + "cram_to_bam_index_bai": { + "content": [ [ - ], + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:12.962863" + }, + "cram_to_bam_index_qname_sam": { + "content": [ [ - "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b" + ] ], - "timestamp": "2023-12-04T17:41:10.730011823" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.337634" + }, + "bam_stub_csi": { + "content": [ + "test.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:32.068596" } } \ No newline at end of file diff --git a/modules/nf-core/sentieon/bwaindex/main.nf b/modules/nf-core/sentieon/bwaindex/main.nf index 0d99cb67..e36dcc34 100644 --- a/modules/nf-core/sentieon/bwaindex/main.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -22,7 +22,7 @@ process SENTIEON_BWAINDEX { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -52,7 +52,7 @@ process SENTIEON_BWAINDEX { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index e25515e7..230297d0 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -27,7 +27,7 @@ process SENTIEON_BWAMEM { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -77,7 +77,7 @@ process SENTIEON_BWAMEM { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/datametrics/main.nf b/modules/nf-core/sentieon/datametrics/main.nf index 3be2d11a..d1678187 100644 --- a/modules/nf-core/sentieon/datametrics/main.nf +++ b/modules/nf-core/sentieon/datametrics/main.nf @@ -31,7 +31,7 @@ process SENTIEON_DATAMETRICS { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -83,7 +83,7 @@ process SENTIEON_DATAMETRICS { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf index 316993cc..fbcd595f 100644 --- a/modules/nf-core/sentieon/dedup/main.nf +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -32,7 +32,7 @@ process SENTIEON_DEDUP { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -84,7 +84,7 @@ process SENTIEON_DEDUP { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf index 1cbb02e3..b728a5ec 100644 --- a/modules/nf-core/sentieon/dnamodelapply/main.nf +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -28,7 +28,7 @@ process SENTIEON_DNAMODELAPPLY { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -77,7 +77,7 @@ process SENTIEON_DNAMODELAPPLY { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index 7e5adefc..6adea35e 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -35,7 +35,7 @@ process SENTIEON_DNASCOPE { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -94,7 +94,7 @@ process SENTIEON_DNASCOPE { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/readwriter/main.nf b/modules/nf-core/sentieon/readwriter/main.nf index b9afe576..0bace538 100644 --- a/modules/nf-core/sentieon/readwriter/main.nf +++ b/modules/nf-core/sentieon/readwriter/main.nf @@ -28,7 +28,7 @@ process SENTIEON_READWRITER { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -82,7 +82,7 @@ process SENTIEON_READWRITER { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/sentieon/wgsmetrics/main.nf b/modules/nf-core/sentieon/wgsmetrics/main.nf index b16641d9..a028e4a1 100644 --- a/modules/nf-core/sentieon/wgsmetrics/main.nf +++ b/modules/nf-core/sentieon/wgsmetrics/main.nf @@ -28,7 +28,7 @@ process SENTIEON_WGSMETRICS { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' @@ -78,7 +78,7 @@ process SENTIEON_WGSMETRICS { // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine == 'singularity') { + if (workflow.containerEngine in ['singularity','apptainer']) { fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' } else { fix_ld_library_path = '' diff --git a/modules/nf-core/svdb/merge/environment.yml b/modules/nf-core/svdb/merge/environment.yml index 4aad50da..e6fec088 100644 --- a/modules/nf-core/svdb/merge/environment.yml +++ b/modules/nf-core/svdb/merge/environment.yml @@ -6,4 +6,5 @@ channels: dependencies: - svdb=2.8.1 # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.16.1 + - samtools=1.19.2 + - htslib=1.19.1 diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 827d11b3..c24a9a7c 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -3,8 +3,8 @@ process SVDB_MERGE { label 'process_medium' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0': - 'biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0' }" + 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:511069f65a53621c5503e5cfee319aa3c735abfa-0': + 'biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:511069f65a53621c5503e5cfee319aa3c735abfa-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 84265acb..e53e61fe 100644 --- a/modules/nf-core/svdb/merge/meta.yml +++ b/modules/nf-core/svdb/merge/meta.yml @@ -36,7 +36,7 @@ output: - vcf: type: file description: merged VCF file - pattern: "*_sv_merge.vcf.gz" + pattern: "*.vcf.gz" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/svdb/merge/tests/main.nf.test b/modules/nf-core/svdb/merge/tests/main.nf.test index f06b5998..42f7c570 100644 --- a/modules/nf-core/svdb/merge/tests/main.nf.test +++ b/modules/nf-core/svdb/merge/tests/main.nf.test @@ -13,10 +13,11 @@ nextflow_process { when { process { """ - input[0] = [[ id:'test' ], // meta map - [file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists: true) ] - ] + input[0] = Channel.of([ + [ id:'test' ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf', checkIfExists: true) ] + ]) input[1] = [ 'tiddit', 'cnvnator'] """ } @@ -36,10 +37,11 @@ nextflow_process { when { process { """ - input[0] = [[ id:'test' ], // meta map - [file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists: true) ] - ] + input[0] = Channel.of([ + [ id:'test' ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf', checkIfExists: true) ] + ]) input[1] = [] """ } diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test index 679e83c7..2a7c97bf 100644 --- a/modules/nf-core/untar/tests/main.nf.test +++ b/modules/nf-core/untar/tests/main.nf.test @@ -3,17 +3,12 @@ nextflow_process { name "Test Process UNTAR" script "../main.nf" process "UNTAR" - tag "modules" tag "modules_nfcore" tag "untar" - test("test_untar") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] @@ -33,9 +28,6 @@ nextflow_process { test("test_untar_onlyfiles") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap index ace42576..64550292 100644 --- a/modules/nf-core/untar/tests/main.nf.test.snap +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -12,7 +12,11 @@ ] ] ], - "timestamp": "2023-10-18T11:56:46.878844" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T11:49:41.320643" }, "test_untar": { "content": [ @@ -29,6 +33,10 @@ ] ] ], - "timestamp": "2023-10-18T11:56:08.16574" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T11:49:33.795172" } } \ No newline at end of file From d0b184f0f7a162e5276f4dd01878e0101ae22749 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Mar 2024 12:49:09 +0100 Subject: [PATCH 1653/1921] address warnings --- modules.json | 6 +- modules/local/mt_deletion_script.nf | 6 +- modules/nf-core/tabix/bgzip/environment.yml | 1 + modules/nf-core/tabix/bgzip/main.nf | 7 +- .../tabix/bgzip/tests/bgzip_compress.config | 5 + .../nf-core/tabix/bgzip/tests/main.nf.test | 111 +++++++++ .../tabix/bgzip/tests/main.nf.test.snap | 186 +++++++++++++++ modules/nf-core/tabix/bgzip/tests/tags.yml | 2 + .../nf-core/tabix/bgzip/tests/vcf_none.config | 5 + .../nf-core/tabix/bgziptabix/environment.yml | 1 + modules/nf-core/tabix/bgziptabix/main.nf | 6 +- .../tabix/bgziptabix/tests/main.nf.test | 94 ++++++++ .../tabix/bgziptabix/tests/main.nf.test.snap | 143 ++++++++++++ .../tabix/bgziptabix/tests/tabix_csi.config | 5 + .../tabix/bgziptabix/tests/tabix_tbi.config | 5 + .../nf-core/tabix/bgziptabix/tests/tags.yml | 2 + modules/nf-core/tabix/tabix/environment.yml | 1 + modules/nf-core/tabix/tabix/main.nf | 7 +- .../nf-core/tabix/tabix/tests/main.nf.test | 142 ++++++++++++ .../tabix/tabix/tests/main.nf.test.snap | 217 ++++++++++++++++++ .../tabix/tabix/tests/tabix_bed.config | 5 + .../tabix/tabix/tests/tabix_gff.config | 5 + .../tabix/tabix/tests/tabix_vcf_csi.config | 5 + .../tabix/tabix/tests/tabix_vcf_tbi.config | 5 + modules/nf-core/tabix/tabix/tests/tags.yml | 2 + .../local/annotate_mobile_elements.nf | 1 - subworkflows/local/annotate_mt_snvs.nf | 1 + subworkflows/local/call_repeat_expansions.nf | 1 - .../local/call_structural_variants.nf | 3 +- subworkflows/local/qc_bam.nf | 1 + 30 files changed, 963 insertions(+), 18 deletions(-) create mode 100644 modules/nf-core/tabix/bgzip/tests/bgzip_compress.config create mode 100644 modules/nf-core/tabix/bgzip/tests/main.nf.test create mode 100644 modules/nf-core/tabix/bgzip/tests/main.nf.test.snap create mode 100644 modules/nf-core/tabix/bgzip/tests/tags.yml create mode 100644 modules/nf-core/tabix/bgzip/tests/vcf_none.config create mode 100644 modules/nf-core/tabix/bgziptabix/tests/main.nf.test create mode 100644 modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap create mode 100644 modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config create mode 100644 modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config create mode 100644 modules/nf-core/tabix/bgziptabix/tests/tags.yml create mode 100644 modules/nf-core/tabix/tabix/tests/main.nf.test create mode 100644 modules/nf-core/tabix/tabix/tests/main.nf.test.snap create mode 100644 modules/nf-core/tabix/tabix/tests/tabix_bed.config create mode 100644 modules/nf-core/tabix/tabix/tests/tabix_gff.config create mode 100644 modules/nf-core/tabix/tabix/tests/tabix_vcf_csi.config create mode 100644 modules/nf-core/tabix/tabix/tests/tabix_vcf_tbi.config create mode 100644 modules/nf-core/tabix/tabix/tests/tags.yml diff --git a/modules.json b/modules.json index 54d8ed01..b863e4d8 100644 --- a/modules.json +++ b/modules.json @@ -461,17 +461,17 @@ }, "tabix/bgzip": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", "installed_by": ["modules"] }, "tiddit/cov": { diff --git a/modules/local/mt_deletion_script.nf b/modules/local/mt_deletion_script.nf index f363b949..0da71506 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.17" + conda "bioconda::samtools=1.19.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'biocontainers/samtools:1.17--h00cdaf9_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : + 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml index 4fe40c56..361c078b 100644 --- a/modules/nf-core/tabix/bgzip/environment.yml +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -5,3 +5,4 @@ channels: - defaults dependencies: - bioconda::tabix=1.11 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf index 7772e9ad..3065dab0 100644 --- a/modules/nf-core/tabix/bgzip/main.nf +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -4,8 +4,8 @@ process TABIX_BGZIP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'biocontainers/tabix:1.11--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : + 'biocontainers/htslib:1.19.1--h81da01d_1' }" input: tuple val(meta), path(input) @@ -44,7 +44,8 @@ process TABIX_BGZIP { output = in_bgzip ? input.getBaseName() : "${prefix}.${input.getExtension()}.gz" """ - touch ${output} + echo "" | gzip > ${output} + touch ${output}.gzi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config b/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config new file mode 100644 index 00000000..6b6ff55f --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/bgzip_compress.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIP { + ext.args = ' -i' + } +} diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test b/modules/nf-core/tabix/bgzip/tests/main.nf.test new file mode 100644 index 00000000..95fd4c50 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test @@ -0,0 +1,111 @@ +nextflow_process { + + name "Test Process TABIX_BGZIP" + script "modules/nf-core/tabix/bgzip/main.nf" + process "TABIX_BGZIP" + + tag "modules" + tag "modules_nfcore" + tag "tabix" + tag "tabix/bgzip" + + test("sarscov2_vcf_bgzip_compress") { + when { + process { + """ + input[0] = [ + [ id:'bgzip_test' ], + [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("bgzip_test") + } + ) + } + } + + test("homo_genome_bedgz_compress") { + when { + process { + """ + input[0] = [ + [ id:'bedgz_test' ], + [ file(params.test_data['homo_sapiens']['genome']['genome_bed_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("bedgz_test") + } + ) + } + } + + test("sarscov2_vcf_bgzip_compress_stub") { + options '-stub' + config "./bgzip_compress.config" + + when { + process { + """ + input[0] = [ + [ id:"test_stub" ], + [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.output[0][1]).name + ).match("test_stub") + } + ) + } + } + + test("sarscov2_vcf_bgzip_compress_gzi") { + config "./bgzip_compress.config" + when { + process { + """ + input[0] = [ + [ id:"gzi_compress_test" ], + [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gzi[0][1]).name + ).match("gzi_compress_test") + } + ) + } + } +} diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap new file mode 100644 index 00000000..53d59932 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap @@ -0,0 +1,186 @@ +{ + "gzi_compress_test": { + "content": [ + "gzi_compress_test.vcf.gz.gzi" + ], + "timestamp": "2024-02-19T14:52:29.328146" + }, + "homo_genome_bedgz_compress": { + "content": [ + { + "0": [ + [ + { + "id": "bedgz_test" + }, + "bedgz_test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ], + "gzi": [ + + ], + "output": [ + [ + { + "id": "bedgz_test" + }, + "bedgz_test.bed:md5,87a15eb9c2ff20ccd5cd8735a28708f7" + ] + ], + "versions": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ] + } + ], + "timestamp": "2024-02-19T14:52:12.422209" + }, + "test_stub": { + "content": [ + "test_stub.vcf.gz" + ], + "timestamp": "2024-02-19T14:52:20.811489" + }, + "sarscov2_vcf_bgzip_compress": { + "content": [ + { + "0": [ + [ + { + "id": "bgzip_test" + }, + "bgzip_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ], + "gzi": [ + + ], + "output": [ + [ + { + "id": "bgzip_test" + }, + "bgzip_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ] + } + ], + "timestamp": "2024-02-19T14:52:03.706028" + }, + "sarscov2_vcf_bgzip_compress_gzi": { + "content": [ + { + "0": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "1": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz.gzi:md5,26fd00d4e26141cd11561f6e7d4a2ad0" + ] + ], + "2": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ], + "gzi": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz.gzi:md5,26fd00d4e26141cd11561f6e7d4a2ad0" + ] + ], + "output": [ + [ + { + "id": "gzi_compress_test" + }, + "gzi_compress_test.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + "versions": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ] + } + ], + "timestamp": "2024-02-19T14:52:29.271494" + }, + "bgzip_test": { + "content": [ + "bgzip_test.vcf.gz" + ], + "timestamp": "2024-02-19T14:52:03.768295" + }, + "bedgz_test": { + "content": [ + "bedgz_test.bed" + ], + "timestamp": "2024-02-19T14:52:12.453855" + }, + "sarscov2_vcf_bgzip_compress_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ], + "gzi": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz.gzi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output": [ + [ + { + "id": "test_stub" + }, + "test_stub.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,e023292de6ee109a44fc67475d658174" + ] + } + ], + "timestamp": "2024-02-19T14:52:20.769619" + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgzip/tests/tags.yml b/modules/nf-core/tabix/bgzip/tests/tags.yml new file mode 100644 index 00000000..de0eec86 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/tags.yml @@ -0,0 +1,2 @@ +tabix/bgzip: + - "modules/nf-core/tabix/bgzip/**" diff --git a/modules/nf-core/tabix/bgzip/tests/vcf_none.config b/modules/nf-core/tabix/bgzip/tests/vcf_none.config new file mode 100644 index 00000000..f3a3c467 --- /dev/null +++ b/modules/nf-core/tabix/bgzip/tests/vcf_none.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIP { + ext.args = '' + } +} diff --git a/modules/nf-core/tabix/bgziptabix/environment.yml b/modules/nf-core/tabix/bgziptabix/environment.yml index 028461c9..c4235872 100644 --- a/modules/nf-core/tabix/bgziptabix/environment.yml +++ b/modules/nf-core/tabix/bgziptabix/environment.yml @@ -5,3 +5,4 @@ channels: - defaults dependencies: - bioconda::tabix=1.11 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index f9482690..bcdcf2a6 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -4,8 +4,8 @@ process TABIX_BGZIPTABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'biocontainers/tabix:1.11--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : + 'biocontainers/htslib:1.19.1--h81da01d_1' }" input: tuple val(meta), path(input) @@ -35,7 +35,7 @@ process TABIX_BGZIPTABIX { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.${input.getExtension()}.gz + echo "" | gzip > ${prefix}.${input.getExtension()}.gz touch ${prefix}.${input.getExtension()}.gz.tbi touch ${prefix}.${input.getExtension()}.gz.csi diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test new file mode 100644 index 00000000..87ea2c84 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test @@ -0,0 +1,94 @@ +nextflow_process { + + name "Test Process TABIX_BGZIPTABIX" + script "modules/nf-core/tabix/bgziptabix/main.nf" + process "TABIX_BGZIPTABIX" + + tag "modules" + tag "modules_nfcore" + tag "tabix" + tag "tabix/bgziptabix" + + test("sarscov2_bed_tbi") { + config "./tabix_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'tbi_test' ], + [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_tbi[0][1]).name + ).match("tbi_test") + } + ) + } + } + + test("sarscov2_bed_csi") { + config "./tabix_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'csi_test' ], + [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_csi[0][1]).name + ).match("csi_test") + } + ) + } + + } + + test("sarscov2_bed_csi_stub") { + config "./tabix_csi.config" + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_csi[0][1]).name + ).match("csi_stub") + } + ) + } + + } + +} diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap new file mode 100644 index 00000000..fcecb2e4 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap @@ -0,0 +1,143 @@ +{ + "sarscov2_bed_tbi": { + "content": [ + { + "0": [ + [ + { + "id": "tbi_test" + }, + "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "tbi_test.bed.gz.tbi:md5,24908545311cf2b7c803c41d716872c4" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + ], + "gz_csi": [ + + ], + "gz_tbi": [ + [ + { + "id": "tbi_test" + }, + "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "tbi_test.bed.gz.tbi:md5,24908545311cf2b7c803c41d716872c4" + ] + ], + "versions": [ + "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + ] + } + ], + "timestamp": "2024-02-19T14:50:51.513838" + }, + "sarscov2_bed_csi": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "csi_test" + }, + "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "csi_test.bed.gz.csi:md5,e06165ddd34640783728cb07f2558b43" + ] + ], + "2": [ + "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + ], + "gz_csi": [ + [ + { + "id": "csi_test" + }, + "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", + "csi_test.bed.gz.csi:md5,e06165ddd34640783728cb07f2558b43" + ] + ], + "gz_tbi": [ + + ], + "versions": [ + "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + ] + } + ], + "timestamp": "2024-02-19T14:51:00.513777" + }, + "csi_test": { + "content": [ + "csi_test.bed.gz" + ], + "timestamp": "2024-02-19T14:51:00.548801" + }, + "csi_stub": { + "content": [ + "test.bed.gz" + ], + "timestamp": "2024-02-19T14:51:09.218454" + }, + "tbi_test": { + "content": [ + "tbi_test.bed.gz" + ], + "timestamp": "2024-02-19T14:50:51.579654" + }, + "sarscov2_bed_csi_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + ], + "gz_csi": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gz_tbi": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + ] + } + ], + "timestamp": "2024-02-19T14:51:09.164254" + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config b/modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config new file mode 100644 index 00000000..fb41a314 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/tabix_csi.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIPTABIX { + ext.args2 = '-p vcf --csi' + } +} diff --git a/modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config b/modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config new file mode 100644 index 00000000..c1915dc4 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/tabix_tbi.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_BGZIPTABIX { + ext.args2 = '-p vcf' + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/bgziptabix/tests/tags.yml b/modules/nf-core/tabix/bgziptabix/tests/tags.yml new file mode 100644 index 00000000..5052b4d7 --- /dev/null +++ b/modules/nf-core/tabix/bgziptabix/tests/tags.yml @@ -0,0 +1,2 @@ +tabix/bgziptabix: + - "modules/nf-core/tabix/bgziptabix/**" diff --git a/modules/nf-core/tabix/tabix/environment.yml b/modules/nf-core/tabix/tabix/environment.yml index 7167fb87..76b45e16 100644 --- a/modules/nf-core/tabix/tabix/environment.yml +++ b/modules/nf-core/tabix/tabix/environment.yml @@ -5,3 +5,4 @@ channels: - defaults dependencies: - bioconda::tabix=1.11 + - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index c304a8a3..f5e582d2 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -4,8 +4,8 @@ process TABIX_TABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'biocontainers/tabix:1.11--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : + 'biocontainers/htslib:1.19.1--h81da01d_1' }" input: tuple val(meta), path(tab) @@ -32,7 +32,8 @@ process TABIX_TABIX { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${tab}.tbi + touch ${prefix}.tbi + touch ${prefix}.csi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test b/modules/nf-core/tabix/tabix/tests/main.nf.test new file mode 100644 index 00000000..3a150c70 --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test @@ -0,0 +1,142 @@ +nextflow_process { + + name "Test Process TABIX_TABIX" + script "modules/nf-core/tabix/tabix/main.nf" + process "TABIX_TABIX" + + tag "modules" + tag "modules_nfcore" + tag "tabix" + tag "tabix/tabix" + + test("sarscov2_bedgz_tbi") { + config "./tabix_bed.config" + when { + process { + """ + input[0] = [ + [ id:'tbi_bed' ], + [ file(params.test_data['sarscov2']['genome']['test_bed_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.tbi[0][1]).name + ).match("tbi_bed") + } + ) + } + } + + test("sarscov2_gff_tbi") { + config "./tabix_gff.config" + when { + process { + """ + input[0] = [ + [ id:'tbi_gff' ], + [ file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.tbi[0][1]).name + ).match("tbi_gff") + } + ) + } + + } + + test("sarscov2_vcf_tbi") { + config "./tabix_vcf_tbi.config" + when { + process { + """ + input[0] = [ + [ id:'tbi_vcf' ], + [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.tbi[0][1]).name + ).match("tbi_vcf") + } + ) + } + + } + + test("sarscov2_vcf_csi") { + config "./tabix_vcf_csi.config" + when { + process { + """ + input[0] = [ + [ id:'vcf_csi' ], + [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.csi[0][1]).name + ).match("vcf_csi") + } + ) + } + + } + + test("sarscov2_vcf_csi_stub") { + config "./tabix_vcf_csi.config" + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'vcf_csi_stub' ], + [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.csi[0][1]).name + ).match("vcf_csi_stub") + } + ) + } + + } + +} diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap new file mode 100644 index 00000000..484ebe29 --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap @@ -0,0 +1,217 @@ +{ + "vcf_csi_stub": { + "content": [ + "vcf_csi_stub.csi" + ], + "timestamp": "2024-02-19T14:54:03.35052" + }, + "tbi_gff": { + "content": [ + "genome.gff3.gz.tbi" + ], + "timestamp": "2024-02-19T14:53:37.420216" + }, + "sarscov2_gff_tbi": { + "content": [ + { + "0": [ + [ + { + "id": "tbi_gff" + }, + "genome.gff3.gz.tbi:md5,53fc683fd217aae47ef10d23c52a9178" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "tbi_gff" + }, + "genome.gff3.gz.tbi:md5,53fc683fd217aae47ef10d23c52a9178" + ] + ], + "versions": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ] + } + ], + "timestamp": "2024-02-19T14:53:37.388157" + }, + "sarscov2_bedgz_tbi": { + "content": [ + { + "0": [ + [ + { + "id": "tbi_bed" + }, + "test.bed.gz.tbi:md5,0f17d85e7f0a042b2aa367b70df224f8" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "tbi_bed" + }, + "test.bed.gz.tbi:md5,0f17d85e7f0a042b2aa367b70df224f8" + ] + ], + "versions": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ] + } + ], + "timestamp": "2024-02-19T14:53:28.879408" + }, + "tbi_vcf": { + "content": [ + "test.vcf.gz.tbi" + ], + "timestamp": "2024-02-19T14:53:46.402522" + }, + "vcf_csi": { + "content": [ + "test.vcf.gz.csi" + ], + "timestamp": "2024-02-19T14:53:54.921189" + }, + "sarscov2_vcf_tbi": { + "content": [ + { + "0": [ + [ + { + "id": "tbi_vcf" + }, + "test.vcf.gz.tbi:md5,897f3f378a811b90e6dee56ce08d2bcf" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "tbi_vcf" + }, + "test.vcf.gz.tbi:md5,897f3f378a811b90e6dee56ce08d2bcf" + ] + ], + "versions": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ] + } + ], + "timestamp": "2024-02-19T14:53:46.370358" + }, + "sarscov2_vcf_csi_stub": { + "content": [ + { + "0": [ + [ + { + "id": "vcf_csi_stub" + }, + "vcf_csi_stub.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "vcf_csi_stub" + }, + "vcf_csi_stub.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,3d45df6d80883bad358631069a2940fd" + ], + "csi": [ + [ + { + "id": "vcf_csi_stub" + }, + "vcf_csi_stub.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + [ + { + "id": "vcf_csi_stub" + }, + "vcf_csi_stub.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3d45df6d80883bad358631069a2940fd" + ] + } + ], + "timestamp": "2024-02-19T14:54:03.310028" + }, + "sarscov2_vcf_csi": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "vcf_csi" + }, + "test.vcf.gz.csi:md5,0731ad6f40104d2bbb1a2cc478ef8f03" + ] + ], + "2": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ], + "csi": [ + [ + { + "id": "vcf_csi" + }, + "test.vcf.gz.csi:md5,0731ad6f40104d2bbb1a2cc478ef8f03" + ] + ], + "tbi": [ + + ], + "versions": [ + "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + ] + } + ], + "timestamp": "2024-02-19T14:53:54.886876" + }, + "tbi_bed": { + "content": [ + "test.bed.gz.tbi" + ], + "timestamp": "2024-02-19T14:53:28.947628" + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/tabix/tests/tabix_bed.config b/modules/nf-core/tabix/tabix/tests/tabix_bed.config new file mode 100644 index 00000000..7ff05905 --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/tabix_bed.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_TABIX { + ext.args = '-p bed' + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/tabix/tests/tabix_gff.config b/modules/nf-core/tabix/tabix/tests/tabix_gff.config new file mode 100644 index 00000000..20c0a1e3 --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/tabix_gff.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_TABIX { + ext.args = '-p gff' + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/tabix/tests/tabix_vcf_csi.config b/modules/nf-core/tabix/tabix/tests/tabix_vcf_csi.config new file mode 100644 index 00000000..eb4f2d7e --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/tabix_vcf_csi.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_TABIX { + ext.args = '-p vcf --csi' + } +} diff --git a/modules/nf-core/tabix/tabix/tests/tabix_vcf_tbi.config b/modules/nf-core/tabix/tabix/tests/tabix_vcf_tbi.config new file mode 100644 index 00000000..2774c8a9 --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/tabix_vcf_tbi.config @@ -0,0 +1,5 @@ +process { + withName: TABIX_TABIX { + ext.args = '-p vcf' + } +} \ No newline at end of file diff --git a/modules/nf-core/tabix/tabix/tests/tags.yml b/modules/nf-core/tabix/tabix/tests/tags.yml new file mode 100644 index 00000000..6eda0653 --- /dev/null +++ b/modules/nf-core/tabix/tabix/tests/tags.yml @@ -0,0 +1,2 @@ +tabix/tabix: + - "modules/nf-core/tabix/tabix/**" diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index 53fecd0a..0d22cd80 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -6,7 +6,6 @@ include { BCFTOOLS_VIEW as BCFTOOLS_VIEW_FILTER } from '../../modules/nf-core/bc include { ENSEMBLVEP_VEP as ENSEMBLVEP_ME } from '../../modules/nf-core/ensemblvep/vep/main' include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' -include { TABIX_BGZIPTABIX as BGZIP_TABIX_ME } from '../../modules/nf-core/tabix/bgziptabix/main' include { ANNOTATE_CSQ_PLI as ANNOTATE_CSQ_PLI_ME } from '../../subworkflows/local/annotate_consequence_pli.nf' include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_ME } from '../../subworkflows/local/generate_clinical_set.nf' diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index f28744f6..393ac317 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -102,6 +102,7 @@ workflow ANNOTATE_MT_SNVS { ch_versions = ch_versions.mix(VCFANNO_MT.out.versions) ch_versions = ch_versions.mix(HMTNOTE_ANNOTATE.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) + ch_versions = ch_versions.mix(ZIP_TABIX_HMTNOTE.out.versions) emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index d910cdac..65437480 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -11,7 +11,6 @@ include { STRANGER } from '../../modules/nf- include { SAMTOOLS_SORT } from '../../modules/nf-core/samtools/sort/main' include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/main' include { SVDB_MERGE as SVDB_MERGE_REPEATS } from '../../modules/nf-core/svdb/merge/main' -include { TABIX_BGZIPTABIX as BGZIPTABIX_EXP } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as INDEX_STRANGER } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_EXP_RENAME } from '../../modules/nf-core/tabix/tabix/main' diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index ad45dc29..f590bb60 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -4,7 +4,6 @@ include { CALL_SV_MANTA } from './variant_calling/call_sv_manta' include { CALL_SV_MT } from './variant_calling/call_sv_MT' -include { CALL_SV_MT as CALL_SV_MT_SHIFT } from './variant_calling/call_sv_MT' include { CALL_SV_TIDDIT } from './variant_calling/call_sv_tiddit' include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' include { CALL_SV_GERMLINECNVCALLER } from './variant_calling/call_sv_germlinecnvcaller' @@ -84,10 +83,12 @@ workflow CALL_STRUCTURAL_VARIANTS { TABIX_TABIX (SVDB_MERGE.out.vcf) + ch_versions = ch_versions.mix(CALL_SV_CNVNATOR.out.versions) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) + ch_versions = ch_versions.mix(SVDB_MERGE.out.versions) emit: vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 9bb5a2a4..b1ce5141 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -70,6 +70,7 @@ workflow QC_BAM { 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) + ch_versions = ch_versions.mix(CHROMOGRAPH_COV.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first()) ch_versions = ch_versions.mix(TIDDIT_COV.out.versions.first()) From 595de0e797301ee8fdb8a00485e68229672641f4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:03:53 +0100 Subject: [PATCH 1654/1921] update zenodo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1cf7af5f..495ccea7 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ [![GitHub Actions CI Status](https://github.com/nf-core/raredisease/actions/workflows/ci.yml/badge.svg)](https://github.com/nf-core/raredisease/actions/workflows/ci.yml) -[![GitHub Actions Linting Status](https://github.com/nf-core/raredisease/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/raredisease/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/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) +[![GitHub Actions Linting Status](https://github.com/nf-core/raredisease/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/raredisease/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/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) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![GitHub Actions Linting Status](https://github.com/nf-core/raredisease/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/raredisease/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/raredisease/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7995798) +[![GitHub Actions Linting Status](https://github.com/nf-core/raredisease/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/raredisease/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/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%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/) From 9b7e402025c0f409cbe244a6aec9fdb0ba85f286 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:28:18 +0100 Subject: [PATCH 1655/1921] fix lint --- .nf-core.yml | 1 + assets/nf-core-raredisease_logo_light.png | Bin 122212 -> 188284 bytes conf/modules/peddy_check.config | 26 ---------------------- conf/modules/raredisease.config | 14 ++++++++++++ modules/local/mt_deletion_script.nf | 1 - nextflow.config | 1 - subworkflows/local/peddy_check.nf | 22 ------------------ workflows/raredisease.nf | 10 ++++----- 8 files changed, 20 insertions(+), 55 deletions(-) delete mode 100644 conf/modules/peddy_check.config delete mode 100644 subworkflows/local/peddy_check.nf diff --git a/.nf-core.yml b/.nf-core.yml index 285d7803..0ceb0624 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -6,6 +6,7 @@ lint: - .github/PULL_REQUEST_TEMPLATE.md - docs/images/nf-core-raredisease_logo_dark.png - docs/images/nf-core-raredisease_logo_light.png + - assets/nf-core-raredisease_logo_light.png - assets/multiqc_config.yaml - .github/workflows/linting.yml - pyproject.toml diff --git a/assets/nf-core-raredisease_logo_light.png b/assets/nf-core-raredisease_logo_light.png index 163054c389f13eb2eac09d88c1aaaa5d99719db2..d6c4c283aa9557a1e8767df6f0e3e953e62f6048 100644 GIT binary patch literal 188284 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

=q~pYuN!VsFQ7GVQ@f!mQO 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%0DBasA$fS&w}aO=fv@KS z9u1`?-fgp9K`%uShSP_J@lJ!>(P(n)?rR5l_LqQdJ+;oOK`UMR=;v4BwzqQ}c?&u8Qy8-g@n zRJvi%$BM1PNI9g@Ru7kW9;)VwhlC@8Ml`MQr3OK0lciJc(Ci7D`0MkyWa#YYhBsm7 zAx`A$k7g)q{J&pjhVXOEn$LvdIvcifEGCG3#GudNt#_v^Fpv`Pyx}?|)L%&%Tl=X8 zcT50aLLO3QSk-QFp>b)df*-?$R1R!>_(bh>|MeX=Y?ju;F=oj1@GDe0y z@7H2|OrX96opVf#FMOX`FHL0PQ+MedZmFRwsG%8bkaCc2#isnqX^IQrB&}C$eFmmS zY!d`5kmU8o<)!>mp@KolxMsa^5t6001$E&s$A&l{PP$VTfThcxW21!}=}Onw#_D7} zJUKUVUXm9tt2G6kZO4rx{ePz_y5gB}J&>R0IK=b2kP^zRG+Y@e?(a*vp&TgGNq{x3 ztYJ%q4rFX{iH(1VTYUgYmCp|g#*$itb%rZ<3ZpOj!$1Taw>e!f)doJUqqg{YwD8MR zPf@&+_03N|@7gkUnJ6;s-T;{F?R|t$vt5Zdf(XT{h`JEP>98X zs`aJZut@ok74soa&xL3fU3e_?$wiU4m6C=eGkM1wB~RhU(s+?Pqi{*7S*97Yjw!Aj zPr<7)#)n&A(w;$_Y~em(FV9NE79_QbptFWEg*YcV+R0K0S{ z8;;L(PGpd3TRoX|C2acwCCYH)MEA>xgJ9GbNGY>{d&OzP)(iM~N67jraE?sWAD;T) zQ$?K6ME9cG2g;G_P>m1@UVKh2yfqIcDF~fXxXri_ggcRH*IG3u_sO{>_?a}`HKWXb zBzk3LSzD_8$5%t*W48C{fcG#!_@T4>xMat?kXw7CLD8;#%~$avU@tNU*`WGB@c>-G z^yVN-EBu@Y&4>`Ri5YTwW=PK0ZP^r3to&5*!u#;yR^1?iK^)`PBo^`jJMc!_JpaU+ zQO)ksHvxwsFB4GDs9^aLgRw}gDfvZ3*mqq^C0{ZAqD9KB!PfjKq)=^jlDD-&G(WM5 z3xQ6%1{EToqVl1ufh|aOD$9?Cf02NkcF|^K8nMm2CUeC3f(J z=FPK8rMvJ;@YcuxiKt0qU+x8!yzp`4n-1#2ZGDE1uHZ-$*C`BYABGYprAKN;t0y|s zSv)m7a$MxxqRzC+XS;YtRzmMcHsc#T?|fz50cXoKi|mX&Cl{%@aoUdbCobxgiF9`2 zbQCMmg&&JSk5ef?b_EW$$aa?R=*-CNyQSg-@x?e9uGtT$8d1E6R~4$JcGGKs>{t#j zo0pr7Gy|-rI1*(5*?{*XVysFf?`yU2{WpDvc_lXbzT&4BDJ<0h&ClX*0{4-I_JmTf66M$fhLQVm z668F2)$AtQs)Z44sxxN} z-XkeQUa^cJ*Es{{?2x@A#Sy3zu30u2yLk{m!ckAZUW}kV&$N)NvOHrk121a{^ME(g0p-^WbC{U6jk-sYQHRsTohC|2>kOEuyE242C`Rn7qa!)7EA2W=^ ztbCu;gML;x(ajO_I1nFgJ%m}l%eN6CK8`M+$hr)fuJ+!m%a>Ia3Pvde43lUFlz&a) z$!Rhs@u|=f*&AlEVxDJ1EU#TG%ir_Ow`pR<6+ZnOf!yu`n z5Eb!f`sHU0wQ;WoimM1M4L(J>W)y1jYui^LB3YuL5qr|6^Do&U+I-|sSCL%Sjf$-y zC`rgj(h9CI=+RQ|Q`{NJ5ovJ<>I6D_Nv3}&0p-C5)gW;@cZVV+c=E$?Hx}27W`CaY z(?V(RZa<@PfgluUh5UJwub1+Q1ijP>*mSw#NITkkgC^m20P0U9N*K*3;Lm2bJ4g3nGuob0CpbQ(LCkI9kMr1CA$AunyRQxczdE51LBxMts@ zYIqim`@FWk7h|%@3Vhe5=@w054yCDyA_`}}Z**OYNC)_?aDC6!Z&aZjZDTQ;p-?4o ziQ2dN?xDb=!S2R;GqJj)3TDl=W3VZa81CE%Lgv8}h7}B;E_=ghG?%Qp{KvkmrL_4K zcQwW^|3Ru0sU#@nE6q$JNs;O&gQ0Uy#VpTSlTp^(58$Dh#9tl8e(&+fp;Q@(; zfEj5s(Wxa@LbUc`h##M$jq2juUDnalmzw52X`^i@p1TqtN#VhiflzFnMmA$X>6MM* z0lC{(iNW_f6r&6o)1;JKpBDpdE`q#;jr6^9cHg|a@ifOfWSaJl+yGrai6o2*y`Cnd zIMqJ=1peyrM!C;x-1*0LxM9$2=sQ#~sc@llt$e)pPt-Fzm!f>d+aS4h3pz_}?xwn! zjH^d#0!@9Ytw^CDGQWem?UZakIrRchc%Z7pj&N3N1j!wQTa7o3Y>GIVgS)1k)$yJ6li0pp%ie5F;_-Qwg4(zMwXYYUOz_q|pI<-fa$E*>m=kctDIF`;`&=gChw2Q zXI`T`Bo|~!ptF8MD_D2ZJEX^)=J$&}Z9kBBc+hy>m<^(F^YXK}`@!kN;8h9L2iN%H z_eDyaB7P)wPvU%L5^!dMDXcPly`}U>dM#Bv&v<&Jg+gMq7{zg%_)&RR>K)8;LT*0G zbuVZ^j`&*=2(=6EZXC-)vvf-*(xPj!0Fmt5-{3#pijO=w{$V&5J1`OA%YIZv#(O`> zcuuRDZey@-pmr-?lLt{NMdkr&cuG;;a5=R(=&2d9858>)47oy=!{Mvw_~lB5eR{w} z>QOcP(~|0|<6?VMpUJnVKeRDJG)c0FvUQ|q@Z>(PSFU2-(G7Y=tz4fr`)a>w@{HKn zB^31qCt&_q)mp~fp)BINx4BiX&7?w=yENyYdtRSUf;@&|L(W@=l#N!Kz`3M1GA)flvCl=16 zC{%txzP73|Nqvk-bqdK!ifu{hqR^0Wy=?n}rf=>Frv|Bp8m#f$J}p?jW;3py&ut&7 zAzeB`@WShL;m}!4T)LJjYm~Z8qS9_sg+b9LmT4k`%o4SZqE+L|kjOb!1dC_KeHp}4 z#nS3u3Q>M4I}Wq>pzYPufFOUi{vNiWc^^U;XY4fAenyRC1Sz&~o014q+~dZe2STFz z8O$7HMwG>bBHJD*Snhu37k>#KvoF?zU1aglb!?huY4uhR4kEnyteV)U`8zXwmiNR? z&P;zeUFM)*(IMjgfk#>L`k)865a;L5PfzX7hPBi4oCOhR9c3+5qnOFN2ej+NDSVG? zNpU;4X=G?XC|?jK*sNn?t3VZC(%4_P1kn_{WSUrzJdd@NvoGuVKm?>MQLE)s!vVRrvh7r zKfbZ?s7zs&NwB$u5yx0i$y^;(=81{DUNS#67qq_aUPwh88qfvaRP>KP8EuAReyYHD z%4P>)mWqe<#P5t12D6pFPFbZ<9^ZiiLKVq!SJhh9;A5+fxo}EOwb0u2@dT6mL$dRo zAS>y>ZN2SDtl#(kkxja{U!CJ_GOt|2@z#YV_7-`MZB^7S-th5l9KttMdAoY&xHjt^ zk9freO6su&tjH-VgJjr}P!c&Notcd6^w+L+_LK>MhUfahTkR|rlO~DcgxVd*ryd>D z(7Q>S>S+>5kPMUPp(o!r--ZeZ#SJ(@XHCtiMR>6Ts=G-gha#Oa>ympXwdcQ0UtOmG^1A7-)Ruxh5@-xFJ;WW| z7`amPO4pZW9Rh-r$>n4#qO_~y%*Mu^#w?J?1y)4(4QLUsZG{LwwgR>e;Ny$?x0{A? zH%KK)p9`Pr&EO$7qip%Y-=p+3uxfXJ*=~)RdhJwpNf5KnGZgn$G2TJ6g}O7+D*%9YY=DV!0}ozwSoUpTH^LR*zJ zhFxhiwSe^02sylv;0UK8l89l~s4v>w=ZTYJlH^i$@`WI5nJPScOxtGkWbqK40V) zjlhS6imhCC%?PtvS&#_diSKOhcA=Ck>-ZcT~DwOi+(HT7Xv!*N5FLENgn-K?n#m$M&9M2uJ>$s1kP~7iiF`yykNOJvBL%m<)}*aLkK~%Sr8uyv z?vmDUUFw$;_vU7}2(CSPuXy$Au0ejfUNP_Tp+WE7FvmIjTv>b5qpePEDunuqX9&(z z!A;-Q%G{`oq+~S*pAoEU*_`aaYYTPcD!E((gC1^O$|~iDu93{^ap2^Oe>7Yf312y= z^y+9)_m-k&T@iL8TIhD}iXx2a3i<|wG+OgYXYgX?gw_f%`(@>N@ zK&HbqeW)qWAVZ7xr=JlZ@bS@d%6`OW0s>?4FK36BW{(HGD-z}zTufw@cE_A3N1I;W z9OYQeQoZ+4ERT<>{PDB`>FMaJm%PA(fm=FMG47a&ZQSUciaFWpz0-@?(e7n-;IVF< zJl&8A4FDMt*A+DkC)y4b_>@aa+NQ-R|Bm*`@^KP*GPd;R4iNj==NL;;?=?$d9Nbi7p{zxO}Yyh8sJmxyUIno6kjx(LaTQ`GO z_C}WZ(jD$qDUZC)Zg!tQE=?=kQLQrbNO>vmXg2q2GOic@yxU^6K9xF0sbokzseI`4 zD7J4NT-2Zm4$b)NJl%0Ae5@|SF~8`&LGH13vQJt7^D7B$RBAQ+(%!4(Y2T2xGB%fQ zuw}SqJS=SMt0Ma~jXz($sOfp_ZhKINX>yw9>Zae`XkJ_=ewvj(GCP-{(%!)H0o1#< z_V8qWZ1~V9Ks{$|WnpP~KeFt(zZ=b{_qQW{&V(37q8;Vd7Tse3YaN}W2on>}V{PmW zYapl`5{ny6SrNC|@lGE+sxW*&$39bA9CK&*bj7}G@ej?=%z|oOiR67W@-I~zKFzPk z*QoU)PU2eNc&RzbC+iq58S3%8390{NUb|AzO9~qjK}{*T`4LdYCiu?a+<&k%mshax zo*1CLZHlc+Z=9F6O}ViZhu1F_NUf8sZ(8{*F0u018WGE$FUWg!D}j438l_KcZ06bU zA+~Rcb;-6_=;gPhy#~!FS4Y301r7J_`r1+j-g%tETkWB*Qt{9a7x1 z>7QjS)nIY$>$kc2^WJ8gB^da=KQc&{nYP~Y3SY@vPZ zF^MM08;w^FGjkX!r>Kl;i>85`*(7TEbJC(fGI8$afwrZ0*&xTY@$}J>`%jgyH*$46 zQ_k+2C2JYhi}>s;cY6#mR8mKoRC^9B#O>*$myjS~tm6c<@x(K4JFL{@MK9i@{4=xY zkTcvq-g*91Yh_hB6HBWsl-TE@+5K9zQ$0zpUc`EME?xc89v4N}aA&;`X0>ISOWS-yC_ zyKEvl^HrceQefxjzE386Du`av4Hh9^U3c$x>EU3{lcGPm*3ag%*6~7WLf#3+MX%YNIsGqa-K{jWkmYn zh`sgrMD0zN=e3VJ{Wu~|K-@<1pDc~4bv`P9amRZF^jWZctK4K7Yz zz$2cvrJ_(DKj!s(;3F^2`J1yJAl*XI#7&ow}ob{q)_VvqznO5keb z-1naHJvU$6kXC>vgLCt(RATxlF>an$h(R}kEMS}l69a1KvA!ALN_GGD^Kzu8ct5U6J`&k09Ki2upr zhy^_t(AyKQD+C}ijemxDPFWzL@s+(N<1c>y%g)@0<+ct8TI_Yadh(GusGccZbR+9A zDR!VvV@cFOr@_U^4G@Js3L;P^RX2a(#V2saZXeq+HLw!MPsf^?Ki+AQ$-l-DDo9 zu5yQGfb4wnMH-q_+E2p)yrwg1;Jo-9!&=O9QHxLak_m-kA|X;Y!vuV=wH0+-R?o?E zPxBbT&en0DM7ZtuCgCM;s6@hsy7Bv#?!U)8S0E1NOKfQ3v^e|Dc^@l~^6`6onN5~# z|5DV@AvzBBh57ZS`f`bJ*V}SwUV-Uis{_>AIF@f3TYH>mBQ*)^KhU@LSs=o!JuC$I z2Fborc;>%{fPwt}O@Zj_DD%~*%N&?;xoeSA^7OR>(Il-hRn|v4@Hk{@eMDE71I$qy zB-n2neUo3oawY2JxyLZMse1xR+ZpneK!KSBoSWlHuJONnZ~a?J>OR`p?Wlc0fUHUP z3mt28-y_xtqn$(`*BU+?pHJg}5Adby;0Y?#=#TpruNwpFmH65fE5H4F@t~CwV!-0l zsJwKuByIXuz)S^#Qd%gbq2y^bCN2gW#vm>rgJkyNNURb*MF4T#Hsze zKjC)>OW2f=jG6S!@`-Qoo|2Twqm|`9el4#Rs&afqU}l7xQ4I4dj>nf1>@`}MbL{Dc zu(`$~5?QHII)vTZKW%5d4HCu(*QMQEZO-faUqqT4?_zoa#5}fsPxTb9i20vwh*R;- zS#G}Wp<&`Q^n1qbcj=|+7cH8*(i#3U(QrTjqW=sgDZ|oKW7mG zVah}n0a{nJ^Y!~)BoD~=E(1+=Vzi_@odc-z5YzEiQ8QEtRl29owEmwJpY(JuAQLH8VGEqB z&8~l5Rx1V+X#Y9%Tp>`0L%7xI zFJMlEljs!Kt?;hiviU(4LF)PH=gJU^Vyw-RJ_8en)PeC0=GXlcra*&B6W#YinBBv2 z;V*FSCQpd@KBINgSD1tlR5zaY2#{`7z4sq6 zAS`n{?gx&n#VBl*5_VEFGG2>v_EfTNj!77}mB0Pude7Nr;Jb}TPE*uAO9?_ZRI%>E z1f8-#a-XjqK}`2gt6-F7fRoyo{{{C1VdLD#_*8_oUtHI!!biuarNvus?EuY8807x2 z4JD-8nA+raX`m4w>pr8NaZ~fDub$47!Tvu;7i%L-qq_NM``J;vmeJlRrh?hgmr*U8 zSJG#&lZu%c2o?KQMw>KVz#o{7lo~nRTTp}>QoPjtqNPbxPDw*!Z)CHasF&&Sug-Gk ze)9OEi%wF>Ej((_n>6we6=APw4#ApIeoL(A+H7X*UGi`TBNX{BI-;EGQd+(9_4!n+ z{cLS5+5y-WjGyfcWD`_}|1<+Ay$>~zs-SI_31Z8;d#wlT&3s{+q8F%14FhW@jBa4$ znUCuH25;%yaqjSQQ4(l@j&@CW_%!#rG`l_BJ$+Iq2u&UbvfeWVXHRkz^Rc?~Nod}w_fAv+H02FN~0?U`U;$cZnkjLtl4xD@4 z4=TaTF9*jfZ3{PZJzowU)pmzaN=H~DoY*1WdbJZ71D|&ZTEfum6yt7?2mO}~a)T=g z1WL@SDBW$IZ{{sH51N+V`7ZG;d5b_SrH2`<9+P){&kI;pObXLm4TF8RF_QIwqH+i>qW(H{U}rcO`j?K)b^WZ` zz4)Hn@D6)>b8~qDO6Ma3Ezc-DAN0ly);zz;w3LZz)FcHf%8m$GvCnf;dBLdFUKh-6 zv>u@FN8d^q$^A;2=kr>iK6_|&MyAer#`92f=i49oHeTPQcam5bwu;b&e?3cIIsLl4 z7Raq$#BnnmIKl&%_@$`OO?TEV; zd`xF!!k|=mdMbs5Mb2+IFVptQ*Vj={?ELSUyY0qDMX1Z8XHnOoiaxx~(%FL&r(_oA z{@WnY!*`M-$g_phseJdU!?wp_P}5{C-^|as;6rOEwhp!$RK*&}y~{baTw9q|UGJ>6 zA5i&S)2h3pxUD0(V~(k)vi)I^U47VIHFTTy??xppgSm)29*iHg$yaZ&wl|Au6@;P4 z`BJ3$pk_b%U0d1Z`db_dY&pp_d*dn7`$4zWSKA698zC37!HX~2%3K=uI}s*+y`y?} z42PBeZg%GTkkm9Ok$%nQR}~rP?KBbBPw{SR`m8V$Hpt|W=UQy+7H_h)f|0heamBBc zja6}tIU-5dEze0BclLu_hH!rr%1Wm;4ti($>+0b2YI9y^zslc@6LG}wDif_6+2QNw zKRrHc9rKk+WrF!O%+@~hG@F=A;TUt=jHl%H{h3CZEhXpC(_*4L!5CePvax6_QYkGP zl-Mx*hglszpnwHFyX{2!W)I3#321pK{N8tar#%_{E2D9>ZL&M}0v2VK!K_!S;-3>lHf@3HqCeUc?zDPNuv0>kL$KRR~V7Jg@ZC~TQ}=jg@aXW zffk!lLyi}!bL5x#QBF zi0z`I`0$wvoJ|$@VJY7q751@Q6(Qv?Ifct)-#bUuFf**#2%CNB_G6LZnlc ze>TQh>D8{6t#n7!`B?9rHq4pheX{NJXbOv=`)6fg4?{aH&j;O$Kg-=X`7B@9Sp10@r#L9^vZ_?;&OEwF`GU zihYdVU-Is0TKi~7_P=eeWcM6!5aG0Ydje=y!%f~OZDm*nRztNF2PyDxW zb>@L>*+fLUiVxEtPmhF5X!u`-nB_URcOl0$O?G1JF z6?8UceFO{JcY+&=y0p&rzlHqWAnra_1knsKS;~EdU(}brIE;ax>&yRZ@5;ZLy7G89 zwlb|#XvQKfn{yI-7+i*`MF?T56A}a`Frfkk0SBloA%+-P!z!Z{~?2CQE2o6afPyKp+S)0(mR}=Hi)?(D@JM9Nus5ocBKWzR&%9KcDY;=OzyV)SkG^ zf6L$@7rf#m-!)+Gak6iMq2o}~OTZ>Fw>w8)yE$!5pm^@X=F~; zSeQH25YIT+2=lpqB-Qh zf0!6R!przHVZSSJ*)^OOYN7^h(lX70UGSUtN*oOK89T4K=~Q;Y@hvYx1|i<-+4|z* zi-NnxxnYJi$;TQggXO@)3gC({hUA}m_)28o!z?UwNM`6C{lA8ooSIMNYr`B&z6!;) zv`x2uGa?o|7ObHNrAYIepzC<)#d8Fv7d-GnD0l5?GLkjZbPlrxwlg9+;5m_ z4jurXy$QkVvdY(ol)muQbo%+PZw%>~c~q_O;#QT^_G=n-IS5+-qScsh;$RgBuUur2 zC8iJ!)OD0lcSX)`^X-|<*E1s&lP155YW|Fi_p`QLO6v%9!Przcb8H!lQ?%fE*U;rG zayNtOYp5xM=?suzA9FvrqHdu+uFwLm=-;r*5wCPmNWBB&B`&7s@v#Z}bQ`|T)y@tB zk_d^ekawUqfu>4~=T%p??OuDYoyzIh9u4Y&G(W|@UP|m1_&rS+zbAiXRp~KHokP=1MwhFwo@)-1R(0aq5rm~j^&0M( zTbGqu56K_5fp4n)shPJ)Od60G``;hVyaRSr>*0&&@rm`^MbY%YuXX$F;-2@*hQ01g z4~)+N%t#;14ea-yA``!4yzK7YT>5dRC34OhX*v8YiiwW%;gVJ781LWH8$gWzf($53 z2$CB2ym+2+Z~ENRpsw*WV6t<_z8*Nm`L)^LGNXr|M8IJs{%^UOF5x2?LoB$@n zyK%o|WpLi=Ri{uA#)dF4kjCg+2KnV`{`$m~INx>F4T)W)_}%u5vFL;&mw5(Z;XOjD zqCqr&ja6PsdvrTR{oJs9Ot4e|^F}Mbiag{)Q}Y7BEue3Dhn}F3C(J6fU|+}PHLjA{ z2Pzemsi*?r=gf*)OVP|mkfM+oW9&eSdnqPj_2By-kWxDj>hsqi2c z^DTR?{Q-uEpjbQzNf2ULUhe`;4(;WM5@7b)Y631ipJU3kU~cRWP8csT6wuuC?b7JslyeKpqMVi1nMh&IAIdXiBM|uC_Fmh{_fTS+8)Id{=KLUB^k6dVS-l z;%_v$HU0`Ta8`%j&K%t82K@LNz`2B$g;mkwM^p3)&T;g*%44iWTaH@q#7SwIWoSA* zu-%}IUw8omAcJ1kdg};z=B%&0mvKFCV)K~FxpRIHy;i!`7q6?K+H2;3O#igjc=GGP zr1@;HC(U&9i7XF_e7o+JenlBiUb|)l;gF(}{pd0?oM6#bL*|2zGPf&q@yB%^teiEQ z8{=NsV1roTLUF_EhsK^*B3|}JTHwQgVSJ%!B4IWZpcS3i5>Z-iR_p_cGsb&A!=zYp z5x-hxy4FWufdqoK7bSc}BxG**#=Tv-M@_wvGeMcn(HhskEvk{dt`%;w=~nivAPo3R zw6Qm$=$=$K+~t(6$>5Ch2tqv59@|AiwcficQurv7j;ldnVDy;Z+gj@6-8G2)3#LK! z34h8I3|El2s@?PAT#^yT))dRrF9h8~9ev%Tn?ZQ;~|is8qenw~5%`uZlEWMmz#N+>XPM*bVJC zg(V*b<7ti$(Xo5_Uj}yB*wu!*7LB`YLGQg&x&ofALNW99>Y6*;p%?? DWHPYM literal 122212 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 filename.equals('versions.yml') ? null : filename } - ] - } -} diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 2eae1c58..a16e6e0c 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -61,6 +61,20 @@ process { } } +// +// Peddy options +// + +process { + withName: '.*:PEDDY' { + publishDir = [ + path: { "${params.outdir}/peddy" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} + // // Multiqc options // diff --git a/modules/local/mt_deletion_script.nf b/modules/local/mt_deletion_script.nf index 0da71506..0702199a 100644 --- a/modules/local/mt_deletion_script.nf +++ b/modules/local/mt_deletion_script.nf @@ -2,7 +2,6 @@ process MT_DELETION { tag "$meta.id" label 'process_single' - conda "bioconda::samtools=1.19.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" diff --git a/nextflow.config b/nextflow.config index d8591f15..6982135b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -358,7 +358,6 @@ includeConfig 'conf/modules/call_structural_variants.config' includeConfig 'conf/modules/convert_mt_bam_to_fastq.config' includeConfig 'conf/modules/generate_cytosure_files.config' includeConfig 'conf/modules/gens.config' -includeConfig 'conf/modules/peddy_check.config' includeConfig 'conf/modules/prepare_references.config' includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' diff --git a/subworkflows/local/peddy_check.nf b/subworkflows/local/peddy_check.nf deleted file mode 100644 index 101bc4a2..00000000 --- a/subworkflows/local/peddy_check.nf +++ /dev/null @@ -1,22 +0,0 @@ -// -// Peddy subworkflow to check sex and relatedness. -// - -include { PEDDY } from '../../modules/nf-core/peddy/main' - -workflow PEDDY_CHECK { - take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(vcf_index) ] - ch_ped // channel: [mandatory] [ path(ped) ] - - main: - ch_versions = Channel.empty() - - PEDDY( ch_vcf, ch_ped ) - ch_versions = ch_versions.mix(PEDDY.out.versions.first()) - - emit: - ped = PEDDY.out.ped // channel: [ val(meta), path(ped) ] - csv = PEDDY.out.csv // channel: [ val(meta), path(csv) ] - versions = ch_versions // channel: [ versions.yml ] -} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 3375f536..32730897 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -103,6 +103,7 @@ if (missingParamsCount>0) { include { FASTQC } from '../modules/nf-core/fastqc/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' +include { PEDDY } from '../modules/nf-core/peddy/main' include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/main' // @@ -133,7 +134,6 @@ include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_SNV } from '../subworkf include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_SV } from '../subworkflows/local/generate_clinical_set' include { GENERATE_CYTOSURE_FILES } from '../subworkflows/local/generate_cytosure_files' include { GENS } from '../subworkflows/local/gens' -include { PEDDY_CHECK } from '../subworkflows/local/peddy_check' include { PREPARE_REFERENCES } from '../subworkflows/local/prepare_references' include { QC_BAM } from '../subworkflows/local/qc_bam' include { RANK_VARIANTS as RANK_VARIANTS_MT } from '../subworkflows/local/rank_variants' @@ -611,11 +611,11 @@ workflow RAREDISEASE { // ped correspondence, sex check, ancestry check if (!params.skip_peddy) { - PEDDY_CHECK ( + PEDDY ( CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true), ch_pedfile ) - ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) + ch_versions = ch_versions.mix(PEDDY.out.versions.first()) } // Generate CGH files from sequencing data, turned off by default @@ -703,8 +703,8 @@ workflow RAREDISEASE { ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.cov.map{it[1]}.collect().ifEmpty([])) if (!params.skip_peddy) { - ch_multiqc_files = ch_multiqc_files.mix(PEDDY_CHECK.out.ped.map{it[1]}.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(PEDDY_CHECK.out.csv.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PEDDY.out.ped.map{it[1]}.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(PEDDY.out.csv.map{it[1]}.collect().ifEmpty([])) } MULTIQC ( From fffc70284316279111e38531c662b4b2847a086e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:10:29 +0100 Subject: [PATCH 1656/1921] module update --- modules.json | 2 +- modules/nf-core/tabix/tabix/main.nf | 5 ++--- .../nf-core/tabix/tabix/tests/main.nf.test.snap | 14 +++++++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/modules.json b/modules.json index b863e4d8..123924da 100644 --- a/modules.json +++ b/modules.json @@ -471,7 +471,7 @@ }, "tabix/tabix": { "branch": "master", - "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", + "git_sha": "9502adb23c0b97ed8e616bbbdfa73b4585aec9a1", "installed_by": ["modules"] }, "tiddit/cov": { diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index f5e582d2..1737141d 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -30,10 +30,9 @@ process TABIX_TABIX { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.tbi - touch ${prefix}.csi + touch ${tab}.tbi + touch ${tab}.csi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap index 484ebe29..034e38b6 100644 --- a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap @@ -1,9 +1,9 @@ { "vcf_csi_stub": { "content": [ - "vcf_csi_stub.csi" + "test.vcf.gz.csi" ], - "timestamp": "2024-02-19T14:54:03.35052" + "timestamp": "2024-03-04T14:51:59.788002" }, "tbi_gff": { "content": [ @@ -136,7 +136,7 @@ { "id": "vcf_csi_stub" }, - "vcf_csi_stub.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -144,7 +144,7 @@ { "id": "vcf_csi_stub" }, - "vcf_csi_stub.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "2": [ @@ -155,7 +155,7 @@ { "id": "vcf_csi_stub" }, - "vcf_csi_stub.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "tbi": [ @@ -163,7 +163,7 @@ { "id": "vcf_csi_stub" }, - "vcf_csi_stub.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ @@ -171,7 +171,7 @@ ] } ], - "timestamp": "2024-02-19T14:54:03.310028" + "timestamp": "2024-03-04T14:51:59.766184" }, "sarscov2_vcf_csi": { "content": [ From 22ee3400c5e96f245592b38a485c9bd8f6f134b2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:45:35 +0100 Subject: [PATCH 1657/1921] bump version --- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index f22d4141..d6e1ef01 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 6982135b..0ea42f23 100644 --- a/nextflow.config +++ b/nextflow.config @@ -340,7 +340,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '1.2.0dev' + version = '2.0.0' doi = '' } From 2c449af88e81979704c990cab1abcfcf6dbde0bc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Mar 2024 12:08:59 +0100 Subject: [PATCH 1658/1921] update changelog --- CHANGELOG.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d852b52..3335d663 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.2.0 - Genie [xxxx-xx-xx] +## v2.0.0 - Asterix [xxxx-xx-xx] ### `Added` @@ -70,14 +70,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed wrong process names when outputting versions in `ALIGN_SENTIEON` and `CALL_SNV`. - Fixed gens subworkflow [#515](https://github.com/nf-core/raredisease/pull/515) -### `Updated` - -| Tool | Old version | New version | -| ------------ | ----------- | ----------- | -| `filter_vep` | 107 | 110 | -| `multiqc` | 1.14 | 1.15 | -| `untar` | (grep 3.4) | (grep 3.11) | - ## v1.1.1 - Abu (Patch) [2023-07-26] ### `Fixed` From 7ff514035c794f11a8942bf1bcb61bd66aa7f788 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Mar 2024 12:30:59 +0100 Subject: [PATCH 1659/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3335d663..6863992b 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 - Asterix [xxxx-xx-xx] +## 2.0.0 - Asterix [xxxx-xx-xx] ### `Added` From e556cd76f3a410f557a80957503e2c7dca3454ea Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Mar 2024 16:34:17 +0100 Subject: [PATCH 1660/1921] test --- .github/workflows/download_pipeline.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 08622fd5..303ba228 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -16,9 +16,11 @@ on: - opened branches: - master + - dev pull_request_target: branches: - master + - dev env: NXF_ANSI_LOG: false @@ -30,6 +32,9 @@ jobs: - name: Install Nextflow uses: nf-core/setup-nextflow@v1 + - name: Disk space cleanup + uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 + - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5 with: python-version: "3.11" From d18a68a99041e5304ce56735974ee8ef16b43473 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 5 Mar 2024 16:45:26 +0100 Subject: [PATCH 1661/1921] change test branch --- .github/workflows/download_pipeline.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 303ba228..37073479 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -10,16 +10,14 @@ on: testbranch: description: "The specific branch you wish to utilize for the test execution of nf-core download." required: true - default: "dev" + default: "test-download" pull_request: types: - opened branches: - - master - dev pull_request_target: branches: - - master - dev env: From 5d794d738606de64afc91557ae8af26994f9ad21 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 6 Mar 2024 08:25:37 +0100 Subject: [PATCH 1662/1921] Update download_pipeline.yml --- .github/workflows/download_pipeline.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 37073479..3c7ee491 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -10,15 +10,15 @@ on: testbranch: description: "The specific branch you wish to utilize for the test execution of nf-core download." required: true - default: "test-download" + default: "dev" pull_request: types: - opened branches: - - dev + - master pull_request_target: branches: - - dev + - master env: NXF_ANSI_LOG: false From 0aeb54681ee53129df9fb43cafcdbb41fb1859ca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:37:49 +0100 Subject: [PATCH 1663/1921] review suggestions --- .nf-core.yml | 3 - CHANGELOG.md | 2 +- README.md | 7 +- assets/mobile_element_references_schema.json | 2 +- assets/schema_input.json | 9 +- assets/vep_plugin_files_schema.json | 2 +- docs/images/raredisease_metromap_dark.pdf | Bin 38296 -> 198727 bytes docs/images/raredisease_metromap_dark.png | Bin 263779 -> 403312 bytes docs/images/raredisease_metromap_dark.svg | 2787 ++++++++--------- docs/images/raredisease_metromap_light.pdf | Bin 0 -> 129860 bytes docs/images/raredisease_metromap_light.png | Bin 322695 -> 395562 bytes docs/images/raredisease_metromap_light.svg | 1837 ++++++----- docs/output.md | 10 +- docs/usage.md | 14 +- lib/CustomFunctions.groovy | 85 + nextflow.config | 2 +- nextflow_schema.json | 10 +- .../call_sv_germlinecnvcaller.nf | 23 +- workflows/raredisease.nf | 69 +- 19 files changed, 2248 insertions(+), 2614 deletions(-) create mode 100644 docs/images/raredisease_metromap_light.pdf create mode 100644 lib/CustomFunctions.groovy diff --git a/.nf-core.yml b/.nf-core.yml index 0ceb0624..07152a97 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -7,7 +7,4 @@ lint: - docs/images/nf-core-raredisease_logo_dark.png - docs/images/nf-core-raredisease_logo_light.png - assets/nf-core-raredisease_logo_light.png - - assets/multiqc_config.yaml - - .github/workflows/linting.yml - - pyproject.toml repository_type: pipeline diff --git a/CHANGELOG.md b/CHANGELOG.md index 6863992b..3ffa9fa4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` - Use `nf-validation` plugin for parameter and samplesheet validation [#386](https://github.com/nf-core/raredisease/pull/386) -- A new parameter to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) +- A new parameter `skip_vep_filter` to skip filtering based on vep results [#416](https://github.com/nf-core/raredisease/pull/416) - A `metromap` representating the core parts of the pipeline [#428](https://github.com/nf-core/raredisease/pull/428) - Metromap and logos for light and dark theme [#432](https://github.com/nf-core/raredisease/pull/432) - New parameters to skip qualimap and eklipse (`--skip_qualimap` and `--skip_eklipse`) [#436](https://github.com/nf-core/raredisease/pull/436) diff --git a/README.md b/README.md index 495ccea7..7f87ce0f 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,10 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary -

- -

+ + + nf-core/raredisease workflow + **1. Metrics:** diff --git a/assets/mobile_element_references_schema.json b/assets/mobile_element_references_schema.json index 40e79825..a128dd42 100644 --- a/assets/mobile_element_references_schema.json +++ b/assets/mobile_element_references_schema.json @@ -18,7 +18,7 @@ "format": "file-path", "exists": true, "pattern": "^\\S+\\.bed$", - "errorMessage": "Bed file, cannot contain spaces and must have extension '.bed'" + "errorMessage": "BED file name cannot contain spaces and must have extension '.bed'" } }, "required": ["type", "path"] diff --git a/assets/schema_input.json b/assets/schema_input.json index d7be05f3..c253ac64 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -26,16 +26,15 @@ "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { + "type": "string", "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", "anyOf": [ { - "type": "string", "pattern": "^\\S+\\.f(ast)?q\\.gz$", "format": "file-path", "exists": true }, { - "type": "string", "maxLength": 0 } ] @@ -55,31 +54,29 @@ "errorMessage": "Phenotype must be provided and cannot contain spaces" }, "paternal_id": { + "type": "string", "errorMessage": "Paternal ID cannot contain spaces", "meta": ["paternal"], "default": "0", "anyOf": [ { - "type": "string", "pattern": "^\\S+$" }, { - "type": "string", "maxLength": 0 } ] }, "maternal_id": { + "type": "string", "errorMessage": "Maternal ID cannot contain spaces", "meta": ["maternal"], "default": "0", "anyOf": [ { - "type": "string", "pattern": "^\\S+$" }, { - "type": "string", "maxLength": 0 } ] diff --git a/assets/vep_plugin_files_schema.json b/assets/vep_plugin_files_schema.json index 55695b6e..5dca6d16 100644 --- a/assets/vep_plugin_files_schema.json +++ b/assets/vep_plugin_files_schema.json @@ -18,7 +18,7 @@ } ], "exists": true, - "errorMessage": "Path to vep plugin files and their indices" + "description": "Path to vep plugin files and their indices" } }, "required": ["vep_files"] diff --git a/docs/images/raredisease_metromap_dark.pdf b/docs/images/raredisease_metromap_dark.pdf index 7dbd15eef380612d64c2315d1c8c056ec74f469f..2f603e0c3d873e1c880cf4e7fa32ff8eac484bea 100644 GIT binary patch literal 198727 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 z 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
") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_single") } + { assert process.success }, + // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. + // looks like this:
Mon 2 Oct 2023
test.gz
+ // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("
") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -54,16 +51,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_paired") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,13 +78,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_interleaved") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -109,13 +102,11 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_bam") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -138,22 +129,20 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, - { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, - { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, - { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, - { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, - { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, - { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, - { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, - { assert path(process.out.html[0][1][0]).text.contains("") }, - { assert path(process.out.html[0][1][1]).text.contains("") }, - { assert path(process.out.html[0][1][2]).text.contains("") }, - { assert path(process.out.html[0][1][3]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_multiple") } + { assert process.success }, + { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" }, + { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" }, + { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" }, + { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" }, + { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" }, + { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" }, + { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" }, + { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" }, + { assert path(process.out.html[0][1][0]).text.contains("") }, + { assert path(process.out.html[0][1][1]).text.contains("") }, + { assert path(process.out.html[0][1][2]).text.contains("") }, + { assert path(process.out.html[0][1][3]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -173,21 +162,18 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("") }, - - { assert snapshot(process.out.versions).match("fastqc_versions_custom_prefix") } + { assert process.success }, + { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" }, + { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" }, + { assert path(process.out.html[0][1]).text.contains("") }, + { assert snapshot(process.out.versions).match() } ) } } test("sarscov2 single-end [fastq] - stub") { - options "-stub" - + options "-stub" when { process { """ @@ -201,12 +187,123 @@ nextflow_process { then { assertAll ( - { assert process.success }, - { assert snapshot(process.out.html.collect { file(it[1]).getName() } + - process.out.zip.collect { file(it[1]).getName() } + - process.out.versions ).match("fastqc_stub") } + { assert process.success }, + { assert snapshot(process.out).match() } ) } } + test("sarscov2 paired-end [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 interleaved [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 paired-end [bam] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 multiple [fastq] - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [id: 'test', single_end: false], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ] + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 custom_prefix - stub") { + + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'mysample', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } } diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap index 86f7c311..d5db3092 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test.snap +++ b/modules/nf-core/fastqc/tests/main.nf.test.snap @@ -1,88 +1,392 @@ { - "fastqc_versions_interleaved": { + "sarscov2 custom_prefix": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:07.293713" + "timestamp": "2024-07-22T11:02:16.374038" }, - "fastqc_stub": { + "sarscov2 single-end [fastq] - stub": { "content": [ - [ - "test.html", - "test.zip", - "versions.yml:md5,e1cc25ca8af856014824abd842e93978" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": true + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:24.993809" + }, + "sarscov2 custom_prefix - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "mysample", + "single_end": true + }, + "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:31:01.425198" + "timestamp": "2024-07-22T11:03:10.93942" }, - "fastqc_versions_multiple": { + "sarscov2 interleaved [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:55.797907" + "timestamp": "2024-07-22T11:01:42.355718" }, - "fastqc_versions_bam": { + "sarscov2 paired-end [bam]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:40:26.795862" + "timestamp": "2024-07-22T11:01:53.276274" }, - "fastqc_versions_single": { + "sarscov2 multiple [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:27.043675" + "timestamp": "2024-07-22T11:02:05.527626" }, - "fastqc_versions_paired": { + "sarscov2 paired-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:31.188871" + }, + "sarscov2 paired-end [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:34.273566" + }, + "sarscov2 multiple [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:39:47.584191" + "timestamp": "2024-07-22T11:03:02.304411" }, - "fastqc_versions_custom_prefix": { + "sarscov2 single-end [fastq]": { "content": [ [ "versions.yml:md5,e1cc25ca8af856014824abd842e93978" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:01:19.095607" + }, + "sarscov2 interleaved [fastq] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:02:44.640184" + }, + "sarscov2 paired-end [bam] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e1cc25ca8af856014824abd842e93978" + ], + "zip": [ + [ + { + "id": "test", + "single_end": false + }, + "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-31T17:41:14.576531" + "timestamp": "2024-07-22T11:02:53.550742" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/environment.yml b/modules/nf-core/gatk4/bedtointervallist/environment.yml index d6fbe2e7..55993f44 100644 --- a/modules/nf-core/gatk4/bedtointervallist/environment.yml +++ b/modules/nf-core/gatk4/bedtointervallist/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_bedtointervallist channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml index 187da885..25348e16 100644 --- a/modules/nf-core/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/gatk4/bedtointervallist/meta.yml @@ -15,34 +15,45 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - bed: - type: file - description: Input bed file - pattern: "*.bed" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - dict: - type: file - description: Sequence dictionary - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - bed: + type: file + description: Input bed file + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: Sequence dictionary + pattern: "*.dict" output: - interval_list: - type: file - description: gatk interval list file - pattern: "*.interval_list" + - meta: + type: file + description: gatk interval list file + pattern: "*.interval_list" + - "*.interval_list": + type: file + description: gatk interval list file + pattern: "*.interval_list" + - _list: + type: file + description: gatk interval list file + pattern: "*.interval_list" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/collectreadcounts/environment.yml b/modules/nf-core/gatk4/collectreadcounts/environment.yml index d09cd890..55993f44 100644 --- a/modules/nf-core/gatk4/collectreadcounts/environment.yml +++ b/modules/nf-core/gatk4/collectreadcounts/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_collectreadcounts channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/collectreadcounts/meta.yml b/modules/nf-core/gatk4/collectreadcounts/meta.yml index 25fb8b8c..cf8c7731 100644 --- a/modules/nf-core/gatk4/collectreadcounts/meta.yml +++ b/modules/nf-core/gatk4/collectreadcounts/meta.yml @@ -1,5 +1,6 @@ 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. +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: - collectreadcounts - bam @@ -7,75 +8,88 @@ keywords: - 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. + 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"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - 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}" - - input_index: - 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" + - - 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}" + - input_index: + 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}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Optional - Reference FASTA + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: Optional - Index of the reference FASTA file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - 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" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.hdf5": + type: file + description: The read counts in hdf5 format + pattern: "*.hdf5" - tsv: - type: file - description: The read counts in TSV format - pattern: "*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: The read counts in TSV format + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" maintainers: diff --git a/modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test b/modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test new file mode 100644 index 00000000..0832cf85 --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test @@ -0,0 +1,104 @@ + +nextflow_process { + + name "Test Process GATK4_COLLECTREADCOUNTS" + script "../main.nf" + process "GATK4_COLLECTREADCOUNTS" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/collectreadcounts" + + test("test-gatk4-collectreadcounts-hdf5") { + + config "./nextflow.hdf5.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true), + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.hdf5[0][1]).name, + process.out.tsv, + ).match() + } + ) + } + } + + test("test-gatk4-collectreadcounts-tsv") { + + config "./nextflow.tsv.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true), + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-gatk4-collectreadcounts-cram") { + + config "./nextflow.cram.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true), + ] + input[1] = [[id:'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'test'], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true)] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test.snap b/modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test.snap new file mode 100644 index 00000000..28a3a6e1 --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test.snap @@ -0,0 +1,97 @@ +{ + "test-gatk4-collectreadcounts-cram": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,d9a32039b7a84f5bb74e8382e5427670" + ] + ], + "2": [ + "versions.yml:md5,ebf23f4ab63948ba97df07035f8d2659" + ], + "hdf5": [ + + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,d9a32039b7a84f5bb74e8382e5427670" + ] + ], + "versions": [ + "versions.yml:md5,ebf23f4ab63948ba97df07035f8d2659" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:58:19.610687" + }, + "test-gatk4-collectreadcounts-hdf5": { + "content": [ + "test.hdf5", + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T13:02:48.607644" + }, + "test-gatk4-collectreadcounts-tsv": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,8e45a6164916c303387f39f02ce45841" + ] + ], + "2": [ + "versions.yml:md5,ebf23f4ab63948ba97df07035f8d2659" + ], + "hdf5": [ + + ], + "tsv": [ + [ + { + "id": "test", + "single_end": false + }, + "test.tsv:md5,8e45a6164916c303387f39f02ce45841" + ] + ], + "versions": [ + "versions.yml:md5,ebf23f4ab63948ba97df07035f8d2659" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:58:07.500024" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.cram.config b/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.cram.config new file mode 100644 index 00000000..682bdcad --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.cram.config @@ -0,0 +1,5 @@ +process { + withName: 'GATK4_COLLECTREADCOUNTS' { + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + } +} diff --git a/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.hdf5.config b/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.hdf5.config new file mode 100644 index 00000000..d6ca881b --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.hdf5.config @@ -0,0 +1,5 @@ +process { + withName: 'GATK4_COLLECTREADCOUNTS'{ + ext.args = "--interval-merging-rule OVERLAPPING_ONLY" + } +} diff --git a/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.tsv.config b/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.tsv.config new file mode 100644 index 00000000..682bdcad --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/tests/nextflow.tsv.config @@ -0,0 +1,5 @@ +process { + withName: 'GATK4_COLLECTREADCOUNTS' { + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + } +} diff --git a/modules/nf-core/gatk4/createsequencedictionary/environment.yml b/modules/nf-core/gatk4/createsequencedictionary/environment.yml index 78822ad0..55993f44 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/environment.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_createsequencedictionary channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index f9d70be0..7b5156bb 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -15,25 +15,32 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Input fasta file - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Input fasta file + pattern: "*.{fasta,fa}" output: - dict: - type: file - description: gatk dictionary file - pattern: "*.{dict}" + - meta: + type: file + description: gatk dictionary file + pattern: "*.{dict}" + - "*.dict": + type: file + description: gatk dictionary file + pattern: "*.{dict}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/denoisereadcounts/environment.yml b/modules/nf-core/gatk4/denoisereadcounts/environment.yml index a03cf4a9..55993f44 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/environment.yml +++ b/modules/nf-core/gatk4/denoisereadcounts/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_denoisereadcounts channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/denoisereadcounts/meta.yml b/modules/nf-core/gatk4/denoisereadcounts/meta.yml index f2bd853f..367321ba 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/meta.yml +++ b/modules/nf-core/gatk4/denoisereadcounts/meta.yml @@ -15,43 +15,52 @@ tools: doi: 10.1158/1538-7445.AM2017-3590 tool_dev_url: "https://github.com/broadinstitute/gatk" licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - 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 ]` - - counts: - type: file - description: Read counts in hdf5 or tsv format. - pattern: "*.{hdf5,tsv}" - - pon: - type: file - description: Panel of normals file hdf5 or tsv format. - pattern: "*.{hdf5}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - counts: + type: file + description: Read counts in hdf5 or tsv format. + pattern: "*.{hdf5,tsv}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - pon: + type: file + description: Panel of normals file hdf5 or tsv format. + pattern: "*.{hdf5}" 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" - standardized: - type: file - description: Standardized copy ratios file. - pattern: "*.{tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*_standardizedCR.tsv": + type: file + description: Standardized copy ratios file. + pattern: "*.{tsv}" - denoised: - type: file - description: Denoised copy ratios file - pattern: "*.{tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*_denoisedCR.tsv": + type: file + description: Denoised copy ratios file + pattern: "*.{tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test index 35ad8f79..e5fef2a2 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test +++ b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test @@ -19,9 +19,9 @@ nextflow_process { script "../../preprocessintervals/main.nf" process { """ - input[0] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)]) - input[1] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)]) - input[2] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true)]) + input[0] = Channel.value([ [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) + input[1] = Channel.value([ [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)]) + input[2] = Channel.value([ [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true)]) input[3] = [[],[]] input[4] = [[],[]] """ @@ -33,12 +33,12 @@ nextflow_process { """ intervals = GATK4_PREPROCESSINTERVALS.out.interval_list.map {meta, list -> list} input[0] = Channel.of( - [[ id:'test', single_end:false ], file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)], + [[ id:'test', single_end:false ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true)], ) .combine( intervals) - input[1] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)]) - input[2] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)]) - input[3] = Channel.value([ [ id:'test' ], file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true)]) + input[1] = Channel.value([ [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)]) + input[2] = Channel.value([ [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)]) + input[3] = Channel.value([ [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true)]) """ } } @@ -66,7 +66,8 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.standardized, - process.out.denoised + process.out.denoised, + process.out.versions ).match() } ) } diff --git a/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap index 000283b3..f35eb283 100644 --- a/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap +++ b/modules/nf-core/gatk4/denoisereadcounts/tests/main.nf.test.snap @@ -18,12 +18,15 @@ }, "test_denoisedCR.tsv:md5,f9e56b8e12b4dadc91a6d977fa79c6a8" ] + ], + [ + "versions.yml:md5,140780e1af7318cc9259b8970bc70c81" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.4" }, - "timestamp": "2024-02-20T14:45:41.834159" + "timestamp": "2024-08-16T12:34:12.568925" } } \ No newline at end of file diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml index 56eb4089..828628b2 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml @@ -1,5 +1,6 @@ name: "gatk4_determinegermlinecontigploidy" -description: Determines the baseline contig ploidy for germline samples given counts data +description: Determines the baseline contig ploidy for germline samples given counts + data keywords: - copy number - counts @@ -15,59 +16,70 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - counts: - type: file - 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 - 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. - pattern: '*-model/' + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - counts: + type: file + 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 + description: Optional - One or more bed files containing intervals to exclude + from the process + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - ploidy_model: + type: directory + description: | + Optional - A folder containing the ploidy model. + When a model is supplied to tool will run in CASE mode. + pattern: '*-model/' + - - contig_ploidy_table: + type: file + description: The contig ploidy priors table + 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" - calls: - type: directory - description: A folder containing the calls from the input files - pattern: "*-calls/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}-calls: + type: directory + description: A folder containing the calls from the input files + 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: "*-model/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}-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: "*-model/" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" maintainers: diff --git a/modules/nf-core/gatk4/filtermutectcalls/environment.yml b/modules/nf-core/gatk4/filtermutectcalls/environment.yml index 7494d84d..55993f44 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/environment.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_filtermutectcalls channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/filtermutectcalls/meta.yml b/modules/nf-core/gatk4/filtermutectcalls/meta.yml index 736c8386..9287277e 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/meta.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/meta.yml @@ -16,83 +16,103 @@ tools: homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - vcf: - type: file - description: compressed vcf file of mutect2calls - pattern: "*.vcf.gz" - - vcf_tbi: - type: file - description: Tabix index of vcf file - pattern: "*vcf.gz.tbi" - - stats: - type: file - description: Stats file that pairs with output vcf file - pattern: "*vcf.gz.stats" - - orientationbias: - type: file - description: files containing artifact priors for input vcf. Optional input. - pattern: "*.artifact-prior.tar.gz" - - segmentation: - type: file - description: tables containing segmentation information for input vcf. Optional input. - pattern: "*.segmentation.table" - - table: - type: file - description: table(s) containing contamination data for input vcf. Optional input, takes priority over estimate. - pattern: "*.contamination.table" - - estimate: - 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 - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcf: + type: file + description: compressed vcf file of mutect2calls + pattern: "*.vcf.gz" + - vcf_tbi: + type: file + description: Tabix index of vcf file + pattern: "*vcf.gz.tbi" + - stats: + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" + - orientationbias: + type: file + description: files containing artifact priors for input vcf. Optional input. + pattern: "*.artifact-prior.tar.gz" + - segmentation: + type: file + description: tables containing segmentation information for input vcf. Optional + input. + pattern: "*.segmentation.table" + - table: + type: file + description: table(s) containing contamination data for input vcf. Optional + input, takes priority over estimate. + pattern: "*.contamination.table" + - estimate: + 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 + pattern: "*.dict" output: - vcf: - type: file - description: file containing filtered mutect2 calls. - pattern: "*.vcf.gz" + - meta: + type: file + description: file containing filtered mutect2 calls. + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: file containing filtered mutect2 calls. + pattern: "*.vcf.gz" - tbi: - type: file - description: tbi file that pairs with vcf. - pattern: "*.vcf.gz.tbi" + - meta: + type: file + description: tbi file that pairs with vcf. + pattern: "*.vcf.gz.tbi" + - "*.vcf.gz.tbi": + type: file + description: tbi file that pairs with vcf. + pattern: "*.vcf.gz.tbi" - stats: - type: file - description: file containing statistics of the filtermutectcalls run. - pattern: "*.filteringStats.tsv" + - meta: + type: file + description: file containing statistics of the filtermutectcalls run. + pattern: "*.filteringStats.tsv" + - "*.filteringStats.tsv": + type: file + description: file containing statistics of the filtermutectcalls run. + pattern: "*.filteringStats.tsv" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" - "@maxulysse" diff --git a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml index d4715ff0..a185d9d1 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml +++ b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml @@ -1,60 +1,85 @@ name: "gatk4_germlinecnvcaller" -description: Calls copy-number variants in germline samples given their counts and the output of DetermineGermlineContigPloidy. +description: Calls copy-number variants in germline samples given their counts and + the output of DetermineGermlineContigPloidy. keywords: - gatk - germline contig ploidy - 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. + description: Developed in the Data Sciences Platform at the Broad Institute, the + toolkit offers a wide variety of tools with a primary focus on variant discovery + and genotyping. Its powerful processing engine and high-performance computing + features make it capable of taking on projects of any size. homepage: https://gatk.broadinstitute.org/hc/en-us documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: "10.1158/1538-7445.AM2017-3590" licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tsv: - type: file - 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 - directory containing the model produced by germlinecnvcaller cohort mode - pattern: "*-cnv-model/*-model" - - ploidy: - type: directory - description: Directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode - pattern: "*-calls" + - - meta: + 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 + pattern: "*.tsv" + - intervals: + type: file + description: Optional - A bed file containing the intervals to include in the + process + pattern: "*.bed" + - ploidy: + type: directory + description: Directory containing ploidy calls produced by determinegermlinecontigploidy + case or cohort mode + pattern: "*-calls" + - model: + type: directory + description: Optional - directory containing the model produced by germlinecnvcaller + cohort mode + pattern: "*-cnv-model/*-model" 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" - cohortcalls: - type: directory - description: Tar gzipped directory containing calls produced by germlinecnvcaller case mode - pattern: "*-cnv-model/*-calls" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-cnv-model/*-calls": + type: directory + description: Tar gzipped directory containing calls produced by germlinecnvcaller + case mode + pattern: "*-cnv-model/*-calls" - cohortmodel: - type: directory - description: Optional - Tar gzipped directory containing the model produced by germlinecnvcaller cohort mode - pattern: "*-cnv-model/*-model" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-cnv-model/*-model": + type: directory + description: Optional - Tar gzipped directory containing the model produced + by germlinecnvcaller cohort mode + pattern: "*-cnv-model/*-model" - casecalls: - type: directory - description: Tar gzipped directory containing calls produced by germlinecnvcaller case mode - pattern: "*-cnv-calls/*-calls" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*-cnv-calls/*-calls": + type: directory + description: Tar gzipped directory containing calls produced by germlinecnvcaller + case mode + pattern: "*-cnv-calls/*-calls" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ryanjameskennedy" - "@ViktorHy" diff --git a/modules/nf-core/gatk4/intervallisttools/environment.yml b/modules/nf-core/gatk4/intervallisttools/environment.yml index a4026f98..55993f44 100644 --- a/modules/nf-core/gatk4/intervallisttools/environment.yml +++ b/modules/nf-core/gatk4/intervallisttools/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_intervallisttools channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/intervallisttools/meta.yml b/modules/nf-core/gatk4/intervallisttools/meta.yml index 748dccfc..8ee15a29 100644 --- a/modules/nf-core/gatk4/intervallisttools/meta.yml +++ b/modules/nf-core/gatk4/intervallisttools/meta.yml @@ -1,5 +1,6 @@ name: gatk4_intervallisttools -description: Splits the interval list file into unique, equally-sized interval files and place it under a directory +description: Splits the interval list file into unique, equally-sized interval files + and place it under a directory keywords: - bed - gatk4 @@ -15,30 +16,36 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - interval_list: - type: file - description: Interval list file - pattern: "*.interval_list" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: Interval file 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: Interval list files - pattern: "*.interval_list" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_split/*/*.interval_list": + type: file + description: Interval list files + pattern: "*.interval_list" + - _list: + type: file + description: Interval list files + pattern: "*.interval_list" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@praveenraj2018" maintainers: diff --git a/modules/nf-core/gatk4/mergebamalignment/environment.yml b/modules/nf-core/gatk4/mergebamalignment/environment.yml index 0ea7b0d7..55993f44 100644 --- a/modules/nf-core/gatk4/mergebamalignment/environment.yml +++ b/modules/nf-core/gatk4/mergebamalignment/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_mergebamalignment channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mergebamalignment/meta.yml b/modules/nf-core/gatk4/mergebamalignment/meta.yml index af4a3f18..7bde9345 100644 --- a/modules/nf-core/gatk4/mergebamalignment/meta.yml +++ b/modules/nf-core/gatk4/mergebamalignment/meta.yml @@ -16,45 +16,52 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - aligned: - type: file - description: The aligned bam file - pattern: "*.{bam}" - - unaligned: - 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 + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - aligned: + type: file + description: The aligned bam file + pattern: "*.{bam}" + - unmapped: + type: file + description: The unmapped 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 output: - bam: - type: file - description: The merged bam file - pattern: "*.bam" + - meta: + type: file + description: The merged bam file + pattern: "*.bam" + - "*.bam": + type: file + description: The merged bam file + pattern: "*.bam" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test b/modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test new file mode 100644 index 00000000..96e93bb1 --- /dev/null +++ b/modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test @@ -0,0 +1,73 @@ + +nextflow_process { + + name "Test Process GATK4_MERGEBAMALIGNMENT" + script "../main.nf" + process "GATK4_MERGEBAMALIGNMENT" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/mergebamalignment" + + test("test-gatk4-mergebamalignment") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) + ] + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() + } + ) + } + } + + test("test-gatk4-mergebamalignment-stubs") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) + ] + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test.snap b/modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test.snap new file mode 100644 index 00000000..719a7bb3 --- /dev/null +++ b/modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test.snap @@ -0,0 +1,48 @@ +{ + "test-gatk4-mergebamalignment-stubs": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,a72cfce8c9d171260cbb82b492be4372" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,a72cfce8c9d171260cbb82b492be4372" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:02:15.41024" + }, + "test-gatk4-mergebamalignment": { + "content": [ + "30c325e1e032eb1782a280d34c0fb1c7", + [ + "versions.yml:md5,a72cfce8c9d171260cbb82b492be4372" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T12:02:08.379035" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/mergevcfs/environment.yml b/modules/nf-core/gatk4/mergevcfs/environment.yml index efd9faa2..55993f44 100644 --- a/modules/nf-core/gatk4/mergevcfs/environment.yml +++ b/modules/nf-core/gatk4/mergevcfs/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_mergevcfs channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mergevcfs/meta.yml b/modules/nf-core/gatk4/mergevcfs/meta.yml index 996053fc..b4f61d78 100644 --- a/modules/nf-core/gatk4/mergevcfs/meta.yml +++ b/modules/nf-core/gatk4/mergevcfs/meta.yml @@ -14,38 +14,50 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - vcf: - type: list - description: Two or more VCF files - pattern: "*.{vcf,vcf.gz}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - dict: - type: file - description: Optional Sequence Dictionary as input - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - vcf: + type: list + description: Two or more VCF files + pattern: "*.{vcf,vcf.gz}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - dict: + type: file + description: Optional Sequence Dictionary as input + pattern: "*.dict" output: - vcf: - type: file - description: merged vcf file - pattern: "*.vcf.gz" + - meta: + type: file + description: merged vcf file + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: merged vcf file + pattern: "*.vcf.gz" - tbi: - type: file - description: index files for the merged vcf files - pattern: "*.tbi" + - meta: + type: file + description: index files for the merged vcf files + pattern: "*.tbi" + - "*.tbi": + type: file + description: index files for the merged vcf files + pattern: "*.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" maintainers: diff --git a/modules/nf-core/gatk4/mutect2/environment.yml b/modules/nf-core/gatk4/mutect2/environment.yml index 86f4bfae..55993f44 100644 --- a/modules/nf-core/gatk4/mutect2/environment.yml +++ b/modules/nf-core/gatk4/mutect2/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_mutect2 channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/mutect2/meta.yml b/modules/nf-core/gatk4/mutect2/meta.yml index 21c928ed..27fd63a2 100644 --- a/modules/nf-core/gatk4/mutect2/meta.yml +++ b/modules/nf-core/gatk4/mutect2/meta.yml @@ -17,88 +17,113 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - input: - type: list - description: list of BAM files, also able to take CRAM as an input - pattern: "*.{bam/cram}" - - input_index: - type: list - description: list of BAM file indexes, also able to take CRAM indexes as an input - pattern: "*.{bam.bai/cram.crai}" - - intervals: - type: file - description: Specify region the tools is run on. - 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 - pattern: "*.dict" - - germline_resource: - type: file - description: Population vcf of germline sequencing, containing allele fractions. - pattern: "*.vcf.gz" - - germline_resource_tbi: - type: file - description: Index file for the germline resource. - pattern: "*.vcf.gz.tbi" - - panel_of_normals: - type: file - description: vcf file to be used as a panel of normals. - pattern: "*.vcf.gz" - - panel_of_normals_tbi: - type: file - description: Index for the panel of normals. - pattern: "*.vcf.gz.tbi" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - input: + type: list + description: list of BAM files, also able to take CRAM as an input + pattern: "*.{bam/cram}" + - input_index: + type: list + description: list of BAM file indexes, also able to take CRAM indexes as an + input + pattern: "*.{bam.bai/cram.crai}" + - intervals: + type: file + description: Specify region the tools is run on. + 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 + pattern: "*.dict" + - - germline_resource: + type: file + description: Population vcf of germline sequencing, containing allele fractions. + pattern: "*.vcf.gz" + - - germline_resource_tbi: + type: file + description: Index file for the germline resource. + pattern: "*.vcf.gz.tbi" + - - panel_of_normals: + type: file + description: vcf file to be used as a panel of normals. + pattern: "*.vcf.gz" + - - panel_of_normals_tbi: + type: file + description: Index for the panel of normals. + pattern: "*.vcf.gz.tbi" output: - vcf: - type: file - description: compressed vcf file - pattern: "*.vcf.gz" + - meta: + type: file + description: compressed vcf file + pattern: "*.vcf.gz" + - "*.vcf.gz": + type: file + description: compressed vcf file + pattern: "*.vcf.gz" - tbi: - type: file - description: Index of vcf file - pattern: "*vcf.gz.tbi" + - meta: + type: file + description: Index of vcf file + pattern: "*vcf.gz.tbi" + - "*.tbi": + type: file + description: Index of vcf file + pattern: "*vcf.gz.tbi" - stats: - type: file - description: Stats file that pairs with output vcf file - pattern: "*vcf.gz.stats" + - meta: + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" + - "*.stats": + type: file + description: Stats file that pairs with output vcf file + pattern: "*vcf.gz.stats" - f1r2: - type: file - description: file containing information to be passed to LearnReadOrientationModel (only outputted when tumor_normal_pair mode is run) - pattern: "*.f1r2.tar.gz" + - meta: + type: file + description: file containing information to be passed to LearnReadOrientationModel + (only outputted when tumor_normal_pair mode is run) + pattern: "*.f1r2.tar.gz" + - "*.f1r2.tar.gz": + type: file + description: file containing information to be passed to LearnReadOrientationModel + (only outputted when tumor_normal_pair mode is run) + pattern: "*.f1r2.tar.gz" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@GCJMackenzie" - "@ramprasadn" diff --git a/modules/nf-core/gatk4/mutect2/tests/main.nf.test b/modules/nf-core/gatk4/mutect2/tests/main.nf.test index d247ee35..aea8d226 100644 --- a/modules/nf-core/gatk4/mutect2/tests/main.nf.test +++ b/modules/nf-core/gatk4/mutect2/tests/main.nf.test @@ -21,31 +21,31 @@ nextflow_process { tumor_id:'tumour' ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true) ], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -78,31 +78,31 @@ nextflow_process { tumor_id:'tumour' ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true) ], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -127,26 +127,26 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true)], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -171,26 +171,26 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true)], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } @@ -216,21 +216,21 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true)], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] input[4] = [] input[5] = [] @@ -261,21 +261,21 @@ nextflow_process { """ input[0] = [ [ id:'test'], - [ file(params.test_data['homo_sapiens']['illumina']['mitochon_standin_recalibrated_sorted_bam'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['illumina']['mitochon_standin_recalibrated_sorted_bam_bai'], checkIfExists: true)], - [ file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true)] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/mitochon_standin.recalibrated.sorted.bam', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/mitochon_standin.recalibrated.sorted.bam.bai', checkIfExists: true)], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true)] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) ] input[4] = [] input[5] = [] @@ -312,31 +312,31 @@ nextflow_process { tumor_id:'tumour' ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.recalibrated.sorted.bam.bai', checkIfExists: true) ], [] ] input[1] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ] input[2] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ] input[3] = [ [ id:'genome' ], - file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) ] - input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) - input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) - input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) - input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + input[4] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz', checkIfExists: true) + input[5] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/gnomAD.r2.1.1.vcf.gz.tbi', checkIfExists: true) + input[6] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz', checkIfExists: true) + input[7] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/germlineresources/mills_and_1000G.indels.hg38.vcf.gz.tbi', checkIfExists: true) """ } } diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml index a724da11..d090169a 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml @@ -1,5 +1,6 @@ name: "gatk4_postprocessgermlinecnvcalls" -description: Postprocesses the output of GermlineCNVCaller and generates VCFs and denoised copy ratios +description: Postprocesses the output of GermlineCNVCaller and generates VCFs and + denoised copy ratios keywords: - copy number - gatk4 @@ -14,50 +15,69 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037593411-PostprocessGermlineCNVCalls doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ploidy: - type: directory - description: | - Optional - A folder containing the ploidy model. - When a model is supplied to tool will run in CASE mode. - pattern: "*-calls/" - - calls: - type: directory - description: A folder containing the calls from the input files - 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: "*-cnv-model/*-model" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - calls: + type: directory + description: A folder containing the calls from the input files + 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: "*-cnv-model/*-model" + - ploidy: + type: directory + description: | + Optional - A folder containing the ploidy model. + When a model is supplied to tool will run in CASE mode. + pattern: "*-calls/" 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" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_genotyped_intervals.vcf.gz": + type: file + description: Intervals VCF file + pattern: "*.vcf.gz" + - s: + type: file + description: Intervals VCF file + pattern: "*.vcf.gz" + - segments: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_genotyped_segments.vcf.gz": + type: file + description: Segments VCF file + pattern: "*.vcf.gz" + - denoised: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_denoised.vcf.gz": + type: file + description: Denoised copy ratio file + pattern: "*.vcf.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ryanjameskennedy" maintainers: diff --git a/modules/nf-core/gatk4/printreads/environment.yml b/modules/nf-core/gatk4/printreads/environment.yml index d1dd0b3e..55993f44 100644 --- a/modules/nf-core/gatk4/printreads/environment.yml +++ b/modules/nf-core/gatk4/printreads/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_printreads channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/printreads/meta.yml b/modules/nf-core/gatk4/printreads/meta.yml index aca7e188..de8da7c5 100644 --- a/modules/nf-core/gatk4/printreads/meta.yml +++ b/modules/nf-core/gatk4/printreads/meta.yml @@ -16,69 +16,84 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" - - meta2: - type: map - description: | - 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 - pattern: "*.{dict}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - - meta2: + type: map + description: | + 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 + 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" - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: Sorted BAM file + pattern: "*.{bam}" - cram: - type: file - description: Sorted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: Sorted CRAM file + pattern: "*.{cram}" - sam: - type: file - description: Sorted SAM file - pattern: "*.{sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.sam: + type: file + description: Sorted SAM file + pattern: "*.{sam}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/gatk4/printreads/tests/main.nf.test b/modules/nf-core/gatk4/printreads/tests/main.nf.test new file mode 100644 index 00000000..c0788619 --- /dev/null +++ b/modules/nf-core/gatk4/printreads/tests/main.nf.test @@ -0,0 +1,95 @@ + +nextflow_process { + + name "Test Process GATK4_PRINTREADS" + script "../main.nf" + process "GATK4_PRINTREADS" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/printreads" + + test("test-gatk4-printreads-bam") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + + input[3] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.cram, + process.out.sam, + process.out.versions + ).match() + } + ) + } + } + + test("test-gatk4-printreads-cram") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + + input[3] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.bam, + bam(process.out.cram[0][1]).getHeaderMD5(), + process.out.sam, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/printreads/tests/main.nf.test.snap b/modules/nf-core/gatk4/printreads/tests/main.nf.test.snap new file mode 100644 index 00000000..7f1266f2 --- /dev/null +++ b/modules/nf-core/gatk4/printreads/tests/main.nf.test.snap @@ -0,0 +1,40 @@ +{ + "test-gatk4-printreads-bam": { + "content": [ + "894549ee3ced6b5ca2eed2563a985217", + [ + + ], + [ + + ], + [ + "versions.yml:md5,9b368270d802ed95c530a7f0105f6453" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T11:48:53.871683" + }, + "test-gatk4-printreads-cram": { + "content": [ + [ + + ], + "591299d00e262474250c5ccc241bba59", + [ + + ], + [ + "versions.yml:md5,9b368270d802ed95c530a7f0105f6453" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T13:42:29.968056" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/revertsam/environment.yml b/modules/nf-core/gatk4/revertsam/environment.yml index f169a89a..55993f44 100644 --- a/modules/nf-core/gatk4/revertsam/environment.yml +++ b/modules/nf-core/gatk4/revertsam/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_revertsam channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/revertsam/meta.yml b/modules/nf-core/gatk4/revertsam/meta.yml index ac6c0d0f..fb73b13f 100644 --- a/modules/nf-core/gatk4/revertsam/meta.yml +++ b/modules/nf-core/gatk4/revertsam/meta.yml @@ -14,25 +14,32 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - bam: - type: file - description: The input bam/sam file - pattern: "*.{bam,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - bam: + type: file + description: The input bam/sam file + pattern: "*.{bam,sam}" output: - bam: - type: file - description: The reverted bam/sam file - pattern: "*.reverted.bam" + - meta: + type: file + description: The reverted bam/sam file + pattern: "*.reverted.bam" + - "*.bam": + type: file + description: The reverted bam/sam file + pattern: "*.reverted.bam" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" maintainers: diff --git a/modules/nf-core/gatk4/revertsam/tests/main.nf.test b/modules/nf-core/gatk4/revertsam/tests/main.nf.test new file mode 100644 index 00000000..b5268048 --- /dev/null +++ b/modules/nf-core/gatk4/revertsam/tests/main.nf.test @@ -0,0 +1,59 @@ + +nextflow_process { + + name "Test Process GATK4_REVERTSAM" + script "../main.nf" + process "GATK4_REVERTSAM" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/revertsam" + + test("test-gatk4-revertsam") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.bam[0][1]).getReadsMD5(), + process.out.versions + ).match() + } + ) + } + } + + test("test-gatk4-revertsam-stubs") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/revertsam/tests/main.nf.test.snap b/modules/nf-core/gatk4/revertsam/tests/main.nf.test.snap new file mode 100644 index 00000000..1cbb5ce6 --- /dev/null +++ b/modules/nf-core/gatk4/revertsam/tests/main.nf.test.snap @@ -0,0 +1,48 @@ +{ + "test-gatk4-revertsam": { + "content": [ + "e3cfa46b13cc4fc425cccae944f43b10", + [ + "versions.yml:md5,ee8dfa21abb49349e4865984cc122b9e" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T11:45:39.712635" + }, + "test-gatk4-revertsam-stubs": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.reverted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,ee8dfa21abb49349e4865984cc122b9e" + ], + "bam": [ + [ + { + "id": "test" + }, + "test.reverted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,ee8dfa21abb49349e4865984cc122b9e" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T11:45:46.856318" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/samtofastq/environment.yml b/modules/nf-core/gatk4/samtofastq/environment.yml index 1f881bb7..55993f44 100644 --- a/modules/nf-core/gatk4/samtofastq/environment.yml +++ b/modules/nf-core/gatk4/samtofastq/environment.yml @@ -1,7 +1,5 @@ -name: gatk4_samtofastq channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/samtofastq/meta.yml b/modules/nf-core/gatk4/samtofastq/meta.yml index b61ef4fc..91a8e503 100644 --- a/modules/nf-core/gatk4/samtofastq/meta.yml +++ b/modules/nf-core/gatk4/samtofastq/meta.yml @@ -14,25 +14,32 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/categories/360002369672s doi: 10.1158/1538-7445.AM2017-3590 licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test'] - - bam: - type: file - description: Input SAM/BAM file - pattern: "*.{bam,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test'] + - bam: + type: file + description: Input SAM/BAM file + pattern: "*.{bam,sam}" output: - fastq: - type: file - description: converted fastq file - pattern: "*.fastq" + - meta: + type: file + description: converted fastq file + pattern: "*.fastq" + - "*.fastq.gz": + type: file + description: converted fastq file + pattern: "*.fastq" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@kevinmenden" maintainers: diff --git a/modules/nf-core/gatk4/samtofastq/tests/main.nf.test b/modules/nf-core/gatk4/samtofastq/tests/main.nf.test new file mode 100644 index 00000000..30a41add --- /dev/null +++ b/modules/nf-core/gatk4/samtofastq/tests/main.nf.test @@ -0,0 +1,88 @@ + +nextflow_process { + + name "Test Process GATK4_SAMTOFASTQ" + script "../main.nf" + process "GATK4_SAMTOFASTQ" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/samtofastq" + + test("test-gatk4-samtofastq-single-end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end: true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) ] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.fastq[0][1]).linesGzip[3..7], + process.out.versions + ).match() + } + ) + } + } + + test("test-gatk4-samtofastq-paired-end") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end: false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) ] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.fastq[0][1].collect { path(it).linesGzip[3..7] }, + process.out.versions + ).match() + } + ) + } + } + + test("test-gatk4-samtofastq-paired-end-stubs") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:'test', single_end: true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.bam', checkIfExists: true) ] + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.fastq[0][1].collect { file(it).name }, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/gatk4/samtofastq/tests/main.nf.test.snap b/modules/nf-core/gatk4/samtofastq/tests/main.nf.test.snap new file mode 100644 index 00000000..0e1ec4b7 --- /dev/null +++ b/modules/nf-core/gatk4/samtofastq/tests/main.nf.test.snap @@ -0,0 +1,66 @@ +{ + "test-gatk4-samtofastq-single-end": { + "content": [ + [ + "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE ${prefix}.per-base.bed.gz touch ${prefix}.per-base.bed.gz.csi - touch ${prefix}.regions.bed.gz + echo "" | gzip > ${prefix}.regions.bed.gz touch ${prefix}.regions.bed.gz.csi - touch ${prefix}.quantized.bed.gz + echo "" | gzip > ${prefix}.quantized.bed.gz touch ${prefix}.quantized.bed.gz.csi - touch ${prefix}.thresholds.bed.gz + echo "" | gzip > ${prefix}.thresholds.bed.gz touch ${prefix}.thresholds.bed.gz.csi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml index 9caaf2cd..dc783c90 100644 --- a/modules/nf-core/mosdepth/meta.yml +++ b/modules/nf-core/mosdepth/meta.yml @@ -12,91 +12,161 @@ tools: documentation: https://github.com/brentp/mosdepth doi: 10.1093/bioinformatics/btx699 licence: ["MIT"] + identifier: biotools:mosdepth input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Input BAM/CRAM file - pattern: "*.{bam,cram}" - - bai: - type: file - description: Index for BAM/CRAM file - pattern: "*.{bai,crai}" - - bed: - type: file - description: BED file with intersected intervals - pattern: "*.{bed}" - - meta2: - type: map - description: | - Groovy Map containing bed information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference genome FASTA file - pattern: "*.{fa,fasta}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: Index for BAM/CRAM file + pattern: "*.{bai,crai}" + - bed: + type: file + description: BED file with intersected intervals + pattern: "*.{bed}" + - - meta2: + type: map + description: | + Groovy Map containing bed information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - global_txt: - type: file - description: Text file with global cumulative coverage distribution - pattern: "*.{global.dist.txt}" - - regions_txt: - type: file - description: Text file with region cumulative coverage distribution - pattern: "*.{region.dist.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.global.dist.txt": + type: file + description: Text file with global cumulative coverage distribution + pattern: "*.{global.dist.txt}" - summary_txt: - type: file - description: Text file with summary mean depths per chromosome and regions - pattern: "*.{summary.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.summary.txt": + type: file + description: Text file with summary mean depths per chromosome and regions + pattern: "*.{summary.txt}" + - regions_txt: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.region.dist.txt": + type: file + description: Text file with region cumulative coverage distribution + pattern: "*.{region.dist.txt}" + - per_base_d4: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.per-base.d4": + type: file + description: D4 file with per-base coverage + pattern: "*.{per-base.d4}" - per_base_bed: - type: file - description: BED file with per-base coverage - pattern: "*.{per-base.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.per-base.bed.gz": + type: file + description: BED file with per-base coverage + pattern: "*.{per-base.bed.gz}" - per_base_csi: - type: file - description: Index file for BED file with per-base coverage - pattern: "*.{per-base.bed.gz.csi}" - - per_base_d4: - type: file - description: D4 file with per-base coverage - pattern: "*.{per-base.d4}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.per-base.bed.gz.csi": + type: file + description: Index file for BED file with per-base coverage + pattern: "*.{per-base.bed.gz.csi}" - regions_bed: - type: file - description: BED file with per-region coverage - pattern: "*.{regions.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.regions.bed.gz": + type: file + description: BED file with per-region coverage + pattern: "*.{regions.bed.gz}" - regions_csi: - type: file - description: Index file for BED file with per-region coverage - pattern: "*.{regions.bed.gz.csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.regions.bed.gz.csi": + type: file + description: Index file for BED file with per-region coverage + pattern: "*.{regions.bed.gz.csi}" - quantized_bed: - type: file - description: BED file with binned coverage - pattern: "*.{quantized.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.quantized.bed.gz": + type: file + description: BED file with binned coverage + pattern: "*.{quantized.bed.gz}" - quantized_csi: - type: file - description: Index file for BED file with binned coverage - pattern: "*.{quantized.bed.gz.csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.quantized.bed.gz.csi": + type: file + description: Index file for BED file with binned coverage + pattern: "*.{quantized.bed.gz.csi}" - thresholds_bed: - type: file - description: BED file with the number of bases in each region that are covered at or above each threshold - pattern: "*.{thresholds.bed.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.thresholds.bed.gz": + type: file + description: BED file with the number of bases in each region that are covered + at or above each threshold + pattern: "*.{thresholds.bed.gz}" - thresholds_csi: - type: file - description: Index file for BED file with threshold coverage - pattern: "*.{thresholds.bed.gz.csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.thresholds.bed.gz.csi": + type: file + description: Index file for BED file with threshold coverage + pattern: "*.{thresholds.bed.gz.csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test index d991f819..0b3c860d 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -15,8 +15,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [] ] input[1] = [[],[]] @@ -40,9 +40,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -65,13 +65,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), [] ] input[1] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -93,13 +93,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [ [ id:'test' ], - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -122,8 +122,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [] ] input[1] = [[],[]] @@ -148,8 +148,8 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), [] ] input[1] = [[],[]] @@ -174,9 +174,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -200,9 +200,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -225,9 +225,9 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:true ], - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] """ @@ -237,21 +237,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.global_txt[0][1]).name, - file(process.out.summary_txt[0][1]).name, - file(process.out.regions_txt[0][1]).name, - file(process.out.per_base_d4[0][1]).name, - file(process.out.per_base_bed[0][1]).name, - file(process.out.per_base_csi[0][1]).name, - file(process.out.regions_bed[0][1]).name, - file(process.out.regions_csi[0][1]).name, - file(process.out.quantized_bed[0][1]).name, - file(process.out.quantized_csi[0][1]).name, - file(process.out.thresholds_bed[0][1]).name, - file(process.out.thresholds_csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap index dc4d9508..c604540b 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test.snap +++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap @@ -1,23 +1,236 @@ { "homo_sapiens - bam, bai, [] - stub": { "content": [ - "test.global.dist.txt", - "test.summary.txt", - "test.region.dist.txt", - "test.per-base.d4", - "test.per-base.bed.gz", - "test.per-base.bed.gz.csi", - "test.regions.bed.gz", - "test.regions.bed.gz.csi", - "test.quantized.bed.gz", - "test.quantized.bed.gz.csi", - "test.thresholds.bed.gz", - "test.thresholds.bed.gz.csi", - [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.global.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.d4:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.global.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "per_base_d4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.d4:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "quantized_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "quantized_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "regions_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "regions_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "regions_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "thresholds_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "thresholds_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + ] + } ], - "timestamp": "2023-11-27T15:14:34.897155161" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:33:16.953408231" }, "homo_sapiens - cram, crai, bed": { "content": [ @@ -47,7 +260,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -67,7 +280,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -76,7 +289,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -85,7 +298,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "7": [ @@ -94,7 +307,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "8": [ @@ -118,7 +331,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -127,7 +340,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -145,7 +358,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "regions_csi": [ @@ -154,7 +367,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "regions_txt": [ @@ -182,11 +395,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:18.171150781" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:50.160217828" }, "homo_sapiens - bam, bai, [] - quantized": { "content": [ @@ -216,7 +433,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ @@ -230,7 +447,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -239,7 +456,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -254,7 +471,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" + "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" ] ], "9": [ @@ -263,7 +480,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" + "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0" ] ], "global_txt": [ @@ -281,7 +498,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -290,7 +507,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -302,7 +519,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" + "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" ] ], "quantized_csi": [ @@ -311,7 +528,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" + "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0" ] ], "regions_bed": [ @@ -339,11 +556,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:29.228103864" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:33:01.164885111" }, "homo_sapiens - bam, bai, bed": { "content": [ @@ -373,7 +594,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -393,7 +614,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -402,7 +623,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -411,7 +632,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "7": [ @@ -420,7 +641,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "8": [ @@ -444,7 +665,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -453,7 +674,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -471,7 +692,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "regions_csi": [ @@ -480,7 +701,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "regions_txt": [ @@ -508,11 +729,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:04.537716314" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:39.071657456" }, "homo_sapiens - bam, bai, [] - window": { "content": [ @@ -542,7 +767,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -550,7 +775,7 @@ "id": "test", "single_end": true }, - "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" + "test.mosdepth.region.dist.txt:md5,0b6ea9f0da1228252d9aef2d3b6f7f76" ] ], "3": [ @@ -562,7 +787,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -571,7 +796,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -580,7 +805,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" + "test.regions.bed.gz:md5,34f48d16fcdd61e44d812e29e02c77b8" ] ], "7": [ @@ -589,7 +814,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" + "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970" ] ], "8": [ @@ -613,7 +838,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -622,7 +847,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -640,7 +865,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" + "test.regions.bed.gz:md5,34f48d16fcdd61e44d812e29e02c77b8" ] ], "regions_csi": [ @@ -649,7 +874,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" + "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970" ] ], "regions_txt": [ @@ -658,7 +883,7 @@ "id": "test", "single_end": true }, - "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" + "test.mosdepth.region.dist.txt:md5,0b6ea9f0da1228252d9aef2d3b6f7f76" ] ], "summary_txt": [ @@ -677,11 +902,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:23.708536171" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:55.631776118" }, "homo_sapiens - bam, bai, []": { "content": [ @@ -711,7 +940,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ @@ -725,7 +954,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -734,7 +963,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -764,7 +993,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -773,7 +1002,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -810,11 +1039,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:46:56.975710077" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:33.642125299" }, "homo_sapiens - cram, crai, []": { "content": [ @@ -844,7 +1077,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ @@ -858,7 +1091,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -867,7 +1100,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -897,7 +1130,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -906,7 +1139,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -943,11 +1176,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:12.09259995" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:44.704920941" }, "homo_sapiens - bam, bai, bed - thresholds": { "content": [ @@ -976,7 +1213,7 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" + "test.thresholds.bed.gz:md5,fe70ae728cd10726c42a2bcd44adfc9d" ] ], "11": [ @@ -985,11 +1222,11 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" + "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055" ] ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -1009,7 +1246,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -1018,7 +1255,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -1027,7 +1264,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "7": [ @@ -1036,7 +1273,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "8": [ @@ -1060,7 +1297,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -1069,7 +1306,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -1087,7 +1324,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "regions_csi": [ @@ -1096,7 +1333,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "regions_txt": [ @@ -1123,7 +1360,7 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" + "test.thresholds.bed.gz:md5,fe70ae728cd10726c42a2bcd44adfc9d" ] ], "thresholds_csi": [ @@ -1132,14 +1369,18 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" + "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055" ] ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:49:44.311847326" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:33:06.737266831" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index ca39fb67..f1cd99b0 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,7 +1,5 @@ -name: multiqc channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::multiqc=1.21 + - bioconda::multiqc=1.24.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 47ac352f..b9ccebdb 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,14 +3,16 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.21--pyhdfd78af_0' : - 'biocontainers/multiqc:1.21--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" path(multiqc_config) path(extra_multiqc_config) path(multiqc_logo) + path(replace_names) + path(sample_names) output: path "*multiqc_report.html", emit: report @@ -23,16 +25,22 @@ process MULTIQC { script: def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' def config = multiqc_config ? "--config $multiqc_config" : '' def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : '' - def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : '' + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' """ multiqc \\ --force \\ $args \\ $config \\ + $prefix \\ $extra_config \\ $logo \\ + $replace \\ + $samples \\ . cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 45a9bc35..b16c1879 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,5 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into a single report +description: Aggregate results from bioinformatics analyses across many samples into + a single report keywords: - QC - bioinformatics tools @@ -12,40 +13,59 @@ tools: homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ licence: ["GPL-3.0-or-later"] + identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections in multiqc_config. - pattern: "*.{yml,yaml}" - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" + - - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + - - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + - - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + - - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + - - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + - - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" output: - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" + - "*multiqc_report.html": + type: file + description: MultiQC report file + pattern: "multiqc_report.html" - data: - type: directory - description: MultiQC data dir - pattern: "multiqc_data" + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index f1c4242e..33316a7d 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -8,6 +8,8 @@ nextflow_process { tag "modules_nfcore" tag "multiqc" + config "./nextflow.config" + test("sarscov2 single-end [fastqc]") { when { @@ -17,6 +19,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -41,6 +45,8 @@ nextflow_process { input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } @@ -66,6 +72,8 @@ nextflow_process { input[1] = [] input[2] = [] input[3] = [] + input[4] = [] + input[5] = [] """ } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index bfebd802..b779e469 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:48:55.657331" + "timestamp": "2024-07-10T12:41:34.562023" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:49.071937" + "timestamp": "2024-07-10T11:27:11.933869532" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,21f35ee29416b9b3073c28733efe4b7d" + "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-29T08:49:25.457567" + "timestamp": "2024-07-10T11:26:56.709849369" } -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/tests/nextflow.config b/modules/nf-core/multiqc/tests/nextflow.config new file mode 100644 index 00000000..c537a6a3 --- /dev/null +++ b/modules/nf-core/multiqc/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'MULTIQC' { + ext.prefix = null + } +} diff --git a/modules/nf-core/ngsbits/samplegender/environment.yml b/modules/nf-core/ngsbits/samplegender/environment.yml index 486c233c..932d1556 100644 --- a/modules/nf-core/ngsbits/samplegender/environment.yml +++ b/modules/nf-core/ngsbits/samplegender/environment.yml @@ -1,7 +1,5 @@ -name: ngsbits_samplegender channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ngs-bits=2023_02 diff --git a/modules/nf-core/ngsbits/samplegender/meta.yml b/modules/nf-core/ngsbits/samplegender/meta.yml index 961462b3..54a61181 100644 --- a/modules/nf-core/ngsbits/samplegender/meta.yml +++ b/modules/nf-core/ngsbits/samplegender/meta.yml @@ -1,4 +1,3 @@ ---- name: "ngsbits_samplegender" description: Determines the gender of a sample from the BAM/CRAM file. keywords: @@ -13,56 +12,60 @@ tools: documentation: "https://github.com/imgag/ngs-bits" tool_dev_url: "https://github.com/imgag/ngs-bits" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: One or more BAM/CRAM files to determine the gender of - pattern: "*.{bam,cram}" - - bai: - type: file - description: The index file(s) from the input BAM/CRAM file(s) - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference fasta information - e.g. [ id:'test' ] - - fasta: - type: file - description: The reference FASTA to use (mandatory when CRAM files are used) - pattern: "*.{fasta,fa,fna}" - - meta3: - type: map - description: | - Groovy Map containing reference fasta index information - e.g. [ id:'test' ] - - fasta: - type: file - description: The index of the reference FASTA to use (mandatory when CRAM files are used) - pattern: "*.fai" - - method: - type: string - description: The method to use to define the gender (posibilities are 'xy', 'hetx' and 'sry') - pattern: "(xy|hetx|sry)" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: One or more BAM/CRAM files to determine the gender of + pattern: "*.{bam,cram}" + - bai: + type: file + description: The index file(s) from the input BAM/CRAM file(s) + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference fasta information + e.g. [ id:'test' ] + - fasta: + type: file + description: The reference FASTA to use (mandatory when CRAM files are used) + pattern: "*.{fasta,fa,fna}" + - - meta2: + type: map + description: | + Groovy Map containing reference fasta information + e.g. [ id:'test' ] + - fai: + type: file + description: The index file from the reference FASTA + pattern: "*.fai" + - - method: + type: string + description: The method to use to define the gender (posibilities are 'xy', + 'hetx' and 'sry') + pattern: "(xy|hetx|sry)" 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: An output TSV file containing the results of the gender prediction - pattern: "*.tsv" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv": + type: file + description: An output TSV file containing the results of the gender prediction + pattern: "*.tsv" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" maintainers: diff --git a/modules/nf-core/ngsbits/samplegender/tests/main.nf.test b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test index 2cf4757b..4f8379b4 100644 --- a/modules/nf-core/ngsbits/samplegender/tests/main.nf.test +++ b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test @@ -19,8 +19,8 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ] input[1] = [ [ id:'reference'], // meta map diff --git a/modules/nf-core/peddy/environment.yml b/modules/nf-core/peddy/environment.yml index 00e7cebe..8d7fa2b6 100644 --- a/modules/nf-core/peddy/environment.yml +++ b/modules/nf-core/peddy/environment.yml @@ -1,7 +1,5 @@ -name: peddy channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::peddy=0.4.8 diff --git a/modules/nf-core/peddy/meta.yml b/modules/nf-core/peddy/meta.yml index 24a82e19..6b6b7347 100644 --- a/modules/nf-core/peddy/meta.yml +++ b/modules/nf-core/peddy/meta.yml @@ -6,56 +6,78 @@ keywords: - family tools: - peddy: - description: genotype, ped correspondence check, ancestry check, sex check. directly, quickly on VCF + description: genotype, ped correspondence check, ancestry check, sex check. directly, + quickly on VCF homepage: https://github.com/brentp/peddy documentation: https://peddy.readthedocs.io/en/latest/ tool_dev_url: https://github.com/brentp/peddy doi: "10.1016/j.ajhg.2017.01.017" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF file - pattern: "*.{vcf.gz}" - - ped: - type: file - description: PED/FAM file - pattern: "*.{ped,fam}" - - vcf_tbi: - type: file - description: TBI file - pattern: "*.{vcf.gz.tbi}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf.gz}" + - vcf_tbi: + type: file + description: TBI file + pattern: "*.{vcf.gz.tbi}" + - - ped: + type: file + description: PED/FAM file + pattern: "*.{ped,fam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ped: - type: file - description: PED/FAM file - pattern: "*.peddy.{ped}" - html: - type: file - description: HTML file - pattern: "*.{html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: HTML file + pattern: "*.{html}" - csv: - type: file - description: CSV file - pattern: "*.{csv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csv": + type: file + description: CSV file + pattern: "*.{csv}" + - ped: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.peddy.ped": + type: file + description: PED/FAM file + pattern: "*.peddy.{ped}" - png: - type: file - description: PNG file - pattern: "*.{png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.png": + type: file + description: PNG file + pattern: "*.{png}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@rannick" maintainers: diff --git a/modules/nf-core/peddy/tests/main.nf.test b/modules/nf-core/peddy/tests/main.nf.test index 892da6cf..21ff538d 100644 --- a/modules/nf-core/peddy/tests/main.nf.test +++ b/modules/nf-core/peddy/tests/main.nf.test @@ -17,10 +17,10 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], - file(params.test_data['homo_sapiens']['genome']['justhusky_minimal_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['genome']['justhusky_minimal_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/ped/justhusky_minimal.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/ped/justhusky_minimal.vcf.gz.tbi', checkIfExists: true) ] - input[1] = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/ped/justhusky.ped', checkIfExists: true) """ } } diff --git a/modules/nf-core/picard/addorreplacereadgroups/environment.yml b/modules/nf-core/picard/addorreplacereadgroups/environment.yml index d7d2c6c0..ff4a85ed 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/environment.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/environment.yml @@ -1,7 +1,5 @@ -name: picard_addorreplacereadgroups channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index 4300ba7f..3f03c680 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -4,8 +4,8 @@ process PICARD_ADDORREPLACEREADGROUPS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml index efd5b86d..77ce8503 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/meta.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -14,56 +14,71 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037226472-AddOrReplaceReadGroups-Picard- tool_dev_url: https://github.com/broadinstitute/picard licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - 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 ] - - reads: - type: file - description: Sequence reads file, can be SAM/BAM/CRAM format - pattern: "*.{bam,cram,sam}" - - fasta: - type: file - description: Reference genome file - pattern: "*.{fasta,fa,fasta.gz,fa.gz}" - - fasta_index: - type: file - description: Reference genome index file - pattern: "*.{fai,fasta.fai,fa.fai,fasta.gz.fai,fa.gz.fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Sequence reads file, can be SAM/BAM/CRAM format + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome file + pattern: "*.{fasta,fa,fasta.gz,fa.gz}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta_index: + type: file + description: Reference genome index file + pattern: "*.{fai,fasta.fai,fa.fai,fasta.gz.fai,fa.gz.fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bam: - type: file - description: Output BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file + pattern: "*.{bam}" - bai: - type: file - description: An optional BAM index file - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: An optional BAM index file + pattern: "*.{bai}" - cram: - type: file - description: Output CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file + pattern: "*.{cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@sateeshperi" - "@mjcipriano" diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap index 63a55843..f823197d 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap @@ -3,14 +3,14 @@ "content": [ "test.replaced.cram", [ - "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + "versions.yml:md5,7ec6e56d1d70ed028928dc82b32b27cd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-21T12:05:47.668865" + "timestamp": "2024-07-10T09:54:40.471730168" }, "sarscov2 - bam - stub": { "content": [ @@ -30,7 +30,7 @@ ], "3": [ - "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + "versions.yml:md5,7ec6e56d1d70ed028928dc82b32b27cd" ], "bai": [ @@ -47,28 +47,28 @@ ], "versions": [ - "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + "versions.yml:md5,7ec6e56d1d70ed028928dc82b32b27cd" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-21T10:51:24.530553" + "timestamp": "2024-07-10T09:55:08.402649243" }, "sarscov2 - bam": { "content": [ "null.replaced.bam", "null.replaced.bai", [ - "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + "versions.yml:md5,7ec6e56d1d70ed028928dc82b32b27cd" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-21T12:05:29.696728" + "timestamp": "2024-07-10T09:54:22.239968953" } } \ No newline at end of file diff --git a/modules/nf-core/picard/collecthsmetrics/environment.yml b/modules/nf-core/picard/collecthsmetrics/environment.yml index fbeab71b..ff4a85ed 100644 --- a/modules/nf-core/picard/collecthsmetrics/environment.yml +++ b/modules/nf-core/picard/collecthsmetrics/environment.yml @@ -1,7 +1,5 @@ -name: picard_collecthsmetrics channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index b798452d..a9cbafd4 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -4,11 +4,11 @@ process PICARD_COLLECTHSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: - tuple val(meta), path(bam), path(bai), path(bait_intervals), path(target_intervals) + tuple val(meta), path(bam), path(bai), path(bait_intervals, stageAs: "baits/*"), path(target_intervals, stageAs: 'targets/*') tuple val(meta2), path(fasta) tuple val(meta3), path(fai) tuple val(meta4), path(dict) diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml index 4b296fe0..ea6deda3 100644 --- a/modules/nf-core/picard/collecthsmetrics/meta.yml +++ b/modules/nf-core/picard/collecthsmetrics/meta.yml @@ -17,71 +17,75 @@ tools: documentation: https://broadinstitute.github.io/picard/ tool_dev_url: https://github.com/broadinstitute/picard/ licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: An aligned BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - 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: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: | - A reference file to calculate dropout metrics measuring reduced representation of reads. - Optional input. - pattern: "*.{fa,fasta,fna}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of FASTA file. Only needed when fasta is supplied. - pattern: "*.fai" - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Sequence dictionary of FASTA file. Only needed when bed interval lists are supplied. - pattern: "*.dict" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: An aligned BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + 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: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: | + A reference file to calculate dropout metrics measuring reduced representation of reads. + Optional input. + pattern: "*.{fa,fasta,fna}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of FASTA file. Only needed when fasta is supplied. + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: Sequence dictionary of FASTA file. Only needed when bed interval + lists are supplied. + 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" - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@projectoriented" - "@matthdsm" diff --git a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test new file mode 100644 index 00000000..3bbbd8cf --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test @@ -0,0 +1,191 @@ +nextflow_process { + + name "Test Process PICARD_COLLECTHSMETRICS" + script "../main.nf" + process "PICARD_COLLECTHSMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collecthsmetrics" + + test("sarscov2 - bam") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/targets.interval_list', checkIfExists: true) + ] + input[1] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)] + """ + } + } + + then { + def size = path(process.out.metrics[0][1]).size() + def lines = path(process.out.metrics[0][1]).readLines()[0..100] + lines.remove(3) // remove timestamp + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).name, + size, + lines, + process.out.versions + ).match() + } + ) + } + + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/targets.interval_list', checkIfExists: true) + ] + input[1] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") } + ) + } + + } + + test("sarscov2 - bam - nofasta") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/targets.interval_list', checkIfExists: true) + ] + input[1] = [[:],[]] + input[2] = [[:],[]] + input[3] = [[:],[]] + """ + } + } + + then { + def size = path(process.out.metrics[0][1]).size() + def lines = path(process.out.metrics[0][1]).readLines()[0..100] + lines.remove(3) // remove timestamp + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).name, + size, + lines, + process.out.versions + ).match() + } + ) + } + + } + + test("sarscov2 - bam - bed") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) + ] + + input[1] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)] + """ + } + } + + then { + def size = path(process.out.metrics[0][1]).size() + def lines = path(process.out.metrics[0][1]).readLines()[0..100] + lines.remove(3) // remove timestamp + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).name, + size, + lines, + process.out.versions + ).match() + } + ) + } + + } + + test("sarscov2 - bam - samebed") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/baits.bed', checkIfExists: true) + ] + + input[1] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)] + """ + } + } + + then { + def size = path(process.out.metrics[0][1]).size() + def lines = path(process.out.metrics[0][1]).readLines()[0..100] + lines.remove(3) // remove timestamp + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).name, + size, + lines, + process.out.versions + ).match() + } + ) + } + + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap new file mode 100644 index 00000000..53855d13 --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap @@ -0,0 +1,478 @@ +{ + "sarscov2 - bam - nofasta": { + "content": [ + "test.CollectHsMetrics.coverage_metrics", + 3548, + [ + "## htsjdk.samtools.metrics.StringHeader", + "# CollectHsMetrics --BAIT_INTERVALS baits/baits.interval_list --TARGET_INTERVALS targets/targets.interval_list --INPUT test.paired_end.sorted.bam --OUTPUT test.CollectHsMetrics.coverage_metrics --METRIC_ACCUMULATION_LEVEL ALL_READS --NEAR_DISTANCE 250 --MINIMUM_MAPPING_QUALITY 20 --MINIMUM_BASE_QUALITY 20 --CLIP_OVERLAPPING_READS true --INCLUDE_INDELS false --COVERAGE_CAP 200 --SAMPLE_SIZE 10000 --ALLELE_FRACTION 0.001 --ALLELE_FRACTION 0.005 --ALLELE_FRACTION 0.01 --ALLELE_FRACTION 0.02 --ALLELE_FRACTION 0.05 --ALLELE_FRACTION 0.1 --ALLELE_FRACTION 0.2 --ALLELE_FRACTION 0.3 --ALLELE_FRACTION 0.5 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader", + "", + "## METRICS CLASS\tpicard.analysis.directed.HsMetrics", + "BAIT_SET\tBAIT_TERRITORY\tBAIT_DESIGN_EFFICIENCY\tON_BAIT_BASES\tNEAR_BAIT_BASES\tOFF_BAIT_BASES\tPCT_SELECTED_BASES\tPCT_OFF_BAIT\tON_BAIT_VS_SELECTED\tMEAN_BAIT_COVERAGE\tPCT_USABLE_BASES_ON_BAIT\tPCT_USABLE_BASES_ON_TARGET\tFOLD_ENRICHMENT\tHS_LIBRARY_SIZE\tHS_PENALTY_10X\tHS_PENALTY_20X\tHS_PENALTY_30X\tHS_PENALTY_40X\tHS_PENALTY_50X\tHS_PENALTY_100X\tTARGET_TERRITORY\tGENOME_SIZE\tTOTAL_READS\tPF_READS\tPF_BASES\tPF_UNIQUE_READS\tPF_UQ_READS_ALIGNED\tPF_BASES_ALIGNED\tPF_UQ_BASES_ALIGNED\tON_TARGET_BASES\tPCT_PF_READS\tPCT_PF_UQ_READS\tPCT_PF_UQ_READS_ALIGNED\tMEAN_TARGET_COVERAGE\tMEDIAN_TARGET_COVERAGE\tMAX_TARGET_COVERAGE\tMIN_TARGET_COVERAGE\tZERO_CVG_TARGETS_PCT\tPCT_EXC_DUPE\tPCT_EXC_ADAPTER\tPCT_EXC_MAPQ\tPCT_EXC_BASEQ\tPCT_EXC_OVERLAP\tPCT_EXC_OFF_TARGET\tFOLD_80_BASE_PENALTY\tPCT_TARGET_BASES_1X\tPCT_TARGET_BASES_2X\tPCT_TARGET_BASES_10X\tPCT_TARGET_BASES_20X\tPCT_TARGET_BASES_30X\tPCT_TARGET_BASES_40X\tPCT_TARGET_BASES_50X\tPCT_TARGET_BASES_100X\tPCT_TARGET_BASES_250X\tPCT_TARGET_BASES_500X\tPCT_TARGET_BASES_1000X\tPCT_TARGET_BASES_2500X\tPCT_TARGET_BASES_5000X\tPCT_TARGET_BASES_10000X\tPCT_TARGET_BASES_25000X\tPCT_TARGET_BASES_50000X\tPCT_TARGET_BASES_100000X\tAT_DROPOUT\tGC_DROPOUT\tHET_SNP_SENSITIVITY\tHET_SNP_Q\tSAMPLE\tLIBRARY\tREAD_GROUP", + "baits\t158\t0.594937\t725\t3985\t22691\t0.171892\t0.828108\t0.153928\t4.588608\t0.026225\t0.000181\t4.995204\t\t0\t0\t0\t0\t0\t0\t94\t29829\t200\t200\t27645\t200\t197\t27401\t27401\t5\t1\t1\t0.985\t0.053191\t0\t1\t0\t0.75\t0\t0\t0.005438\t0.054487\t0.259516\t0.680377\t?\t0.053191\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0.015734\t0\t\t\t", + "", + "## HISTOGRAM\tjava.lang.Integer", + "coverage_or_base_quality\thigh_quality_coverage_count\tunfiltered_baseq_count", + "0\t89\t0", + "1\t5\t0", + "2\t0\t0", + "3\t0\t0", + "4\t0\t0", + "5\t0\t0", + "6\t0\t0", + "7\t0\t0", + "8\t0\t0", + "9\t0\t0", + "10\t0\t0", + "11\t0\t0", + "12\t0\t0", + "13\t0\t0", + "14\t0\t5", + "15\t0\t0", + "16\t0\t0", + "17\t0\t0", + "18\t0\t0", + "19\t0\t0", + "20\t0\t0", + "21\t0\t1", + "22\t0\t0", + "23\t0\t0", + "24\t0\t0", + "25\t0\t0", + "26\t0\t0", + "27\t0\t0", + "28\t0\t0", + "29\t0\t0", + "30\t0\t0", + "31\t0\t0", + "32\t0\t1", + "33\t0\t0", + "34\t0\t0", + "35\t0\t0", + "36\t0\t3", + "37\t0\t0", + "38\t0\t0", + "39\t0\t0", + "40\t0\t0", + "41\t0\t0", + "42\t0\t0", + "43\t0\t0", + "44\t0\t0", + "45\t0\t0", + "46\t0\t0", + "47\t0\t0", + "48\t0\t0", + "49\t0\t0", + "50\t0\t0", + "51\t0\t0", + "52\t0\t0", + "53\t0\t0", + "54\t0\t0", + "55\t0\t0", + "56\t0\t0", + "57\t0\t0", + "58\t0\t0", + "59\t0\t0", + "60\t0\t0", + "61\t0\t0", + "62\t0\t0", + "63\t0\t0", + "64\t0\t0", + "65\t0\t0", + "66\t0\t0", + "67\t0\t0", + "68\t0\t0", + "69\t0\t0", + "70\t0\t0", + "71\t0\t0", + "72\t0\t0", + "73\t0\t0", + "74\t0\t0", + "75\t0\t0", + "76\t0\t0", + "77\t0\t0", + "78\t0\t0", + "79\t0\t0", + "80\t0\t0", + "81\t0\t0", + "82\t0\t0", + "83\t0\t0", + "84\t0\t0", + "85\t0\t0", + "86\t0\t0", + "87\t0\t0", + "88\t0\t0", + "89\t0\t0" + ], + [ + "versions.yml:md5,e390b048af294086f56621c38ebde05a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-10T09:45:46.991614248" + }, + "versions": { + "content": [ + [ + "versions.yml:md5,e390b048af294086f56621c38ebde05a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-10T09:36:50.350567213" + }, + "sarscov2 - bam - samebed": { + "content": [ + "test.CollectHsMetrics.coverage_metrics", + 3586, + [ + "## htsjdk.samtools.metrics.StringHeader", + "# CollectHsMetrics --BAIT_INTERVALS baits/baits.interval_list --TARGET_INTERVALS targets/baits.interval_list --INPUT test.paired_end.sorted.bam --OUTPUT test.CollectHsMetrics.coverage_metrics --REFERENCE_SEQUENCE genome.fasta --METRIC_ACCUMULATION_LEVEL ALL_READS --NEAR_DISTANCE 250 --MINIMUM_MAPPING_QUALITY 20 --MINIMUM_BASE_QUALITY 20 --CLIP_OVERLAPPING_READS true --INCLUDE_INDELS false --COVERAGE_CAP 200 --SAMPLE_SIZE 10000 --ALLELE_FRACTION 0.001 --ALLELE_FRACTION 0.005 --ALLELE_FRACTION 0.01 --ALLELE_FRACTION 0.02 --ALLELE_FRACTION 0.05 --ALLELE_FRACTION 0.1 --ALLELE_FRACTION 0.2 --ALLELE_FRACTION 0.3 --ALLELE_FRACTION 0.5 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader", + "", + "## METRICS CLASS\tpicard.analysis.directed.HsMetrics", + "BAIT_SET\tBAIT_TERRITORY\tBAIT_DESIGN_EFFICIENCY\tON_BAIT_BASES\tNEAR_BAIT_BASES\tOFF_BAIT_BASES\tPCT_SELECTED_BASES\tPCT_OFF_BAIT\tON_BAIT_VS_SELECTED\tMEAN_BAIT_COVERAGE\tPCT_USABLE_BASES_ON_BAIT\tPCT_USABLE_BASES_ON_TARGET\tFOLD_ENRICHMENT\tHS_LIBRARY_SIZE\tHS_PENALTY_10X\tHS_PENALTY_20X\tHS_PENALTY_30X\tHS_PENALTY_40X\tHS_PENALTY_50X\tHS_PENALTY_100X\tTARGET_TERRITORY\tGENOME_SIZE\tTOTAL_READS\tPF_READS\tPF_BASES\tPF_UNIQUE_READS\tPF_UQ_READS_ALIGNED\tPF_BASES_ALIGNED\tPF_UQ_BASES_ALIGNED\tON_TARGET_BASES\tPCT_PF_READS\tPCT_PF_UQ_READS\tPCT_PF_UQ_READS_ALIGNED\tMEAN_TARGET_COVERAGE\tMEDIAN_TARGET_COVERAGE\tMAX_TARGET_COVERAGE\tMIN_TARGET_COVERAGE\tZERO_CVG_TARGETS_PCT\tPCT_EXC_DUPE\tPCT_EXC_ADAPTER\tPCT_EXC_MAPQ\tPCT_EXC_BASEQ\tPCT_EXC_OVERLAP\tPCT_EXC_OFF_TARGET\tFOLD_80_BASE_PENALTY\tPCT_TARGET_BASES_1X\tPCT_TARGET_BASES_2X\tPCT_TARGET_BASES_10X\tPCT_TARGET_BASES_20X\tPCT_TARGET_BASES_30X\tPCT_TARGET_BASES_40X\tPCT_TARGET_BASES_50X\tPCT_TARGET_BASES_100X\tPCT_TARGET_BASES_250X\tPCT_TARGET_BASES_500X\tPCT_TARGET_BASES_1000X\tPCT_TARGET_BASES_2500X\tPCT_TARGET_BASES_5000X\tPCT_TARGET_BASES_10000X\tPCT_TARGET_BASES_25000X\tPCT_TARGET_BASES_50000X\tPCT_TARGET_BASES_100000X\tAT_DROPOUT\tGC_DROPOUT\tHET_SNP_SENSITIVITY\tHET_SNP_Q\tSAMPLE\tLIBRARY\tREAD_GROUP", + "baits\t158\t1\t725\t3985\t22691\t0.171892\t0.828108\t0.153928\t4.588608\t0.026225\t0.013782\t4.995204\t\t0\t0\t0\t0\t0\t0\t158\t29829\t200\t200\t27645\t200\t197\t27401\t27401\t381\t1\t1\t0.985\t2.411392\t2\t3\t2\t0\t0\t0\t0.005438\t0.054487\t0.259516\t0.666655\t1.205696\t1\t1\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t7.018506\t0\t0.394337\t2\t\t\t", + "", + "## HISTOGRAM\tjava.lang.Integer", + "coverage_or_base_quality\thigh_quality_coverage_count\tunfiltered_baseq_count", + "0\t0\t0", + "1\t0\t0", + "2\t93\t0", + "3\t65\t0", + "4\t0\t0", + "5\t0\t0", + "6\t0\t0", + "7\t0\t0", + "8\t0\t0", + "9\t0\t0", + "10\t0\t0", + "11\t0\t0", + "12\t0\t0", + "13\t0\t0", + "14\t0\t28", + "15\t0\t0", + "16\t0\t0", + "17\t0\t0", + "18\t0\t0", + "19\t0\t0", + "20\t0\t0", + "21\t0\t9", + "22\t0\t0", + "23\t0\t0", + "24\t0\t0", + "25\t0\t0", + "26\t0\t0", + "27\t0\t20", + "28\t0\t0", + "29\t0\t0", + "30\t0\t0", + "31\t0\t0", + "32\t0\t90", + "33\t0\t0", + "34\t0\t0", + "35\t0\t0", + "36\t0\t262", + "37\t0\t0", + "38\t0\t0", + "39\t0\t0", + "40\t0\t0", + "41\t0\t0", + "42\t0\t0", + "43\t0\t0", + "44\t0\t0", + "45\t0\t0", + "46\t0\t0", + "47\t0\t0", + "48\t0\t0", + "49\t0\t0", + "50\t0\t0", + "51\t0\t0", + "52\t0\t0", + "53\t0\t0", + "54\t0\t0", + "55\t0\t0", + "56\t0\t0", + "57\t0\t0", + "58\t0\t0", + "59\t0\t0", + "60\t0\t0", + "61\t0\t0", + "62\t0\t0", + "63\t0\t0", + "64\t0\t0", + "65\t0\t0", + "66\t0\t0", + "67\t0\t0", + "68\t0\t0", + "69\t0\t0", + "70\t0\t0", + "71\t0\t0", + "72\t0\t0", + "73\t0\t0", + "74\t0\t0", + "75\t0\t0", + "76\t0\t0", + "77\t0\t0", + "78\t0\t0", + "79\t0\t0", + "80\t0\t0", + "81\t0\t0", + "82\t0\t0", + "83\t0\t0", + "84\t0\t0", + "85\t0\t0", + "86\t0\t0", + "87\t0\t0", + "88\t0\t0", + "89\t0\t0" + ], + [ + "versions.yml:md5,e390b048af294086f56621c38ebde05a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-10T09:46:33.770516478" + }, + "sarscov2 - bam": { + "content": [ + "test.CollectHsMetrics.coverage_metrics", + 3598, + [ + "## htsjdk.samtools.metrics.StringHeader", + "# CollectHsMetrics --BAIT_INTERVALS baits/baits.interval_list --TARGET_INTERVALS targets/targets.interval_list --INPUT test.paired_end.sorted.bam --OUTPUT test.CollectHsMetrics.coverage_metrics --REFERENCE_SEQUENCE genome.fasta --METRIC_ACCUMULATION_LEVEL ALL_READS --NEAR_DISTANCE 250 --MINIMUM_MAPPING_QUALITY 20 --MINIMUM_BASE_QUALITY 20 --CLIP_OVERLAPPING_READS true --INCLUDE_INDELS false --COVERAGE_CAP 200 --SAMPLE_SIZE 10000 --ALLELE_FRACTION 0.001 --ALLELE_FRACTION 0.005 --ALLELE_FRACTION 0.01 --ALLELE_FRACTION 0.02 --ALLELE_FRACTION 0.05 --ALLELE_FRACTION 0.1 --ALLELE_FRACTION 0.2 --ALLELE_FRACTION 0.3 --ALLELE_FRACTION 0.5 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader", + "", + "## METRICS CLASS\tpicard.analysis.directed.HsMetrics", + "BAIT_SET\tBAIT_TERRITORY\tBAIT_DESIGN_EFFICIENCY\tON_BAIT_BASES\tNEAR_BAIT_BASES\tOFF_BAIT_BASES\tPCT_SELECTED_BASES\tPCT_OFF_BAIT\tON_BAIT_VS_SELECTED\tMEAN_BAIT_COVERAGE\tPCT_USABLE_BASES_ON_BAIT\tPCT_USABLE_BASES_ON_TARGET\tFOLD_ENRICHMENT\tHS_LIBRARY_SIZE\tHS_PENALTY_10X\tHS_PENALTY_20X\tHS_PENALTY_30X\tHS_PENALTY_40X\tHS_PENALTY_50X\tHS_PENALTY_100X\tTARGET_TERRITORY\tGENOME_SIZE\tTOTAL_READS\tPF_READS\tPF_BASES\tPF_UNIQUE_READS\tPF_UQ_READS_ALIGNED\tPF_BASES_ALIGNED\tPF_UQ_BASES_ALIGNED\tON_TARGET_BASES\tPCT_PF_READS\tPCT_PF_UQ_READS\tPCT_PF_UQ_READS_ALIGNED\tMEAN_TARGET_COVERAGE\tMEDIAN_TARGET_COVERAGE\tMAX_TARGET_COVERAGE\tMIN_TARGET_COVERAGE\tZERO_CVG_TARGETS_PCT\tPCT_EXC_DUPE\tPCT_EXC_ADAPTER\tPCT_EXC_MAPQ\tPCT_EXC_BASEQ\tPCT_EXC_OVERLAP\tPCT_EXC_OFF_TARGET\tFOLD_80_BASE_PENALTY\tPCT_TARGET_BASES_1X\tPCT_TARGET_BASES_2X\tPCT_TARGET_BASES_10X\tPCT_TARGET_BASES_20X\tPCT_TARGET_BASES_30X\tPCT_TARGET_BASES_40X\tPCT_TARGET_BASES_50X\tPCT_TARGET_BASES_100X\tPCT_TARGET_BASES_250X\tPCT_TARGET_BASES_500X\tPCT_TARGET_BASES_1000X\tPCT_TARGET_BASES_2500X\tPCT_TARGET_BASES_5000X\tPCT_TARGET_BASES_10000X\tPCT_TARGET_BASES_25000X\tPCT_TARGET_BASES_50000X\tPCT_TARGET_BASES_100000X\tAT_DROPOUT\tGC_DROPOUT\tHET_SNP_SENSITIVITY\tHET_SNP_Q\tSAMPLE\tLIBRARY\tREAD_GROUP", + "baits\t158\t0.594937\t725\t3985\t22691\t0.171892\t0.828108\t0.153928\t4.588608\t0.026225\t0.000181\t4.995204\t\t0\t0\t0\t0\t0\t0\t94\t29829\t200\t200\t27645\t200\t197\t27401\t27401\t5\t1\t1\t0.985\t0.053191\t0\t1\t0\t0.75\t0\t0\t0.005438\t0.054487\t0.259516\t0.680377\t?\t0.053191\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t76.595745\t23.404255\t0.015734\t0\t\t\t", + "", + "## HISTOGRAM\tjava.lang.Integer", + "coverage_or_base_quality\thigh_quality_coverage_count\tunfiltered_baseq_count", + "0\t89\t0", + "1\t5\t0", + "2\t0\t0", + "3\t0\t0", + "4\t0\t0", + "5\t0\t0", + "6\t0\t0", + "7\t0\t0", + "8\t0\t0", + "9\t0\t0", + "10\t0\t0", + "11\t0\t0", + "12\t0\t0", + "13\t0\t0", + "14\t0\t5", + "15\t0\t0", + "16\t0\t0", + "17\t0\t0", + "18\t0\t0", + "19\t0\t0", + "20\t0\t0", + "21\t0\t1", + "22\t0\t0", + "23\t0\t0", + "24\t0\t0", + "25\t0\t0", + "26\t0\t0", + "27\t0\t0", + "28\t0\t0", + "29\t0\t0", + "30\t0\t0", + "31\t0\t0", + "32\t0\t1", + "33\t0\t0", + "34\t0\t0", + "35\t0\t0", + "36\t0\t3", + "37\t0\t0", + "38\t0\t0", + "39\t0\t0", + "40\t0\t0", + "41\t0\t0", + "42\t0\t0", + "43\t0\t0", + "44\t0\t0", + "45\t0\t0", + "46\t0\t0", + "47\t0\t0", + "48\t0\t0", + "49\t0\t0", + "50\t0\t0", + "51\t0\t0", + "52\t0\t0", + "53\t0\t0", + "54\t0\t0", + "55\t0\t0", + "56\t0\t0", + "57\t0\t0", + "58\t0\t0", + "59\t0\t0", + "60\t0\t0", + "61\t0\t0", + "62\t0\t0", + "63\t0\t0", + "64\t0\t0", + "65\t0\t0", + "66\t0\t0", + "67\t0\t0", + "68\t0\t0", + "69\t0\t0", + "70\t0\t0", + "71\t0\t0", + "72\t0\t0", + "73\t0\t0", + "74\t0\t0", + "75\t0\t0", + "76\t0\t0", + "77\t0\t0", + "78\t0\t0", + "79\t0\t0", + "80\t0\t0", + "81\t0\t0", + "82\t0\t0", + "83\t0\t0", + "84\t0\t0", + "85\t0\t0", + "86\t0\t0", + "87\t0\t0", + "88\t0\t0", + "89\t0\t0" + ], + [ + "versions.yml:md5,e390b048af294086f56621c38ebde05a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-10T09:45:16.117386245" + }, + "sarscov2 - bam - bed": { + "content": [ + "test.CollectHsMetrics.coverage_metrics", + 3595, + [ + "## htsjdk.samtools.metrics.StringHeader", + "# CollectHsMetrics --BAIT_INTERVALS baits/baits.interval_list --TARGET_INTERVALS targets/test.interval_list --INPUT test.paired_end.sorted.bam --OUTPUT test.CollectHsMetrics.coverage_metrics --REFERENCE_SEQUENCE genome.fasta --METRIC_ACCUMULATION_LEVEL ALL_READS --NEAR_DISTANCE 250 --MINIMUM_MAPPING_QUALITY 20 --MINIMUM_BASE_QUALITY 20 --CLIP_OVERLAPPING_READS true --INCLUDE_INDELS false --COVERAGE_CAP 200 --SAMPLE_SIZE 10000 --ALLELE_FRACTION 0.001 --ALLELE_FRACTION 0.005 --ALLELE_FRACTION 0.01 --ALLELE_FRACTION 0.02 --ALLELE_FRACTION 0.05 --ALLELE_FRACTION 0.1 --ALLELE_FRACTION 0.2 --ALLELE_FRACTION 0.3 --ALLELE_FRACTION 0.5 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "## htsjdk.samtools.metrics.StringHeader", + "", + "## METRICS CLASS\tpicard.analysis.directed.HsMetrics", + "BAIT_SET\tBAIT_TERRITORY\tBAIT_DESIGN_EFFICIENCY\tON_BAIT_BASES\tNEAR_BAIT_BASES\tOFF_BAIT_BASES\tPCT_SELECTED_BASES\tPCT_OFF_BAIT\tON_BAIT_VS_SELECTED\tMEAN_BAIT_COVERAGE\tPCT_USABLE_BASES_ON_BAIT\tPCT_USABLE_BASES_ON_TARGET\tFOLD_ENRICHMENT\tHS_LIBRARY_SIZE\tHS_PENALTY_10X\tHS_PENALTY_20X\tHS_PENALTY_30X\tHS_PENALTY_40X\tHS_PENALTY_50X\tHS_PENALTY_100X\tTARGET_TERRITORY\tGENOME_SIZE\tTOTAL_READS\tPF_READS\tPF_BASES\tPF_UNIQUE_READS\tPF_UQ_READS_ALIGNED\tPF_BASES_ALIGNED\tPF_UQ_BASES_ALIGNED\tON_TARGET_BASES\tPCT_PF_READS\tPCT_PF_UQ_READS\tPCT_PF_UQ_READS_ALIGNED\tMEAN_TARGET_COVERAGE\tMEDIAN_TARGET_COVERAGE\tMAX_TARGET_COVERAGE\tMIN_TARGET_COVERAGE\tZERO_CVG_TARGETS_PCT\tPCT_EXC_DUPE\tPCT_EXC_ADAPTER\tPCT_EXC_MAPQ\tPCT_EXC_BASEQ\tPCT_EXC_OVERLAP\tPCT_EXC_OFF_TARGET\tFOLD_80_BASE_PENALTY\tPCT_TARGET_BASES_1X\tPCT_TARGET_BASES_2X\tPCT_TARGET_BASES_10X\tPCT_TARGET_BASES_20X\tPCT_TARGET_BASES_30X\tPCT_TARGET_BASES_40X\tPCT_TARGET_BASES_50X\tPCT_TARGET_BASES_100X\tPCT_TARGET_BASES_250X\tPCT_TARGET_BASES_500X\tPCT_TARGET_BASES_1000X\tPCT_TARGET_BASES_2500X\tPCT_TARGET_BASES_5000X\tPCT_TARGET_BASES_10000X\tPCT_TARGET_BASES_25000X\tPCT_TARGET_BASES_50000X\tPCT_TARGET_BASES_100000X\tAT_DROPOUT\tGC_DROPOUT\tHET_SNP_SENSITIVITY\tHET_SNP_Q\tSAMPLE\tLIBRARY\tREAD_GROUP", + "baits\t158\t0.594937\t725\t3985\t22691\t0.171892\t0.828108\t0.153928\t4.588608\t0.026225\t0.000181\t4.995204\t\t0\t0\t0\t0\t0\t0\t94\t29829\t200\t200\t27645\t200\t197\t27401\t27401\t5\t1\t1\t0.985\t0.053191\t0\t1\t0\t0.75\t0\t0\t0.005438\t0.054487\t0.259516\t0.680377\t?\t0.053191\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t76.595745\t23.404255\t0.015734\t0\t\t\t", + "", + "## HISTOGRAM\tjava.lang.Integer", + "coverage_or_base_quality\thigh_quality_coverage_count\tunfiltered_baseq_count", + "0\t89\t0", + "1\t5\t0", + "2\t0\t0", + "3\t0\t0", + "4\t0\t0", + "5\t0\t0", + "6\t0\t0", + "7\t0\t0", + "8\t0\t0", + "9\t0\t0", + "10\t0\t0", + "11\t0\t0", + "12\t0\t0", + "13\t0\t0", + "14\t0\t5", + "15\t0\t0", + "16\t0\t0", + "17\t0\t0", + "18\t0\t0", + "19\t0\t0", + "20\t0\t0", + "21\t0\t1", + "22\t0\t0", + "23\t0\t0", + "24\t0\t0", + "25\t0\t0", + "26\t0\t0", + "27\t0\t0", + "28\t0\t0", + "29\t0\t0", + "30\t0\t0", + "31\t0\t0", + "32\t0\t1", + "33\t0\t0", + "34\t0\t0", + "35\t0\t0", + "36\t0\t3", + "37\t0\t0", + "38\t0\t0", + "39\t0\t0", + "40\t0\t0", + "41\t0\t0", + "42\t0\t0", + "43\t0\t0", + "44\t0\t0", + "45\t0\t0", + "46\t0\t0", + "47\t0\t0", + "48\t0\t0", + "49\t0\t0", + "50\t0\t0", + "51\t0\t0", + "52\t0\t0", + "53\t0\t0", + "54\t0\t0", + "55\t0\t0", + "56\t0\t0", + "57\t0\t0", + "58\t0\t0", + "59\t0\t0", + "60\t0\t0", + "61\t0\t0", + "62\t0\t0", + "63\t0\t0", + "64\t0\t0", + "65\t0\t0", + "66\t0\t0", + "67\t0\t0", + "68\t0\t0", + "69\t0\t0", + "70\t0\t0", + "71\t0\t0", + "72\t0\t0", + "73\t0\t0", + "74\t0\t0", + "75\t0\t0", + "76\t0\t0", + "77\t0\t0", + "78\t0\t0", + "79\t0\t0", + "80\t0\t0", + "81\t0\t0", + "82\t0\t0", + "83\t0\t0", + "84\t0\t0", + "85\t0\t0", + "86\t0\t0", + "87\t0\t0", + "88\t0\t0", + "89\t0\t0" + ], + [ + "versions.yml:md5,e390b048af294086f56621c38ebde05a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-10T09:46:13.489487836" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collecthsmetrics/tests/tags.yml b/modules/nf-core/picard/collecthsmetrics/tests/tags.yml new file mode 100644 index 00000000..b353f95e --- /dev/null +++ b/modules/nf-core/picard/collecthsmetrics/tests/tags.yml @@ -0,0 +1,2 @@ +picard/collecthsmetrics: + - "modules/nf-core/picard/collecthsmetrics/**" diff --git a/modules/nf-core/picard/collectmultiplemetrics/environment.yml b/modules/nf-core/picard/collectmultiplemetrics/environment.yml index 79b33280..ff4a85ed 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/environment.yml +++ b/modules/nf-core/picard/collectmultiplemetrics/environment.yml @@ -1,7 +1,5 @@ -name: picard_collectmultiplemetrics channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 5640ce94..c5555871 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTMULTIPLEMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta) , path(bam), path(bai) diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml index 67bba57b..2b7981ac 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml @@ -15,55 +15,64 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: SAM/BAM/CRAM file - pattern: "*.{sam,bam,cram}" - - bai: - type: file - description: Optional SAM/BAM/CRAM file index - pattern: "*.{sai,bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - fasta: - type: file - description: Genome fasta file - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome'] - - fai: - type: file - description: Index of FASTA file. Only needed when fasta is supplied. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: SAM/BAM/CRAM file + pattern: "*.{sam,bam,cram}" + - bai: + type: file + description: Optional SAM/BAM/CRAM file index + pattern: "*.{sai,bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fasta: + type: file + description: Genome fasta file + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome'] + - fai: + type: file + description: Index of FASTA file. Only needed when fasta is supplied. + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" - pdf: - type: file - description: PDF plots of metrics - pattern: "*.{pdf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.pdf": + type: file + description: PDF plots of metrics + pattern: "*.{pdf}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" maintainers: diff --git a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test new file mode 100644 index 00000000..5b67774f --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test @@ -0,0 +1,112 @@ + +nextflow_process { + + name "Test Process PICARD_COLLECTMULTIPLEMETRICS" + script "../main.nf" + process "PICARD_COLLECTMULTIPLEMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectmultiplemetrics" + + test("test-picard-collectmultiplemetrics") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [[id:'genome'],[]] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.metrics[0][1].collect { file(it).name }.toSorted(), + process.out.pdf[0][1].collect { file(it).name }.toSorted(), + process.out.versions + ).match() + } + ) + } + } + + test("test-picard-collectmultiplemetrics-nofasta") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [[id:'genome'],[]] + input[2] = [[id:'genome'],[]] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.metrics[0][1].collect { file(it).name }.toSorted(), + process.out.pdf[0][1].collect { file(it).name }.toSorted(), + process.out.versions + ).match() + } + ) + } + } + + test("test-picard-collectmultiplemetrics-cram") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.metrics[0][1].collect { file(it).name }.toSorted(), + process.out.pdf[0][1].collect { file(it).name }.toSorted(), + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap new file mode 100644 index 00000000..1859541b --- /dev/null +++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap @@ -0,0 +1,80 @@ +{ + "test-picard-collectmultiplemetrics": { + "content": [ + [ + "test.CollectMultipleMetrics.alignment_summary_metrics", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "test.CollectMultipleMetrics.insert_size_metrics", + "test.CollectMultipleMetrics.quality_by_cycle_metrics", + "test.CollectMultipleMetrics.quality_distribution_metrics" + ], + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "test.CollectMultipleMetrics.insert_size_histogram.pdf", + "test.CollectMultipleMetrics.quality_by_cycle.pdf", + "test.CollectMultipleMetrics.quality_distribution.pdf", + "test.CollectMultipleMetrics.read_length_histogram.pdf" + ], + [ + "versions.yml:md5,b68b83e8dd0f9360453213acad639338" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T10:03:36.631174" + }, + "test-picard-collectmultiplemetrics-cram": { + "content": [ + [ + "test.CollectMultipleMetrics.alignment_summary_metrics", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "test.CollectMultipleMetrics.insert_size_metrics", + "test.CollectMultipleMetrics.quality_by_cycle_metrics", + "test.CollectMultipleMetrics.quality_distribution_metrics" + ], + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "test.CollectMultipleMetrics.insert_size_histogram.pdf", + "test.CollectMultipleMetrics.quality_by_cycle.pdf", + "test.CollectMultipleMetrics.quality_distribution.pdf", + "test.CollectMultipleMetrics.read_length_histogram.pdf" + ], + [ + "versions.yml:md5,b68b83e8dd0f9360453213acad639338" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T10:04:13.955902" + }, + "test-picard-collectmultiplemetrics-nofasta": { + "content": [ + [ + "test.CollectMultipleMetrics.alignment_summary_metrics", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics", + "test.CollectMultipleMetrics.insert_size_metrics", + "test.CollectMultipleMetrics.quality_by_cycle_metrics", + "test.CollectMultipleMetrics.quality_distribution_metrics" + ], + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf", + "test.CollectMultipleMetrics.insert_size_histogram.pdf", + "test.CollectMultipleMetrics.quality_by_cycle.pdf", + "test.CollectMultipleMetrics.quality_distribution.pdf", + "test.CollectMultipleMetrics.read_length_histogram.pdf" + ], + [ + "versions.yml:md5,b68b83e8dd0f9360453213acad639338" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T10:03:54.707587" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml index 6a0b9258..58d52581 100644 --- a/modules/nf-core/picard/collectwgsmetrics/environment.yml +++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml @@ -1,8 +1,6 @@ -name: picard_collectwgsmetrics channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 - r::r-base diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 35f4129c..6002a7ca 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -4,8 +4,8 @@ process PICARD_COLLECTWGSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index 5576ef92..bb748080 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -1,5 +1,6 @@ name: picard_collectwgsmetrics -description: Collect metrics about coverage and performance of whole genome sequencing (WGS) experiments. +description: Collect metrics about coverage and performance of whole genome sequencing + (WGS) experiments. keywords: - alignment - metrics @@ -14,55 +15,59 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: Aligned reads file - pattern: "*.{bam, cram}" - - bai: - type: file - description: (Optional) Aligned reads file index - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta,fna}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Genome fasta file index - pattern: "*.{fai}" - - intervallist: - type: file - description: Picard Interval List. Defines which contigs to include. Can be generated from a BED file with GATK BedToIntervalList. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Aligned reads file + pattern: "*.{bam, cram}" + - bai: + type: file + description: (Optional) Aligned reads file index + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta,fna}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Genome fasta file index + pattern: "*.{fai}" + - - intervallist: + type: file + description: Picard Interval List. Defines which contigs to include. Can be + generated from a BED file with GATK BedToIntervalList. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - metrics: - type: file - description: Alignment metrics files generated by picard - pattern: "*_{metrics}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_metrics": + type: file + description: Alignment metrics files generated by picard + pattern: "*_{metrics}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@flowuenne" diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test new file mode 100644 index 00000000..a3984566 --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test @@ -0,0 +1,83 @@ + +nextflow_process { + + name "Test Process PICARD_COLLECTWGSMETRICS" + script "../main.nf" + process "PICARD_COLLECTWGSMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/collectwgsmetrics" + + test("test-picard-collectwgsmetrics") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), + process.out.versions + ).match() + } + ) + } + } + + test("test-picard-collectwgsmetrics-with-interval") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap new file mode 100644 index 00000000..f188382b --- /dev/null +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap @@ -0,0 +1,28 @@ +{ + "test-picard-collectwgsmetrics-with-interval": { + "content": [ + true, + [ + "versions.yml:md5,06b5898fb06823b736c90e1dcebe75fe" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:02:46.301176" + }, + "test-picard-collectwgsmetrics": { + "content": [ + true, + [ + "versions.yml:md5,06b5898fb06823b736c90e1dcebe75fe" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-23T11:02:25.132069" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/liftovervcf/environment.yml b/modules/nf-core/picard/liftovervcf/environment.yml index e953ec95..ff4a85ed 100644 --- a/modules/nf-core/picard/liftovervcf/environment.yml +++ b/modules/nf-core/picard/liftovervcf/environment.yml @@ -1,7 +1,5 @@ -name: picard_liftovervcf channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf index ab7212a1..a4b27c88 100644 --- a/modules/nf-core/picard/liftovervcf/main.nf +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -4,8 +4,8 @@ process PICARD_LIFTOVERVCF { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(input_vcf) @@ -50,8 +50,8 @@ process PICARD_LIFTOVERVCF { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.lifted.vcf.gz - touch ${prefix}.unlifted.vcf.gz + echo | gzip > ${prefix}.lifted.vcf.gz + echo | gzip > ${prefix}.unlifted.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/picard/liftovervcf/meta.yml b/modules/nf-core/picard/liftovervcf/meta.yml index 9ccba6d2..10fbfc83 100644 --- a/modules/nf-core/picard/liftovervcf/meta.yml +++ b/modules/nf-core/picard/liftovervcf/meta.yml @@ -11,56 +11,66 @@ tools: documentation: https://gatk.broadinstitute.org/hc/en-us/articles/360037060932-LiftoverVcf-Picard tool_dev_url: https://github.com/broadinstitute/picard licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - input_vcf: - 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: 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 + - - meta: + type: map + description: Groovy Map containing sample information e.g. [ id:'test', single_end:false + ] + - input_vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: dictionary for fasta file + pattern: "*.{dict}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: fasta file + pattern: "*.fasta" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - chain: + type: file + description: The liftover chain file 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_lifted: - type: file - description: VCF file containing successfully lifted variants - pattern: "*.{lifted.vcf.gz}" + - meta: + type: map + description: Groovy Map containing sample information e.g. [ id:'test', single_end:false + ] + - "*.lifted.vcf.gz": + type: file + description: VCF file containing successfully lifted variants + pattern: "*.{lifted.vcf.gz}" - vcf_unlifted: - type: file - description: VCF file containing unsuccessfully lifted variants - pattern: "*.{unlifted.vcf.gz}" + - meta: + type: map + description: Groovy Map containing sample information e.g. [ id:'test', single_end:false + ] + - "*.unlifted.vcf.gz": + type: file + description: VCF file containing unsuccessfully lifted variants + pattern: "*.{unlifted.vcf.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@lucpen" - "@ramprasadn" diff --git a/modules/nf-core/picard/liftovervcf/tests/main.nf.test b/modules/nf-core/picard/liftovervcf/tests/main.nf.test new file mode 100644 index 00000000..7b42102d --- /dev/null +++ b/modules/nf-core/picard/liftovervcf/tests/main.nf.test @@ -0,0 +1,84 @@ + +nextflow_process { + + name "Test Process PICARD_LIFTOVERVCF" + script "../main.nf" + process "PICARD_LIFTOVERVCF" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/liftovervcf" + + test("test-picard-liftovervcf") { + + when { + process { + """ + input[0] = [ [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true) + ] + input[1] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[3] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.chain.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf_lifted[0][1]).vcf.summary, + path(process.out.vcf_unlifted[0][1]).vcf.variantsMD5, + process.out.versions + ).match() + } + ) + } + } + + test("test-picard-liftovervcf-stubs") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true) + ] + input[1] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[3] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.chain.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.vcf_lifted[0][1]).name, + file(process.out.vcf_unlifted[0][1]).name, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/picard/liftovervcf/tests/main.nf.test.snap b/modules/nf-core/picard/liftovervcf/tests/main.nf.test.snap new file mode 100644 index 00000000..585ea369 --- /dev/null +++ b/modules/nf-core/picard/liftovervcf/tests/main.nf.test.snap @@ -0,0 +1,30 @@ +{ + "test-picard-liftovervcf-stubs": { + "content": [ + "test.lifted.vcf.gz", + "test.unlifted.vcf.gz", + [ + "versions.yml:md5,e1aaacb3c05a0d822f7abdcf3a55fa91" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T09:38:05.840798" + }, + "test-picard-liftovervcf": { + "content": [ + "VcfFile [chromosomes=[], sampleCount=1, variantCount=0, phased=true, phasedAutodetect=true]", + "39a9de5185d94289283bd27cfcdeba97", + [ + "versions.yml:md5,e1aaacb3c05a0d822f7abdcf3a55fa91" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T09:41:33.022998" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/liftovervcf/tests/nextflow.config b/modules/nf-core/picard/liftovervcf/tests/nextflow.config new file mode 100644 index 00000000..d89d7865 --- /dev/null +++ b/modules/nf-core/picard/liftovervcf/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = "--WARN_ON_MISSING_CONTIG true" +} diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml index 58b795f5..ff4a85ed 100644 --- a/modules/nf-core/picard/markduplicates/environment.yml +++ b/modules/nf-core/picard/markduplicates/environment.yml @@ -1,7 +1,5 @@ -name: picard_markduplicates channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index ad0b2963..cf18ac35 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -4,8 +4,8 @@ process PICARD_MARKDUPLICATES { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 1f0ffe16..bcaf9160 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -15,60 +15,82 @@ tools: homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: Sequence reads file, can be SAM/BAM/CRAM format - 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, required for CRAM input - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Reference genome fasta index - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Sequence reads file, can be SAM/BAM/CRAM format + 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, required for CRAM input + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Reference genome fasta index + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: BAM file with duplicate reads marked/removed - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" - bai: - type: file - description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: An optional BAM index file. If desired, --CREATE_INDEX must be + passed as a flag + pattern: "*.{bai}" - cram: - type: file - description: Output CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file + pattern: "*.{cram}" - metrics: - type: file - description: Duplicate metrics file generated by picard - pattern: "*.{metrics.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.metrics.txt": + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@projectoriented" diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test index e3e97f6c..9ed90965 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -27,9 +27,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("unsorted_bam_name") }, - { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("unsorted_bam_metrics") }, - { assert snapshot(process.out.versions).match("unsorted_bam_versions") } + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions) + .match() } ) } } @@ -52,9 +54,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("sorted_bam_name") }, - { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("sorted_bam_metrics") }, - { assert snapshot(process.out.versions).match("sorted_bam_versions") } + { assert snapshot( + file(process.out.bam[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions) + .match() } ) } } @@ -83,9 +87,86 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.cram[0][1]).name).match("cram_name") }, - { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("cram_metrics") }, - { assert snapshot(process.out.versions).match("cram_versions") } + { assert snapshot( + file(process.out.cram[0][1]).name, + path(process.out.metrics.get(0).get(1)).readLines()[0..2], + process.out.versions) + .match() } + ) + } + } + + test("sarscov2 [unsorted bam] - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 [sorted bam] - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens [cram] - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap index eb17111e..8b37e65b 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -1,110 +1,251 @@ { - "sorted_bam_versions": { + "sarscov2 [sorted bam] - stub": { "content": [ - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" + ], + "bai": [ + + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T15:31:50.928021" + "timestamp": "2024-07-22T11:56:32.025869" }, - "unsorted_bam_name": { + "sarscov2 [unsorted bam] - stub": { "content": [ - "test.marked.bam" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" + ], + "bai": [ + + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-19T10:26:28.100755" + "timestamp": "2024-07-22T11:56:20.497105" }, - "cram_metrics": { + "sarscov2 [unsorted bam]": { "content": [ + "test.marked.bam", [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-03-20T15:25:47.518152" + "timestamp": "2024-07-22T11:50:14.881666" }, - "sorted_bam_metrics": { + "sarscov2 [sorted bam]": { "content": [ + "test.marked.bam", [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-21T11:39:10.318331" - }, - "cram_name": { - "content": [ - "test.marked.cram" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T15:25:47.459663" - }, - "cram_versions": { - "content": [ + ], [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-19T10:27:03.26989" + "timestamp": "2024-07-22T11:52:03.11428" }, - "unsorted_bam_versions": { - "content": [ - [ - "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T15:31:24.040403" - }, - "unsorted_bam_metrics": { + "homo_sapiens [cram]": { "content": [ + "test.marked.cram", [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_DUP_STRATEGY FLOW_QUALITY_SUM_STRATEGY --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --UNPAIRED_START_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" + ], + [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-03-21T10:51:12.831787" + "timestamp": "2024-07-22T11:53:05.403139" }, - "sorted_bam_name": { + "homo_sapiens [cram] - stub": { "content": [ - "test.marked.bam" + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" + ], + "bai": [ + + ], + "bam": [ + + ], + "cram": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.marked.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,33dd4b32140e801e0d2e50aeefd0788d" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.3" }, - "timestamp": "2024-01-19T10:26:45.080116" + "timestamp": "2024-07-22T11:56:43.438188" } } \ No newline at end of file diff --git a/modules/nf-core/picard/renamesampleinvcf/environment.yml b/modules/nf-core/picard/renamesampleinvcf/environment.yml index 3e7d8eb5..ff4a85ed 100644 --- a/modules/nf-core/picard/renamesampleinvcf/environment.yml +++ b/modules/nf-core/picard/renamesampleinvcf/environment.yml @@ -1,7 +1,5 @@ -name: picard_renamesampleinvcf channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf index d44b1829..3e4f38ca 100644 --- a/modules/nf-core/picard/renamesampleinvcf/main.nf +++ b/modules/nf-core/picard/renamesampleinvcf/main.nf @@ -5,8 +5,8 @@ process PICARD_RENAMESAMPLEINVCF { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/picard/renamesampleinvcf/meta.yml b/modules/nf-core/picard/renamesampleinvcf/meta.yml index 528002d0..7c279fe1 100644 --- a/modules/nf-core/picard/renamesampleinvcf/meta.yml +++ b/modules/nf-core/picard/renamesampleinvcf/meta.yml @@ -13,30 +13,33 @@ tools: documentation: https://broadinstitute.github.io/picard/ tool_dev_url: "https://github.com/broadinstitute/picard" licence: ["MIT"] + identifier: biotools:picard_tools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF file - pattern: "*.{vcf,vcf.gz}" + - - 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" - vcf: - type: file - description: VCF file - pattern: "*.{vcf,vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf.gz": + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Lucpen" maintainers: diff --git a/modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test b/modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test new file mode 100644 index 00000000..f755447f --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test @@ -0,0 +1,38 @@ + +nextflow_process { + + name "Test Process PICARD_RENAMESAMPLEINVCF" + script "../main.nf" + process "PICARD_RENAMESAMPLEINVCF" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/renamesampleinvcf" + + test("test-picard-renamesampleinvcf") { + + when { + process { + """ + input[0] = [ [ id:'test' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf[0][1]).vcf.variantsMD5, + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test.snap b/modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test.snap new file mode 100644 index 00000000..a9bf7b7b --- /dev/null +++ b/modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test.snap @@ -0,0 +1,15 @@ +{ + "test-picard-renamesampleinvcf": { + "content": [ + "e21a2349f41663d1fc38f47fbe65a6d5", + [ + "versions.yml:md5,d4de734264e0c3b33d23e4a40de26a5f" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T09:32:02.18878" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/sortvcf/environment.yml b/modules/nf-core/picard/sortvcf/environment.yml index f1dbb6b9..ff4a85ed 100644 --- a/modules/nf-core/picard/sortvcf/environment.yml +++ b/modules/nf-core/picard/sortvcf/environment.yml @@ -1,7 +1,5 @@ -name: picard_sortvcf channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::picard=3.1.1 + - bioconda::picard=3.2.0 diff --git a/modules/nf-core/picard/sortvcf/main.nf b/modules/nf-core/picard/sortvcf/main.nf index 5359caae..7133c13a 100644 --- a/modules/nf-core/picard/sortvcf/main.nf +++ b/modules/nf-core/picard/sortvcf/main.nf @@ -4,8 +4,8 @@ process PICARD_SORTVCF { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' : - 'biocontainers/picard:3.1.1--hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/picard:3.2.0--hdfd78af_0' : + 'biocontainers/picard:3.2.0--hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/picard/sortvcf/meta.yml b/modules/nf-core/picard/sortvcf/meta.yml index 62507a08..6dc28e03 100644 --- a/modules/nf-core/picard/sortvcf/meta.yml +++ b/modules/nf-core/picard/sortvcf/meta.yml @@ -6,52 +6,56 @@ keywords: - sortvcf tools: - picard: - description: Java tools for working with NGS data in the BAM/CRAM/SAM and VCF format + description: Java tools for working with NGS data in the BAM/CRAM/SAM and VCF + format homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/command-line-overview.html#SortVcf licence: ["MIT"] + identifier: biotools:picard_tools input: - - 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}" - - 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}" + - - 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}" + - - 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: - 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: Sorted VCF file - pattern: "*.{vcf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_sorted.vcf.gz": + type: file + description: Sorted VCF file + pattern: "*.{vcf}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/picard/sortvcf/tests/main.nf.test b/modules/nf-core/picard/sortvcf/tests/main.nf.test new file mode 100644 index 00000000..9df73ad4 --- /dev/null +++ b/modules/nf-core/picard/sortvcf/tests/main.nf.test @@ -0,0 +1,44 @@ + +nextflow_process { + + name "Test Process PICARD_SORTVCF" + script "../main.nf" + process "PICARD_SORTVCF" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/sortvcf" + + test("test-picard-sortvcf") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + input[1] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + path(process.out.vcf[0][1]).linesGzip[3..7], + process.out.versions + ).match() + } + ) + } + } + +} diff --git a/modules/nf-core/picard/sortvcf/tests/main.nf.test.snap b/modules/nf-core/picard/sortvcf/tests/main.nf.test.snap new file mode 100644 index 00000000..db80323b --- /dev/null +++ b/modules/nf-core/picard/sortvcf/tests/main.nf.test.snap @@ -0,0 +1,21 @@ +{ + "test-picard-sortvcf": { + "content": [ + [ + "##FILTER=", + "##FORMAT=", + "##FORMAT=", + "##INFO=", + "##INFO=" + ], + [ + "versions.yml:md5,11949a1af95080dcc5bd1c75d68dee71" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T09:20:13.124551" + } +} \ No newline at end of file diff --git a/modules/nf-core/qualimap/bamqc/environment.yml b/modules/nf-core/qualimap/bamqc/environment.yml index 3f30d0cd..4fa5f4e8 100644 --- a/modules/nf-core/qualimap/bamqc/environment.yml +++ b/modules/nf-core/qualimap/bamqc/environment.yml @@ -1,7 +1,5 @@ -name: qualimap_bamqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::qualimap=2.3 diff --git a/modules/nf-core/qualimap/bamqc/meta.yml b/modules/nf-core/qualimap/bamqc/meta.yml index 7756d497..8be33c00 100644 --- a/modules/nf-core/qualimap/bamqc/meta.yml +++ b/modules/nf-core/qualimap/bamqc/meta.yml @@ -15,34 +15,37 @@ tools: documentation: http://qualimap.conesalab.org/doc_html/index.html doi: 10.1093/bioinformatics/bts503 licence: ["GPL-2.0-only"] + identifier: biotools:qualimap input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" - - gff: - type: file - description: Feature file with regions of interest - pattern: "*.{gff,gtf,bed}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" + - - gff: + type: file + description: Feature file with regions of interest + pattern: "*.{gff,gtf,bed}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - results: - type: directory - description: Qualimap results dir - pattern: "*/*" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: directory + description: Qualimap results dir + pattern: "*/*" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@phue" maintainers: diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test b/modules/nf-core/qualimap/bamqc/tests/main.nf.test index ba2260ca..eec1a41a 100644 --- a/modules/nf-core/qualimap/bamqc/tests/main.nf.test +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test @@ -9,11 +9,35 @@ nextflow_process { tag "qualimap/bamqc" test("homo_sapiens [bam]") { - when { - params { - outdir = "$outputDir" + process { + """ + gff = [] + + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + input[1] = gff + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file("${process.out.results[0][1]}/qualimapReport.html").name, + path("${process.out.results[0][1]}/genome_results.txt"), + process.out.versions) + .match() } + ) + } + } + + test("homo_sapiens [bam] - stub") { + options "-stub" + when { process { """ gff = [] @@ -30,9 +54,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert path("${process.out.results[0][1]}/qualimapReport.html").exists() }, - { assert snapshot(path("${process.out.results[0][1]}/genome_results.txt")).match("genome_results") }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap index 25148df2..fb6e23e4 100644 --- a/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap +++ b/modules/nf-core/qualimap/bamqc/tests/main.nf.test.snap @@ -1,16 +1,165 @@ { - "genome_results": { + "homo_sapiens [bam] - stub": { "content": [ - "genome_results.txt:md5,45103d63ba82df2b905eb04819c32dd3" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + "agogo.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "ajax-loader.gif:md5,d41d8cd98f00b204e9800998ecf8427e", + "basic.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgfooter.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgtop.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-bright.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-close.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "doctools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "down-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "down.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "file.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "jquery.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "minus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "plus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "pygments.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_logo_small.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "report.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "searchtools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "underscore.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "up-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "up.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "websupport.js:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "genome_results.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "genome_coverage_0to50_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_quotes.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_gc_content_per_window.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_homopolymer_indels.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_clipping_profile.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_content_per_read_position.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_uniq_read_starts_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "qualimapReport.html:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "coverage_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "coverage_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "duplication_rate_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_fraction_coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "homopolymer_indels.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_clipping_profile.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_gc-content_distribution.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_nucleotide_content.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "1": [ + "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" + ], + "results": [ + [ + { + "id": "test", + "single_end": false + }, + [ + [ + "agogo.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "ajax-loader.gif:md5,d41d8cd98f00b204e9800998ecf8427e", + "basic.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgfooter.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "bgtop.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-bright.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment-close.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "comment.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "doctools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "down-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "down.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "file.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "jquery.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "minus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "plus.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "pygments.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "qualimap_logo_small.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "report.css:md5,d41d8cd98f00b204e9800998ecf8427e", + "searchtools.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "underscore.js:md5,d41d8cd98f00b204e9800998ecf8427e", + "up-pressed.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "up.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "websupport.js:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "genome_results.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "genome_coverage_0to50_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_coverage_quotes.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_gc_content_per_window.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_homopolymer_indels.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_insert_size_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_across_reference.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_mapping_quality_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_clipping_profile.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_reads_content_per_read_position.png:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_uniq_read_starts_histogram.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "qualimapReport.html:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "coverage_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "coverage_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "duplication_rate_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome_fraction_coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "homopolymer_indels.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "insert_size_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_clipping_profile.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_gc-content_distribution.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapped_reads_nucleotide_content.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_across_reference.txt:md5,d41d8cd98f00b204e9800998ecf8427e", + "mapping_quality_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ] + ], + "versions": [ + "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" + ] + } ], - "timestamp": "2024-01-19T12:05:00.122103" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T12:27:15.04081" }, - "versions": { + "homo_sapiens [bam]": { "content": [ + "qualimapReport.html", + "genome_results.txt:md5,45103d63ba82df2b905eb04819c32dd3", [ "versions.yml:md5,9024d7d0a189d8be1485249ae591b907" ] ], - "timestamp": "2024-01-19T12:05:00.131485" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:21:02.541915" } -} +} \ No newline at end of file diff --git a/modules/nf-core/rhocall/annotate/environment.yml b/modules/nf-core/rhocall/annotate/environment.yml index 5a00600f..ba95c3cb 100644 --- a/modules/nf-core/rhocall/annotate/environment.yml +++ b/modules/nf-core/rhocall/annotate/environment.yml @@ -1,7 +1,5 @@ -name: rhocall_annotate channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::rhocall=0.5.1 diff --git a/modules/nf-core/rhocall/annotate/meta.yml b/modules/nf-core/rhocall/annotate/meta.yml index ecc8e1e4..fb041cae 100644 --- a/modules/nf-core/rhocall/annotate/meta.yml +++ b/modules/nf-core/rhocall/annotate/meta.yml @@ -10,48 +10,51 @@ tools: homepage: "https://github.com/dnil/rhocall" documentation: "https://github.com/dnil/rhocall" tool_dev_url: "https://github.com/dnil" - licence: "['GPL v3']" + licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - 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 - pattern: "*.{vcf,vcf.gz}" - - tbi: - type: file - description: vcf index file - pattern: "*.{tbi}" - - roh: - type: file - description: Bcftools roh style TSV file with CHR,POS,AZ,QUAL - pattern: "*.{roh}" - - bed: - type: file - description: BED file with AZ windows. - pattern: "*.{bed}" + - - 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}" + - tbi: + type: file + description: vcf index file + pattern: "*.{tbi}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - roh: + type: file + description: Bcftools roh style TSV file with CHR,POS,AZ,QUAL + pattern: "*.{roh}" + - - bed: + type: file + description: BED file with AZ windows. + pattern: "*.{bed}" output: - - 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}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*_rhocall.vcf": + type: file + description: vcf file + pattern: "*.{vcf,vcf.gz}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/rhocall/viz/environment.yml b/modules/nf-core/rhocall/viz/environment.yml index 6e5b352f..538db509 100644 --- a/modules/nf-core/rhocall/viz/environment.yml +++ b/modules/nf-core/rhocall/viz/environment.yml @@ -1,7 +1,5 @@ -name: "rhocall_viz" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::rhocall=0.5.1" diff --git a/modules/nf-core/rhocall/viz/meta.yml b/modules/nf-core/rhocall/viz/meta.yml index bbcad9ba..7efcab02 100644 --- a/modules/nf-core/rhocall/viz/meta.yml +++ b/modules/nf-core/rhocall/viz/meta.yml @@ -11,41 +11,53 @@ tools: documentation: "https://github.com/dnil/rhocall" tool_dev_url: "https://github.com/dnil" licence: ["GPL v3"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - vcf: - type: file - description: VCF file - pattern: "*.{vcf}" - - roh: - type: file - description: Input RHO file produced from rhocall - pattern: "*.{roh}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - vcf: + type: file + description: VCF file + pattern: "*.{vcf}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - roh: + type: file + description: Input RHO file produced from rhocall + pattern: "*.{roh}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bed: - type: file - description: Bed file containing roh calls - pattern: "*.{bed}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${prefix}/${prefix}.bed: + type: file + description: Bed file containing roh calls + pattern: "*.{bed}" - wig: - type: file - description: Wig file containing roh calls - pattern: "*.{wig}" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - ${prefix}/${prefix}.wig: + type: file + description: Wig file containing roh calls + pattern: "*.{wig}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/rhocall/viz/tests/main.nf.test b/modules/nf-core/rhocall/viz/tests/main.nf.test index 094e7d07..d2661e01 100644 --- a/modules/nf-core/rhocall/viz/tests/main.nf.test +++ b/modules/nf-core/rhocall/viz/tests/main.nf.test @@ -21,8 +21,8 @@ nextflow_process { process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true)] input[1] = [[],[]] input[2] = [] @@ -37,7 +37,7 @@ nextflow_process { process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true)] + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true)] input[1] = BCFTOOLS_ROH.out.roh """ } diff --git a/modules/nf-core/rtgtools/format/environment.yml b/modules/nf-core/rtgtools/format/environment.yml index 15b3df5b..8aa83cdc 100644 --- a/modules/nf-core/rtgtools/format/environment.yml +++ b/modules/nf-core/rtgtools/format/environment.yml @@ -1,7 +1,5 @@ -name: rtgtools_format channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::rtg-tools=3.12.1 diff --git a/modules/nf-core/rtgtools/format/meta.yml b/modules/nf-core/rtgtools/format/meta.yml index 8ed18f54..e09aff3a 100644 --- a/modules/nf-core/rtgtools/format/meta.yml +++ b/modules/nf-core/rtgtools/format/meta.yml @@ -1,5 +1,6 @@ name: "rtgtools_format" -description: Converts the contents of sequence data files (FASTA/FASTQ/SAM/BAM) into the RTG Sequence Data File (SDF) format. +description: Converts the contents of sequence data files (FASTA/FASTQ/SAM/BAM) into + the RTG Sequence Data File (SDF) format. keywords: - rtg - fasta @@ -8,43 +9,49 @@ keywords: - sam tools: - "rtgtools": - description: "RealTimeGenomics Tools -- Utilities for accurate VCF comparison and manipulation" + description: "RealTimeGenomics Tools -- Utilities for accurate VCF comparison + and manipulation" homepage: "https://www.realtimegenomics.com/products/rtg-tools" documentation: "https://github.com/RealTimeGenomics/rtg-tools" tool_dev_url: "https://github.com/RealTimeGenomics/rtg-tools" - licence: "['BSD']" + licence: ["BSD"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input1: - type: file - description: FASTA, FASTQ, BAM or SAM file. This should be the left input file when using paired end FASTQ/FASTA data - pattern: "*.{fasta,fa,fna,fastq,fastq.gz,fq,fq.gz,bam,sam}" - - input2: - type: file - description: The right input file when using paired end FASTQ/FASTA data - pattern: "*.{fasta,fa,fna,fastq,fastq.gz,fq,fq.gz}" - - sam_rg: - type: file - description: A file containing a single readgroup header as a SAM header. This can also be supplied as a string in `task.ext.args` as `--sam-rg `. - pattern: "*.{txt,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input1: + type: file + description: FASTA, FASTQ, BAM or SAM file. This should be the left input file + when using paired end FASTQ/FASTA data + pattern: "*.{fasta,fa,fna,fastq,fastq.gz,fq,fq.gz,bam,sam}" + - input2: + type: file + description: The right input file when using paired end FASTQ/FASTA data + pattern: "*.{fasta,fa,fna,fastq,fastq.gz,fq,fq.gz}" + - sam_rg: + type: file + description: A file containing a single readgroup header as a SAM header. This + can also be supplied as a string in `task.ext.args` as `--sam-rg `. + pattern: "*.{txt,sam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - sdf: - type: directory - description: The sequence dictionary format folder created from the input file(s) - pattern: "*.sdf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sdf": + type: directory + description: The sequence dictionary format folder created from the input file(s) + pattern: "*.sdf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" maintainers: diff --git a/modules/nf-core/rtgtools/vcfeval/environment.yml b/modules/nf-core/rtgtools/vcfeval/environment.yml index e3c64996..8aa83cdc 100644 --- a/modules/nf-core/rtgtools/vcfeval/environment.yml +++ b/modules/nf-core/rtgtools/vcfeval/environment.yml @@ -1,7 +1,5 @@ -name: rtgtools_vcfeval channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::rtg-tools=3.12.1 diff --git a/modules/nf-core/rtgtools/vcfeval/meta.yml b/modules/nf-core/rtgtools/vcfeval/meta.yml index f67a35c0..9814124e 100644 --- a/modules/nf-core/rtgtools/vcfeval/meta.yml +++ b/modules/nf-core/rtgtools/vcfeval/meta.yml @@ -1,111 +1,196 @@ name: "rtgtools_vcfeval" -description: The VCFeval tool of RTG tools. It is used to evaluate called variants for agreement with a baseline variant set +description: The VCFeval tool of RTG tools. It is used to evaluate called variants + for agreement with a baseline variant set keywords: - benchmarking - vcf - rtg-tools tools: - "rtgtools": - description: "RealTimeGenomics Tools -- Utilities for accurate VCF comparison and manipulation" + description: "RealTimeGenomics Tools -- Utilities for accurate VCF comparison + and manipulation" homepage: "https://www.realtimegenomics.com/products/rtg-tools" documentation: "https://github.com/RealTimeGenomics/rtg-tools" tool_dev_url: "https://github.com/RealTimeGenomics/rtg-tools" - licence: "['BSD']" + licence: ["BSD"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - query_vcf: - type: file - description: A VCF with called variants to benchmark against the standard - pattern: "*.{vcf,vcf.gz}" - - query_vcf_index: - type: file - description: The index of the called VCF (optional) - pattern: "*.tbi" - - truth_vcf: - type: file - description: A standard VCF to compare against - pattern: "*.{vcf,vcf.gz}" - - truth_vcf_index: - type: file - description: The index of the standard VCF (optional) - pattern: "*.tbi" - - truth_bed: - type: file - description: A BED file containining the strict regions where VCFeval should only evaluate the fully overlapping variants (optional) - pattern: "*.bed" - - evaluation_bed: - type: file - description: A BED file containing the regions where VCFeval will evaluate every fully and partially overlapping variant (optional) - pattern: "*.bed" - - sdf: - type: file - description: The SDF (RTG Sequence Data File) folder of the reference genome + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - query_vcf: + type: file + description: A VCF with called variants to benchmark against the standard + pattern: "*.{vcf,vcf.gz}" + - query_vcf_tbi: + type: file + description: The index of the VCF file with called variants to benchmark against the standard + pattern: "*.{vcf.gz.tbi, vcf.tbi}" + - truth_vcf: + type: file + description: A standard VCF to compare against + pattern: "*.{vcf,vcf.gz}" + - truth_vcf_tbi: + type: file + description: The index of the standard VCF to compare against + pattern: "*.{vcf.gz.tbi, vcf.tbi}" + - truth_bed: + type: file + description: A BED file containining the strict regions where VCFeval should + only evaluate the fully overlapping variants (optional) + pattern: "*.bed" + - evaluation_bed: + type: file + description: A BED file containing the regions where VCFeval will evaluate every + fully and partially overlapping variant (optional) + pattern: "*.bed" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - sdf: + type: file + description: The SDF (RTG Sequence Data File) folder of the reference genome 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" - tp_vcf: - type: file - description: A VCF file for the true positive variants - pattern: "*.tp.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tp.vcf.gz": + type: file + description: A VCF file for the true positive variants + pattern: "*.tp.vcf.gz" - tp_tbi: - type: file - description: The index of the VCF file for the true positive variants - pattern: "*.tp.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tp.vcf.gz.tbi": + type: file + description: The index of the VCF file for the true positive variants + pattern: "*.tp.vcf.gz.tbi" - fn_vcf: - type: file - description: A VCF file for the false negative variants - pattern: "*.fn.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fn.vcf.gz": + type: file + description: A VCF file for the false negative variants + pattern: "*.fn.vcf.gz" - fn_tbi: - type: file - description: The index of the VCF file for the false negative variants - pattern: "*.fn.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fn.vcf.gz.tbi": + type: file + description: The index of the VCF file for the false negative variants + pattern: "*.fn.vcf.gz.tbi" - fp_vcf: - type: file - description: A VCF file for the false positive variants - pattern: "*.fp.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fp.vcf.gz": + type: file + description: A VCF file for the false positive variants + pattern: "*.fp.vcf.gz" - fp_tbi: - type: file - description: The index of the VCF file for the false positive variants - pattern: "*.fp.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fp.vcf.gz.tbi": + type: file + description: The index of the VCF file for the false positive variants + pattern: "*.fp.vcf.gz.tbi" - baseline_vcf: - type: file - description: A VCF file for the true positive variants from the baseline - pattern: "*.tp-baseline.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tp-baseline.vcf.gz": + type: file + description: A VCF file for the true positive variants from the baseline + pattern: "*.tp-baseline.vcf.gz" - baseline_tbi: - type: file - description: The index of the VCF file for the true positive variants from the baseline - pattern: "*.tp-baseline.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tp-baseline.vcf.gz.tbi": + type: file + description: The index of the VCF file for the true positive variants from the + baseline + pattern: "*.tp-baseline.vcf.gz.tbi" - snp_roc: - type: file - description: TSV files containing ROC data for the SNPs - pattern: "*.snp_roc.tsv.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.snp_roc.tsv.gz": + type: file + description: TSV files containing ROC data for the SNPs + pattern: "*.snp_roc.tsv.gz" - non_snp_roc: - type: file - description: TSV files containing ROC data for all variants except SNPs - pattern: "*.non_snp_roc.tsv.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.non_snp_roc.tsv.gz": + type: file + description: TSV files containing ROC data for all variants except SNPs + pattern: "*.non_snp_roc.tsv.gz" - weighted_roc: - type: file - description: TSV files containing weighted ROC data for all variants - pattern: "*.weighted_snp_roc.tsv.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.weighted_roc.tsv.gz": + type: file + description: TSV files containing weighted ROC data for all variants + pattern: "*.weighted_snp_roc.tsv.gz" - summary: - type: file - description: A TXT file containing the summary of the evaluation - pattern: "*.summary.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.summary.txt": + type: file + description: A TXT file containing the summary of the evaluation + pattern: "*.summary.txt" - phasing: - type: file - description: A TXT file containing the data on the phasing - pattern: "*.phasing.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.phasing.txt": + type: file + description: A TXT file containing the data on the phasing + pattern: "*.phasing.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@nvnieuwk" maintainers: diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 9c24eb0a..62054fc9 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,10 +1,8 @@ -name: samtools_faidx - +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults - dependencies: - - bioconda::htslib=1.19.1 - - bioconda::samtools=1.19.2 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index cfe7ad95..28c0a81c 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_FAIDX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index f3c25de2..6721b2cb 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -14,47 +14,62 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: FASTA file - pattern: "*.{fa,fasta}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: FASTA file + pattern: "*.{fa,fasta}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - fa: - type: file - description: FASTA file - pattern: "*.{fa}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{fa,fasta}": + type: file + description: FASTA file + pattern: "*.{fa}" - fai: - type: file - description: FASTA index file - pattern: "*.{fai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fai": + type: file + description: FASTA index file + pattern: "*.{fai}" - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gzi": + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 3e651ef6..1bbb3ec2 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -18,7 +18,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -36,15 +36,15 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-18T16:22:39.412601" + "timestamp": "2024-09-16T07:57:47.450887871" }, "test_samtools_faidx_bgzip": { "content": [ @@ -71,7 +71,7 @@ ] ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -95,15 +95,15 @@ ] ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-18T16:23:22.427966" + "timestamp": "2024-09-16T07:58:04.804905659" }, "test_samtools_faidx_fasta": { "content": [ @@ -124,7 +124,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ [ @@ -142,15 +142,15 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-18T16:24:04.107537" + "timestamp": "2024-09-16T07:58:23.831268154" }, "test_samtools_faidx_stub_fasta": { "content": [ @@ -171,7 +171,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ [ @@ -189,15 +189,15 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-18T16:24:45.868463" + "timestamp": "2024-09-16T07:58:35.600243706" }, "test_samtools_faidx_stub_fai": { "content": [ @@ -218,7 +218,7 @@ ], "3": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ], "fa": [ @@ -236,14 +236,14 @@ ], "versions": [ - "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + "versions.yml:md5,6bbe80a2e14bd61202ca63e12d66027f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-18T16:25:27.550554" + "timestamp": "2024-09-16T07:58:54.705460167" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index a5e50649..62054fc9 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -1,8 +1,8 @@ -name: samtools_index +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index dc14f98d..31175610 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_INDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input) @@ -35,10 +35,11 @@ process SAMTOOLS_INDEX { """ stub: + def args = task.ext.args ?: '' + def extension = file(input).getExtension() == 'cram' ? + "crai" : args.contains("-c") ? "csi" : "bai" """ - touch ${input}.bai - touch ${input}.crai - touch ${input}.csi + touch ${input}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index 01a4ee03..db8df0d5 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -15,38 +15,52 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: input file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - - crai: - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - csi: - type: file - description: CSI index file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: CSI index file + pattern: "*.{csi}" + - crai: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index bb7756d1..ca34fb5c 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -9,11 +9,7 @@ nextflow_process { tag "samtools/index" test("bai") { - when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -27,18 +23,13 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.bai).match("bai") }, - { assert snapshot(process.out.versions).match("bai_versions") } + { assert snapshot(process.out).match() } ) } } test("crai") { - when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -52,20 +43,83 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.crai).match("crai") }, - { assert snapshot(process.out.versions).match("crai_versions") } + { assert snapshot(process.out).match() } ) } } test("csi") { - config "./csi.nextflow.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + file(process.out.csi[0][1]).name, + process.out.versions + ).match() } + ) + } + } + + test("bai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("crai - stub") { + options "-stub" + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("csi - stub") { + options "-stub" + config "./csi.nextflow.config" + + when { process { """ input[0] = Channel.of([ @@ -79,8 +133,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert path(process.out.csi.get(0).get(1)).exists() }, - { assert snapshot(process.out.versions).match("csi_versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index 3dc8e7de..72d65e81 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -1,74 +1,250 @@ { - "crai_versions": { + "csi - stub": { "content": [ - [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:12:00.324667957" + "timestamp": "2024-09-16T08:21:25.261127166" }, - "csi_versions": { + "crai - stub": { "content": [ - [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:12:07.885103162" + "timestamp": "2024-09-16T08:21:12.653194876" }, - "crai": { + "bai - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] - ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-12T18:41:38.446424" + "timestamp": "2024-09-16T08:21:01.854932651" }, - "bai": { + "csi": { "content": [ + "test.paired_end.sorted.bam.csi", [ - [ - { - "id": "test", - "single_end": false - }, - "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" - ] + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-12T18:40:46.579747" + "timestamp": "2024-09-16T08:20:51.485364222" }, - "bai_versions": { + "crai": { "content": [ - [ - "versions.yml:md5,cc4370091670b64bba7c7206403ffb3e" - ] + { + "0": [ + + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029" + ] + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:20:40.518873972" + }, + "bai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ], + "bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4" + ] + ], + "crai": [ + + ], + "csi": [ + + ], + "versions": [ + "versions.yml:md5,5e09a6fdf76de396728f877193d72315" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:11:51.641425452" + "timestamp": "2024-09-16T08:20:21.184050361" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml index fc669b1b..62054fc9 100644 --- a/modules/nf-core/samtools/merge/environment.yml +++ b/modules/nf-core/samtools/merge/environment.yml @@ -1,8 +1,8 @@ -name: samtools_merge +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index a3048c28..34da4c7c 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_MERGE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 2e8f3dbb..235aa219 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -15,60 +15,81 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input_files: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: Index of the reference file the CRAM was created with (optional) - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input_files: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: Index of the reference file the CRAM was created with (optional) + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: BAM file + pattern: "*.{bam}" - cram: - type: file - description: CRAM file - pattern: "*.{cram}" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: CRAM file + pattern: "*.{cram}" - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" - crai: - type: file - description: CRAM index file (optional) - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@yuukiiwa " diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap index f7da7699..0a41e01a 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -80,14 +80,14 @@ "bam_versions": { "content": [ [ - "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:16:33.782637377" + "timestamp": "2024-09-16T09:16:30.476887194" }, "bams_csi": { "content": [ @@ -124,14 +124,14 @@ "bams_stub_versions": { "content": [ [ - "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:16:42.594476052" + "timestamp": "2024-09-16T09:16:52.203823961" }, "bam_cram": { "content": [ @@ -158,14 +158,14 @@ "bams_versions": { "content": [ [ - "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:16:04.805335656" + "timestamp": "2024-09-16T08:29:57.524363148" }, "crams_bam": { "content": [ @@ -182,14 +182,14 @@ "crams_versions": { "content": [ [ - "versions.yml:md5,52c62d4712f7af00eb962d090ca32fe4" + "versions.yml:md5,d51d18a97513e370e43f0c891c51dfc4" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:16:25.889394689" + "timestamp": "2024-09-16T09:16:06.977096207" }, "bam_csi": { "content": [ diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml index 4d898e48..62054fc9 100644 --- a/modules/nf-core/samtools/sort/environment.yml +++ b/modules/nf-core/samtools/sort/environment.yml @@ -1,8 +1,8 @@ -name: samtools_sort +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index fc374f98..acfd9252 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta) , path(bam) @@ -32,7 +32,6 @@ process SAMTOOLS_SORT { """ samtools cat \\ - --threads $task.cpus \\ ${bam} \\ | \\ samtools sort \\ @@ -50,10 +49,20 @@ process SAMTOOLS_SORT { """ stub: + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" """ - touch ${prefix}.bam - touch ${prefix}.bam.csi + touch ${prefix}.${extension} + if [ "${extension}" == "bam" ]; + then + touch ${prefix}.${extension}.csi + elif [ "${extension}" == "cram" ]; + then + touch ${prefix}.${extension}.crai + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 341a7d0e..a9dbec5a 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -15,52 +15,73 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM/SAM file(s) - pattern: "*.{bam,cram,sam}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference genome FASTA file - pattern: "*.{fa,fasta,fna}" - optional: true + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file(s) + pattern: "*.{bam,cram,sam}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: Sorted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Sorted BAM file + pattern: "*.{bam}" - cram: - type: file - description: Sorted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Sorted CRAM file + pattern: "*.{cram}" - crai: - type: file - description: CRAM index file (optional) - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file (optional) + pattern: "*.crai" - csi: - type: file - description: BAM index file (optional) - pattern: "*.csi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: BAM index file (optional) + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index 8360e2b1..c2ea9c72 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -30,13 +30,49 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + process.out.bam, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} ) } } test("cram") { + config "./nextflow_cram.config" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ]) + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot( + process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" config "./nextflow.config" when { @@ -62,24 +98,21 @@ nextflow_process { } } - test("bam_stub") { + test("cram - stub") { - config "./nextflow.config" options "-stub" + config "./nextflow_cram.config" when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) ]) input[1] = Channel.of([ [ id:'fasta' ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ]) """ } @@ -88,8 +121,7 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("bam_stub_bam") }, - { assert snapshot(process.out.versions).match("bam_stub_versions") } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index 38477656..2d6b2900 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,5 +1,35 @@ { "cram": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.cram.crai" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:49:58.207549273" + }, + "bam - stub": { "content": [ { "0": [ @@ -8,7 +38,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -23,11 +53,11 @@ "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "4": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ], "bam": [ [ @@ -35,7 +65,7 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "crai": [ @@ -50,105 +80,113 @@ "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-04T15:08:00.830294" - }, - "bam_stub_bam": { - "content": [ - "test.sorted.bam" - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.04.3" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-12T19:21:04.364044" + "timestamp": "2024-09-16T08:50:08.630951018" }, - "bam_stub_versions": { - "content": [ - [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" - }, - "timestamp": "2024-02-13T16:15:00.20800281" - }, - "bam": { + "cram - stub": { "content": [ { "0": [ + + ], + "1": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "1": [ - ], "2": [ - - ], - "3": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] + ], + "3": [ + ], "4": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ], "bam": [ + + ], + "crai": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "crai": [ - ], "cram": [ - - ], - "csi": [ [ { "id": "test", "single_end": false }, - "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e" ] + ], + "csi": [ + ], "versions": [ - "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + "versions.yml:md5,2659b187d681241451539d4c53500b9f" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T08:50:19.061912443" + }, + "bam": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi" + ] + ], + [ + "versions.yml:md5,2659b187d681241451539d4c53500b9f" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-04T15:07:48.773803" + "timestamp": "2024-09-16T08:49:43.971158333" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow_cram.config b/modules/nf-core/samtools/sort/tests/nextflow_cram.config new file mode 100644 index 00000000..3a8c0188 --- /dev/null +++ b/modules/nf-core/samtools/sort/tests/nextflow_cram.config @@ -0,0 +1,8 @@ +process { + + withName: SAMTOOLS_SORT { + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index --output-fmt cram" + } + +} diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index 67bb0ca4..62054fc9 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -1,8 +1,8 @@ -name: samtools_stats +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 52b00f4b..493525a9 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_STATS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 735ff812..77b020f7 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -16,43 +16,46 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file from alignment - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAI/CRAI file from alignment - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file from alignment + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAI/CRAI file from alignment + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - stats: - type: file - description: File containing samtools stats output - pattern: "*.{stats}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.stats": + type: file + description: File containing samtools stats output + pattern: "*.{stats}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@FriederikeHanssen" diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test index e3d5cb14..5bc89309 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -3,6 +3,7 @@ nextflow_process { name "Test Process SAMTOOLS_STATS" script "../main.nf" process "SAMTOOLS_STATS" + tag "modules" tag "modules_nfcore" tag "samtools" @@ -11,9 +12,6 @@ nextflow_process { test("bam") { when { - params { - outdir = "$outputDir" - } process { """ input[0] = Channel.of([ @@ -37,9 +35,59 @@ nextflow_process { test("cram") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ]) + """ } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ]) + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + {assert process.success}, + {assert snapshot(process.out).match()} + ) + } + } + + test("cram - stub") { + + options "-stub" + + when { process { """ input[0] = Channel.of([ @@ -49,7 +97,7 @@ nextflow_process { ]) input[1] = Channel.of([ [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) ]) """ } diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap index 1b7c9ba4..df507be7 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -8,11 +8,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,01812900aa4027532906c5d431114233" + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" ] ], "1": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ], "stats": [ [ @@ -20,19 +20,89 @@ "id": "test", "single_end": false }, - "test.stats:md5,01812900aa4027532906c5d431114233" + "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06" ] ], "versions": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:15:25.562429714" + "timestamp": "2024-09-16T09:29:16.767396182" + }, + "bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:29.721580274" + }, + "cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ], + "stats": [ + [ + { + "id": "test", + "single_end": false + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:29:53.567964304" }, "bam": { "content": [ @@ -43,11 +113,11 @@ "id": "test", "single_end": false }, - "test.stats:md5,5d8681bf541199898c042bf400391d59" + "test.stats:md5,d53a2584376d78942839e9933a34d11b" ] ], "1": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ], "stats": [ [ @@ -55,18 +125,18 @@ "id": "test", "single_end": false }, - "test.stats:md5,5d8681bf541199898c042bf400391d59" + "test.stats:md5,d53a2584376d78942839e9933a34d11b" ] ], "versions": [ - "versions.yml:md5,0514ceb1769b2a88843e08c1f82624a9" + "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:15:07.857611509" + "timestamp": "2024-09-16T09:28:50.73610604" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml index b0676f33..62054fc9 100644 --- a/modules/nf-core/samtools/view/environment.yml +++ b/modules/nf-core/samtools/view/environment.yml @@ -1,8 +1,8 @@ -name: samtools_view +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::samtools=1.19.2 - - bioconda::htslib=1.19.1 + - bioconda::htslib=1.21 + - bioconda::samtools=1.21 diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index 5a8989d6..37e05cec 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -4,8 +4,8 @@ process SAMTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.19.2--h50ea8bc_0' : - 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : + 'biocontainers/samtools:1.21--h50ea8bc_0' }" input: tuple val(meta), path(input), path(index) @@ -13,13 +13,15 @@ process SAMTOOLS_VIEW { path qname output: - tuple val(meta), path("*.bam"), emit: bam, optional: true - tuple val(meta), path("*.cram"), emit: cram, optional: true - tuple val(meta), path("*.sam"), emit: sam, optional: true - tuple val(meta), path("*.bai"), emit: bai, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true - tuple val(meta), path("*.crai"), emit: crai, optional: true - path "versions.yml", emit: versions + tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true + tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true + tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true + tuple val(meta), path("${prefix}.${file_type}.bai"), emit: bai, optional: true + tuple val(meta), path("${prefix}.${file_type}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${file_type}.crai"), emit: crai, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}"), emit: unselected, optional: true + tuple val(meta), path("${prefix}.unselected.${file_type}.{bai,csi,crsi}"), emit: unselected_index, optional: true + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when @@ -27,13 +29,13 @@ process SAMTOOLS_VIEW { script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" - def readnames = qname ? "--qname-file ${qname}": "" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + readnames = qname ? "--qname-file ${qname} --output-unselected ${prefix}.unselected.${file_type}": "" if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ samtools \\ @@ -54,14 +56,14 @@ process SAMTOOLS_VIEW { stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def file_type = args.contains("--output-fmt sam") ? "sam" : - args.contains("--output-fmt bam") ? "bam" : - args.contains("--output-fmt cram") ? "cram" : - input.getExtension() + prefix = task.ext.prefix ?: "${meta.id}" + file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" - def index = args.contains("--write-index") ? "touch ${prefix}.csi" : "" + def index = args.contains("--write-index") ? "touch ${prefix}.${file_type}.csi" : "" """ touch ${prefix}.${file_type} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 3dadafae..caa7b015 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -15,68 +15,120 @@ tools: documentation: http://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:samtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - index: - type: file - description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) - pattern: "*.{.bai,.csi,.crai}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" - - qname: - type: file - description: Optional file with read names to output only select alignments - pattern: "*.{txt,list}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) + pattern: "*.{.bai,.csi,.crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: Reference file the CRAM was created with (optional) + pattern: "*.{fasta,fa}" + - - qname: + type: file + description: Optional file with read names to output only select alignments + pattern: "*.{txt,list}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - bam: - type: file - description: optional filtered/converted BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.bam: + type: file + description: optional filtered/converted BAM file + pattern: "*.{bam}" - cram: - type: file - description: optional filtered/converted CRAM file - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.cram: + type: file + description: optional filtered/converted CRAM file + pattern: "*.{cram}" - sam: - type: file - description: optional filtered/converted SAM file - pattern: "*.{sam}" - # bai, csi, and crai are created with `--write-index` + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.sam: + type: file + description: optional filtered/converted SAM file + pattern: "*.{sam}" - bai: - type: file - description: optional BAM file index - pattern: "*.{bai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.bai: + type: file + description: optional BAM file index + pattern: "*.{bai}" - csi: - type: file - description: optional tabix BAM file index - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.csi: + type: file + description: optional tabix BAM file index + pattern: "*.{csi}" - crai: - type: file - description: optional CRAM file index - pattern: "*.{crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.${file_type}.crai: + type: file + description: optional CRAM file index + pattern: "*.{crai}" + - unselected: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}: + type: file + description: optional file with unselected alignments + pattern: "*.unselected.{bam,cram,sam}" + - unselected_index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.unselected.${file_type}.{bai,csi,crsi}: + type: file + description: index for the "unselected" file + pattern: "*.unselected.{bai,csi,crai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@joseespinosa" diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test index 45a0defb..37b81a91 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test +++ b/modules/nf-core/samtools/view/tests/main.nf.test @@ -172,6 +172,8 @@ nextflow_process { { assert snapshot(process.out.crai).match("cram_to_bam_index_qname_crai") }, { assert snapshot(process.out.cram).match("cram_to_bam_index_qname_cram") }, { assert snapshot(process.out.sam).match("cram_to_bam_index_qname_sam") }, + { assert snapshot(file(process.out.unselected[0][1]).name).match("cram_to_bam_index_qname_unselected") }, + { assert snapshot(file(process.out.unselected_index[0][1]).name).match("cram_to_bam_index_qname_unselected_csi") }, { assert snapshot(process.out.versions).match("cram_to_bam_index_qname_versions") } ) } diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap index f55943a7..63849b03 100644 --- a/modules/nf-core/samtools/view/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap @@ -56,14 +56,14 @@ "bam_stub_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:13:09.713353823" + "timestamp": "2024-09-16T09:26:24.461775464" }, "cram_to_bam_index_cram": { "content": [ @@ -169,6 +169,16 @@ }, "timestamp": "2024-02-12T19:37:56.490286" }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, "bam_csi": { "content": [ [ @@ -208,14 +218,14 @@ "cram_to_bam_index_qname_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:13:03.935041046" + "timestamp": "2024-09-16T09:25:51.953436682" }, "cram_to_bam_bam": { "content": [ @@ -240,14 +250,14 @@ "cram_to_bam_index_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:12:55.910685496" + "timestamp": "2024-09-16T09:25:14.475388399" }, "cram_to_bam_bai": { "content": [ @@ -264,14 +274,14 @@ "cram_to_bam_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:12:47.715221169" + "timestamp": "2024-09-16T09:24:49.673441798" }, "cram_bam": { "content": [ @@ -355,17 +365,37 @@ }, "timestamp": "2024-02-12T19:38:23.322874" }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.322874" + }, + "cram_to_bam_index_qname_unselected_csi": { + "content": [ + "test.unselected.bam.csi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.3" + }, + "timestamp": "2024-02-12T19:38:23.328458" + }, "bam_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-02-13T16:12:31.692607421" + "timestamp": "2024-09-16T09:23:27.151650338" }, "cram_to_bam_index_qname_cram": { "content": [ @@ -430,14 +460,24 @@ "cram_versions": { "content": [ [ - "versions.yml:md5,4ea32c57d546102a1b32d9693ada7cf1" + "versions.yml:md5,176db5ec46b965219604bcdbb3ef9e07" ] ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-16T09:24:12.95416913" + }, + "cram_to_bam_index_qname_unselected": { + "content": [ + "test.unselected.bam" + ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.04.3" }, - "timestamp": "2024-02-13T16:12:39.913411036" + "timestamp": "2024-02-12T19:38:23.322874" }, "bam_sam": { "content": [ @@ -477,7 +517,7 @@ }, "bam_stub_csi": { "content": [ - "test.csi" + "test.bam.csi" ], "meta": { "nf-test": "0.8.4", diff --git a/modules/nf-core/smncopynumbercaller/environment.yml b/modules/nf-core/smncopynumbercaller/environment.yml index 3da92eeb..afbc4007 100644 --- a/modules/nf-core/smncopynumbercaller/environment.yml +++ b/modules/nf-core/smncopynumbercaller/environment.yml @@ -1,7 +1,5 @@ -name: smncopynumbercaller channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::smncopynumbercaller=1.1.2 diff --git a/modules/nf-core/smncopynumbercaller/meta.yml b/modules/nf-core/smncopynumbercaller/meta.yml index bb2690e9..9d91fc09 100644 --- a/modules/nf-core/smncopynumbercaller/meta.yml +++ b/modules/nf-core/smncopynumbercaller/meta.yml @@ -1,7 +1,13 @@ name: "smncopynumbercaller" -description: tool to call the copy number of full-length SMN1, full-length SMN2, as well as SMN2Δ7–8 (SMN2 with a deletion of Exon7-8) from a whole-genome sequencing (WGS) BAM file. +description: tool to call the copy number of full-length SMN1, full-length SMN2, as + well as SMN2Δ7–8 (SMN2 with a deletion of Exon7-8) from a whole-genome sequencing + (WGS) BAM file. keywords: - - copy number, BAM, CRAM, SMN1, SMN2 + - copy number + - BAM + - CRAM + - SMN1 + - SMN2 tools: - "smncopynumbercaller": description: "call copy number of SMN1, SMN2, SMN2Δ7–8 from a bam file" @@ -9,39 +15,48 @@ tools: documentation: "https://github.com/Illumina/SMNCopyNumberCaller" tool_dev_url: "https://github.com/Illumina/SMNCopyNumberCaller" doi: "10.1038/s41436-020-0754-0" - licence: "Apache License Version 2.0" + licence: ["Apache License Version 2.0"] + identifier: "" input: - - bam: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - bai: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - run_metrics: - type: file - description: File containing run parameters of SMNCopyNumberCaller - pattern: "*.{json}" - smncopynumber: - type: file - description: File containing the output of SMNCopyNumberCaller - pattern: "*.{tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - out/*.tsv: + type: file + description: File containing the output of SMNCopyNumberCaller + pattern: "*.{tsv}" + - run_metrics: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - out/*.json: + type: file + description: File containing run parameters of SMNCopyNumberCaller + pattern: "*.{json}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@peterpru" maintainers: diff --git a/modules/nf-core/smncopynumbercaller/tests/main.nf.test b/modules/nf-core/smncopynumbercaller/tests/main.nf.test new file mode 100644 index 00000000..ce42bb04 --- /dev/null +++ b/modules/nf-core/smncopynumbercaller/tests/main.nf.test @@ -0,0 +1,59 @@ + +nextflow_process { + + name "Test Process SMNCOPYNUMBERCALLER" + script "../main.nf" + process "SMNCOPYNUMBERCALLER" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "smncopynumbercaller" + + test("test-smncopynumbercaller") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.rna.paired_end.sorted.chr6.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.rna.paired_end.sorted.chr6.bam.bai', checkIfExists: true), + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-smncopynumbercaller-stub") { + options '-stub' + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.rna.paired_end.sorted.chr6.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.rna.paired_end.sorted.chr6.bam.bai', checkIfExists: true), + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/smncopynumbercaller/tests/main.nf.test.snap b/modules/nf-core/smncopynumbercaller/tests/main.nf.test.snap new file mode 100644 index 00000000..834fe67b --- /dev/null +++ b/modules/nf-core/smncopynumbercaller/tests/main.nf.test.snap @@ -0,0 +1,100 @@ +{ + "test-smncopynumbercaller-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,084e44557eacbb00c1a24dc71ed022cf" + ], + "run_metrics": [ + [ + { + "id": "test" + }, + "test.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "smncopynumber": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,084e44557eacbb00c1a24dc71ed022cf" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-27T12:54:27.295453" + }, + "test-smncopynumbercaller": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,0de62f196972c17e1701aa8cea0849f9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.json:md5,95f026f441e81a4b345316d980c3570a" + ] + ], + "2": [ + "versions.yml:md5,084e44557eacbb00c1a24dc71ed022cf" + ], + "run_metrics": [ + [ + { + "id": "test" + }, + "test.json:md5,95f026f441e81a4b345316d980c3570a" + ] + ], + "smncopynumber": [ + [ + { + "id": "test" + }, + "test.tsv:md5,0de62f196972c17e1701aa8cea0849f9" + ] + ], + "versions": [ + "versions.yml:md5,084e44557eacbb00c1a24dc71ed022cf" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-27T12:54:21.71312" + } +} \ No newline at end of file diff --git a/modules/nf-core/smncopynumbercaller/tests/nextflow.config b/modules/nf-core/smncopynumbercaller/tests/nextflow.config new file mode 100644 index 00000000..cb64dd58 --- /dev/null +++ b/modules/nf-core/smncopynumbercaller/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: SMNCOPYNUMBERCALLER { + ext.args = '--genome 37' + ext.prefix = { "${meta.id}" } + } +} diff --git a/modules/nf-core/stranger/environment.yml b/modules/nf-core/stranger/environment.yml index 78455053..910bcae7 100644 --- a/modules/nf-core/stranger/environment.yml +++ b/modules/nf-core/stranger/environment.yml @@ -1,7 +1,5 @@ -name: stranger channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::stranger=0.8.1 + - bioconda::stranger=0.9.1 diff --git a/modules/nf-core/stranger/main.nf b/modules/nf-core/stranger/main.nf index dd44bb99..923483f4 100644 --- a/modules/nf-core/stranger/main.nf +++ b/modules/nf-core/stranger/main.nf @@ -4,8 +4,8 @@ process STRANGER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/stranger:0.8.1--pyh5e36f6f_0': - 'biocontainers/stranger:0.8.1--pyh5e36f6f_0' }" + 'https://depot.galaxyproject.org/singularity/stranger:0.9.1--pyh7e72e81_0': + 'biocontainers/stranger:0.9.1--pyh7e72e81_0' }" input: tuple val(meta), path(vcf) @@ -37,7 +37,7 @@ process STRANGER { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/stranger/meta.yml b/modules/nf-core/stranger/meta.yml index 5e0bc0bb..a5486dbd 100644 --- a/modules/nf-core/stranger/meta.yml +++ b/modules/nf-core/stranger/meta.yml @@ -1,5 +1,6 @@ name: stranger -description: Annotates output files from ExpansionHunter with the pathologic implications of the repeat sizes. +description: Annotates output files from ExpansionHunter with the pathologic implications + of the repeat sizes. keywords: - STR - repeat_expansions @@ -13,39 +14,42 @@ tools: tool_dev_url: https://github.com/moonso/stranger doi: "10.5281/zenodo.4548873" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - 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 - pattern: "*.{json}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + 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 + pattern: "*.{json}" 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: annotated VCF with keys STR_STATUS, NormalMax and PathologicMin - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: annotated VCF with keys STR_STATUS, NormalMax and PathologicMin + pattern: "*.{vcf.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ljmesi" maintainers: diff --git a/modules/nf-core/stranger/tests/main.nf.test b/modules/nf-core/stranger/tests/main.nf.test new file mode 100644 index 00000000..13c61f43 --- /dev/null +++ b/modules/nf-core/stranger/tests/main.nf.test @@ -0,0 +1,82 @@ +nextflow_process { + + name "Test Process STRANGER" + script "../main.nf" + process "STRANGER" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "stranger" + tag "expansionhunter" + + setup { + run("EXPANSIONHUNTER") { + script "../../expansionhunter/main.nf" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'fasta'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'fai'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [id:'catalogue'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/loci/repeat_expansions.json', checkIfExists: true) + ] + """ + } + } + } + + test("homo_sapiens - vcf, repeat_catalogue") { + + when { + process { + """ + input[0] = EXPANSIONHUNTER.out.vcf + input[1] = [ + [id:'catalogue'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/loci/repeat_expansions.json', checkIfExists: true) + ] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + + test("homo_sapiens - vcf, repeat_catalogue - stub") { + + options "-stub" + + when { + process { + """ + input[0] = EXPANSIONHUNTER.out.vcf + input[1] = [ + [id:'catalogue'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/loci/repeat_expansions.json', checkIfExists: true) + ] + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + } +} diff --git a/modules/nf-core/stranger/tests/main.nf.test.snap b/modules/nf-core/stranger/tests/main.nf.test.snap new file mode 100644 index 00000000..3faa4e58 --- /dev/null +++ b/modules/nf-core/stranger/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "homo_sapiens - vcf, repeat_catalogue - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "stranger.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,68446c9e91e20825f7430db64e85aa7c" + ], + "vcf": [ + [ + { + "id": "test" + }, + "stranger.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,68446c9e91e20825f7430db64e85aa7c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T08:09:27.725425094" + }, + "homo_sapiens - vcf, repeat_catalogue": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "stranger.vcf.gz:md5,e933cd71d9f9f146265b8e8dd90b712c" + ] + ], + "1": [ + "versions.yml:md5,68446c9e91e20825f7430db64e85aa7c" + ], + "vcf": [ + [ + { + "id": "test" + }, + "stranger.vcf.gz:md5,e933cd71d9f9f146265b8e8dd90b712c" + ] + ], + "versions": [ + "versions.yml:md5,68446c9e91e20825f7430db64e85aa7c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-03T08:09:14.472394433" + } +} \ No newline at end of file diff --git a/modules/nf-core/stranger/tests/nextflow.config b/modules/nf-core/stranger/tests/nextflow.config new file mode 100644 index 00000000..98459330 --- /dev/null +++ b/modules/nf-core/stranger/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'STRANGER' { + ext.prefix = "stranger" + } + } diff --git a/modules/nf-core/stranger/tests/tags.yml b/modules/nf-core/stranger/tests/tags.yml new file mode 100644 index 00000000..6d11ef42 --- /dev/null +++ b/modules/nf-core/stranger/tests/tags.yml @@ -0,0 +1,2 @@ +stranger: + - "modules/nf-core/stranger/**" diff --git a/modules/nf-core/svdb/merge/environment.yml b/modules/nf-core/svdb/merge/environment.yml index e6fec088..f725b652 100644 --- a/modules/nf-core/svdb/merge/environment.yml +++ b/modules/nf-core/svdb/merge/environment.yml @@ -1,10 +1,8 @@ -name: svdb_merge channels: - conda-forge - bioconda - - defaults + dependencies: - - svdb=2.8.1 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.19.2 - htslib=1.19.1 + - samtools=1.19.2 + - svdb=2.8.1 diff --git a/modules/nf-core/svdb/merge/meta.yml b/modules/nf-core/svdb/merge/meta.yml index e53e61fe..7dc7c675 100644 --- a/modules/nf-core/svdb/merge/meta.yml +++ b/modules/nf-core/svdb/merge/meta.yml @@ -10,33 +10,37 @@ tools: homepage: https://github.com/J35P312/SVDB documentation: https://github.com/J35P312/SVDB/blob/master/README.md licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - priority: - type: list - description: prioritise the input vcf files according to this list, e.g ['tiddit','cnvnator'] - - vcfs: - type: list - description: Two or more VCF files. Order of files should correspond to the order of tags used for priority. - pattern: "*.{vcf,vcf.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - vcfs: + type: list + description: Two or more VCF files. Order of files should correspond to the + order of tags used for priority. + pattern: "*.{vcf,vcf.gz}" + - - priority: + type: list + description: prioritise the input vcf files according to this list, e.g ['tiddit','cnvnator'] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: merged VCF file - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*.vcf.gz": + type: file + description: merged VCF file + pattern: "*.vcf.gz" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/svdb/query/environment.yml b/modules/nf-core/svdb/query/environment.yml index bf048232..cd35cf48 100644 --- a/modules/nf-core/svdb/query/environment.yml +++ b/modules/nf-core/svdb/query/environment.yml @@ -1,7 +1,5 @@ -name: svdb_query channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::svdb=2.8.1 diff --git a/modules/nf-core/svdb/query/meta.yml b/modules/nf-core/svdb/query/meta.yml index d11c51e6..f8cd33c8 100644 --- a/modules/nf-core/svdb/query/meta.yml +++ b/modules/nf-core/svdb/query/meta.yml @@ -10,52 +10,54 @@ tools: homepage: https://github.com/J35P312/SVDB documentation: https://github.com/J35P312/SVDB/blob/master/README.md licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - in_occs: - type: list - description: A list of allele count tags - - in_frqs: - type: list - description: A list of allele frequency tags - - vcf: - type: file - description: query vcf file - pattern: "*.{vcf,vcf.gz}" - - vcf_dbs: - type: file - description: path to a database vcf, or a comma separated list of vcfs - pattern: "*.{vcf,vcf.gz}" - - bedpe_dbs: - type: file - description: path to a SV database of the following format chrA-posA-chrB-posB-type-count-frequency, or a comma separated list of files - pattern: "*.{bedpe}" - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: query vcf file + pattern: "*.{vcf,vcf.gz}" + - - in_occs: + type: list + description: A list of allele count tags + - - in_frqs: + type: list + description: A list of allele frequency tags + - - out_occs: + type: list + description: A list of allele count tags + - - out_frqs: + type: list + description: A list of allele frequency tags + - - vcf_dbs: + type: file + description: path to a database vcf, or a comma separated list of vcfs + pattern: "*.{vcf,vcf.gz}" + - - bedpe_dbs: + type: file + description: path to a SV database of the following format chrA-posA-chrB-posB-type-count-frequency, + or a comma separated list of files + pattern: "*.{bedpe}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test' ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - out_occs: - type: list - description: A list of allele count tags - - out_frqs: - type: list - description: A list of allele frequency tags - vcf: - type: file - description: Annotated output VCF file - pattern: "*_query.vcf" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - "*_query.vcf": + type: file + description: Annotated output VCF file + pattern: "*_query.vcf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" diff --git a/modules/nf-core/svdb/query/tests/main.nf.test b/modules/nf-core/svdb/query/tests/main.nf.test index edf801f7..72e82915 100644 --- a/modules/nf-core/svdb/query/tests/main.nf.test +++ b/modules/nf-core/svdb/query/tests/main.nf.test @@ -14,13 +14,13 @@ nextflow_process { process { """ input[0] = Channel.of([ [ id:'test' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['test_sv_vcf'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/sv_query.vcf.gz', checkIfExists: true) ] ]) input[1] = ['AC'] input[2] = ['AF'] input[3] = ['gnomad_svAC'] input[4] = ['gnomad_svAF'] - input[5] = Channel.of([file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_sv_vcf_gz'], checkIfExists: true)]) + input[5] = Channel.of([file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/gnomAD.r2.1.1-sv.vcf.gz', checkIfExists: true)]) input[6] = [] """ } diff --git a/modules/nf-core/tabix/bgzip/environment.yml b/modules/nf-core/tabix/bgzip/environment.yml index 361c078b..017c259d 100644 --- a/modules/nf-core/tabix/bgzip/environment.yml +++ b/modules/nf-core/tabix/bgzip/environment.yml @@ -1,8 +1,7 @@ -name: tabix_bgzip channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::htslib=1.20 - bioconda::tabix=1.11 - - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/bgzip/main.nf b/modules/nf-core/tabix/bgzip/main.nf index 3065dab0..67991c74 100644 --- a/modules/nf-core/tabix/bgzip/main.nf +++ b/modules/nf-core/tabix/bgzip/main.nf @@ -4,8 +4,8 @@ process TABIX_BGZIP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : - 'biocontainers/htslib:1.19.1--h81da01d_1' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/tabix/bgzip/meta.yml b/modules/nf-core/tabix/bgzip/meta.yml index 621d49ea..131e92cf 100644 --- a/modules/nf-core/tabix/bgzip/meta.yml +++ b/modules/nf-core/tabix/bgzip/meta.yml @@ -13,33 +13,42 @@ tools: documentation: http://www.htslib.org/doc/bgzip.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: file to compress or to decompress + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: file to compress or to decompress output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - output: - type: file - description: Output compressed/decompressed file - pattern: "*." + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}: + type: file + description: Output compressed/decompressed file + pattern: "*." - gzi: - type: file - description: Optional gzip index file for compressed inputs - pattern: "*.gzi" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${output}.gzi: + type: file + description: Optional gzip index file for compressed inputs + pattern: "*.gzi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test b/modules/nf-core/tabix/bgzip/tests/main.nf.test index 95fd4c50..d784aa07 100644 --- a/modules/nf-core/tabix/bgzip/tests/main.nf.test +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [ id:'bgzip_test' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] ] """ } @@ -39,7 +39,7 @@ nextflow_process { """ input[0] = [ [ id:'bedgz_test' ], - [ file(params.test_data['homo_sapiens']['genome']['genome_bed_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true) ] ] """ } @@ -66,7 +66,7 @@ nextflow_process { """ input[0] = [ [ id:"test_stub" ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] ] """ } @@ -91,7 +91,7 @@ nextflow_process { """ input[0] = [ [ id:"gzi_compress_test" ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] ] """ } diff --git a/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap index 53d59932..0748143f 100644 --- a/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap +++ b/modules/nf-core/tabix/bgzip/tests/main.nf.test.snap @@ -3,6 +3,10 @@ "content": [ "gzi_compress_test.vcf.gz.gzi" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:52:29.328146" }, "homo_genome_bedgz_compress": { @@ -20,7 +24,7 @@ ], "2": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ], "gzi": [ @@ -34,16 +38,24 @@ ] ], "versions": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ] } ], - "timestamp": "2024-02-19T14:52:12.422209" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:34.159992362" }, "test_stub": { "content": [ "test_stub.vcf.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:52:20.811489" }, "sarscov2_vcf_bgzip_compress": { @@ -61,7 +73,7 @@ ], "2": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ], "gzi": [ @@ -75,11 +87,15 @@ ] ], "versions": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ] } ], - "timestamp": "2024-02-19T14:52:03.706028" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:22.087769106" }, "sarscov2_vcf_bgzip_compress_gzi": { "content": [ @@ -101,7 +117,7 @@ ] ], "2": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ], "gzi": [ [ @@ -120,22 +136,34 @@ ] ], "versions": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ] } ], - "timestamp": "2024-02-19T14:52:29.271494" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:57.15091665" }, "bgzip_test": { "content": [ "bgzip_test.vcf.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:52:03.768295" }, "bedgz_test": { "content": [ "bedgz_test.bed" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:52:12.453855" }, "sarscov2_vcf_bgzip_compress_stub": { @@ -158,7 +186,7 @@ ] ], "2": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ], "gzi": [ [ @@ -177,10 +205,14 @@ ] ], "versions": [ - "versions.yml:md5,e023292de6ee109a44fc67475d658174" + "versions.yml:md5,753c29916d45debdde52f4ac7c745f61" ] } ], - "timestamp": "2024-02-19T14:52:20.769619" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:28:45.219404786" } } \ No newline at end of file diff --git a/modules/nf-core/tabix/tabix/environment.yml b/modules/nf-core/tabix/tabix/environment.yml index 76b45e16..017c259d 100644 --- a/modules/nf-core/tabix/tabix/environment.yml +++ b/modules/nf-core/tabix/tabix/environment.yml @@ -1,8 +1,7 @@ -name: tabix_tabix channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::htslib=1.20 - bioconda::tabix=1.11 - - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index 1737141d..13acd670 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -4,8 +4,8 @@ process TABIX_TABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : - 'biocontainers/htslib:1.19.1--h81da01d_1' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" input: tuple val(meta), path(tab) @@ -21,7 +21,10 @@ process TABIX_TABIX { script: def args = task.ext.args ?: '' """ - tabix $args $tab + tabix \\ + --threads $task.cpus \\ + $args \\ + $tab cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -33,8 +36,8 @@ process TABIX_TABIX { """ touch ${tab}.tbi touch ${tab}.csi - cat <<-END_VERSIONS > versions.yml + cat <<-END_VERSIONS > versions.yml "${task.process}": tabix: \$(echo \$(tabix -h 2>&1) | sed 's/^.*Version: //; s/ .*\$//') END_VERSIONS diff --git a/modules/nf-core/tabix/tabix/meta.yml b/modules/nf-core/tabix/tabix/meta.yml index ae5b4f43..7864832d 100644 --- a/modules/nf-core/tabix/tabix/meta.yml +++ b/modules/nf-core/tabix/tabix/meta.yml @@ -11,34 +11,43 @@ tools: documentation: https://www.htslib.org/doc/tabix.1.html doi: 10.1093/bioinformatics/btq671 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file compressed with bgzip - pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tab: + type: file + description: TAB-delimited genome position file compressed with bgzip + pattern: "*.{bed.gz,gff.gz,sam.gz,vcf.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - tbi: - type: file - description: tabix index file - pattern: "*.{tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: tabix index file + pattern: "*.{tbi}" - csi: - type: file - description: coordinate sorted index file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: coordinate sorted index file + pattern: "*.{csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test b/modules/nf-core/tabix/tabix/tests/main.nf.test index 3a150c70..102b0d7b 100644 --- a/modules/nf-core/tabix/tabix/tests/main.nf.test +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test @@ -16,7 +16,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_bed' ], - [ file(params.test_data['sarscov2']['genome']['test_bed_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed.gz', checkIfExists: true) ] ] """ } @@ -25,11 +25,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.tbi[0][1]).name - ).match("tbi_bed") - } + process.out, + file(process.out.tbi[0][1]).name + ).match() } ) } } @@ -41,7 +40,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_gff' ], - [ file(params.test_data['sarscov2']['genome']['genome_gff3_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true) ] ] """ } @@ -50,11 +49,9 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.tbi[0][1]).name - ).match("tbi_gff") - } + process.out, + file(process.out.tbi[0][1]).name).match() } ) } @@ -67,7 +64,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_vcf' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) ] ] """ } @@ -76,11 +73,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.tbi[0][1]).name - ).match("tbi_vcf") - } + process.out, + file(process.out.tbi[0][1]).name + ).match() } ) } @@ -93,7 +89,7 @@ nextflow_process { """ input[0] = [ [ id:'vcf_csi' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) ] ] """ } @@ -102,11 +98,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.csi[0][1]).name - ).match("vcf_csi") - } + process.out, + file(process.out.csi[0][1]).name + ).match() } ) } @@ -120,7 +115,7 @@ nextflow_process { """ input[0] = [ [ id:'vcf_csi_stub' ], - [ file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true) ] ] """ } @@ -129,11 +124,10 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out).match() }, { assert snapshot( - file(process.out.csi[0][1]).name - ).match("vcf_csi_stub") - } + process.out, + file(process.out.csi[0][1]).name + ).match() } ) } diff --git a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap index 034e38b6..c2b9ed0b 100644 --- a/modules/nf-core/tabix/tabix/tests/main.nf.test.snap +++ b/modules/nf-core/tabix/tabix/tests/main.nf.test.snap @@ -1,16 +1,4 @@ { - "vcf_csi_stub": { - "content": [ - "test.vcf.gz.csi" - ], - "timestamp": "2024-03-04T14:51:59.788002" - }, - "tbi_gff": { - "content": [ - "genome.gff3.gz.tbi" - ], - "timestamp": "2024-02-19T14:53:37.420216" - }, "sarscov2_gff_tbi": { "content": [ { @@ -19,14 +7,14 @@ { "id": "tbi_gff" }, - "genome.gff3.gz.tbi:md5,53fc683fd217aae47ef10d23c52a9178" + "genome.gff3.gz.tbi:md5,f79a67d95a98076e04fbe0455d825926" ] ], "1": [ ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ @@ -36,15 +24,20 @@ { "id": "tbi_gff" }, - "genome.gff3.gz.tbi:md5,53fc683fd217aae47ef10d23c52a9178" + "genome.gff3.gz.tbi:md5,f79a67d95a98076e04fbe0455d825926" ] ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } + }, + "genome.gff3.gz.tbi" ], - "timestamp": "2024-02-19T14:53:37.388157" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:25.653807564" }, "sarscov2_bedgz_tbi": { "content": [ @@ -54,14 +47,14 @@ { "id": "tbi_bed" }, - "test.bed.gz.tbi:md5,0f17d85e7f0a042b2aa367b70df224f8" + "test.bed.gz.tbi:md5,9a761d51cc81835fd1199201fdbcdd5d" ] ], "1": [ ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ @@ -71,27 +64,20 @@ { "id": "tbi_bed" }, - "test.bed.gz.tbi:md5,0f17d85e7f0a042b2aa367b70df224f8" + "test.bed.gz.tbi:md5,9a761d51cc81835fd1199201fdbcdd5d" ] ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } - ], - "timestamp": "2024-02-19T14:53:28.879408" - }, - "tbi_vcf": { - "content": [ - "test.vcf.gz.tbi" - ], - "timestamp": "2024-02-19T14:53:46.402522" - }, - "vcf_csi": { - "content": [ - "test.vcf.gz.csi" + }, + "test.bed.gz.tbi" ], - "timestamp": "2024-02-19T14:53:54.921189" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:09.754082161" }, "sarscov2_vcf_tbi": { "content": [ @@ -101,14 +87,14 @@ { "id": "tbi_vcf" }, - "test.vcf.gz.tbi:md5,897f3f378a811b90e6dee56ce08d2bcf" + "test.vcf.gz.tbi:md5,d22e5b84e4fcd18792179f72e6da702e" ] ], "1": [ ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ @@ -118,15 +104,20 @@ { "id": "tbi_vcf" }, - "test.vcf.gz.tbi:md5,897f3f378a811b90e6dee56ce08d2bcf" + "test.vcf.gz.tbi:md5,d22e5b84e4fcd18792179f72e6da702e" ] ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } + }, + "test.vcf.gz.tbi" ], - "timestamp": "2024-02-19T14:53:46.370358" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:40.042648294" }, "sarscov2_vcf_csi_stub": { "content": [ @@ -148,7 +139,7 @@ ] ], "2": [ - "versions.yml:md5,3d45df6d80883bad358631069a2940fd" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ [ @@ -167,11 +158,16 @@ ] ], "versions": [ - "versions.yml:md5,3d45df6d80883bad358631069a2940fd" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } + }, + "test.vcf.gz.csi" ], - "timestamp": "2024-03-04T14:51:59.766184" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:07:08.700367261" }, "sarscov2_vcf_csi": { "content": [ @@ -184,34 +180,33 @@ { "id": "vcf_csi" }, - "test.vcf.gz.csi:md5,0731ad6f40104d2bbb1a2cc478ef8f03" + "test.vcf.gz.csi:md5,04b41c1efd9ab3c6b1e008a286e27d2b" ] ], "2": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ], "csi": [ [ { "id": "vcf_csi" }, - "test.vcf.gz.csi:md5,0731ad6f40104d2bbb1a2cc478ef8f03" + "test.vcf.gz.csi:md5,04b41c1efd9ab3c6b1e008a286e27d2b" ] ], "tbi": [ ], "versions": [ - "versions.yml:md5,f4feeda7fdd4b567102f7f8e5d7037a3" + "versions.yml:md5,07064637fb8a217174052be8e40234e2" ] - } - ], - "timestamp": "2024-02-19T14:53:54.886876" - }, - "tbi_bed": { - "content": [ - "test.bed.gz.tbi" + }, + "test.vcf.gz.csi" ], - "timestamp": "2024-02-19T14:53:28.947628" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T12:06:55.362067748" } } \ No newline at end of file diff --git a/modules/nf-core/tiddit/cov/environment.yml b/modules/nf-core/tiddit/cov/environment.yml index 6b024492..2fd01cfd 100644 --- a/modules/nf-core/tiddit/cov/environment.yml +++ b/modules/nf-core/tiddit/cov/environment.yml @@ -1,7 +1,5 @@ -name: tiddit_cov channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::tiddit=3.6.1 diff --git a/modules/nf-core/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml index c28546cc..88b72641 100644 --- a/modules/nf-core/tiddit/cov/meta.yml +++ b/modules/nf-core/tiddit/cov/meta.yml @@ -12,45 +12,54 @@ tools: documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md doi: "10.12688/f1000research.11168.1" licence: ["GPL v3"] + identifier: biotools:tiddit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: | - Reference genome file. Only needed when passing in CRAM instead of BAM. - If not using CRAM, please pass an empty file instead. - pattern: "*.fasta" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: | + Reference genome file. Only needed when passing in CRAM instead of BAM. + If not using CRAM, please pass an empty file instead. + pattern: "*.fasta" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - cov: - type: file - description: The coverage of different regions in bed format. Optional. - pattern: "*.bed" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: The coverage of different regions in bed format. Optional. + pattern: "*.bed" - wig: - type: file - description: The coverage of different regions in WIG format. Optional. - pattern: "*.wig" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.wig": + type: file + description: The coverage of different regions in WIG format. Optional. + pattern: "*.wig" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@projectoriented" - "@ramprasadn" diff --git a/modules/nf-core/tiddit/cov/tests/main.nf.test b/modules/nf-core/tiddit/cov/tests/main.nf.test index 72746648..24c273d8 100644 --- a/modules/nf-core/tiddit/cov/tests/main.nf.test +++ b/modules/nf-core/tiddit/cov/tests/main.nf.test @@ -16,12 +16,12 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) ] input[1] = [ [:], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -30,9 +30,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.cov).match("cov") }, { assert process.out.cov[0][1] ==~ ".*/test.bed" }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + process.out.cov, + process.out.versions + ).match() + } ) } @@ -45,7 +48,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ] input[1] = [ [:], [] ] """ @@ -55,9 +58,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.cov).match("cov") }, { assert process.out.cov[0][1] ==~ ".*/test.bed" }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + process.out.cov, + process.out.versions + ).match() + } ) } @@ -72,12 +78,12 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) ] input[1] = [ [:], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -86,9 +92,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.wig).match("wig") }, { assert process.out.wig[0][1] ==~ ".*/test.wig" }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + process.out.wig, + process.out.versions + ).match() + } ) } @@ -103,7 +112,7 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ] input[1] = [ [:], [] ] @@ -114,9 +123,12 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.wig).match("wig") }, { assert process.out.wig[0][1] ==~ ".*/test.wig" }, - { assert snapshot(process.out.versions).match("versions") } + { assert snapshot( + process.out.wig, + process.out.versions + ).match() + } ) } @@ -133,12 +145,12 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true) ] input[1] = [ [:], // meta map - file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] """ } @@ -147,11 +159,14 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out.cov).match("cov - stub") }, { assert process.out.cov[0][1] ==~ ".*/test.bed" }, - { assert snapshot(process.out.wig).match("wig - stub") }, { assert process.out.wig[0][1] ==~ ".*/test.wig" }, - { assert snapshot(process.out.versions).match("versions - stub") } + { assert snapshot( + process.out.cov, + process.out.wig, + process.out.versions + ).match() + } ) } diff --git a/modules/nf-core/tiddit/cov/tests/main.nf.test.snap b/modules/nf-core/tiddit/cov/tests/main.nf.test.snap index dcd24edc..5067886d 100644 --- a/modules/nf-core/tiddit/cov/tests/main.nf.test.snap +++ b/modules/nf-core/tiddit/cov/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "wig": { + "homo_sapiens - bam - wig": { "content": [ [ [ @@ -9,11 +9,18 @@ }, "test.wig:md5,7c46b6ef30574acdce0ad854f40126ae" ] + ], + [ + "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" ] ], - "timestamp": "2023-12-22T11:24:06.649602" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-30T09:44:07.66262" }, - "wig - stub": { + "homo_sapiens - cram - wig": { "content": [ [ [ @@ -21,21 +28,50 @@ "id": "test", "single_end": false }, - "test.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.wig:md5,7c46b6ef30574acdce0ad854f40126ae" ] + ], + [ + "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" ] ], - "timestamp": "2023-12-22T11:30:00.831686" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-30T09:44:01.397993" }, - "versions": { + "homo_sapiens - stub": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.wig:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], [ "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" ] ], - "timestamp": "2023-12-22T11:23:58.227251" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-30T09:44:12.873466" }, - "cov": { + "homo_sapiens - bam - bed": { "content": [ [ [ @@ -45,19 +81,18 @@ }, "test.bed:md5,caf0742f2d4a6f713ceb85268dd48c14" ] - ] - ], - "timestamp": "2023-12-22T11:23:58.220115" - }, - "versions - stub": { - "content": [ + ], [ "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" ] ], - "timestamp": "2023-12-22T11:30:00.834854" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-30T09:43:54.542951" }, - "cov - stub": { + "homo_sapiens - cram - bed": { "content": [ [ [ @@ -65,10 +100,17 @@ "id": "test", "single_end": false }, - "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.bed:md5,caf0742f2d4a6f713ceb85268dd48c14" ] + ], + [ + "versions.yml:md5,49dfdb5a33d1c11db488fb02d1c95c5a" ] ], - "timestamp": "2023-12-22T11:30:00.826974" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-30T09:43:47.441318" } } \ No newline at end of file diff --git a/modules/nf-core/tiddit/sv/environment.yml b/modules/nf-core/tiddit/sv/environment.yml index d0367f17..2fd01cfd 100644 --- a/modules/nf-core/tiddit/sv/environment.yml +++ b/modules/nf-core/tiddit/sv/environment.yml @@ -1,7 +1,5 @@ -name: tiddit_sv channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::tiddit=3.6.1 diff --git a/modules/nf-core/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml index bfcbc4e3..21527baf 100644 --- a/modules/nf-core/tiddit/sv/meta.yml +++ b/modules/nf-core/tiddit/sv/meta.yml @@ -11,56 +11,65 @@ tools: documentation: https://github.com/SciLifeLab/TIDDIT/blob/master/README.md doi: 10.12688/f1000research.11168.1 licence: ["GPL-3.0-or-later"] + identifier: biotools:tiddit input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - input_index: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test_fasta']` - - fasta: - type: file - description: Input FASTA file - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing sample information from bwa index - e.g. `[ id:'test_bwa-index' ]` - - bwa_index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - input_index: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test_fasta']` + - fasta: + type: file + description: Input FASTA file + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing sample information from bwa index + e.g. `[ id:'test_bwa-index' ]` + - bwa_index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: vcf - pattern: "*.{vcf}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf": + type: file + description: vcf + pattern: "*.{vcf}" - ploidy: - type: file - description: tab - pattern: "*.{ploidies.tab}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.ploidies.tab": + type: file + description: tab + pattern: "*.{ploidies.tab}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/ucsc/wigtobigwig/environment.yml b/modules/nf-core/ucsc/wigtobigwig/environment.yml index 3e88a5dd..331ad3b2 100644 --- a/modules/nf-core/ucsc/wigtobigwig/environment.yml +++ b/modules/nf-core/ucsc/wigtobigwig/environment.yml @@ -1,7 +1,5 @@ -name: ucsc_wigtobigwig channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::ucsc-wigtobigwig=447 diff --git a/modules/nf-core/ucsc/wigtobigwig/meta.yml b/modules/nf-core/ucsc/wigtobigwig/meta.yml index f7476480..97bf98b1 100644 --- a/modules/nf-core/ucsc/wigtobigwig/meta.yml +++ b/modules/nf-core/ucsc/wigtobigwig/meta.yml @@ -11,28 +11,35 @@ tools: or bedGraph format) to binary big wig format homepage: http://www.genome.ucsc.edu/goldenPath/help/bigWig.html licence: ["varies; see http://genome.ucsc.edu/license"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - wig: - type: file - description: wig file - pattern: "*.{wig}" - - chromsizes: - type: file - description: chromosome sizes file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - wig: + type: file + description: wig file + pattern: "*.{wig}" + - - sizes: + type: file + description: Chromosome sizes file output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - bw: - type: file - description: bigwig file - pattern: "*.{bw}" + - meta: + type: file + description: bigwig file + pattern: "*.{bw}" + - "*.bw": + type: file + description: bigwig file + pattern: "*.{bw}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jianhong" - "@projectoriented" diff --git a/modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test b/modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test new file mode 100644 index 00000000..b48ce035 --- /dev/null +++ b/modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test @@ -0,0 +1,59 @@ + +nextflow_process { + + name "Test Process UCSC_WIGTOBIGWIG" + script "../main.nf" + process "UCSC_WIGTOBIGWIG" + + tag "modules" + tag "modules_nfcore" + tag "ucsc" + tag "ucsc/wigtobigwig" + + test("test-ucsc-wigtobigwig") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map, + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/wig/test.wig.gz', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-ucsc-wigtobigwig-stub") { + options '-stub' + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map, + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/wig/test.wig.gz', checkIfExists: true) + ] + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true) + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test.snap b/modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test.snap new file mode 100644 index 00000000..acc59555 --- /dev/null +++ b/modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "test-ucsc-wigtobigwig": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bw:md5,b64af7003665dc51fae958216b06ed95" + ] + ], + "1": [ + "versions.yml:md5,e99b51033a14e1602fe195965a109feb" + ], + "bw": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bw:md5,b64af7003665dc51fae958216b06ed95" + ] + ], + "versions": [ + "versions.yml:md5,e99b51033a14e1602fe195965a109feb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-27T11:54:03.735102" + }, + "test-ucsc-wigtobigwig-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bw:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,e99b51033a14e1602fe195965a109feb" + ], + "bw": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bw:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e99b51033a14e1602fe195965a109feb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-27T11:54:07.924401" + } +} \ No newline at end of file diff --git a/modules/nf-core/untar/environment.yml b/modules/nf-core/untar/environment.yml index 0c9cbb10..c7794856 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/nf-core/untar/environment.yml @@ -1,11 +1,7 @@ -name: untar - channels: - conda-forge - bioconda - - defaults - dependencies: - conda-forge::grep=3.11 - - conda-forge::sed=4.7 + - conda-forge::sed=4.8 - conda-forge::tar=1.34 diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 8a75bb95..9bd8f554 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -4,8 +4,8 @@ process UNTAR { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'nf-core/ubuntu:20.04' }" + 'https://depot.galaxyproject.org/singularity/ubuntu:22.04' : + 'nf-core/ubuntu:22.04' }" input: tuple val(meta), path(archive) @@ -52,8 +52,29 @@ process UNTAR { stub: prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) """ - mkdir $prefix - touch ${prefix}/file.txt + mkdir ${prefix} + ## Dry-run untaring the archive to get the files and place all in prefix + if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch \${i} + else + mkdir -p \${i} + fi + done + else + for i in `tar -tf ${archive}`; + do + if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; + then + touch ${prefix}/\${i} + else + mkdir -p ${prefix}/\${i} + fi + done + fi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index a9a2110f..290346b3 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -10,30 +10,33 @@ tools: Extract tar.gz files. documentation: https://www.gnu.org/software/tar/manual/ licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untar - pattern: "*.{tar}.{gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - untar: - type: directory - description: Directory containing contents of archive - pattern: "*/" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - $prefix: + type: directory + description: Directory containing contents of archive + pattern: "*/" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test index 2a7c97bf..c957517a 100644 --- a/modules/nf-core/untar/tests/main.nf.test +++ b/modules/nf-core/untar/tests/main.nf.test @@ -6,6 +6,7 @@ nextflow_process { tag "modules" tag "modules_nfcore" tag "untar" + test("test_untar") { when { @@ -19,10 +20,9 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.untar).match("test_untar") }, + { assert snapshot(process.out).match() }, ) } - } test("test_untar_onlyfiles") { @@ -38,10 +38,48 @@ nextflow_process { then { assertAll ( { assert process.success }, - { assert snapshot(process.out.untar).match("test_untar_onlyfiles") }, + { assert snapshot(process.out).match() }, ) } + } + + test("test_untar - stub") { + + options "-stub" + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } } + test("test_untar_onlyfiles - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + } } diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap index 64550292..ceb91b79 100644 --- a/modules/nf-core/untar/tests/main.nf.test.snap +++ b/modules/nf-core/untar/tests/main.nf.test.snap @@ -1,42 +1,158 @@ { "test_untar_onlyfiles": { "content": [ - [ - [ + { + "0": [ [ - - ], + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:28.231047" + }, + "test_untar_onlyfiles - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" + [ + + ], + [ + "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-02-28T11:49:41.320643" + "timestamp": "2024-07-10T12:04:45.773103" + }, + "test_untar - stub": { + "content": [ + { + "0": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ + [ + [ + + ], + [ + "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", + "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-10T12:04:36.777441" }, "test_untar": { "content": [ - [ - [ + { + "0": [ [ - - ], + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] + ] + ], + "1": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" + ], + "untar": [ [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + [ + + ], + [ + "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", + "opts.k2d:md5,a033d00cf6759407010b21700938f543", + "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" + ] ] + ], + "versions": [ + "versions.yml:md5,6063247258c56fd271d076bb04dd7536" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.3" }, - "timestamp": "2024-02-28T11:49:33.795172" + "timestamp": "2024-07-10T12:04:19.377674" } } \ No newline at end of file diff --git a/modules/nf-core/upd/environment.yml b/modules/nf-core/upd/environment.yml index 77b65227..307f13b3 100644 --- a/modules/nf-core/upd/environment.yml +++ b/modules/nf-core/upd/environment.yml @@ -1,7 +1,5 @@ -name: upd channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::upd=0.1.1 diff --git a/modules/nf-core/upd/meta.yml b/modules/nf-core/upd/meta.yml index 7682e337..a0e90063 100644 --- a/modules/nf-core/upd/meta.yml +++ b/modules/nf-core/upd/meta.yml @@ -1,4 +1,3 @@ ---- # 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. @@ -12,32 +11,35 @@ tools: homepage: https://github.com/bjhall/upd documentation: https://github.com/bjhall/upd tool_dev_url: https://github.com/bjhall/upd - licence: "['MIT']" + licence: ["MIT"] + identifier: "" 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}" + - - 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}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bed": + type: file + description: BED file + pattern: "*.{bed}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@hrydbeck" maintainers: diff --git a/modules/nf-core/upd/tests/main.nf.test b/modules/nf-core/upd/tests/main.nf.test new file mode 100644 index 00000000..8e080add --- /dev/null +++ b/modules/nf-core/upd/tests/main.nf.test @@ -0,0 +1,57 @@ + +nextflow_process { + + name "Test Process UPD" + script "../main.nf" + process "UPD" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "upd" + + test("test-upd") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/ped/justhusky_minimal.vcf.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-upd-stub") { + options '-stub' + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/ped/justhusky_minimal.vcf.gz', checkIfExists: true) + ] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/upd/tests/main.nf.test.snap b/modules/nf-core/upd/tests/main.nf.test.snap new file mode 100644 index 00000000..866792f1 --- /dev/null +++ b/modules/nf-core/upd/tests/main.nf.test.snap @@ -0,0 +1,72 @@ +{ + "test-upd-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,3fef0b4c41b8cbf95be59f62771e38ea" + ], + "bed": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,3fef0b4c41b8cbf95be59f62771e38ea" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-27T11:51:33.816939" + }, + "test-upd": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,beea3890636075d5c99db1b0d74f9ff5" + ] + ], + "1": [ + "versions.yml:md5,3fef0b4c41b8cbf95be59f62771e38ea" + ], + "bed": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bed:md5,beea3890636075d5c99db1b0d74f9ff5" + ] + ], + "versions": [ + "versions.yml:md5,3fef0b4c41b8cbf95be59f62771e38ea" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-27T11:51:29.35452" + } +} \ No newline at end of file diff --git a/modules/nf-core/upd/tests/nextflow.config b/modules/nf-core/upd/tests/nextflow.config new file mode 100644 index 00000000..6e07a4e4 --- /dev/null +++ b/modules/nf-core/upd/tests/nextflow.config @@ -0,0 +1,3 @@ +process { + ext.args = { "--proband earlycasualcaiman --father hugelymodelbat --mother slowlycivilbuck --af-tag AF regions" } +} diff --git a/modules/nf-core/vcf2cytosure/environment.yml b/modules/nf-core/vcf2cytosure/environment.yml index d4bf9959..d078bfae 100644 --- a/modules/nf-core/vcf2cytosure/environment.yml +++ b/modules/nf-core/vcf2cytosure/environment.yml @@ -1,7 +1,5 @@ -name: vcf2cytosure channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::vcf2cytosure=0.9.1 diff --git a/modules/nf-core/vcf2cytosure/meta.yml b/modules/nf-core/vcf2cytosure/meta.yml index 2430f1ae..0c38d9c8 100644 --- a/modules/nf-core/vcf2cytosure/meta.yml +++ b/modules/nf-core/vcf2cytosure/meta.yml @@ -1,4 +1,3 @@ ---- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: "vcf2cytosure" description: Convert VCF with structural variations to CytoSure format @@ -14,64 +13,65 @@ tools: documentation: "https://github.com/NBISweden/vcf2cytosure" tool_dev_url: "https://github.com/NBISweden/vcf2cytosure" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - 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 ]` - - sv_vcf: - type: file - description: VCF file with structural variants - pattern: "*.{vcf,vcf.gz}" - - coverage_bed: - type: file - description: Bed file with coverage data - pattern: "*.bed" - - cns: - type: file - description: CN file from CNVkit, not compatible with coverage_bed file - - snv_vcf: - type: file - description: | - VCF file with SNVs to calculate probe coverage, - not compatible with coverage_bed + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - sv_vcf: + type: file + description: VCF file with structural variants pattern: "*.{vcf,vcf.gz}" - - blacklist_bed: - type: file - description: Bed file with regions to exclude - pattern: "*.bed" - + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - coverage_bed: + type: file + description: Bed file with coverage data + pattern: "*.bed" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - cns: + type: file + description: CN file from CNVkit, not compatible with coverage_bed file + - - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - snv_vcf: + type: file + description: | + VCF file with SNVs to calculate probe coverage, + not compatible with coverage_bed + pattern: "*.{vcf,vcf.gz}" + - - blacklist_bed: + type: file + description: Bed file with regions to exclude + pattern: "*.bed" 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" - cgh: - type: file - description: SV:s in CytoSure format - pattern: "*.cgh" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.cgh": + type: file + description: SV:s in CytoSure format + pattern: "*.cgh" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jemten" diff --git a/modules/nf-core/vcf2cytosure/tests/main.nf.test b/modules/nf-core/vcf2cytosure/tests/main.nf.test index d017cb0e..edd3063d 100644 --- a/modules/nf-core/vcf2cytosure/tests/main.nf.test +++ b/modules/nf-core/vcf2cytosure/tests/main.nf.test @@ -15,11 +15,11 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_sv_vcf'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/NA24385_sv.vcf.gz', checkIfExists: true) ] ] input[1] = [ [ id:'test' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_coverage'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bedgraph/NA24385_coverage.bed', checkIfExists: true) ] ] input[2] = [ [:], [] ] input[3] = [ [:], [] ] @@ -47,11 +47,11 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_sv_vcf'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/NA24385_sv.vcf.gz', checkIfExists: true) ] ] input[1] = [ [ id:'test' ], // meta map - [ file(params.test_data['homo_sapiens']['illumina']['na24385_chr22_coverage'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bedgraph/NA24385_coverage.bed', checkIfExists: true) ] ] input[2] = [ [:], [] ] input[3] = [ [:], [] ] diff --git a/modules/nf-core/vcfanno/environment.yml b/modules/nf-core/vcfanno/environment.yml index f336cc6b..32c48b15 100644 --- a/modules/nf-core/vcfanno/environment.yml +++ b/modules/nf-core/vcfanno/environment.yml @@ -1,7 +1,5 @@ -name: vcfanno channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::vcfanno=0.3.5 diff --git a/modules/nf-core/vcfanno/meta.yml b/modules/nf-core/vcfanno/meta.yml index 89c781ad..18d27127 100644 --- a/modules/nf-core/vcfanno/meta.yml +++ b/modules/nf-core/vcfanno/meta.yml @@ -1,5 +1,6 @@ name: vcfanno -description: quickly annotate your VCF with any number of INFO fields from any number of VCFs or BED files +description: quickly annotate your VCF with any number of INFO fields from any number + of VCFs or BED files keywords: - vcf - bed @@ -14,48 +15,53 @@ tools: tool_dev_url: https://github.com/brentp/vcfanno doi: "10.1186/s13059-016-0973-5" license: ["MIT"] + identifier: biotools:vcfanno input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: query VCF file - pattern: "*.{vcf, vcf.gz}" - - vcf_tabix: - 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 - pattern: "*.toml" - - lua: - type: file - description: Lua file for custom annotations - pattern: "*.lua" - - resources: - type: map - description: List of reference files defined in toml config, must also include indices if bgzipped. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: query VCF file + pattern: "*.{vcf, vcf.gz}" + - tbi: + type: file + description: tabix index file for the query VCF + pattern: "*.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 + pattern: "*.toml" + - - lua: + type: file + description: Lua file for custom annotations + pattern: "*.lua" + - - resources: + type: map + description: List of reference files defined in toml config, must also include + indices if bgzipped. 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: Annotated VCF file - pattern: "*.vcf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.vcf": + type: file + description: Annotated VCF file + pattern: "*.vcf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@projectoriented" - "@matthdsm" diff --git a/modules/nf-core/vcfanno/tests/main.nf.test b/modules/nf-core/vcfanno/tests/main.nf.test index b28431b2..8bbcfd89 100644 --- a/modules/nf-core/vcfanno/tests/main.nf.test +++ b/modules/nf-core/vcfanno/tests/main.nf.test @@ -15,11 +15,11 @@ nextflow_process { """ input[0] = [ [ id:'test_compressed', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists:true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf', checkIfExists: true) ] - input[1] = file(params.test_data['homo_sapiens']['genome']['vcfanno_toml'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/vcfanno/vcfanno.toml', checkIfExists: true) input[2] = [] input[3] = [ file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz", checkIfExists: true), @@ -45,11 +45,11 @@ nextflow_process { """ input[0] = [ [ id:'test_uncompressed', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), [], - file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists:true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf', checkIfExists: true) ] - input[1] = file(params.test_data['homo_sapiens']['genome']['vcfanno_toml'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/vcfanno/vcfanno.toml', checkIfExists: true) input[2] = [] input[3] = [ file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz", checkIfExists: true), @@ -77,11 +77,11 @@ nextflow_process { """ input[0] = [ [ id:'test_compressed', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf'], checkIfExists:true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf', checkIfExists: true) ] - input[1] = file(params.test_data['homo_sapiens']['genome']['vcfanno_toml'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/vcf/vcfanno/vcfanno.toml', checkIfExists: true) input[2] = [] input[3] = [ file("https://github.com/brentp/vcfanno/raw/master/example/exac.vcf.gz", checkIfExists: true), From 0e1f3b2b115a2addcf21f8b37582df5eaec4cc7b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:29:02 +0200 Subject: [PATCH 1894/1921] subworkflow changes --- subworkflows/local/variant_calling/call_snv_deepvariant.nf | 3 +-- subworkflows/local/variant_calling/call_snv_sentieon.nf | 2 +- subworkflows/local/variant_calling/postprocess_MT_calls.nf | 7 +++---- workflows/raredisease.nf | 4 +++- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index 3104ee67..ab015c15 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -66,10 +66,9 @@ workflow CALL_SNV_DEEPVARIANT { REMOVE_DUPLICATES_GL.out.vcf .join(TABIX_GL.out.tbi) .combine(ch_varcallerbed) - .combine(ch_foundin_header) .set { ch_annotate_in } - BCFTOOLS_ANNOTATE(ch_annotate_in) + BCFTOOLS_ANNOTATE(ch_annotate_in, ch_foundin_header) TABIX_ANNOTATE(BCFTOOLS_ANNOTATE.out.vcf) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index a84be1ed..acd2ca3a 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -73,7 +73,7 @@ workflow CALL_SNV_SENTIEON { } .set{ ch_vcf_idx_merge_in } - BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple, ch_genome_fasta, ch_genome_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 -> diff --git a/subworkflows/local/variant_calling/postprocess_MT_calls.nf b/subworkflows/local/variant_calling/postprocess_MT_calls.nf index 4cd79882..9978ca29 100644 --- a/subworkflows/local/variant_calling/postprocess_MT_calls.nf +++ b/subworkflows/local/variant_calling/postprocess_MT_calls.nf @@ -93,10 +93,10 @@ workflow POSTPROCESS_MT_CALLS { BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, ch_genome_fasta, ch_genome_fai, - [] + [[:],[]] ) - BCFTOOLS_MERGE_MT.out.merged_variants + BCFTOOLS_MERGE_MT.out.vcf .mix(ch_case_vcf.single) .set { ch_addfoundintag_in } @@ -114,10 +114,9 @@ workflow POSTPROCESS_MT_CALLS { ch_addfoundintag_in .join(TABIX_TABIX_MERGE.out.tbi) .combine(ch_varcallerbed) - .combine(ch_foundin_header) .set { ch_annotate_in } - BCFTOOLS_ANNOTATE(ch_annotate_in) + BCFTOOLS_ANNOTATE(ch_annotate_in,ch_foundin_header) TABIX_ANNOTATE(BCFTOOLS_ANNOTATE.out.vcf) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 88b75a3a..a095192f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -912,7 +912,9 @@ workflow RAREDISEASE { ch_multiqc_files.collect(), ch_multiqc_config.toList(), ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList() + ch_multiqc_logo.toList(), + [], + [] ) emit: From 83cd07806cf5ca4f6b9e8e76d8da935a8259fba8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:17:30 +0200 Subject: [PATCH 1895/1921] update dv subworkflow --- subworkflows/local/variant_calling/call_snv_deepvariant.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index ab015c15..c535a1c4 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -5,7 +5,7 @@ include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_GL } from '../../../modules/nf-core/bcftools/norm/main' include { BCFTOOLS_NORM as REMOVE_DUPLICATES_GL } from '../../../modules/nf-core/bcftools/norm/main' -include { DEEPVARIANT } from '../../../modules/nf-core/deepvariant/main' +include { DEEPVARIANT_RUNDEEPVARIANT as DEEPVARIANT } from '../../../modules/nf-core/deepvariant/rundeepvariant/main' include { GLNEXUS } from '../../../modules/nf-core/glnexus/main' include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' From 75be509f6ff4fae738de156a57adc2ee47c87b78 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:18:29 +0200 Subject: [PATCH 1896/1921] update changelog --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9906e803..df58e3ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Update tools [#619](https://github.com/nf-core/raredisease/pull/619) - Report only variants above 5% heteroplasmy in the clinical vcf file for mitochondria [#616](https://github.com/nf-core/raredisease/pull/616) ### `Fixed` @@ -21,6 +22,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Tool updates +| Tool | Old version | New version | +| -------- | ----------- | ----------- | +| bcftools | 1.18 | 1.20 | +| mosdepth | 0.3.6 | 0.3.8 | +| multiqc | 1.21 | 1.25 | +| picard | 3.1.1 | 3.2.0 | +| samtools | 1.19.2 | 1.21 | +| stranger | 0.8.1 | 0.9.1 | +| tabix | 1.19.1 | 1.20 | + + + ## 2.2.0 - Dogmatix [2024-09-13] ### `Added` From ec580d8c1fe619c0a39cfe5674e580b041e1f22a Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:21:27 +0200 Subject: [PATCH 1897/1921] remove deepvariant --- CHANGELOG.md | 2 - modules.json | 25 -- modules/nf-core/deepvariant/README.md | 11 - .../nf-core/deepvariant/callvariants/main.nf | 58 --- .../nf-core/deepvariant/callvariants/meta.yml | 48 --- .../callvariants/tests/main.nf.test | 85 ----- .../callvariants/tests/main.nf.test.snap | 59 --- .../callvariants/tests/nextflow.config | 11 - .../deepvariant/callvariants/tests/tags.yml | 2 - modules/nf-core/deepvariant/main.nf | 78 ---- .../nf-core/deepvariant/makeexamples/main.nf | 66 ---- .../nf-core/deepvariant/makeexamples/meta.yml | 102 ----- .../makeexamples/tests/main.nf.test | 228 ----------- .../makeexamples/tests/main.nf.test.snap | 134 ------- .../makeexamples/tests/nextflow.config | 6 - .../deepvariant/makeexamples/tests/tags.yml | 2 - modules/nf-core/deepvariant/meta.yml | 92 ----- .../deepvariant/postprocessvariants/main.nf | 77 ---- .../deepvariant/postprocessvariants/meta.yml | 113 ------ .../postprocessvariants/tests/main.nf.test | 118 ------ .../tests/main.nf.test.snap | 180 --------- .../postprocessvariants/tests/nextflow.config | 10 - .../postprocessvariants/tests/tags.yml | 2 - .../deepvariant/rundeepvariant/main.nf | 78 ---- .../deepvariant/rundeepvariant/meta.yml | 122 ------ .../rundeepvariant/tests/main.nf.test | 166 -------- .../rundeepvariant/tests/main.nf.test.snap | 358 ------------------ .../tests/nextflow-intervals.config | 8 - .../nextflow-non-autosomal-calling.config | 8 - .../rundeepvariant/tests/nextflow.config | 8 - .../deepvariant/rundeepvariant/tests/tags.yml | 2 - .../nf-core/deepvariant/tests/main.nf.test | 165 -------- .../deepvariant/tests/main.nf.test.snap | 358 ------------------ .../tests/nextflow-intervals.config | 8 - .../nextflow-non-autosomal-calling.config | 8 - .../nf-core/deepvariant/tests/nextflow.config | 8 - modules/nf-core/deepvariant/tests/tags.yml | 2 - 37 files changed, 2808 deletions(-) delete mode 100644 modules/nf-core/deepvariant/README.md delete mode 100644 modules/nf-core/deepvariant/callvariants/main.nf delete mode 100644 modules/nf-core/deepvariant/callvariants/meta.yml delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/callvariants/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/main.nf delete mode 100644 modules/nf-core/deepvariant/makeexamples/main.nf delete mode 100644 modules/nf-core/deepvariant/makeexamples/meta.yml delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/makeexamples/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/meta.yml delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/main.nf delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/meta.yml delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/main.nf delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/meta.yml delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml delete mode 100644 modules/nf-core/deepvariant/tests/main.nf.test delete mode 100644 modules/nf-core/deepvariant/tests/main.nf.test.snap delete mode 100644 modules/nf-core/deepvariant/tests/nextflow-intervals.config delete mode 100644 modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config delete mode 100644 modules/nf-core/deepvariant/tests/nextflow.config delete mode 100644 modules/nf-core/deepvariant/tests/tags.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index df58e3ce..584ae7ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,8 +32,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | stranger | 0.8.1 | 0.9.1 | | tabix | 1.19.1 | 1.20 | - - ## 2.2.0 - Dogmatix [2024-09-13] ### `Added` diff --git a/modules.json b/modules.json index a6af5aa0..009546e7 100644 --- a/modules.json +++ b/modules.json @@ -111,31 +111,6 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, - "deepvariant": { - "branch": "master", - "git_sha": "a7e8b8afd4fa82f20d745fa778bfdbf39c1f7efb", - "installed_by": ["modules"] - }, - "deepvariant/callvariants": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "deepvariant/makeexamples": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "deepvariant/postprocessvariants": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, - "deepvariant/rundeepvariant": { - "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", - "installed_by": ["modules"] - }, "eklipse": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/deepvariant/README.md b/modules/nf-core/deepvariant/README.md deleted file mode 100644 index 9d1ceb34..00000000 --- a/modules/nf-core/deepvariant/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Conda is not supported at the moment - -The [bioconda](https://bioconda.github.io/recipes/deepvariant/README.html) recipe is not fully working as expected. - -See https://github.com/bioconda/bioconda-recipes/issues/30310 and https://github.com/nf-core/modules/issues/1754 for more information. - -Hence, we are using the docker container provided by the authors of the tool: - -- [google/deepvariant](https://hub.docker.com/r/google/deepvariant) - -This image is mirrored on the [nf-core quay.io](https://quay.io/repository/nf-core/deepvariant) for convenience. diff --git a/modules/nf-core/deepvariant/callvariants/main.nf b/modules/nf-core/deepvariant/callvariants/main.nf deleted file mode 100644 index 668b51ae..00000000 --- a/modules/nf-core/deepvariant/callvariants/main.nf +++ /dev/null @@ -1,58 +0,0 @@ - -process DEEPVARIANT_CALLVARIANTS { - tag "$meta.id" - label 'process_high' - - //Conda is not supported at the moment - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(make_examples_tfrecords) - - output: - tuple val(meta), path("${prefix}.call-*-of-*.tfrecord.gz"), emit: call_variants_tfrecords - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - - def matcher = make_examples_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ - if (!matcher.matches()) { - throw new IllegalArgumentException("tfrecord baseName '" + make_examples_tfrecords[0].baseName + "' doesn't match the expected pattern") - } - def examples_tfrecord_name = matcher[0][1] - def shardCount = matcher[0][2] - // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz - def examples_tfrecords_logical_name = "${examples_tfrecord_name}@${shardCount}.gz" - - """ - /opt/deepvariant/bin/call_variants \\ - ${args} \\ - --outfile "${prefix}.call.tfrecord.gz" \\ - --examples "${examples_tfrecords_logical_name}" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - echo "" | gzip > ${prefix}.call-00000-of-00001.tfrecord.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/callvariants/meta.yml b/modules/nf-core/deepvariant/callvariants/meta.yml deleted file mode 100644 index 4507192c..00000000 --- a/modules/nf-core/deepvariant/callvariants/meta.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: deepvariant_callvariants -description: Call variants from the examples produced by make_examples -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 - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - make_examples_tfrecords: - type: file - description: The actual sharded input files, from DEEPVARIANT_MAKEEXAMPLES process - pattern: "*.gz" -output: - - call_variants_tfrecords: - - meta: - type: list - description: | - Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. - - ${prefix}.call-*-of-*.tfrecord.gz: - type: list - description: | - Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. - - versions: - - versions.yml: - type: file - description: File containing software version - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" - - "@fa2k" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test deleted file mode 100644 index 72f04b51..00000000 --- a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test +++ /dev/null @@ -1,85 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_CALLVARIANTS" - script "../main.nf" - config "./nextflow.config" - process "DEEPVARIANT_CALLVARIANTS" - - tag "deepvariant/makeexamples" - tag "deepvariant/callvariants" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - wgs") { - setup { - run("DEEPVARIANT_MAKEEXAMPLES") { - script "../../makeexamples/main.nf" - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - } - when { - process { - """ - input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.call_variants_tfrecords.get(0).get(0) == [ id:'test', single_end:false ] }, - // The tfrecord binary representation is not stable, but we check the name of the output. - { assert snapshot(file(process.out.call_variants_tfrecords.get(0).get(1)).name).match("homo_sapiens-wgs-call_variants_tfrecords-filenames")}, - { assert snapshot(process.out.versions).match("versions") }, - ) - } - } - - test("homo_sapiens - wgs - stub") { - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta - [] // No input paths are needed in stub mode - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap deleted file mode 100644 index 8f04ede7..00000000 --- a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap +++ /dev/null @@ -1,59 +0,0 @@ -{ - "versions": { - "content": [ - [ - "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:38:47.927241" - }, - "homo_sapiens-wgs-call_variants_tfrecords-filenames": { - "content": [ - "test.call-00000-of-00001.tfrecord.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T17:04:33.276938" - }, - "homo_sapiens - wgs - stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" - ], - "call_variants_tfrecords": [ - [ - { - "id": "test", - "single_end": false - }, - "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "versions": [ - "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-13T21:07:17.335788301" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config deleted file mode 100644 index 590aa060..00000000 --- a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config +++ /dev/null @@ -1,11 +0,0 @@ -process { - withName: "DEEPVARIANT_CALLVARIANTS" { - ext.args = '--checkpoint "/opt/models/wgs"' - cpus = 2 // Keep CPUs fixed so the number of output files is reproducible - } -} -process { - withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--channels "insert_size"' - } -} diff --git a/modules/nf-core/deepvariant/callvariants/tests/tags.yml b/modules/nf-core/deepvariant/callvariants/tests/tags.yml deleted file mode 100644 index 02e63f50..00000000 --- a/modules/nf-core/deepvariant/callvariants/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/callvariants: - - modules/nf-core/deepvariant/callvariants/** diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf deleted file mode 100644 index 8d3d0911..00000000 --- a/modules/nf-core/deepvariant/main.nf +++ /dev/null @@ -1,78 +0,0 @@ -process DEEPVARIANT { - tag "$meta.id" - label 'process_high' - - // FIXME Conda is not supported at the moment - // BUG https://github.com/nf-core/modules/issues/1754 - // BUG https://github.com/bioconda/bioconda-recipes/issues/30310 - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(input), path(index), path(intervals) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(gzi) - tuple val(meta5), path(par_bed) - - output: - 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 - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def regions = intervals ? "--regions=${intervals}" : "" - def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" - // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 - // FIXME Revert this on next version bump - def VERSION = '1.6.1' - - """ - /opt/deepvariant/bin/run_deepvariant \\ - --ref=${fasta} \\ - --reads=${input} \\ - --output_vcf=${prefix}.vcf.gz \\ - --output_gvcf=${prefix}.g.vcf.gz \\ - ${args} \\ - ${regions} \\ - ${par_regions} \\ - --intermediate_results_dir=tmp \\ - --num_shards=${task.cpus} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant: $VERSION - END_VERSIONS - """ - - stub: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - prefix = task.ext.prefix ?: "${meta.id}" - // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 - // FIXME Revert this on next version bump - def VERSION = '1.6.1' - """ - 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}": - deepvariant: $VERSION - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/makeexamples/main.nf b/modules/nf-core/deepvariant/makeexamples/main.nf deleted file mode 100644 index 022d0bf2..00000000 --- a/modules/nf-core/deepvariant/makeexamples/main.nf +++ /dev/null @@ -1,66 +0,0 @@ -process DEEPVARIANT_MAKEEXAMPLES { - tag "$meta.id" - label 'process_high' - - //Conda is not supported at the moment - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(input), path(index), path(intervals) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(gzi) - tuple val(meta5), path(par_bed) - - output: - tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}"), emit: examples - tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), emit: gvcf - path "versions.yml", emit: versions - - when: - task.ext.when == null || task.ext.when - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def regions = intervals ? "--regions ${intervals}" : "" - def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" - - """ - seq 0 ${task.cpus - 1} | parallel -q --halt 2 --line-buffer /opt/deepvariant/bin/make_examples \\ - --mode calling \\ - --ref "${fasta}" \\ - --reads "${input}" \\ - --examples "./${prefix}.examples.tfrecord@${task.cpus}.gz" \\ - --gvcf "./${prefix}.gvcf.tfrecord@${task.cpus}.gz" \\ - ${regions} \\ - ${par_regions} \\ - ${args} \\ - --task {} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ - - stub: - prefix = task.ext.prefix ?: "${meta.id}" - """ - printf -v SHARD_COUNT "%04d" ${task.cpus} - for i in \$( seq -f "%04g" 0 ${task.cpus-1} ) - do - touch ${prefix}.examples.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz{,.example_info.json} - touch ${prefix}.gvcf.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz - done - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/makeexamples/meta.yml b/modules/nf-core/deepvariant/makeexamples/meta.yml deleted file mode 100644 index 6fb9f1b8..00000000 --- a/modules/nf-core/deepvariant/makeexamples/meta.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: deepvariant_makeexamples -description: Transforms the input alignments to a format suitable for the deep neural - network variant caller -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 - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.bam/cram" - - index: - type: file - description: Index of BAM/CRAM file - pattern: "*.bai/crai" - - intervals: - 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 - - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - pattern: "*.gzi" - - par_bed: - type: file - description: BED file containing PAR regions - pattern: "*.bed" -output: - - examples: - - meta: - type: list - description: | - Tuple containing sample metadata and examples that can be used for calling - - ${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}: - type: list - description: | - Tuple containing sample metadata and examples that can be used for calling - - gvcf: - - meta: - type: list - description: | - Tuple containing sample metadata and the GVCF data in tfrecord format - - ${prefix}.gvcf.tfrecord-*-of-*.gz: - type: list - description: | - Tuple containing sample metadata and the GVCF data in tfrecord format - - versions: - - versions.yml: - type: file - description: File containing the DeepVariant software version - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" - - "@fa2k" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test deleted file mode 100644 index d46dbe6d..00000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test +++ /dev/null @@ -1,228 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_MAKEEXAMPLES" - script "../main.nf" - config "./nextflow.config" - process "DEEPVARIANT_MAKEEXAMPLES" - - tag "deepvariant/makeexamples" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - [bam, bai] - fasta - fai") { - when { - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - // Test string values and versions. The tfrecords contents are not stable, but we check the names. - { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file name list - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test1-exaamples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf file name list - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test1-gvcf-filenames")}, - { assert snapshot(process.out.versions).match("test1-versions") }, - ) - } - } - - test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, - // The test is always run with 2 cpus - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file names - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test2-examples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf tfrecord file names - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test2-gvcf-filenames")}, - { assert snapshot(process.out.versions).match("test2-versions") }, - ) - } - } - - test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { - when { - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) - ] - input[3] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - - { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, - // The test is always run with 2 cpus - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file name list - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test3-examples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf file name list - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test3-gvcf-filenames")}, - { assert snapshot(process.out.versions).match("test3-versions") }, - ) - } - } - - test("stub") { - - options "-stub" - - when { - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert process.out.examples.get(0).get(1).size() == 4 }, - { assert snapshot( // Check examples (tfrecord / json) file name list - file(process.out.examples.get(0).get(1).get(0)).name, - file(process.out.examples.get(0).get(1).get(1)).name, - file(process.out.examples.get(0).get(1).get(2)).name, - file(process.out.examples.get(0).get(1).get(3)).name, - ).match("test4-examples-filenames")}, - - { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, - { assert process.out.gvcf.get(0).get(1).size() == 2 }, - { assert snapshot( // Check gvcf file name list - file(process.out.gvcf.get(0).get(1).get(0)).name, - file(process.out.gvcf.get(0).get(1).get(1)).name, - ).match("test4-gvcf-filenames")}, - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap deleted file mode 100644 index 24182c54..00000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap +++ /dev/null @@ -1,134 +0,0 @@ -{ - "test1-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:09:47.885995" - }, - "test2-examples-filenames": { - "content": [ - "test.examples.tfrecord-00000-of-00002.gz", - "test.examples.tfrecord-00000-of-00002.gz.example_info.json", - "test.examples.tfrecord-00001-of-00002.gz", - "test.examples.tfrecord-00001-of-00002.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:02.757227" - }, - "test2-versions": { - "content": [ - [ - "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:39:28.960959" - }, - "test4-examples-filenames": { - "content": [ - "test.examples.tfrecord-0000-of-0002.tfrecord.gz", - "test.examples.tfrecord-0000-of-0002.tfrecord.gz.example_info.json", - "test.examples.tfrecord-0001-of-0002.tfrecord.gz", - "test.examples.tfrecord-0001-of-0002.tfrecord.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:27.41698" - }, - "test1-versions": { - "content": [ - [ - "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:39:13.57526" - }, - "test3-examples-filenames": { - "content": [ - "test.examples.tfrecord-00000-of-00002.gz", - "test.examples.tfrecord-00000-of-00002.gz.example_info.json", - "test.examples.tfrecord-00001-of-00002.gz", - "test.examples.tfrecord-00001-of-00002.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:17.705948" - }, - "test2-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:02.765863" - }, - "test4-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-0000-of-0002.tfrecord.gz", - "test.gvcf.tfrecord-0001-of-0002.tfrecord.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:27.423442" - }, - "test3-versions": { - "content": [ - [ - "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" - ] - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:39:44.83616" - }, - "test1-exaamples-filenames": { - "content": [ - "test.examples.tfrecord-00000-of-00002.gz", - "test.examples.tfrecord-00000-of-00002.gz.example_info.json", - "test.examples.tfrecord-00001-of-00002.gz", - "test.examples.tfrecord-00001-of-00002.gz.example_info.json" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:09:47.874585" - }, - "test3-gvcf-filenames": { - "content": [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-09-04T16:10:17.714443" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config deleted file mode 100644 index 5f071fcb..00000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config +++ /dev/null @@ -1,6 +0,0 @@ -process { - withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--channels "insert_size"' - cpus = 2 // The number of output files is determined by cpus - keep it the same for tests - } -} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/tags.yml b/modules/nf-core/deepvariant/makeexamples/tests/tags.yml deleted file mode 100644 index 6a13da09..00000000 --- a/modules/nf-core/deepvariant/makeexamples/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/makeexamples: - - modules/nf-core/deepvariant/makeexamples/** diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml deleted file mode 100644 index 2327dd5f..00000000 --- a/modules/nf-core/deepvariant/meta.yml +++ /dev/null @@ -1,92 +0,0 @@ -name: deepvariant -description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data -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 - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.bam/cram" - - index: - type: file - description: Index of BAM/CRAM file - pattern: "*.bai/crai" - - interval: - 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 - pattern: "*.gzi" - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - par_bed: - type: file - description: BED file containing PAR regions - pattern: "*.bed" -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" - - gvcf: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@abhi18av" - - "@ramprasadn" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/postprocessvariants/main.nf b/modules/nf-core/deepvariant/postprocessvariants/main.nf deleted file mode 100644 index 90e8563d..00000000 --- a/modules/nf-core/deepvariant/postprocessvariants/main.nf +++ /dev/null @@ -1,77 +0,0 @@ -process DEEPVARIANT_POSTPROCESSVARIANTS { - tag "$meta.id" - label 'process_medium' - - //Conda is not supported at the moment - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords) - 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}.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 - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - - def variant_calls_tfrecord_name = variant_calls_tfrecord_files[0].name.replaceFirst(/-\d{5}-of-\d{5}/, "") - - def gvcf_matcher = gvcf_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ - if (!gvcf_matcher.matches()) { - throw new IllegalArgumentException("tfrecord baseName '" + gvcf_tfrecords[0].baseName + "' doesn't match the expected pattern") - } - def gvcf_tfrecord_name = gvcf_matcher[0][1] - def gvcf_shardCount = gvcf_matcher[0][2] - // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz - def gvcf_tfrecords_logical_name = "${gvcf_tfrecord_name}@${gvcf_shardCount}.gz" - - """ - /opt/deepvariant/bin/postprocess_variants \\ - ${args} \\ - --ref "${fasta}" \\ - --infile "${variant_calls_tfrecord_name}" \\ - --outfile "${prefix}.vcf.gz" \\ - --nonvariant_site_tfrecord_path "${gvcf_tfrecords_logical_name}" \\ - --gvcf_outfile "${prefix}.g.vcf.gz" \\ - --cpus $task.cpus - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_postprocessvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ - - stub: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - prefix = task.ext.prefix ?: "${meta.id}" - """ - echo "" | gzip > ${prefix}.vcf.gz - touch ${prefix}.vcf.gz.tbi - echo "" | gzip > ${prefix}.g.vcf.gz - touch ${prefix}.g.vcf.gz.tbi - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/postprocessvariants/meta.yml b/modules/nf-core/deepvariant/postprocessvariants/meta.yml deleted file mode 100644 index 132a5263..00000000 --- a/modules/nf-core/deepvariant/postprocessvariants/meta.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: deepvariant_postprocessvariants -description: DeepVariant is an analysis pipeline that uses a deep neural network to - call genetic variants from next-generation DNA sequencing data -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 - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - variant_calls_tfrecord_files: - type: file - description: | - One or more data files containing variant calls from DEEPVARIANT_CALLVARIANTS - pattern: "*.tfrecord.gz" - - gvcf_tfrecords: - type: file - description: | - Sharded tfrecord file from DEEPVARIANT_MAKEEXAMPLES with the coverage information used for GVCF output - pattern: "*.gz" - - - 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 - pattern: "*.gzi" -output: - - vcf: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.vcf.gz: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" - - vcf_tbi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.vcf.gz.tbi: - type: file - description: Index for VCF - pattern: "*.vcf.gz.tbi" - - gvcf: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.g.vcf.gz: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" - - gvcf_tbi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.g.vcf.gz.tbi: - type: file - description: Index for GVCF - pattern: "*.g.vcf.gz.tbi" - - versions: - - versions.yml: - type: file - description: File containing software version - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" - - "@fa2k" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test deleted file mode 100644 index e4e9b557..00000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test +++ /dev/null @@ -1,118 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_POSTPROCESSVARIANTS" - script "../main.nf" - process "DEEPVARIANT_POSTPROCESSVARIANTS" - config "./nextflow.config" - - tag "deepvariant/makeexamples" - tag "deepvariant/callvariants" - tag "deepvariant/postprocessvariants" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - wgs") { - setup { - run("DEEPVARIANT_MAKEEXAMPLES") { - script "../../makeexamples/main.nf" - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - run("DEEPVARIANT_CALLVARIANTS") { - script "../../callvariants/main.nf" - process { - """ - input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples - """ - } - } - } - when { - process { - """ - input[0] = DEEPVARIANT_CALLVARIANTS.out.call_variants_tfrecords.join( - DEEPVARIANT_MAKEEXAMPLES.out.gvcf, - failOnMismatch: true - ) - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - wgs - stub") { - options "-stub" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], - [], - [], - [], - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match("stub") } - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap deleted file mode 100644 index 5a29c624..00000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap +++ /dev/null @@ -1,180 +0,0 @@ -{ - "stub": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:40:38.231189" - }, - "homo_sapiens - wgs": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-09T16:46:15.793662" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config deleted file mode 100644 index 070b4892..00000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config +++ /dev/null @@ -1,10 +0,0 @@ -process { - withName: "DEEPVARIANT_CALLVARIANTS" { - ext.args = '--checkpoint "/opt/models/wgs"' - } -} -process { - withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--channels "insert_size"' - } -} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml b/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml deleted file mode 100644 index d26188cd..00000000 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/postprocessvariants: - - modules/nf-core/deepvariant/postprocessvariants/** diff --git a/modules/nf-core/deepvariant/rundeepvariant/main.nf b/modules/nf-core/deepvariant/rundeepvariant/main.nf deleted file mode 100644 index 7f99c53f..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/main.nf +++ /dev/null @@ -1,78 +0,0 @@ -process DEEPVARIANT_RUNDEEPVARIANT { - tag "$meta.id" - label 'process_high' - - // FIXME Conda is not supported at the moment - // BUG https://github.com/nf-core/modules/issues/1754 - // BUG https://github.com/bioconda/bioconda-recipes/issues/30310 - container "nf-core/deepvariant:1.6.1" - - input: - tuple val(meta), path(input), path(index), path(intervals) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) - tuple val(meta4), path(gzi) - tuple val(meta5), path(par_bed) - - output: - 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 - - script: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def regions = intervals ? "--regions=${intervals}" : "" - def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" - // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 - // FIXME Revert this on next version bump - def VERSION = '1.6.1' - - """ - /opt/deepvariant/bin/run_deepvariant \\ - --ref=${fasta} \\ - --reads=${input} \\ - --output_vcf=${prefix}.vcf.gz \\ - --output_gvcf=${prefix}.g.vcf.gz \\ - ${args} \\ - ${regions} \\ - ${par_regions} \\ - --intermediate_results_dir=tmp \\ - --num_shards=${task.cpus} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - deepvariant: $VERSION - END_VERSIONS - """ - - stub: - // Exit if running this module with -profile conda / -profile mamba - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." - } - prefix = task.ext.prefix ?: "${meta.id}" - // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 - // FIXME Revert this on next version bump - def VERSION = '1.6.1' - """ - 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}": - deepvariant: $VERSION - END_VERSIONS - """ -} diff --git a/modules/nf-core/deepvariant/rundeepvariant/meta.yml b/modules/nf-core/deepvariant/rundeepvariant/meta.yml deleted file mode 100644 index 29b45ff9..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/meta.yml +++ /dev/null @@ -1,122 +0,0 @@ -name: deepvariant_rundeepvariant -description: DeepVariant is an analysis pipeline that uses a deep neural network to - call genetic variants from next-generation DNA sequencing data -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 - homepage: https://github.com/google/deepvariant - documentation: https://github.com/google/deepvariant - tool_dev_url: https://github.com/google/deepvariant - doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] - identifier: biotools:deepvariant -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - input: - type: file - description: BAM/CRAM file - pattern: "*.bam/cram" - - index: - type: file - description: Index of BAM/CRAM file - pattern: "*.bai/crai" - - intervals: - type: file - description: file containing intervals - - - 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 - pattern: "*.gzi" - - - meta5: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - par_bed: - type: file - description: BED file containing PAR regions - pattern: "*.bed" -output: - - vcf: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.vcf.gz: - type: file - description: Compressed VCF file - pattern: "*.vcf.gz" - - vcf_tbi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.vcf.gz.tbi: - type: file - description: Tabix index file of compressed VCF - pattern: "*.vcf.gz.tbi" - - gvcf: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.g.vcf.gz: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" - - gvcf_tbi: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.g.vcf.gz.tbi: - type: file - description: Tabix index file of compressed GVCF - pattern: "*.g.vcf.gz.tbi" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@abhi18av" - - "@ramprasadn" -maintainers: - - "@abhi18av" - - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test deleted file mode 100644 index 0790fb81..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test +++ /dev/null @@ -1,166 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT_RUNDEEPVARIANT" - script "../main.nf" - process "DEEPVARIANT_RUNDEEPVARIANT" - - tag "deepvariant/rundeepvariant" - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - [bam, bai] - fasta - fai") { - when { - config "./nextflow.config" - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { - config "./nextflow-intervals.config" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed") { - config "./nextflow-non-autosomal-calling.config" - tag "test" - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.blacklist_intervals.bed', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { - when { - config "./nextflow.config" - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) - ] - input[3] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - -} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap deleted file mode 100644 index 1ec351ee..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap +++ /dev/null @@ -1,358 +0,0 @@ -{ - "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-29T11:36:27.325363" - }, - "homo_sapiens - [bam, bai] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-29T11:34:41.779153" - }, - "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-29T11:35:16.993129" - }, - "homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" - ] - ], - "4": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" - ] - ], - "versions": [ - "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" - }, - "timestamp": "2024-08-29T11:35:52.23093" - } -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config deleted file mode 100644 index 78d8d598..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - - withName: DEEPVARIANT_RUNDEEPVARIANT { - ext.args = '--model_type=WGS ' - ext.prefix = { "${meta.id}_out" } - } - -} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config deleted file mode 100644 index 6d265292..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - - withName: DEEPVARIANT_RUNDEEPVARIANT { - ext.args = '--model_type=WGS --haploid_contigs chr22' - ext.prefix = { "${meta.id}_out" } - } - -} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config deleted file mode 100644 index 77e355ca..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - - withName: DEEPVARIANT_RUNDEEPVARIANT { - ext.args = ' --regions=\"chr22:0-40001\" --model_type=WGS ' - ext.prefix = { "${meta.id}_out" } - } - -} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml deleted file mode 100644 index 958b8e41..00000000 --- a/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant/rundeepvariant: - - modules/nf-core/deepvariant/rundeepvariant/** diff --git a/modules/nf-core/deepvariant/tests/main.nf.test b/modules/nf-core/deepvariant/tests/main.nf.test deleted file mode 100644 index 17765233..00000000 --- a/modules/nf-core/deepvariant/tests/main.nf.test +++ /dev/null @@ -1,165 +0,0 @@ -nextflow_process { - - name "Test Process DEEPVARIANT" - script "../main.nf" - process "DEEPVARIANT" - - tag "deepvariant" - tag "modules" - tag "modules_nfcore" - - test("homo_sapiens - [bam, bai] - fasta - fai") { - when { - config "./nextflow.config" - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { - config "./nextflow-intervals.config" - - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed") { - config "./nextflow-non-autosomal-calling.config" - tag "test" - when { - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [ - [],[] - ] - input[4] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.blacklist_intervals.bed', checkIfExists: true) - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - - test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { - when { - config "./nextflow.config" - - process { - """ - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - [] - ] - input[1] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) - ] - input[2] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) - ] - input[3] = [ - [ id:'genome'], - file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) - ] - input[4] = [ - [],[] - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - ) - } - } - -} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/tests/main.nf.test.snap deleted file mode 100644 index 04f87774..00000000 --- a/modules/nf-core/deepvariant/tests/main.nf.test.snap +++ /dev/null @@ -1,358 +0,0 @@ -{ - "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-01T12:09:40.987117305" - }, - "homo_sapiens - [bam, bai] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-01T12:08:47.058887374" - }, - "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "4": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" - ] - ], - "versions": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-07-01T12:09:13.952808655" - }, - "homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" - ] - ], - "4": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" - ] - ], - "versions": [ - "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" - ] - } - ], - "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.3" - }, - "timestamp": "2024-07-23T14:29:24.939680679" - } -} diff --git a/modules/nf-core/deepvariant/tests/nextflow-intervals.config b/modules/nf-core/deepvariant/tests/nextflow-intervals.config deleted file mode 100644 index 6d135f9f..00000000 --- a/modules/nf-core/deepvariant/tests/nextflow-intervals.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - - withName: DEEPVARIANT { - ext.args = '--model_type=WGS ' - ext.prefix = { "${meta.id}_out" } - } - -} diff --git a/modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config b/modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config deleted file mode 100644 index 4be8986b..00000000 --- a/modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - - withName: DEEPVARIANT { - ext.args = '--model_type=WGS --haploid_contigs chr22' - ext.prefix = { "${meta.id}_out" } - } - -} diff --git a/modules/nf-core/deepvariant/tests/nextflow.config b/modules/nf-core/deepvariant/tests/nextflow.config deleted file mode 100644 index d335d30b..00000000 --- a/modules/nf-core/deepvariant/tests/nextflow.config +++ /dev/null @@ -1,8 +0,0 @@ -process { - - withName: DEEPVARIANT { - ext.args = ' --regions=\"chr22:0-40001\" --model_type=WGS ' - ext.prefix = { "${meta.id}_out" } - } - -} diff --git a/modules/nf-core/deepvariant/tests/tags.yml b/modules/nf-core/deepvariant/tests/tags.yml deleted file mode 100644 index 8e838c7b..00000000 --- a/modules/nf-core/deepvariant/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -deepvariant: - - modules/nf-core/deepvariant/** From 5374f8d60ba539d12d5c2b98f016c612d184376c Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:22:15 +0200 Subject: [PATCH 1898/1921] add latest dv --- modules.json | 5 + .../deepvariant/rundeepvariant/main.nf | 78 ++++ .../deepvariant/rundeepvariant/meta.yml | 122 ++++++ .../rundeepvariant/tests/main.nf.test | 166 ++++++++ .../rundeepvariant/tests/main.nf.test.snap | 358 ++++++++++++++++++ .../tests/nextflow-intervals.config | 8 + .../nextflow-non-autosomal-calling.config | 8 + .../rundeepvariant/tests/nextflow.config | 8 + .../deepvariant/rundeepvariant/tests/tags.yml | 2 + 9 files changed, 755 insertions(+) create mode 100644 modules/nf-core/deepvariant/rundeepvariant/main.nf create mode 100644 modules/nf-core/deepvariant/rundeepvariant/meta.yml create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml diff --git a/modules.json b/modules.json index 009546e7..f25dbf2c 100644 --- a/modules.json +++ b/modules.json @@ -111,6 +111,11 @@ "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, + "deepvariant/rundeepvariant": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "eklipse": { "branch": "master", "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", diff --git a/modules/nf-core/deepvariant/rundeepvariant/main.nf b/modules/nf-core/deepvariant/rundeepvariant/main.nf new file mode 100644 index 00000000..7f99c53f --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/main.nf @@ -0,0 +1,78 @@ +process DEEPVARIANT_RUNDEEPVARIANT { + tag "$meta.id" + label 'process_high' + + // FIXME Conda is not supported at the moment + // BUG https://github.com/nf-core/modules/issues/1754 + // BUG https://github.com/bioconda/bioconda-recipes/issues/30310 + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(input), path(index), path(intervals) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(gzi) + tuple val(meta5), path(par_bed) + + output: + 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 + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def regions = intervals ? "--regions=${intervals}" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' + + """ + /opt/deepvariant/bin/run_deepvariant \\ + --ref=${fasta} \\ + --reads=${input} \\ + --output_vcf=${prefix}.vcf.gz \\ + --output_gvcf=${prefix}.g.vcf.gz \\ + ${args} \\ + ${regions} \\ + ${par_regions} \\ + --intermediate_results_dir=tmp \\ + --num_shards=${task.cpus} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant: $VERSION + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + prefix = task.ext.prefix ?: "${meta.id}" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' + """ + 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}": + deepvariant: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/meta.yml b/modules/nf-core/deepvariant/rundeepvariant/meta.yml new file mode 100644 index 00000000..29b45ff9 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/meta.yml @@ -0,0 +1,122 @@ +name: deepvariant_rundeepvariant +description: DeepVariant is an analysis pipeline that uses a deep neural network to + call genetic variants from next-generation DNA sequencing data +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 + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.bam/cram" + - index: + type: file + description: Index of BAM/CRAM file + pattern: "*.bai/crai" + - intervals: + type: file + description: file containing intervals + - - 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 + pattern: "*.gzi" + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - par_bed: + type: file + description: BED file containing PAR regions + pattern: "*.bed" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - vcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz.tbi: + type: file + description: Tabix index file of compressed VCF + pattern: "*.vcf.gz.tbi" + - gvcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - gvcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz.tbi: + type: file + description: Tabix index file of compressed GVCF + pattern: "*.g.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test new file mode 100644 index 00000000..0790fb81 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test @@ -0,0 +1,166 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_RUNDEEPVARIANT" + script "../main.nf" + process "DEEPVARIANT_RUNDEEPVARIANT" + + tag "deepvariant/rundeepvariant" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - [bam, bai] - fasta - fai") { + when { + config "./nextflow.config" + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { + config "./nextflow-intervals.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed") { + config "./nextflow-non-autosomal-calling.config" + tag "test" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.blacklist_intervals.bed', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { + when { + config "./nextflow.config" + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap new file mode 100644 index 00000000..1ec351ee --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap @@ -0,0 +1,358 @@ +{ + "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:36:27.325363" + }, + "homo_sapiens - [bam, bai] - fasta - fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:34:41.779153" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:35:16.993129" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:35:52.23093" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config new file mode 100644 index 00000000..78d8d598 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=WGS ' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config new file mode 100644 index 00000000..6d265292 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=WGS --haploid_contigs chr22' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config new file mode 100644 index 00000000..77e355ca --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = ' --regions=\"chr22:0-40001\" --model_type=WGS ' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml new file mode 100644 index 00000000..958b8e41 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/rundeepvariant: + - modules/nf-core/deepvariant/rundeepvariant/** From a910e4293ce6553093b7fb2279f785d3fe64a949 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:41:13 +0200 Subject: [PATCH 1899/1921] update align --- subworkflows/local/align.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 5eeb6862..14d545ea 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -48,7 +48,7 @@ workflow ALIGN { ch_versions = Channel.empty() if (!params.skip_fastp) { - FASTP (ch_reads, [], false, false) + FASTP (ch_reads, [], false, false, false) ch_reads = FASTP.out.reads ch_versions = ch_versions.mix(FASTP.out.versions) ch_fastp_json = FASTP.out.json From da4223bc343fd6ad0dae28c5ffe30026c6da6027 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:47:22 +0200 Subject: [PATCH 1900/1921] change prefix --- conf/modules/annotate_genome_snvs.config | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index fe8d807f..ceac8ed5 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -40,21 +40,21 @@ process { } withName: '.*ANNOTATE_GENOME_SNVS:UPD_SITES' { - ext.prefix = { "${vcf.simpleName}_upd_sites" } + ext.prefix = { "${meta.upd_child}_upd_sites" } ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} sites"} ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } } withName: '.*ANNOTATE_GENOME_SNVS:UPD_REGIONS' { - ext.prefix = { "${vcf.simpleName}_upd_regions" } + ext.prefix = { "${meta.upd_child}_upd_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_GENOME_SNVS:CHROMOGRAPH_SITES' { - ext.prefix = { "${sites.simpleName}_chromograph" } + ext.prefix = { "${meta7.upd_child}_chromograph_sites" } ext.args = { "--euploid" } - tag = {"${meta7.id}"} + tag = {"${meta7.upd_child}"} publishDir = [ path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, @@ -63,10 +63,10 @@ process { } withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_REGIONS' { - ext.prefix = { "${regions.simpleName}_chromograph" } + ext.prefix = { "${meta6.upd_child}_chromograph_regions" } ext.args = { '--euploid' } ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } - tag = {"${meta6.id}"} + tag = {"${meta6.upd_child}"} publishDir = [ path: { "${params.outdir}/annotate_snv/genome" }, mode: params.publish_dir_mode, From fb3e15bfcdfcb5d5c9f145577c05c327bef9def5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:41:21 +0200 Subject: [PATCH 1901/1921] update output docs --- docs/output.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/output.md b/docs/output.md index c96f5700..bda5bc96 100644 --- a/docs/output.md +++ b/docs/output.md @@ -61,14 +61,14 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Alignment and variant calling](#alignment-and-variant-calling) - [MT deletion script](#mt-deletion-script) - [eKLIPse](#eklipse) - - [Annotation:](#annotation) + - [Annotation](#annotation) - [HaploGrep2](#haplogrep2) - [vcfanno](#vcfanno-1) - [CADD](#cadd-1) - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter_vep](#filter_vep) + - [Filter\_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) @@ -404,9 +404,9 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e Output files - `annotate_snv/genome/*sites_chromograph` - - `_rohann_vcfanno_upd_sites_.png`: file containing a plot showing upd sites across chromosomes. + - `_rohann_vcfanno_upd_sites_.png`: file containing a plot showing upd sites across chromosomes. - `annotate_snv/genome/*regions_chromograph` - - `_rohann_vcfanno_upd_regions_.png`: file containing a plot showing upd regions across chromosomes. + - `_rohann_vcfanno_upd_regions_.png`: file containing a plot showing upd regions across chromosomes. - `annotate_snv/genome/*autozyg_chromograph` - `_rhocallviz_.png`: file containing a plot showing regions of autozygosity across chromosomes. @@ -450,7 +450,7 @@ Mitochondrial analysis is run by default. If you want to turn off annotations se #### Alignment and variant calling -[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-) The mitochondrial genome poses several challenges to the identification and understanding of somatic variants. The circularity of the mitochondrial genome means that the breakpoint in the reference genome is at an arbitrary position in the non-coding control region, creating a challenge in analyzing variation. Additionally, insertions of mitochondrial DNA into the nuclear genome (NuMTs) complicate the mapping of the mitochondrial genome and the distinction between NuMTs and the mitochondrial contig of interest. Lastly, mitochondrial variants often have very low heteroplasmy. Such low allele fraction (AF) variants can thus be mistaken for inherent sequencer noise. +[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-) The mitochondrial genome poses several challenges to the identification and understanding of somatic variants. The circularity of the mitochondrial genome means that the breakpoint in the reference genome is at an arbitrary position in the non-coding control region, creating a challenge in analyzing variation. Additionally, insertions of mitochondrial DNA into the nuclear genome (NuMTs) complicate the mapping of the mitochondrial genome and the distinction between NuMTs and the mitochondrial contig of interest. Lastly, mitochondrial variants often have very low heteroplasmy. Such low allele fraction (AF) variants can thus be mistaken for inherent sequencer noise. 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. @@ -474,7 +474,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen - `eKLIPse__genes.csv`: file summarizing cumulated deletions per mtDNA gene. - `eKLIPse_.png`: circos plot. -#### Annotation: +#### Annotation ##### HaploGrep2 From f07fc1991a6bb6faa25aa068aca7dc2357fe8cb1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:43:58 +0200 Subject: [PATCH 1902/1921] update changelog [skip ci] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9906e803..fe450f46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Update output file name prefix for upd and chromograph [#620](https://github.com/nf-core/raredisease/pull/620) - Report only variants above 5% heteroplasmy in the clinical vcf file for mitochondria [#616](https://github.com/nf-core/raredisease/pull/616) ### `Fixed` From a7b38b449141e206f26734e667958602bdedc8ad Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:46:09 +0200 Subject: [PATCH 1903/1921] update output doc --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index bda5bc96..8dd98773 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter\_vep](#filter_vep) + - [Filter_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) From 43daf362cee1798f1bb425a82aec812f4131c715 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:56:53 +0200 Subject: [PATCH 1904/1921] fix [skip ci] --- CHANGELOG.md | 2 ++ workflows/raredisease.nf | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9906e803..8569e67b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` + +- Rhocallviz subworkflow will only be invocated once per sample [#621](https://github.com/nf-core/raredisease/pull/621) - Allow for VEP version 112 to be used and set it to default [#617](https://github.com/nf-core/raredisease/pull/617) ### Parameters diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 88b75a3a..255422b8 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -182,7 +182,12 @@ workflow RAREDISEASE { ch_versions = Channel.empty() ch_multiqc_files = Channel.empty() - ch_samples = ch_samplesheet.map { meta, fastqs -> meta} + ch_samples = ch_samplesheet.map { meta, fastqs -> + new_id = meta.sample + new_meta = meta - meta.subMap('lane', 'read_group') + [id:new_id] + return new_meta + }.unique() + ch_case_info = ch_samples.toList().map { CustomFunctions.createCaseChannel(it) } // From f0a965d8b1f3bde6c8e9c1eb7f62a664cdc88a82 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:57:47 +0200 Subject: [PATCH 1905/1921] remove blank line [skip ci] --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4e5fc10..c8393149 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` - - Rhocallviz subworkflow will only be invocated once per sample [#621](https://github.com/nf-core/raredisease/pull/621) - Allow for VEP version 112 to be used and set it to default [#617](https://github.com/nf-core/raredisease/pull/617) From 4a9b0ae4713d27745c4bf4233754bac7c5a4238b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:07:44 +0200 Subject: [PATCH 1906/1921] Update CHANGELOG.md Co-authored-by: Annick Renevey <47788523+rannick@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e86f955..e1931c63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` -- Update output file name prefix for upd and chromograph [#620](https://github.com/nf-core/raredisease/pull/620) +- Update output file name prefix for upd and chromograph to sample-based [#620](https://github.com/nf-core/raredisease/pull/620) - Update tools [#619](https://github.com/nf-core/raredisease/pull/619) - Report only variants above 5% heteroplasmy in the clinical vcf file for mitochondria [#616](https://github.com/nf-core/raredisease/pull/616) From 42c5fec2ceb4c9a79875878bf8589e1eedeefd70 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:23:41 +0200 Subject: [PATCH 1907/1921] updates --- modules.json | 20 +- .../bedtools/genomecov/environment.yml | 2 - modules/nf-core/bedtools/genomecov/main.nf | 11 +- modules/nf-core/bedtools/genomecov/meta.yml | 72 +- .../bedtools/genomecov/tests/main.nf.test | 78 +- .../genomecov/tests/main.nf.test.snap | 131 +++- .../nf-core/bedtools/genomecov/tests/tags.yml | 2 - modules/nf-core/rtgtools/vcfeval/main.nf | 20 +- modules/nf-core/rtgtools/vcfeval/meta.yml | 4 +- .../rtgtools/vcfeval/tests/main.nf.test | 113 +++ .../rtgtools/vcfeval/tests/main.nf.test.snap | 677 ++++++++++++++++++ .../rtgtools/vcfeval/tests/nextflow.config | 4 + .../nf-core/sentieon/bwaindex/environment.yml | 2 - modules/nf-core/sentieon/bwaindex/main.nf | 26 +- modules/nf-core/sentieon/bwaindex/meta.yml | 41 +- .../nf-core/sentieon/bwamem/environment.yml | 2 - modules/nf-core/sentieon/bwamem/main.nf | 67 +- modules/nf-core/sentieon/bwamem/meta.yml | 106 +-- .../sentieon/bwamem/tests/main.nf.test | 262 +++++++ .../sentieon/bwamem/tests/main.nf.test.snap | 187 +++++ .../sentieon/bwamem/tests/nextflow.config | 15 + .../bwamem/tests/nextflow_out_cram.config | 16 + .../nf-core/sentieon/bwamem/tests/tags.yml | 2 + .../sentieon/datametrics/environment.yml | 2 - modules/nf-core/sentieon/datametrics/main.nf | 70 +- modules/nf-core/sentieon/datametrics/meta.yml | 198 +++-- .../sentieon/datametrics/tests/main.nf.test | 109 +++ .../datametrics/tests/main.nf.test.snap | 545 ++++++++++++++ .../datametrics/tests/nextflow.config | 16 + .../nf-core/sentieon/dedup/environment.yml | 2 - modules/nf-core/sentieon/dedup/main.nf | 72 +- modules/nf-core/sentieon/dedup/meta.yml | 164 +++-- .../nf-core/sentieon/dedup/tests/main.nf.test | 90 +++ .../sentieon/dedup/tests/main.nf.test.snap | 359 ++++++++++ .../sentieon/dedup/tests/nextflow.config | 9 + .../dedup/tests/nextflow_rmdup.config | 15 + .../sentieon/dnamodelapply/environment.yml | 2 - .../nf-core/sentieon/dnamodelapply/main.nf | 51 +- .../nf-core/sentieon/dnamodelapply/meta.yml | 119 +-- .../nf-core/sentieon/dnascope/environment.yml | 2 - modules/nf-core/sentieon/dnascope/main.nf | 50 +- modules/nf-core/sentieon/dnascope/meta.yml | 213 +++--- .../sentieon/readwriter/environment.yml | 2 - modules/nf-core/sentieon/readwriter/main.nf | 75 +- modules/nf-core/sentieon/readwriter/meta.yml | 116 +-- .../sentieon/readwriter/tests/main.nf.test | 168 +++++ .../readwriter/tests/main.nf.test.snap | 125 ++++ .../sentieon/readwriter/tests/nextflow.config | 9 + .../tests/nextflow_outputcram.config | 16 + .../sentieon/wgsmetrics/environment.yml | 2 - modules/nf-core/sentieon/wgsmetrics/main.nf | 50 +- modules/nf-core/sentieon/wgsmetrics/meta.yml | 107 +-- 52 files changed, 3722 insertions(+), 896 deletions(-) delete mode 100644 modules/nf-core/bedtools/genomecov/tests/tags.yml create mode 100644 modules/nf-core/rtgtools/vcfeval/tests/main.nf.test create mode 100644 modules/nf-core/rtgtools/vcfeval/tests/main.nf.test.snap create mode 100644 modules/nf-core/rtgtools/vcfeval/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/bwamem/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/bwamem/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config create mode 100644 modules/nf-core/sentieon/bwamem/tests/tags.yml create mode 100644 modules/nf-core/sentieon/datametrics/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/datametrics/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/dedup/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/dedup/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/dedup/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config create mode 100644 modules/nf-core/sentieon/readwriter/tests/main.nf.test create mode 100644 modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap create mode 100644 modules/nf-core/sentieon/readwriter/tests/nextflow.config create mode 100644 modules/nf-core/sentieon/readwriter/tests/nextflow_outputcram.config diff --git a/modules.json b/modules.json index f25dbf2c..1f876eee 100644 --- a/modules.json +++ b/modules.json @@ -52,7 +52,7 @@ }, "bedtools/genomecov": { "branch": "master", - "git_sha": "81b90194ce9911dbd55bba2c65c6919f6677abc4", + "git_sha": "bfa8975eefb8df3e480a44ac9e594f23f52b2963", "installed_by": ["modules"] }, "bwa/index": { @@ -369,7 +369,7 @@ }, "rtgtools/vcfeval": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "83e2df1e4ec594beb8a575b4db0b4197900f4ebd", "installed_by": ["modules"] }, "samtools/faidx": { @@ -404,42 +404,42 @@ }, "sentieon/bwaindex": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/bwamem": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/datametrics": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "2da71b7a52a7c6609cb8f29d316ed3fd90d0f7cc", "installed_by": ["modules"] }, "sentieon/dedup": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/dnamodelapply": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/dnascope": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/readwriter": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "sentieon/wgsmetrics": { "branch": "master", - "git_sha": "e809c6b078d5343bdf8b5b2b78483096a2b5a973", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "smncopynumbercaller": { diff --git a/modules/nf-core/bedtools/genomecov/environment.yml b/modules/nf-core/bedtools/genomecov/environment.yml index 8fbe20c3..5683bc05 100644 --- a/modules/nf-core/bedtools/genomecov/environment.yml +++ b/modules/nf-core/bedtools/genomecov/environment.yml @@ -1,7 +1,5 @@ -name: bedtools_genomecov channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bedtools=2.31.1 diff --git a/modules/nf-core/bedtools/genomecov/main.nf b/modules/nf-core/bedtools/genomecov/main.nf index 954e8913..35e2ab14 100644 --- a/modules/nf-core/bedtools/genomecov/main.nf +++ b/modules/nf-core/bedtools/genomecov/main.nf @@ -4,8 +4,8 @@ process BEDTOOLS_GENOMECOV { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bedtools:2.31.1--hf5e1c6e_0' : - 'biocontainers/bedtools:2.31.1--hf5e1c6e_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/63/6397750e9730a3fbcc5b4c43f14bd141c64c723fd7dad80e47921a68a7c3cd21/data': + 'community.wave.seqera.io/library/bedtools_coreutils:a623c13f66d5262b' }" input: tuple val(meta), path(intervals), val(scale) @@ -21,13 +21,16 @@ process BEDTOOLS_GENOMECOV { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def args_list = args.tokenize() args += (scale > 0 && scale != 1) ? " -scale $scale" : "" if (!args_list.contains('-bg') && (scale > 0 && scale != 1)) { args += " -bg" } - def sort_cmd = sort ? '| bedtools sort' : '' + // Sorts output file by chromosome and position using additional options for performance and consistency + // See https://www.biostars.org/p/66927/ for further details + def buffer = task.memory ? "--buffer-size=${task.memory.toGiga().intdiv(2)}G" : '' + def sort_cmd = sort ? "| LC_ALL=C sort --parallel=$task.cpus $buffer -k1,1 -k2,2n" : '' def prefix = task.ext.prefix ?: "${meta.id}" if (intervals.name =~ /\.bam/) { diff --git a/modules/nf-core/bedtools/genomecov/meta.yml b/modules/nf-core/bedtools/genomecov/meta.yml index 2b2385e3..41b1f8f4 100644 --- a/modules/nf-core/bedtools/genomecov/meta.yml +++ b/modules/nf-core/bedtools/genomecov/meta.yml @@ -1,5 +1,6 @@ name: bedtools_genomecov -description: Computes histograms (default), per-base reports (-d) and BEDGRAPH (-bg) summaries of feature coverage (e.g., aligned sequences) for a given genome. +description: Computes histograms (default), per-base reports (-d) and BEDGRAPH (-bg) + summaries of feature coverage (e.g., aligned sequences) for a given genome. keywords: - bed - bam @@ -12,39 +13,50 @@ tools: A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. documentation: https://bedtools.readthedocs.io/en/latest/content/tools/genomecov.html licence: ["MIT"] + identifier: biotools:bedtools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals: - type: file - description: BAM/BED/GFF/VCF - pattern: "*.{bam|bed|gff|vcf}" - - scale: - type: integer - description: Number containing the scale factor for the output. Set to 1 to disable. Setting to a value other than 1 will also get the -bg bedgraph output format as this is required for this command switch - - sizes: - type: file - description: Tab-delimited table of chromosome names in the first column and chromosome sizes in the second column - - extension: - type: string - description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", ".tab", etc.) It is set arbitrarily by the user and corresponds to the file format which depends on arguments. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - scale: + type: integer + description: Number containing the scale factor for the output. Set to 1 to + disable. Setting to a value other than 1 will also get the -bg bedgraph output + format as this is required for this command switch + - - sizes: + type: file + description: Tab-delimited table of chromosome names in the first column and + chromosome sizes in the second column + - - extension: + type: string + description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", + ".tab", etc.) It is set arbitrarily by the user and corresponds to the file + format which depends on arguments. + - - sort: + type: boolean + description: Sort the output output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - genomecov: - type: file - description: Computed genome coverage file - pattern: "*.${extension}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${extension}": + type: file + description: Computed genome coverage file + pattern: "*.${extension}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@edmundmiller" - "@sruthipsuresh" diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test b/modules/nf-core/bedtools/genomecov/tests/main.nf.test index 8213cff9..16a03492 100644 --- a/modules/nf-core/bedtools/genomecov/tests/main.nf.test +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test @@ -9,10 +9,10 @@ nextflow_process { tag "bedtools" tag "bedtools/genomecov" - test("sarscov2 - no scale") { + test("sarscov2 - no scale") { when { process { - """ + """ input[0] = [ [ id:'test' ], // meta map file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), @@ -30,16 +30,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("no_scale") } + { assert snapshot(process.out).match() } ) } - } test("sarscov2 - dummy sizes") { when { process { - """ + """ input[0] = [ [ id:'test'], file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), @@ -57,16 +56,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("dummy_sizes") } + { assert snapshot(process.out).match() } ) } - } test("sarscov2 - scale") { when { process { - """ + """ input[0] = [ [ id:'test'], file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/baits.bed", checkIfExists: true), @@ -84,18 +82,17 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("scale") } + { assert snapshot(process.out).match() } ) } - } - test("stub") { + test("sarscov2 - no scale - stub") { options "-stub" when { process { - """ + """ input[0] = [ [ id:'test' ], // meta map file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), @@ -104,6 +101,34 @@ nextflow_process { // sizes input[1] = [] // extension + input[2] = "txt" + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("sarscov2 - dummy sizes - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/illumina/bam/test.paired_end.bam", checkIfExists: true), + 0.5 + ] + // sizes + input[1] = file('dummy_chromosome_sizes') + // extension input[2] = 'txt' input[3] = false """ @@ -113,10 +138,37 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.genomecov[0][1]).name).match("stub") } + { assert snapshot(process.out).match() } ) } + } + + test("sarscov2 - scale - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test'], + file(params.modules_testdata_base_path + "genomics/sarscov2/genome/bed/baits.bed", checkIfExists: true), + 0.5 + ] + // sizes + input[1] = file(params.modules_testdata_base_path + "genomics/sarscov2/genome/genome.sizes", checkIfExists: true) + // extension + input[2] = 'txt' + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } } } diff --git a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap index 8f9191e4..da6dbe87 100644 --- a/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap +++ b/modules/nf-core/bedtools/genomecov/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "dummy_sizes": { + "sarscov2 - dummy sizes": { "content": [ { "0": [ @@ -26,9 +26,13 @@ ] } ], - "timestamp": "2023-12-05T17:35:58.35232" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:33.898146" }, - "no_scale": { + "sarscov2 - no scale - stub": { "content": [ { "0": [ @@ -36,7 +40,7 @@ { "id": "test" }, - "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -47,7 +51,7 @@ { "id": "test" }, - "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ @@ -55,15 +59,46 @@ ] } ], - "timestamp": "2023-12-05T17:35:51.142496" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:52.483371" }, - "stub": { + "sarscov2 - scale": { "content": [ - "test.coverage.txt" + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } ], - "timestamp": "2023-12-05T17:36:13.084709" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:43.69501" }, - "scale": { + "sarscov2 - scale - stub": { "content": [ { "0": [ @@ -71,7 +106,7 @@ { "id": "test" }, - "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "1": [ @@ -82,7 +117,73 @@ { "id": "test" }, - "test.coverage.txt:md5,de3c59c0ea123bcdbbad27bc0a0a601e" + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:00:09.930036" + }, + "sarscov2 - no scale": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,66083198daca6c001d328ba9616e9b53" + ] + ], + "versions": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T11:59:25.448817" + }, + "sarscov2 - dummy sizes - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,5fd44452613992a6f71f2c73d2e117f2" + ], + "genomecov": [ + [ + { + "id": "test" + }, + "test.coverage.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions": [ @@ -90,6 +191,10 @@ ] } ], - "timestamp": "2023-12-05T17:36:05.962006" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T12:00:01.086433" } } \ No newline at end of file diff --git a/modules/nf-core/bedtools/genomecov/tests/tags.yml b/modules/nf-core/bedtools/genomecov/tests/tags.yml deleted file mode 100644 index 55fce478..00000000 --- a/modules/nf-core/bedtools/genomecov/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -bedtools/genomecov: - - "modules/nf-core/bedtools/genomecov/**" diff --git a/modules/nf-core/rtgtools/vcfeval/main.nf b/modules/nf-core/rtgtools/vcfeval/main.nf index 98f9adb1..330a1f3d 100644 --- a/modules/nf-core/rtgtools/vcfeval/main.nf +++ b/modules/nf-core/rtgtools/vcfeval/main.nf @@ -8,7 +8,7 @@ process RTGTOOLS_VCFEVAL { 'biocontainers/rtg-tools:3.12.1--hdfd78af_0' }" input: - tuple val(meta), path(query_vcf), path(query_vcf_tbi), path(truth_vcf), path(truth_vcf_tbi), path(truth_bed), path(evaluation_bed) + tuple val(meta), path(query_vcf), path(query_vcf_tbi), path(truth_vcf), path(truth_vcf_tbi), path(truth_bed), path(regions_bed) tuple val(meta2), path(sdf) output: @@ -33,8 +33,8 @@ process RTGTOOLS_VCFEVAL { script: def args = task.ext.args ?: "" def prefix = task.ext.prefix ?: "${meta.id}" - def bed_regions = truth_bed ? "--bed-regions=${truth_bed}" : "" - def eval_regions = evaluation_bed ? "--evaluation-regions=${evaluation_bed}" : "" + def bed_regions = regions_bed ? "--bed-regions=${regions_bed}" : "" + def eval_regions = truth_bed ? "--evaluation-regions=${truth_bed}" : "" def truth_index = truth_vcf_tbi ? "" : "rtg index ${truth_vcf}" def query_index = query_vcf_tbi ? "" : "rtg index ${query_vcf}" def avail_mem = task.memory.toGiga() + "G" @@ -68,17 +68,17 @@ process RTGTOOLS_VCFEVAL { def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.tp.vcf.gz + echo | gzip > ${prefix}.tp.vcf.gz touch ${prefix}.tp.vcf.gz.tbi - touch ${prefix}.fn.vcf.gz + echo | gzip > ${prefix}.fn.vcf.gz touch ${prefix}.fn.vcf.gz.tbi - touch ${prefix}.fp.vcf.gz + echo | gzip > ${prefix}.fp.vcf.gz touch ${prefix}.fp.vcf.gz.tbi - touch ${prefix}.tp-baseline.vcf.gz + echo | gzip > ${prefix}.tp-baseline.vcf.gz touch ${prefix}.tp-baseline.vcf.gz.tbi - touch ${prefix}.snp_roc.tsv.gz - touch ${prefix}.non_snp_roc.tsv.gz - touch ${prefix}.weighted_roc.tsv.gz + echo | gzip > ${prefix}.snp_roc.tsv.gz + echo | gzip > ${prefix}.non_snp_roc.tsv.gz + echo | gzip > ${prefix}.weighted_roc.tsv.gz touch ${prefix}.summary.txt touch ${prefix}.phasing.txt diff --git a/modules/nf-core/rtgtools/vcfeval/meta.yml b/modules/nf-core/rtgtools/vcfeval/meta.yml index 9814124e..4c59bab5 100644 --- a/modules/nf-core/rtgtools/vcfeval/meta.yml +++ b/modules/nf-core/rtgtools/vcfeval/meta.yml @@ -40,11 +40,13 @@ input: type: file description: A BED file containining the strict regions where VCFeval should only evaluate the fully overlapping variants (optional) + This input should be used to provide the golden truth BED files. pattern: "*.bed" - - evaluation_bed: + - regions_bed: type: file description: A BED file containing the regions where VCFeval will evaluate every fully and partially overlapping variant (optional) + This input should be used to provide the regions used by the analysis pattern: "*.bed" - - meta2: type: map diff --git a/modules/nf-core/rtgtools/vcfeval/tests/main.nf.test b/modules/nf-core/rtgtools/vcfeval/tests/main.nf.test new file mode 100644 index 00000000..55abc842 --- /dev/null +++ b/modules/nf-core/rtgtools/vcfeval/tests/main.nf.test @@ -0,0 +1,113 @@ +nextflow_process { + + name "Test Process RTGTOOLS_VCFEVAL" + script "../main.nf" + process "RTGTOOLS_VCFEVAL" + + tag "modules" + tag "modules_nfcore" + tag "rtgtools" + tag "rtgtools/vcfeval" + tag "untar" + + setup { + run("UNTAR") { + script "../../../untar/main.nf" + process { + """ + input[0] = Channel.value([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome_sdf.tar.gz', checkIfExists:true) + ]) + """ + } + } + } + + test("homo_sapiens - [vcf, tbi, truth, truth_tbi, truth_bed, regions_bed], sdf") { + + when { + process { + """ + input[0] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.vcf.gz', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.vcf.gz.tbi', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/multi_intervals.bed', checkIfExists:true) + ]) + input[1] = UNTAR.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - [vcf, [], truth, [], [], []], sdf") { + + when { + process { + """ + input[0] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.vcf.gz', checkIfExists:true), + [], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists:true), + [], + [], + [] + ]) + input[1] = UNTAR.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi, truth, truth_tbi, truth_bed, regions_bed], sdf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = Channel.of([ + [id:'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.vcf.gz', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.vcf.gz.tbi', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test2_haplotc.ann.vcf.gz.tbi', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists:true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/multi_intervals.bed', checkIfExists:true) + ]) + input[1] = UNTAR.out.untar + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/rtgtools/vcfeval/tests/main.nf.test.snap b/modules/nf-core/rtgtools/vcfeval/tests/main.nf.test.snap new file mode 100644 index 00000000..4f39e2d4 --- /dev/null +++ b/modules/nf-core/rtgtools/vcfeval/tests/main.nf.test.snap @@ -0,0 +1,677 @@ +{ + "homo_sapiens - [vcf, tbi, truth, truth_tbi, truth_bed, regions_bed], sdf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz:md5,5171021307097220337dbcaccc860495" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "10": [ + [ + { + "id": "test" + }, + "test.weighted_roc.tsv.gz:md5,de36bf613b3dacf4a043311336bb4a94" + ] + ], + "11": [ + [ + { + "id": "test" + }, + "test.summary.txt:md5,f4c8df93c8bdab603036bbc27b4a28c3" + ] + ], + "12": [ + [ + { + "id": "test" + }, + "test.phasing.txt:md5,31988234bee208cacb3de90dabe1797f" + ] + ], + "13": [ + "versions.yml:md5,a228f0d9e8b205b4cc7c485151a77bb0" + ], + "2": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz:md5,fc419367818700d47df073615aeb9077" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz:md5,5171021307097220337dbcaccc860495" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz:md5,fc419367818700d47df073615aeb9077" + ] + ], + "7": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "8": [ + [ + { + "id": "test" + }, + "test.snp_roc.tsv.gz:md5,11d7393a16c25ac0a092382fecafee9b" + ] + ], + "9": [ + [ + { + "id": "test" + }, + "test.non_snp_roc.tsv.gz:md5,eb0910409b8b088655defbd152103b81" + ] + ], + "baseline_tbi": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "baseline_vcf": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz:md5,fc419367818700d47df073615aeb9077" + ] + ], + "fn_tbi": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "fn_vcf": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz:md5,fc419367818700d47df073615aeb9077" + ] + ], + "fp_tbi": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "fp_vcf": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz:md5,5171021307097220337dbcaccc860495" + ] + ], + "non_snp_roc": [ + [ + { + "id": "test" + }, + "test.non_snp_roc.tsv.gz:md5,eb0910409b8b088655defbd152103b81" + ] + ], + "phasing": [ + [ + { + "id": "test" + }, + "test.phasing.txt:md5,31988234bee208cacb3de90dabe1797f" + ] + ], + "snp_roc": [ + [ + { + "id": "test" + }, + "test.snp_roc.tsv.gz:md5,11d7393a16c25ac0a092382fecafee9b" + ] + ], + "summary": [ + [ + { + "id": "test" + }, + "test.summary.txt:md5,f4c8df93c8bdab603036bbc27b4a28c3" + ] + ], + "tp_tbi": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "tp_vcf": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz:md5,5171021307097220337dbcaccc860495" + ] + ], + "versions": [ + "versions.yml:md5,a228f0d9e8b205b4cc7c485151a77bb0" + ], + "weighted_roc": [ + [ + { + "id": "test" + }, + "test.weighted_roc.tsv.gz:md5,de36bf613b3dacf4a043311336bb4a94" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-30T15:17:31.564974666" + }, + "homo_sapiens - [vcf, [], truth, [], [], []], sdf": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz:md5,5125ee41457c9d93f46b19e32788edb4" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz.tbi:md5,a0e9ac2d38c04bd591ab8f857c5c9133" + ] + ], + "10": [ + [ + { + "id": "test" + }, + "test.weighted_roc.tsv.gz:md5,5dfacd641b080cc8ad22eebec015c698" + ] + ], + "11": [ + [ + { + "id": "test" + }, + "test.summary.txt:md5,f33feb32f84958fb931063044fba369b" + ] + ], + "12": [ + [ + { + "id": "test" + }, + "test.phasing.txt:md5,133677dbd8be657439ea2b03fdfb8795" + ] + ], + "13": [ + "versions.yml:md5,a228f0d9e8b205b4cc7c485151a77bb0" + ], + "2": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz:md5,df96e4e4014cdb3050cb6f221f0cdca9" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz:md5,d4bfa2c7271351ca19589f0f57f210b7" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz:md5,920af25c3c18a438b11440702562fa35" + ] + ], + "7": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz.tbi:md5,95938320b425e28cf06c45ab45ad0360" + ] + ], + "8": [ + [ + { + "id": "test" + }, + "test.snp_roc.tsv.gz:md5,85edc0101bb9e8d3edc11abe4fdcda93" + ] + ], + "9": [ + [ + { + "id": "test" + }, + "test.non_snp_roc.tsv.gz:md5,30283ede3bcc5dd247f8a84bf345bf9a" + ] + ], + "baseline_tbi": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz.tbi:md5,95938320b425e28cf06c45ab45ad0360" + ] + ], + "baseline_vcf": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz:md5,920af25c3c18a438b11440702562fa35" + ] + ], + "fn_tbi": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "fn_vcf": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz:md5,df96e4e4014cdb3050cb6f221f0cdca9" + ] + ], + "fp_tbi": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz.tbi:md5,092a7a3162e7cff25d273525751eb284" + ] + ], + "fp_vcf": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz:md5,d4bfa2c7271351ca19589f0f57f210b7" + ] + ], + "non_snp_roc": [ + [ + { + "id": "test" + }, + "test.non_snp_roc.tsv.gz:md5,30283ede3bcc5dd247f8a84bf345bf9a" + ] + ], + "phasing": [ + [ + { + "id": "test" + }, + "test.phasing.txt:md5,133677dbd8be657439ea2b03fdfb8795" + ] + ], + "snp_roc": [ + [ + { + "id": "test" + }, + "test.snp_roc.tsv.gz:md5,85edc0101bb9e8d3edc11abe4fdcda93" + ] + ], + "summary": [ + [ + { + "id": "test" + }, + "test.summary.txt:md5,f33feb32f84958fb931063044fba369b" + ] + ], + "tp_tbi": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz.tbi:md5,a0e9ac2d38c04bd591ab8f857c5c9133" + ] + ], + "tp_vcf": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz:md5,5125ee41457c9d93f46b19e32788edb4" + ] + ], + "versions": [ + "versions.yml:md5,a228f0d9e8b205b4cc7c485151a77bb0" + ], + "weighted_roc": [ + [ + { + "id": "test" + }, + "test.weighted_roc.tsv.gz:md5,5dfacd641b080cc8ad22eebec015c698" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-30T15:18:04.344989466" + }, + "homo_sapiens - [vcf, tbi, truth, truth_tbi, truth_bed, regions_bed], sdf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test" + }, + "test.weighted_roc.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "11": [ + [ + { + "id": "test" + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test" + }, + "test.phasing.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + "versions.yml:md5,a228f0d9e8b205b4cc7c485151a77bb0" + ], + "2": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "7": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test" + }, + "test.snp_roc.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "9": [ + [ + { + "id": "test" + }, + "test.non_snp_roc.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "baseline_tbi": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "baseline_vcf": [ + [ + { + "id": "test" + }, + "test.tp-baseline.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "fn_tbi": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fn_vcf": [ + [ + { + "id": "test" + }, + "test.fn.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "fp_tbi": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fp_vcf": [ + [ + { + "id": "test" + }, + "test.fp.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "non_snp_roc": [ + [ + { + "id": "test" + }, + "test.non_snp_roc.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "phasing": [ + [ + { + "id": "test" + }, + "test.phasing.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "snp_roc": [ + [ + { + "id": "test" + }, + "test.snp_roc.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "summary": [ + [ + { + "id": "test" + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tp_tbi": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tp_vcf": [ + [ + { + "id": "test" + }, + "test.tp.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,a228f0d9e8b205b4cc7c485151a77bb0" + ], + "weighted_roc": [ + [ + { + "id": "test" + }, + "test.weighted_roc.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-30T15:23:21.165461388" + } +} \ No newline at end of file diff --git a/modules/nf-core/rtgtools/vcfeval/tests/nextflow.config b/modules/nf-core/rtgtools/vcfeval/tests/nextflow.config new file mode 100644 index 00000000..75635215 --- /dev/null +++ b/modules/nf-core/rtgtools/vcfeval/tests/nextflow.config @@ -0,0 +1,4 @@ +process { + withName: UNTAR { + } +} diff --git a/modules/nf-core/sentieon/bwaindex/environment.yml b/modules/nf-core/sentieon/bwaindex/environment.yml index c806ed0e..185d95bd 100644 --- a/modules/nf-core/sentieon/bwaindex/environment.yml +++ b/modules/nf-core/sentieon/bwaindex/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_bwaindex channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/bwaindex/main.nf b/modules/nf-core/sentieon/bwaindex/main.nf index f5e8b582..2d3f1afa 100644 --- a/modules/nf-core/sentieon/bwaindex/main.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -5,8 +5,8 @@ process SENTIEON_BWAINDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(fasta) @@ -19,20 +19,9 @@ process SENTIEON_BWAINDEX { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "bwa/${task.ext.prefix}" : "bwa/${fasta.baseName}" """ - $fix_ld_library_path - mkdir bwa sentieon \\ @@ -49,18 +38,7 @@ process SENTIEON_BWAINDEX { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - """ - $fix_ld_library_path - mkdir bwa touch bwa/genome.amb diff --git a/modules/nf-core/sentieon/bwaindex/meta.yml b/modules/nf-core/sentieon/bwaindex/meta.yml index 0af45ad8..acbd14d5 100644 --- a/modules/nf-core/sentieon/bwaindex/meta.yml +++ b/modules/nf-core/sentieon/bwaindex/meta.yml @@ -13,29 +13,32 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - index: - type: file - description: BWA genome index files - pattern: "*.{amb,ann,bwt,pac,sa}" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bwa: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@maxulysse" diff --git a/modules/nf-core/sentieon/bwamem/environment.yml b/modules/nf-core/sentieon/bwamem/environment.yml index f03db6f8..185d95bd 100644 --- a/modules/nf-core/sentieon/bwamem/environment.yml +++ b/modules/nf-core/sentieon/bwamem/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_bwamem channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index 62693851..76e364de 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -3,12 +3,10 @@ process SENTIEON_BWAMEM { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(reads) @@ -17,45 +15,22 @@ process SENTIEON_BWAMEM { tuple val(meta4), path(fasta_fai) output: - tuple val(meta), path("*.bam"), path("*.bai"), emit: bam_and_bai + tuple val(meta), path("${prefix}"), path("${prefix}.{bai,crai}"), emit: bam_and_bai path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + prefix = task.ext.prefix ?: "${meta.id}.bam" + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense + export bwt_max_mem="${(task.memory * 0.9).toGiga()}G" INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` @@ -64,7 +39,12 @@ process SENTIEON_BWAMEM { -t $task.cpus \\ \$INDEX \\ $reads \\ - | sentieon util sort -r $fasta -t $task.cpus -o ${prefix}.bam --sam2bam - + | sentieon util sort -r $fasta -t $task.cpus -o ${prefix} --sam2bam - + + # Delete *.bai file if prefix ends with .cram + if [[ "${prefix}" == *.cram ]]; then + rm -f "${prefix}.bai" + fi cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -74,21 +54,12 @@ process SENTIEON_BWAMEM { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } + prefix = task.ext.prefix ?: "${meta.id}.bam" + index = prefix.tokenize('.')[-1] == "bam" ? "bai" : "crai" - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - - touch ${prefix}.bam - touch ${prefix}.bam.bai + touch ${prefix} + touch ${prefix}.${index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/sentieon/bwamem/meta.yml b/modules/nf-core/sentieon/bwamem/meta.yml index 0859a923..b27dd487 100644 --- a/modules/nf-core/sentieon/bwamem/meta.yml +++ b/modules/nf-core/sentieon/bwamem/meta.yml @@ -15,61 +15,65 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: Genome fastq files (single-end or paired-end) - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - index: - type: file - description: BWA genome index files - pattern: "*.{amb,ann,bwt,pac,sa}" - - meta3: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - meta4: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta_fai: - type: file - description: The index of the FASTA reference. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Genome fastq files (single-end or paired-end) + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta4: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta_fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file. - pattern: "*.bam" - - bai: - type: file - description: BAI file - pattern: "*.bai" + - bam_and_bai: + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: BAM file with corresponding index. + pattern: "*.{bam,bai}" + - ${prefix}.{bai,crai}: + type: file + description: BAM file with corresponding index. + pattern: "*.{bam,bai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: - "@asp8200" + - "@DonFreed" diff --git a/modules/nf-core/sentieon/bwamem/tests/main.nf.test b/modules/nf-core/sentieon/bwamem/tests/main.nf.test new file mode 100644 index 00000000..07472288 --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/main.nf.test @@ -0,0 +1,262 @@ +nextflow_process { + + name "Test Process SENTIEON_BWAMEM" + tag "modules_nfcore" + tag "modules" + tag "sentieon" + tag "bwamem" + tag "bwaindex" + tag "sentieon/bwaindex" + tag "sentieon/bwamem" + + script "../main.nf" + process "SENTIEON_BWAMEM" + + test("Single-End") { + config "./nextflow.config" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Single-End Output CRAM") { + config "./nextflow_out_cram.config" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Paired-End") { + config "./nextflow.config" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("Single-End - stub") { + config "./nextflow.config" + options "-stub" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Paired-End - stub") { + config "./nextflow.config" + options "-stub" + + setup { + run("SENTIEON_BWAINDEX") { + script "../../bwaindex/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ] + input[1] = SENTIEON_BWAINDEX.out.index + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[3] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + +} diff --git a/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap b/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap new file mode 100644 index 00000000..0dc67a9a --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap @@ -0,0 +1,187 @@ +{ + "Single-End": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,58bc2194d084cf8462a3a7f6114c303a", + "test.bam.bai:md5,4fd9b026ff2306cc292cd695e11d5628" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,58bc2194d084cf8462a3a7f6114c303a", + "test.bam.bai:md5,4fd9b026ff2306cc292cd695e11d5628" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:58:40.112926615" + }, + "Paired-End - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:59:20.476791905" + }, + "Paired-End": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,3418d864f42215d1c0c8d604d9571b0d", + "test.bam.bai:md5,be4ad85790468042f7fc01ca2e36a919" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,3418d864f42215d1c0c8d604d9571b0d", + "test.bam.bai:md5,be4ad85790468042f7fc01ca2e36a919" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:59:00.346034062" + }, + "Single-End - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:59:10.054146084" + }, + "Single-End Output CRAM": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.cram:md5,04d88bd709dc0bc27ca81a09e80d4a1b", + "test.cram.crai:md5,ac34c713fe95aa8a1fd6291bdbb76dcf" + ] + ], + "1": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ], + "bam_and_bai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.cram:md5,04d88bd709dc0bc27ca81a09e80d4a1b", + "test.cram.crai:md5,ac34c713fe95aa8a1fd6291bdbb76dcf" + ] + ], + "versions": [ + "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-19T08:58:49.962693499" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/bwamem/tests/nextflow.config b/modules/nf-core/sentieon/bwamem/tests/nextflow.config new file mode 100644 index 00000000..717fb52c --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/nextflow.config @@ -0,0 +1,15 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_BWAMEM' { + ext.args = "-R \"@RG\\tID:sample_lane\\tPU:lane\\tSM:patient_sample\\tLB:sample\\tDS:fasta\\tPL:seqplatform\"" + } +} diff --git a/modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config b/modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config new file mode 100644 index 00000000..07ae63d9 --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/nextflow_out_cram.config @@ -0,0 +1,16 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_BWAMEM' { + ext.args = "-R \"@RG\\tID:sample_lane\\tPU:lane\\tSM:patient_sample\\tLB:sample\\tDS:fasta\\tPL:seqplatform\"" + ext.prefix = { "${meta.id}.cram" } + } +} diff --git a/modules/nf-core/sentieon/bwamem/tests/tags.yml b/modules/nf-core/sentieon/bwamem/tests/tags.yml new file mode 100644 index 00000000..fbc2bb3c --- /dev/null +++ b/modules/nf-core/sentieon/bwamem/tests/tags.yml @@ -0,0 +1,2 @@ +sentieon/bwamem: + - "modules/nf-core/sentieon/bwamem/**" diff --git a/modules/nf-core/sentieon/datametrics/environment.yml b/modules/nf-core/sentieon/datametrics/environment.yml index b5ea91f6..185d95bd 100644 --- a/modules/nf-core/sentieon/datametrics/environment.yml +++ b/modules/nf-core/sentieon/datametrics/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_datametrics channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/datametrics/main.nf b/modules/nf-core/sentieon/datametrics/main.nf index bc55d275..6567cc72 100644 --- a/modules/nf-core/sentieon/datametrics/main.nf +++ b/modules/nf-core/sentieon/datametrics/main.nf @@ -3,17 +3,16 @@ process SENTIEON_DATAMETRICS { label 'process_medium' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) + val plot_results output: tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics @@ -22,44 +21,24 @@ process SENTIEON_DATAMETRICS { tuple val(meta), path('*gc_metrics.txt') , emit: gc_metrics tuple val(meta), path('*aln_metrics.txt'), emit: aln_metrics tuple val(meta), path('*is_metrics.txt') , emit: is_metrics + tuple val(meta), path('*mq_metrics.pdf') , emit: mq_plot, optional: true + tuple val(meta), path('*qd_metrics.pdf') , emit: qd_plot, optional: true + tuple val(meta), path('*is_metrics.pdf') , emit: is_plot, optional: true + tuple val(meta), path('*gc_metrics.pdf') , emit: gc_plot, optional: true path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def input = bam.sort().collect{"-i $it"}.join(' ') - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon \\ driver \\ @@ -73,6 +52,14 @@ process SENTIEON_DATAMETRICS { --algo InsertSizeMetricAlgo ${prefix}_is_metrics.txt \\ --algo AlignmentStat ${prefix}_aln_metrics.txt + if $plot_results + then + sentieon plot GCBias -o ${prefix}_gc_metrics.pdf ${prefix}_gc_metrics.txt + sentieon plot MeanQualityByCycle -o ${prefix}_mq_metrics.pdf ${prefix}_mq_metrics.txt + sentieon plot QualDistribution -o ${prefix}_qd_metrics.pdf ${prefix}_qd_metrics.txt + sentieon plot InsertSizeMetricAlgo -o ${prefix}_is_metrics.pdf ${prefix}_is_metrics.txt + fi + cat <<-END_VERSIONS > versions.yml "${task.process}": sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") @@ -80,19 +67,8 @@ process SENTIEON_DATAMETRICS { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - touch ${prefix}_mq_metrics.txt touch ${prefix}_qd_metrics.txt touch ${prefix}_gc_summary.txt @@ -100,6 +76,14 @@ process SENTIEON_DATAMETRICS { touch ${prefix}_aln_metrics.txt touch ${prefix}_is_metrics.txt + if $plot_results + then + touch ${prefix}_gc_metrics.pdf + touch ${prefix}_mq_metrics.pdf + touch ${prefix}_qd_metrics.pdf + touch ${prefix}_is_metrics.pdf + fi + cat <<-END_VERSIONS > versions.yml "${task.process}": sentieon: \$(echo \$(sentieon driver --version 2>&1) | sed -e "s/sentieon-genomics-//g") diff --git a/modules/nf-core/sentieon/datametrics/meta.yml b/modules/nf-core/sentieon/datametrics/meta.yml index d2d1450a..2b59da39 100644 --- a/modules/nf-core/sentieon/datametrics/meta.yml +++ b/modules/nf-core/sentieon/datametrics/meta.yml @@ -11,72 +11,154 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - 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 ]` - - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: Index of th sorted BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: Index of the genome fasta file - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index of th sorted BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - - plot_results: + type: boolean + description: Boolean to determine whether plots should be generated + pattern: "true or false" 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" - mq_metrics: - type: file - description: File containing the information about mean base quality score for each sequencing cycle - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*mq_metrics.txt": + type: file + description: File containing the information about mean base quality score for + each sequencing cycle + pattern: "*.txt" - qd_metrics: - type: file - description: File containing the information about number of bases with a specific base quality score - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*qd_metrics.txt": + type: file + description: File containing the information about number of bases with a specific + base quality score + pattern: "*.txt" - gc_summary: - type: file - description: File containing the information about GC bias in the reference and the sample - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*gc_summary.txt": + type: file + description: File containing the information about GC bias in the reference + and the sample + pattern: "*.txt" - gc_metrics: - type: file - description: File containing the information about GC bias in the reference and the sample - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*gc_metrics.txt": + type: file + description: File containing the information about GC bias in the reference + and the sample + pattern: "*.txt" - aln_metrics: - type: file - description: File containing the statistics about the alignment of the reads - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*aln_metrics.txt": + type: file + description: File containing the statistics about the alignment of the reads + pattern: "*.txt" - is_metrics: - type: file - description: File containing the information about statistical distribution of insert sizes - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*is_metrics.txt": + type: file + description: File containing the information about statistical distribution + of insert sizes + pattern: "*.txt" + - mq_plot: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*mq_metrics.pdf": + type: file + description: "PDF containting plot of mean base quality scores" + pattern: "*.pdf" + - qd_plot: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*qd_metrics.pdf": + type: file + description: "PDF containting plot of specific base quality score" + pattern: "*.pdf" + - is_plot: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*is_metrics.pdf": + type: file + description: "PDF containting plot of insert sizes" + pattern: "*.pdf" + - gc_plot: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*gc_metrics.pdf": + type: file + description: "PDF containting plot of GC bias" + pattern: "*.pdf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/sentieon/datametrics/tests/main.nf.test b/modules/nf-core/sentieon/datametrics/tests/main.nf.test new file mode 100644 index 00000000..a13d68e6 --- /dev/null +++ b/modules/nf-core/sentieon/datametrics/tests/main.nf.test @@ -0,0 +1,109 @@ +nextflow_process { + + name "Test Process SENTIEON_DATAMETRICS" + script "../main.nf" + process "SENTIEON_DATAMETRICS" + + tag "modules" + tag "modules_nfcore" + tag "sentieon" + tag "sentieon/datametrics" + config "./nextflow.config" + + test("metrics - no plots") { + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input [1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + ] + input [2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true), + ] + input [3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("metrics - with plots") { + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input [1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + ] + input [2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true), + ] + input [3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input [1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + ] + input [2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true), + ] + input [3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap b/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap new file mode 100644 index 00000000..25b1ae12 --- /dev/null +++ b/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap @@ -0,0 +1,545 @@ +{ + "sarscov2 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test_aln_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "aln_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_aln_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gc_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gc_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "gc_summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "is_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "is_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "mq_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "mq_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "qd_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "qd_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T12:01:01.974389137" + }, + "metrics - with plots": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + ] + ], + "10": [ + "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.pdf:md5,c04212fac971c67066082dcb63fa08ce" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.pdf:md5,4edab3779660668a7cfd203196912ace" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.pdf:md5,068232633e0f93ea2b53f4c698bd8a54" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.pdf:md5,950372106204ff4d2fbe5ca413ac8300" + ] + ], + "aln_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + ] + ], + "gc_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + ] + ], + "gc_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.pdf:md5,950372106204ff4d2fbe5ca413ac8300" + ] + ], + "gc_summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + ] + ], + "is_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + ] + ], + "is_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.pdf:md5,068232633e0f93ea2b53f4c698bd8a54" + ] + ], + "mq_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + ] + ], + "mq_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.pdf:md5,c04212fac971c67066082dcb63fa08ce" + ] + ], + "qd_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + ] + ], + "qd_plot": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.pdf:md5,4edab3779660668a7cfd203196912ace" + ] + ], + "versions": [ + "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T12:00:41.711146115" + }, + "metrics - no plots": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + ] + ], + "10": [ + "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + ] + ], + "6": [ + + ], + "7": [ + + ], + "8": [ + + ], + "9": [ + + ], + "aln_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + ] + ], + "gc_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + ] + ], + "gc_plot": [ + + ], + "gc_summary": [ + [ + { + "id": "test", + "single_end": false + }, + "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + ] + ], + "is_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + ] + ], + "is_plot": [ + + ], + "mq_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + ] + ], + "mq_plot": [ + + ], + "qd_metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + ] + ], + "qd_plot": [ + + ], + "versions": [ + "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-20T12:00:27.37021578" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/datametrics/tests/nextflow.config b/modules/nf-core/sentieon/datametrics/tests/nextflow.config new file mode 100644 index 00000000..dead4e32 --- /dev/null +++ b/modules/nf-core/sentieon/datametrics/tests/nextflow.config @@ -0,0 +1,16 @@ +env { + // NOTE This is how pipeline users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how pipeline users will test out Sentieon with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withLabel: 'sentieon' { + ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 + ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 + } +} diff --git a/modules/nf-core/sentieon/dedup/environment.yml b/modules/nf-core/sentieon/dedup/environment.yml index e29cfff3..185d95bd 100644 --- a/modules/nf-core/sentieon/dedup/environment.yml +++ b/modules/nf-core/sentieon/dedup/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_dedup channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf index 5f19ab56..f0b387f6 100644 --- a/modules/nf-core/sentieon/dedup/main.nf +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -3,12 +3,10 @@ process SENTIEON_DEDUP { label 'process_medium' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(bam), path(bai) @@ -29,47 +27,23 @@ process SENTIEON_DEDUP { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' def args3 = task.ext.args3 ?: '' def args4 = task.ext.args4 ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = task.ext.suffix ?: ".cram" // The suffix should be either ".cram" or ".bam". - def metrics = task.ext.metrics ?: "${prefix}${suffix}.metrics" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}.cram" + def metrics = task.ext.metrics ?: "${prefix}.metrics" def input_list = bam.collect{"-i $it"}.join(' ') - + def prefix_basename = prefix.substring(0, prefix.lastIndexOf(".")) + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi + $sentieonLicense - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi + sentieon driver $args -t $task.cpus $input_list -r ${fasta} --algo LocusCollector $args2 --fun score_info ${prefix_basename}.score + sentieon driver $args3 -t $task.cpus $input_list -r ${fasta} --algo Dedup $args4 --score_info ${prefix_basename}.score --metrics ${metrics} ${prefix} - $fix_ld_library_path - - sentieon driver $args $input_list -r ${fasta} --algo LocusCollector $args2 --fun score_info ${prefix}.score - sentieon driver $args3 -t $task.cpus $input_list -r ${fasta} --algo Dedup $args4 --score_info ${prefix}.score --metrics ${metrics} ${prefix}${suffix} # This following tsv-file is produced in order to get a proper tsv-file with Dedup-metrics for importing in MultiQC as "custom content". # It should be removed once MultiQC has a module for displaying Dedup-metrics. head -3 ${metrics} > ${metrics}.multiqc.tsv @@ -81,25 +55,17 @@ process SENTIEON_DEDUP { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - def suffix = task.ext.suffix ?: ".cram" // The suffix should be either ".cram" or ".bam". - def metrics = task.ext.metrics ?: "${prefix}${suffix}.metrics" - """ - $fix_ld_library_path + def prefix = task.ext.prefix ?: "${meta.id}.cram" + def metrics = task.ext.metrics ?: "${prefix}.metrics" + def prefix_basename = prefix.substring(0, prefix.lastIndexOf(".")) - touch "${prefix}${suffix}" - touch "${prefix}${suffix}\$(echo ${suffix} | sed 's/m\$/i/')" + """ + touch "${prefix}" + touch "${prefix}.crai" + touch "${prefix}.bai" touch "${metrics}" touch "${metrics}.multiqc.tsv" - touch "${prefix}.score" + touch "${prefix_basename}.score" cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/sentieon/dedup/meta.yml b/modules/nf-core/sentieon/dedup/meta.yml index 0efbb96c..003d74be 100644 --- a/modules/nf-core/sentieon/dedup/meta.yml +++ b/modules/nf-core/sentieon/dedup/meta.yml @@ -1,5 +1,7 @@ name: sentieon_dedup -description: Runs the sentieon tool LocusCollector followed by Dedup. LocusCollector collects read information that is used by Dedup which in turn marks or removes duplicate reads. +description: Runs the sentieon tool LocusCollector followed by Dedup. LocusCollector + collects read information that is used by Dedup which in turn marks or removes duplicate + reads. keywords: - mem - dedup @@ -14,76 +16,116 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file. - pattern: "*.bam" - - bai: - type: file - description: BAI file - pattern: "*.bai" - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta_fai: - type: file - description: The index of the FASTA reference. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta_fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - cram: - type: file - description: CRAM file - pattern: "*.cram" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: CRAM file + pattern: "*.cram" - crai: - type: file - description: CRAM index file - pattern: "*.crai" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: CRAM index file + pattern: "*.crai" - bam: - type: file - description: BAM file. - pattern: "*.bam" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: BAM file. + pattern: "*.bam" - bai: - type: file - description: BAI file - pattern: "*.bai" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.bai": + type: file + description: BAI file + pattern: "*.bai" - score: - type: file - description: The score file indicates which reads LocusCollector finds are likely duplicates. - pattern: "*.score" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.score": + type: file + description: The score file indicates which reads LocusCollector finds are likely + duplicates. + pattern: "*.score" - metrics: - type: file - description: Output file containing Dedup metrics incl. histogram data. - pattern: "*.metrics" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.metrics": + type: file + description: Output file containing Dedup metrics incl. histogram data. + pattern: "*.metrics" - metrics_multiqc_tsv: - type: file - description: Output tsv-file containing Dedup metrics excl. histogram data. - pattern: "*.metrics.multiqc.tsv" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.metrics.multiqc.tsv": + type: file + description: Output tsv-file containing Dedup metrics excl. histogram data. + pattern: "*.metrics.multiqc.tsv" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@asp8200" maintainers: diff --git a/modules/nf-core/sentieon/dedup/tests/main.nf.test b/modules/nf-core/sentieon/dedup/tests/main.nf.test new file mode 100644 index 00000000..c842a4a0 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/main.nf.test @@ -0,0 +1,90 @@ +nextflow_process { + + name "Test Process SENTIEON_DEDUP" + tag "modules_nfcore" + tag "modules" + tag "sentieon" + tag "dedup" + tag "sentieon/dedup" + + script "../main.nf" + process "SENTIEON_DEDUP" + + test("Test marking duplicates") { + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Test removing duplicates") { + config "./nextflow_rmdup.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("Test stub") { + config "./nextflow.config" + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) ] + ] + input[1] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id: 'test'],file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap b/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap new file mode 100644 index 00000000..c1cd83ec --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap @@ -0,0 +1,359 @@ +{ + "Test marking duplicates": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,d2993113f4614f5196fc74d489412fc4" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,4b7b2152b33c5334f9477cc3650f8c91" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,889503338dc569b24e44e5e3aec815ea" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "7": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ], + "bai": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,889503338dc569b24e44e5e3aec815ea" + ] + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,4b7b2152b33c5334f9477cc3650f8c91" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d2993113f4614f5196fc74d489412fc4" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "metrics_multiqc_tsv": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + ] + ], + "score": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "versions": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-26T13:02:23.640202" + }, + "Test removing duplicates": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,e67398ab64430191f9d15cb8a8f425c7" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,c617398ead281c1339d78d5df0d606e9" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,a1ea729eca4732ca3a5dee946a70fbc8" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "7": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ], + "bai": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,a1ea729eca4732ca3a5dee946a70fbc8" + ] + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,c617398ead281c1339d78d5df0d606e9" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,e67398ab64430191f9d15cb8a8f425c7" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "metrics_multiqc_tsv": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,7fc2ddc6b21838bdc42aff146549cea2" + ] + ], + "score": [ + [ + { + "id": "test" + }, + "test.score:md5,a97459ff2939682091bac3c3912402dc" + ] + ], + "versions": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-26T13:02:33.698037" + }, + "Test stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.score:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "7": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ], + "bai": [ + [ + { + "id": "test" + }, + "test.cram.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "bam": [ + + ], + "crai": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics": [ + [ + { + "id": "test" + }, + "test.cram.metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "metrics_multiqc_tsv": [ + [ + { + "id": "test" + }, + "test.cram.metrics.multiqc.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "score": [ + [ + { + "id": "test" + }, + "test.score:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-26T13:02:41.360148" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/dedup/tests/nextflow.config b/modules/nf-core/sentieon/dedup/tests/nextflow.config new file mode 100644 index 00000000..09a068ee --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/nextflow.config @@ -0,0 +1,9 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} diff --git a/modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config b/modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config new file mode 100644 index 00000000..21e7b945 --- /dev/null +++ b/modules/nf-core/sentieon/dedup/tests/nextflow_rmdup.config @@ -0,0 +1,15 @@ +env { + // NOTE This is how nf-core/sarek users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how nf-core/sarek users will test out Sentieon in Sarek with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + +process { + withName: 'SENTIEON_DEDUP' { + ext.args4 = '--rmdup' + } +} diff --git a/modules/nf-core/sentieon/dnamodelapply/environment.yml b/modules/nf-core/sentieon/dnamodelapply/environment.yml index a2f88193..185d95bd 100644 --- a/modules/nf-core/sentieon/dnamodelapply/environment.yml +++ b/modules/nf-core/sentieon/dnamodelapply/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_dnamodelapply channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf index 9a0c70dc..b4b10ce4 100644 --- a/modules/nf-core/sentieon/dnamodelapply/main.nf +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -3,12 +3,10 @@ process SENTIEON_DNAMODELAPPLY { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(vcf), path(idx) @@ -25,38 +23,13 @@ process SENTIEON_DNAMODELAPPLY { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' - + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver \\ -t $task.cpus \\ @@ -74,20 +47,8 @@ process SENTIEON_DNAMODELAPPLY { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - """ - $fix_ld_library_path - touch ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi diff --git a/modules/nf-core/sentieon/dnamodelapply/meta.yml b/modules/nf-core/sentieon/dnamodelapply/meta.yml index 25076545..2505aff7 100644 --- a/modules/nf-core/sentieon/dnamodelapply/meta.yml +++ b/modules/nf-core/sentieon/dnamodelapply/meta.yml @@ -12,65 +12,74 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - 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' ]` - - vcf: - type: file - description: INPUT VCF file - pattern: "*.{vcf,vcf.gz}" - - idx: - type: file - description: Index of the input VCF file - pattern: "*.{tbi}" - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: Index of the genome fasta file - pattern: "*.fai" - - ml_model: - type: file - description: machine learning model file - pattern: "*.model" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - vcf: + type: file + description: INPUT VCF file + pattern: "*.{vcf,vcf.gz}" + - idx: + type: file + description: Index of the input VCF file + pattern: "*.{tbi}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - ml_model: + type: file + description: machine learning model file + pattern: "*.model" 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: INPUT VCF file - pattern: "*.{vcf,vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.vcf.gz": + type: file + description: INPUT VCF file + pattern: "*.{vcf,vcf.gz}" - index: - type: file - description: Index of the input VCF file - pattern: "*.{tbi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.vcf.gz.tbi": + type: file + description: Index of the input VCF file + pattern: "*.{tbi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/sentieon/dnascope/environment.yml b/modules/nf-core/sentieon/dnascope/environment.yml index e6da2dde..185d95bd 100644 --- a/modules/nf-core/sentieon/dnascope/environment.yml +++ b/modules/nf-core/sentieon/dnascope/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_dnascope channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index 0671307b..63d7d23b 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -3,12 +3,10 @@ process SENTIEON_DNASCOPE { label 'process_high' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(bam), path(bai), path(intervals) @@ -32,15 +30,6 @@ process SENTIEON_DNASCOPE { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' // options for the driver def args2 = task.ext.args2 ?: '' // options for the vcf generation def args3 = task.ext.args3 ?: '' // options for the gvcf generation @@ -49,8 +38,6 @@ process SENTIEON_DNASCOPE { def model_cmd = ml_model ? " --model ${ml_model}" : '' def pcr_indel_model_cmd = pcr_indel_model ? " --pcr_indel_model ${pcr_indel_model}" : '' def prefix = task.ext.prefix ?: "${meta.id}" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' def vcf_cmd = "" def gvcf_cmd = "" def base_cmd = '--algo DNAscope ' + dbsnp_cmd + ' ' @@ -63,24 +50,11 @@ process SENTIEON_DNASCOPE { gvcf_cmd = base_cmd + args3 + ' ' + model_cmd + pcr_indel_model_cmd + ' --emit_mode gvcf ' + prefix + '.g.vcf.gz' } + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon driver $args -r $fasta -t $task.cpus -i $bam $interval $vcf_cmd $gvcf_cmd @@ -91,20 +65,8 @@ process SENTIEON_DNASCOPE { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" - """ - $fix_ld_library_path - touch ${prefix}.unfiltered.vcf.gz touch ${prefix}.unfiltered.vcf.gz.tbi touch ${prefix}.g.vcf.gz diff --git a/modules/nf-core/sentieon/dnascope/meta.yml b/modules/nf-core/sentieon/dnascope/meta.yml index 6b61cee8..e3e0eba8 100644 --- a/modules/nf-core/sentieon/dnascope/meta.yml +++ b/modules/nf-core/sentieon/dnascope/meta.yml @@ -1,5 +1,6 @@ name: sentieon_dnascope -description: DNAscope algorithm performs an improved version of Haplotype variant calling. +description: DNAscope algorithm performs an improved version of Haplotype variant + calling. keywords: - dnascope - sentieon @@ -11,109 +12,127 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information. - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file. - pattern: "*.bam" - - bai: - type: file - description: BAI file - pattern: "*.bai" - - intervals: - type: file - description: bed or interval_list file containing interval in the reference that will be used in the analysis - pattern: "*.{bed,interval_list}" - - meta2: - type: map - description: | - Groovy Map containing meta information for fasta. - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - meta3: - type: map - description: | - Groovy Map containing meta information for fasta index. - - fai: - type: file - description: Index of the genome fasta file - pattern: "*.fai" - - meta4: - type: map - description: | - Groovy Map containing meta information for dbsnp. - - dbsnp: - type: file - description: Single Nucleotide Polymorphism database (dbSNP) file - pattern: "*.vcf.gz" - - meta5: - type: map - description: | - Groovy Map containing meta information for dbsnp_tbi. - - dbsnp_tbi: - type: file - description: Index of the Single Nucleotide Polymorphism database (dbSNP) file - pattern: "*.vcf.gz.tbi" - - meta6: - type: map - description: | - Groovy Map containing meta information for machine learning model for Dnascope. - - ml_model: - type: file - description: machine learning model file - pattern: "*.model" - - ml_model: - type: file - description: machine learning model file - pattern: "*.model" - - pcr_indel_model: - type: string - description: | - Controls the option pcr_indel_model for Dnascope. - The possible options are "NONE" (used for PCR free samples), and "HOSTILE", "AGGRESSIVE" and "CONSERVATIVE". - See Sentieons documentation for further explanation. - - emit_vcf: - type: string - description: | - Controls the vcf output from Dnascope. - Possible options are "all", "confident" and "variant". - See Sentieons documentation for further explanation. - - emit_gvcf: - type: boolean - description: If true, the haplotyper will output a gvcf + - - meta: + type: map + description: | + Groovy Map containing sample information. + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file. + pattern: "*.bam" + - bai: + type: file + description: BAI file + pattern: "*.bai" + - intervals: + type: file + description: bed or interval_list file containing interval in the reference + that will be used in the analysis + pattern: "*.{bed,interval_list}" + - - meta2: + type: map + description: | + Groovy Map containing meta information for fasta. + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing meta information for fasta index. + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing meta information for dbsnp. + - dbsnp: + type: file + description: Single Nucleotide Polymorphism database (dbSNP) file + pattern: "*.vcf.gz" + - - meta5: + type: map + description: | + Groovy Map containing meta information for dbsnp_tbi. + - dbsnp_tbi: + type: file + description: Index of the Single Nucleotide Polymorphism database (dbSNP) file + pattern: "*.vcf.gz.tbi" + - - meta6: + type: map + description: | + Groovy Map containing meta information for machine learning model for Dnascope. + - ml_model: + type: file + description: machine learning model file + pattern: "*.model" + - - pcr_indel_model: + type: string + description: | + Controls the option pcr_indel_model for Dnascope. + The possible options are "NONE" (used for PCR free samples), and "HOSTILE", "AGGRESSIVE" and "CONSERVATIVE". + See Sentieons documentation for further explanation. + - - emit_vcf: + type: string + description: | + Controls the vcf output from Dnascope. + Possible options are "all", "confident" and "variant". + See Sentieons documentation for further explanation. + - - emit_gvcf: + type: boolean + description: If true, the haplotyper will output a gvcf output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: Compressed VCF file - pattern: "*.unfiltered.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.unfiltered.vcf.gz": + type: file + description: Compressed VCF file + pattern: "*.unfiltered.vcf.gz" - vcf_tbi: - type: file - description: Index of VCF file - pattern: "*.unfiltered.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.unfiltered.vcf.gz.tbi": + type: file + description: Index of VCF file + pattern: "*.unfiltered.vcf.gz.tbi" - gvcf: - type: file - description: Compressed GVCF file - pattern: "*.g.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.g.vcf.gz": + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" - gvcf_tbi: - type: file - description: Index of GVCF file - pattern: "*.g.vcf.gz.tbi" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - "*.g.vcf.gz.tbi": + type: file + description: Index of GVCF file + pattern: "*.g.vcf.gz.tbi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/sentieon/readwriter/environment.yml b/modules/nf-core/sentieon/readwriter/environment.yml index 423de42d..185d95bd 100644 --- a/modules/nf-core/sentieon/readwriter/environment.yml +++ b/modules/nf-core/sentieon/readwriter/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_readwriter channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/readwriter/main.nf b/modules/nf-core/sentieon/readwriter/main.nf index c12ca2f9..1011c7b2 100644 --- a/modules/nf-core/sentieon/readwriter/main.nf +++ b/modules/nf-core/sentieon/readwriter/main.nf @@ -3,12 +3,10 @@ process SENTIEON_READWRITER { label 'process_medium' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(input), path(index) @@ -16,51 +14,33 @@ process SENTIEON_READWRITER { tuple val(meta3), path(fai) output: - tuple val(meta), path("*.${format}"), emit: output - tuple val(meta), path("*.${index}") , emit: index - tuple val(meta), path("*.${format}"), path("*.${index}"), emit: output_index - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}"), emit: output + tuple val(meta), path("${prefix}.${index}"), emit: index + tuple val(meta), path("${prefix}"), path("${prefix}.${index}"), emit: output_index + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } + def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' - def input_str = input.sort().collect{"-i $it"}.join(' ') + def input_str = input.sort{ it.getName() }.collect{"-i $it"}.join(' ') def reference = fasta ? "-r $fasta" : '' - def prefix = task.ext.prefix ?: "${meta.id}" - format = input.extension == "bam" ? "bam" : "cram" - index = format == "bam" ? "bam.bai" : "cram.crai" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' - """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi + // bam -> bam: prefix = ".bam" + // bam -> cram: prefix = ".cram" + // cram -> cram: prefix = ".cram" + prefix = task.ext.prefix ?: "${meta.id}.bam" + index = prefix.tokenize('.')[-1] == "bam" ? "bai" : "crai" - $fix_ld_library_path + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" + """ + $sentieonLicense sentieon \\ driver \\ @@ -70,7 +50,7 @@ process SENTIEON_READWRITER { $input_str \\ --algo ReadWriter \\ $args2 \\ - ${prefix}.${format} + ${prefix} cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -79,22 +59,11 @@ process SENTIEON_READWRITER { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - - def prefix = task.ext.prefix ?: "${meta.id}" - format = input.extension == "bam" ? "bam" : "cram" - index = format == "bam" ? "bam.bai" : "cram.crai" + prefix = task.ext.prefix ?: "${meta.id}.cram" + index = prefix.tokenize('.')[-1] == "bam" ? "bai" : "crai" """ - $fix_ld_library_path - touch ${prefix}.${format} + touch ${prefix} touch ${prefix}.${index} cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/sentieon/readwriter/meta.yml b/modules/nf-core/sentieon/readwriter/meta.yml index d2bbec28..6e79ea19 100644 --- a/modules/nf-core/sentieon/readwriter/meta.yml +++ b/modules/nf-core/sentieon/readwriter/meta.yml @@ -1,5 +1,6 @@ name: sentieon_readwriter -description: Merges BAM files, and/or convert them into cram files. Also, outputs the result of applying the Base Quality Score Recalibration to a file. +description: Merges BAM files, and/or convert them into cram files. Also, outputs + the result of applying the Base Quality Score Recalibration to a file. keywords: - merge - convert @@ -12,59 +13,78 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information. - e.g. [ id:'test', single_end:false ] - - 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' ] - - input: - type: file - description: BAM/CRAM file. - pattern: "*.{bam,cram}" - - index: - type: file - description: BAI/CRAI file. - pattern: "*.{bai,crai}" - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: The index of the FASTA reference. - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information. + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file. + pattern: "*.{bam,cram}" + - index: + type: file + description: BAI/CRAI file. + pattern: "*.{bai,crai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test' ] + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test' ] + - fai: + type: file + description: The index of the FASTA reference. + pattern: "*.fai" output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - output: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: BAM/CRAM file. Depends on how ext.prefix is set. BAM "ext.prefix + = .bam", CRAM "ext.prefix = .cram". Defaults to cram + pattern: "*.{bam,cram}" - index: - type: file - description: BAM/CRAM index file - pattern: "*.{bai,crai}" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - ${prefix}.${index}: + type: file + description: BAM/CRAM index file + pattern: "*.{bai,crai}" - output_index: - type: file - description: BAM/CRAM alignment and the corresponding index file + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: BAM/CRAM alignment and the corresponding index file + - ${prefix}.${index}: + type: file + description: BAM/CRAM alignment and the corresponding index file - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/sentieon/readwriter/tests/main.nf.test b/modules/nf-core/sentieon/readwriter/tests/main.nf.test new file mode 100644 index 00000000..9a787b44 --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/tests/main.nf.test @@ -0,0 +1,168 @@ +nextflow_process { + + name "Test Process SENTIEON_READWRITER" + script "../main.nf" + process "SENTIEON_READWRITER" + + tag "modules" + tag "modules_nfcore" + tag "sentieon" + tag "sentieon/readwriter" + + test("merge bam") { + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [id: 'test' ], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [[:],[]] + input[2] = [[:],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.output[0][1], stringency: "lenient").getReadsMD5(), + file(process.out.index.get(0).get(1)).name, + process.out.versions + ).match() } + + ) + } + + } + + test("cram") { + config "./nextflow_outputcram.config" + when { + process { + """ + input[0] = [ [id: 'test', fasta: params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta' ], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + input[1] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.output[0][1], process.out.output[0][0].fasta).getReadsMD5(), + file(process.out.index.get(0).get(1)).name, + process.out.versions + ).match() } + + ) + } + } + + test("merging - output bam") { + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [id: 'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) + ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) + ] + ] + input[1] = [[:],[]] + input[2] = [[:],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.output[0][1], stringency: "lenient").getReadsMD5(), + file(process.out.index.get(0).get(1)).name, + process.out.versions + ).match() } + + ) + } + + } + + test("merging - output bam to cram") { + config "./nextflow_outputcram.config" + + when { + process { + """ + input[0] = [ [id: 'test', fasta: params.modules_testdata_base_path + '/genomics/sarscov2/genome/genome.fasta' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) + ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam.bai', checkIfExists: true) + ] + ] + input[1] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + bam(process.out.output[0][1], process.out.output[0][0].fasta).getReadsMD5(), + file(process.out.index.get(0).get(1)).name, + process.out.versions + ).match() } + + ) + } + + } + + test("sentieon readwriter - stub") { + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [id: 'test' ], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + input[1] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [ id:'fasta' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap b/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap new file mode 100644 index 00000000..6e71a1d2 --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap @@ -0,0 +1,125 @@ +{ + "merge bam": { + "content": [ + "2f11e4fe3390b8ad0a1852616fd1da04", + "test.bam.bai", + [ + "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-01T13:14:43.34615" + }, + "cram": { + "content": [ + "2f11e4fe3390b8ad0a1852616fd1da04", + "test.cram.crai", + [ + "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-01T13:14:53.60186" + }, + "merging - output bam": { + "content": [ + "ed89d81d2d6adafdbb819a1a4ec86493", + "test.bam.bai", + [ + "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-01T13:15:03.780064" + }, + "merging - output bam to cram": { + "content": [ + "ed89d81d2d6adafdbb819a1a4ec86493", + "test.cram.crai", + [ + "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-01T13:15:15.313494" + }, + "sentieon readwriter - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + ], + "index": [ + [ + { + "id": "test" + }, + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "output_index": [ + [ + { + "id": "test" + }, + "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-08-01T13:15:23.88137" + } +} \ No newline at end of file diff --git a/modules/nf-core/sentieon/readwriter/tests/nextflow.config b/modules/nf-core/sentieon/readwriter/tests/nextflow.config new file mode 100644 index 00000000..c1e9e486 --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/tests/nextflow.config @@ -0,0 +1,9 @@ +env { + // NOTE This is how pipeline users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how pipeline users will test out Sentieon with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} diff --git a/modules/nf-core/sentieon/readwriter/tests/nextflow_outputcram.config b/modules/nf-core/sentieon/readwriter/tests/nextflow_outputcram.config new file mode 100644 index 00000000..56c30c26 --- /dev/null +++ b/modules/nf-core/sentieon/readwriter/tests/nextflow_outputcram.config @@ -0,0 +1,16 @@ +env { + // NOTE This is how pipeline users will use Sentieon in real world use + SENTIEON_LICENSE = "$SENTIEON_LICSRVR_IP" + // NOTE This should only happen in GitHub actions or nf-core MegaTests + SENTIEON_AUTH_MECH = "$SENTIEON_AUTH_MECH" + SENTIEON_AUTH_DATA = secrets.SENTIEON_AUTH_DATA + // NOTE This is how pipeline users will test out Sentieon with a license file + // nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) +} + + +process { + withName: "SENTIEON_READWRITER" { + ext.prefix = { "${meta.id}.cram" } + } +} diff --git a/modules/nf-core/sentieon/wgsmetrics/environment.yml b/modules/nf-core/sentieon/wgsmetrics/environment.yml index a33a3fcc..185d95bd 100644 --- a/modules/nf-core/sentieon/wgsmetrics/environment.yml +++ b/modules/nf-core/sentieon/wgsmetrics/environment.yml @@ -1,7 +1,5 @@ -name: sentieon_wgsmetrics channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/wgsmetrics/main.nf b/modules/nf-core/sentieon/wgsmetrics/main.nf index 811c0077..fad8d071 100644 --- a/modules/nf-core/sentieon/wgsmetrics/main.nf +++ b/modules/nf-core/sentieon/wgsmetrics/main.nf @@ -3,12 +3,10 @@ process SENTIEON_WGSMETRICS { label 'process_medium' label 'sentieon' - secret 'SENTIEON_LICENSE_BASE64' - conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : - 'biocontainers/sentieon:202308.02--h43eeafb_0' }" + 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : + 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" input: tuple val(meta), path(bam), path(bai) @@ -16,7 +14,6 @@ process SENTIEON_WGSMETRICS { tuple val(meta3), path(fai) tuple val(meta4), path(intervals_list) - output: tuple val(meta), path('*.txt'), emit: wgs_metrics path "versions.yml" , emit: versions @@ -25,39 +22,15 @@ process SENTIEON_WGSMETRICS { task.ext.when == null || task.ext.when script: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" def interval = intervals_list ? "--interval ${intervals_list}" : "" - def sentieon_auth_mech_base64 = task.ext.sentieon_auth_mech_base64 ?: '' - def sentieon_auth_data_base64 = task.ext.sentieon_auth_data_base64 ?: '' + def sentieonLicense = secrets.SENTIEON_LICENSE_BASE64 ? + "export SENTIEON_LICENSE=\$(mktemp);echo -e \"${secrets.SENTIEON_LICENSE_BASE64}\" | base64 -d > \$SENTIEON_LICENSE; " : + "" """ - if [ "\${#SENTIEON_LICENSE_BASE64}" -lt "1500" ]; then # If the string SENTIEON_LICENSE_BASE64 is short, then it is an encrypted url. - export SENTIEON_LICENSE=\$(echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d) - else # Localhost license file - # The license file is stored as a nextflow variable like, for instance, this: - # nextflow secrets set SENTIEON_LICENSE_BASE64 \$(cat | base64 -w 0) - export SENTIEON_LICENSE=\$(mktemp) - echo -e "\$SENTIEON_LICENSE_BASE64" | base64 -d > \$SENTIEON_LICENSE - fi - - if [ ${sentieon_auth_mech_base64} ] && [ ${sentieon_auth_data_base64} ]; then - # If sentieon_auth_mech_base64 and sentieon_auth_data_base64 are non-empty strings, then Sentieon is mostly likely being run with some test-license. - export SENTIEON_AUTH_MECH=\$(echo -n "${sentieon_auth_mech_base64}" | base64 -d) - export SENTIEON_AUTH_DATA=\$(echo -n "${sentieon_auth_data_base64}" | base64 -d) - echo "Decoded and exported Sentieon test-license system environment variables" - fi - - $fix_ld_library_path + $sentieonLicense sentieon \\ driver \\ @@ -75,19 +48,8 @@ process SENTIEON_WGSMETRICS { """ stub: - // The following code sets LD_LIBRARY_PATH in the script-section when the module is run by Singularity. - // That turned out to be one way of overcoming the following issue with the Singularity-Sentieon-containers from galaxy, Sentieon (LD_LIBRARY_PATH) and the way Nextflow runs Singularity-containers. - // The galaxy container uses a runscript which is responsible for setting LD_PRELOAD properly. Nextflow executes singularity containers using `singularity exec`, which avoids the run script, leading to the LD_LIBRARY_PATH/libstdc++.so.6 error. - if (workflow.containerEngine in ['singularity','apptainer']) { - fix_ld_library_path = 'LD_LIBRARY_PATH=/usr/local/lib/:\$LD_LIBRARY_PATH;export LD_LIBRARY_PATH' - } else { - fix_ld_library_path = '' - } - def prefix = task.ext.prefix ?: "${meta.id}" """ - $fix_ld_library_path - touch ${prefix}.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/sentieon/wgsmetrics/meta.yml b/modules/nf-core/sentieon/wgsmetrics/meta.yml index 86431e1c..a8b64727 100644 --- a/modules/nf-core/sentieon/wgsmetrics/meta.yml +++ b/modules/nf-core/sentieon/wgsmetrics/meta.yml @@ -11,61 +11,64 @@ tools: Our software improves upon BWA, STAR, Minimap2, GATK, HaplotypeCaller, Mutect, and Mutect2 based pipelines and is deployable on any generic-CPU-based computing system. homepage: https://www.sentieon.com/ documentation: https://www.sentieon.com/ + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - 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' ]` - - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - bai: - type: file - description: Index of th sorted BAM/CRAM/SAM file - pattern: "*.{bai,crai,sai}" - - fasta: - type: file - description: Genome fasta file - pattern: "*.{fa,fasta}" - - fai: - type: file - description: Index of the genome fasta file - pattern: "*.fai" - - interval_list: - type: file - description: bed or interval_list file containing interval in the reference that will be used in the analysis - pattern: "*.{bed,interval_list}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index of th sorted BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fasta: + type: file + description: Genome fasta file + pattern: "*.{fa,fasta}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fai: + type: file + description: Index of the genome fasta file + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - intervals_list: + type: file + description: intervals 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" - wgs_metrics: - type: file - description: File containing the information about mean base quality score for each sequencing cycle - pattern: "*.txt" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.txt": + type: file + description: File containing the information about mean base quality score for + each sequencing cycle + pattern: "*.txt" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: From e4bfde16b3ecfe89842a0ce0b1a8d49fc3e507a2 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:45:59 +0200 Subject: [PATCH 1908/1921] update sentieon --- modules.json | 16 ++--- .../nf-core/sentieon/bwaindex/environment.yml | 2 +- modules/nf-core/sentieon/bwaindex/main.nf | 4 +- .../nf-core/sentieon/bwamem/environment.yml | 2 +- modules/nf-core/sentieon/bwamem/main.nf | 4 +- .../sentieon/bwamem/tests/main.nf.test.snap | 50 +++++++------- .../sentieon/datametrics/environment.yml | 2 +- modules/nf-core/sentieon/datametrics/main.nf | 4 +- .../datametrics/tests/main.nf.test.snap | 66 +++++++++---------- .../nf-core/sentieon/dedup/environment.yml | 2 +- modules/nf-core/sentieon/dedup/main.nf | 4 +- .../sentieon/dedup/tests/main.nf.test.snap | 56 ++++++++-------- .../sentieon/dnamodelapply/environment.yml | 2 +- .../nf-core/sentieon/dnamodelapply/main.nf | 4 +- .../nf-core/sentieon/dnascope/environment.yml | 2 +- modules/nf-core/sentieon/dnascope/main.nf | 4 +- .../sentieon/readwriter/environment.yml | 2 +- modules/nf-core/sentieon/readwriter/main.nf | 4 +- .../readwriter/tests/main.nf.test.snap | 32 ++++----- .../sentieon/wgsmetrics/environment.yml | 2 +- modules/nf-core/sentieon/wgsmetrics/main.nf | 4 +- 21 files changed, 134 insertions(+), 134 deletions(-) diff --git a/modules.json b/modules.json index 1f876eee..d2a9ebaf 100644 --- a/modules.json +++ b/modules.json @@ -404,42 +404,42 @@ }, "sentieon/bwaindex": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/bwamem": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/datametrics": { "branch": "master", - "git_sha": "2da71b7a52a7c6609cb8f29d316ed3fd90d0f7cc", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/dedup": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/dnamodelapply": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/dnascope": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/readwriter": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "sentieon/wgsmetrics": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "eb7b70119bfb1877334c996d13e520c61b21067d", "installed_by": ["modules"] }, "smncopynumbercaller": { diff --git a/modules/nf-core/sentieon/bwaindex/environment.yml b/modules/nf-core/sentieon/bwaindex/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/bwaindex/environment.yml +++ b/modules/nf-core/sentieon/bwaindex/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/bwaindex/main.nf b/modules/nf-core/sentieon/bwaindex/main.nf index 2d3f1afa..4372cc04 100644 --- a/modules/nf-core/sentieon/bwaindex/main.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -5,8 +5,8 @@ process SENTIEON_BWAINDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/sentieon/bwamem/environment.yml b/modules/nf-core/sentieon/bwamem/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/bwamem/environment.yml +++ b/modules/nf-core/sentieon/bwamem/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index 76e364de..c038a857 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -5,8 +5,8 @@ process SENTIEON_BWAMEM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap b/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap index 0dc67a9a..77070ccc 100644 --- a/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/bwamem/tests/main.nf.test.snap @@ -8,12 +8,12 @@ "id": "test", "single_end": true }, - "test.bam:md5,58bc2194d084cf8462a3a7f6114c303a", - "test.bam.bai:md5,4fd9b026ff2306cc292cd695e11d5628" + "test.bam:md5,7b62831cb67d6d4a8e33b3cb788dfb1b", + "test.bam.bai:md5,6fc1dff58fab0491ecfa48f016041a18" ] ], "1": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ], "bam_and_bai": [ [ @@ -21,12 +21,12 @@ "id": "test", "single_end": true }, - "test.bam:md5,58bc2194d084cf8462a3a7f6114c303a", - "test.bam.bai:md5,4fd9b026ff2306cc292cd695e11d5628" + "test.bam:md5,7b62831cb67d6d4a8e33b3cb788dfb1b", + "test.bam.bai:md5,6fc1dff58fab0491ecfa48f016041a18" ] ], "versions": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ] } ], @@ -34,7 +34,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-19T08:58:40.112926615" + "timestamp": "2024-10-02T10:25:33.275731212" }, "Paired-End - stub": { "content": [ @@ -50,7 +50,7 @@ ] ], "1": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ], "bam_and_bai": [ [ @@ -63,7 +63,7 @@ ] ], "versions": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ] } ], @@ -71,7 +71,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-19T08:59:20.476791905" + "timestamp": "2024-10-02T10:26:16.58588651" }, "Paired-End": { "content": [ @@ -82,12 +82,12 @@ "id": "test", "single_end": false }, - "test.bam:md5,3418d864f42215d1c0c8d604d9571b0d", + "test.bam:md5,b0c8606d660dbe50a34cf80a376bb268", "test.bam.bai:md5,be4ad85790468042f7fc01ca2e36a919" ] ], "1": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ], "bam_and_bai": [ [ @@ -95,12 +95,12 @@ "id": "test", "single_end": false }, - "test.bam:md5,3418d864f42215d1c0c8d604d9571b0d", + "test.bam:md5,b0c8606d660dbe50a34cf80a376bb268", "test.bam.bai:md5,be4ad85790468042f7fc01ca2e36a919" ] ], "versions": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ] } ], @@ -108,7 +108,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-19T08:59:00.346034062" + "timestamp": "2024-10-02T10:25:55.068934639" }, "Single-End - stub": { "content": [ @@ -124,7 +124,7 @@ ] ], "1": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ], "bam_and_bai": [ [ @@ -137,7 +137,7 @@ ] ], "versions": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ] } ], @@ -145,7 +145,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-19T08:59:10.054146084" + "timestamp": "2024-10-02T10:26:05.151760076" }, "Single-End Output CRAM": { "content": [ @@ -156,12 +156,12 @@ "id": "test", "single_end": true }, - "test.cram:md5,04d88bd709dc0bc27ca81a09e80d4a1b", - "test.cram.crai:md5,ac34c713fe95aa8a1fd6291bdbb76dcf" + "test.cram:md5,817cf0847ae0c89062e2ee4be312101a", + "test.cram.crai:md5,60f801c550a18982e55207adb31ec351" ] ], "1": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ], "bam_and_bai": [ [ @@ -169,12 +169,12 @@ "id": "test", "single_end": true }, - "test.cram:md5,04d88bd709dc0bc27ca81a09e80d4a1b", - "test.cram.crai:md5,ac34c713fe95aa8a1fd6291bdbb76dcf" + "test.cram:md5,817cf0847ae0c89062e2ee4be312101a", + "test.cram.crai:md5,60f801c550a18982e55207adb31ec351" ] ], "versions": [ - "versions.yml:md5,6095ad80036c5d876c2616504a21efcc" + "versions.yml:md5,755d24c7416c1408313ec93814cef759" ] } ], @@ -182,6 +182,6 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-08-19T08:58:49.962693499" + "timestamp": "2024-10-02T10:25:44.360755915" } } \ No newline at end of file diff --git a/modules/nf-core/sentieon/datametrics/environment.yml b/modules/nf-core/sentieon/datametrics/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/datametrics/environment.yml +++ b/modules/nf-core/sentieon/datametrics/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/datametrics/main.nf b/modules/nf-core/sentieon/datametrics/main.nf index 6567cc72..85bf6b50 100644 --- a/modules/nf-core/sentieon/datametrics/main.nf +++ b/modules/nf-core/sentieon/datametrics/main.nf @@ -5,8 +5,8 @@ process SENTIEON_DATAMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap b/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap index 25b1ae12..d3161210 100644 --- a/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/datametrics/tests/main.nf.test.snap @@ -21,7 +21,7 @@ ] ], "10": [ - "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + "versions.yml:md5,aa6e267932a3f74d88a7bce286a1493a" ], "2": [ [ @@ -186,7 +186,7 @@ ] ], "versions": [ - "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + "versions.yml:md5,aa6e267932a3f74d88a7bce286a1493a" ] } ], @@ -194,7 +194,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-09-20T12:01:01.974389137" + "timestamp": "2024-10-02T10:22:45.899449567" }, "metrics - with plots": { "content": [ @@ -205,7 +205,7 @@ "id": "test", "single_end": false }, - "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + "test_mq_metrics.txt:md5,159ed897b11e7621703365134f60c1f7" ] ], "1": [ @@ -214,11 +214,11 @@ "id": "test", "single_end": false }, - "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + "test_qd_metrics.txt:md5,fa86f2f5cc195ea48565401f68ba0730" ] ], "10": [ - "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + "versions.yml:md5,aa6e267932a3f74d88a7bce286a1493a" ], "2": [ [ @@ -226,7 +226,7 @@ "id": "test", "single_end": false }, - "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + "test_gc_summary.txt:md5,367143e0f7680555bb68173561919e5f" ] ], "3": [ @@ -235,7 +235,7 @@ "id": "test", "single_end": false }, - "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + "test_gc_metrics.txt:md5,42d6ee7ce81858329b66c38e6558d66d" ] ], "4": [ @@ -244,7 +244,7 @@ "id": "test", "single_end": false }, - "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + "test_aln_metrics.txt:md5,1950af402ff3751023761de5bb649b43" ] ], "5": [ @@ -253,7 +253,7 @@ "id": "test", "single_end": false }, - "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + "test_is_metrics.txt:md5,0ce93baa9d470f9b6344094218d74e59" ] ], "6": [ @@ -298,7 +298,7 @@ "id": "test", "single_end": false }, - "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + "test_aln_metrics.txt:md5,1950af402ff3751023761de5bb649b43" ] ], "gc_metrics": [ @@ -307,7 +307,7 @@ "id": "test", "single_end": false }, - "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + "test_gc_metrics.txt:md5,42d6ee7ce81858329b66c38e6558d66d" ] ], "gc_plot": [ @@ -325,7 +325,7 @@ "id": "test", "single_end": false }, - "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + "test_gc_summary.txt:md5,367143e0f7680555bb68173561919e5f" ] ], "is_metrics": [ @@ -334,7 +334,7 @@ "id": "test", "single_end": false }, - "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + "test_is_metrics.txt:md5,0ce93baa9d470f9b6344094218d74e59" ] ], "is_plot": [ @@ -352,7 +352,7 @@ "id": "test", "single_end": false }, - "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + "test_mq_metrics.txt:md5,159ed897b11e7621703365134f60c1f7" ] ], "mq_plot": [ @@ -370,7 +370,7 @@ "id": "test", "single_end": false }, - "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + "test_qd_metrics.txt:md5,fa86f2f5cc195ea48565401f68ba0730" ] ], "qd_plot": [ @@ -383,7 +383,7 @@ ] ], "versions": [ - "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + "versions.yml:md5,aa6e267932a3f74d88a7bce286a1493a" ] } ], @@ -391,7 +391,7 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-09-20T12:00:41.711146115" + "timestamp": "2024-10-02T10:22:36.981327826" }, "metrics - no plots": { "content": [ @@ -402,7 +402,7 @@ "id": "test", "single_end": false }, - "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + "test_mq_metrics.txt:md5,159ed897b11e7621703365134f60c1f7" ] ], "1": [ @@ -411,11 +411,11 @@ "id": "test", "single_end": false }, - "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + "test_qd_metrics.txt:md5,fa86f2f5cc195ea48565401f68ba0730" ] ], "10": [ - "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + "versions.yml:md5,aa6e267932a3f74d88a7bce286a1493a" ], "2": [ [ @@ -423,7 +423,7 @@ "id": "test", "single_end": false }, - "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + "test_gc_summary.txt:md5,367143e0f7680555bb68173561919e5f" ] ], "3": [ @@ -432,7 +432,7 @@ "id": "test", "single_end": false }, - "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + "test_gc_metrics.txt:md5,42d6ee7ce81858329b66c38e6558d66d" ] ], "4": [ @@ -441,7 +441,7 @@ "id": "test", "single_end": false }, - "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + "test_aln_metrics.txt:md5,1950af402ff3751023761de5bb649b43" ] ], "5": [ @@ -450,7 +450,7 @@ "id": "test", "single_end": false }, - "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + "test_is_metrics.txt:md5,0ce93baa9d470f9b6344094218d74e59" ] ], "6": [ @@ -471,7 +471,7 @@ "id": "test", "single_end": false }, - "test_aln_metrics.txt:md5,1cf61ba2d564cf427976d2543fd770ac" + "test_aln_metrics.txt:md5,1950af402ff3751023761de5bb649b43" ] ], "gc_metrics": [ @@ -480,7 +480,7 @@ "id": "test", "single_end": false }, - "test_gc_metrics.txt:md5,1ed8166e64c9a44e40ab6e5173489ef2" + "test_gc_metrics.txt:md5,42d6ee7ce81858329b66c38e6558d66d" ] ], "gc_plot": [ @@ -492,7 +492,7 @@ "id": "test", "single_end": false }, - "test_gc_summary.txt:md5,33e6d54497ac882486c38ec05b2ca60a" + "test_gc_summary.txt:md5,367143e0f7680555bb68173561919e5f" ] ], "is_metrics": [ @@ -501,7 +501,7 @@ "id": "test", "single_end": false }, - "test_is_metrics.txt:md5,be543f33974d1ed4663ef2676a416669" + "test_is_metrics.txt:md5,0ce93baa9d470f9b6344094218d74e59" ] ], "is_plot": [ @@ -513,7 +513,7 @@ "id": "test", "single_end": false }, - "test_mq_metrics.txt:md5,4f4540509edee8dc3ad78caf1733e206" + "test_mq_metrics.txt:md5,159ed897b11e7621703365134f60c1f7" ] ], "mq_plot": [ @@ -525,14 +525,14 @@ "id": "test", "single_end": false }, - "test_qd_metrics.txt:md5,f53e8b0da374aa35908cfd2180bf1406" + "test_qd_metrics.txt:md5,fa86f2f5cc195ea48565401f68ba0730" ] ], "qd_plot": [ ], "versions": [ - "versions.yml:md5,7c769d886e94ed56a45445ac1c9ebcdf" + "versions.yml:md5,aa6e267932a3f74d88a7bce286a1493a" ] } ], @@ -540,6 +540,6 @@ "nf-test": "0.9.0", "nextflow": "24.04.4" }, - "timestamp": "2024-09-20T12:00:27.37021578" + "timestamp": "2024-10-02T10:22:26.909097428" } } \ No newline at end of file diff --git a/modules/nf-core/sentieon/dedup/environment.yml b/modules/nf-core/sentieon/dedup/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/dedup/environment.yml +++ b/modules/nf-core/sentieon/dedup/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf index f0b387f6..5735df73 100644 --- a/modules/nf-core/sentieon/dedup/main.nf +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -5,8 +5,8 @@ process SENTIEON_DEDUP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap b/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap index c1cd83ec..26117a7c 100644 --- a/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/dedup/tests/main.nf.test.snap @@ -7,7 +7,7 @@ { "id": "test" }, - "test.cram:md5,d2993113f4614f5196fc74d489412fc4" + "test.cram:md5,e46e97256846338e1cff32d862105491" ] ], "1": [ @@ -34,7 +34,7 @@ { "id": "test" }, - "test.score:md5,a97459ff2939682091bac3c3912402dc" + "test.score:md5,835f05ecc5d3ef5d4e31ba7f831d9a8b" ] ], "5": [ @@ -42,7 +42,7 @@ { "id": "test" }, - "test.cram.metrics:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + "test.cram.metrics:md5,208f7c5fa2f489cfaaffbce116fed0bc" ] ], "6": [ @@ -50,11 +50,11 @@ { "id": "test" }, - "test.cram.metrics.multiqc.tsv:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + "test.cram.metrics.multiqc.tsv:md5,208f7c5fa2f489cfaaffbce116fed0bc" ] ], "7": [ - "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + "versions.yml:md5,763463853476be96846b6da5aecfacf4" ], "bai": [ [ @@ -80,7 +80,7 @@ { "id": "test" }, - "test.cram:md5,d2993113f4614f5196fc74d489412fc4" + "test.cram:md5,e46e97256846338e1cff32d862105491" ] ], "metrics": [ @@ -88,7 +88,7 @@ { "id": "test" }, - "test.cram.metrics:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + "test.cram.metrics:md5,208f7c5fa2f489cfaaffbce116fed0bc" ] ], "metrics_multiqc_tsv": [ @@ -96,7 +96,7 @@ { "id": "test" }, - "test.cram.metrics.multiqc.tsv:md5,ccd45ea1f2397184e3ab271b1ba8bb2a" + "test.cram.metrics.multiqc.tsv:md5,208f7c5fa2f489cfaaffbce116fed0bc" ] ], "score": [ @@ -104,19 +104,19 @@ { "id": "test" }, - "test.score:md5,a97459ff2939682091bac3c3912402dc" + "test.score:md5,835f05ecc5d3ef5d4e31ba7f831d9a8b" ] ], "versions": [ - "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + "versions.yml:md5,763463853476be96846b6da5aecfacf4" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-26T13:02:23.640202" + "timestamp": "2024-10-02T10:28:10.570152622" }, "Test removing duplicates": { "content": [ @@ -126,7 +126,7 @@ { "id": "test" }, - "test.cram:md5,e67398ab64430191f9d15cb8a8f425c7" + "test.cram:md5,8075d3e7c66d36fdbb81270eefc996d4" ] ], "1": [ @@ -153,7 +153,7 @@ { "id": "test" }, - "test.score:md5,a97459ff2939682091bac3c3912402dc" + "test.score:md5,835f05ecc5d3ef5d4e31ba7f831d9a8b" ] ], "5": [ @@ -161,7 +161,7 @@ { "id": "test" }, - "test.cram.metrics:md5,7fc2ddc6b21838bdc42aff146549cea2" + "test.cram.metrics:md5,2a41239de0275a8321f4658286d97d65" ] ], "6": [ @@ -169,11 +169,11 @@ { "id": "test" }, - "test.cram.metrics.multiqc.tsv:md5,7fc2ddc6b21838bdc42aff146549cea2" + "test.cram.metrics.multiqc.tsv:md5,2a41239de0275a8321f4658286d97d65" ] ], "7": [ - "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + "versions.yml:md5,763463853476be96846b6da5aecfacf4" ], "bai": [ [ @@ -199,7 +199,7 @@ { "id": "test" }, - "test.cram:md5,e67398ab64430191f9d15cb8a8f425c7" + "test.cram:md5,8075d3e7c66d36fdbb81270eefc996d4" ] ], "metrics": [ @@ -207,7 +207,7 @@ { "id": "test" }, - "test.cram.metrics:md5,7fc2ddc6b21838bdc42aff146549cea2" + "test.cram.metrics:md5,2a41239de0275a8321f4658286d97d65" ] ], "metrics_multiqc_tsv": [ @@ -215,7 +215,7 @@ { "id": "test" }, - "test.cram.metrics.multiqc.tsv:md5,7fc2ddc6b21838bdc42aff146549cea2" + "test.cram.metrics.multiqc.tsv:md5,2a41239de0275a8321f4658286d97d65" ] ], "score": [ @@ -223,19 +223,19 @@ { "id": "test" }, - "test.score:md5,a97459ff2939682091bac3c3912402dc" + "test.score:md5,835f05ecc5d3ef5d4e31ba7f831d9a8b" ] ], "versions": [ - "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + "versions.yml:md5,763463853476be96846b6da5aecfacf4" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-26T13:02:33.698037" + "timestamp": "2024-10-02T10:28:19.377946074" }, "Test stub": { "content": [ @@ -292,7 +292,7 @@ ] ], "7": [ - "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + "versions.yml:md5,763463853476be96846b6da5aecfacf4" ], "bai": [ [ @@ -346,14 +346,14 @@ ] ], "versions": [ - "versions.yml:md5,f057aca19107ce54f0cec1e42edd097e" + "versions.yml:md5,763463853476be96846b6da5aecfacf4" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-07-26T13:02:41.360148" + "timestamp": "2024-10-02T10:28:28.792696026" } } \ No newline at end of file diff --git a/modules/nf-core/sentieon/dnamodelapply/environment.yml b/modules/nf-core/sentieon/dnamodelapply/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/dnamodelapply/environment.yml +++ b/modules/nf-core/sentieon/dnamodelapply/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf index b4b10ce4..85fd601b 100644 --- a/modules/nf-core/sentieon/dnamodelapply/main.nf +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -5,8 +5,8 @@ process SENTIEON_DNAMODELAPPLY { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(vcf), path(idx) diff --git a/modules/nf-core/sentieon/dnascope/environment.yml b/modules/nf-core/sentieon/dnascope/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/dnascope/environment.yml +++ b/modules/nf-core/sentieon/dnascope/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index 63d7d23b..bdeb6252 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -5,8 +5,8 @@ process SENTIEON_DNASCOPE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(bam), path(bai), path(intervals) diff --git a/modules/nf-core/sentieon/readwriter/environment.yml b/modules/nf-core/sentieon/readwriter/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/readwriter/environment.yml +++ b/modules/nf-core/sentieon/readwriter/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/readwriter/main.nf b/modules/nf-core/sentieon/readwriter/main.nf index 1011c7b2..7e00b9e9 100644 --- a/modules/nf-core/sentieon/readwriter/main.nf +++ b/modules/nf-core/sentieon/readwriter/main.nf @@ -5,8 +5,8 @@ process SENTIEON_READWRITER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap b/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap index 6e71a1d2..0af60789 100644 --- a/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap +++ b/modules/nf-core/sentieon/readwriter/tests/main.nf.test.snap @@ -4,56 +4,56 @@ "2f11e4fe3390b8ad0a1852616fd1da04", "test.bam.bai", [ - "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + "versions.yml:md5,914cac5a1fad066362698afc9419ecb2" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-08-01T13:14:43.34615" + "timestamp": "2024-10-02T10:32:10.696224516" }, "cram": { "content": [ "2f11e4fe3390b8ad0a1852616fd1da04", "test.cram.crai", [ - "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + "versions.yml:md5,914cac5a1fad066362698afc9419ecb2" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-08-01T13:14:53.60186" + "timestamp": "2024-10-02T10:32:23.080911465" }, "merging - output bam": { "content": [ "ed89d81d2d6adafdbb819a1a4ec86493", "test.bam.bai", [ - "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + "versions.yml:md5,914cac5a1fad066362698afc9419ecb2" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-08-01T13:15:03.780064" + "timestamp": "2024-10-02T10:32:36.741074568" }, "merging - output bam to cram": { "content": [ "ed89d81d2d6adafdbb819a1a4ec86493", "test.cram.crai", [ - "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + "versions.yml:md5,914cac5a1fad066362698afc9419ecb2" ] ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-08-01T13:15:15.313494" + "timestamp": "2024-10-02T10:33:50.523887508" }, "sentieon readwriter - stub": { "content": [ @@ -84,7 +84,7 @@ ] ], "3": [ - "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + "versions.yml:md5,914cac5a1fad066362698afc9419ecb2" ], "index": [ [ @@ -112,14 +112,14 @@ ] ], "versions": [ - "versions.yml:md5,7e0e065f92de4419098841b16968fbed" + "versions.yml:md5,914cac5a1fad066362698afc9419ecb2" ] } ], "meta": { "nf-test": "0.9.0", - "nextflow": "24.04.3" + "nextflow": "24.04.4" }, - "timestamp": "2024-08-01T13:15:23.88137" + "timestamp": "2024-10-02T10:34:00.856232997" } } \ No newline at end of file diff --git a/modules/nf-core/sentieon/wgsmetrics/environment.yml b/modules/nf-core/sentieon/wgsmetrics/environment.yml index 185d95bd..d7abf668 100644 --- a/modules/nf-core/sentieon/wgsmetrics/environment.yml +++ b/modules/nf-core/sentieon/wgsmetrics/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::sentieon=202308.02 + - bioconda::sentieon=202308.03 diff --git a/modules/nf-core/sentieon/wgsmetrics/main.nf b/modules/nf-core/sentieon/wgsmetrics/main.nf index fad8d071..9f268f5a 100644 --- a/modules/nf-core/sentieon/wgsmetrics/main.nf +++ b/modules/nf-core/sentieon/wgsmetrics/main.nf @@ -5,8 +5,8 @@ process SENTIEON_WGSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'oras://community.wave.seqera.io/library/sentieon:202308.02--ffce1b7074ce9924' : - 'nf-core/sentieon:202308.02--c641bc397cbf79d5' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a6/a64461f38d76bebea8e21441079e76e663e1168b0c59dafee6ee58440ad8c8ac/data' : + 'community.wave.seqera.io/library/sentieon:202308.03--59589f002351c221' }" input: tuple val(meta), path(bam), path(bai) From 782271eb0f0702bb095836354fef67020db303ca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:39:38 +0200 Subject: [PATCH 1909/1921] update sentieon configs and rtgeval workflow --- conf/modules/align_sentieon.config | 9 ++++----- subworkflows/local/alignment/align_sentieon.nf | 2 +- subworkflows/local/variant_evaluation.nf | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index 56b75c26..9ae4aeb7 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -19,7 +19,7 @@ process { withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { ext.args = { "-M -K 10000000 -R ${meta.read_group} " } - ext.prefix = { "${meta.id}_sorted" } + ext.prefix = { "${meta.id}_sorted.bam" } } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { @@ -27,13 +27,12 @@ process { } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_READWRITER' { - ext.prefix = { "${meta.id}_merged" } + ext.prefix = { "${meta.id}_merged.bam" } } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { - ext.args = { $params.rmdup ? "--rmdup" : '' } - ext.prefix = { "${meta.id}_dedup" } - ext.suffix = ".bam" + ext.args4 = { $params.rmdup ? "--rmdup" : '' } + ext.prefix = { "${meta.id}_dedup.bam" } publishDir = [ enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 792d9c34..dc5daa60 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -36,7 +36,7 @@ workflow ALIGN_SENTIEON { SENTIEON_READWRITER ( merge_bams_in.multiple, ch_genome_fasta, ch_genome_fai ) ch_bam_bai = merge_bams_in.single.mix(SENTIEON_READWRITER.out.output_index) - SENTIEON_DATAMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai ) + SENTIEON_DATAMETRICS ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, false ) SENTIEON_DEDUP ( ch_bam_bai, ch_genome_fasta, ch_genome_fai ) diff --git a/subworkflows/local/variant_evaluation.nf b/subworkflows/local/variant_evaluation.nf index af4ed2a2..fc740325 100644 --- a/subworkflows/local/variant_evaluation.nf +++ b/subworkflows/local/variant_evaluation.nf @@ -37,7 +37,7 @@ workflow VARIANT_EVALUATION { ch_snv_vcf_tbi .combine(ch_truthvcf_tbi) .map { meta, query, qidx, meta2, truth, tidx -> - return [meta + [samplename: meta2.samplename] , query, qidx, truth, tidx, meta2.bedregions, meta2.evaluationregions] + return [meta + [samplename: meta2.samplename] , query, qidx, truth, tidx, meta2.evaluationregions, meta2.bedregions] } .set { ch_vcfeval_in } From 3740b584c9db2404d0eb4f4ebb72f448319e59ea Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:40:44 +0200 Subject: [PATCH 1910/1921] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1931c63..7bdfd80f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Update tools [#622](https://github.com/nf-core/raredisease/pull/622) - Update output file name prefix for upd and chromograph to sample-based [#620](https://github.com/nf-core/raredisease/pull/620) - Update tools [#619](https://github.com/nf-core/raredisease/pull/619) - Report only variants above 5% heteroplasmy in the clinical vcf file for mitochondria [#616](https://github.com/nf-core/raredisease/pull/616) @@ -30,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | multiqc | 1.21 | 1.25 | | picard | 3.1.1 | 3.2.0 | | samtools | 1.19.2 | 1.21 | +| sentieon | 202308.02 | 202308.03 | | stranger | 0.8.1 | 0.9.1 | | tabix | 1.19.1 | 1.20 | From 815d53542b9eb97096c102fb6f6bcbaf30380303 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:43:19 +0200 Subject: [PATCH 1911/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0264780c..9c178514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` -- Update tools [#622](https://github.com/nf-core/raredisease/pull/622) +- Update tools [#623](https://github.com/nf-core/raredisease/pull/623) - Update output file name prefix for upd and chromograph to sample-based [#620](https://github.com/nf-core/raredisease/pull/620) - Update tools [#619](https://github.com/nf-core/raredisease/pull/619) - Report only variants above 5% heteroplasmy in the clinical vcf file for mitochondria [#616](https://github.com/nf-core/raredisease/pull/616) From 4f26c00cde9954d53541d02dde9bd2a87ffb822b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:02:04 +0200 Subject: [PATCH 1912/1921] fix --- CHANGELOG.md | 1 + subworkflows/local/annotation/annotate_cadd.nf | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c178514..7b000682 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- bcftools annotate declaration in annotate CADD subworkflow [#624](https://github.com/nf-core/raredisease/pull/624) - Rhocallviz subworkflow will only be invocated once per sample [#621](https://github.com/nf-core/raredisease/pull/621) - Allow for VEP version 112 to be used and set it to default [#617](https://github.com/nf-core/raredisease/pull/617) diff --git a/subworkflows/local/annotation/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf index 12c596a7..1b582122 100644 --- a/subworkflows/local/annotation/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -30,10 +30,9 @@ workflow ANNOTATE_CADD { ch_vcf .join(CADD.out.tsv) .join(TABIX_CADD.out.tbi) - .combine(ch_header) .set { ch_annotate_in } - BCFTOOLS_ANNOTATE(ch_annotate_in) + BCFTOOLS_ANNOTATE(ch_annotate_in, ch_header) TABIX_ANNOTATE (BCFTOOLS_ANNOTATE.out.vcf) From 1ef0418e184f306f60023d38656d66485997973a Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Oct 2024 09:08:00 +0200 Subject: [PATCH 1913/1921] update genmod and multiqc --- modules.json | 10 +++---- .../nf-core/genmod/annotate/environment.yml | 2 +- modules/nf-core/genmod/annotate/main.nf | 4 +-- .../nf-core/genmod/compound/environment.yml | 2 +- modules/nf-core/genmod/compound/main.nf | 4 +-- modules/nf-core/genmod/models/environment.yml | 2 +- modules/nf-core/genmod/models/main.nf | 4 +-- modules/nf-core/genmod/score/environment.yml | 2 +- modules/nf-core/genmod/score/main.nf | 4 +-- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +-- .../nf-core/multiqc/tests/main.nf.test.snap | 26 +++++++++---------- 12 files changed, 33 insertions(+), 33 deletions(-) diff --git a/modules.json b/modules.json index d2a9ebaf..a1cb2151 100644 --- a/modules.json +++ b/modules.json @@ -243,22 +243,22 @@ }, "genmod/annotate": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "55692e15e2ef8be6b37ad1475944a338770b4b3e", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "55692e15e2ef8be6b37ad1475944a338770b4b3e", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "55692e15e2ef8be6b37ad1475944a338770b4b3e", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "55692e15e2ef8be6b37ad1475944a338770b4b3e", "installed_by": ["modules"] }, "glnexus": { @@ -294,7 +294,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "git_sha": "b8d36829fa84b6e404364abff787e8b07f6d058c", "installed_by": ["modules"] }, "ngsbits/samplegender": { diff --git a/modules/nf-core/genmod/annotate/environment.yml b/modules/nf-core/genmod/annotate/environment.yml index 1eca76fa..bbc3fd97 100644 --- a/modules/nf-core/genmod/annotate/environment.yml +++ b/modules/nf-core/genmod/annotate/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::genmod=3.8.2 + - bioconda::genmod=3.8.3 diff --git a/modules/nf-core/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf index eb161187..033caa9a 100644 --- a/modules/nf-core/genmod/annotate/main.nf +++ b/modules/nf-core/genmod/annotate/main.nf @@ -4,8 +4,8 @@ process GENMOD_ANNOTATE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': - 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.3--pyhdfd78af_0': + 'biocontainers/genmod:3.8.3--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/compound/environment.yml b/modules/nf-core/genmod/compound/environment.yml index 1eca76fa..bbc3fd97 100644 --- a/modules/nf-core/genmod/compound/environment.yml +++ b/modules/nf-core/genmod/compound/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::genmod=3.8.2 + - bioconda::genmod=3.8.3 diff --git a/modules/nf-core/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf index 1731b722..4831da85 100644 --- a/modules/nf-core/genmod/compound/main.nf +++ b/modules/nf-core/genmod/compound/main.nf @@ -4,8 +4,8 @@ process GENMOD_COMPOUND { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': - 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.3--pyhdfd78af_0': + 'biocontainers/genmod:3.8.3--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/models/environment.yml b/modules/nf-core/genmod/models/environment.yml index 1eca76fa..bbc3fd97 100644 --- a/modules/nf-core/genmod/models/environment.yml +++ b/modules/nf-core/genmod/models/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::genmod=3.8.2 + - bioconda::genmod=3.8.3 diff --git a/modules/nf-core/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf index 0504574a..90c1fd48 100644 --- a/modules/nf-core/genmod/models/main.nf +++ b/modules/nf-core/genmod/models/main.nf @@ -4,8 +4,8 @@ process GENMOD_MODELS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': - 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.3--pyhdfd78af_0': + 'biocontainers/genmod:3.8.3--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/score/environment.yml b/modules/nf-core/genmod/score/environment.yml index 1eca76fa..bbc3fd97 100644 --- a/modules/nf-core/genmod/score/environment.yml +++ b/modules/nf-core/genmod/score/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::genmod=3.8.2 + - bioconda::genmod=3.8.3 diff --git a/modules/nf-core/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf index 15be5f74..522e05b6 100644 --- a/modules/nf-core/genmod/score/main.nf +++ b/modules/nf-core/genmod/score/main.nf @@ -4,8 +4,8 @@ process GENMOD_SCORE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/genmod:3.8.2--pyhdfd78af_0': - 'biocontainers/genmod:3.8.2--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/genmod:3.8.3--pyhdfd78af_0': + 'biocontainers/genmod:3.8.3--pyhdfd78af_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f1cd99b0..6f5b867b 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.24.1 + - bioconda::multiqc=1.25.1 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index b9ccebdb..9724d2f3 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.25--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.25.1--pyhdfd78af_0' : + 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index b779e469..2fcbb5ff 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T12:41:34.562023" + "timestamp": "2024-10-02T17:51:46.317523" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:27:11.933869532" + "timestamp": "2024-10-02T17:52:20.680978" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8c8724363a5efe0c6f43ab34faa57efd" + "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-07-10T11:26:56.709849369" + "timestamp": "2024-10-02T17:52:09.185842" } -} +} \ No newline at end of file From 97852a6368f02a08efa76656c937f69d53907186 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:58:57 +0200 Subject: [PATCH 1914/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b000682..50ebd9b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Tool | Old version | New version | | -------- | ----------- | ----------- | | bcftools | 1.18 | 1.20 | +| genmod | 3.8.2 | 3.8.3 | | mosdepth | 0.3.6 | 0.3.8 | | multiqc | 1.21 | 1.25 | | picard | 3.1.1 | 3.2.0 | From e7dcd273769ed926c71ec42cdd78214c2517fb16 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 7 Oct 2024 17:24:32 +0200 Subject: [PATCH 1915/1921] Update CHANGELOG.md Co-authored-by: Anders Jemt --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50ebd9b4..7529bb6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | bcftools | 1.18 | 1.20 | | genmod | 3.8.2 | 3.8.3 | | mosdepth | 0.3.6 | 0.3.8 | -| multiqc | 1.21 | 1.25 | +| multiqc | 1.21 | 1.25.1 | | picard | 3.1.1 | 3.2.0 | | samtools | 1.19.2 | 1.21 | | sentieon | 202308.02 | 202308.03 | From c99fdc5f469f27c4677b49ffcace6d8036c2522f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Oct 2024 07:46:24 +0200 Subject: [PATCH 1916/1921] schema update --- assets/mobile_element_references_schema.json | 3 +- assets/rtg_truthvcfs_schema.json | 2 +- assets/sample_id_map.json | 2 +- assets/schema_input.json | 30 ++++++++++++++------ assets/svdb_query_bedpe_schema.json | 2 +- assets/svdb_query_vcf_schema.json | 2 +- assets/vep_plugin_files_schema.json | 2 +- docs/usage.md | 8 +++--- main.nf | 1 - nextflow_schema.json | 10 +++---- workflows/raredisease.nf | 2 -- 11 files changed, 37 insertions(+), 27 deletions(-) diff --git a/assets/mobile_element_references_schema.json b/assets/mobile_element_references_schema.json index a128dd42..31f99382 100644 --- a/assets/mobile_element_references_schema.json +++ b/assets/mobile_element_references_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", "title": "Schema for mobile_element_references", "description": "Schema for the file provided with params.mobile_element_references", @@ -9,7 +9,6 @@ "properties": { "type": { "type": "string", - "exists": true, "pattern": "^\\S+$", "errorMessage": "Mobile element type must be provided and cannot contain spaces" }, diff --git a/assets/rtg_truthvcfs_schema.json b/assets/rtg_truthvcfs_schema.json index b6ae4d06..e0630455 100644 --- a/assets/rtg_truthvcfs_schema.json +++ b/assets/rtg_truthvcfs_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", "title": "Schema for RTGTOOLS/VCFEVAL VCFs", "description": "Schema for the vcfeval's vcf input", diff --git a/assets/sample_id_map.json b/assets/sample_id_map.json index aaba0319..c69fa645 100644 --- a/assets/sample_id_map.json +++ b/assets/sample_id_map.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", "title": "Schema for customerid_internalid_map", "description": "Schema for the file provided with params.customerid_internalid_map", diff --git a/assets/schema_input.json b/assets/schema_input.json index 80b23c47..04649908 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -9,15 +9,21 @@ "properties": { "sample": { "type": "string", - "exists": true, "meta": ["id", "sample"], "pattern": "^\\S+$", "errorMessage": "Sample name must be provided and cannot contain spaces" }, "lane": { - "type": "string", - "meta": ["lane"], - "pattern": "^\\S+$" + "oneOf": [ + { + "type": "integer" + }, + { + "type": "string", + "pattern": "^\\S+$" + } + ], + "meta": ["lane"] }, "fastq_1": { "type": "string", @@ -41,9 +47,17 @@ ] }, "sex": { - "type": "string", + "oneOf": [ + { + "type": "integer", + "enum": [0, 1, 2] + }, + { + "type": "string", + "enum": ["other"] + } + ], "meta": ["sex"], - "enum": ["1", "2", "0", "other"], "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { @@ -53,12 +67,12 @@ "errorMessage": "Phenotype must be provided and cannot contain spaces" }, "paternal_id": { - "type": "string", "errorMessage": "Paternal ID cannot contain spaces", "meta": ["paternal"], "default": "0", "anyOf": [ { + "type": "string", "pattern": "^\\S+$" }, { @@ -67,12 +81,12 @@ ] }, "maternal_id": { - "type": "string", "errorMessage": "Maternal ID cannot contain spaces", "meta": ["maternal"], "default": "0", "anyOf": [ { + "type": "string", "pattern": "^\\S+$" }, { diff --git a/assets/svdb_query_bedpe_schema.json b/assets/svdb_query_bedpe_schema.json index 2d4331a1..b220bce5 100644 --- a/assets/svdb_query_bedpe_schema.json +++ b/assets/svdb_query_bedpe_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", "title": "Schema for SVDB query - BEDPE", "description": "Schema for the SVDB query database input, bedpe version", diff --git a/assets/svdb_query_vcf_schema.json b/assets/svdb_query_vcf_schema.json index 0bb8540a..a927a1f3 100644 --- a/assets/svdb_query_vcf_schema.json +++ b/assets/svdb_query_vcf_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", "title": "Schema for SVDB query - VCF", "description": "Schema for the SVDB query database input, VCF version", diff --git a/assets/vep_plugin_files_schema.json b/assets/vep_plugin_files_schema.json index 5dca6d16..34fe4198 100644 --- a/assets/vep_plugin_files_schema.json +++ b/assets/vep_plugin_files_schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nf-core/raredisease/master/assets/mobile_element_references_schema.json", "title": "Schema for VEP plugin files and their indices", "description": "Schema for VEP plugin files and their indices", diff --git a/docs/usage.md b/docs/usage.md index c0009698..aabaf757 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -541,18 +541,18 @@ NXF_OPTS='-Xms1g -Xmx4g' The pipeline and container images can be downloaded using [nf-core tools](https://nf-co.re/docs/usage/offline). For running offline, you of course have to make all the reference data available locally, and specify `--fasta`, etc., see [above](#reference-files-and-parameters). -Contrary to the paragraph about [Nextflow](https://nf-co.re/docs/usage/offline#nextflow) on the page linked above, it is not possible to use the "-all" packaged version of Nextflow for this pipeline. The online version of Nextflow is necessary to support the necessary nextflow plugins. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-validation plugin explicitly: +Contrary to the paragraph about [Nextflow](https://nf-co.re/docs/usage/offline#nextflow) on the page linked above, it is not possible to use the "-all" packaged version of Nextflow for this pipeline. The online version of Nextflow is necessary to support the necessary nextflow plugins. Download instead the file called just `nextflow`. Nextflow will download its dependencies when it is run. Additionally, you need to download the nf-schema plugin explicitly: ``` -./nextflow plugin install nf-validation +./nextflow plugin install nf-schema ``` -Now you can transfer the `nextflow` binary as well as its directory `$HOME/.nextflow` to the system without Internet access, and use it there. It is necessary to use an explicit version of `nf-validation` offline, or Nextflow will check for the most recent version online. Find the version of nf-validation you downloaded in `$HOME/.nextflow/plugins`, then specify this version for `nf-validation` in your configuration file: +Now you can transfer the `nextflow` binary as well as its directory `$HOME/.nextflow` to the system without Internet access, and use it there. It is necessary to use an explicit version of `nf-schema` offline, or Nextflow will check for the most recent version online. Find the version of nf-schema you downloaded in `$HOME/.nextflow/plugins`, then specify this version for `nf-schema` in your configuration file: ``` plugins { // Set the plugin version explicitly, otherwise nextflow will look for the newest version online. - id 'nf-validation@0.3.1' + id 'nf-schema@2.1.1' } ``` diff --git a/main.nf b/main.nf index 8f9b225a..b4672584 100644 --- a/main.nf +++ b/main.nf @@ -18,7 +18,6 @@ include { RAREDISEASE } from './workflows/raredisease' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' -include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_raredisease_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/nextflow_schema.json b/nextflow_schema.json index f6cb7b53..bd456728 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -907,19 +907,19 @@ "$ref": "#/$defs/input_output_options" }, { - "$ref": "#/definitions/reference_file_options" + "$ref": "#/$defs/reference_file_options" }, { - "$ref": "#/definitions/analysis_options" + "$ref": "#/$defs/analysis_options" }, { - "$ref": "#/definitions/alignment_options" + "$ref": "#/$defs/alignment_options" }, { - "$ref": "#/definitions/variant_calling_options" + "$ref": "#/$defs/variant_calling_options" }, { - "$ref": "#/definitions/annotation_options" + "$ref": "#/$defs/annotation_options" }, { "$ref": "#/$defs/institutional_config_options" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 75de740f..61e0ec28 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -3,8 +3,6 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { FASTQC } from '../modules/nf-core/fastqc/main' -include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' From 4ef37f9758e61d4a6734614d0993cab55001771e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:22:20 +0200 Subject: [PATCH 1917/1921] add genome attribute back to subworkflow --- .../local/utils_nfcore_raredisease_pipeline/main.nf | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index a85e3552..894e4763 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -183,6 +183,18 @@ def validateInputSamplesheet(input) { return [ metas[0], fastqs ] } +// +// Get attribute from genome config file e.g. fasta +// +def getGenomeAttribute(attribute) { + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + return params.genomes[ params.genome ][ attribute ] + } + } + return null +} + // // Exit pipeline if incorrect --genome key provided // From cc5e8ed18622a4e7fb64b74936c01ba732030ac2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:34:07 +0200 Subject: [PATCH 1918/1921] fix lint --- docs/output.md | 2 +- docs/usage.md | 42 ++++++++++++------------- main.nf | 67 ---------------------------------------- nextflow.config | 50 ++++++++++++++++++++++++++++++ workflows/raredisease.nf | 12 +++---- 5 files changed, 78 insertions(+), 95 deletions(-) diff --git a/docs/output.md b/docs/output.md index 1ca667be..4640f514 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter\_vep](#filter_vep) + - [Filter_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) diff --git a/docs/usage.md b/docs/usage.md index aabaf757..bb2d3b99 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -141,9 +141,9 @@ nextflow run nf-core/raredisease -profile docker -params-file params.yaml with: ```yaml title="params.yaml" -input: './samplesheet.csv' -outdir: './results/' -genome: 'GRCh37' +input: "./samplesheet.csv" +outdir: "./results/" +genome: "GRCh37" ``` Note that the pipeline is modular in architecture. It offers you the flexibility to choose between different tools. For example, you can align with bwamem2 or bwa or Sentieon BWA mem and call SNVs with either DeepVariant or Sentieon DNAscope. You also have the option to turn off sections of the pipeline if you do not want to run the. For example, snv annotation can be turned off by adding `--skip_snv_annotation` flag in the command line, or by setting it to true in a parameter file. This flexibility means that in any given analysis run, a combination of tools included in the pipeline will not be executed. So the pipeline is written in a way that can account for these differences while working with reference parameters. If a tool is not going to be executed during the course of a run, parameters used only by that tool need not be provided. For example, for SNV calling if you use DeepVariant as your variant caller, you need not provide the parameter `--ml_model`, which is only used by Sentieon DNAscope. diff --git a/main.nf b/main.nf index b4672584..f8066532 100644 --- a/main.nf +++ b/main.nf @@ -19,60 +19,6 @@ include { RAREDISEASE } from './workflows/raredisease' include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - GENOME PARAMETER VALUES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -params.fasta = getGenomeAttribute('fasta') -params.fai = getGenomeAttribute('fai') -params.bwa = getGenomeAttribute('bwa') -params.bwamem2 = getGenomeAttribute('bwamem2') -params.bwameme = getGenomeAttribute('bwameme') -params.call_interval = getGenomeAttribute('call_interval') -params.cadd_resources = getGenomeAttribute('cadd_resources') -params.gcnvcaller_model = getGenomeAttribute('gcnvcaller_model') -params.gens_interval_list = getGenomeAttribute('gens_interval_list') -params.gens_pon_female = getGenomeAttribute('gens_pon_female') -params.gens_pon_male = getGenomeAttribute('gens_pon_male') -params.gens_gnomad_pos = getGenomeAttribute('gens_gnomad_pos') -params.gnomad_af = getGenomeAttribute('gnomad_af') -params.gnomad_af_idx = getGenomeAttribute('gnomad_af_idx') -params.intervals_wgs = getGenomeAttribute('intervals_wgs') -params.intervals_y = getGenomeAttribute('intervals_y') -params.known_dbsnp = getGenomeAttribute('known_dbsnp') -params.known_dbsnp_tbi = getGenomeAttribute('known_dbsnp_tbi') -params.mobile_element_references = getGenomeAttribute('mobile_element_references') -params.mobile_element_svdb_annotations = getGenomeAttribute('mobile_element_svdb_annotations') -params.ml_model = getGenomeAttribute('ml_model') -params.mt_fasta = getGenomeAttribute('mt_fasta') -params.par_bed = getGenomeAttribute('par_bed') -params.ploidy_model = getGenomeAttribute('ploidy_model') -params.reduced_penetrance = getGenomeAttribute('reduced_penetrance') -params.readcount_intervals = getGenomeAttribute('readcount_intervals') -params.rtg_truthvcfs = getGenomeAttribute('rtg_truthvcfs') -params.sample_id_map = getGenomeAttribute('sample_id_map') -params.sequence_dictionary = getGenomeAttribute('sequence_dictionary') -params.score_config_mt = getGenomeAttribute('score_config_mt') -params.score_config_snv = getGenomeAttribute('score_config_snv') -params.score_config_sv = getGenomeAttribute('score_config_sv') -params.sdf = getGenomeAttribute('sdf') -params.svdb_query_bedpedbs = getGenomeAttribute('svdb_query_bedpedbs') -params.svdb_query_dbs = getGenomeAttribute('svdb_query_dbs') -params.target_bed = getGenomeAttribute('target_bed') -params.variant_catalog = getGenomeAttribute('variant_catalog') -params.variant_consequences_snv = getGenomeAttribute('variant_consequences_snv') -params.variant_consequences_sv = getGenomeAttribute('variant_consequences_sv') -params.vep_filters = getGenomeAttribute('vep_filters') -params.vep_filters_scout_fmt = getGenomeAttribute('vep_filters_scout_fmt') -params.vcf2cytosure_blacklist = getGenomeAttribute('vcf2cytosure_blacklist') -params.vcfanno_extra_resources = getGenomeAttribute('vcfanno_extra_resources') -params.vcfanno_resources = getGenomeAttribute('vcfanno_resources') -params.vcfanno_toml = getGenomeAttribute('vcfanno_toml') -params.vcfanno_lua = getGenomeAttribute('vcfanno_lua') -params.vep_cache = getGenomeAttribute('vep_cache') -params.vep_plugin_files = getGenomeAttribute('vep_plugin_files') /* @@ -146,16 +92,3 @@ workflow { THE END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - -// -// Get attribute from genome config file e.g. fasta -// - -def getGenomeAttribute(attribute) { - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - return params.genomes[ params.genome ][ attribute ] - } - } - return null -} diff --git a/nextflow.config b/nextflow.config index 2c71c009..95752153 100644 --- a/nextflow.config +++ b/nextflow.config @@ -48,6 +48,56 @@ params { cadd_resources = null platform = 'illumina' + // reference file options + fasta = null + fai = null + bwa = null + bwamem2 = null + bwameme = null + call_interval = null + cadd_resources = null + gcnvcaller_model = null + gens_interval_list = null + gens_pon_female = null + gens_pon_male = null + gens_gnomad_pos = null + gnomad_af = null + gnomad_af_idx = null + intervals_wgs = null + intervals_y = null + known_dbsnp = null + known_dbsnp_tbi = null + mobile_element_references = null + mobile_element_svdb_annotations = null + ml_model = null + mt_fasta = null + par_bed = null + ploidy_model = null + reduced_penetrance = null + readcount_intervals = null + rtg_truthvcfs = null + sample_id_map = null + sequence_dictionary = null + score_config_mt = null + score_config_snv = null + score_config_sv = null + sdf = null + svdb_query_bedpedbs = null + svdb_query_dbs = null + target_bed = null + variant_catalog = null + variant_consequences_snv = null + variant_consequences_sv = null + vep_filters = null + vep_filters_scout_fmt = null + vcf2cytosure_blacklist = null + vcfanno_extra_resources = null + vcfanno_resources = null + vcfanno_toml = null + vcfanno_lua = null + vep_cache = null + vep_plugin_files = null + // Bam_qc ngsbits_samplegender_method = 'xy' diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 61e0ec28..3d665daf 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -3,10 +3,10 @@ IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { paramsSummaryMap } from 'plugin/nf-schema' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_raredisease_pipeline' +include { paramsSummaryMap;samplesheetToList } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_raredisease_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -267,7 +267,7 @@ workflow RAREDISEASE { : Channel.empty() ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() : Channel.empty() - ch_me_references = params.mobile_element_references ? Channel.fromSamplesheet("mobile_element_references") + ch_me_references = params.mobile_element_references ? Channel.fromList(samplesheetToList(params.mobile_element_references, "${projectDir}/assets/mobile_element_references_schema.json")) : Channel.empty() ch_me_svdb_resources = params.mobile_element_svdb_annotations ? Channel.fromPath(params.mobile_element_svdb_annotations) : Channel.empty() @@ -296,7 +296,7 @@ workflow RAREDISEASE { : Channel.value([]) ch_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() : Channel.value([]) - ch_sample_id_map = params.sample_id_map ? Channel.fromSamplesheet("sample_id_map") + ch_sample_id_map = params.sample_id_map ? Channel.fromList(samplesheetToList(params.sample_id_map, "${projectDir}/assets/sample_id_map.json")) : Channel.empty() ch_score_config_mt = params.score_config_mt ? Channel.fromPath(params.score_config_mt).collect() : Channel.value([]) From 61ea374889010a70e1addd19003bdbc30ec83097 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:41:18 +0200 Subject: [PATCH 1919/1921] fix pre-commit --- nextflow.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index 95752153..cb12cf84 100644 --- a/nextflow.config +++ b/nextflow.config @@ -407,10 +407,10 @@ validation { """ afterText = """${manifest.doi ? "* The pipeline\n" : ""}${manifest.doi.tokenize(",").collect { " https://doi.org/${it.trim().replace('https://doi.org/','')}"}.join("\n")}${manifest.doi ? "\n" : ""} * The nf-core framework - https://doi.org/10.1038/s41587-020-0439-x + https://doi.org/10.1038/s41587-020-0439-x * Software dependencies - https://github.com/${manifest.name}/blob/master/CITATIONS.md + https://github.com/${manifest.name}/blob/master/CITATIONS.md """ } summary { From 11f4bab311a6d7b22543398b30a8aad611889e5b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:22:20 +0200 Subject: [PATCH 1920/1921] fix indent --- CITATIONS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index b4026b9a..a0a3e55d 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -2,11 +2,11 @@ ## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) -> Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. + > Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. ## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/28398311/) -> Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. + > Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. ## Pipeline tools From bb4dd58199c3afeafc24954597608ffb62c553bb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:26:24 +0200 Subject: [PATCH 1921/1921] lint citations.md file --- CITATIONS.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index a0a3e55d..c28f2ec2 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,10 +1,12 @@ # nf-core/raredisease: Citations -## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) +## Nextflow & nf-core + +- [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) > Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. -## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/28398311/) +- [Nextflow](https://pubmed.ncbi.nlm.nih.gov/28398311/) > Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311.
Process Name \\", + " \\ Software Version
CUSTOM_DUMPSOFTWAREVERSIONSpython3.11.7
yaml5.4.1
TOOL1tool10.11.9
TOOL2tool21.9
WorkflowNextflow
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
File typeConventional base calls
m+1xNx{Xv!#u5l#v#DA`{_8j^vIk8M8!d}>)R7@WN+VXrqL|YmFv@}{12Ins>s!7$w(wzBCH2%vW)^u43r&t&C--8p3rA{_MUFn6bO)P_N0i5{ z5d}&!1H8wr49D97MuVa9D7YHgu`!4VJh+%(LI&>?N#h)H+H@*&MnaKUF7T!24wL$+AX7@iy^Ic6FweIH44~`tv|5JIvo)HU29Y)S|p) zzg`>(F+7bS+X>l$58bJ4!zl&ChoEDwR3qOQ7h=s9kn#6%$e{k&chPrOpmC^T${r;K zfbDNM(vB9bq4u|v`X^&`b@L+dLC#XdhGup>P_hE|D-5yy*m$K8#a zRzPdH8rbh5ul7970k|TAgDY;i?9R89Q54NP;xn%8@sx~9S28G?^Co|&d9IAGk^O9> zZqMOLc+4gd$b&H$SWnO&`>Ce0`B8d*S70p`2A#D8CfU?f#3k7K5!3wXET*^ zq=!%(Kr7X3qc0#)PVHOj>VqJm3|o6)j578-8W`fn>$Jbjk%AsfSzlvqGTEy)Il`Ad z3`@c8j>bNDdz>?g-Im@Q^NV#s|4D%v6qr-dWk#@w<01^_y=+ z#_o>V!^&$5G9MPyQW0iIsXrErxw@b@r^sWtc+F)>$0L2tNMY4y|!~7Fsb22 zyaWf5bgh4Sz5`5}cZCAeTJYKhRtxdCx14QccN_C!3bA9nz>YB=GI7P6PNj`5VaJc& zw(yMJ&1u}6mp=4s-0#7bfUnvfZ$~t2`W!bM@?a-?29OPEKif0qd}7Z0nHYmKwVzaN zWv*wMI=G$R@?MyauqYrWofxnZe=Vb>yk+OTg&EK|9+!TDCBgnQ**N}b za!eA>zpXdR5Y7J|Kk%8?)NYHj`O4d%Zz%McmW5w;u!i*wXYG%Or@+t5g0mkY6N4W; z%=jq%KtTAskm1V%Xtk;a`W+jM-=3jIk@&TgZh6W0Okwo5&AP7vxFf|O{&l1!OKAyf zW{g69f=hj^j0f?6B_%G&@b*qn(B;(ERa#PJ=nZ_}X1U$oBWUFbzCP0tH0-lpuiMjz z?P^*(R1rGv!eZi&SAKdgN@JhyJ9iB&v)Qg{(}SyRYm1?I3r{y zN-PD#r5dHy@C7%gGs+qO;|7rN}5e?GOJ07tyu=vJ8{7Wl zcc^g~H=Xh+JUpS3_#d2>z2YZT7n73X^49TL$unlPch52^xF#p|)ZFz`$`XfNipw)0 z2lO2sU+x>^xVEin_&-ni_OOyjqwrPcS>}Uxp&miFU9J49^g+uV=sj|T6|0q57Asm= z^5`&H^1J}>sU&HK9wv+#7zNcu826>jOX)7I$EHa5kM;|Ac>6DKvD-Wd!52NJL;HTW zU)m8sP1*xk$IT)~@u&rLs+W(sAU`bENBxi81%h3@2Gtns8fI=py;c@ik*P&% zN-i`nbX(5fpuodR#RHWRr#y37b{7dq^NPVf0}9&IOH>%o*Y~r=p0Xr;Sz@mE_|p8W z370yORsY55a%!)kuAKt<|(Je?(}(HY@sUbVh53)^zzJ+BR(r zJoY==*1+=H+Lc1=l1S)w*PF_bzC4$5-{gMp54m!+OI#WChQ#Uh6wu6i77(WW-t5G| zxG}MjeMR@XIs*#B7tkMbt(?A1x&ogU1*Wah*a@=wOeMelT9OErS$*JOyB%SB{E$%F zex2wrXQJjUBkp<0}(xxA`&v zEZ{w4!~}&o_ZHdL!itkwFeAc!eXtRx zWU=PUN!|v5dlE)YO*I!;7TP9w^WFttOJiX?7+1k<LtEV9DwZe%CSHR@iHX9DEOw^OK!qW$#||t(-qOZ;`$^j#7=TnY;KMk$6ed#@V2!Mg3NB_a%xG?FQR3m{lBcn3Zdnlt z8W}@M_vJT(^dI3(__gNK6vr})g-b~lTHX`_hVBxnN1(J5^{`H)$j!KBCyE^4Ec`yS z%aFl_P<}wJpaZ{z^p)h#Y$G~D!s^brL_!&WtNcF{AyXi>=|(gH?jF|JMxuDky~j6) zV_l9oGL1%X!XVrRn_+F4EA9ly{5(MBI~l8*sBaqrVy1C3sx5DoLRkCx$L~MpP0fRo;Feq$b?F~@X*iAIr9RI!dbU@$U?Yu1lGEmy{;!1lv*!Td#MsK&Bz9@RuGJ*lC#ujRRiDJ!iCjd+*z28GA;a4og`XTw?RONQ$fG!7n%1 zB|BJCyPcSFA3UbA-E=IZJsuD5+XZ02B{_O&**v;d4ey8_uN{_}bc-a#utCUZ6>~&+ zJ`=WfymeAOAm9@4SVP9|zN~aQlzlFw;7q51-AtEfAsIzJodgdrQ}mCl2?|DTdb6u0epZO z_w&`a#78I#Y&WO5EClpn?6=o80M<-C30RNipjIsbtRbw-$3MDWgwH&-uVCV1;tmWE zF15ZpE8Zou-)H;vTMNfueip$srQK|~G(>^(2C)qfwv&g+ z%mHySA@-*i)Wm-_FRZ?iPn5(5PI>~QiPN$}MNDFLl^9Z<6g$feTO|!VxBxDEV_iF= z|E-YTA$L~`TKTSwncsV@OLD;I) z6_%c-?LN<}cb@}P?B%yA&z<<;>U@JF;2OOocHD`m^Kx0 zK3n>y&vIm+_$&{8pN=G6%fiH`<9lAfXN6CE)-;zrI?InqEB)aH^N2wB8P}h0Iz4>K z^Jrnp*-c8p+f6MRJs-tc5y2W6;F=rxl=3fiuofDAS%)8@J5nBb1EfHcN3zh9rSY!xUlNG4Tw>fNBFa#G+#jJ72T~DmVYmIl zOM-=%q%Mt&gMK25s%MNg!?Pb*`y(8qjn9hew;QPkD0Q97ute|^&t2$AplQz;*=Bp8 zi84x=UxtzW>HG=5HqIszYB~6k&4#w^koX#&?=g;WT|i2qV}?n*wASc^cUb$(Ni-}( zyW^o`J4<@=lKM_D4;Z|XFFHc=lV(KMtx-?Nlkd%Q8n_gX%jYg;N6szB{ORt*z&;Oe zROK`nOXzAe^NR7w9{UpE$rRhX%y2po^~l~#%l^z8Ro;HBwaLtFPa{~pYO1_xR&ArA z(vfQ7dKD2gg-qXzN&$=Xe7r`4#Odax9FW6_kW2BntGyW6a3rV z2&&qM#lC5I4<2AePy>$@k#)5L>Rae&O>MYTd`0Iq=BB>(A>a=lkXX|wTOwhshoX(7 zO2NEh@VAF|T*nIXR(+A=_-bv1oU54uyK0eN3aJBv8X~b!CmN)y*RzXub z;v_AW*q1pYG}nN}9UWV>Kt>xsY!9RlKn%96zhB6$a`Nzmr8{h`mq(w?koS~IBFBIH zMch`@;%)J;?sUW?odu7*LJ(Qo@sE{&C5kTevL?zidD-W_EfMC{`IEyfaAMTR)3S{Z z2Is52nF9M(`?{3?Sti4TMOm<3I=@-HvmIAp2SmAR{UjmPhAM%xx{KD1%$cL0-@>i3 zbNbnK3x0^+@%Wt6s!92RO)iXraL`NAevRWC{>l2j4lsNKs9StXTOLSWX|Y`U0l;Z? zJ)lc{8<5Ts3)h_bBZJo7dIuu-UPRB7t{<=VUsQjia#$pEu;h2N;Pz!}W~u#r2&$cSP(`{J0xE z*oF%-J~5QZ%OmmYaRVK7C`7sAvo8vOSj0aQMsO!?NP=0|^Gb4bcR<*M%nR zt4mf)?nUC&OIsXhq^lGSbCd|`9YOFKCrSu zbsG<_$|~krx+RKjgPzkEX0l!6P7m)SqBQ;zs2VW{eP+8S;p&gkGrV-imXJ01`&#`B z({q}0um|QxwQbov(QH)Q;!&@ViyFC*V`vFxLaOHP{pK{V&dt-3w13xD6$5~m}tWhw^Sy%LmXwm%SMbj-Y# z2T+9V)K2@i{d zudjp9$@X+&SK$cGwQ|c*v5M9S_o`bb>cU$(2^VL}>^%#T6HNu4s@=4sO|rDp0GUV= z6tW!dvPqH+L&=jagCVSF9ZL}{clq&c8go_z;bf*!cf*LP_x;p(tg;H|VA(0CR#Q{M zLDQm|tMi$~i>5#pBbvY+`Cnoall^7xh~?{p5xu(JASQi}sczYdi9{KO!H5IrR6c`mO4`(o^=+*(@6F;D>0siD+x6^2gMCgri0j8vY< zRy_ls#h|iK^U$U+A6mNP`pY}#;7Vo1gZ3>FLFyA~?|(58(5 z_VD`cr@FtMhL#aW$>$Op&~mAx%LGCdLto>|fJ(XcG++sCxJ@L@-3$yP%Ke(sM-Jz( zsOsC=5f6#ThCeGSzB(L{+(o9+KYIAR=BIc=|Ab~Vxhe@W(W}4d=3O=}l=~aD*{7!D znl6NwJ;vA&;Ngv=J+q_)WJRzR(wC1Q3ZdR)f&JfP@W-N5fC%J2qiK^Gn2|r@; ziy6KWOMYPkDxDlBFaZ(t)(=#f_2Oo6DaNC};Z}ikv82bzL43J;zX*`RWsPZNhbBoq zaD3UB(|EpvUj@-ldxi$jWbRFa!sDIfwrYRSwm;%k#7XmGn-oA)n;+9m`%Mu-`oa?( z36>5*-y=6b7w!9o5I@@Kwz8d~ULt#a#yNvWN9B#wUK3Y-$qlcFRhkVCYlw+ zn$1+h?^PTDAe1L}OBUL)sclL&5Iz1bSUS|!%k)2w!=zJIXG3Ng0#PlW#6yp^u!UZd zf)N9r_#vz#2E=%H$bs*g+KMA}tsUwtQJL(QzF6pADd_=>*TVv1KD8%B*7;|n=bWRa z0Cp8K>1%jm62_krLDom=@O+E*gT$}nUQ5fKnhxVFLAdCUC#zBsN%gFGa{mE}L8SdW zzm%8ou2~|@wWLJqkh)QvUWqljs>|XBbb4{75*~pCvKF2t6wH$95ze7dlk*H8SYnu3 zD)z-ZA`lF2o9i01r(U#*kZNeyHxy2Um=sN{?Mqfa7C~)+&6`7MLD3xEoR;0RUFOg<KSuZ zG$oeu$$_OTH2wWzJ?Mw6RgCBek4CRDvo`w;z-@N2S_zpUv0H=rJbeOyR|wVArq&=! z5@tPm74Ek_ErQ)XX}aScU()JXM2{wo=oNqPxk3YKNv2NYaedr$L8IAN0ta$yTmU5i z*wIT8%JiiS4kVp@v#@6qGM1{ncj<9Y*sdct z06RUa0CMi%dx1Y4Ud8ZI+T8@oNHYtL{D!a_(tZn=+k zX=$Y~y{q7PXrlMa$@Vo-B2x5vQmuTahoyoCgCvY8s)hcne()UJ4=ae3`T|fOOXYL7 z0??jM(x0@bWq9xDMG*h}N@byWAP+! z16OjvLCdE&Z{8G>dO7!+IDtAXXjw6Jm8!;7tks7pCs28saK;88KF;$iK1bS&h)irt zDE)Qh3r`ubn&OR_36?b*K;kX%bm*{~Pteqs)eAN7=-VnJg62DNrUf^LDW3CMoQa$B z4=Gp!#?AN2>s48ziu5O_t+_O!cP0PsL7$`ETGDB~VmR>UO-fZTD^))$zvGqA_SS5? zKQS{A)Yre*CcM;=j9GcfPfnt;YrvX22ShemB7H8e34}mapt3$uyGtnG`MmGg0C&N{ zKSV}cDg~!JI$RQ)T-#?G+rONm8Ev+*p$9`kVnzYKM}tLtz;RoT)A%+~-84VV8U>ZRHVfaOsPJS?Z* zJ%X0O*Ebi;wx+UnvVf&q>%wx`1yi~gq)k`w57$h7;|_Qq#)t5VwUWNzU+;tffvu+G%354tz5tp@va%2Asr!t3 zYH2^8?LRx1+u!#T8lEE%g7{?vs3>U!fSY$7D-b)tOevmB#JQiyH!3P|M$YWLW$bYC z!ji~)pZUp9D(2=2g<8P_j;^K3v`FUl{x$$s>x^743PNVo6s~gTJ$(+Q&3<`y?x&&o zvKHsZ>5#?XY~(trPYbXDO-+kjcE)Z&QLS&E!qqMSV!Ublt5iHtY>fA*87D$B;t&u? z^W#Yo!0(?p0B> zG3Rwok4~vn#9szWBZ@c(71JpUrx`elB5J&M7vG9(M`jGie-<-l7E|pbouDJW1_Dq1 zTSk!KFlvTB1`2Pe$=r({9`*gl>N$b_pza1CEMl4rnPH!0qZajWo847vXs5*=A)irk z(O_QkV|xd&Z9(l;Z)IV3!-iv=HY`)6=5jY!Kh$xO8Xm>+GtqL}oVkV(E@spRZY(?5 z_pi<8eD_E2!ItD=l9WGkLB~exT?@2M$wH&FHs>%(Jz38gEZnT7#^!XMZKahD>(Wn$ zje`ljjye(yz+%H8TCG7uHGMjj|4}z?RZ&4MbWEfW5@H~vmwtLM((t^FwX_UKeLCEH zk^!1m)i%a|3UfP4QC7$0_Me<>HYY_%Xi zI;Msy^kxsK4jbr>khUEDXvgta@&U{G zChCK(Q79@ka-lctVZ7zZfg2{Q)Y+_uDez}n*9W>78j~Q=TKOpqoXMFy#}e@kB|na> zk8!Kkil8YvNCxXhUU$p=8QpOQf2|z?GBp?iI>Xw1=ZY9XC!{5avz$7Grl)S=BQej;$=b(#g#?IKz(8uTUu|LPF(zB7yq7dyB50!W4?__x z7X|^ExfC^*Xg2o?F$swKc;j6pxr21dSoA7Y!LNNKZzj28cj+UpzDj4n&GW$WU-aDI_{gL}E` zc+f%K=41LpGHAJl-sOKBVY-AM617xx8lhWHRkLWu9 z>V`2Sn;Bfp{@CT#YpSb6A_q;FQ5*gQ=-i+_nEOOxZoF>)>e8R>Dcr8{X3_68wOP6e zU!JDwb8=#A76?b7pL3y+U#^_>5N6~yVuIq1K$`CyL&qAwiytx!EY#cm$w5bQ``gmK zd`;BuxcwJfRb6P@Ec5pLlytE!KVajH^s0nn-P{Z6l8T5rc(s8|T?k-O9|c z$N&Rxk@fM9J|N>v)8_w|*P8%Go#f2PVAECafV@~??tj7wbD!EYbdH;Q-6jO~tJYsO zd+93wp48&;f>|!RO~)0;((7mWk+CHm)CTlm zuPIu{LU9quib%+_k_clbXb4{Ab3K{g_*3hz4eaEgc|Ds00ygjck#|t_*s=G=b>>Wq z!)8FNvWSO$4HFzjME959TG_JcwFeZ5(|F#&e4JPL6$lbzw%^Kn2VQ*&`*<0!W`TZRsQcn9L6^K}3mxh@E1=`xE#@49cz7J^qTm}~#$ z>!~5Qz1P;AQbmLie9Y+!AohykNvhr19()c`67nW`Hn4f~`+df-LOy>4b>koG?a8sB zpyRpWU$2=9lf1vi9$IyFruDrG^J>%={R8)99NeI$hr1)6l{R!UySm>!w3>3i42S>t zyWj*sOz0xtNkUzOTo>zw<0jGui`oSjJD)YjA2Xb)z@Z8=b^{?Oe2F&3>wu zndsMWP3=t=Fb?|XFBQ}RKmi6gf@k!yDsSk==n88va*V-svT-7W0-vEQ6~AqSQl?T- zE6M>K)qlb`kdNY6R|Yk;cVrjW@7Xei3l+vGzQ>v2bk<-XkfZ<`ddrQw@%RJ83^M{6 z*mmBaoy_a$b^J*%#bphbA6{`+(I^MQkKfHr>_MlQnTE<~nQ=hyL|N+-7Mk-NA-7l$I2 zwtgkETgt5gyTp;(2sWsCr29Y`mrd#6)ZCJKD^HynL#Ea8MOg+tqBW!cpqTEV)Hw(( zlD_s5XN&cB;d1l6 zM<&n0GqK$cHQTZv?EK1$nu3_jC|{SnUk65npO~}+8tF28lf|dtX6NZErEO5Z*64S) z7@;LPUXs9aAp%Pzg2az|yp<9ZDXL007Z0_nB)`M}Ujno`SVv|68Le{q?^*%+Jtqf! z3mAhq?N_H^9&fdDFn}{VtC~fLx{UMEFPbRO`9KiGTw*1ZkC*?`M10@DSYyv3Re#xA zFJL=3HNLunhz+RCa(pT^SkMR3Bt^=D=#qElQHoL=HKB?Cg-`>wd*_QqY0J#bp4jsQ zGpRCm0$?EKSJcvhisvz<8gZPQ*EbtX1%%v=*_`!~Vqi|_r)#^R`bi!)>D7-rE~r+C z!C1TioIo&)%#P{vDHR$qOcJGa@Lx9k?+s>l1f5Rd+yCJ}L6}adPVq9K1N7+7(t!|i zPIGS;Z2%9$0A*xr8B8>+=ziuxPmTwV_^*MTf9~%LCW->QQgE_O%^N2!Vh%7SV9^ta zA`|n=^-E3fmgIl->R07jc1*xwU>yqhNJMgkd}QOt%E|9-Q(@_34M%_1^UE-xXCkEP zU4NJElXYbRPJB0>0p3~QsPZB=D*Cu&!ME^XDd!FP>(G*w#qJ?=(@V$<~T1Yj3(=dylP} z!=!+-XxZlGec<{A&pcJk^F}iobmVaV;~pyfD}iNvr%WxAg5?kq?w{~pHu>ePNCzUsVNTZ%+ z8NH?5$)ySgRLH`{<)8qyDn+J_MvLTW?NT`;tfnV zuHzgB&EsgJDBh;K3VH}!^je{SBYKoNvR!#YnO+w)KV8qR`QM~B_zOtJC_AV?zFp8L zHh{uQo<(iCXA;J}>g)&grF_QI+>S8Mq2$BcXlc5r^H2yc;VrB;FzLVikWmQuAzv>y zgmgp@@Lk|{1q@`kH5BA*DHmxqHnrK9c~0H~|vA z7r;A45~g1jKhl#O@ZJ1-TYnS4ZztOIky=>KuVB1=|1h-I#YhC;jgw&t@@t~ zRv2)k_5q^ItXElVqP~4QtjWOv=zDSCwI(uRt6X+TYjrYWa~efNCB(B&)l7OUv=r@&vwLdzD~UxZT9z_Q{sYSYMJe5&tZB30SNa;zAvH`E z=pwm<%QY8*5Q!pB$xMUZ=h{yK==q;S{aZr>2_gabd8q#|iEt5zcZN|gfT2;g6*r6Z zU(pDFiH5>@L8AX9T2wNkk>JHDYp?Rbi$a{X=eQD(U7Gm7J#JhQ46ZciHKw()y8zmX z|H&)AHMWX6`P$^V+BD`n?{Aaeee^=17ViXEmTE?q%zqWJ-jDlV{B@!fybai#DI389e{u2QPxj4!G_6}_j$TpI!~#oAiAQ(>ChbY@q_D^jH;p zlKLZ7M?FQdcLs32w?KgT%`vUhvXdnqt-1hzRC}`8#@STgtMKs1&4XUfBMv8dI=}55 z$A*<#tT7F8ybmP$jCWpuF%tm^kN4%Si93QgDEa$^h5Qlyk%^Wj56ky2!&SQH8BIMB zwWi0}zlinA<*>9|Mb+w&F!F#X@_RM>!VRCCTzdlp46;29|3cuHBV7s zStu-yud{Ybox;)tG|=#T!+U>|qb#eQl^q2;PS-{Xzv(IGsqn-Vyc>yUoO$e?zAgVs z3-4SK+Lh2vG67fs5=7o(t-x=atcBh`SXSwggMPW|Fl)Y|5jU>qjypjO^4~Ffz+vO3 z7Gdq?XGv5Gc-O}Ws_Ae&iN*sAOEW0uRC`y+^~EIMdepn0qn2(*6tzyd)4&n_$!tPz zC&Z_84&LE3=@j%EyU=e@?!DU*c2u7!o)fwajBR7Lkj*iQ+iRc9gK6fz=8dI?n$I=0 zj|=%O4O#Te4RZuHGDr>?k8W)9;wHGFU7pi0ANxv6~9|6AR5h4nbO$U*RVvk zC5n!LI1*@0(7vE?vyBoz9X}`pUaQHHZ0)}c?-T{q)fbM6Io6DaU&rOz_piWf9(3!v zOpL*+CJ$oQmlAebR5AHDw!WABHz`7lh|X_N*V02xiTx)VSR;0yAMSul1-keY&6pFby4k^jEII{RTp6a1Ivz7U_b7f;k=qk^ z+pw-L`4I>Xozx?@^nxx0Au1}JYWc~0KDXhd1?Jy>6DKO1^z<$;80SQ+jIJ9>$>nw| z9BVxqtGpyco zztO}68Xs1Azomk#^4%e@g!jWR&}o=+>Mh}dTux* zxOY+kosr2x6{d+N*x-h_Gug+12r{kZ!i19rqcl-Z7lSi``?0Vp-D?;KPO=NXUo(*Q z5aPM?N&VVp(z9&I@mg?x(1h*0>Lqu(n+FC*=GlS4q6=e2d>o6{(N1;(QaISjzjvR# z_hXOdHB8?By|jxOr!p`z+`Fne9{oeOg+b>{`|iwFaXZ7aMXqVtWE1|l&2`bu!m}6CJON2qItaW~?O_q*!*{yoDRmT4D$CjrB*|)R@>|rQ%Gs zq@2;CSrWk?kt9pQiTp&~n3x)(T>|T!_;}%K${+d``d4 zI~w)Y+U2hIQ9BF^t-qW_@OP^h^u$l%gK=ZL?E6J#^Vx-*z@%u`}M> zI*I*Jzq9he`K~q8jtH2C1NU!aX|b6aGkYPhist(O0A_-5u=VqsZV1QM@^t;Kt3u+@2<}4Pc~B0;Oqbp z6({-ZPx@$ibMEJmg?Dw@+~Q#%=_{NuFrbg;X@R~J0Qn5AIw3Feh$I+$C^f_$GUq-* z19u=d0qv<^;v7XXcug^&+)kS;&iv%bs$3Eg;6ZLP|ElR@?)-yuD3da2AcfZ)L-b6N z9@6S-6MuiHuo5v-n__^oi~vBCn7WI_vSGj3D7!z9dOzsppm(*a70HjD?U+{USlU4j zCTgO*x`_mFT~5~ate>S@FKfaG2Z(tJ+)pOT_htU|JW5;%W!A1!7*yst_3D!7E5DA? z?3_^`O&20Tb2CP~t=Yg2Wam1cnXdm}f{(zHcrl7Wj6z^LpyqO@!e#8vpd zLtL))_)ul$%F7z?l7RuoV=o&Xq4PkR|ILK}6}Evc`9$@hK#ir4{wtIwzy!LIUf_&b z{y-n zs@wT?g)6w92Rts7XavFxiZPrG;o%7+ZSR#zg0~Ff8Mx-Xbw^k~(kKihw*wv`7kSdE z4_2>pnC>DkkiQlx*7>OR8?eip!yE-|yd9$iAwZnOgo4mG?Zx}{(d6I{lW?k6$j+n3 zxTXJ#614DYsQZ76eRm+$efxisq|i-ehBA{?GD4`V5JCtYva?IaUQK&sXOCkftIRT6 zNWwX0=ukK82Y_a*BKfJ>!-)$X15-o%xXPjOD=T&wB`xj4r$bNRc`q)x>rELuLeOCHqMz~)DdD$IjdyF&1fH6=af2E$WMWp`O)9?$4F%Lbc1_5KzboYO!Tt*%3Zdlzyaik!P?;t)&pXDeQrZE)k8U2&aijN$#6;66G4|as;t^i$ zeVzCqh4&49_8Z_xD}7uJ$dI)pG3OduA&ygbg1=5QbHm5y88GqzJNj3c4_r?4phK;n zjzy_`yh>`Wdc=(a7FB>}bYZXQBFRlX*SW#$bxHXf?M73kVFSryy}ZKO@%@2M7c+Hf zB=JUek0+t{$}tthm$n<u@gfK5E+ycB9Nt>x+EJI4dmuSh8-4IZfy$% z*Dhmf?ngag2>0nUmjZ)Gw*-KWhFcbU zMHj~DUfq4=;%}S6?hv-q$O{uW*29rBLynUAkT7VPYi_fLML%X2)ie`Zv-@9-@#@!X zRQIOlvw2nhpPI4U%ooAKHlaCH{B+s7=h4tz)#@+8;pPsMN?JwHW{1p|V{_N#FG3yw z(6iI+I9*^ZPMx&%$Ai)1ACJQ=5QzFNuk&prT4emp&%B}NJMNcC9HI0a& z$Y=Pd{LhFe3cCplu#XO#=xh)6=7z?sM~^|(G#QklxA=ni`SsGn+|S(espFRonc7Y5 z@2Aw$4YIts0JII^d4VD%7CwQd29q5lov6BN4A}s#7Vj^b{a?=qZYQ$!zY#0^`X+1g z1^Ulv2!y_?H<1fKSX443 z=)^+{qKfskVDoQC6dHeB419t_?$OE1W5pG!IsWBKy&}z*;)Eircwb>)e!x6l3!To~ zpgfr~^vO?{{{C>|JDG?&!xkUDhL0@B>pb~4Qy73{sbM*DMG~`(R8I19_fWnuAhJBZ z1LRnn7Nz>R?h@d6If;ai^CbkOq*cbm&(Jo~2{wj7Q{visDNdrfW@sYLx+j%Ac+Jd0 zq<8>k$_=fHWu;%g@TY{P52|(>2%Yr}yI#pO`%F)?igW4Ut{o09J^53D=yqqdJ^96@ z(b&HO{b*^`4Fxd@ICAnPb4OC5crEsOO1`ceWQSvfJZuxRPbX1dqh5I7sF%8RhW2bW zzfQlqz}_Iu^bK{eeW3Dg9Q%Wdv*zH)!6L1?;`xjQ@aElf%`Im$`+kHUZ>s4p+@!Lx zIr{qh%#H*ViSE)}Q~h^3@=sG0mgm#%aPQuntItQ#9J|&;ah;=CtW>U2h+;=G#OVRp z(2wZ(7%_8QM%w2n{f-sr4Rfa2Zp@R@>n{~pP_ z?~8DiQe;vF@p1mWW+w=1Ijf*V8)km>J<2RwKblO^t|m1voPt{;c23qgpB68Jd-&#r zfZH|~ck}WOU!51?)$KgJ_oaF^IVu5em4sWC;#KP&K2BR^5(4a*F0VmY4kyYP)-xhU zb zAq7}S0RICC1+{Z7+!v+!USZtrQlBVkO|K-qt&F`UCNpS~!v^+L2DdZRDy0(*o|sQc z8<#!2bYMtz&9ei!A`R~Cn9f33#jE-XC4hvaN~0{lp+hQWLvnc%s1$p;X?p8Q={mU1 z<63@$*!u#ME^>F5?DYW_IoybXr~Lq>;gBf?{(@>p1-~N2X!K6l?2h|pqaJw)l7=e8 zQdT>egc4UvnzWCtLB}r3Wb=P%bU&~mN8Agi3W2Dkdhi^tLXOKp$?HV`Zf1{H1{M@2 zdbm$xQ1+5T57Zcj>hev7`byw_6huyz>#kuA?$`R=U3L>6F7Hl)3n@nJ%K|wn9V5(~ zPVvmX=3$<7=7w9W8hgyP-rF;??3gQ8Fn2i%3$EW&?yCuF#o~vv0Ts79E=<8b4h%w0 z=e^eHF;2R1C;+9(PW+Ul{eElKa`Zgd{(_QLTlh}3Teey)Y|TDZ_fxRfhMJW7HR?VZ z;7T3gj*;EfJtI6--J%}jmHUd%)_r@P+rZ$^H}axrh7O&&oG%*eamZKMw-BzWsYmXk zGOjeD^t7K30kxN_RVJCh6%rJmW5GeK&T9!lyRi4L$iz&%BTPA1fYO#Hx*PK@P9-At zY}%n0`iVJ6Z>Ws&G*n#gaC?HXgbcKj0C3b>eYIr{7KG&_d7{E~-pq-%GGuu^{C#D+ zIos@cDY*aYGt=yB*2TK@1gz*2h1o;o3x0ZAxR1FULPso{m4Mr^^FWHx!ZM7G3 z?XfS@K{N_iObi_h>(( zdYyh7hM<)DBA$MBgKrl`048aK@mZ3=AwHQnCLrb0J@&UJNY0M#N!9eVfyrPW)sW*y zv7sXT)ghq@p;?k-((-$B+VVoq>DdOWeAFS&JIiby znag_}yG#AU?Zr@V=L_xa48#l_0NK^JzmWu6Z*BCh<*?tQU#27ti`||wRcbB~rhGRZ z(7i%NLd1J}VU2W%?-N{><`1FT)I+mYCm%zE%TyE&H_7#9phemFOF>wkS#t{H8lGyb zs1CKgm_2fYa@WiB5XDl@8cZFT1w8CZn=AJ zUwT@$;NS}@CB@D0*QxvgBYqm_t(9Vg@MoGjOBT6=e!0N z2yhtlN~5}^O6I4?Ek`gu6v=Nu&*nGy9E)3a`7LY~Y77yOzuPRXy4$P<5j+5AHtW%2 z)_^>3!I?c|>M@hu;g5^F^58(2&JtTNd*I7{n>;aZT2qDA^-Q3$#}7vD{K9%8qfR8@ zTT4L7BXL*Wb2)<0zB|{>mqHA;*X(xVz$XhEdG?U(`n8hjV`uov=byduE0rJMmNMG? z7~I|i5p1AR2xmSdG^#Na-tRJ0lmtnz7H*ar*6_t&5}&2B*|u8)&AQrIOoOFXb^|>s zt04&Sp^dzT1?1U3pYN#c0>3hV3n`k9L{jh3VZC)=(f$&pug#~YS_1NidcHt)nC=+6 z>q4v+UDBuPwLV?<7N?J-v4_`uor*;uIMIvefa?sj7CQMlCtSKN_sn<#auvgqi%$=( z3Q^8zuO+>R!kV?f?&)UW@|aWe=4I-%7t)`*UT9yofqKyx(AGHosdnANpT^AUj}grt zy|`T}fkEsCIr99P>6N|{-mo4dok+zx2Zbv1iDL_RpJC(1RgIoyJF1*he8=X0`pvma-rL#=XNfUk?;axJe%I@1up9QQ_D^t-9OS?&| zcfYU6{EC8zq`DJPt%jmo_kGP{?{}>J{FKUEh0Gkb?+6tgAOa(^ytxbd5PPlRHFPIM zPP7C^E%71FE|m>$`ib!3-9dk0_sIV!=kg!V1ZupF4_!}633xnW%Ejrq z_2AS1s>!d+zDjnu-l9z62uR6GY^^%lbLag@>*H=pT(3cfX;mXu1=9UfDqP{pYSE9_ zQO!Z6hZym0AbDhXsoY-T(E_EU!~+D1wmtp_Db=`KucGm~S^JHZcVB<0sZ|wN8sV$e zJ~?;e%k2D;M3b>X*=DQR^($7U4p01LQe7ID3BLXfT0KP_>~A8RgO`83W)PKZ*nFB{ zSl!Az*R?S-7x=!f>zLElgTRgR=8o4!g!=U2&?YffHCih__NE zU^?mjkHqejx7k)D3%dDPR+r3P*{Kk$TKb-JV{MEbFBoaWPXBk$uqd_r3JwgcZ1eL; z!OwcpcIC#EwX@xC=KBZM%6wK=)y9lO%mc6V46wDZB&E!qsY9jqUtTWTNJ{G)RTFU? zs7Rq7KWaJ3Hms-bpUF2|(vT=7wO{dYr(yl|Y?bqCpx_TJV$%}vw|R%7PiAidPjV%HQRK6*)5=Q+>i z4hC^Dr|YWnZX5Vwua#w^-T;~}o0^SVYX$x7$G1v1oPx2=mGF}c=g|(4;DG)g{zOS! zhh;g(_o(-Sj}lWd*ylSd1JeU#{l;d5(ov|{t=P8GRZXS}hfAZEbgmbw-_25d7#SXQ zh3&}Loh;4hef~rH35;VZnP(z8#nf?Q-^sqSq_V=!Osb^B+=@ErKZC>F$rJI>JAwXn zGh0WFw|3kMCm_cC<|JG~?%RVZO26;glxt@7kxiO)Z<+K0Jgk`ZSaTZo(I5Y|FuWnv zekl@MY5n_bv3T+6PS?bVz(%8G-W%DJ6#h}Li=asP9gv)%>a)DZ;;~|ZD zDE%2#Vlo$&wIxa+ke0(t40Ue7$@4|C+_Im;PiT4_4U=8%tV*3 z7K=@B9Gb6f_e?dPY!7kytf^&WBw+WMFdXRqtd1xwSK_CswYC-3*n1FUOviCGwP?1A z2pm<4-GO(nC&ZQE=yFwcC~j+u?(iXeA{>`Om&_5|tdujoS5u(hWZlV$|<< zp3x&d3qEHQ&n8dBExwEAsza@3qqp2rnN<3V_aCNBSFUg=RLKhcXcRJWAob(*_axCd zimVwsTye-54cJR*<{(?vIzmJ>k-m^NDt~sOx;EXm9+-I5KTA5u-n6Goj(beV z!KiXIYAf;(g?Uw4nRd&2Zu^HCx;iE&T7HLY_L(fZqfE6$=yN(+X!PfwIXVj456>xw zNe{vCHMVcLEEdf-rF=?jbnogxWuYwO6ipmtr3SqRE?4$Syvxgnc$v@Fvf>Dn+lRC@%ylmqe0%K6p<(mtZEG2t3&#LsWfdveH;)_t?bLfPe+x%Ezn zNG4Z%W;iWe^lT}>8H8`miB5(qXlZI`H(K@S_1s8IX-u1KQXlqP3tX#x{z5`NM_W@X zgDaYKf6!S%*A=&{9_9nq*Uo2;wcXi$HX}=wn^pGdL&D^?0-OjYV55PaXc_zSI%?O@ z+LKWk>Bk6<|9%)8690Z}ZTu$Wmf_LdJd@7q#J+q|msr=r=ChJKeu2?sheCT6O|2e$ z-t64P;lBNK50;{wPl-s{7pj|J6yeJ#w9ShjCez#%6`+>&mkGM4!iF}vgQFynU7HnK zn44?A%9O5!#7ExRJmUFi9S}p%J%`}rwp0EHx889Gl2yIdLwe6Q25XwWY{VWPHI=e2 zY-{t3H*q-bUsz~nS1!trH!uH5-TcL|s`r~8d~y_)>*=?%1!5dWta`Z8wdm2rukisV z7_%^YqchHtbzdY>8`nz^B!qPG7vN4YGUD|}IReL6WOI>+cU|~PuvXmMDhrzd#+q9F zs0XtS4x3Na0LKrOzK92-hsn?hg-% zZ(Uon5s`GiV)Qt%0-qDW+O)nNU4sr)gOB+p54kUk(qVc&Uj;9^qcS4a!J5 zK?q~qA+L;h1BLuPTl9%%*%KJa{ zfHr1d8>J5uSYbDnyd(vdhL6@K$_Gq!`=O<3bVSI(7P1CdJvpNWWID^H?Yfg29m?Ck z4vxh?IHWjzs4=M>J|_-HL|~+mk$zXw^}@D|ZoRm}*@{Mp4azD773`ON zbeQlq&$yf>G+6r>Yj*Iq7G&>q@ z9uGI)PqHaAidRR5G_QKt)QfzWg5t-CNkmd+HR>Yp0fi+uZrQ9#ovGg{T*}ZM9&hhb z9ND^u2$>IcBFJ$Wk%M&hd%>yN#KVN=dB!Oq$DDw7_Qb!*F-I7j44)G~dUhO7?nY9AyGuk}&&IK18L>T)h(C^AZwzDyQ}UQ<(RRZLRy@WYkhvr84L zQO*NNqnj8+l>Ti|bP-W}&Z|CVmrXcKC?3zbZ`f7On7y0 zi^t5e8TXZS;#fJzq8yTqC93E={D&xWO+T7vhe)TN3~p*3AGU4YbUtE?7^ob?;qm%j ziPc{fOM(w892a?}@=aU!Uj&_bpK?IlH1jdyB=Sdjdg;Dm?7Z;VzAtLyU8))+u+pda{EM`<``x? zadE1<+FUnKeQIuc%3zILHYe>vb&rymDkw{D=MOoPLwOFVH5U@9uzfq>TfFtvuyK}1z}tYC+F(A ze{8r1MrEKdK?4=T`STixVtmPp;VM8BvvE|vmjbU&kAB~+*Q*)Cq_!7>Ic_8UK z^~cqDngfZ6DQWfXCqNYYLi=)5*GB6XzqrNs>mjxF?mpikkbWz9lE*J|J}?o9BD?O; z#vbATN#1tr)q^CZe91Y~J>(<$QxXBJH}46bEZLk2buZ#Y;KnnG`A8s=fLx&$=6*|3 z@Wr+6qq|q-r@W;^@g8TQ`3CuXxIqrCc*gqSDkjPKLo^0O1THr@THyR^Br{`4DA7 zndRBE2vW#H?pV3s)*`dv*r4*9$|btsHvplZ>k$^=p;?ub#LoonSTP?dJW_RuP|JpT z;V?MxBVDXjA2=~Iu1{$2swvo>KOgdO8!wV$N=8YBRN(CN{%J6l)c(|?i6Y?+Kk?rO zShjs=kBDT9rj~hUu}(m-fcHuTq#0(p#bG$sxGn0TV~xgd?{6MNOqYf#neRaD!@~r> zX5Q|XyOfz@i*aMydXZOIdB{&hd*Lj2xqY5Pa$%&BHw1-r-_M{IlZ|+LUMDfcy5o0b z8QL1}D%yhY>X0r@_IxAxz%6mPx7kEl%Ng|G1?!=37`M05a$8`oLnBz~DVXf*cr zei?S~Xb@M-DIIOeLQJ}BJ+~j;bcpWcp_aY+EbQc|Y^*b{C-HtQ&Hyrw z4o*IoMxFyaJ2X5)?3C;yL<#ID740nQw~?jXH*t%6+^gI99}XyL3+rLwU->E5M9W#) z$0Xf#WOo~4Eau)Kl6hAhNGpR;)l0dBD;z#e6l;pZx**@?cg!zah65y?_`?Ju-x2Gy zAH17F$^oj5EqmGqOu2*>P`k#7C#hdH8A*m6i7o=%b^r1jQfwTy_7vK&XmM zV_#EH2yN_d(TMBJ0yXm`(#gr@=0i*}Q%kqaOj!{x?(5gnznho87(HERFKw@w*w?k} zn&$pe82MQ%SF?2ZBWz|S689{Q9_VAltJ0&3>0Y<6>gBN5kT69TCT~E_;&(ctPHF>emgwP!o0Q% z(|5IYf0H2>BDx~YNzUau5|Ia>%F|6su?^g?tTP_;@cwxd_k{swG13+l$d7$@k)1wR z0CD;&@06>QYhozV3-w)yMi#de9SK#A(Kc(g=x#6Nlhn@&Zr+-nqyG`^AMU?|n zozB_6q_d!v<8X7Qi$!@kIk@ZHh2(YkFX@(D17(VgBqJbatQ0Fr)MwyRj8e&k-a!#b z73jkzrd;}3C4Ll5b_^}cm!lfj*R3MR%HzDBnDTAU#utdsByGyNw0Q20i+`ZmWw6N# z3@6?_4bP+P+l{Bpiseua>py^?C`-3Ram@HKsUXL7!@(o zBO##bNrdpZ zl@QU2gHyJ5zcI$70g6_f$KPeB6H#+=P^1`QDoU)l>s!iYXQOCDnT|zy`A;>qP>mcO z^ChG7G*ThIRouoviqmICpGr*=J3e*N#;ak5uRu*jA(Xy{3jcxsr;3V5=Gn*em?y2O zYfLC^S=k>q_Vyelhx-yrStT*_nKBD=`yWM`7nh1ZTFyqEVDM_2)QyS8@j==0f^JR2 z>MBa($p8hrma_P_-&MlN(TG)?+v3y&OHDowLb_OCV#;}_n!Lx#JIQiEJ&(v0M~4#1 zJuK?{p*88(5Chr@qBip6LQ+tg=CN#U;yG#PT9$8%GBBhs3)ZTcqZPM(_;x3j12tE9 z&dlj$xJGo8=UF@Wz5e%)Qh6IacHw_fpmOADKhY>Pe0(~Pz``+qyYreV^?{ffuir}i zBu(rx2&SW(HtTV!^IKhQ4f4!J;+~F(B-It5WEqY+w4rPA{Jp2?(p?g_2J1BwRgmD^ z11|#!TLwzCAXT-*tQ{ex(<;G$gpNlkWWrGb&I9S$0e$ZZp%fAk9yh*?R)8Ya&{FsA zpj;oepTmxGW?MmbVxk+oi|Q;I51ti8aB`-b_fbOW`k-H^5m=y2VQ35gZI`@WMsbm# z&kDs+yvW0k9%njBOVeD**`kk4L~_a0A?1^BezkjkUwv&Q^a|zj{?X-6$$I7?>)8tQ z?06lmxAN8f8V=P!H~|34C)`92=uogWn3bbgReDdf=nxaWa9?dQxm0%F)@buJQJHr% z`D%8zvf@BuZT7{gKp`_~Cj1hd07H6*(}|={Tj!6VWuP#iLuo26eEn?!Z6m|0tyS~R zUNw%T&VidQF)yD@A}V(EfW8j}0yoyUeC;R`n^o%kPyq3Ly;UO2mFZ-*q7+%T)Wnj{ zk~h%0+XmrC{DM|X+HUUmw!1T?SAd*=G>{85*{oCObJEkLL`{0H5JB7^BwcvD9#yY4 zy1N7KC^)KArJ*10$L$c6>80UUwS#{HucFM$Gcqa$MOsB)9ErmPGEUuNBYt7?DirFf z;t&ao7%e1TSz$>nsit9&^a<$DdMM&8cYt}ZOPl3NnV!zVZTdF6<9{Oq;;SiN!J`uK0_1#{e&^{I$HAjKX#n1XetC0s6u zoU%0C`;nI#-N}Z}+E;6AK5pjz@z%wl&i?x@R!RemF%f^6FG+fp^k!)N`U{^!?>#8f zHXO@WH#W_CLFTg5#1tn@tv*;u?Tnq5#3ys<)+jPdAsMt@EuUQY+LmWK(nV^&EeuTb z!-{M>dND2-qQQ(r?ZZ3gsb1O6ghtt&Er1Fb&?GQsQG)HOgPwgc^b%6C!!&44cw3r# zO)p(Yc5T%7a!~JG7bewEBaSf%D@-bs$l_W0p%+wtm&U<9MT^r__B6Qx8}{|>JzD;l zf(kK+n~N&YwJm9Djjm}i_GW> z=#X|l>E-%(Voz-*Mf&#OE{M{L zi}yu)7XQR{089ZejWRFuZ!37yWYM$XP+c^*^qQDfwz?@Uw30cX7w7vxRZ}Y_F=hFd zqrWm9Z)nC3e${)!k7ybeA%+jwOoA?_sR9*962|M=8#)D^VKKO_Yw`TBnK zbsWddv*=UsoFe^6+ci<%j0^fPwD>Yr=@XcHD)Fli3S>ra6Rv^BRTH$iWB2_|``M!l zuPRK}V)d#rysHIG8bNCSAPIic>+$fmsAV49VE9yDz1!&Gbuar2#fJDp#IY*IJcYw*!(m%yC%BpPu*?eOo#FzKi|ezC(FR_6j$v znHQ;IE|lI@mD(|Ut~Zw;oq6%@(a_*1BMduenXzs5bq^O>$EnnXVC#%aSLWSEHp;^L z02If)uPvw~eJK+y(gL3WHTDJ;PJShI2bdQ04SuKdpVT79`AcM<>4`<+e0*)5^#RVq zsBJL+J&d~GbdU^F7@quQWw=y7S{zJhlTYQc{rUT#)2s zau?HnC^^a{@v;K5HixI(ze$&tmp{~(u*4)?G3&6|R;>z+!vsJy8;L1~J+r>Usy!a7 zmKFJ8Bnd=+(FSDwRg(4R?jkmxMy-rQVhAv9%9){%f_P+2f%_b*V00O+{SPYyf6){P zF0$3Br<5|XLsx^9nKd_9TzY?pCZyBQTDq3?Nbo+p{rE8FK5A4cfH)!6ugG0iLRBw% z0-1;`xC}fu3tx;5QY=FdbeUB+-N-SC(dg0TbepU5(kUajq+tX$09bt%mzhX*>DRM) znaf8APTP8lBAfz0aaT)nRM8sJ{B)e6_VK^Qok*BJfs$b;0q0l0*Qe+?(dxjibS-@D zA=1kZ!Zj!aAmD^vU;=1A7dh2v#jffW0dIV%ok)g70a-5Z`QC3$z90P*bE>K8Np-P} zm)JpC@a-Xtq6j%DdTTvQo)2}|o*#{eC>((4rWm^3us1jFZFYASh7DV|U2c#Q$RG>O z&P8behB*U!IogWiSCVP0y-50%^dGPDD04lhLlrU0nwg>n7`^~f;sx`rsRsUerB`R# zW%}ONR1@dBAK0-fX=;s`IV{kBsN!k&Te%gi#@9GhpIz1s$Y87JRUSy_KeH8&lZCU; zdf7G~@o&Oa_vS{%C&Xs|PvHnyYDBp3IYc<2Ezd`XZrmqb`iF30wdO)-Ub1kHHMM-p z6pNjUc$OU9SKP!nFUkXmAOUlfHe1}&Y>7fc7##P^ex0uAYM#wosn*W8v)+~eXremlL9^i?i^DUe- zTO0~qTe^8te(21g`C4yHgf5*o>lkzs@(W#kZRb+_PO)@V&)a73adm~YJCqC6WhAE1 zH>P#e6mUtNhRg$XCZbvE8N&PyXymu63J%g)uus60O?4yVV)-;8<{bVGHuu2E$IfR~ zLkYb@)&jIgb1wrUdbyardiXI`%~@#xrlKGBa;PhN2?XHkQ5ke3wPu#YlsQ({=vy^K zi}v2nZ}x0D7Lm*@>TgYTZbqkX+)^>Oxe6_sgU_u&+xz(gONpH@!YgrfUsK13o!lWJ zIjiMaqB_1=Ai818Cr4D{W3Nq&;Mm}RRJ-lmP&oe{abCxKKtO&wQSDqsz%|7(C? zwAt`@pl1?H>Ted>KQ(1F2Rn9M_&Kq>xH#kCzj+h?N9!u(#Q4N0p@`P%o2C|0g(SJ1 zm=LAFWyXOPxk-sMw-M6Cdl+)>Mn8c`fpekiJ&ButpiTY}fr#f@*{Mhm;hZh7hfK41 z)K3tPB?}taIo1Bm>KcU6{chAVB<{TYF0w*b9nSS+g_ug`3PqSN%u$?lDC$N(yr`8e z^32f={IYH<*nf2d}a`6hDFv|NaIUfKJ9~2$A4G=w6|~6GM~aP(AHWa z77)bA2Pw$Axlx7u77+ShVUNOFgzj-FKeayM9Z=y{<*n2-{!sNfsMT$4qAbP{Wv;6BBS&d%$MIgjtwrmsEh}p{ zmkF+c{>c37kv^^S*@^<-V#-9313M7>Ac2`A0afEsoQSC|b>=RcvuM;m4B`Gcqr>7P zCr}~s3)_YOf4#STT*>ILFzFgt$e+5sz{JlLSgjy(-9&`o$#L5gXL%Ti8)9}9Pi8q^ zZ|>KTYD)e7P1JU=uevNc zHZ;09h-(j-MVbv8!vJtQl1{c=Kj2Gv%Y;IMrvp#IC-X zP5OYK0f#LE;##6OmMa!v$S=S&gjQYylIv@?bmfV|Y@{>rcJM2R4PVfn3s7?QJG9R3AR_5MJ-CcoO!uab zJ~Uka;M$~hVcYPBA>?*5DSn>o0Y&=pGqu-+ z!hR^v9FfUlhv5IaXgNYvd-D|ma|&!#joBG&)dG8K+g7R3pYP(-?6ywq72)IU z^JO*dNtuDUqwc07B~UHBND^gRj!*1y-YCD=KK0{F-T7alxrDs@0j_?}efIfvbH({f z)!mbsv?F%_$dNM|F>XxjOLc7-uYv!98Lc@O@t?H|rT{#Kf7dQR54lQ7qWk?VLAyT) zImkTkw|1vOqfjiQ=b-7|#yV%_Jo0gXGtth-h{&$kQ5ON#NmNMR2+QXD`Efa&GI+3SDR~h!8Ffon`SM0_ci5)#HWl&_MznD1thUQKmGB` z1G@LD@47hsRyRF?c89DtD?uL`t8JAkv*~?&JivJM>*>6Sy$?#wc9Y__B^=I?gTdPO zfl{?-$tL((-l>P4NcD#@U&4%kFt0lHmBOHL#r&&YPxD;2U%BaG3yi2g8Hd4;8bNX@ zGtBK|m-P;l4j|rRlHHms^=qG#phIvc8RrBKI{KpLmpp^y1^6n%-*!8FyK@I-aUxuS zRd9!VZYVZ+|L(v$BF)n$-d#P36?iB{vd-N>d>D4&VT zet%hCJ!#N~C(C}MNNeO!R8As-bBh-_dE#ZZDxDUe%CxS;Y_;x8Kl-3MDFqUm^XO}X zjX;i0qT+GBKjo|^;7(gyW?n0K%FMZ!9RC?e$8vYDHI;qMd$%`z@OMn&z_Nnjsz985 zxD%_y23X{MUDV70i?Rmx+H<0WTkoKL(A(j2K_&MX474;E)&{H>f2dN9QG1r zS7uxh*t>Lchs%hguub7)W>LNh&x)fYzH#0U8Ti`?S`^w>qdrOvK50fMQl278N`dF$ z(As#2r_mBm_RR-AJ4sHc2+8ez7R~x`v#?@p^6xm`Pmz99jhJkGM`0JDN-(%O_Pz(y zGSeA^-7+~{2t^MWGaQOpI8#@p7%AG6>gAPmvaHAEkkn9`%Mo-hX zdOh_fbLRQ_kBq*n^~!Is*DLN79~ucQz~=Ff4m*0KkJcBAR?!~Vpg|Imq|e^-Y<_p1 zs&Q>Aa3AS#E^W%oe^;QJTIT*BdNG@<2??l8FWeLRW0@d_IrS|{feWZ-d(ZAK42hpw zb#Dl?G;urKHO9QMQa=wp_bc;(ePj3bCB=QnP@TXN-uc2%*Yrvz<>{jS#s`PHGFJkc zeCeezTswartm!4zlQL&h(OWz>+jXAPvXCW|^dPRPN%Ydk@MjAk>?9#(qRa(Wi96=a znlXoDD}KjGpR-BFcKcsa$34rVC8jN(Zw+EMU26sj*aSl9Rg8^AXfrRV7K5xVsi2_jC^hLn112>SNIJ5-_a?6Ww&_ez;p(CBM|l=21KdW}Uw(;^DC!+lUj zKARt^^99c28=0X_f0L5@mWiy{txzOl79FhWC5{&>FpuHVjP_0QOl?+pd;Xe88&%t! z_vhC%$%EvNf7f1)t3)+^ERLx;ZnbTYk@WtbAHA|xKP6yDCf9=XKNP>dvneczTL^9Y zyI6ubjP3~%0WyyUD?z3z+c736hHvn3nsU-H7JoD_Me|sQkHg;mkv3YNZZI-SKj3(> z=-txpQFcIJCM5@1xI}6K4d&;Tk2y&P%hc7rKcVRYTr9^$5zp^^d7#m_S!qWR@S8Tk zLM%P)H*7PVNBIKc#BGVKJfKj7oEqLe#><(yJ!bh|6>7PMaEdls^f*{$rAV#5s77?0 zmlGS7FX*E${jBE#;+okCkgRVy!{Bta>Sng(R;}5$ zM7~VuMrVDeGd|Xjh@KkhDU_An31R#j@I=<8na6fIZ0MgH96s_u=b1Zs~GN$mT>sB)Uc>Hpx4vZkUrR7EqHQRRLrA=UEbM9EH+w0De-V3IT)ti zUz_jn_i$X@Xx{wU|Fa8#aK4_reC_DH{#D*_UmHTtsFDSxb4>#%E``fFqybPP<7K4y)U+4DujKpgBv;KzTP|DY$CZ zXac(U#2+;ijWvKD^h~!UH4W9DR5U3ydr+<*(NS?N?##YMxM7;Nh-o5WmBD?jo!CeT zs&U^E808SF!Hu)AE z*EEJRJ=-~}>!d`w^ft^-jQZ|KN|{<>8QZ{iDsET?D&xmPSKwumih&*MJUZCfV4~%L z`E^r32BXLcEyC__g)5;CGK9AQ2P6WWln5|yA>O(t>ij!bXXN(?ib-&{{1d3` z;SY*o@T;VnSppQLZRyf}E+6r1`nq*+!)R(G&_q)!(ddo2BpzkLCF0qLO05=K4tBfg zHqCF#1gsNp_zHKWw;r0nPcoT{07?*FTwXpb4NR84m>j-wP?5kJxa}{{1{`O=z1c=p zZIC1q%KxMNQGg3J@2?C4vvJ^{zkn|7;5|+Q829`+F#m$lf!dvqe7>r$*3*h-7nf9rXcs z{*sg;>p#sG@C0*#k~9_rSSDCc!gIpvcJWw#mg{c3@_}DA7Zs)dc9Qlx+TuW&uL1NR z7TZJG!=dywXW}0Z!61)wTm5ucY-x;rcBZa2?5C~Y7N9{+1wF4ThU*G&$u7+LC3YE0 z`{y0&fTmva)>uyzf}ca%!fXY~%qa=7Af9F54Zy6gMJ2V$A{A|Gih!F-F?##LpZWu5 z6cohjZ{u?RS$~O?>DEA}R{&BTUv|L~1?qebM(qQL4)90j*@+mklw*2|2_K%zoQi(B z=gU^jr>z%>DL!+vXPV65cvo_2(+q<8@_l0R!^%&Mp(r%UA>Ww{a&j6)|CECOo?oYu zBn?O+Gfb-EGE2EPa9q()+QBMDF7NsMDckT773q&$-jtVOR-_l_lK$#qT+j)?Iv)*+XT*Ie>2>_W1Y05OX^UMto@U8!a{aR7%-Mu~qh~K~9QdYstx2n!7k~YZVzz zE>77^*QNOHtuOep7Hlad33WnMseAg?YUvxEsZJ?Z*+vy`;#_mMA4|dOw{(=}xG=d& zUH?DnaM}Am0ec0cGZ>TQCKiLEs|G9F0Cz%+k%6@cT5E@slABDMKqEc3d2`+*Br)Zp zCIiP+l(8$f#Bk~NOv7q{Lg%CjX;&+|(C59qh27o_r>uOH@!?ucsB<6~ubD%Nb7Yr8 zG1C?v6;yjAhJ_HV23_aTtgcJ3Ij!4U1@CwI@6lt_`kZuf<5QOA@6JU;O!fm{t(yn& zN*X!F3DzGi9M8f~mGqK>z`L!yUMT+NlY}m&vTSUjM$Jnh>=i94_KtHZb49YtEfuxO zhnQH00;CD?O^f~N%1Q-7`K(_I#xt7eLi~Rm%QATL>QNio-ElnioA#v8V)EnR$nA;21#U?L`xcEA`@vCmb6=dlnLS5pEkAgptH_Z^yR5$ZaCIC(ibsWOjk5NB{QV3=hL|Bg&q>qW zKk5x(N2zYZbTgf`OW}56%Ffx@)0?;wFf?ZNvBhc?v#5!*1*0~3( z^)~FiIsJqhLP=nrPe0-f;iC*iUPwyLeGI6^5|{Igo&U88rj(tF*>HT1jA zPd_`sDn|O|h^7<_&A%L*9aO?6+XdB`8HW9W1>w#ihSh;SgA{qX`6-yE3YT5la;cGz zESzO^Za1#_H9seQE%5|GXnk=2X)%ZVW;mH8@WC1mH!+e~T2r%T(1;6U)Q;X^2k-cZ7*bn8|ty?vX3y z=GI;k`&rX6I_5fBwchR@cn=(~jAb4W&v8`f&-%G#Kc})6Hgzp)^UGHp#LG_M<U2Q5*@{ToB6Km|X zB9aYIe2k)=ls*Hp-CT6dtIjuSAkQlp{mVx!0(jhQR(io}+k|2WN(UI_{r{T@0acYv zlB4#U&KtotUe4-Hg7#S6fh6ur_l|RSw@mMMT;pjm1OgUaV8Q%8;Q#xm_@7!8-tua~ zA{9^nkf_+1)Dy6hBIcqqzw`j9D2`}q#W{?x`JO53+uyfFWENti+&(Q%(%W6C`?LPr zX#p(ovpZCCQzAL`;(LqfP;E&wS(i30@jPyBeuN6?Y9fvo@e53yhm8_zA3iTlnKStv zD+c*_`7b7etX2X8zqL+L0W~ryLsP4(EGgf;aYLsdd@7b49lKN^Ixb)Z_)qxk*d`GO zV}p-8!0p;C_E6;S(hwtF4m-}j6|4`A1l$W2W%2oc(d@yWB#OahsjJ;TH zvF`!Bl$oq!n=xtiAj9OFb=oqApQCt;T(Vb^I%sGpM}4w=aPu&5MTQ$sjc~X9q!pVt z4{!h&tSz)!`l_Nrmyb@t>_VGY0rXr+q5$iTIj1Ma>1ZDmJotZ=2*Xlq^fGD343>6)DX8164_n*iDfc`&onexUzxXfu*%usWsTbj zXd`bn-Sw|o#OFc67*3eoZN9|WDK{F}2eGhmOH;w)7rUX|=%))|u=0@vvrhz)YYxpl z8z=?#dgz|Qu{J9C(7*ls_4S?inBOt|ohg=JCd89o_D%hiU|TM0^#y{LRqkTKnY^@% z3^B(5QpwTmr5A5x(SI zZ)i!BkbLHifc*#&6po~MDR1f3gVwS+;0ZY_+;ncV z>n&K9x(fv^mQ#d_w1&sMtEN2O@Ga`~xX4$G6xkt_zqIU=%*2$d=Y=IpIyYbB zlqu~}BHKg49RPn3dVP$$5$XlD&U-VU)-KlUsJeZjBLCB*h9F_lo3vtn! zUi1i%(N6+wK-#N(Z9DY zGg?%ZNmipxmiGsRJEltD4jZr`S zcMH*=g?dj1S;^gt$EW87e_O&%tXh10So%R;-5bBLAK(BX3mQOoXUsnJyB;n9^5dHV zr89|Hp+^X98XC>odt;9&p$ES79Ocx+Dl03iIxZLX8HOgN?1oWp*TT!PK%)eOjczyU zNxwzdwb$BI{82EQ*=V|EoNC;4`xn zyo8=kuUxF-$>6Mlh^y3eGo~KPbrD8@R9Vr-V7@V^KI!$B!Te`69VE2e%d3zBHRY;B z8+f5{<#F9V^|ILaC(_S_emnheNC z-_$f)7t!|Q#w~l_1-ys*&4wLg=mH=;^iuXem-616|L~z~V6l$t^os9I?uA_&uXQ&8Ez_@6*vq)6X;R)C8>z4zHiEl^>jWL;yL%lurD zo9}aT4Tv~RrmXWHR}S}m1_VM2$X{9&seS8ReFJq;vv%Lt2}7`=K3bwVxcR-JNQnFF zX^gppY?HTK*$^jbbAQjgQ7-LYV!|%l0299L|1TyZK41@8wbfEO<}Kk4LU|$ol}gU= z{yUw7?UPRFFcr?bSOlQ0V)wj6Sd6e_A5cN6TY}%>g}b)Ae7}>-g*;953S4^^=Ph*_ z_?BRk=G(yGSC5iXq+D%>AFOCZ2f7^G*x-(3+9>?3cN|$tlAky94t%OLoNDD0K6zK-(ZfR*GMM6Q4 zl1`-?r2Cx(>ht{e-rxKE^&Q9e$9{Ych5NqOnwe{6u9>;6^E~gO0+mpAa9F+iS}@|^ zB$R0$75=Jltw~>%eLBv{tBQB3DGSV4wpEopFk^3F$KL|V%>D$v9Kzzif@w+DS6i!d+*{P??c6yRY1Rt>2xr22%TvsK zMK}h(tRD*4p@Vezq(T0kzW({xDY@O+F_Y?}v;B76Ci;f9C;-OAQI3%24@9; z@B5F=ku;A5h$XN!#>3YGFqYc@DjKq9BC5u#kTj{G%#|+yluD}i%}1FFXt%JdkI*~e zLF=$qV^eP7RK-8nls8wC1cJsd#;t}_)oe0v$=6Q_ZRQSd(!}_LchA~?cL{)s0zxF1 z(zp5Yrh$S%5Vi*V%y$4gsrwI9h3nZtTYgTAaK%?yxC2bEHs5{<1fjO;3RsA4fc zRC}k0k=>w`e!Um(HHQclADC-6P6m(zVvy$Tb^JLy<^-Vbkq3=y`WB>>Ri*020W zC0>KB2bGZg2ROy$ad597(?|J9l`PQ#COFUEehR>PeyrjS&^Zx;xr=^7_T@rs|0bc) z>i}XZ5rBK${XRbVn@HJ8S83(M|$79hyz07?K% zMkXr$(mw-)2&jTAs0tN~Ytg{E1^xY$iCBiCr2Gm_V^~m-ta-@D3ED zN;<5n7Mlgd`=dig_Ho&Tb$Kq$@K zuxEtAi6l6Lj2z5EK$(H(9|7S>vcwQBSxgx)8xtDC@9rSWSP)}@J_m<=T7MveU^^W+ zwd>}j^O0#xQeMUz6(sGp@oSlqj+)hkJ(b}Q(V`*S#u#$NcUJt2X=C0FG1i=b-!F8LvTqr!&jKvRzu zi!4B{0uXiXN018PZY5grU>oL-mDN5le|+1`Y?*36ndNUcPh?@_0>cAl_+x;y1rU!v z^Irj(n1D{hGCng>QoR3f_sGj9lA+_*^4UeVF1*52A%fXX4jltV|i9H8WBYM$Hi zY(xRg1LD(kDe2%VnBN}ePvviEB2ZxJ9iW?_zq+^PAAwJ%_x+EDf$A$Xzw4K~hb@PC zFb}{f0K5v^0+2`%GmwWs>385v4y0MqXG*s9x18yq5vK!U04W7Qx#YK1-#I7B3Tngi zM>=hBahPK$&xQ+beg5BXx}Do3gXTl{Gb(Obp9=sO7wA{~S(qPStZJ<)+fT|qmV2F3 z(B-2%fWeA z8JCdnEa(5RXl$6Y$G?k~g(&c^rATY?;5M|GjflFG)$7da&1Q zpoe(vr@Phtu7N8H*9;S0GC7iK{`CmGc#eqM|2)00JZS;eGf%+H30M~3<~aZC4Qf#5 zuo04cuW$>RIZJ79-SmMk0_b1xcg^%HMi7x-I&MK8XBL>^uTw@s*|uj0j*GPcHuAnp z2B<G=*aI4cK)5U2B>8 zo&9A+V8k9q$R+DO=wZd;1!?%-Q%yU42RYgc=Jn&$qoL|YZvk&~u_P#^>qX%jkSt0z z1%evR?wnuwhh@%;u%FaEOxv*+F@>51t~8 zY$e=%c6cjeYfgdH-yvY%qr|Rb*`PyO-M3q!E#s*`H3a*Mt%~DjANF57EMR^-plL8; z?g@!?k)_IFIFdT9%CfrMqt*1z=^J-P2vc;f0ZoR~C33nY*#j9U)*aZf$n5F}Tfyl7 zmOetG(l|+t94i_qq2sAdt#_^)Cm8$vb^$agx4^KC*ZC<~r65B^)l81HM!h8S_3G9% z0c9g7q+nd%nr10fI4Np1K3Du}E@9Z6)hOV9!NPKT#48QrNm6_*fuU^QAUDb+k@r@P z<6hRECC^f-soNBr#O-Csuvp~_LRAv1Xv+Eq_Bqw%8z$M4xwpSv1DS#nM?ayf!PI5l zP$b)IaL}FT`2|zan;j4!fZaCkb~^?oLIG6aclmzoR|MEOI!==2965f!ZS#8867ET) z0QTV;qgew9Zo-50HKf0`iTfoy9OU`4jb53Yeq%{gOHvYX8KCyqx3NG7rbC19)-B_> zL4g%~%@sDBN_IfsF?w3+@-89C&Cc+@Y(qQ->2MH8x%}Ji1ardQZ7>5{`9ElN4Tg=G zF1($Rg(n&5s))I`L^MOepCynszPtfRL$nNU&(aP}ke9{qbAyi4!C(*<=94nIc2ihhzr zXvbUSE!2qS(f`LPAgKuUU7qOLq zh)HBputQ3@iEL^x9H)K8Jn|TRoc$O(A_rVgNonVCB8YY#!i+bt4k?<+7E{y3}; zIsJ6Z4YtnI^qA}HjuOs?+3f(&ev8ewlxjVlha9O%gsV97k$SdAN*&}%y8Bh zcz@Rv=*GVvI!2Yn0{vrGsr4+QnCspFC;#t?yaCyXnNMeLySlk|OM4}0!XJ}|4rM}j z4ym9q;I#gCuLh3wa=y0KthH7cUd>ur8^Th@fZ@Dyqi->S`0^es0^jIcb$V!3X>da|34!WuZs{OgPdH48m|?bKbC)8cny=@|U`qWr`6Z^Pe{ zhRnIG6!h3?@5ZA((S@(XukJf*KR0&=$*t`wBAFZD4^%ObcCjJ6;ZD33M*Eq1N)Nljc zRtq17o?Gynirbva>Xtu%qScDI-+x`BHViTS{)q6=VO^JFo^es9V+findn>JHq+v1XjtF1`#p_1K=wp`>bcjokVA_r@s_F- zO`2&&%InM<=JM^i2Ar;MhbPQgkYW3F>gGDXMCGEWP$|{@jT@+G5!zuxi7`Z0^aJM2 z?MYGOH{zcGr46JIiqL*#^WUANgk8!;ZFHRz#(@h_brp9|5KO1K>5(TARgI^!jh!sWalh7Za^JfL#EOvlV50 zbIw*zwf3J{xB(2|spqvhs>HLAIV|(DIbo`Haqm=6IF!W=Lh3;C1&E2QRuriX|BT zfQ=Ph5284aj+2$zHvlrh=F0Z>yaDIDD*hU?+F~f&GghxSh(_Y30{4A{vq1#_>H;vp zZ_q-;0DdTkd+-b-7GtIdan^6x<|ERtDn7^Pd7(m@DmQ{Lgq{M~54cPm?yM=`oGo)2 z#!b4JMG*6T*Wph3%w&f2*v|m&-`gN4zfs^keYWqsW9$)C_W*eTSjnJqOVoyJ__W-= zZVL4*lLpzX1aJc7wpZ@~*8vWHmJ3bm?rY^jj12~Ru${qV#Q>u8H!k>JZ!%zE$t|89 zIyjlQJRLiD?)pTJ`vS=6-5ffa6Ous)pi1b;Udk^jcJ+hL^k4%HCIVn1oB|mKaA>|^ zcSBQCP=On;@9riNO4o-FfX8gA5ynw4;7X3~&xn4?F<%GL0Dvk0c=TW(*VyX|yNqP{ z9JXW=%L2m%2g$19^s9zn*PLZJ%q;*wffC@J@ z03$9$3Qa(kuvF;A1+X62Lu2f~U(l!>7=k{A_5uXHd{5Vcr|ldfoe=eL)z={tXqg0% z=7udx@az(Gn>pdts*pqOL2HhMWpsnH+(skWS(ZCowKx3T14nuJp)*S}(yJEWdz zR57@h_B{Xx05IXIk1OIo1pt6JU`IUy@OEhI6}X&kT%klTHo?9XFbqS*^xtZ{o_G-% zK?!1ti=uRLVx8K^#6`pnz7rHIJ&%sm69?F!+DVdG+&x8ojQU7?~_P$eCK1KD)Z70?-g90HY81JrhgNd>qqZxf0rMYB2(AWSAm11cpC$>S8{GhY1aff|035}ujtr{(llT?Ku=K^+Rvw?uKX1p91kL?IdAc%bP=P=4Yd^@6l!G>9<)R}!Yk9Xe5a zY~xrB_@1-{17PXhN^SuR$$v_L=1%cRyFecT^er?x0F|u*x^#l!%up9Sh}IECMhGMo zphPPm3Irbi0h=ZUlr#5$Y!Sf$379KR%lR@;b_y}HDIgsv5MqxV&3$XLm;v(#f^LYn z`VoMSK?ge^0acU(jr(ZE(Kr~!q7s%2?hAZgSa4&)Vb-J|0t$%uz=2U5C^JD=5l}vID)`UgJEDS(f<_` zxfYsE0ot>>N+_7g5rihh0=f>`Zs7P00Q>Ga&-Me78xn1yTz_8v)_P}YIu9L{%B{tq z!pnvSFm8iJptn17Fm8^UAf^Mp4G^V%8w@B24zG$2;R}g@fe)0?c7484ARfH025`fc z)q9{@rj?u%Kr;XXUkQkqP7SwnH0uxU=u5Io-FkH3Kfq8KyU}nUf;&Tno+?2M|DIf@%1(E4j2B9Ai8UtJH-zEdfi$F}EA;)~> z4u2$o*0_r%MAfd!fq5n8e6R@u7JML48Ru>RI_4OJNII&%tGDXTZsw z(9>@#{-rfw66Mp;@`M(8V{LC(r(W+lRq9+gJ9oF}V9}%8IzpPWfjgoYGq;KtP>?4W z+kgc47P6`ZPFuiZ0XJ;nPZkSS9U$u13&tZD;l}`h3S>WX!9aq#kDwr2>!U5tq}s1% zKOkcXvnjk9?FLVQ6U1S$ZC0?IYYK4PqKZMhEfDG(=-sA)v>W*H0KkC*T9prgdM6aX z2_y!3R)zkH=YT1jJ!dCt0yKgFYhkv&{F?yGlvr9z5XEh2KL?Q> z0(rF&klO>LnI25^fR2(BlZgYXGxX>#jRZ<_8OXsxAk_flqXUph6);*5 zBZT$&e959f?j5?4fuI!F!YzURgaXc#@9ufW#uw3%6jh$dfnI><#3W*0LI zb9~u008(qxtvfA%2h2G|G?r9*?spaKHAclwa+D0VoaL?O}EfyaJ9JKXiQqyDzW?Ks7DvR~v40Z>iXy&DnTyZF7NOLt&%P zu{02AsA#O-F6}FRa9Jj0`r_7>zL}9vz}^XLM$CZT1|VN|0{KJm9Z+Wo0&}-z3A#}M z&_O8BKm_MZs3Icpeo(>V-xsN<*k1yf1s%I(4ko7>3!0lSLXyTd!(kbRP0cqNswcPm zJt#mL)F8_ZArw4D_*GK09Q7T#qBkyG8iCGz_jZdvOvh{ z&=9f^?T$3A0<=;osi+p%Cm5gWOd0n=8nXe> zQUZuK&6boNPbP1Izz~+4?`>HWXR^?h?e<{X6(sEFD%vlu3bBSNFoUsn!$A)SB=d!W z1VQ*1oS2}?#xR)NA%t=702~+TfDyEeK+En#trd`|oINLZfe19nF*nM5(NZqzInb6g zjk+BkZP^%4!IlE#-vJ|(2q1RzK;+vJVrQSTLItuwHxzPsi41QjVGjs_gAvmS_B|jC zGCsJH0VsZpK4f>mz%NfSNBDAni@Nd}Q$oC9M9rG9&pw47)(+0`qU~>eWI&j(jzwtt zTd>}M_4-K;hJiHyHRKhvg@AT-+q5^r7a(3v)lR6upL@IbSp(2+KM-HZ?#9K!`gA76FA<~Lo;d7**A2{V>z_TVzA_y zpJiZEy}m85>$R{sbfAGW3Rts&`96WXR62keNP`y#z@$xwp#!NmHbCY`2o$aW68(b6 z{6&J|krF@z0Lnc92O(%HL2_g6#DTjQPi;Xj<=eH3LhFv715i0kcix_Rp?%?8K+G9@ zH}ZB=f{L2GhgWe1IVGs9`l8I|vts2rY7uE;cug2o5~`T5UM zW1u*w%(ruiO|H_8O5prJi^N#1KP) zj?;SWNcy4PnoDj9s={Y)$srA-Tx#<7kXO`i%Rp|~3{I37ziwC_AxCM%ZBOr#`&Equ zp{3iNtrjQi5#M<1$X8|-?0L2!gQ}j~VScBzD;Z`zJLe&}1i6CF_8}|Nk3%D9It|TP z^2ehrYuq7u@C;EAma;>7;RX#qU==jSz(r~B3H=6NN;zjPhc&lArWrDr&CT^9h(uPA zmY|B_JgV`#HQLn5{pIA-;gQO!uka6Ju39u`)9?&(@jt!G{fa6pqYr+IjMJx=h}pKZ z9`Zz&Zg?jw@2tv5`iyw3*NsWXb$)8hwCY4$OFxa^OHv3vriQ+x(h4 zoc+wL`#`fHDOzD{%3$p|C`cI?RX{FqjC$=+gkHmSy8IZs;96Gz)66VuuFiTidScXTFv&7_u=Y}njeN0Nd*PD2KtfE|q+4;lzS#hRm-vlRK6CKbxl z^koxX<_^^yi#NP6lC4u`Bpvt4Ra2BV@7G+b8Ngp7>!O(X5tZ9WR0OeOTbn-x)m-(5 z+=Ia!n1cU)#`~Q!wf!81g8A}(YvfSc#|i~+La_f;O4#b%eflF>ZCm{UdkcbP|e?uz^;Cehoj{X_Oc zs%}3>_fS%W`5Hn^F~kdo zm0-B91nA)%dYo-sP-qVMW#tcJd=-g^V&J#irm%qd7?kI2KA_6aJx?(N$XRmc5;8+5 zTgq#O6pWX6)68kedJ5(B=ebo`;Ri()^rXa*G5WMqd1_f!YxkWqAlxvlE+eGyQqIEb z6UQk+J4(1@mS>Rtee>9C%+dYO&^JLs z|HEJ)+tKPTIP|Ku4ngIr`7rmqBHJQUCHl1(f1g|J8qrvLE~8Q9 za#g>U36I7#qbs^5IlLCQL{|ByM3@HE%OevFJ95#64K^Dx;c(j>38j_mOBL{7uGe=t zr$2>?VhBw%(F+fke%Rq`5JKnjtU4>)oqQf=Py6Qy0)LTO@kbMAg-IfMHX_qDA`(hW z=wEdDGdwRo_?7&5%Ez|JrH(Phs=<>{`6|{#x+tETU@+4^Y=#c!CJ26vPSV>emwZL zi;2(Vl{{#FzVBeVDpI66(aMtTJEs=Foc+1(QnKGyVu^gDd&d9$;N41pr8Cl>Td3cw znaRP6TM`Q7s(4Q?AGxXgx%2VkrI$u2d4-u;)yc&{Xk+?xZ}FU0?=1442Uv;B4~y5_ zoOT`$U-Z+dYPdyX^gW;Nvr;b%B*+=GoS(4USelz1fSU>U5RzgsjlN!#1LG zF++#D?;Fp4;5Fgj&$WSGOx5qF?X#X_O!vIt^W^(;>wo|KUkm)N1^(9p|7(H&e^}t7 z%LRG-AUzDSnXRcK#KFwS2Ktkou_ZDaCj~17^alzG3O+V=F804S*nZy-6r^BLcYSF_ z!J=YpsRpruKFOkJW@`?4LBYla9#XxzqD;Yd^RKjpgCm53^Y_oz5Hkk~7HMlEh?%6B ziJhq#vam4n?;5zIa;UM+hb)II!NDN%!s`7Gm4kl$@5-@p|E(F%ziRfUBD{YqB5m>C z3;n0cY!qy4T;RL@U5ybpcMtWE<{fRT@@DfL*X^WU29DTXMcN&?#3<9(zHcUIVxw3M zT@bJ#G`m%&kr~5O_J3@`c2tG}pVMO=w zW}CWr4)^5l`dpO5`iRuGIPZnbUA@Ee=MP?;9aOg>Gj#} zdMuOvUm72f$JUlRk7Vmt9HSuks18Z`!3_3U`oMg#<@$J*>cg6;xmtsvZ&Fur->Yg) zSJXBttYM(vuXVW92lD{FExg@(ezt8x^nPky@BOI7+AM45EcIjq`jI6bS+)K0g@q%n zE559WIEK@uBW44Y7fHM`*hy;&pw+EjMWpWoTF-_m5w zxV}8OsDcE=Ho4l0c#7VWk~t5vop-kU*!H9UX!rpE<<~F@>Q(iR@^chh{l~)-clQpx z&S)RJrSkKAJk_56o`>XKKgO}YYk1n$h%%CuE+lt3-SQN|N)T2haG7XjwZze87{qlK z3)S~aQqkk6nV-)?bDXTDNV>8#?k?WP^Do{!D(Xpo`Ra+$6Us|8&9SiJ!os3z0c+n+ zpG4CQtN1t38$op3IbasRiK}Y&XVTGhP*4)^=LlzAb+%55(?4Xb)V!-*az??o!-&_{ z^fccs>y9;Qr)E*P+cYxH?WruGpRVRW6iU`oVc{wDVtV|e-KSC;O&$a|r)IU3DSiZs z_tqzz+noaP_v}?fHky!xqXa4pxUFwp3H>Gqp;!#qP ztJoN&Cj)DoSh2Zd=l4U3GT0bW-b=Hw_8@pzr1sN430S}Mik;htJmF(8^$5`BM}z33 z;u@kXR7vHkFpe8iI3G>FUi}&$E_~V)a`>3_8DTpjV2CIWYE%azsIF*$jC%IarIm|c(8Nu==)wNm?Rb*vUl{l=sG!v#5m zf{w&2+VxS3RdkeRJ}REk*H;7<{Z6 zlSHh%6&ubxQmVdr0!}x7K#{V_$^e_vAe++A2UMg$5mOZGp9`0e2k`g3`5S#56lDxJ z-{Z@jb4bZ(a=fRPJr_xGd;AkdZ{qz#w2^-gT32MKP#B9CW?|^#e9ZV0_~rFaoEOVJ zA9}hZX98B}n7(ap7!P|1GbL@xGJ70pzG$yj^3QvqMu&QZ{F$fvo5wNN^H^GR?|^_4 zy^m;!ZxMxde)2~eeej~`C(3p2EecmdF;rilJwYxhhMUvCbD5Oq>S zQZKJabSkzDoIJ!PI)Ymh>OYYR>c7t+CB2aK@WnVu?y<=IfR-*XwgKy-FkySMJY)%3 zVFN;>=&YW{xkVw<-9J$76#X)Cq|h}hV?Vd?+Lt<&l=w0AS(s~JEa8oF0e6t{d37zD zkW=aC3%(P(7t74N^oKvoaK|cGpXtuWzw?wf#DHC7z7l#q=bdfZ_D~fPU>}6zqQ4oN zc|d_v$WAM&mq?1n!T4UZ-5(ch#UQ$>667_5ptH3r*z@ny}TauW&s^JtFMM#^Ra5I zOAh(uO^q4!{SW=Tg-v!@9v&(tIhm$ZHcv!v#!ZZafo7bkMWBmU_fgkpK3C<=^DOB9 z**WsuX?js>-{JBX);JvIR+}DDnJ3oO=gMt9eM5yC$bNUR@G0`kk)p$bU%qzomuoEM zs@?$+9Nxa)a#VybzObZUv`MIBu@$nYvb6KRpcOeRG$~~9x*pYO_1-_;VbycJ6TU

jaetyqVADzwYy(#29o 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 z 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 diff --git a/docs/images/raredisease_metromap_dark.png b/docs/images/raredisease_metromap_dark.png index a3d7bb26c719e79d5cfa9e8f75d62d101cef1560..8d0634fc0a1d7e60849abc20971e68aeae57d083 100644 GIT binary patch literal 403312 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ⅆOi={id#ji7GPrO@LBXQQq{(%7Hzs>4liA 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

DsUr$j*m=k4oDSTT{h2BU-hUlNYL6cuO3 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�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

S%i2%a;cJbRHiG7L{>nm?maJPwESts85gMXnRh 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

3@$~oO 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

XKaRyrkfK-o8Q}&IxT(Z%YX>95TC+Ev-rBHD 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%0Dtz^oIZA0;t)&G5pHNli=1U6(e!N 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

Q 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μG*Vqu*XZq%6@FPK`v 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 diff --git a/docs/images/raredisease_metromap_dark.svg b/docs/images/raredisease_metromap_dark.svg index 195a3e62..2611ba54 100644 --- a/docs/images/raredisease_metromap_dark.svg +++ b/docs/images/raredisease_metromap_dark.svg @@ -2,15 +2,15 @@ sentieon-bwasentieon-dedupmarkduplicatesbwamem2alignment to mitochondria (bwamem2/ sentieon-bwa)markduplicatesmutect2mutect2markduplicatesalignment to shifted mitochondria (bwamem2/ sentieon-bwa)sentieon-bwasentieon-dedupmarkduplicatesbwamem2bwaalignment to mitochondriabwamem2/sentieon/bwamarkduplicatesmutect2alignment to shifted mitochondriasentieon-dnascopesentieon-dnamodelapplydeepvariantglnexusbcftools - rohstrangerupdvcfannocaddvepgenmodcaddvephmtnotegenmodmanta + tiddit + cnvnatorvepsvdb-querygenmodmanta + tiddit + cnvnator + germlinecnvcallerexpansionhuntermultiqcpicardtools+mosdepthvcfannofastqfastqsentieon-dnascopesentieon-dnamodelapplydeepvariantglnexusbcftools - rohstrangerupdvcfannocaddvepgenmodcaddvephmtnotegenmodmanta + + +tiddit + + +cnvnatorvepsvdb-querygermlinecnvcallergenmodexpansionhuntermultiqcpicardtools+mosdepthvcfannofastqfastqbamreferencesbam vcf vcf vcf vcfbameklipsedefault path traversed by the pipelineusers can configure the pipeline to traverse this path instead of the defaultusers have the option to not run these toolsbam vcf vcf vcfreferencesrarediseasenf- core/ + height="53.599998" + x="474.39999" + y="-1904.0004" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Maven Pro';-inkscape-font-specification:'Maven Pro Bold';fill:#ffffff" + transform="scale(1,-1)" /> vcfeklipsedefault path alternative pathskippable pathsmanta diff --git a/docs/images/raredisease_metromap_light.pdf b/docs/images/raredisease_metromap_light.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8a772fc4b88412e6b04bb8f5811b9ae277f696ce GIT binary patch literal 129860 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%0AAI$BMq7=co%NFU_Fx4KK=J*eaUn-|!aH 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 BP7nY9 literal 0 HcmV?d00001 diff --git a/docs/images/raredisease_metromap_light.png b/docs/images/raredisease_metromap_light.png index e91c1690afb7ea76a55b1008528e7954e823aa8a..aedb7e767e3942787738613a22e9982f4b26ab6d 100644 GIT binary patch literal 395562 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 mnZ2H+>o+foTIDzY-P2>BFT=IfBZ~!qLicGa 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%0D(iRPXYe4D+enANUsh!145I6t@3 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

S#`WWf{$K81EHZVwx1SzYw~MDh*F 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 Qj1b5GPgg&ebxsLQ091W29smFU literal 322695 zcmeGEWn5Hk8#fA%tsr8d5`s#%(v6CMw6wHJgNSs8A|fC)ba!`34~VpM2~tW9-AK+p zme+ON&-;GepZ14mek!QLnll#mAVHz-pd_9=QnHU(8gp=#89K(T?@BzTdPOsmGFy00LFt=7-yl{r4B-tG(mt|KGnBoczCk{XgsRe^=xGtOW}7 ze^=xGuEzgX;Qw>M;I6qan5#j;^*TZ_oF(_3s85E7*Co6Q7YeP_kejxoM@peuB~rwZ z2R4@1N-V!-C+f{uWvc&e{|u>(M?s z1>T2oo%;!&PoKI+E35`EZf?XE&*G~hW&O^V!b0nR@2_risXtROio+P~da%sB8Ihcv zEKL)9^3*BhCpe9JpA2NH4h83@C~z2d#$4>c zefo6XW_4W46aS`)Cms>g`rm!By!-#RX_F2wIY^X?4P@Z`FHc}}M15~`SdX;^(<)M(Lec0X9k(N89hdFUm9eVyj%e;^IsCtid-Cs}@TM>ES|xPP1H?L)C-`B;8Cm3Jr4l$ibGsyW*E>Er7w^~DPwu6r{#YYsQsd9{S# zGVYq6|GgM0(1S&*GR238F-tyK4A}t|&GLj&(;*YM8A&OrU@GN|XOEiwZ!507E57%4GM9@25s;^J~1y9U>L_`iPa{`&1y69Mz{f`@Zm@v6D%rTzIj z!kZSj@$vDIf|ni+W^n=z{drparDi`>;M#q^8-2HD!gWjz|Ez~GP{5_?*gyU61{?j! zc$0RPe=frB*}|LJ_K$v+nJL0WLn0zFC|v(M3TM$mS5;L(geF|2mVAnaotd7VP9Ya` zG{W|#hW&F_U3dOlzdGGYr`3EHj{NHwwHz#$;rw0cYd04+AJt}dU|H6=4(f;L_}UL%we8?5Idfe|D&r2&N&q|H7S$-tG7> za)sM*%SfVkwj-Ka0*U$YY6l`n69^-^`}d#u-ee7{sd2Ftyoy|w(cpfhG>z2Fe-mq3 z3@VAGo!t;VYjr|jx?Fo}YpVda!S`Ft>LpL>>+3CTZNsPI%FO^c);hfU(y!J z82$$H=Z`%vFK?#lP~QIbkPfv3O|bWuBjlob7i5vwK_28uuNr+w_-%9YG%J!G=r*N9 zXFp4PpOloemG5@cE})X}>~2Razv}w>Itho-vyVsjC@J;t-}?UUgailf@1=3@fHy_BwKZ3ri^> zDJ!e;<;_@$!=}OV&o6Q^(Ojk9rjUCpc=aDPbr)aT-3^CFmP#&zo15EAN3<&1dT&F& zqN*y}s3!@@ZHP@e387pMQZ|{3Kkny_TP83!Pb6c@u|!@nZks-X`bkANMz-kI_nbn!H+7wlc_5 zpad#^d7~wv(2AxGh2jJID}jav!h-!3|F`J7FV+2*QEQ`kgoNS$bX@D5B{d>eZB2BE zQO`XBGM;BpTNN`EQhT+a3Ei%!sKCNT;a$4K32zO!jx>%3<@-EsvAXWQsuIPAg;cpD>yy5~CFkaZdML25YiSkq*Wl!lcF-B}u@ zq@bWEHJ{KfH5pKV=2l|6JmRH2x4fK7K+0v*=tJZ<7i(u(@Cx~{mVdDT)T><mtSq|SOgy3KFf54$-%KTjvIzf!fjHEbB43DJ*~L!=+Vbryx)oKqYPR}_k^;^JT~(Ty84uxbODisDW?OY+b? z^`KS5KA$;#x@Bxk>(Qe}l@6O}J1b+^HBP%GP+}{c_ljVBQX745W*c-wg}E{z*L~`R z{E0kr)So>0pzXS+ubiu{Ov?R+gJMS5;`bAmy_xWZv8pew`&e3uUg-TZSZwCTOgke) z;LgqtcBj&DJ4;hbOW)8ie5&hj$qaa+c2|dXJ%4! zHNIp$_QYe*t}eG-8O;O?oUT!9&_O~#%=QGJm3-l=#{LpxMTmfYwljZk-(g5sV45PJU4`V@mwMxZAHf@Iy(8~#ho7XwJjy!?8a znwA!6yHL4;sgOm0Y=9t&LlCmXl-NIu7iS!U+&J>cHe`$BfEv^hC#Zo|sn{`Mup z10KFRi6D8|7@nZJRBsmtnQfLwlxgMSLV|-8WkdenmfCyd6_JOfA4jl+MbiiIJSkZz z`J@ND4S!;P+V$tVVJ=Rc!Ml#68iH(r3Uvv%LJx_mhF8f7@gG0$hh&bWbgo`n` z6lW@STsVW7o>SC2lRiMxPMA}osia>#uPWM7hvw)=;%sIbMgw{fUozV<86t)hyH<83&of(Mvehqz7uP#sP2an~AT5>_muf z2z+W-Zl_IgXcQ6&JKVuB^ta4hdvXt_jZ^aI{2L=d1~9ZX=vIJ z7UH3({WJ8}H42^8U%wL7OHEQqr79hxbvKZACcysZ z-x_A0#;jAT2_2^wpo^ZNVS0bR($V2&R~SqCy{{`1y@s^m*ymfkQsJ+zG<_<+s4El2 z;gBN;Btg| z!#ONsmTN7#%rfj>WuwEw(sY~svCtZz z>4$(WK&PRhAr*e+4(aK0=S-J=6p{!zmqW4`U@e(w80b}WPllVCf1`){wMgSotfU~l zcy{=Q!1w`cWS$(SJ{eLu-8KIuRN24g=F)))F!1pF5Kw`jVAd#;2BJ{(LLXJs&>71g z8WoilAbk8oAPl|%%+@|Jq0`yfiSQnMb93{0hTJ>tspB!n z1=jQxl5tmMiJLA_2pv8@;SREc{;guG&T`hjuP=5sxb+*c0rGvE0|5y~H#BadTes+L z-n_Z_2XJtIqR2S}E(5Q%v`q3oC18p)dtkZ@Oia?8CjH&ri6TftZES4Jl#S)%b33kf zFdHt?AAqQbnqmx*3urbpKR+LO-phL07WLXI@Alc=RwMJp_{PCl;hijE`Xr{O$ zySmJQyrQ#}CH^&m8%1Y9&?8v~@}sk^+NAtrd=8?d!ZDF=s+F@I)}@AJO{vMI;k9ReLp`xK#SH} z^YYuvKe@FaT1U#vvae8z8MTGbM*)@;!X0kLFx{?GyiekX5W+APEe2IpRRr6D-ZCgB ze3UZbdLRQiJpd@6#CgvW%74ZqkF!W)-7~{gJ8ZTM4XIwZaN&k4I_F9_I>9?#)wE%o zQm#~P@usP<_4XTV)B+b z+|Xfo3i<7-g+7yUHEq*3S3)=D1Cc#;H}tZJbwf~J9Rr9pa;vomdCo2_)PjG6tUztx z1h_1r@c8k2keIGsyT)GQI^7avX=&NJFpzDPV}Oz~2avhHHy6+8wDVf4!cr9K8$zl9 zXh4rn()jWw^X;#%Bm(vYV*X^AX9-9mqH#3A5{#;ON`M`wu~_3@v<{BqNu61c^Kt`+ ztbxsst_e6A=gpn7v|&nn>_FCmEB-i(p@Oy{ck0}w@At>k%t7-X^e*AExkqPg?WULwnI!yQZ@E%{f2*LJTIs{|Ujn{tt! z#PVo`B4FG0w=Mvnw%Qo;=Ya_EYVo<#UMC_-<+Ylf?~@ZAn5_5EH{6}PECO(jm!F@J zg+&&idZacf8Cec!3q}y%Q4e%K!ZodmwwOXAqLMQ2E^d$aL{rIo-PIkn&!~JE zzsDlD(Q5Yl#i^j6AVeBTl?>fFK3FyVv-S&MOEDn#(iipbFD~jhuZz0ij&^zF*^o`s zBmPIpDbi7RmE@0eeNG!dF|^I-w(v&!^Xu2Il}3lvQrp55nORu}vKIA)*lwaMqgz^@ zcEk(o^mQmrc{mRu*RUng@RwAymcA3*xr8`93MVSj% z>~!*L@WK#W4tHb+?S!d8)5s{}v4{w6#}U9|u4aV-6x^;fJfvIRak?d)M*BJN6a;gZ zk#x^K5o3vCYk*IM%cA*^>zB224qQeNBB3Yhrhp3g`P^X6LL|mFZ{F}({Qj^p-5UI+ zBT>X_Ys5649;osv23HHOoPUj0b{>LAslsx``p?=+*%K|E{^WvLXYg;d0L0J796Nr* zUf8p7;d@$rjB#af0(~(b@k*4RDq?PuI@J0{aF3J znGdKQ{Ta%pHjY(ZqoxC$1!Wf5Tv=GPp_9rd>x6d)HOw<1y!VGN$EgVkcVr^js2ifh z{7A5M?@l?+gsN^e5DL%N?2h+A_7BuJ*&V@~86G?g@b(VsG5Q`>ldA=Z11N$9D89|o z4@3az1IQt&GPV!m$1~76`#@g=x|jb|9$9IG<_K@V~sYo21L+0o?2QMWcVi3uOBdAI@_ z#hAUt<j|l$y3Ivl5!C_%LPvXhF0|Hb5)m#U~8WH<}tw-kJ6A&m{ zTbF?FmIX^9Y*s;h%TEm6z~f*VnO=xc<$@QFWa0$WKvRAhHnHds2y{!oJT5SPjz27tmuCxNJTkpF$T6>opN2kD#{0Nc?N+bY{Zt|Gu_ppnwpYe9Akj)*gof4sm4e)D?*3h~C~g~{!Q&F8@tTAAsi1iM zh=2f0`g}_?gL2u@HO>jtr19R~9(K%bVgSKk`PzaKgyTts=g&U_`+>rt20<`i-sA#H zTL8#YR9uXxYe<*tNftL8jy|Rdrtfp_2Y(`!REGrA>3?PcKn2ADEd;$UY@t6BQH+4? zB90XNO)+c~7mw%~fGpFw%tof?U5Z64EsKzgsude#Lf(M{lHGL!A?YN@$Xh%aiOG)A;tF{sZ6S5BA9Q~ru ziia!$)vy(CA6f}WIH-S8prg4ij3D+UECjNn$H&K5|3nHt>x>&Lni&Yp1JH;jk1^`b z)!;_Nrn`3^t=8x*l@8W^4zB&3{6Hz}{EXsxe*1QL_Pu2@-*QAlj84d)kbZQ-nZ4;A|H zh(F()s;8f8P7FB9#WhkK&vGGeeR8iM5(B?1G6e<-Tes;_)_7gP;QID6Z^HG zJpmD*)X|x61AUds$;k;JH=ywhHu;g-z~(U-A4@3!Btv57%(-(&A=#f8-72@3LXZgf zngF?w9f3k(bA0H)`DXMvIGyb0u30{YR%Ly(Z!=bILD{?#d5zC*B?nNSDJ-;#O=bP& zS3Nc?w5?|cJIgbZlL??pV}U>*5LGr_DEF?&$B3cYtzId_eIg|5rtmQe&=?mL3t`nz+!Xajz?v^1ftmx~WePS!0OasX8u!Fq^94;{Yf$W@LJ#7Rb#oM)iJ zB6=X;SpjP^NIwt^?}>|x!|H2{MNbYc38y<-gZ?9Yv=s~~tOp7o;(gqD@EFu)1T4V% zQ%e{d8zXqD3`{`S$;HN-I{hCBNR@!Sg6VokTsS-Ew(W=b?jMSbM8VFh-n(=``GGVw zy&5u7gDqd%kk~;DegJ=po^IBs=}c}IZduB*Q}rqLHQntbkt;4L9U8Z#9NO+gNuhH3 zphaw(3`~~^?$DT~jh8vbgekZra2PhmFbZmFTRD`jdLmjI~O8NjO zN`80hoCzrGQM^_LmE7-{nIT=EGG%GkRK6Ln&IB1P^tyoI1)7B^vr9xoO^o(rnF{=rdPNRLrJR3uK9ee1ER-3glcPgf{8K(hDJ z=C)hWbU9pahJFzXLZMZXlHLiZ{D{K__H1x$Z0sulG9cH03@-zF5QuO^AlzrpoIzYf zbP6JVx*Y5vvfr{Al-@DdIYu3j)6?Q{CT#6-?zuppcE~dEcv8ptm3Z8a5K&MKb zaew{5a3@DP8i(F;#T-}U?XgO@Y1Q15U^x7YxqGgz5^w+l*nvzbLJlGX(F(|Knsnqn zxMM$Jb}?{K3ttza!H(DlTJrv^*TsMBJkDnw5rnhE%d>Y zLloW7(b4I-Iojl&h-FTG9-fHRa1BvW(M+)a_xBg`5l1AJ$Ko-BvI;~zVmzBo)E*@c z?Ld8Z*qH7Ck>9G|l|Y{G@gEUryQT1VS_$aQ9?s6rh;WsWL5Gxy+S=NYB7I-@-*n(L z3xMJfAJicLZg2sb64HMGb(R2aHLTpj2yc{(tWw~VI&iOc&TtHEige_$2hIv3aXJ|U zGZ4f8_P00V4>*sO45-s+GBqMUlB`?O5*4$)&<-|WGoI3E-jZ2UACs+2=hieemEO*? zv`F~1l_M#^x$viBlkbMhqq)_O*!&L~J~BS4l3DVX9F~=PYXcds+sn&HmSaoVU_eFl z&QGZ8Z8eqAE6vS@5ms-l`y&I3!2m9MsPAUJpsHKya-?1}Sm7%s^QWnI2Ia1xs5pRV z%fm&YAVouhgh6Z~9rs23$<0cL-b^slOvWlpkr5Ir5ka6jWo2c+>)X(dc{-Rp=*A4@ zdybC| zW|o(kK>(A9xc`V+G9=KiBX};4Ri`$`VRM$Ahvzv$xoG2^lK=)8RNBH-5D6W!Z|~b~ zI}0f4Sz1+PopFNMFiw)~hC7DlmbBK%ziI?En?b9x1h9Z|!ozpcyBUh<{@}kvF~+Yt z*scE-MHGy4gybPq!^6XW(ZSl<{d{9^=ME1KOUx&P26EICdp+KEx3gk$gmH(8;sNB! z&@Px1+-yHdNpyz<+NitCOe!vKMoF2uXieQFD(yO)Lp%`_3U`whb?5fPCq|So<&?4SF2+^1VzIrEPHx!z5PlzN-@edqMn_kiB(jhBaw_J&s8#CS5od}J z7VewHY)vwM8~p(i&cQmNzoLJQl{h-YKvMDj0|}UdnD64}w%(I1KlZ7}{PE2`H7!-G zND0;TuDqNlSFKnKAmIR%B_fbBfT=+iY2e>v=?850-IU*EAq7$p8DEKF)Ava^_c8~J zE|abK9yNt7NKvrlI05AIHfTZ!%y!0RgJwU!h3!+XvdslC?Dg@sE8s2$`J@jBLjZ;)q$8l6t0om0)AGBO5NWaIlKu=Eljz31or;qU?6K?&Y|> zkP3qiN6Qn7``e4q$r#4cPX)4rR7G_2W;hn%)(GVd47|*&UHu&KStKMRh7N^Y56eO2 z;(Yb(JQOd-HLFATY0wQ7F|J1;QBhILUFd7B0eJF1U8dr)_H^z9c+l8y^~Ugd82x2k zC~|yS)I+p2J(?T9d4bIlT4>KY*0sESJ{0AkxSJF7%De$(epS)c#C-F1yU_% z+SC$?&h<(gS6*{d?V-2uk*&@y?|(u~Lrc$jSDqiEk>GnGeP&woiD+eQ(q?B_rEzcy zhseI$7%3G|nT?WK^VJO|Z8e$L?Dj>^tfB{j1g8Tzh4!YenT=H{LvE=8??9G*a};3s z^sircLEiHG@F4@h7CHsd?f`Wng?TUc1t}?Mu6B(&Olr6-L?IJ4;8<&6T(v+31C9t& z1$u0mfL!tL@Dw81^pSZbz^;r9+u16)z5J`y$*{?$@M?cu*ocYhu3*{#$F2E9Xn2S~ zD5q%%JO^51DZo9%ZbmGt;^Jb1&X`Paq=Y$6zg_63ui0p0L_!bHYX@zun+k9uKcK@Y zb#)Jc(NfdUFo1D`rqa>TL5y;sEQ7$qT=uc)h&aul znita-usI4YLT)E(eYT1ydKLJ%X9iLZ_soOX9HuIck4%j_={{%{aaQ1s#YM1ZC+r}8*kd$PrI~DGv?KYjz0^x zB+xs!-mHAeoeG>B36SSJ0dd$MGdJbsDbcv~W{LrD@eq^=A}&XO7Yq`1Cp_8*jd=!K zY8WM&hpDj6qDsUS012_JyhA+np{TU=xJR7A z7(got@R~Ha_&3L7@2L=V6nT+Pa8H58l03nGmlyUv?ed2+-t#LkIwUX*N4VUCZWq#ljI%twGdo>IvX?Ff-6(i41*7y%@ZIPq! zc@>4(X3?)~dE}!Z8s_G$-$5}9v`iU>>LJTu%$bZSH<@Mvoc0=G~b}Awp*jw zz^Es5Y$M=kGZ8TpTTP!yhd##3o=f`V$jVq7;w=D3?^B8IA6L2%Z4ZNmN%NrTkpK?S#Dx zdAVjPnXjqtR2N6Ftxjl*DxK8Mm*PU@2|Q-&i~*```U%Zw+`dSMbFbDSl?9VmTi2Ffmax+` zl@{C+Y-D1@~UNfdPUEl6sE@@7cO{#2=(M2sp-2jr(A z62f3+CKci&vf1Y*YaZA@h`6O*{x;EJ6u2!irw0)RUThTB6&c5X$vl{BV+8{hp(EF5 zq`Q%E=(m$~uifI7tXEca798Ie-OxG&b)NQs*U&szJYHpUFzX|wG8e|`hU#Av$)5ZQ z%HIFb1{bz}`{2v?u}kGj8kJFJ_NkK0*10UT66dnf{HNNqepah2@iaOamXB__I2qJH znm!Uw?$U2RTI(A99MIz*P5XCuiT%VnI;W$%dOgGj0&%#Gk)<0qZsu|mx-w#ZNU0UY zKgiGhjX&*@W6JVvqI**K20f=2=~Gl3GeXP32inG_$1jBIxb_shY)}GB7AvqfiQxp; zmJ0z3<}^&#NUR&*BlsA*O(!5BydeUznd4>9RMX^f1!92g6H zsstvF92_0f@Wr-3UUfU(O9!3ryDrS%1X69UPUygpNPm|wj)|3(6 zZB!S!C&WR`(o)>vH#UJ0;9bZBa)8kO)51a=!6}t|Z7qb(8OFP$L3l`@YierX)l<5= zpMko2ukYvvvwF(zgqx1Mygb4aXrv<&pzR23v6FVaS5k~ZHdgDBb8>NEDUCRGE#Ao4l_Fjk$s zm&3P;V0cm$yjn<}E91ew)^?Z) zeVx6#8YASQj(|ZJ%3_P%-P#ICA;Vp)bBo$X{t-|R;>AexYM9qhgG>iCw6l5#R8eL4 zpHiziSrBKXT=utu;DXS|(_orRV2d0QyldRcohnkU{yZV!5KMP;OhFv?<){@Sn-ZGu%8?ioSFN=W-t2AW!hFH?=u(Eg8iNAI$w$<@5A&5EZAbZQt|VH(5$`)EcIB zZhjjYX#+1Y!j@z6ZLypM>P@Q_XP+Dj@2v1wH*FG3{@MM!B=LCZDTnCU!jY2q=OyJ| zmAncVQHW+xFElAr(Rih@oSP9j^5Lo;=dby%INSbavKTG;c%=>4-iB?clhO^wZ=fo#vXiBdyCpr?cOWTqni4{)8XeiP~C zCfEpz{a^>9)^Bg59$h|8RLCqSD@y|}H%7qWYUb8({iGCqD^P#*PfgN z(gw#I!XU{$0sG5n4krSVWzZFe_=A6zio5!olarDPN=rpq!mnMu`o5xq7X@wM$MA4a zXsGD3XO|IWvCm$osj2BKBO{}1oIvENy{#=5A0Jy1@4hBv29NWf`{2r^z<~hN>+$MH&}$P?Qyaljv9PwD z2Fr74yoMAECE&4Q16k&FNgAF$T7;}?E|V;5MET>g9ZeY|zNCcpEgwA=8tdPmhCbK!(BpK_HthJ3e+(&(F@XL zX!X0Lup9ii%X=ELmIu_T7e5#W>oM0ShtKkf-Yl|WIER2gb^RdZ+tiXhi?~;a-L3a` zs$YWDOic(&XXi?}IY{aO>-vn~GhDsi~e-Rs0Zrdfz@>xwnV=7}Tnlqk|!5W@i3K zNFi%rkhVVxGfVFa3mV@Y|{^-zs&yd90xz%NKWoe{Xt= z>DZ^rS67rVi9PsJtK_RFEkge8#k> zhf^yjCMK4E{oR8(J2;ht4^!0;DrX+XlAV5Dq;~;!l$wq%q$wCPUcj;Dm6Vjc@{1O9;$k=WJ_!i0yuAGK z?b`$op$G6nnUPFIgIWaR9>f45BREZOJgntHeU0uKACEJy-TMfg8%j;C5WqZw8%)n1 zN=r-Eo?!#yY7TDo&;Gt8u**0hmo`uX#}^uJGbk-N+sFAE8dz|ybTW1+icG}hcF=C- zdhm}ZtUHDMZ)X$KlFroeKh9LJxbqut^VDu&V60g4f=q-lj(1=SZ%6I>GrcJy$M*w? z%|R#`hFUMTUXk9-qPN+XVzIxilgD0p3-z7)P{I+)|F^YG5d$OuV5LxUlK zm#(uf`SYfwizaVN#&R|;iCq3*dHL3@7MO&-&(4lOrFks&L|{~uB=FRN!os`v?!5=2 zrx-ji8$upn8eOzv(sJ^}R$ zg`zZ_eezB-{0+R7SxZ@yIfP$y4u>&*YD6VLFzopiTzmm4)RIJZPY z#T)aH$b`MUK9+`P@w$VSp210}_k=~lqh4)%H2s{JoipiQ9t1A3?H|bztEV%oH;%@> z#TuV4K4oh`J9A-`SeaTpsD0`)Pt5m;=DzyaeHu<*&H%d-iixxipYs1^0rplWCBy{G zvN&FZdGLpw4fU~E{&|O)-@}PsUO?J+M!rcgiT#>)yX0L?*5KFPCsQRoZzz0DtyJn| zPYrv=TSmiakz*utrUotiNrf(S?`l+qLj?yfpSN{ud%KEl#!^ccg+J3)%#)LBnK|DI zL%x9jk*9Tl?(+~xFCQ^WNxe2(ersv@TZESO z;>C-SSoXEwKb-S*XzAzzAq-!=di7L7RxI&ZQhK^?T&)m5#s)|L+Vp_8Z+cFOh%{WC zV1&39uBlny-k#}<{rTj{lR$Kgw6-?6LgsZB7niJ|jCUPQT+WkQcb7+89wSyUP83rY zE^@ZmbguJp7qfbG!~=32BF8)q`cTOjf0?^9+^J87l+kUONz9aN;*YA?msYcSs#%t);yfr4`8UVEbpMJn$pUTS0y*y#-`O7d; zb@4V|2w-s&jzQ2s*^RmrocYI{w&v@hQwB+)%pjU{*$(D*26 zXg-1&6^fXSRI;Ixo*0ZUjKM;zcf<C{4ln7)MZ@f0UV#0`vb0N5WhLxVgh2$v0sJ zDL67x;^9LSyrdzNQkPzNW!=7;hrT3c~Sf#4io1~FWjH4nL( z$2r0@5IzrKI1|eCebC8h3Io`0C>GbC~zrbVq+0#1-8$EC^a1JZ0hL=0!iq~<;w{@ySe(y&!=r_w|`1*n3iN_ zr@(1pkAfDM%xs3m8L3E_=D&ZJu{_=~sbDA_VEdOvxu#Bg*lwd@qf zdj9L;6@1kAE1c}4#(Wf8?YLpNM%hF4ud&~REWSi8V|)Wc&M%Otibyd~-lqpFjBhaF z_9&Wx)%C^t9p*6VyXXE)wc0RXBc91%?zwssW@M?pqc0nq*Y3M;f!dc=F{mMbSFU)W z^GZ>u!`2temzGC)x7xNPIpiD^8A3;8FU~n03OZkFIRDh~Tk?0F4LS$kQ@jdM5$b)} zVeDE=!c4Xf$1CHT711}gyG~q4$t{!S3_V)6)F5RM)in-e=UP3O zGrJJVNEh0Ot6~k6+?$^Yh~zM4i!U+PNxCJq0E!5Q@$^$!*?P|hv$M0OPoD{ImF=D{ zIW4pi_pzwOEwPJde&N?k`FBlXl~1V?lqrG5`i1$E}Qg z!_dcxFTm9Pe49TEg3$sd68xyoDl-rj78X8NQ|rl)r-U}+1AGJY*k4fInVuK88~4T4 zm=9Mwumj%xT3`Q;Qr!PpwhD8IBsI)%=)(Ccq%Ul3StH|DLC>M}NyQ7ftZlofU`16` z!wH4{xP#g^LmD0t@dy z^V=>>0*;@9=|jf+a7B}=MT&ca=8Uw-Z>k3c;#ExBMn4|i?{T%eA$s0Ct-4whCe2z} zJMMCGd&R`O1{eMr-4j#MzcgkexK-cC)Hr#2*Q+dyi?7nLMU?TyBYRpvz~+f=;cKc{ zN?XMyjUoGQZnfC>*8VwjjPZ02cF-bEZN3^A>28&}|J`J=^FV9>@7r4Ym~IQz)dk|A zJ9NBckx$yrNAG+t+q)h+G)hkr8rkxD@)X&5%wuXTU7G&I$E;F@dgu*iqGL87Ffjpm z(?%(*H>VzdYG>4@7(f^F=6-wJe9WVqsWbg!XFP6H)=432*E~VTqanU}IJK_0sOWj2 zGcThmQ`Z;WWgF|`C3f4D5v^$+&&Tym1f&tmyuL8btWd%I@L=cm^Zls+2%OMA>aeVy zn{&hE7NpVPE1f_%{=J>Q=N`0#brre`Uw@hHZ(t2rJ9{rM31`S2*ct29bv z8BbZ~=nUTbwZUg}*TE1Y1z8&zi+Q66-Qy0}r{5vmK@r14!BJqq>$g)CBmhr8;Nof; z8VZMh+XU6G2%6DnKR?c^b1+_tJQ)Gy0K9-NOKGLj+`an_hFGtVlD2~`lL4WPf&tE1 zFACSXZ{JSC>%q86xf@Oh#6Nw|;Yqx&-JzsB1twooax!+fm=?|!kO?|ohkrl@G2Y~^ zjl%JUzoer-^P0FnnLGuBfc<^&(t*)yQVQRM2~OYaY(`KE@4}hI7+$N7FrEifTHw1I z4P+6)=qBqk`g*{CPz!PccRVn!gl54?d9g(cTV2zvh{-{G(E)LRI@34g^t$@er%^y z)~aPTo_fo^exmru4*7B^E$qAH+w{oc=r2{%&2=7!J8Mkd4*B7l%$JzGKZ{;E!oD0k zOr1LR#YesOcz=uM1?ukI`c%GE+V~PfT)hYD?ck`Wwt_?*%jvaW3N^b{pvC0;EO-aP z&rQ>6$<*K9)~CM5bBDu`x-fMzQD)SS0#`xBbZO}KRsAc*YE@k4E|E6XL_PWjr~{sCP}W%dPPlWf!C45d3gMNcrV z@V72zQwBYi&r*uP!_a(wJ1I%95{2YRiGRGW+0r{W|m4p+x#DG!1j*T6aYGA9sLyiydPvSHF zblaFl>^M0fy*y4kOn@DsM!-3nZ%|(4tgSi3#KaJ$V(;i^LZudqMt_BCepF)62S}w^ z{`MW*$jSTgaSb3qcfc^N8cdYEGlj{kPQY#mpaPZiL>#qiT)56q2%PiD(BN8{z{G<^ zKEscj@1cY_gMdspvPdr2w(Ee8hnECHxq1c$mT+tm8A|PW?x_l`L>jb>*3M1?7?s&t z9Lle|1s@y+zIh`s;k~Usxp#)4oG6qAiwu(|2z?pDR$=!kJ2 zi}Ait_jo8|;jF>vXH0-J1GQXc-ADnRWC$>n#`^xNa_8)#OzzX;svp-Qnb0LW@Z*)o z(0ctk{WrbPasSmMBMH5wV{M$DhhV;v3DTKX66qx~If&Qd+We&6JbGblARwXOL< zKj_(E`!zTjDJfr>Xzr=m!Q7TYH%F(b!BYIxBeP?De3a|4F;QRbab^GN1q2UN%f%zd z7DWkJ(j2Vjir&`mdd86o8eH@Zzg|O$DLJ%V<#79;qno8=N22N|cl7MYSnTS==;+tn zZ|8E}aG?!uoWbm7D>3{gHy20mK6iO7qQr*z)_5wx^TU-{BCPq#&zk$IUfWlv#aJR# zjxXaG51~WD8y@2XU%NW{D>55yXp0u29$p?71>NH%fRbCp#4q*qp6KZzw)G@@4#gSC zT?#?R5J*sv$$Y+iv8$j(L9=fGY4k^x9jl<@7Tw!phk^H?t+K;7%(eyWnu5Yrh*A=n zi~urT1Xux^ir_LMVaF*e(=amn!aRc|92c zpQm<5n57;Rq1!t;Wc;!GuB41|H2pO> z(SrxvFK!0(#`hK#F*~xEeYcSwhB|7Q`S}dN!Fq+h6_qEIKgV58?%?4Q{KK1n*v?vN zv6LK;v)}I6on`Sa(ng_Pm_HA0$Ya;}v$l*WK~2K^U%Acl#>mXFP6`BLFs+PU2gdQ2 z2|6y0+^{RQxpVwDb?OoY-xKp)?NnFXO=c8G(3g+)w;mj^otyML6wFxHN&7gx&ot)TbX@ZMp;gG@1kWXVQXL13(Vu%y00L042% zR1h5<7FXBEs0FMg80n@2WU3Dq%bC1Ikm7%SF*k%sEa0pq(ywHsrKuPg@T8>Loqeyu ze8Y#D8bJs$Py%m0ebd<7tZQm21zJ9cj7s_1HPXLbSm4=!31En-!sVc>lBnJaKEwr) za|>RIfXb48()S94x0k2q85jo)Nd;ZD8;;Dth+rLrHeL+Id5;a;XhZO2Ka+CjN$Xyd z>>L}5g>H|WczbPTcA}-VH4#FSRnr}fM!)y=z5r7>x=;~ku9S)C(_5<9%w1kwjeWRB z67WP_scg!r`JGZv_A{TJP|($q>{iE@MoN95DF23mlQ-@6?blww=@?Z|7VF>`R~x5n zqCNC|3F*(2?CizWBL8%MRGeS{7bj=KLyU8_)`j=aoXv6QBfAhhBCmUSJ*yjRNyS%t z!dfL%^{z!mJ}fJG?N~jN8S+G*DljJc-IIHd5)~{tg+l74y?#XYQ^{q%7^_j#{7gU} zY;PIru;gt0Zc3gzNFs$N64M1^XT2N!*8bw-biudAIo=unIwW#RuWq2T1Ilxeq+3U~ z6_g7xM7k1e87(u6xvHZ5x zCJ}qDk8KnaTix8jSWS`+#-WI|WwgtKRaio6IQ9q=%$2T%F2$d&DU<%nt=uuJr<~h8 zjZt{zBQf)vIz)ZQhz?ZoHUD9Zn=l+^u%7RJ2c~L)?Xvo3zxdGI0~p$Q3oIW#ujXrW zb9!AVoG@%29gTr;=&LX|*u%3rRwWLf{_udCyScOT63{2;mSV47-9v?ig?*0~jt6lG zMt~J29pS%VI`k3P3&^1@qnwBDcK)*<>WXg<;a1^L4=ITF-0I;l0=W7wK?|h|l|+@4ma1V~1wnEK>k17cKdU5Q z^rMjDGqdX^BOM>^3-M32j&x7u#~cm?8?%G@MnK`mxH~N@pixo`$EIr!H>BWjO~~p5 zB5R)DfpKjIPulB>j*bk!t`L6ueDP+h+h000P8S&&`9xIo^7`~$V&a+2i`thzpsx_2 z#vh)L2#B~{5Nx`>+Z|*al-rUTIqVc+MEv`<3qHPSEJe!uWT z^r__O!H+kl8Hhd@e(TA2PejNf&I#y#A7`+1&t-Pg=%WG5wMxOHr}C^>GY8}6c#YLFSVuRCO5t*oH9;U00#yy&NvnV0VpBCo?VV`Gg&uiQ?$;pa%bY_=CR5RCab!Oj~>30SCmzXDEY-_hD zB_}uXC-xHk#f3|NFxc#={&fw!Yk}pNHjei`IhpIWZRu)hz7o_F3yTY_ovqh-B3~=8 z5iR@W%dzcYhoOX*mXmvjrRWvtaJRZyrcFxR=R|t zfcbrv@2pzUlJ15cs48@_UMqT^G&UVJA` zTqwFTR}njoS^(62bH-ysx~)w~ubAv47ngrkAf;b;0fW%p!+*!zgR-;#P*kt1teko4 zE()uK-%DJqqGMsp@w~!%-^t0eitc^M(pqM$-ts0TB{V8ZDu9l}Rp8_6Thaf{?XgY} zskys5ib*o4t=KA*Hc<0pr=QPoHSN*rK%I}!1MpP(zCWW?WN~}s*-y{7^#Vi5rRg8b zbvBVH{spW?UpLf7E->$i>N*jilKj53i)c+SecS|(Kl%N=0El9q2b;*GFhK@bLyRDW zynHi%P;+bRTu<`|1#P>uS(1{ExA#t92g#WJr~8(t*XqVWC*=h*4Jrc$i8g{ z975pYfZ-9vLI{PmKiK-fB-~bLuD&!g5CmiyZwlxkeG`-G`uZoUs#XVfg4uWp?ko=! zC*;M7EV(2tz~`965F5$5ot*r(!F=Xa0~n)K7)~MO-H*#-7#%JY#pfNIodq!dxoxhF z^9QMtflY;LVAsBVRTULiU4@yMJpr5ZK?{Qr#Hg7V_g>C9~WIZ61Qpu++w z3V_DE*zOk%T>U2jwL>xAlA~9~?|LuB`V#XK_VeegF9~ggkGBNh<$I?~>s8vNYe+Gt zCkYP|1#J!8v17v{BVX}a>o0KpGzOjEBRzMTx$?D&ucXa?TvdtAX{z1S98rqp1&ks5 zcQv_pU7hoB54U_Iob)8%wtL%9yY0CF(HmWK4A#lNg|GM6UeQbb^8Dhx;+8+oJ8pfn z21%70?PHtW>dzWIw{W5CS!-9xvj#bbtRwt~d$>NjK9j%cj5_9*Y%&uZ@}m4l7^{EY z)7nPxS)tkatDnDn`Q@HcX*riD?Rjy7&OU}FB{`pOy1A=YmH5hv zSFSGBy`h})GcBdJn5*iep-GYjJ{g&m_yic&I zN2@P1);$l`W&Y4^&w-w%+3n7`G>b1w5usLm`P`i^e@fwl3X^+#K#@& z(f-C=q%A~xgA}x2M76nDQ&Y<^9|xM1M{OQrsQ4RY_s3d-nF?lFekK`@b8~S`tgeo4 zyffxZxP3cQcUU4c`3A*t=aJb217^}kyP2ktB+(M$C(CSM*!XtaeoHxp;8?&+V$T^D(+1dAeUz#`n`5_VLco68N?`Zv= z%dEjtQD>~$IGc6)ZEd-0ln?)Vt&_c6Dz!;b;VzCg30f^CSTv15^smb7Sw>@ziO~u+ zJtWF058eV_3-_ePTm3BrPkZznLLpaHSNYKN+RZb>shVl#8jwRuNk9>(v0L@c&Fjw( zxO{<{98&8C{rAE8a+x57euqDm(_T9t;o*v2^X#l$4axFFu1qHDR3R15Z zz5USfk?YbWzv`dM(o)Y3{omeA2KCd!<3a_~iI7m`h5Xw^ld`_Blw24!I@q++samL>`XCzTEWDd_+(Bpk4n*m9}>-1o7oMNq(mR? zRE?uLeX=!z34x~g-;Q9WZ>?9enIy9_JjEp`!UJhskGa*o9DAzgP*zeRJk?twDJRz; zI~*dDWHInQv?*4UbIzPY#;T4~Z^VCpZPoDJJ)LPs)267Vd1Fu3G}65ec~Joesh@fo zLuzE*?_4kG{P;k9=^bgjEuFb5N5^?G3hm=u*W#}lqddm(OHK>>OC6-mw~-w>bm)Yz z(}v7FGIUbAK8cV@T5K9)V};y?jC^P$O3VyqoKLBKa#4)R?x8&rQ+jOFgcyxXO->a1qzFw@@+g`~Aas zk0`*GkQDO+r`b9#A1?wS@jY;+@gF2zZ{FMoMdc~5HwcATG;co*Z!P`t;~0|4*19oY z9J%at7L$ga+ba3_^XCV9)@cwH3ZGgnzTX3T`%VWJRO$`L+rCy;qX&HM@|(P(qJj|A z5po(l-w-&JwuH<#XV4y@qnn2VLf_I-Z{*2!vA+N+A8EKy|6eUYGwyt$2ZN8+W+1tO zRtra!=fTj|-EixKZtX&3axBK|w@506MDDeSi2i3Xc-5aoM$&%qrqyMhyl2BJ7?O7W z+`;Dyv*F{601vQbAPR4%YqiDtk7cEhIfoW2WTP$lX}F ztzBZ8$NN1+gKvddw8s8 zCOdF%cxQc?1o`$A+USj)6H{Z!!6RidNfiSFIW<-{V$N|Z&NJwL{w!8Wx14zViZQd0 zQ1pw+3Fh9{rp+igTcF`lH6r&wz6u&_U%`R0G!>4Be=EZj&GJ!a=CW>XZj&J{i#$nSgofX94$nY%kbKR-lv70t~-NL+pb72po39?!{`dWyD$t?amdJP(B2~f|3-Z8$c8G zHZRWrV>#3cyC594pYBc&(L*wft*tGA_XASmoo3a8XoB#dLhMW^3#B&8P60}N`uOn{ zsDMwivTkdp`2=o?2CogXk+hRjx!VvyuL8fqI2c%5?9Sl>djzjK*NzS!H zDyiM8v%)``8{M-;$^sMxmkMLb5BHt06rX2!WjRnPm81mtq6)&x)s_EP^ETOx0$?)K z5G5c4ymZ+8-y-dK%l`HUUn|Pk!}cU5GClJNp!&bHg(}cvA60Ws?uuci zAq&ejvNK!n(GK`n4|Snco!zrOh_GBp%3^w&+9`N|(M=`_2_Yuq|ZDVOE&oJQ6~Z4bbBq4vAiee8d4o8sRv?QI&R zkTu=(rC^p1m*k{yMlDNdj33B5bBAHlkzBT1+=S%}zRe$6_md)*Jok0b{k^~xA!~JN zZ~Aau^gEkL<&VsHR7=5TT1lr&dquRO2v#aSF8ZnI=bK740w9Db6>rS^*5iv@KNIIa zeu=cjM|;U)xvX>GBdO51reL&YGkg1^K>DOWnu)uo!pk9wG}meIF5%k0 zsj~Iu1*<1eCCruYWYC8O2tzTTjxDcXE-A3+2_b^X>o-WE5GZZ6g11WFLfauDsVzAx zD#pMbONtx1lkUlZ-aI%K%A@beG?9x(IXJ-V5Y8*EY zdP7ru)CHb9xtAAmGp~}G>y<|i9$k%ESSXm^C-FZCwILkm4pghf8qI#>Vl7;)WX1j) z?q=)v1!JS`cRiK)z>*`Jk}c<_c<%Uw+BY8wv2~#XZk~H??XXSljlvUZD}0Hzi0)=X z0f}DVI8)x?_ZA;WtQmhc#NP2ovY6QIy19?_!YJR3Zt8nSb0QC?XPQ@Rt=?Qn z`w@Z;PKfr96!$ip^a(Y6y9uj(9(uRI`h4iJWmFD+sy?wB!v$Kf*4~P^OKHLMK_$=* zQKC5uOcG1#@|Be3FqMiuXPe&dFDo#gC@F1^0D^B*=|#sAr6fHV&K? zdT3ZvvUFgx|HsK-*?8v7LL;dHW2r*p=DJN$`AzeB#XF*$B;JmWtv&T+B0#Cx`F9-G z(Gjt=<_L&XzM^6@moC$upe*AAea`V#+ z^-MqM-E=jBZgHQW$MQ-J#rHY%`xvicum3ngtXVdjP`v<7^e2CS1R-YElRpuIHVsftid|G*Q z)RhIJUW?5;^v7aLoro{ioQTQ$oGZFh>t=Ot%M)Tonx1yat{UJjbl$aUOfC`P_`6)R z);;=g!3Yk4`wWogmB@epOnsK}V@Vu8Ol#eJN+vAj4<0-y5%`~&^!F{7=oOF1Wli_& z3zt?YlnZZlFjf=J)e?`{dT|Md%Omv4Xn#!+I|QKS0i0E6pevy01afTvQl4mc$RL@)%_$}>zMUAUzrR0( z>6TzKU_41hN>#!=3K>}w69V)#fu&+%YAOVc6@RYQoZkpfMiMM&%cndH%ifRYP%yvy-D3C9dL zv0)S$xN-#0S>@&BkpV9?09%F*1}UW!_*5||sa+Vl^&x|EL4X>)khKTs+rt{-Q=_AB z?zCuyZ@9f)V&(#trY^dc@%(4v;j&#+&eyX;K1DRr7ePLL%l^0keP%tN(I zc+TrC9Tr<@rqU#%bb7fN_EX)x{NK?2)1%4xd6Nq0$YZOhf87~z3#88M9x$NuqoW)& zQ`_TyeP>Hv-tkT^RgL3L^zX&%)~h-I;y%lb5YZBi`}}U~kYjV|#OdLT=O+`C7n2=| zq8ruiE*%V^Di6&Rzopp?9jMoyi#v){-i^M7kB&_dyRsC7j3$qh=IsGEYvGkxOWB8-afh1C4Joi=y-6g$b zZplO@$uuU(gxAE>?4vg4WU+ba=N#kpq~fP@Bx6(R8Onx?KZ$40oME$;yLtcq`v?`8 z8{BK=uh{3T=9uZggyzvMy;{3Ftq~Amz@uFE4`fG^6Du=#JE>f zRe2##k?QbamBAQDz2KA+!2Qwwv26>?@J*1i&;Ksq<;JCorj;qOezGHj7PIas(SbBH z>~&ZYutYnK8FT38PceuH$OutF`4e(@oxkC7guJl^SFqXlVm_P!5PK!Y`nG z)zC%}K}4IFc*(KUtN;7?9?!m^nOQArLb0Mobp`Yu~2I^!ua>--BP~HZOF%f zBLzTR!;ea|xB}dl=*yrKN1@t=EEO?FyB}Vi!coCT3uM+ z`k$J=V}WD-SM?$Mu|?Oc8@cG+RH62S$vg<3Jv=yg1pqQK>vmw4AR0xqPkD&cpw)E; zx<*D!0MLLQ5xjdC$eJydy=3ZExZlE76}HEmgnOvMT@4EKV8x)?Cbz{sIzYKEwr;)h zv}!GT+@!*F>ZrP@rC$yoMjoGP%OXFp_atu`nf0S$}P2b#@aucq?oB9eu(%7 z%K7;$er!w3%c>gQ(h@m&X6VzBuuRaX!dF3;;TeG+*{rpWN4Y3P9w{Xy#;bC!X}r6l zyMuW(iE8%`^NYbzp>-RdKW)r?rG?hwj$)dH2*XTX3=0iCX+F(C#Q=<4MgpgI!%SH7Ncn*Fcv~E4`yqWbCD;sR-@=Xfs7M|7U27@ zlaf@87*@KFzxEkVa3hGc2Ub?tX>)485iUR&)SKaVjRI%^)#A3ea4tfIh%Hl4FFr*} zPZRTk-Saa7EcngRQ08zSIkltQBFu(x+07lAdfO-h5|LJ}a zg=SUAck!_=L_imn`E5jiG$6&h2A1ig=kL=KlCOvTEiKRS?66Fd1HiSSKs*0iMY3)wlVNp&nY&EH~2Bapo|IBZ*JW6a~ z;u7A*-|lS$f|Re~;0a zCn1knHc2!kDJkiG%B(ho?NK7G7m17i+qY0O!mqQk8gUgL#bpEm1mxs|xd|?mGkol^ z5qcyVpgIsM2*HX18x;Y`!vfWcWD+t&0DeY43klbLT-RK0`}zQXqKD7LEYOLpr(}x5 z9_~mkd5X?FAAu7~o@Xl9F<)dYIqt)tHg;}W{$qN83}0RwG6hcp`h+&>L4w{jz`UT* zOz{hV7Kw5?c;qvfag6nskqJ@#^{WSN_B)x}F$xNCjPlbPw7$&Hw!shh7jc1Mzh*lB zlPgL$b8PWYe(m(z+BJ}S7fH}y%OkI8C);4}$y}9h88r~3)4LAIlIrWNvQ-#B1$Q4& z_3O1dt<`heEdaBEt!dhmy;j@>u+5iKnB4KHiPDHf=G3=#}|wQjI(`Y*ly8~xtp z_GH7z+Wn}>BjI<2&mUqq)91bu|0pyU?||c%@N}76yv}v^Ecmq$hO7HPP~ZG3v*-}D z83y9)fty3z484g%f`r~#k)xk%=pJf=X#MR*+0Coe3V)sr9=F1);G=Zl!X7Hp#d z`*YR7;R4Kk5WDgYbmQga5;rBR7sO53_GUL3lwt%VO&9PDa3-E)f~$s;u(h*u46X|# zAjD!^BpMDf0vLol!?4Of0X;r>zW{*JAYs?FFmx3Pujlsg+K<*z6U{RwJ;*AQOKlKi zZi<4CiQp>N23XfAC@7GO--tA_JtakU_V$FG9pDXKP8HD6x)Hmur1tM}G&^UE$G`l| z5o}KBh~fWuTaV*T*?WpB*REX?vY$SJAMZH1H4tNI8!S|WbQc{4y+tFdwxcuQ``<*J@he5d_4aeS#%Vg9ot+05s z&P{8Vrgpr9ttxdTX1@u*q|Duyo2FWZ*;F|QwZ!j{UH4Or&aAjk|9E(%d6nVwoaum9 zj+bxS8TkuJRz~99zK6y$FIuZD^qwgNO2xbiub115@k&{G(1*Pb0em6ZkF*oekO z1B53!g8HKV?(QR)HE};WVBOhcwJppNjKOa$diaT=L!kEHR}tKJr9X2LU&e3NcA5}{ zh*>3{Y3LMt1a`iCVbeFy01d|~fEXN@f;qZu(eHkVnBjEg=z6h1fE@ri>yW5~$D z``Yh!%ttgQp`qCE3I$8z{;xlOn(&80u#lgynbF|q$MA){Q!zYzn1_dFkB_)g|Lt9y z%y>u9LJk2`(a_TRhT(I5pY+KCyS6`3BHWM`+Gkbm{LZJzo;=_ZH-AiUZGYqS%C?|ZFwhaR)NCb6I%C&?MR_VT`{cSobwffvyY(Ot{AEoPt3PpN7i zaCj6*J8mU(aW-_QwkG`TXd3M~+VKbTi^nbYHYg}6RQzgmE&aB+gE!-S!+E=!$OQ#y z&G6`e=?j*Z<2yf47E>Ma_@G1{qn=&=II`>Qhr#(;QKqB(H_J->7CnVBU2T2W=ys@N zziNu#&3or{-*ee>6n}>lIsR!HKWS?%wrb`5N+vA46j`@wXJ_Z9syVonrN!VnT^)4d z;L)R+BleWX&TdQ?MxG8e*jGm{$2mFn=AmJ(OekbzaN;AV*0q8^pLpq5#&O^^v&_2yl?w^dZM2{f39?F z!@Fe5J5-{!B1^r}^*@(Z2Sp!2&kU%JSwtibLoQ8s5i$t;8ARhAJtD(Zu6UPk^9KTm za7vD%Sqj;|xeZRL7f=hlN=PV2wS(AjyFT=0!0V~tqyUXnclx^6oR2so4hbwJw{Zl~ z=G1nfyVx%%Ccw)}o^Zj2OMc6V;8K4&8G?kZcflLpLpAVIMJ5&M`{azb!q>MG8}@}J1KxSP+Zl01zEd#l(aB3e%isygUW?W%k7 zoJ^rE?6CNT(ns#dOI%g0H8FpKH&?`W{#57-=_N7Pl4{4*?^lbirVjV}yM7Idq#fEA z*DX+OPfbgHO6pT6Rm`c&ebuK; zCvr`t-GQaQCLbCKHY@p_aPcVH(R+`l$yjq%kZ&hn@0ppdzNKc=rL|HO#TA&6PRS5_q$4<>u=t=Ra6cEACU zv*dAS(xz)=Z+4nve$d7H(&p`{2k+jMP$%w^vDt)c#s?JLoR_Crc(P~9p^9HGd8j`% zAjK$sP3)F!->ygWKF`T;KkP=60(~+Oqomgt30ddC|LHv8V+-YV?_%9>4L61;Q&Cyj z5bf}3=6@Z>oN;}l(@xP4kQVL2kmsPC8@35*sU(G)=Bm>*#T>LA_MG%_x|mz?p`B{#5M$iRb(A z6@@7SgV!}pG#o6uwad9{O)(N_(BTRKEgd5Xt;nKHRHYcbyNuy^1vXL6az0Pp8p z1OA~0AJ&9RPu}_@v}t*5($;ay-);M!$Ar%H8*XPQ9T_L>FW~e$Jb9e$?80+fTFHnIEDo0=vgW zm)m~VlxY%%FFgV=p)|UZOgV~CHqu^Ys~wm=wb7| z+EA8S*}bKnaFUk;~dL5p*YIO8b{TOha3n0IomTD!Xb<3GBw zb0j~CB=n;23_$KA5afi^5~D(x{T)w418%`rgS6BXnOzEe@?2AN zU$I*6|BMzmaXaygg3v+I49Y#yZkpdl~K6nPC27^=-DNTEA}ltRcotASeQ78D?+VLPe- z$Wr;MSGS_=;Xqv7P$dPn6=Bmb@7tRSOGfgq<=I`lM!PmcftXoYE+6!`tOjcH* z*Xa4~V$?tF%&fZkY<9R$rsIx!p`vcalfUFz)FsF6%(xlvmJemh6}%$@nE>tUtrNPR zm_?4$2z-d+u47Ev|ML9<8Ab`OBRvnYhN*URRHWp=L1g z{PqgH(l@SsGd+birnyf1GD%7(m(dq)Zw>H2HuS;RCZP}O3aEoqCk8U^{rTfC&HI5` z3|(~Dg@sdsf`v8r%FKHYGcmnpEaJQe8iTjfo}InccG9B0GbB?b6fJEue+-5w8HcIKtd9kf!tT90d*6Nq&ARQ`2!Jzqwe<&6om?0e19< zkN|xG3veki0H5t09Z(TmOAvTMxp%LEf&$xvpnpgk-~+v|*iBxESv_U+4?+=c1P^gqYp5;TQFpu4x1ii)ZN`HUJc++YF7DX5pA ztUDPjMWD5ymjQS|J1vPbil&HApu$&klFA3uFq@jhS#&jWa%`OgQBOz_h!ku4_KiXZ zOP=eIDWq9=m)amV3aFI;>=0m!!Pv6R3NsSTP+ywS zHnk=P|H>WTC9`+@O1J98V`nR`=kRI8Io)=>y-!kal`*{b!dhMAyZ(I5^@+oFoJSQD zbGJSmj-PW?HRS2#GBRPh)E*{MRyOdlXIb{e-jiH{UiGbyUGzGl(y0ZB7UqO{gf-`% z-T02Jn@=dbb#+soiW#P>w0!2A7h#DhykIC8DcI@zfu#;ua#l7LUZcAFJAj@c z{g0h{^*TVXujqZ~W>H)wslBB;N{xm_B2J4VoZtHEgDQVI38@DU9*YG-A7KCcyYw+X zwRzfq58vcX$_fhl^I>U~xY@U*o%Md%FtmSx{khmX zc+0ymem`x_Zd;o?Zu>MC#^d25mpe1&&KOjHWd;C7p5r zLlZFqpmjb3`6Wuo?83quL>53kQ+S|hrBMt4teu$2} z`beBz;Jpkm?Z&%r)|R@G_x02m@e`>v_Vz5m3GhkQn;WZ2X$p97L2lCHz>ffEBAhV@ zpn@z^4uLGZ15Kddz~kG%qj=7eCu;UQwor3%akX@I^2{9}-G}M{8wBDY)gy#GfQxp) z;*COvY>~w5>?UANXyZ(=-j4i_4|*R-meAd!Wn~IfJ|6!5djSjkq@=K7q@UlT3~h!! zE*QwHi8KUka}ozLG6w_+8~uo!2xPs0atQSHmMo1prRS#|eYhw^cj3c4XHbZ)>%3J% zLD|nY9opC1^CeVnHrGn1Ug?3t8wq?+s5*Z10xvQP??vLPSC0^W0uQ{Zsw$X7sO#9v zNSl`sgMF2Y2A7~aghhy3N&;4FY$g3tw0!Qn0e zRTA*?Q80$Dpi2T-7X9eaqpMo`cN5LsY#}y?onk!?m*at5rMLF*Cp2A8yEA_I#g3Sc zo?Zjn;Jzv&mfW#c>3yXofnL@UZt0y*`sU;vLN@5`QQP&)DDkzmNGghb4IMcjb*ICq z)J!i%o&CeYYKlzQo7|;2_9YM9>o=t3UZhhNA6oWb$t;O%8&jQ1NPYGBcQNY`wakXI z!za2s*qjb5*l0i7qrdrdTZv527nKYaGa*fnjD+;35x#VoO;)de;b&5OD+k{~og<1i<()5M;zFb4eqi6N6q(xBPZOvnj@M ztnGT5d2VwK{u=NTL#dpamJxb@LH^F2JGphtWrhX@6^k!Q$(_Dz{=k`>{MC|DWB7Y{ z_LXx`T&2jv+u18CEx%K;F;}>?ZQ>-cad3nHFf5OMot(^)!}Qu$xIg+^%H%(rpO>S{ zEc+q^Oh1)A8}X?qxgmdwi#uk<){k^Netzkc=I(0IDPe=yc*QO*hrqB*+p(3IafdJl zek1z3g5eQsdg_JS9}mg`;pG6{RE4aLzm!*z_8mmvxPUp4=DlYmyayk#EcM-jn;R^& z0HA)PMJZs&2CFyYI=8_NmgP==i4Z6X-0_kkXHYcgkqAgAjF3yhg67NSZ^`&u{C8Wz zHQkRf)6*6NAVnZ!C%bwf4$&M-mbk!PLkI<(zBU>Ev852K$2y}js4PAqu$L`md z>wfIzr7<)#1fEKqL=ecUfsvu1f6JZkTM=mv7$j}LC2y^Ef_e_BRYISG<67H=tb|y= zwym$kwqcJ!kQ~cvpvfR5i8Dc{qEV93HyYu0x^wp~p?f`hRz&oux`H*J4+%6AZ}alt zr8tJGig1xyzCfT|Lqo$ZO3HBee()af{}DMxfY^i4g&J5|5&;*!v1IF(vs|N;H@zs`OIY03@L@Iat>-7t0FJD8PPLS~nlcCG>CunJ_0hM4MCmA7GB|44i z9sx*;&>?I?D}!A6NUZIuEfXDpJN75K0OA70ZuZQ~OkW*OIfXUG*NjrKoLK2RSjLQd z5J_S43zN#&nEEU&&8&10QQu>jO9>6+9_r1Qme8=UuV6rH>*|Q~PH0;q>?Z!#>atS? z$V{jTa?PCC{v;=4mUfu-Rk}uK(v2O1J)O}Pr`D!jt&WoGKRA9YJwxqh%H1)KWbs3> z!8LWsfiLflE2Tdrk=^3BOALEKOFT!+CTx}#T^A~2^E zk&9=s+`T3v=0Um1DZ{CUENA#$s!z_zr4EE+9y=5rOaOfOH>T&_=_*W@yO(z*sPkSz za+c=(aZ5{M&wtILw9d}aa@SQ<4r580cA0$uV5cCu4Rt)DUy>W+FCS10=`FNup5QYS zadgKg0)p{5ZH01yuI_LDA|A|DgPo);y2+I-<6|7}M1*DS`SSFW-U}I(eBvNI)K=q> zG*o`pxb}emx|+5AW8<#=?X9EpjKZ(~oLqNLZ21;e6I4Q6i0shTi37#}&dLd;Y9#Lr zWO}GwW3aQ$ZzsbDLhuv>Cj+$wA$~&%zKz;JMzD!UjU2jXKxDLPXdHnQ!vtz3LXV2U z8p=FBJfGi4dRdj=hVeWH$Ho$>iYs_9k6g561NLNu-jWD>gKCs2;CDPBFtYzmhio}Q zH)ZPJkJ8gQ?CtHL)}RE8c6*jYVT2EcgisM) zIAP(Jget20`i&a_Xn9eeuHesv`h?IqSoO+rO5m9|g;odvvAf_?l2Ww)j|AGuKlu~+ zJ4nCGj#$6>&4oU-&Tf|B3hc?<-5Ln+lfoEB#3$j+Ktu3%>9^KN-ULB}2_jFZ1t2%t z0BEz$5j!Bt-JynrV&HMfOg!$6JYe^PE&#T3k8%>PxRX=*nH65Pu*5`0&|+7_#2!P| zLVKqfaSrley#7*dUh7}}0<;E}Kf{jn3eMjD)jmNilwlFzeEnbTlc~@P(0g9hTPW0N zzvEX7C6mylSe=AOjrJAVixcM)tjX;{@&$@d{C!)aImXN^8B^a_EGaDSb5&7H{D!Jd zN&kus(>V{5@V`_C0=))C3>Kd9`$&5E{|$Dx-sreTHkJNMIqj+hu)l0;i%)#2z} zjtg?`lVg619UL$T*N`4T-&*a{EXN`n@g=0XdgW(@uyEY!^MyG64Rm!LH3H(MU#(A{ z^R#MCT$z);Ae(5gx~jQ-=j+hgI&R^#t1OOk2GcrZCs<1iMgju%7U##!HWa(`eUkR$ z?V&&)kNb;2By>NmWi%AxJqCz?V#e>XGV9`V8&o+8;u#1>SII(vFq}Jgj!V1vIl>2& z5E)Ch%B8$*+cw9mSF8{e4_}WOgmClRB(2pW6B(3*hQR#hIkw@-AXL?m$qxSheFOH0 z_qLN%sCbbx_%ZUp424|R&f9{f22*8zcdLz;ILEDly|5#X}a zX_!Fbu|WD&=1cY8X-JDh+DZVPZNg(pNJ`La&MhxTs-HdJqKWky1a%}MBQx>q*Xy)2 z%?W$phx!=82tXMP>tPK&WS6z=D{K&dQ_VLxX34cr_>uUUnKAevasO1)`ne^WJ21^p z9Iv|qjiDwC7HF{vBoJ&8p!u6ut~@FUc!oqROllgpZZXpM?cTNPb5D=v=27pGH?NRq zbO72j-AG0@uOgoco4mn)kWfhiv~gUWXLeqit}VJLDd{~iaYsp+g5^2Hl}HJ$1;Jbl zW>(Xa^S{AuXDr@cB6?mWF!uQY^@ZzO9}m9Xy_-z$2>Ia&#n;S!bj#Pg`~!lT2S>{M zP6*!O`{2gfRQle#gPb;koPn8}HDh9%TjHJow7PNFEXcD``y>M z;vW#qER&lO64ciRtdg1+!#!NC=Ts$bXZHHG-YZizV0Vor^tOWH3-8*4^zL>$AK9xO zOHf8adaT~;sIr=xN#D|O|06xv`Ll92YARhH^36 zudV^m5=0kkYK+#y?plkz%`(UyLPaAFd=V8@1E!wHg-5rJHfHGe?|+Ib6VQSkRTxKqeneW$4E$^BHVHaFQ^SY48dMNP|$vY?=UhVjzqPR zOogw%{|M0T&>~?4B_#vE5La{=bOBu;@NxF<-!IT@qXfNzqaif(P;juj>O}8;*hT%*4avSuzcbkDa_yzsLD&Qa8|<%RqrqoCKR zqH`@XRd+*d+9r)wj_(g;nsq-`H{tY7d+P0x_`tGx<-)O-ZmvPa4TnFdnKxm;+L*|H zR=aF}ATnHg!N+$p>vZ_)=K|@k z%~>njngtpiMQA;9y;zRLd8S#4B@}9`a-8wGrKJeo8GI`AmN-8?z)grSQuL62|9vOa z>rjdB-nVaaq( zIXUy;fe>drsPn-ax&X-#?A@~_I!K@K4mZ#>jM$-eFL>T?N%WN)<_t;QT{i7Z0I1@ z%F5cB5kxaI(h*V=UG7vIoV&L(%S(~1(6$^hw$Y%(^h= zOB0U9?3=q2Bp4>Ph2($Jq;UxYQ8{cf&2;gon`EF|)%)|C8dK*+5*ry!&gEUZk+yZs zfV=bTu?ipi{FUq1f<$%K6;(4OSidB{d{!I)kley?YOywn{#4Gt&w=B#tI!rWU*$D~ zEJ@C6pCvz4RQn(+u*SsXm_MdE`GdbYkox;)l~kJ}8=mvD@aoE8tV0~%%IX2q4QLLy>Vb#J32aFMK>n7xWI5~(x`@}Z8bNvF%p;`ESs^-kHIG<4@%{ZZfK91N zNxm+QC=C$3CIF&B8<=IFXIBe)vC%_6@ShtYk)_krsh2S z>Dp2FX^G|)WsvNQWxp_>6JPMQxNP)sQIRi!g&M)jBnTC3pY-?lCnzweE{T2>LyH1- z&E=II7URRs8xj|+3(Y|36<`XO=zy$uBNQ1JKH=`O{nd%-_Q0yYJCYQj&XGmmi{g)- zG!}nVgy=WHjzTcP*Z>AXqEMUV{C`aBtURg{5_IAJb;aAFK2$A#;|9wmEv2Dq>Rp@l zhmDegvzcDSE?dyuQ8P97YmF}`d#FP8<^H{|N=2s<(pp#SZw2l>TCMxTz-(60Kp^yO z=lRMK>&x#hUy?Vlr@Ne9Wbn@CpJaGNWSx=2_3sAKEeD74mF{HqJ$f^3`-Do*AW=0G zENj8a=LTQ*s&<)iq!qCj4ad&|C4Y$^*Xp}t40gY}3>o-IUMx8bKqhrIcg zbW6bGd|pb--TwN%_?)bhm({N-49U_&Emr0RE=tCZ$4Wf*?p_?CYX0~hXxWU#-is1< zm%L@kI#oJGBQ3LhT^oiI&O3%3o-4nnA}%9$c9O?kh;&M*OQpj1e`)3YUoC*{aT^<(TLl)Lo}c%_qo*ocK4E3>zW3bt#PJ``DarmmF^0Hp8EGo~Og3CMo9TcbeEp!KRoV+Ump zh%UGSi4I8DP9F~~;RyX)3Z{6Z!jnQSUL+PXbA2RsLL$A6*yU6V#>}T`T^>E;kz>cU zJ=j>Wk|VjhL*YS5AQg~I5SPXy1bG3C<`Wb|`2VHU)YRFr#$(vE>8rvqI^C21tkS^I z@=wSEToFitc#60{%!~eXg1!(u4~~qSCPn`PXhuLDXlS8XBYy-pEneI;v?G{K5OXIE z29oF%!P`Z>ctI#JZ0$Txck|Xl;6eCJFn1BYDWHN|9OHcujS>fb{H^Vzl1bA`_5lLa zx9EEpfOd`g&d#|)pJtic_dn}4Nv^qfT3tLAlb>2kb~ap9mMt#?5xv;zz8j$sm?E*v zqJN;dr>BQ#sgW-Mm6aGoffUo&rCN`-e>cK70c6Cxtx2=3lXwptIwk=t8Ues>{oRwl z6LKa9)qSBDcX7ORiw@j40#Cy6iW76EkUOboP=_4cZ!Drv4btDj_J2UpF`9B>E@>x;YmIa&S+8n4qVx+?+M{Ogse@O(s+iy) z!MJ%eG(3)7%;zToyW^Jl+d!Y1b9<%S&?EVJ?wQ#Gk*~M4(we_MO?5E%L{OR<_t=Yz z`nt>{zvsN%TdvH`JdcgNfyo7Gtv5-@Fx2?~V4@4>NWc)0kZ?OKyjM#=vR41CEWu-0Z=@MNlK3U%_x)7pm*_k_H3}{TS|%RdIYQ!5CEa?N=;8s zOiGdnh!F&p`U<6rLG_8_hi_-kk;=}`i#EO}BTJe5COgG1^W#xQMsdt+YRMPZSl4y8HUJId&XC(3KpvsBWAXnwY4;4hkeUq@Y8G z_L@+PV2U!sSxNhP9wHr-vYnqHHS&YrZNQxbo8Z9C9oX(I?MLJ26A51THiVd8t4XSx z3YwbH=$zj|;_WWM*yrAeM4`8D-wp!JC$vU2vT{e!$T~SWK>&wz&@Uj|*mL@yBWE8= zo6xa&x;2&3jQ4*x{qxlIw2`aR>Rl+%G}?{GjxWfPoJVbtWr;`nLrbZvGyXYE+Qfp4 zFVJbAIc(1v`Fv0z)=Df!K94r>eSIO0qk9KJ}OX@l?WRF6C+E?;&$HYl4R&!1lb28s&2 zad#jsA_c%9VTnKkJ32~2U_q3qyPHp(q_nipEx`bplEUmOvwF;@$-+X~hKxUn%BjoZX{ePvN5;quYiw9-Qv|DN&(g+L znP;h4+10N{cG*^jM}2>F41x?vm72&>Le{pcA9P!a;uo(s$uutI+K{C^VGt45`nVvg z6d7j7d!JuO-}HTzf^6oOw59yk!x^-na-s8#z`21(S{m!RfMLN9y#*sZ0Uayo4^H6P zZpUuE_RSRt55Bgwg@ERV^^QgF&*Y>u9!hM6BW_~yB|l$Z!a0HnZN_jJMFoXds9%H? z4BSkZOeU4jcF2=g%UI>2J_Ec%WYiWsvBbs(q9a0p4WiIQ5vq3Pe6#burvHzs?~cd% zZU5F#q9KKpQ9`n3(I7%bvUd^^DisYQBcw7?WMuEHtjZn<2}L9t_9zWx@9TM=eed5N z&;8H+eKmBA^K+cX@m@!L{aKJKtVf(4q3MKF!3WXu7*B*k4KdUEBdGAmhCW1{hEU8X zU6>)T#+?x}&9_oVjqX$)j61k&F`@;c1dwQ(yLUNGB{PQPJbAJM3#nsPbJRti^DrVC=qn09$FMMX7 z3IHz4Cpd)DkxU& z2VY{A-s8Ub0D9G22*g(lMo|$RH9qYKIG4c(2;HNh21xeH9;*)_Se?`}kwiBL9Z7nY zhf(uG%6WWMKx;zqW(YkcASg%{p&?tq3Kuppdnhzp+Ze8C_mk(=_KfGE8PTLzylBtN zFP>L+zaq{k$S6sGHLc+Hzm;Z`t;Fi)?1sX3WjRML?Ys>Z^CEjp^0Lq8XqP|t9(b}e z(E2%*7dJb8xiOv}+32csPlJ7Fy-2oU1Y{3as~q^g@a+Vq<{x?Ckm0Wghu$H{Y@wpu zfq6v-EA3=47DzB4tfuZr`<|Ya@K9H-q2Qx3>x1m#Z{}MoKVCNZ(OU`8)KZteL5DmD zmb)9-7IJnjt)I&{Pq#BYtmmwTx;^7flat%mQK-EbW`r!e-@Oy;xjkO$X@)!id@{he zVC2Y*7(-K04X_`~mp!(I%}-!J1;_Rf=59Fq1#{z&X@rqs4@v-piVRz~z5?l>W;HI0 zOfpnSODiixYzMnKV-+|SQxd^D=~}qe!s-j#;P{*Eq)x|1CQ7gc#xRa%tb+Lji2bSu#96Tt25+YNb! zO@Lx1y4I@=M^ncYP_KTKwv~aZV)fG-yRLq@AO!tQubvC5n%Bcth0@KIzZ{2~3lpyY zHL7{Oc-VIAXw-{`r#@smm;9kl9syJUh(EuR3*kz)pNwVh|qRAKaQ(bhkH;f^hPzOIFO!Jc$~zK{`TMcx+m=4hQirgKU6e&M zcedQdZnIMrNSlko=l=nQ&YcG@2gJsniKyL++3clVR9TIylG0t*E?j8Pjhx4N@cDK5 z_*n0tBc;Okg}}UQ-Sz1&oi01yCfr|v$vIz11_r)WO2mF_M`1Tr9CswW5_}BD= zZe7}z3vU0(-g`Am?KUVGIAFy=GcaV-RVB|G05)-D+{HrzsA`{?5MZJkKeuC6N<|M2 zEnYvY!Fa)qV%Oz1JW@@83O@|XEFGXu}D3V)<6#7KJ8N4AhU9xcDlYuP+7h zF+nsP4C0eXstzbN&eUGaE0~Q#rn!ke%wP|SKV}XRI*v)$^Vu^YC=$^8B;@2gjEm#& zfb-D#-n<^!e1cd`JaFsT*x2SBVBkXKSH&#w>>0O-p0uD~O3PXo!0dnTti7!r5*-ux zJfI@`|5x6(^}=woMq#G_GaC-Fs4S0_NZ-fq4M(jv^ONCoMU$?au50ae)*(6P=6pJL;q&^dwHFt zA~wp}t@5F(JbQaC0NB8hU@Cd$$gv)ekbd3P(2WCpFFHRv9MKE$lbw8*ZlS0DWMkEf z5t_Rl`En*1PTU0{^yXP#pB!gu>pUyUAZR{Zc}$ZJJ_jnYDiXJ7nbTh{ls>~lS>|97>`i_#W2J$ z>^CaM736AP_7Lzmjv_JKqxzboxMIr&PAi(l(`Sm~@rQ`>G&@^>MCPHFY#2;=2pJSQ z_5>7g!cO5{9p;xShVBH$@h5QAqRAJ^tpt&bm21Gi$TH}ke`#f6b@^)Fzb8q=km{1{ z3FvU&)YfvFr6BiXBiZYO53Ax81Z%30IDeywro5PV+t%(Al!M&+_QCF_06p0Ww4RWP(hxEOpCG|r&-5t@Fd@)Y0naWR z51bMb+w0Ysu3x)0fH_y-Oc`1Jv1fzw?z!;CpbK|f?I%J`L^sceExRdI;+w+UJoU4k zjtVV39Owkq#i&Xmsv(&Pvu!fVa@5Ot{+w1O4i{Mz>7v2gLoBCh@jXP<>YR$0+HWU- zZX8CcE-J+9|{AT@e%J@p0whW3vL0 z@!f!62qwdHaP)+(5~t4Cm;w}9!^6-V3zY6k(B&EEh<|L~prmQ|*<;76}{8jF=iZ8u5-Dr&WK~dNgqZ{gep-CB6%Xh zzv7(>?h2dAk0JOUlqn~U*AOH-^XK2cdGiKI6}M5hVEj&lkRp!NS_=z4yuj7!W$Gp% zZ~!Y(8L$%+;v7U96uOp@Mj8$(cih<|k9>XtQ(X+sXA*ErwB2adLkqp>U8O-l$zwAb z{=LMd*%6d^lGmDNcv4yUzUzSi;1p1u^Z|>6%?>Y_JvurXe|4GfR=KrGff3~g*Vnk1 zeFiflR{Bwp*H5H+XQb%AfK=%SW=Dek<6$Ii|5z!PhzLEJA?%}9hd9e3PpYQ^eJezQ zEXZC!4^1SL13#!!xMlX-ExfX=;qXQ|=_eAl48)!bFna38hc)%L>WopY&`ZO_K(-2l z5%Da$wFDoFmcITlVh@IZLP5UYQhd!CS}(oWaEOIvynzrwp-*CIfE~jIqYR}ti>QS{ z#pe%R8sQ-!WY+~QDiY|k+8v~!UwNz9MUZI+Ih%g(SO)LoBuws9dal23WGt3!{Q-`<% zE&D1?2X5w)nrDm{q>AUsJl6Bm?yA^}C@Rnh2f9|x&>Z>>_{1Z@PK!7U)@%FfjNA4P z43IeuKTyfUWEbROczB^rZYqq4irNK_eX<8-g}^{$OXeZRQ2}Ao(kkhYc!R}ixADTs zQY7TC3whkdW^o2A{DC-t+2-QKNjNnzqE@;#AIBl+*?aIHmUT0OA_zncAT*)-(i8YC zNel|){NyGj?Nev*wS8Du6psRg-mUM?p9k1(gmo&yL5_C~tuMENu`wPtRZ6Lj5gRg=-$R7M1pa8kY z)XH&piX*WAR{?6=IpD6`4B_Yn?yi$m8#E+08N89IO{X-t_8(@$a2u)r?Dd1r6TDR3 zzdA)$zCKIe?^cv^O@*6E!J4PFy3u!xuj7^Mp6vjk2sH;9!QO4yN0%pwa`4a93!Q5u zQ-a^!_iu7)^rP1}V%C+I?{`R#&t{y9JLkLA-gl7*q#gKtlSiF@ms{&!*#oP3^}lUn zTFbthYlLxHV&hhRzHLwD7`UmoN{j7(W!jPSY-&1m5K1RA4wcKBwKDz=?yl8*A!aeO zrAG%%tA`p4qR80-x~+-B3kH<%Gef`7G?1)4lJ5eldSVDr!8!CFWa!6@A7*$2&l{j^ zf}GFiqv8T@%s?~`vT{hkS#)$0nlc+KL<40^N*C^xysLfk!%Y!;duBoWlI{WUBc5HN zfWi;v&vTOHLjMfBMGGl7FnAD0CF*Nvjt7)Jsi~<%BFM@rF!nbVhAvR$lY0Cl1{r<7 zut=l4raM;l*kH*el7f_gUeC=rK?F?es=qsjHt59*NyNI6XAU>w?i`I&AUcr8;gyOY z9%No1IY;i<$%Yy0??#h9q@-KFX~>*{q0jKcb($L=r`1GCnwht4JB}Cmp`*hZy90+E2S1f6HzC@A!Zv)l@maV;yJ=zHDit08nO%gtY3!6k;L8`o`Z-O6n#d+(Dg3YRN zjz^#GH3}ChxgR#D&94=rr%`P$ZD1!+ z6VTpH3;|LwM*;>gvd1uz(TTrTJBE!(SO~WVtMnkSR|?o6hXOLRK^JW6`t|FvkbzL% z`1|`c6Gl;TVBPaXu>n+J#vcB+7VVytv@|Fb3@4&-nGp+IF=VC*GLRtBf zviI(d8n_zxdn@N&)~LO=9tSxGSRUS2KyReQk|3wb8~Oa#&Pv&(Q#~5{0$UzUmh@b{ zTsYwJV0Na$$>FWpo+eb)4c*}1nVhClSV2LD_eG?Fem>ayj}ryg@FqqI&Ys--dcJNZ9LJ__ip zqRfeWX8M}RQkF{xfxFOZQi=W6i;Cz7W8Z;Hu)9)VN23bJJD%c>1 zg%F6@DrI%`6nGfQ+?OM9Q4M~U`^!yQ6(3qgU>ffy7my-IE&&J_upq)7I5d7Y=4&kW zSK>TFMTcM20tWi+CB}e$go;6O3ZnH=Per+=h2Z^4$CWRiKLe|Ooa2V3g)r3UA9_bd zA{Jc`#D;(bD1-g$1T7%TRcOs>5Pq1F>%mwHeHh zcW-a+H$F~$?<6J&Nd8|OcYu?tK=Z|;v?Do?0Gep{NFRzrJpdI6xAS57t@TY!z4QLf zl+VnnB!v@Gd@bH_OM80?oH!Ud4$S@@fY=>>`+uf=MU%y@zZZ!(1(rXID2NHF5jrb3 zw{961EUb0~xF22Z$VM6BqJ-oClE?64*L%WncjhAPjSBb2za)ya6kJq9r%Omdh;54x zw^6!3R3J32g0gapn2h;yTyNjIx1KmyU=v6HdQnxHT!C27_5vH=v^j9Po;8 z9|)GgSA@4pRwM#bHiQG=)2B~9>~RrBk{{bEVthV&X)@GQx+|tf25vZEqHdY=PC0*2 z`*O{_*82EEU-*8Wq#dvMFniF8VXvPc`z9+%tgUz)`sq~7c^>fwk8M{RS`Dv=uReam z^xNp~gwipK)eLd2Gm>SNV-{oLQQTVsH5K3Nu=72%B{(kV=JNg=9`?P{KaOsfj;que z)Hzq5Z^Y;je4tx=ezI0DlErBEiT4lYG)wdrV)@ya1}r{ry5Y;aC`{sELzrMA;DtwxL*QSg1=sGF+m&{RjEPwpdKL67gW%d; zV?H7&Tm(PGUOeQ8DNInz@BysD8oqCcq*vf1JrIcxckkjI8*O1Y-ZdwU@03na>He7Qmb|+D>4RV6Cf={g>XqX= ztQ_mUP4rqRS$KZmbjn?6jDK`vc^*48EuU@Jkhz0|Z=bO86Sv6Z(C|mKX^ed_%N*3S zWoN$Cbz2|EI=+(pGL|LuMT3K&(47WjCDs=)@A)q7Ysd)SALjIL!6Ut&pL{|u#$61u z4nSu}1`}!=+-Fu$04OLai2)IE9l!`Zk2Q3Vky_%0D$a3)*Fr`8|_; zrVv;oQW&Old^S7?#hPCL)Cjc!!TBdaedzh)#9HE-waHr%L`85s;R|jOeuZyHv?0a| z=;pjm3t5A_QBG-foqYj0Ic&Eq=y1?Tqd;gD0mr@{7|4T74?V@9I9FDHz46L{%!avI z!Wu*tpdc0Ql)aBhc5K?4$+q?(fijQVmx`wb)^r~?QmLkyJjHtPsQ)1svu2}MoV6sR zA;Kouia-XKU_su!`6xljTT7&gm%ly1Z{p;JFS-DUBRMDVD&TyBn4CGHBG>nIPv~&S zbsG7t*vvunv9Jr~0xd)3?D;ATOk;O*e*+*`;$%Q8i3RWs`0V(@o>0s2?nGsVH1_+g zuKN1>_}{Gi`44SvNq7{nUt%k^RI-}8>wq|r!_bbNoC=dd+kbI~f#~#cRdQi+?vX-H z5i&A9eEc|wdVsKHbI{Q^&jhT?%(Q6hxmQ2rfJtdTGNdaG;1kC+0G5yzuVziR9VdxA zLQw)N%ud9AsKrbpc?YGXk>tH8s|wbmjyjv6^(x9-)h~Lir@bl@d##HC@~z}(ChB7y*x+2 zs!4E5NGMllh~z#IQ7;KwCjO@}Qr%x3+`ZfGFUbCH6X2c1=dSZu#Wr#r%p_^-V6AAd zGXY=$hI0!p*NOZBjlZHw5bh1gzH z*1TFFSJ=du$+&##l=~IEd#K?SP=I3Ko>+QDg<0e3-+o0jr&_1`nCPf!H!GZ}>+3&# znfs30%#rh7lz!XwHH3UA*L-q#qpSF$Rhn8)xM-8&QeYAKHsyla|ez6|T<2OroHmFuHgKn;>Fh*pSIj z0CB+JOt#;orTfdn|95CZJ0#AAzS#E0xKvAJvg_H@&qJw(KlIMssE>O-8{ysI|FxD$ zL(k6gz?Xn?9{z8CWZ8;OzCVNRBJYa}ulfT4L$-;1c4gM~TnjF-_S(f8oA=3d#zwu0 zz3>0=llWe>uy^Hm(voA{>$5hTP@diFZNYbI>d@q-XP$?D442;Dw_mg~!f9{ucivBeX&4$57tJuK`Q!SDKoGOZOk^f8fV6)rp>ZYr!3kXF4 zLKAbcW${1~=`De~0Gc7V3xi+&T#Z$QdCi0AB^SpnBdyK1#&N+dXT7Y>`op?2+>LVT zOYozhAYee7V2$j>3{6z3fNfWuwX&)O1Wp2bFn7H@_!9RoL24nAgk#(ATLK;TNdc<4 zmno^Kt6iU8cf?&0A!5E7=1C$>KxaWb>Ufvkx4s4Krb!`zv8d35ih@fV8Y@O35eM^i znY#e$2v{5%(eFB8$y~)>LgXP10l5~zMLyd5xVY}XY>7P=jX0?D(;a5uA_g#i1+X7I z z$D5x8Cq4R$<6X#5y+O@c<=S2~hI}38ah}KnJU2dnxO60j-b_s7BC3#4L0LQ3A#2qTB4=t^p8T2-Er;suyMT-^OQ78aW;~9Fjv?EF2M#Fl zg*rh00eA`Wz{a-Az#-9BtEws%Do?;W5`EY)5QJ34Y+n&BFpyy+Hw4aLvL_QY41*@_ zLYT=S5Tpq`v?9|$j}SZrM1@>ntuZB0C91n?!R!RX~uq z@AHTF`1xVr)*lq5^LdRl)TXAB=q&?bl!RKv`ODMn>>{_t11MYl#BUF|8uxbF4~Lc~ z4jjLd%{}#J@}c9(Z9iixqn>jT-dSIh7D9h7P@?bz0%}=8TnORSunB0;wlF`R6OSng z?FQU4^!4+{L`6DqWh@Bhfi#WxeTxr6Sjcwa_cvDVqCi~z(Xt05Ec`Bww-(WYzy-wS zKG(M%4J`4Lk=2f>a9Rka-g!2soa0~7sRyH=68v1}Cq9q{IIKBlG z7T~gEjL>;@S{g~l&S-IPzwy8fjws$t1Lja`I)8Y0=iQKHh1oeN9X&KHe*APb7n6 zY;qmvLzO+wZ`AWg%Xl?U)-{&uG-tAJ={_=Gm^Ffb?61-6r!GfP+TFkZ&|L`4P`G;} z>co{;9fL}-YuO8J$+r)yfAVq3Tl!$ne%;7F&~MnfmXk)YkAUwsANrG)VdnMY-p`4d z(iO1m&(Km6H;De6zd$fa)BtcTfvH_{@!~Iw2Y>LTf+z|=pC}5^?3S4*R7ninRuCLK zdGaI|4m6yh5v*!nznPUcZ2e)f*8qJy7Y~oc*|SyP!!S|p*uo)m4tn>Zl9I&i>}cyI z4cX-yvU3ox2*=Mb=ne1o7@T{eC_u(77`6lWh8o-0+1S* z`6uzhk>BspJ}_!IOYf3t?6cjdud$&aQ7cL5j*pK$HuWMgDkN>0$k@lPCsCER-n(Lc0eBmmW)XrjwvFdx)vH$tonr|S5cy+UMJ#e| zAL1MiU5tbH3_s2sRhdXO#{w^q<{Z@7s(9cP7=gb>nT9N;kWHolHvE|c(NiyIjjaO>t67brXvr0Jox zUt48x%tY~DyZj>Rc$)*$=?AwISoGB0v%k=;kz_-8?PRoHmC^sY^e5fp*i5EtPZzFr zyR)k|L=+tO=)We&y(zQpo?QDE&E|MM(GeAeGQZ(>pLUfwNbC0wdYC&+@kF}2Hx@sh z+AjVy|9WQ2{rKdx8tatY?7rru&o26&kFjXnjGmtU7`j*4h3{_GJLrIAq`XF9AjmGV zPcVQC*}_XjmcFA_!1rVNJ5Lg76*vh|1tvmRm(qxy1#JW-o7XszdHMPM_-?`U6)6W( zplu;d1Ip20MQX@7Cl1jJsqRqll;@&Q)*yx18@C58a4rc6iP;-i1ByNY;@?Bl9d%kW=k`mhtu4I_ zx4YiAb-X!g$!Idltr+Ys6A-fOS+CWPw5jLDd&?Nh!9So+TTcSBp`1xW!|Keml_tdm#@rpE7Hfe{0UTvwW)2VD zoKc@VcrJIU&m5E1N}{uSddm~%>Gc-zsXEF*jOA#A#m+bFfOo4Ilhq{m0tTD6Q2$B0 zFG-;>3c=ubhm)~lUH_^n4{s!sq5TvvtB6J~+4{`%FeE+W)6?8gHbO!!hGmn%n|0{# z$bZCu1;nE0YTs(G=ikvW)VG}}ylhJ7P5ezMr}5oH9!rIW9|Tbvm%NZ3`V`V&7#kaZ z%%OO^;W9|qTm=#X%U1~u!l2T9G!xBnlI#2gL@W}`zW@Uet*Ml}upZWYk?sf8y=l?~ zjK}1X>4_8TagmcIA44z+_QF+-e`!4^AfeMm1TFuMc+pBd8PQ+%z;(NyqrXTfZ^-~H zb)U&TJ}OtAFHb&NU4M6qiuHb3!|Q_|I(K&PC`P{0=+GA(|EXH7bB4*}2wUU9L4{u| zR9r*JYaZPk*2?3iq&ToFatgP7y2Vt=Db!M*yUw^FbFSRI#!UF~DoumReB~8Vb-b{g z8SNYRp*Lvlq_F9%VkTI5h4K_P8g`p+h5`p-i-}k6vPKj?uA2%rpRV15Ct z7Q{FU;UurgOM&sxJ!Zh0k(6Xkmh}cxFguWUiqG!C$GI}g>^nJefb`M7)ElhoHE|f4 zUUSGSdQ$N%MJ&@;;NoD7aa2$W-#n!dXtxfTke~&IykzpZ3Ks*~lv)J4DNL9h69NTd zP0lXL0d`y0f#e`7EiieLa2R-$^?t7~-_ibwj+NXD02VNrOg=|~`zknmaJn?`dMolk zi&fRskksB-S&uWP_k_DtR8$a`86+Z*aY;cVrJ}A*-L2Pk0dyXodD!489m`O=kYiiR z;*jwI2^n}O=CRTpJelHXkOv_vI||Vl;6@{;a9U;zkRo!tpp5|z7v?lUxni+3b+;=E zwz>0%?+r)C)8}%UW`FC+-zT5asQSgX)y@-WCL}t*!uPnIwit)QQa}5L`PS70NJlRe zX2oaEzlRmK)P zRY17~&44?16DPMaf^xTM4-)*bvMY>?~G!K3ye_as3V#w@rC0Dse|O_ybnj$)UO2F-N<8d0*b;_%@`GiEV5%6Gg+6lG$_UYH%z!1!Bq?fYhw_4lT_ z2eBIph^QfsR7K1RegY4Q#QArsV~b6R;D+9#*pP@YbSG9Yg#@rl2Sc~q3+*4Ca)_2h zun4XG;LMmJ5y!ZWC5Gqto)+r%*-#x$Pe-Ndx%1GFwDrM0 zE%l}5=Bi2GEn>BWFLwU4{do}p^4Z?@P%i7VR-kuiPAA3o21)BL|GjWH>cSx&Zno5a z++DRn3WgCfauWbR?NYb|*gNbLx}(dNf|K?8YhjLI4#&1_-uQ6fr%9Cep_nM|qH*nixfzgz5nMO&)LKTv-+(}l|+Ee;jt71pSI^x&_5QvniJ%v4Bp>Lxr1K(KF+$`L41eL=IWC(8Vc&XRI zHxPeCYAs~dZ(wwRGgSm(>IALD?LiiQ;R;w450>s^?2!nPNr|9%)G36KTH`W?;1H}u z9eQWoYR9SRhPQ8D;XcP~gkKG_PKd;8iSr|`q5>Sp5mkL6KvG2HEIN6F4O|5t)4$o2 z{*FbmcIzq{YMtX9A*Szmdf9G;&(Cgg5Z@C3T=cD0{S!wD)rrI$(Kng0>J5?M*VE0o z)FW%d-dKO$adW2?_lBqHKN%j4-!b{yH6H(T|3%-R7Y zYz5*hvRoYZ3}N$zhZQO8`ifYgXl1pTLxv<-+(&!_o=-BS7H=W;`6Bn_LzsHOQRhNs z2YDX6!zlpWQB4vvGmQuHXywftg1_e;807lO9;f(hZpl>Q)7_rD=Rw;-Up$}{EeS3} zbB8jOfm5Y&k4!i;@_Pt}fZ6{^WTZC47R2|y$nK7sy>Zup08nVyX8izhY*e5U%@GR# z4lEeR5!j{}Yx1x#FS@xtI4Ab`*2Ci{6a)Z-qZSe(4EHBSJ2W|iL`e9?5vM8)Ga$Wc z5l9Fj%a}TRd9cotJ)=rJFb^EfT!)mroE!*k3*GVI$cL4%4w{{(m z<5$Z&`1H+^i>$Uv)+LpD3o3)O)Nf*Y&f1TgGvsUM3YmC!PARyWQMXm6GZj2tFgH>P zG28y{JLCNWK80rE#&hUXom^bZTb;AXq~@A3B;L{K%f^h7Y6cYUPw2%QtZUSl`8<*obHe`U>)wQ5EKyP9nGrF?7|CrW@kd zfIFh5MoGlH-;4S>lwssj1V-YKEFeB4q}J0J?jkBDA$fka8lW910xq3{;b@9;EB zp-dxzrHSmWfiNA_vawAln8K}*pm`MwYcbg!$I(@}Hz|j^nc((hvcAq+y^jHPa}T4h z*eS{1BiebQS@NeGL>jiR>1{HO`dBMGx^+gTQY^XT=zAtp)k7awZ%}nih z-K^6Szq4_tw3hmt=k!V2{yQj#2$cy18SwDaoD?{Fg6Q| zZ}a}z^#`beWUmM=v0#QS;PpU)H_A z`3Cw%$76hRsBHO2&=T_<`S|Q?MEJfxL2tR(tP+(O9oC2c5J%p;Z{OR$WO@8{2-=vW0Dv+-L%IEl`&)@4fy zVg1QwZ`7}itWuBA?vS-Wsi$IS%N9#cMIG3L*GCo-pii%m1}O!}2SFI{0vTroL-?SI zZHklS0OtfkB?EGJ2qGcDl`M9{NJ1tcfPN&{r-v1gX(GA|u-YY3$C+uXy1L3ga#8xa zynKMy(K9e;wnxy&SDI zWLzer0Rb0>Z};i>bz(~7Vne{8a*@^+{yv(2J16Py^d}}HXjyc;M?;Pli||005)n+E z&fu>|UvcMj!rA6FIsvz3Nd@2VwLLH*ro~|! zinv0qWcyv!Czh^ERANc6Vg*b8HDD|&m>s@V?&INU#U+h%cQ+%$kn7CO`_xp5ygYk- zS&O&psr+?~_!{vk%|}b{|5REHDH4JPkJB=8TJ%0Cq(0iKSFfeTSA0+`Q*TqykBfqvo>%+lD8HV6jbIi z?FStZAY?RY&=Tvw!HVhz_)Bmirdfv`xGVu~!5IG?e7g;^3@j*sK1f&zPKn=l$f}^m_VV%~{|xLbz?gy{jFL|{W@^fY`5w&%So_WR9+Cm6 z$K4PtK1~7^LAR6Z2=Z~%8mNws3x#7np$~2?Gzw|pnQ#@{1-uxqtMEM%@<<2d1Fv4a z+G%MHBfBVU=1dv7k&A9Q(9uA}@CspyXhaxQSQYofCWfDirD%{SOG2uEn?E5V!xxPQ zehgV@34)G!VLcyS2PRJPIxvJZ&+a;=qq7ZgU#3CMDadI^W=X|lJ*^tNc6;{hL8C;@ z3C=0vQ=rR*)DeLr*fDta!Ua`4f9YnGGEh3<7q+V$86R~V111WBa{?cYwzf6|Kah9A zS+9mPIb^KR!eOvKnClzvU0AXA?%sVHn31b2#e>q_fqYRWL1XMi-y4_=d{h~UNaE1G zlZF;~l6dB!E%nE@Ivl36{SFos2?pBA9WD-~pZR=^mtSSag6VoxO5vByx#T$;e_G$r zz$qZG5n^n-F(HPxWo&1X$<98B&js%u^5m<4lU?bkdb>KN5lsQu za0ftLBJ4}+LN9}-*k3hy3?y?6y3r3UExQq|fP@7+aU05Ry_5zxe0L*DHNGG+#-ZJS z6^WEw$cr#2kp7;#r0NXs6MP%rDBb8tU``NzWh3)Du9z6t&_FPQ{?Sct&iAR_Bh$_t z6jt}*uZw-u4D+x^)@8FV5ub#^eqH!a_|V1oCHKcGb0ViPJpS-PN!{tdTgTGqCZAZg zZ!sD8!V#BEuhL)>|Fv?@ml??q+WKiJ_I6=Mk0?>AAOG|R}?)Bk^z~T3%A} z#jydRKZVW^O_dqznzBXu5{x;jP6kP-R?obVCnHpj$$dPx^H9FnI9hKlB_mH8sV7#nKCYI2Y?` zY6c5(gde}1L+ExV;(37i?>T(9w91knc|@?U2NV=s3lctw$-ffSg$@V};miNi7BqCp z?V(BWT}{1yZ_fBvZ&~H=^AKiWuDN>Uhr&R952MBPe-BSjFE+A+g?5PZ#fadI4$R{6 zfkJV zH)Q0*yU)kBbc9YE78n*;ch|fgGussGR>EfqoU0EvoH+>p=g6Q#A+1JNL6wdM3}@^-2HVq+ z-Zotb>o&s}6&toXmG!gK0<9{K>6!-emf9 z{>fK2#VLP(^XaU1w6HVuK54W$?aRu7QJzzI(Yq%m>`S^&B}G|Oj<{}9KdHnZ_~3$Q z;Teyn8+2j1>Y?W~zvuj2(tH)!CcNf;lk}v5?BB1}^3%rm3`HqE;iTp9Yq2SB z%o8)-lqd5Zi8^F?#dxe>)UM{;gFC5ZyTzs@w+WW^TYUbLWSQ*1QW|&0qBd#UxrTfj zEA4RW4ErOe9`rdZ*6MyZu#j!IqJl92<`m=)yu!?bVd@?8yF$zrz$_NJUjmiSJ@=LY z;S+SxpnGtrpwl5Mty(%dD1(1#eO5z*Oa3n4ItNE{k7qy%+n{9k_=EM&&T)K3;QIQ zr>m-}nk!^(Bl(Wt_|VsxNj${D<;D7Q`NGCjJT%;Ytduw}<2qrQ{Za5;Q{LBI&n`l% zP&iWY`EFx+)lyd5&01O-s)shp(N}0=KMY#G4NxheqJhvKLUWD#ueYx+=t@WNxIL&C z5>Eu_+R&(bSmO|CIXg86R^-YJYnM3!P^7DxQd$OuHseC@jlT=k^c1-nVm z&5w4Wd?+A96#%T%5;{1Tz-%xUUcLn#0=U36IC)R zu{wVqusuDD%0AGc0#bU{hRw)3q#d}RA|*_;%XIgUK42V-=Ywbsg+0^#mD>4w+zK`f zqbzM@U|3y+im9efeVZbQhyf@WwF5rT#HoJdd7YJM%^`v=7$fIH%CvaJYP$D|ElX0d z>sT0V$tF$p3`(l7zRakHPGSmFdJ9Xoa`fhPhN2XR}VMd`=wOU<69$twl7EbfG4 z5M!(m8Tdb@PzMDE%j2{_^Y)v0A0~&WPLQQT(gVXf$WBB|-ZpT`I)iU1)w(T)SWl0b zqjUHYpdViEw6Y|PG0_SlT59&k2$4YrM-csdKg70h(h`l@wHa+W64%+^ubuwZ<2E#7 zkhP(|+C(HIgMYyY)PDLj;~z{JA6@f?Sf-ns`Dt)XVQ#~pdPiQ6sn0zy#^fjTHta!d zrsfW&$lKmr7_uudjh+S44_(IRE(->_pIa7q9#hcD{*Rz07<@0^rGGOA{ePwcvJ@S{ zhu63df%GEFVhDI&P*_+U9;&zXyero6DKX%faaAG62yqSM<3oS6>MVqaWIDiug)@wM zsRq_6ysCT{88MM{qBal-V$2l~iSVEj#mnDI2~;?DwRpJ6u!DV0#0>!)2Z7>IU(39{K+7Y5iT7_)?M1;qJBY9>xAiN304^~vfgRmq5Jpg>)Wz3dJ9em)+?&><) z)0~aaCJ^~2pwESe8i)9{W4l{r%3$UA^j8F@AORK#(6}&QEzXY#u4^`aydkyIEe5!7 zXVjqx1P(-W#Fd6-bL`M}-b->wd;zD|mdyY_o$KkC;K zGF$h0WM;?v3lHtv{UpTmd$k&_S%^JG!xWb~G!eH+HzYQ>W@2($l4zKz?$Lf)Tj{KH zw%<}I%F!ZFkMgid^D2gm6uh%|zE;8T62ag;w zvMieJM)!Z-hboXavbNEfx`5olNtLHLFmFuKrT_t=BuB`{6vl5kN6seXX`pC*T$V#Z zw&N>%je1FYqg$9n9YR4qrQ*+u{`yW<*2U2%O7-~uEsYQk)kDxmH@!fG#B}mC`y5K! zy%df(I&|G6UbnH)9}3Ox3OAEh^9}L|k5yAp)v)tR7v0%0AXqyP&je0j7$=sSt=n3q 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%0D`#`1zo}V;rFG5 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 I=Ns<-Kix0)RsaA1 diff --git a/docs/images/raredisease_metromap_light.svg b/docs/images/raredisease_metromap_light.svg index d76b822c..23c45049 100644 --- a/docs/images/raredisease_metromap_light.svg +++ b/docs/images/raredisease_metromap_light.svg @@ -2,15 +2,15 @@ sentieon-bwasentieon-dedupmarkduplicatesbwamem2alignment to mitochondriaalignment to mitochondria (bwamem2/bwamem2/ sentieon-bwa)sentieon/bwamarkduplicatesmarkduplicatesmutect2mutect2markduplicatesmutect2alignment to shifted mitochondria (bwamem2/ sentieon-bwa)alignment to shifted mitochondriasentieon-dnascopesentieon-dnascopesentieon-dnamodelapplysentieon-dnamodelapplydeepvariantdeepvariantglnexusglnexusbcftools - rohbcftools - rohstrangerstrangerupdupdvcfannovcfannocaddcaddvepvepgenmodgenmodcaddcaddvepvephmtnotehmtnotegenmodgenmodmanta + tiddit + cnvnatormanta + + +tiddit + + +cnvnatorvepvepsvdb-querysvdb-querygenmodgermlinecnvcallermanta + tiddit + cnvnator + germlinecnvcallergenmodexpansionhunterexpansionhuntermultiqcmultiqcpicardtools+mosdepthvcfannofastqfastqreferencesvcfannoeklipseeklipsedefault path traversed by the pipelineusers can configure the pipeline to traverse this path instead of the defaultdefault path alternative pathskippable pathssentieon-bwasentieon-dedupmarkduplicatesbwamem2bwausers have the option to not run these toolsfastqfastqreferences + style="fill:none;stroke:#24b064;stroke-width:4.36;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 183.85438,241.09504 H 104.07885" + id="path2500-6-0-8-3" />manta diff --git a/docs/output.md b/docs/output.md index 02258209..a0053784 100644 --- a/docs/output.md +++ b/docs/output.md @@ -89,7 +89,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Sentieon bwa mem -[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to sentieon. +[Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to "sentieon". #### Duplicate marking @@ -304,7 +304,7 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. #### SVDB merge -[SVDB merge](https://github.com/J35P312/SVDB#merge) is used to merge the variant calls from GATK's GermlineCNVCaller (only if skip_germlinecnvcaller is set to false), 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_germlinecnvcaller` is set to false), Manta, and TIDDIT. Output files are published in the output folder.

Output files @@ -352,7 +352,7 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. [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. :::note -In the case of running a quattro, i.e. two affected children and their parents, only one of the probands will be used for annotating regions of homozygosity. This is a know limitation that we are hoping to solve in a future release. +In the case of running a quattro, i.e. two affected children and their parents, only one of the probands will be used for annotating regions of homozygosity. This is a known limitation that we are hoping to solve in a future release. ::: #### vcfanno @@ -518,7 +518,7 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files #### GENMOD -[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf:s with single or multiple families of arbitrary size. Each variant will be assigned a predicted pathogenicity score. The score will be given both as a raw score and a normalized score with values between 0 and 1. The tags in the INFO field are `RankScore` and `RankScoreNormalized`. The score can be configured to fit your annotations and preferences by modifying the score config file. +[GENMOD](https://github.com/Clinical-Genomics/genmod) is a simple to use command line tool for annotating and analyzing genomic variations in the VCF file format. GENMOD can annotate genetic patterns of inheritance in vcf files with single or multiple families of arbitrary size. Each variant will be assigned a predicted pathogenicity score. The score will be given both as a raw score and a normalized score with values between 0 and 1. The tags in the INFO field are `RankScore` and `RankScoreNormalized`. The score can be configured to fit your annotations and preferences by modifying the score config file.
Output files @@ -556,7 +556,7 @@ Mobile elements are identified from the bam file using [RetroSeq](https://github #### Annotating mobile elements -The mobile elements are annotated with allele frequencies and allele counts using SVDB. These annotation files needed are preferably produced from a representative population. Further annoation is done using VEP and the resulting VCF is filtered using bcftools. The default filter is to only keep elements with `PASS` in the filter column but if no other post-processing is done we reccomend supplementing with an exclude expression based on population allele frequencies. The filtering key is dependent on the annotation files used but an example expression could look like this: `--exclude 'INFO/swegen_sva_FRQ > 0.1'`. If a list of HGNC id:s have been supplied with the option `--vep_filters`, variants matching those id:s will be presented in a seperate file using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html). This option can be disabled using the flag `--skip_vep_filter`. A VCF corresponding to the complete set of variants will also be produced. +The mobile elements are annotated with allele frequencies and allele counts using SVDB. These annotation files needed are preferably produced from a representative population. Further annoation is done using VEP and the resulting VCF is filtered using bcftools. The default filter is to only keep elements with `PASS` in the filter column but if no other post-processing is done we reccomend supplementing with an exclude expression based on population allele frequencies. The filtering key is dependent on the annotation files used but an example expression could look like this: `--exclude 'INFO/swegen_sva_FRQ > 0.1'`. If a list of HGNC id's have been supplied with the option `--vep_filters`, variants matching those id's will be presented in a seperate file using [filter_vep from VEP](https://www.ensembl.org/info/docs/tools/vep/script/vep_filter.html). This option can be disabled using the flag `--skip_vep_filter`. A VCF corresponding to the complete set of variants will also be produced.
Output files diff --git a/docs/usage.md b/docs/usage.md index 878fe121..b419b28a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -79,7 +79,9 @@ work # Directory containing the Nextflow working files Test profile runs the pipeline with a case containing three samples, but if you would like to test the pipeline with one sample, use `-profile test_one_sample,`. -> Note that the default cpu and memory configurations used in raredisease are written keeping the test profile (&dataset, which is tiny) in mind. You should override these values in configs to get it to work on larger datasets. Check the section `custom-configuration` below to know more about how to configure resources for your platform. +:::note +The default cpu and memory configurations used in raredisease are written keeping the test profile (&dataset, which is tiny) in mind. You should override these values in configs to get it to work on larger datasets. Check the section `custom-configuration` below to know more about how to configure resources for your platform. +::: ### Updating the pipeline @@ -146,7 +148,7 @@ nf-core/raredisease consists of several tools used for various purposes. For con 8. SV annotation & ranking (SVDB query, ensembl VEP, GENMOD) 9. Mitochondrial annotation -> We have only listed the groups that require at least one input from the user. For example, the pipeline also runs SMNCopyNumberCaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check the [README](../README.md). +> We have only listed the groups that require at least one input from the user. For example, the pipeline also runs SMNCopyNumberCaller, but it does not require any input other than the bam files passed by the pipeline. Hence, it is not mentioned in the list above. To know more about the tools used in the pipeline check the [README](https://nf-co.re/raredisease). The mandatory and optional parameters for each category are tabulated below. @@ -165,7 +167,7 @@ The mandatory and optional parameters for each category are tabulated below. 1Default value is bwamem2. Other alternatives are bwa and sentieon (requires valid Sentieon license ).
2Analysis set reference genome in fasta format, first 25 contigs need to be chromosome 1-22, X, Y and the mitochondria.
-3f If mito_name is provided, mt_fasta can be generated by the pipeline.
+3If mito_name is provided, mt_fasta can be generated by the pipeline.
4fasta_fai, bwa and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
5Used only by Sentieon.
6Default value is 40. Used only by fastp.
@@ -248,7 +250,9 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl 10Path 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.
11A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
-> 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>") +:::note +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) (download files listed under the description: "All possible SNVs of GRCh3<7/8>/hg3<7/8>") +::: ##### 8. SV annotation & Ranking @@ -408,8 +412,6 @@ Several generic profiles are bundled with the pipeline which instruct the pipeli We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. ::: -{%- if nf_core_configs %} - The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). {% else %} {% endif %} diff --git a/lib/CustomFunctions.groovy b/lib/CustomFunctions.groovy new file mode 100644 index 00000000..ddb27b30 --- /dev/null +++ b/lib/CustomFunctions.groovy @@ -0,0 +1,85 @@ +Class CustomFunctions { + + // Function to generate a pedigree file + def makePed(samples) { + + def case_name = samples[0].case_id + def outfile = file("${params.outdir}/pipeline_info/${case_name}" + '.ped') + outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') + def samples_list = [] + for(int i = 0; i meta} - ch_pedfile = ch_samples.toList().map { makePed(it) } + ch_pedfile = ch_samples.toList().map { CustomFunctions.makePed(it) } ch_case_info = ch_samples.toList().map { create_case_channel(it) } // Initialize file channels for PREPARE_REFERENCES subworkflow @@ -315,7 +315,7 @@ workflow RAREDISEASE { // Read and store hgnc ids in a channel ch_vep_filters_scout_fmt - .map { it -> parseHgncIds(it.text) } + .map { it -> CustomFunctions.parseHgncIds(it.text) } .mix (ch_vep_filters_std_fmt) .toList() .set {ch_hgnc_ids} @@ -719,71 +719,6 @@ workflow RAREDISEASE { versions = ch_versions // channel: [ path(versions.yml) ] } -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -def makePed(samples) { - - def case_name = samples[0].case_id - def outfile = file("${params.outdir}/pipeline_info/${case_name}" + '.ped') - outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') - def samples_list = [] - for(int i = 0; i Date: Thu, 7 Mar 2024 12:41:13 +0100 Subject: [PATCH 1664/1921] schema update --- assets/schema_input.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index c253ac64..7bcd1812 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -42,14 +42,12 @@ "sex": { "type": "integer", "meta": ["sex"], - "pattern": "^\\S+$", "enum": [0, 1, 2], "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { "type": "integer", "meta": ["phenotype"], - "pattern": "^\\S+$", "enum": [0, 1, 2], "errorMessage": "Phenotype must be provided and cannot contain spaces" }, From f06a9ac5d301a8f4972831901b90b948b0fb2981 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Mar 2024 13:13:22 +0100 Subject: [PATCH 1665/1921] fix typo --- lib/CustomFunctions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/CustomFunctions.groovy b/lib/CustomFunctions.groovy index ddb27b30..a3a360a3 100644 --- a/lib/CustomFunctions.groovy +++ b/lib/CustomFunctions.groovy @@ -1,4 +1,4 @@ -Class CustomFunctions { +class CustomFunctions { // Function to generate a pedigree file def makePed(samples) { @@ -62,7 +62,7 @@ Class CustomFunctions { } // This function groups calls with same meta for postprocessing. - def reduce_input (List gcnvoutput) { + def reduce_input(List gcnvoutput) { def dictionary = [:] def reducedList = [] for (int i = 0; i Date: Thu, 7 Mar 2024 15:15:05 +0100 Subject: [PATCH 1666/1921] update customfunctions --- lib/CustomFunctions.groovy | 35 +++++-------------- .../call_sv_germlinecnvcaller.nf | 21 +++++++++++ workflows/raredisease.nf | 4 +-- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/lib/CustomFunctions.groovy b/lib/CustomFunctions.groovy index a3a360a3..9ed0a9c0 100644 --- a/lib/CustomFunctions.groovy +++ b/lib/CustomFunctions.groovy @@ -1,14 +1,16 @@ +import nextflow.Nextflow + class CustomFunctions { // Function to generate a pedigree file - def makePed(samples) { + public static File makePed(samples, outdir) { def case_name = samples[0].case_id - def outfile = file("${params.outdir}/pipeline_info/${case_name}" + '.ped') + def outfile = new File(outdir +"/pipeline_info/${case_name}" + '.ped') outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') def samples_list = [] for(int i = 0; i meta} - ch_pedfile = ch_samples.toList().map { CustomFunctions.makePed(it) } - ch_case_info = ch_samples.toList().map { create_case_channel(it) } + ch_pedfile = ch_samples.toList().map { CustomFunctions.makePed(it, params.outdir) } + ch_case_info = ch_samples.toList().map { CustomFunctions.createCaseChannel(it) } // Initialize file channels for PREPARE_REFERENCES subworkflow ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() From 51b4c52ac09540b62983ac261d148c85f0334dbe Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:38:18 +0100 Subject: [PATCH 1667/1921] update changelog --- CHANGELOG.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ffa9fa4..e61d9268 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,6 +70,55 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed wrong process names when outputting versions in `ALIGN_SENTIEON` and `CALL_SNV`. - Fixed gens subworkflow [#515](https://github.com/nf-core/raredisease/pull/515) +### Parameters + +| Old parameter | New parameter | +| --------------------- | ------------------------------------- | +| | `--cnvnator_binsize` | +| | `--gens_pon_female` | +| | `--gens_pon_male` | +| | `--min_trimmed_length` | +| | `--mobile_element_references` | +| | `--mobile_element_svdb_annotations` | +| | `--mt_subsample_rd` | +| | `--mt_subsample_seed` | +| | `--ngsbits_samplegender_method` | +| | `--rtg_truthvcfs` | +| | `--run_rtgvcfeval` | +| | `--sample_id_map` | +| | `--score_config_mt` | +| | `--sdf` | +| `--pcr_amplification` | `--sentieon_dnascope_pcr_indel_model` | +| | `--skip_eklipse` | +| | `--skip_fastqc` | +| | `--skip_fastp` | +| | `--skip_gens` | +| | `--skip_germlinecnvcaller` | +| | `--skip_haplocheck` | +| | `--skip_me_annotation` | +| | `--skip_mt_annotation` | +| | `--skip_mt_subsample` | +| | `--skip_peddy` | +| | `--skip_qualimap` | +| | `--skip_vcf2cytosure` | +| | `--skip_vep_filter` | +| | `--svdb_query_bedpedbs` | +| | `--variant_consequences_snv` | +| | `--variant_consequences_sv` | +| | `--vcf2cytosure_blacklist` | +| | `--vep_plugin_files` | +| | `--vep_filters_scout_fmt` | +| `--gens_pon` | | +| `--gens_switch` | | +| `--skip_cnv_calling` | | +| `--skip_mt_analysis` | | + +:::note +Parameter has been updated if both old and new parameter information is present. +Parameter has been added if just the new parameter information is present. +Parameter has been removed if new parameter information isn't present. +::: + ## v1.1.1 - Abu (Patch) [2023-07-26] ### `Fixed` From 9f1d5bf5042aa2a4b1bfa703b1a178bd08c0f6dc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Mar 2024 15:52:01 +0100 Subject: [PATCH 1668/1921] update config --- 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 fc849226..5301f96b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,7 +26,7 @@ params { // analysis params skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI - skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_germlinecnvcaller = true skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 9ca23f70..404fe607 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -26,7 +26,7 @@ params { // analysis params skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI - skip_germlinecnvcaller = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI + skip_germlinecnvcaller = true skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI From 43d307644a241f4d1e042916d1ecdd9643aa5534 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Mar 2024 16:27:48 +0100 Subject: [PATCH 1669/1921] fix errors --- nextflow_schema.json | 3 ++- workflows/raredisease.nf | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index b7b3f725..6e2fbc81 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -115,7 +115,8 @@ "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" + "default": "GRCh38", + "enum": ["GRCh37", "GRCh38"] }, "gens_gnomad_pos": { "type": "string", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 001a660f..dbc1fcb6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -160,7 +160,7 @@ workflow RAREDISEASE { ch_multiqc_files = Channel.empty() ch_samples = ch_samplesheet.map { meta, fastqs -> meta} - ch_pedfile = ch_samples.toList().map { CustomFunctions.makePed(it, params.outdir) } + ch_pedfile = ch_samples.toList().map { file(CustomFunctions.makePed(it, params.outdir)) } ch_case_info = ch_samples.toList().map { CustomFunctions.createCaseChannel(it) } // Initialize file channels for PREPARE_REFERENCES subworkflow From 48e8cf0424ec728f7df669c967dcd99570481b1a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 7 Mar 2024 16:56:57 +0100 Subject: [PATCH 1670/1921] update maps --- docs/images/raredisease_metromap_dark.pdf | Bin 198727 -> 199627 bytes docs/images/raredisease_metromap_dark.png | Bin 403312 -> 429743 bytes docs/images/raredisease_metromap_dark.svg | 314 +++++++++++++-------- docs/images/raredisease_metromap_light.pdf | Bin 129860 -> 130756 bytes docs/images/raredisease_metromap_light.png | Bin 395562 -> 420122 bytes docs/images/raredisease_metromap_light.svg | 190 +++++++++---- 6 files changed, 338 insertions(+), 166 deletions(-) diff --git a/docs/images/raredisease_metromap_dark.pdf b/docs/images/raredisease_metromap_dark.pdf index 2f603e0c3d873e1c880cf4e7fa32ff8eac484bea..2a13f7e930aca33b4219195ef8ac189f13cdcca7 100644 GIT binary patch delta 13612 zcmV+{HPgz+kPOS043JQN97%HKJ%2?V*^;3;-jD0puE|VhI*hi>_RyvSCJ8h-lK|Ny zx;6Xn*FSfUM`jg3u;(U>+BB^A5b5FJ@pKOl4|_87-;JgJvC*4zHYFu{S|65Q7jw43 z+MG`2oT{-EKYVpI=F@-v+v&$!bNc1$V(r=c5{p0m_hL@}PXGUZ*X8H`qMYXRehH`l zIQ@FET!#EF5iTyDWAG=CJ|`DX52xhg+04*(`ah>XFF&6K_5O=!6Xgr4*4cbcF@Z)t zXCH`c@$Q^m9*~eV=MYUT#A6KAIHEz-vHo15DK=3(I{z1?1mdq$dnzWKO-fWoH1Ql` z?Z|eDww{ZL9f{t5pR={6oT%Q;pQ!HVT;g)dE}Ti0>nX-?PNkeuE@vN#vU#QOe731j z_IwVMT?#KTc7zId)M}=7B>HeRB!XBe?TDEW=^_6SZnejE0?5;Bt&n^ZjCT7Tme`b<>$2R&&?cm*jtVz`Cs2_lxTGK*E zDQD^|r<&~96&eQAb*N()Pb~UEnOyHeFAa@Kz0SB2u5nBK)Y3QhM1Mb1zaeIw&(!P< zAWmJR?pIQOL##`VdQLvMObk;ET(;-v>vD1_oIT|rK8fA4tN!GoBcXfc6GAkZO1sVp z2`SSj)M0&$jTKa@LCOphR*1OqEH>vzBE~J?$DMtSCr6D&d^L6~wU-N(`>eL3JDW)3 zyIkjodKLa=eZk0am>7smtYJV(=Y;>h{Bru!PYd;bDI0A_m1Z$CLd5vo{p=Y$$&EM; zC(Lw-1`qZ2pB|PU?{CZv82Rab`T5<~yT_-Gcb^__{_@{HSo7}ohyVKN-xnI6!BLCc zkZ_Zs9{bb#W#oK+_x`ufKm7F9g+$~GM)D2G%n-j}{?-5L9S_?=ZJBAD7MgjfuM#Kk z9&W#X{EcXBAJ^NbyRRVmzkm8hXSD*hY{OOg66^`VaR*|j%E|MlGL8fYHL zndgX-JkhMxaKko48^%%r30?A~S=7cv9g{>7FaoJ#gT-*B9}SqBSq2o%8y<7Br8VY~ zpvSaF>qbbJTX|FssGNvJjGZf*WNiuulB+JdNW{W?!p?zWQ*jt~?{LENDo)aar7tUUQ`vm#kTNwv!~) z#S|oHrL0<6Bx#jsDdG?-KMg7Y7No=UEhmKTs>#N9`>@qa2}^R}>{{~3k*CimmbuD* z`#S8K{(oNmUTV%t%VP2#i$gr;h#lVq)pMl@3pp&ihH)HJodI7zlS}>Yua?a&tD?<{n55L<(GY7-=%qE;A|G z*jL)0OeHF^&U}qr<$~0)iaeCARD3^Q{8KWc;`iU!XU%(8b8Qon4ef%xoAzCq=Fc3< zVc$iBsIw=Nu5E&ox2ytMPaIlTd21w)qn(y0dEeYh{bl^L;vw@n( zX~k?o>vbeq?n$9YUyGyw@6M|rdL8pwT`5njVz?zhcrmEv=*{Xh@;_T8;KLO zkf@uzl+g6N&W9p{b0u-82?pO~?RJyWTdVxNR{h%2l}zCUuBNPJmX4rPliHPF0iwyF z61$FeOo=8TObRW%o?C$jYLmtA?t+Dyk$!x!3#DUN_r`O0?;R&4@Cy& zLgH8x$l|hgJKg@RRsMc~HG>NGFxi}LNS8J?*5l8f0TZG#!O`lKsGAd8#pFwShMF-R z?j9VQGHz(@%Qn+Qb_0_j^~Imwk8GTUZ4TGw=RjLH8b0y4CD3QjHX`(HvFv)bH@c2& zC-1QHABd+K(G*Q`CdO!guJs01xd02LQLVsHlMo@AO~F>T4tSXHioa^yf^cY8I!*fE z1noK|eGhv#4f%#Z2_*@_PMZxFfw?t^otB5Mt67X7iS^>=tjW}OuZqvpsv2Mky27uk zG%;oB(z$Y%k?o1&mHNxw=}+IYe0UNQn~B>Fq5;YAt_s^FszywIksYz+wAb+^v+W()HwH$oBaQmNE}55+C8a%ymgXYXDIM5Kt^_D; zX#Yk_WiLYjmVt7Ap~&D`N$hIDLO9fG-{fzk()W8yH`r*^#`!64FyEQv!>$!|-3YD_^ zIWiPl6B8*_0T%y2lb@|NptRlk^CPb=IBui`RF<7)L;rDqUVoTwgbGQedHQMW{A>KV zlFVbRq*|O@qTyAYaqbyIx-g3~C8`0bjh0$w{JI%`rb!y-F{zN=MC&{iKpVOsRDXNA zTc6yk?DAI^NbX&+$jMHDj!1e4X$XSg48Sqb9W+AXj!%CZ zvhh(T_8ASywBT4$aB;4NgR4v{g!O)rW3`BFW2UhcY3ISGYPCM6@uG01gdXFomJYqA zAyPVeQ$tWXn8EogtyUf5iahhR}RW6evw~a@bE+9*q_oOZW#gU?m8L?J!`EOe7k|nHrf6 zNJ;Ai(bokBRYhrg`)F3=MCH zNb4sQEk1&vX@wSJq@lK;-@+P)G`uD%jaG}%s`+0qZ&A_7f2MkMQiQ7t^p!-r#K?{% z)n(BL6!}gYQng}oO*BwTLN$bPQEBG`dmq)7RpE*$%a8O*bww#|8CghE+L35! zEo7aL*gj`h6F6LG0ZRwg!9&kd$LEI{u<8GzR{K+sH&W^QeLtYZ;ksvxqn>YQZnue- zZFDL{=wG&2f6#)CLmsHOE;F-*|IA6SYEb0TGmuWa`@W^Mgmpq3Tmc$|Q^p3NkT%`R z5P%C&CKMTLD~UrjSSA-$+joSwRP+01r<*oIT%YN@hnk7`g$n5oOTQF1|s`V8T*Kt>S11EzBTXA<-;Y)0jgc zo!Cj>A8eUR#;csXp=~grZhGU8FuvEWRzhW`LbL!}pQvMYB#5RT5_>Hscy-YjEy151 z|6S7SsnA|NWmu707N7PcdRhuu2LeqIr&dCOf70*@q|H<>MF4!#_)w(t*+?8}f_de# zcDot%tyTUdn;Yk*%`193G&Pk45cng(9s(X5(w-GI=F*R}$|A5Aux3F`XA&)~g{%`| zSp!oNyn48}j6yiwB;h(R*w*h4)#!rQRqe7Dyp@{2=u~28i4p%t%f1J2I_?lAT{sxi ze?;u~{J*l3fu+@y&ypGdFFONw+PuqT4rDrDo9jb|_y|08Dhq2*(4t0J3ak@9Jx}Af zliAlwz3eXQy4N+|wk%%kCa{>XI#7J~vF=b7KXhkkMu+V3Wmv zG~w`R2Za1OL9m3;a@Ar)!Wl0=P{a971q{PAv#LF`Hm0A zUVn)O_6I%y^n7W9e!(FGr(-kae}_-+@3z~|pSS)mu&y z-{0MR{{07M-raurc>DOoM}-kbQ^Xi<=Fm442X*h4cfV|pcYpuw>vvX-N}|cWL>jH6 z3Dk3-mMe1d_m}nl>C>m}>*?n7<zf?oI_YJ9~CE=tPfBk*EzkPiCgd8~1qW_Sg_!5d- zKU#0!>-UvpgzvF&rA4R+BftMp-`#yyDft{~@}NN5sN{=C>F$x*>9uEFv)TOT0kj{_ z9rQ#S**cVIg>~$#Z3E5@e_-}fXu~Z6N3D=LWJ4_c1GkxS#9^3-os4YAmS~i%zmv6vJu|J1?HxR$)9+ORZcF!8*bmN zdYq+RwJ%>i{Vrie4Z8HXc2hq*$fVc;Ted#5a>0Ex`Ou)1r^{ zk010!+@A&8K|J&zj0WKrBzBB!o$G2i3LQna|clsbSlf<`}Ij-4{u1DOVBQR@r^ zwk9f9u3g&(kZ>$n0yStHfnp_v_``mc?s)_b1o=p9j!>JbO%C3LB7d z3)ahZ-RLT_+n_&wP)$=CtdTg)H+)P#py+wuNPy*QGme^rW;qOBxjo+iZnH{rOx$I% zdomr+qShILi*zTl5FlHdQIrDf#7@gI>L64Ob%o-pre*PBH_0`z7K&cw1Q7*GnNet}K_hdhlIYWy72Wrd zH!O&Q*7zM-PryP}O@=|O7C7O$Be_ABp(EhV)pPfOr$9kV**ZV}n>kh?(Q43zC+yu!wN#iy$)K zge8>D&SP#B_Ysy*(qJ}Oy-ov82y;gk6%ce*g;+fJ-nlHc35cg!BJ8tV3}Wf9H*JtG zOMh4=e?X9gP^E144<88iW$YLU@KP3a07O$F5mpXO)PVH_u_kf&9hv-rOar8(bw;QF zY-yDU^%QuD=QI_iz&f$h^Ykh-GP^qI4(Fnxhe#H0Rt{J0d?ZW`2qfgG=hgYw_;cZl z?4HfQq^-D+Vz@N^KHNS&-JUS(=`9Rn3||0ze|Mt)``76Y3_g8)|Ni6C5xti6=XdKP zE^z$*c>DC}%eY1OEv?*_SnEzL7o`7sZr(`PKuer3o$7D}0r$5W)bBVL@2k%*MkL~Z zW^fdMO^Wy1H8S%Z`QC^`SZm=0RfA!#6KE?Pinv$^z@JM7P^jx9jkQ$XWcsVvnN*pYZ zMoHlb3LUv)v_P{J!_u@>=53x!9e<_(>@s~Z3aK;QiJk{KnTS|Q*9xV>?dVuqk+?~f{1{A0%(FRR1FUCf7LTl zP4{Fvphc}S2)UbEws#ZhjYaJ$N|2X<5ANy;LO7$+V6S zNEcuP55l#CzC?Qr4!>W=anBhCJR?(12QnS#>v)IS0<2V~b-b4~*745I$Wsqw_O)t} z1uyD)@L+n=vUstZ;8fl1w|fK9e>x#ZvY)qmQEv^*qKOEVHE;K#sRuG0=%VRRtCLch zMAOR}qUrqfJdNW{W?!p*7J01e@m%&T%i@n4@nCa7)LcXbB+a-IS}xStozeM*J)RN* zx6pnrCkbrx?(6UG|8n!|Z+BnV5$UGFh*gu^#Vo#x?)uB!mxt}+CA zXM|HA&HM(@VPXQK-|0Ie0Z<{hXKrFuu_KA9nfS`7_+~T&v9vRX*KSC`O?(6yuZi#a z;5@(~ENaD}R^`iBh{&A-N3OQ++3;wUDC2fHQ#QQKrqznwY8tf3J_Al|4YDRt9-E1Q z$a)fOIx3=8JHFm1aSAwie>N_UgM}$b@E`3Hd|M8Iz)x^13C7@h$I--b_xI1Yk6%B2 zdi?O);}f+aS{;{b3+<_?6=_oy3L*q>D?a?TJ$?Lj$iF^(`uhIv^V5gpiN-gL1KAipjh>IG8q{p^sb;Z4s?k1Ge=kkmi`@=9g0>-Um|UB5HakEwbM+A-CkN_tFnQPIPB-P;w!ADNkw8e{Cm5VQfBJwlyjIzko+Yi`5ip$A!qN1^gw6mWCjsH$C5B^+?9wEVmKG8v z+l3*h@>%&-HaFs;s@4|#&HVL9EOYmC!b(Cl~3d?g~~2XNMn|x z$wLl&aq-u9N&BK-a0g|`$tT#Ca~dZJR<1sA+Q5R~5Ml)~e}_LTV(U|y1J)r8pF;q- zr=@SQA)_H1;x5SZ5Q@OEz@gS~;7g65>4hT}qU*0COY03b@j=U!w%ni!*jRZTf=eXF zQyPG84u6Uu;vLKx+d$v}jPoX?nKW*Rl)3cuV5=e9K)m6D@ENi4?1a`nVH=ZWJhOll z;9eT^6G1jUe^A0Ut0ArHH=>$edb#V!(s^rRY(l)ohHa5qeBk@RDuHDHrdfg-B7!VT zq#;%U=qOQb3N3YMY4JDGKEVx)t%Wm%W!{i&AQ-&f&qzj$oy=)kGZzN1S!{hzlS7aV z*(RiS9A$-pg^&+Rm%ppLhkY1rq{#SAL^qS}$a0m`e|~~>7H-mo_9d7IZ$^^#0yLS? zez9`s$6BjzuR_>9ncm-iefqU6^RrBSKFZYRgG}XC^G>GL9b}3yOOs4FsP;~#>?OUE zsl3iH3pK_oQg!txRacKvP2nh2AQw_?!3M@sV)!;?#H%SH2wONBR719bWSRH(2pp|B zjoT0me{h7P!e=o^voTcwe8GYA9Pe-wC*j7$@u@r~5k6?a+$nF{Ac9`V(xZV0K%v=#VBvHq`T>Wp0RlY> zh*6T5S)+K$A_sE^II0~2%d>V-c8Ji<1mK`Sj07e z_^OeR;sbE(ioSM)^bXqA@#N4Deh0!fnhBa{aIMg#1B0`MYye;FT65^Y~KWVuS}YAi1aVd_5E zvQH$lH(#0TB;=R?}} zwCVtc!yd>BIlRLs29ZWMVcy|q6e59;MF+qDV8qK7fsH+_j=X0`l0o7a0BHaZE(slo zlVKVbe*w>2(&Gjoi01-?UotbY$>B8ALhNm@J}DsDwzQHWqMKkoXb5k^3~FD*oGEGW zC1P4fmMAR>A{+yHhZtT88^TjJl@j^R#?sTNYxD|~L~Czus~v!%QRkE(E(zcqSBhLZ zF!80x))Btjnd=Uz92u!qzmNi8`JoDxkOJIIe?135XoybRzJJvFej}>srI)*o;n8{P zgKQwA+d$=Qh~vOerHNpf01?tU5S8OLkf^s~8c}TsEq3XEhVRpEA#IGUbmnVE4cP{Q z@yj8M1|rwncx#Q#FUJvu*5CS{riUyWvJIq7Eu9wz+D=-Vz$A{(^)Q-Ak?Ffh!b-X! zf6G-;(}J>-L(E4x#C(*44M#cPj?yfLn0I23`DBuU(42%&ay&?(dDA?!Y^ zMqa!aQc&O;oq6)7HI(P+6uEysh)W!1B1N`=M4qV+fKe|x9B%@^>6g0&5e{5q{bpm%T8G%Z|>2OH*S?8FdS-S1?By|B;2h=%h z18hQ^M#xeG+CE>0Rsm>w=`vbJe-@SFHjpF+jz+Y##9>^wv%=Od`h~w**uT6X+dwdM zYuX_^XY&>qF^chsCL+9O2khw~$%bqLnYxbh(ioI2Z|Kb^FI2W{4H+M@_|iETgg7}l0))Fr`uwsZb_VGy{nn2pI z9+=p*RdP7~!fSk4E0z}kSbiAr`URV~gRF!|b5;4>D=VRKsRQv%ZeRW$4^M-4!{ z$f}pUIntiz)rZq;M+d@DqxCvC(pb|ujbWbnU8ULpe1i98UC#pfe?j4Kz9R|uUts4% zFhEj-G`;8@bL1e~56P);9qx6X4_;O#_+~w+Z2=(i_R%3{vRQ0e)GjcM6FjK;u1H z88ktIpf(^mU27(QL-^n&J9J*WLmJEId72(VY{)i{(Ps3BV6Hb11LLzv zlI@$0T%mI~?toiJwZyX=cl0EvXW|&<%o<=JbQf#NyT9B%f2eV4Cro>grQJ#HAVwT! zu^2^0h}F3hqf9Kb7Kn{Xr^W;vDwmwH{UOe>q19_By zA5zpMq9NNrbWj`+%*9FFu6Rvg2{_i^IW4OP5E*;YFFClFk#kaT0B^MBbJkB z+QgTdVO|ejS55|aT9skn5Sg2;G7f~_d_&KTdXOaPf2A*#>&Vi(0Uj{Jxzvn!R-_t& zKojtc;+R0#X$~N1D3yjF0=VM=F_6HU@kBk-)WPCVDvwhW&8zSHE5fl)KBVmkP$15Sfqg5XfTAWTB=u~ou%$O=f>=jk{ zA!E@i@U(*fAt=zkK{w);ei2TR5$=RRZ|(qK4;}^Z71X0pIs}RO${OD?zVlf`>g5hc zPm4Wr9Y~hl6H|%o#-`9B7+1AtBLGH2e~xG?VsB}&f36*&Ie?Y^?X(Oiav$qd5lGvz zY_#YG4E`FjHAM6UoUm;plamYbT@cVYq$Cwq13})&#rFkjTDMZjIARUmC(zvC&~-JHW08e?GwP z$;5Vo-64$kTKAAw-_?psMi@Vdw`8MxN_vv6BHM)Y8EImvW8hOWV#}Q5b*a&OLCrt| znmR`NP@v^Gau*8{Eg0BawFOC&+^dX@9viWWlTYU_7NnowoqqqpyLan-w~5Vi)&uQX z&U&J~le74u?c{8Za>gEDCupB9e zjh=Fi*lX7)m}rx8fz+MATAy*{!Xxa;BDE89xD<1^6tgVjvzQHzEcRl?E^a4gopUBJ zE9pthHe8C?hD*sve~8qbnAJId5_3FCIjSk{lGMC9acpSPW-6@EthZX20bn(2&^AFd zgQ-v346$)Z5d!43Q%NTUc%7LMp4zh&H4p$~Y4Mm0+t1`(H@zMdc!?4rD+l z1`wcy2oRhN8PJm0vyuVqVi__0BOLqyGF8&-&V+xn@{6@b0Qtm=D#nnnf)pcyfU<@( zzs@7+Rr)P<0*Y|o#w+RyfHz#2VPVQLJpow_gdIXBksAaA$s17$$zl+snk}1UEs`VN zi=+7faQCCgf2!M{7{v;=&6qq5Iw&JhNUl@y3d~Fjq=Xb>$9KPnDw|-NK(Gy!vZAQw z4Z!l0IWkg*ctjXJ5AUD#A=2m$K+0a12~)PWX-v)#Je)>lNpF^sq~cg6goP%Hkq*GOA1teH4cZ381K#hEe<=PKe9tcP+mK1#xNaS^0h4GI z*#^>Pq-AvDF-!4{K*>jIZfUc-W>aXJph>*?-RLLRh`oAo3b;JsFc(x>HVWw-=8BKO z<>E9;*|-ZS>u8;%T=d%3EM}jMVxH%L1{}n!bNUdo-d5R(S?;tPBxBu$n60}IGv89# zi8+KTe`2;r=Vepnw6r-`!o*iaZ)wmrLHs(oJ3{J+Rpp&RM&L}z0DOe4yfL}%A-RxJ z*<-EwzzM+n7a*d;IFmWd9Q-`I+A4t9BoG@t7;p!`U^`gl5|7ehKh`P%OBfJi8gD~5 z&9_x`Dc5g;7lh+a0)S5dBYfk9p9BDq)#sNXOQ%RHhu>qWSxuR^_k*PXK-6!NyuecV zUcIEFe#4HE0N4tpG5;80^@b2_gDeLMj37Xy;g}n-1Ne&cQg(c6^D`k{u2w3vIE3~Q zlP)M40?{gyN+=MBH7>@~$+f(DKHby$# z4p@Enu|vz?aSX~Cs=T%8wY5e}%v~G}Senq*DHB91_t-jOwaYicy?ypGg1EkQ0ci8H zuWyj(rlxy(cZe0LJyIq16CvWk>g3R}chCk5(ROH?p{ZkkDNDWkfz6h$7~ZBnOigFh zTd5P~yXBzKgucoj}k7NvD3Wxl2U46*y=J7WuAe3d}5!0wFH zfS4~Mf#3aqZTtB7>qQ)IOnAll`dpL~ngAt)4el|gcF{?pr0+X^6QF(Q)i5R&S8ZYc zM`+e84x0@r;^+2lV10&mH9;LQcV3f}^rGV6Hu{Bi4x~_-#N6`Sa=5#mn(Y zm4mtn4-Zru;i*ZGU+zx-_w=~@y2u|gO}XMZ%YP4nb_F014ab9q%W1$g0zQAdHK$*` zo__qhHK+geX_3-ij@~1m;0-RHXknAiZBBn3(PYEvKd!yW0PiDMIdRn*N;ujTUWfx3 z?^OwZZT(~o%x#3vtV7hoI60XgBYZ0Y*3EngKZph$U3AP{4 za*j)8*noK}0a=tL2TW<$mEb^ftCDtX^Ce4%o`ASaIY;c+I2d9{SZI$k)%&~q+uydQ z)92f#4=w63UO-E^c!~UUyFJ}~dAxo4$dROfI3q71l#w55(GXGZzW(jw=g+r)*(A%? z*TsEuq}>LDD|$)bN#8a`)GW*_xrlR>qz_?-X+V%l%yaCOXA??${XKE0hX&AAN+K{& znjMlGaDCRmF1^Z|nW8^Cy&lkzZ>85)JTebsTGS_*ex6eO*K=LTt0zA~_QKeODJ@5T z)-D@#5vrNi7A z(gw6-zOJJpA)p#|WTQc=ixmOQq0~TEaRZo^5za zf%kK4>*Cpem&4Mj#v6d^Du>7#_-F3a?0rB zH2dK+011s%lLQ&XposW1~mXN zK|Md;yUdxa#>{ABIv^#jGvqkdL?gqairt$=S*8Uc9Q-IW7;aSdRg(CB`^Rb?-X(aW zQh4PQ#2@k|4V_hN4g)G2N18d}C$Mn00j^2RHB6=otc%ty`#F>4ZQdZ$fzV(Y zJW6Ge0SCRdm!-fu@ze8kjvJYMt(GCAeO)j6%G;I2Gn14>MV_+}S}$Q#vBiQXcVwR& zTu7pBKW3_L#MeatV^~Fh3de+VEv7L;MRW%Xms}izlp>xL1W5d+29VqlSaU^7mIPq0n-RgaL+)E%6y#R>iOec?fLdJZyxH&HFp&pwA$P z#g1LpE=k@0%S*N|UKVink|W2{FA{Rya)6IQWSp9DC3reUSBTB~$C@nOHi5lM)hpqW z9I^1y00_MEblX4bWbeIg{NJ8EGkJ?GUB| zM1fNxlnxRSp%tV6_XB370gcm6;aC~z2NyLwjDj~Pf%|V;WPPkybDvq8BL|7ZMarOY zOq`x?H$)AulWF&Y2p^V5xdIE{KOxdC#TIj6@&49YkB3ixa0?E`=g3EM1Cbbacq;|Y z5E9=#QQGsNeoL<>9FL`lE1@k*N_!GLErqND!Bk^iBf)_R3a%aZQUt&!jSodSpN+(! zCTPdY+U+{>TdVxF9pz+QyV`9-j&gClvO@Emf$im97D|$<@I_t)d^in6LT3itdPJm( zD*h;;NPL=qmR{KzKX6#{mIcrI&Ln!;YxKU3WVT)^1rCG3FUa*m1i%-K4MjSeO5sos zi21T^yFT`|s{Yc>5xL=VRuE^eB$Wgsm^@8o7T`}_#BK*3ed$S&1BW4N8M5Dh-_lyb zIw79J|0@L!e-vO~>SdS~5TP@n$Y5JZ9IDX-v9H>HMIU%GHRpvgIvhRWN5Yr%BbiKl zUG{Tv(YxnQ30x5Gx|AXxdOz^1-EgfROB`Mc;TW?0sUE&|Eho!GX^Jr>V#lu#fp1j}tS#&BO4 zP7L>U8RMIGK=|PotC4*f!6d>6Usu!*19QgFeybvE=mP?YFk%JJ>jZ%0DN**w%*vM7 zVH~@^Gr+HAFre?j8F3gEtZ{{F@`4}|7eRr430MgqEZ@ni>5SpxA|u%;B^C#eSUbSg zLyzVgCN0+nOzg?yOSn&}M2q}sAl}GD(RBv7D+#eE{- z2Yfrrl#2(DL}+N(GL0#wzDpa8$~TR>!RZ*st&$AVAmnD#jMnQNj3J$YhzQpiVnGY3 zfw6zuL|Z3`%c(>jP43-Ex&==#MxruwY@4yrZ^TSkk-#1Vc^#v88K{J*4=XUsx?$Ul z33rS1>&9H4>F_3EZz@FGX2pMMQpI+EUr+7Oiy7^3o#bn;aX3DQGD+U2#RH+K=K6|z z9DB)!bSZfbcYct(+;QDWK9vi>hjefn^9Dk^vR@ z#)F9&ZwuqW#2Bix{>p=i)JOij{C`MS(zKJCFdhUmGB!Aay)cKpFafu{Faq+_e^G0~ zFc8Pz`zh{aOc|t?q^%;w2NgudKy+_&4dQuKDm<(OAwT6L1>I`hF3i(_gB# z%|-p7rDgz3Hc-9bXe_I1|DeP$nTXiar@}g2QTJatCjsGNu(nL=M04` zgaA%YvKh{cf{*G=AlySX@>^%S7RoXfvA)gh(;+%i>Qv*~I9p$bcn86CHD;*R)U`2R zwKj+CDu(0`^MmoWbJ}>2IfR(D(a$Ga>w{Qz5hg1wjF1_K}g zF_!`d1D=1FcrY+9GBEIiND~9FI5&{Z^jaQ7{*eWe%&OfoYvbCrX{x%wCw0H#AA=n9t~2m>7pIWsXZ3MC~)Peuw!-riaO delta 12785 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 D13e;T diff --git a/docs/images/raredisease_metromap_dark.png b/docs/images/raredisease_metromap_dark.png index 8d0634fc0a1d7e60849abc20971e68aeae57d083..15faf8f34d0c70c84f6f29de3cb99f3a6c150ef6 100644 GIT binary patch literal 429743 zcmeFZWmwc**FKD*poFNPG#DTvN_P#4NC`*?NUD^ybPO;kDk3Q<4bl=rNXLMbG}2N- z4>0r)0}RZ650_r|{XE~^<9I(l9EZSfnAy43xz2U&wGDWpDo;tqKt@DFM5(CoP=knw z{2dVy>Hawq@CuO+nf3UkXwIKI&3A_S8i|5}1;4;v z9RgBc@mnjr^Re9mX5V@%3FFhV*D2HPoeZ_JjJGZ4I!ze%KVLEvoO{m1f1kk5JmxpA z|MTc8&VKR2e;%J?o%wO|6AS@3;91o`o~fJ|8p5FSv8SA&c_ySU*|FT{cvq*tlU2HacnpghCkHG z9Za$#2k-EuO!({4+bMh|EpwQxgoJX$(Q1c5vb49Ss`Na@W21o-nk_(RZu$NRoOo89 z|EKZA;K>?P(tfvFUEv{_IJU9xPwv6ODxFZb6d#2!#RhWMT+_ELeQM;nlu@%j zCChI;l*h702iowZRIkip{AUcllZ(cX!{6KJVIKTWfAT_S$+3wgous09S6q~)nuL@h zzx&3N*JhycVvaBY%0}w{B9V*;WAA8Od95v+F!E~T(ImggyrY;rvx}*Z^BPqI8yu)m3mPU^0!S>R#8u!gUw7yM|T({)x_DbF1nx(aM zhX`UnxpL!cphmtnv{0Y$F=5kxXa1gnfuV0;;QQl^>Y^ftr4gjhQ9vk6G8s3=0bY)j zSgR1oN^;dpg05AXSqX`VShR(+PYg>ET4Ahl{C95|=A8=RLG%K*NLjsJ7u3vbF}aNwJ^TJj{rJc!xuX@b88H82DoTkRB8IQ|URLHh zCQWF0WaH@vN=6?&HIYA%&lp&{=L7AQSg&Dn?tMcqVE&kak+G!ts{R~LKR%oz*^6JX z_<6(I6$D;F!1QO>3MRzObg?(Ja;*yOxSbW+CQGGa^kO2^3)?8RQrO6!;v(Y%9kZRN zWGD0{{G3v1g76FYvbih0lcTnP?eV$=j7Kx`aa)v*VIp+Bl0!4u^Nw=#-Dl=&>=C!- z2Y6s&ijKeJXy+5)-rgB5$ciyLvCSsxaMQ|&M#7*MCzQr)sttejtDLk;BvT9Rflfx) zdmULXt*mtZMkPcjM)-Wz%P;HOr=+B;Jov^XU^iZISMU36Jgx^H-bMwf8LuJCy3Vy* zYzc{g*;UR*do5t8HE38i2|a9({f%6@@?Zt=7-YHWK(@NrY>bmQztE(Mdzdh0U#XCdr1QMV1+P%z@5&^}nmI>Dm zDj3!eY-K^AtGv8Ccg55Xuk}NuTB+V@pEqGCp1>G9tNv_jwi_j7u%eL|r&o-jYg_H! zWIP+an4{_BUfte8uk3}ch4|2C;;@5l`h65^KSmPMDNwn7e27URrfPR+WsX1E9pfQ3 zqWsX4B*h^z;iY+uM)<@5<8a1j5_-xeSN(Se10y3}kmCmsdSM>2{;t)oXPUjs8?U zArdQLN*TpJph@mC0Zd*$Q*#Ebl;J{xf~Ff&4LRDmu>uyVZlzS9H5q2=zpV|rcj!-s z6Rhbs7)D>2siMzbHFEwfId|uG%l_!@-_Z4P6cl;1=6GsjpZx0Fs5QI`ta}2%PW@SZ z+*QRl-?6oQmS>J4WpOXm-y@Ks`WCsrEJgdP)}8se2uKVSY*Dr&xU{?+)hW=^ZWd!) zw>?@=y%tBs;-d9|f<7TDDJ~icgW3CF;*sXSFFOWmR?87>A1~c>{1L#hkQr~c7F|nN zi9!df#ibL*NJR8pcBcoA`<3xx0}O?24+(>PpkNLs-bF&Xy1Ibz^hcOl-o`bMvUd7W z6&y6JOM4%r!|=z7;Sjus6|L*ZQrJ(u`@_^cqgKl%gjKq_VkJGclu#6`(vkqUM3BxV zadB~uL(lM^6%p9xzRmpd$vdcIHzVQSrV-B0&U4AquOG5_Z~q!Bm>3^Vu=kop|8`6E zc0?ZSq5N14j^`W*!*;*d{;y*?`)lMxMyN_&k1_UnR(D+L)YsQnJf6_tM~X^t>h7i- zHjbGMkr2Lj@814&C5oGxL@hi=Gr66wl_?&WzM!!1LS9Mt4xlw3o02JZ5z{#CH)~13w4L<#^$Ql z*4C4iNFPf}%eE$2s;)qux-S4P-(DFy?4J!qaT)Jhb&Jk!+mx@C{kBJVJN2uGa3}(p zb^O^tnpK%0rf*kiwmWVTY6BcvG2F60bADttq+@$Ypvo0ccp{>0vZxo0ACiauLP!09 zu;)PbU4x3(vDSM?yv(CemZ(`ZQNB>fG1hUfGhT!zF)`5t*gyhXrDy1SpJPE7iLPc3n5*cp$5|Usb{k7`ey(e2i1WS=t38WUo>Zk0VDr zWSxw{Jj1qZqF{097U2oljkl$ZP3JFp*qvl7w$*8+sCB-)e4^}!2iR|WkB)e!R%SPD zr&^7ixngBl>}okunx_u?a`GsNSipX=CaPfXGZjpfBNYa^zT{1Oj4Lf_Rbe12qenb4!r)3tw%*85JB5?IWmzTVz25KD!Q4tDhIy1}+! zFoCdWOpgQ)9vh0U=+p%WMT@{@09rx8D10~ha1UlY?-?q+s~c`AV{NUcrx$HxT=@Kc zh~#p1!qz^|+!j~CMH0f+rzoHMlNS`KTiVHzf zw;HLkZhzXTp(ZSguFzlH7gj6v@Q_F^GNnv)wJ%w%V6 zZEg3ra&oGet4uX$SI-by)h^(-8QJLnmr&^<#l^+> zZAZT|xlg^J=Qn-*iKcRI63HWgdIO;0J}JwWQ^X{uF~bPy7(*YAZ-dKyn-dEI_P{ z2GQ}|D6!~KG|@C6`CfKQadd19QxeG2U0%1dYW8-H&`Gah!k=uio&;{d4fs;Jc5c4w z+9}eNWI1wL^XVV&6~hnL5fFbCM}>nObj+&Th_sHO%hOLY>lU|;=6U){_7~zU;%&>? zxT{yf@yE&dww2!{F(KvUpVJ;K>>=<+N+?PO!Q1%#F8c*pR^0Qtqr`P?O3QLU2KQ0P zJwAtP@#;6_%^PrMJzj0inXT30-;kc5i7~?G_X~e!$9equV2F^dUP~xzvcqhdYQA=d zL-PJ(ySn`az$mhmw4-^`l+M zt)Hx#`Pwn`)w`o;$FbFN4#g12vA}PelCEfa*iuH!)?i7GYWU+Xg__dt1L_@v5KLYP zKkOJMC?W!4RkuRriu#G|OZDVx5hf3aRd2WSVL~T})WN~Q`=KS>N*Nl@rfZnpM)(xB zdS$8dU*o>_tM+`A3+&5MOHOcEh~IgE1uDVq23?bPRRYj+~P*lGX#{yIV*&%H1H3DM8}gx%K0!JC}IYaBiIKFhNd{qT@j!&+VQ+M2r( z(vu)2KyaN1Ht5P`X3buTUv#|F!ZQoAUti@2s7{}iTx9SH*UklRH*}kbV%uL)50=TnTOW@a^Ia!HGAX;s&BO%F0D~jkc zzLW0c|5rR%9>>=cd*GV_2#HjSZLLc|<-%x&$ym*ri`drBn*!bkK?!b?`&{|zG;+5f zf@0Jhs*e#qNBo}Ki{oAxcuXv2F)ehV0gMQ8ycyd6`*)>5@ID5WRhuS7e)VoA%xgZE z5EX`zw+K9KO6ae+lEMvw5N{wYPqz_tHL6PlDcK{5dCUTv31Dj*!*8;d>`mJD0ObEn zh;UIZ3pLvs?emV4+nEyrJ~*u8!H9{+!BSRC2(8>_z|!)HTL3NZ2E>Ssg5dlzpGt79rp;(?rP2(jEo3!$Fi`f_7#Jylnay#9S@cV#g;8 zs86gE)D_VC;veE5NQO!s=$^39Ph15*4c(B5-QC@GlP6A;SKTK(W{1N5QL=>30rm{? z5+_&KEMxz8Ujj%P<_NhbK;Di{iQO+Ijv!RBDM~xx&hNJjBcd}iGtCx2V39n=&H_Y* zI`v5HEgX}w`~;>S9V_5C_p>ujDA!u#EMe;n75tEi}eB~kS`LK|oGJ!z{uT!{c=D=RJS zW-IevEN-`KEPAp8^X@zdXW?3RqS)G6rH=!~Jy3~?;lP|%who3Zz|4NKKv!a!T}Pxr zhO!6Qkg40w;ISC}ZYfo)M(9}=`ESqa)VEe5m3@vepfN(m(DRSeozz#r4R zZ#6lYq2zyb&Mab zu6uFxNFUmS&nX)pyabe1yP^emmfR8Py?5S^kR=uV`kN)Cv=YKlb?r1|EaLfn?yAMF zW-W2?@lHQBTT!GCtWWsdkUlH|?zNNK(Mi}NRjJi&wl-~j+o&|iPR^R;i9{)U@o!?j z{l!7woC_%T`a@0y)cEM^;jF^;(s6B@`?LrX=}Dkahp3ya0$4Y;EI}PM82S zAAU8d9W5iD{dv2Ila{yB|5X)a)`b9+;XIZH*xERO8Z_PLk3#qy^fS5lLUriCo|#B{ zJC`Bts&OFkbB#rZN*`qNp2)(rA%C?bsbvdDwfoXAM0&j@!FyMXi_&$yx<`6{q*Xea z4J0j&<=ZF9F(dz9R^>TxMaSTCD=X{fX_O5Q2Jq%SHD`=_l>BmiO z!agYc-G&ig3cw%;vW;W?@u39}0tnfwu&th5)zX3izoiC2yGpWiNE1TCVJgK3^8Umm z7nFdqR#kVM(9qDwzbnR=4j>8ul(Vbrt}|Edj|er%xg+kTJ2`~Q-O^EPZKl;}{2v0=+pOpEWf9;ki-1Nu0#A4uyrT_yv7S+@E0eBNK zpPsISSb~SRO?bPlf%tGDCte|RB~14}^Owa$K>oKH(n8v=`!gln1H`NpW6_fofrcZb zQHd}gBfu)`77O>>w*p!wuCqE_3B6ilMojN$~Sf3BkSKO`xc^^!5h$uPia$7_Ig z(mvJTH@uhx7@#RC(XG2_PpvbYT^R&pm_gb_fm{*jZrs_G!}7AsjEs!HYC>3jt`Y_P ztAltZN2rSP(Hi4QY)S{UtzGaSpm_moa|GZ-qe@8JQ*{2S4=H27TN51H+xDAUAxRoJ z-@A7v%Z82i+tj+%K#(7jbpvk)D$8HPSQO?+bbcv~OQp&mjw8U+{;x{NV?e&(E`(vE zu>8+?)wis7LDymdU$-sg@PpuSm`adWJ07l{&|J$`uYQJIm(}*@0pdcOUTO5B3D$(bv!G4hG?Q{1nF{CZRyzQ0opBnfw9* zt67UHz|#bugQedv{E?0)J`3XQY=@XVp`pY2NJ~qFqGgjS2paD@ZOfTa?VNEs2=knxNXbp?GL(QL&;2w<&Bsl9lU`eUBs7dG zhaHx8CPQHFP3##fHSe&8HV~RvWUjgVkJ_|>pt*UN>Du{j;KIlaPKhgChC-x zI-;(C9n1km*C4mb3Dw;N@*KpEqEo@%C5a${~kN^&VKlw?m2=rUGYs?Gfflt z))N*LG6A$pwALXI$UAWR7=h>YTaa>tchX6gUVrhKNzTMc*< z;MTgR1D=|VAD@N|@rd|iy@Y160 zCN^%lKdXlfUOqTFob%7(ki#ASG40w%zYv>I*RU64J*%ROOjHj)sh#49QX)v5=G_UE zsyp&QbVWbVB{6x2OS32Qqxy#pF&2Perj*gwZwp?n_f!W17!9aC=jT=;mV3^8y==@5 ztpx=#I=zJJ3R$Z;Pb@;U^aL}E2vSL*mI>#Qu_{SS#EW@TcQJY+ZvL7CiX1lLc12}Q z&K>78(CCKVcP$O3VizlUoA_<(l_fjR#MXr_-K7z*^3|%PdlPQR$PO-_@f~c9#ZZng zVQ>S1C$R6EG`wYX(W?@{bhR{H;Z8<+czRCc_C5ANHXiMWuZQ}89{UcPk2U15h;v)o zE-$GHGnL-RU>_V*9NGX8z+W+qC&y#C{SONjV#w%0Kxx#!1w za-Hh#PfS3Ar-;Ff(y54-p^Dw?|MhNRO@X3_2&ORf=O2hDI@1F8E&iqUR zbsEL7_eOK)7<<07Yu7mzi!DD}u>}75 zPc6U&0aD76w)&+i5(Er?7a4S)2NDTCs_rQd` zl(X*-g!6Gm*9Kn?LvbMrT1HQAi3 z+Zen)3W2vfBlz-jSVXQjj|nR)q49TD`}#4O$CI+0_+z-Vu=Tw}*zrCW^OzT=%L&9i zR6Q}3fmtv?(E=$L*q4=(J~0S>pZ!_k^9H@W6AHMK`Ms-b%;WcEq7+(7PIf;dZ~ZBp zPU93|Y~}44H1-pMrEYdfk;AZylFWmV_`}#pJD4yh?xv@qH-^!;2ORmWJ?#eak55GM z@pe`vpqyJPB|YZA`A+nmrc3g3KqOHyF_~3bPZZzDVG?(EIXXHzl2-`Z8Mi7%@j<@jn!WVto*kk6v!D?E3 z)j_p%h7QZi;qbegk^uC5Jq6R*2OC>BOh}y-_xtjiISs|xGc0Ib6}`jdS@ul`3<&ju zoaZNjsZ|;gbmBVfN!o)>l>nU)WkU>K+mL`G0GGK-th%;zHQ+=GoL%72nIXpok?Bi= z@Ug&$EFewutK=GVO|6N1VBwG5R8scIm{aQ4*R6;9nsLGXl?Ro;X`_4q_|bv+g(#T zDF5MnWRg)>-**qiL9v=%#v1(5x|)*{#tL^MvEmd09;+ zNp87hZufL`w)w;3xIUNuaM$}ANl$VI9f3x;kjZG@ISE})^qYh}A)I#r-g>1QwpNKc zQGh`<+q1pYUtOtB7~}|VRM~G=35RRGPdQ`4^GVXn4zp?CjFEymMq{fGAGVAvT4!~q z`VU_-GT227V1|Tqq^I5S1W$19y`M8!g};vRb?n<4w8-Jnim)m_A;H!Ki%6`}MKAyB zh8hS#H$|lwHN~YKOjWwHwLPG*^d-N|>1*2-gP8dE2^0iiZam7oyAvof!~Lta14&*p zn>5YKtjr<*EA;`#in>uM2N|wY(VQ(8bkUbH@~~`-&u6zn+-gipUu>`uGPKZl4G{=@ zGhAV&lTfiBY}))THK*1Moo;LrGr%JyDUp$ToY2>iXsD6wB4E*-&>1Vh5y9$Hk)^-n z0%{JTgv1oT0fJ#TNhppWvR1vu^ql?E#G`c4SGhF7^GSARN9v-=dOx5LM22N7xMNYtJ@bY|RLZy3l>=YOBif)EV^3QL5gQ%nc z8ic^jXG{$IB8v>~!;|?P-UG1WOZiBdy}7z26YP3H4pLiXUq@5(ppo2Ala(;}6n`*K zoV`jEAXOZcxffhdBabGUw~6-(@^)zi6zA`f{K1!=55v zq1e*!m+k!YSKrv?x41-{wKVm{V>|W3`^b4X1ZcA)oz(lDp^FIT(uEFSD-~9cW+PJX z0c+WA8jpnIocQe(|4eG+;<8CWR;?!@s5`^i3_$_~~m{G3Mn;p!*4+QT+)F*QFE|Vjd~Dj9VYh1OOCJF<)x2&6)LqQ$ryPl^J&^U ze4+i0{j-EimQZxGWt_0cJ+<1%mgq9Ux*9fO*4St{{gCdNqQ+sH)#wj25|qj=Sub*= z@s4-OAFJ&biNO@9_FWn`hUynaWTy6XR3++Hx~{7;v>`!@^j zX?jo8vniTwkt;f}58C>t&zeYN?*1gVtk~z_teu;cSUNRJl0osnAT^ zjU{P$S5~v~C{}QC)1Wwgv_HQ;enr$Y-~L{gVfbU?FMU5kXy(}(57S3#ge>pE5y!ri z;CKX72rw0mdVrIyww+;Qp{n&2kc{+a5A04z$|dh$hRgL#*m*+f<6=bU6YBbnA0sVc zUEweC;YV-0aw11nWi^9VB0dDNC@+-4V~)XiM=DN|F)TV<<-n!uw7}JL$EC=*_c7I( zC#rcp$>VDY1y4CMoXS5hjay)7juq}FZA3ppjx+Fuw?++Y z+|%arNEkuMkL7*w!wO{xWXER}uct?O2DB7yXDS9{&i;1AQCSC=Cznd*?cnK<7G# zhvFAthF10ru^$+dRQF?D&hE*PzOG*xE3^C4>Zo6|;Ba<6vKN_@9$nQ9}un)^9WLLtNd zzqks1t8K1Q&QRkYyaV}F$>iXNvUH4ZQH~vCE~+2FnwZ!EM&zM7#xP;5*Za987oYF} zYLR&~p`TebSU(_L>(oxwsWf}9Uo#Fl*({Nw!!U#@MG7FKG7giCcM{6FO}mc!Ntb_u zGjpfne^__9U0ip$P59TGgsskI%ZkkE$vUyk;*__^_)6W zJ236f8r{;;0)h}06_dBaPztC9^k}2B4#6=9jDH@|ttyUV0o&g@20p0ym?`hHW92)rxCk1w1>?5k(a?>HYu`N=qkw?Ozu6m*o4D6R ztu_ZzSp8g~PnnKZhoLG;)-KRc0%sF`q1#TCx1dQwaJXz5>JOQs?gpQv4L253725ZX zgfh^X?5mT$Cjhd6IRCCh)k>d2p|!d-Q#ey-DKBHXAl9p7yA~b+VZj zFDX~#x~})F)>7-!Dfm(F9meocyPE_KO5_>v6*dbP0rLlE5WvUTISr-RGaxQ9}crz=ejLh1?pWe-liPcQn3r(dT3pY>yY~utgP^L9s;4FVMOYhOWK28cV z)kjzh9LrQZO8(Xbm4Ekw&eXy}JF;HC{6~xp!EqTS zsGUpGz{uR~xB-DA_w{MC1aaQr;tG5%8l*wig9&(a!`a#OHFo30^73+aZf+JF&cj(c zQl_G)c%Hf?G%K&>?ykYlpV#QfUflM3C8*@)wl`L~^1C|5`*8PHf5iA+#KYLkHWiUc z(Wwehx>mB)#z8&S^klJ8E}%;)V6o5HS^MJPRr*zpcNZU=yAHmweNOruh)>N7S@U)?P9HB7!@l_)YPY zPbJ2NmQlKP9>X)(M-9`bZGBGCeCv<>XHnpN+C`5?86+P z+r#pEmD$nfn3f+rb^E$oN~Jbp%*m^Eaa#J<>JcA}uHU(ED8uEI%U<8WIWPqV1q<`Q zEI71mFU_G))MW1u5@!#kCnhEY1qBODT2;$ze*ahynS72O%72*lD}CVE)2GdHfma=l z_fZ07?WX+v{7+h;s=I0BAl!b$cRjRw{u5>6b0A(MK-a_o#rC(< z%nDCT3^t?03ByY>OG~4I8AUedzHvOO_3R33oKAi6@hmy_95{>pA_W!R-`}TenNq8I zWp8iM*b*)5v?Dcf)6YYHSK!XL*7ZmyGmVQs zFF6CZiP8ii>#LcT7d%w*g$xZ1YifL?a<%hkcwipU-QB5DAIfZ_qE-0mTajr{>?h%FoHqp9l3T#8gtajWBEGpeMJRYAT&7vEhN0&yT&fwzg(2l(P1K zgcmzHjA$U|skyi}j>CD`)$UxCcH9{Ren?e$)i)&M!kT_v0&)_gFaBuCf%zxwxRt7M zyHEL$nL6O1uIrN7z~CVJcmMMA%P=2@2Tp3jEgh6!LRT19`TyEFg@6<%IsV&b82#h+ z11l%;mgGH|Q0KF>e>Q;N4j&uBWGd*wy3bD=7=(!2q#C4`BfWPn?sh((h@eTnn6H(Z zDlPJqb%$ERGmQWd_IO<@!&dRfq>r_fS$88ydCN-`S~sT6Z#%2gN!=s8g=#uI)$%$6 zLE78rUsOf1(=vVkeGyV6CUY9*`p9v4+23RMYW5o4rgub_pb9r)h2IWw`)ozOV^Oly$DIe>KN90-uNJ@NzS|&CPRGpqr0!9g$$c}~7b~`{@b+t-vur`$ zt0QVFjiLhr{H2NAj(&@=XR!j9YdnIE*EiCv&P^LbP6=HnpZ#?-<$lxHFXijkxAw--*__*_7j7q>FEf`xGp(#?~kvs4IUB!17XPjNP*xH-g8lSlLJ2^yarIg5K8_`?$$Xha4 z*kqz1m|6Z@o}{nUas!V_W94@;n9Z%v2nlLy@0&xKLfHk=t0RX#DdayE+2F%>Rg z408BP*xu)6s!*gxXQD(5&rv^wP$qckJhIhfYff=|C(!tbuCC~f!{23HDEu_*&-Tta zQV5RfJ42u-Dv8;*ha2TSj>8uICKnd{&C>&FQ7+59~`h28j_3=|MD+Z=;R; z<@LlX;H8OmOm!CO|Cpet+3#D&av6*J>|sGYw+#=0EfJr-^3b!KB+|y>04TMb&&pS{kZEHCpU?;O1TQ!$gho8?=0Vk2PQMK zdG?zI)!LrX)=InJLS=1h^z_zRpAxQEu(#-%C>igSM^=pHCz z!tTI*RP5G%)(PLv07bZv?&;{Opg;%DT;xq_?0Ej{*|WqU)q8bK)qccbG2t5nWc@Q} zc8|`VN>aj%|;zVzAtpCAZ*8>E-=GL-FM0*gIdAspkVPEZCGv)=)l5AP+9focaQVgSj$&*Bvs;iS9qwLiY%JlZb^)9s%!Ay=p(|0$ zsYP+$9fd++`jc^{O^s9QyHqgzp3Ov6lndHO^}s08(y@_pm`b!DCnsPqSBJ_H6j+a# zl@lM1=8O+EOBq6Mb1RwrBIOcu@|;!=9=m0hzA^iaZ@dhibo1za1(N1r(Os#i4yV4@ z$g4kuL)Q!nO3hpAv{@z`KXO!6Eyag3qe*-^A8;U@bpNby6A{IGL?KOW;axEu3TMfn zQd0Gv!R9#Ff7|mry36O^A&|dG)@t}F0+mddB}2Dgz{PzlGtT0UAs=;CFP)}ZZGlyu zvUtYsV@3jMamv`<~$HHUt&M$mZ6{IX)VM$3z*H<$HR?_S@gzn6wUMYIM9}C#en&`co+(!0aA+PE6XBq5al!m)zvBOoJujCpjJ>dZ>@5qDhVB}GhLiNe2N)Nbhs!Ye+$t}ZW|;tUnwe`qIG;p))->+Fj!VQ2f; zB{>}(9kHM`(cdf)XHPFD_ugxFw{9-R7BE3sGEGs>*}Ogyrvpb?V}mU-{rE&O~*lPY*L*r6-O!x(hkjlha*a9+%?b2)35+#LCK}_{LD2 ze(d4J?6tp^O?TzP16bi1 zeE62GX2|q{^+10qof<1sA$`Dqg~hQt-!`VI?u)?ArU_Yu6!t1gWRylZQUq@ zN$kP3iz$WKAHTJ?zpL(nfuif#y7`W!6-nW7NhUIK^2)`pav+6R&dCxT=;hs}B)-*x zR{4@^opSS_dzB?SPBjneHf5~)sXT?oNrkcnvvXvm2W@1elq`0n)iIXd&mO~Bux!_PB}b%M$N-E$OTE4^86N$pHl!>JgbX6gmZS6fUUA`eWQp zZ9F3HU|naN%^qn)>jX>D?XAB(6X*4Je@=FR?#r1UNO|Xx7DL?+67Y+6iJy)sK5zC3 zT7E(CYsX{6+PcWd`UinDOVQ@jeCv_pdM_eGYX9KskTRt%EJtpqMcfg+P1M~y?`}cs zoBDF%C6R5m?%oy(&6f<974yL#wl?;EfeXH@bD*=hPrp`a^3h0$Wj5i)3dc9T-Eyk& zE(3}XxcUUQ;LZam>qGCzQ{qCt-D+>fdwZ)d1b2PRpWea9_9twJrK=DJ%}%HQ5^8ff7hdeS!yt?(iaj`x-QL}O`RpnPua9H-W6zRbEqvW@`a$ZG2T(0- z?PB*$cFBW9lk>x3bam_0!H+g2LqYZ~$k4p!P0?6iY;(7xNl+zHwlg73!Yw30FMqSX z1`fWY%Di#D+xp*!#-Z!pjm63Pi$<@OQ14C|n@Ac4j(X9#yp716M2Cj1Ol`4KpBq_! zx29H4 zwE#z&yFyR?*nujP3@0YH*zxV!#dUuZzbWehj0;_^^#Oid^}j8pDNNxS?x>#sbq{xa zZ8lS)dD>{2uJwiIcCS?RIBW(Pu5b7!VxQ8BD(7x=^u1&~-m7}0Jl)OHA|XHpwWSm{ zo#wtRm!(@oR0c;08 z)#>0c7M-^HJ*|xS{!=#@Wh7tX1d{CB^2#+&bLj*KN#YP}W9y;wBceW=SD{I-gTx1d z57u&9YkLr1$)va-1yaF?fz%{8Yem^d#^EXs@(h~tiCxRPT$|-Uvl*#ypjMOIJcAyF zqhwSlLuQ!-xP^qGHfLKv{vio2H=YJXK#zFof~?`qfjo*864*Dyq$jy97re%C{7^z% ze5AyJDpYD$)XdBbhk?Li1Fuq!3mv$Fdn@9gHrl}%VwmXvvNa^pYm*iKIXe1kRduz) z#4H3Ksi7M!r*!+FlIUY?ZD4!*K!*DD`?pIc_O)nd>9A4!6BR@yiscvs!J{imU*%ic z+RlsYjW;d}Sy!M7jCp;=D=LQYpx&#=e!Z3!$=VX};iGqtj`*4wl;yl}vWQ`FIb`>szY7`fj-9?}{OxwVpeobY@w_*qr6n^iN#<@% zT_(wg*I)hr0QASXU(fDu3sLvZ@<){1S7vP?t~N=g{O{2DPT|h^cgYJlhuDWPPg4Um z8#asZju$b%#kG(>&u9f7F`ro<4HC&ELd|UHz8c;%Y1j~qUwk@?ysOnJ-bCk{%4;QF zq@!iRL|5r|_FH94{T8!3HNQj5)9J3CjmZhYAOz=Gpr5GQH(7}>XN&0Z9)E|vHqpPC zjbM5=9KT^78^o=0Z6KFMT;%K^sI4__3`jb(!%Z8k?)x27JAZq0y`!V!S;h1FKQJP; zqfJykSXp745z*&Q%B!p6RpLcTEHUP5$Aj?Ow{K4YS*T*Bo$Cvbef*Z0>agL;m%o)% zRmJH;4){QEIEheQSy?m;>)(SJgnPXQ*WEeSj=I4WiS~A-oSd9s=-P8<7q=pC8~s$P zWxfLwX{*EH;!1i^(dR@7w=En7CbforPfmMlfZ40LJqowskLSxSbTu?&PCgt*VqjDd z8XekQ2Vi@aGY`wwM=rT}AAw48zWsgT#kx*swOS9;k5iN+M2b#_;qy!toIC*)BM zUWyeY>7vg>W1e2xpA+2vqSa|Df9|-4B=0Hdqq`Kx!fGaUqY8@%<5thQ3p7P`Q&QY5 z-P(C7UAKoxHSZ6!`n;xUsGg+z#fu&L-ZDP;XoG_hY-XAYvD*v!U!f{;TUeh;e7ky&7;e z$-&KbNUwinpxG9P4mEGP>s*rGa0vR z@@SvfebrK{Ja9{J^z>Ma?hg zO#p*D-Bvp?2(cI$&}t#`GjTCXOtm8<{|(RTGiE#vO$Gr)-GreY8^@%a7C&|i(c zS9Gnr%2vnrM~CY|%o4HpthXXL(=(cp&yE8)lBR-1%Gk8x(N(x%82%&F2ZNw{T~jacJVt zSc`7(KO0yAiZu0xbP0`SEc1?-SI}oYv>N>)DJ@dq!JK$$NV*!L`1G$pMW^Wbi2K;T zMOIYI|Lo*(C+7{0E9C#p=VdCWj}P}NNxz(!e3?8O%3wncvoW^`T397Mdz@}_!$hEHNaUrIq2DrnWypf~ zP2XxDl6QLX(tHy-tv4H!*%03_sxU~AN7<#D`;B_t^xi?nObGSpmT6j zW4#AF;TqG0R-smmB)E88^lmpdC+7w7_$Y`~#IDx~sE?0DnKH91+*NN??PtcT6B}Il z3IughR?k2PSOA&Vln&)@4pl6_irv^Ts>n>KpZ8=9$ZC5;JtU!e}B*yyJmXV+bTSms&ewDp( zGve!h&wjBur9*D#(XZdv3n>Ot?M|z$$ot<*XpX8VA%C5PdWpDF=$4M|DqIeF;KUjf zz~k$w*VkJ)UH|LFYuOiPY=gpr=|3IqeS!PBB=BOVx{{W! zeZ0nhPS=g*X{H3_Q{u58~?)xn&1W@Z9;7+#Nm8_We4cp0{QZkp}Y4OO6U^Y7!> zv~K*7U0K`PdF{Bf(&wE_Mu^U_P2hLAe*hlr7Z#Fc)lu_1T0v)(-zYhx# z9}lcuCR!M}nIbfF@Mt`+ZW+s$A}E5YEC@qql-A+ZygPuR*)gC^)r3JiTM>M+SzWNhG%*K64e(E z+pIcQ+o(nm_OG7UUfMpCx>z8T$Y{MdX@u{#RZ4wpe-@E%@^;F+x8>ZZz1w%Sfgphy zDk2dP5ez8hyI_fY7!?)MEM)v-S#dm?wt`;kUO&29zCjwF+P*ACG^X%R{1GNEXwUrizK7{~J!;eGEMFLrspXCa2Qg|I3n-$^8x5W%Uqzcj4~2 zT|a1{ksVuA9vOn4dDSu~ljYnOY(#NDP)Cy<^5c#crIlz^#TPO+yGz|a_!UajrC%BQ zrS>v(cHJAv%~ikWEe}&>=p2scEoW|sHGaGI=B4w<+mHTRLRGh;ezs=4w1d1Y{mL+_ zfILq|Ckg9}pXg{cdrLC=nrBp)pc`A}(JmJyiG5s_t{N-)bTHDx)HK=~OD*>A!-@zlha0Y>c8ewpgEy<#l*4?qsA_ zexZkPKRNyd9nDpmCMo;%$)+kD#BfqA6i}J5ve`Ht0|UvshoSGLSfa|*^gOt0+5h9}FQc;1+OA<3>5>qTE+qvC=@t+Wq@_Cqq`SKtq`M`gyE~;D zq`SKtzQx|#=ew_W3?2S}A)G6Ym~$R;>2O!Vab}7tYyRJEyO!42rRinEO7w=|yrXsvnb5MDrYGB5wf#xBQVruya8kjc{-?9WM>JQVTkNFW zZy{RH=B6`b9Tn1ZunuaK&I_aJyEtCr{;0EW(xFjDoK^OuRbv#4c0F!(ZyWlFzMwNH z+L!H7ywLWglGJpjQ?lC@lBED1CmRtv1#+>;SqjOuv%s>sEA*$MEz=iI5njJCdztydjpL%+%y(T_tQ*r3}xjo-Py{(SRXLOh?E`; zd@1tVZD)*p{pG4bh0D#6A2{E}rr}55@)zz@qU8QUD*-=CCGLa8M$f){e0i{I*)zG7 zp&+MQXpZw(^?#9F0pvh%z|lDeyOrhq00lt{l~vF5TBUf0U>>r$dwwLOt_f?)yXzU4 zrI!?{5|Q?=A9W;6rs-K3djICQ(+%)D48PTChongBYa!i@P||g@Eg-&T)Dsj|f#o#~ zqWNB|atlwp0QY{b5u>Il^fa*p zI_Y92OG=Va_)G7kZW+>J-FhE?laSUCP`80{L5(4sC&qbsJ24GXT5^CYmQwuq|42c&q_N-{CgFz^`)pyM=n_ zmZ7+{MTUp>h4($7;D0B!GjDujr>uDSh8mn=d3!DHQhXIZw+-R{Q<(Umbx1+3P;z}; z8KP-dR)YP-n*TnisUFXIe8t{t`efU>>=~n7^r@(QW$uLX4O)7ziRz`B%)1CF@eaUf zfKV#uPJHZ7n+%ifuocEX2YZd@D~ylG9eVNHA)%oB`dVF9lQNQ$WC_~yx;)4f{R{$P zC$-NtmcY7LPS@x!hBh zDdSKjRaFams&0;!`0W^78EYhj=NvE|yDdnvXu!!fIo4ElxQ+kPb{@@Pzdy(p7In5` z>V}#C1p^*>HFbKDgL6e@u9|W1y5rb2Vuj0NW^xkiD%nEJ3S|VPMp{fvVAy~3M@kCM z&l`im#4a##14nSx>Ww-!ZI4IT}!Vz85jt z5s;Q<;!VzTt#iJxa4n3(XJ8}lR+sbRs)28ReO~9$PCra?S~JebM%b-k3o%LL=$udY z8IaAsY#jKNVKDO&zC)5-{ifhzsSwWp*ZKMElwI~%qTDH zTOAiIf6$p=L)y)xe9Oj z15$HYqW1;h*lV;(7Q>AKk-0e}yB|@!?9IA)8qn-zaNR8N^5@#}jsy(+E$C^xlH@(A zZXu?+^+A!BtQT{ww^IgPklRKw)mHn9a_X1!7W!v_3Y^J39lmDbvzTtBml)+Ay?3qK z9``E+nqEre<< zOO}Ct?xu5+-xt4&GBb0l!6Fi+(IN|`e5lIt=|C8MPe=FcB?1+udb1uy!0W=k;wt== zL`x^p`$<{&O_p`!|AS3l;2=JM;hk7^)j(UMrvAz+m)fLK<o@n4qKQRrchbUNT5vaZod2pUAVMqSa|U=UKM3cLn+Al5XT0rWff}H`ykC9Ue<%q zjY4|cg(S1mW!{h;tXTQeT~76{0i|GZi<*c6msRG!%rkdFp|?g`^bxzW-WA~ggbWt+ zzgpFmU}HUZZ8NG+Q*eF6F(zNPX()%*W$S%H(Z_L~g@15iI^2g$7TRFPj$Ivk*Q)Z> zyDCEzB`=^RK}KRXVr?Po1u;&YR?a2HopW+(1n)o$vSemTFI2~$3@)4y_xC*5_g*%`T4Z&LPzU=UQrO5=^4LfA98ZH8Xg?q;L0y{G=_x zt7m+y#NTa*`d|G_!1|Am*S)RMwFVn&8nS_sH8LqOkm1uh&9m&8p4yXZIwg7CPT2?s z$}o#RO_;TqyXX*hv44K7LDHs~^6eg1+QTbN%l9lsM`1Mzty_cNJY=0e>s|(Ur2qTq zwJbd65!@FOo{~1&?5}Z-Kp-Y)b!jGIfy}tbs^tY_{eXnOCH=de6xD#Uh!cl1M1*@Y zxO^VY@(XxIkI&3yTi>*`R~QsOu!pTJ*PG3!0JZG6Uy)x($UyCujeQy(oPv5!+m-9U zR}w-K9Pho@Ck^02qIR)T083Eg_TXf<|0iLDh|;@pKDxHsU!cQ&?7uQeAb?bMd6-&2 zQvt@a^YLMhUNbATq(ey^qv74p{|S3vgFp(0bmPa_%1225$a3-OeyIqQNqLi5iO%rz z4TSdmxB#BN_SGI3^e?lk&g9Hw?|=6KGzDcEg~T@u*A0%mo5m8?y0Rzw8(F4M*5+L2 zoZAB=kF`pl$LANqs@%SD#-|1B+LmeL_0UUpl?=232?D)DkBK>MRiY1j>d=s+%ThR( z8kgCAEt&iT-|*S?{ytz!xQZR?IO;meTR=^Tx!%K5lGUWEbSYK6*vy+bN<~e5;v4Af z#{4}m0f1x5EJ^Sn z!hS;7@g5uV2ZXiU#jg|P|0!z%bVW&AqIa0_%@uezH}&tSIkvqpGl|oJngCm8u$MQv zuAvs@e3`W1#uLg$j&FjYMm#wJMNQ!*iWf1Q5?ELKVsA%9E{&_)77x+gj&ulIwsVO5 zXU?_gw4p zwY!ABy$g=pZ6V}6O;0!PSAxr~HizsN7uRk9VH$5={!d9FNa=Yjvnes$m7)n*9A1}& zx9d>=PK#{|k=1N|`bgU#!0 zz~9dg*2)U@F#W+SCMHHsPR?Sv)ssw~m0N!}b#Q|ED=fiP&)pH_E8M06du0DIEM?13 z`hbe8+W#(Dz)IG*$+`U6=-0Kot81-a)$qHX3wcck|DT4X^Y;hg29GN)-=K%KXT{G+ zuq-1hTLxY|pnEZH_QjLG6pXBp>0e=8M=e!Ns}dGsl`%M&QhGKlkytF*3Gg`)?#*~> z;ev%lJ7Gk*NcW}~E$GImGlgCJL#AGjIZ{XcsU+>wdeqlZ-S)hb;B)6tY)n6x%m)@)59kl{pFPO z#$VD!u6eP|KM&q_N`Eh!X)=(SKNBBc@1qgPeG3>)+j;98$%II0gQF`>U=*;Hy2g&e z!oniB==>9SW3e4_#Ohhz=*5v|B(B&3&KZRrm_$Z_$;sij(h^n@1o)Z(>9thv|Nr-P zJN#L&+Eo#W4ZAcFas@Pi+u&v z^@*1c2{h8P(jE0BL#P-{wulj`xy#r-y8IR|aS$grwD@Y1M%2x<_KyN2w$Dn_xIY3Y znz6b%y~69-mpX3>KEDpTg*kMaG8er``xPe_yNfNXcye%mpo`H|NOr`5{VZY8XgfT)cp2_Ij#7&ocDkY(a|f0N@ZM^O4`4ISCsZ2OP~^ zg>KJK?Uql6_7I1`;*ZOh{vEVxr6h-r{;De90ZcTu_|~w0>OI0>!{hDV?*Z{eQ2{}D z6_q|P84E{Hqthj(q7oMJQK&a63M;deq&aL!kNiZP{NsNyvJ=f${N9*yb%`A}a)jiQ zEeFn(Sx>Dy_HQht{~IJ%DI#8G zQHWvT`A2?o_~ybykLv^jEmPWjigCv;U`?s+6CBxtX+{$Gx6h;pc|c_S2`7CZvo8ou@vJe8#x(B0`v^2GzG(ht1*F!*}(uytAy9%#%Ua38n;vd#9({m zAum~YYj@f&N}HLXXg;3C-Rvqp!7N?* zSLH-UV>&rIhdVC;^S=?5EIAj-L7zqaLLfgQUt801?NI_R&*Zp9d>41=o%Frl3WK5g2i7}Q}Y{w_gc$vQnSeyI^R9P zIYZQ4dTM5;i_6Dcj3!9V#@cR-w&%(DhuYIIR<++WvN|D<@`L{v2*LhTyK=eTuRV0Ad{tJ)?T>xG z(R>#>K92E(g*`StUU%9@1KQ28dRq|0C?j4;y)%%c32+WG#EZtvmQ|-Y()_zq%%m7i zg|FPrWUQu+&KQVhf@epPlmAEHDUgf_Fsct@T8Bnm^Gjh|xuE0WSj4TvIY1u>^*{MC zb_|%Dv}oU(>05sL<;x!ZXDEwa6zU;$#7dBDs?TU(;h^kpb>;TCKCP}?rVX$qoHk_5 z&qh_b1Dd7GY01ubMV|)%vUsaMxZmNvnE%peISjsQ+Ux-8rJEfZX1uCusR9L>AKWp^ zWk9x$KgF+@l+Kx{RA5}nO15aL7BIT%Nc7BW1GappcI#dC^?+%OjEoGB-Q9Zt10kQO zcve$9fQ~?YiK8PWC-;q^N#kC*{!G>m+><)}dCxOyFBv7G%%ARRYHwmy*YcTgke{_; zQvCe)q^i@lj+b>?tEp^>E=yaz@&(sPz$oglPK+8jzm~`-N&il1xrQ12zN#n+59qn99 ztO_qtWsL)qE{E@^Hviw)X9G%~sDw4$CI@)yaqZ;bzGHpt_Cl8s?-U&Tq!Y?-U7Qwa z>Hz>>@6Mr^uuMGJokts56>Hq#D6@&nas0&Wd$?Xdt|%c@n5cxs5O(TFo|nGTGihNGUEH3R_K>#l09j-@njKLE)p zu7!(?4C&I{;?=WAaCLU;JurcNH8_~7p;!zYzyrcv&$E;i?prwHb9xPUt?_}O_NHRX zBa87guaNUyYsrQf^#>-V1SV%zBy2h@;Kumv+qXv7mNj4%>Hx(|6}(vuV!3IMtmDlDuM>6bh|^w);yT2oSkAL6{@ z>8G;PLV+~O-Vnyk>>qvv^(V~8jW(z)E+*Ux74iIuRNPT*YvWp7=Z-0W8YXlyC|9@5 zVlKeefUf|;+4g03j()V^@(^{WvJ#4+Lg87>mbbRYl(`)}pU3DJSD`H;BOVG1^YKUr zD(X9S=Qk@B@q5J$vCn^ti|LGvj6q1v0y8h4HKB`GK#LhdO(dwNM=s>+YYA7sbUOBB zFYni{jLgh8hjpL~zF)a&S?i@#JlWO_FSp%e1%4C9u1^O?y8D01fKg(+aY@}~p0pKr z<<$KOu#DHHdi-X$-1=gw*fog!%WKL;VR?D1rJKu|o7pG8XU>%SzE`cWD!n8TQ3)TJ zoAZ|qs;rbdwK~ho%hT$M?iEjD4wR;14p~ANNMZ8tjiP+Xei-iF$hR_b)BA060#cx@ z(`}>RT|dF5(SLim`XCXPyQazX;`D1|MO!Ls2;5cr>}|_w#{aaw$UO zY0xB|^&EQ0f+>Ji+mxjdb!7p#0BFVEFIQ-PwervqPwp&-4??^I6(l4DCm(WZ_cLoY zUX^!927AgJ-!RK?W!??2fre57!fNR-R317`rqAcIfjDPDBm77_6a>!V>cq$}Ii8~< zq2QoeOK~N8@k^0Pt`|4B^=9|SMkH{YOMh2U!TXvkuDu&g-61_wrZ&9+ycO2Ku)d1G znd#i-X+QlM_?uNy5)Q^`K+#fWnpAmiGd4c<3Z7X1yFe3Z7Uo}eNwQnVdE+7rPugji4MeA+7?kDu2eYGeLVtU6 z_FtkT_i}5-Aw}<@?Ws45hy2&pu7b2=be)DdK!)?| zA-%4;bi4VZW902hn?KR&l&ZOC-k0kJUx5tmBe4TVqNj@`zINLMZFPIHgW0O!rTa}H zvxbB5EOoJVAm&%HSOM4{FqQ2Aax4iqeo=j#AV-53GVYcWOx^_Y^0Pv&f{bQ zl=(7uvlxqt|1FFpWjz(v(=38?a$@v_yaXkXQDrC>t5AU#dC#dt(Bpg6 z*Vm8IiT=L@HN?$Q_xSu{O_#_1$4IzFk5dss3RWi<6Y(Tg7hq?qe&McZvBe`sx4UhU zWTct2&)a>IxT9yn0XuKt#E3A|FyLx60Qn>#@JbN|{qANf350AQ;4o`J2|M&#Vrb(tT<R20DsY%?XxyQr+>ewZTS_`MFIokeR*cX}Vqw-d|`i zhXy#1yFQVRpB-ZyIa1F{!)8OOcYWoz#6K|~>vWHKSz%Jlpwf}Z(f;d}9nxq%w>=FY z-)Cc$!D4iXv)Jf9+F*3gsu(JO)mg2y-5w!*yc6MrTu!#$wCvi53%3&b3*UG4egO-F zkd+g)tgZ?u`Ojq_KH}EKDQFj&x2jBgps2DFCwyG5#=VZgWr$SX`w>`C8Tot5U`1k3 z$d)6oqv=PImu9M`#VhJ(nT-v_Vm}zr;?O_Ar$f&BEgkZ^^Z$n1&8QgNS!^+ zG#qVH_0@!~EhWsvE()SWqH+4Xfe#RquSY~23r5T&5&BrB1BLW1HVp>>YS6* z-G2nDbpv6r_k+!5^9UY+3GD1ex{Z*a;9y)HCuV$BlVc-7Aa7nA@7< z?CS_i;i_{!)&k^oqk5n6D067D>us{-{9@-Px5t~fVChli;|d*x^Ddso7s9~>3`GV{ zWfEWIiE4AH-I`Ow79*5(rFUm0o9_ z)g^LuRmaQQ+wuOSr%^rfZ}ng)8u{^BPrTPY!*sAU#A10D2g$>B$1Qq5;Jn~172X2c zRp{szCIgqMun9@m)nt#Y$V+i|d@(1|pf5ck$3ilgv^1#8*Gu}es$()th-I#INOwJR zGGmAgZ(SJ#_o+k>rOQ*cFWN1_>hbLTl}e5ERP*xF*?xUIfpYhoDpCj*- zI8)bi7AJk|0OPa{#~J>htL??a#B^v#9`EZN)cbRM2TYN9a~w}v$QCLMF&^NMzfBkS zU)ldYTxi&tD@mL7zA{*w)gJ_&yxq7xK+J?+Gv|u_juXnaW$A1m&nfQRb{1ZyrXu=y zk5%`Avu(j(l?2Vn-U+wHqPq_fLT?C}=e#Jgo9>`>)V)a+K@#6*AG)z-=C4~N|mN^#^_W|AUx zKUA<7@}XDi>kx&>pCa)dcae)J^mOmch{cQ^m*#xYAhzp=&T*NPs+_RadcwE5t4&8M zKQt?^X`&GGw)e@?3_G@Xc|j66-y=*FtM_!EhUW_SB5p{l8-k(o#-}!a7cjqHt5$5q zms&%}>*CV@hpIi&>N)TJWB~~YNjF=jPB*RW{{Z(A&!IbpsJx;AxXo!RM=MZ>f7!vW z9e|;J ztdRVEL$K_CzB}JU6*#lO)B-MuWuPpkFTiUomYS}{O0_#==Te<^MS=MQ+v(}LF!g^a z8f}#xXsrek;`8pTOPgx2vMhg6LM%4E5i7>%A2y6{vzrfnV{uvJTTPGOzxt53HLBNL zX}JBqxP7wx6+3e@H?~*={@Xt&udyyZ5>1ic$wWy$b@}SVf5%73GV5<$$oX)%iN#oQ zD#D@QlPDj8zT#bB@Nz;QtCUVucp=UDu*%PgGiUFjT?}p(Q~E=2Dcu+0ySEsPBQi<> zPm$5lP$76MiNMp>YAeONw#-zO07WEWuw;)D=*8ChXEe*c^}Yi0Im5<8@9pnjn={8gS*bJxmdUX<_i-Q8r*GEBrNCQb2=+^^Y&8pR z_?{b>$ZW{oot>Y6xqM$u@au>u>&+|A_;?(ZY7@t9OC)SJXN5C$+91PJ?jchd#sXMv z1s=y~4#GdhX%B<&2{~>4JrxOdv`OD3viv$EeIx`0N#{mH>8v8QZDc$UCcTFrp}*Z& z{k!6wdP62?ewM1X$M4hn_xo~eCT;?)DvH4DJ5AW2{@O;IM&{StFpsUS5`fDI98_+WUW`Qfgw($6}=?wWzV@%qizCD*v26t2;_uatOfW+7cx+Qe)CT%0Ml zrD?e@PrcZ4*M55ZX7jM`u6PB~WQh7c@Tr*EO4F21(d&Z_nn%-WaPXHS=^7EGrt+}9 zzi{?~WUKApJo+p6R5KDMM$(_oj}Ps8^s|N_pZ5J=PA?`fqhauzzZ$7IITH<1-GWea zC3GKdHKn*NPkM;5z~%$s1w<`}tA(rILzm1chzKa!Bk7*!I}1s`b24nneaV5b?_bx1 zT&*&t+PmV0Joy3&)KK?7a~q)S!IJnT-w;-5e*UJ(Q7CyKUneClK(Av3DYfMLJxl7b zQUtyY#vRR*zf~l6Ec&5$gEiLqENQw&H4nyx7VlvW7I)j>8^XOlOxitE@4a;ZX8~=@`#w~TCFNCvh?AH=q%$Sc&X^1$eSR>mo_;R z%EI&p`DyvGGufqN3-Z&aQF|t-Uo-tVbR0S#D8NZKljx}@!zFLHj^0w{E+;k8M;DHV z>X$N9!X{V$!|`H>-*#lrXVqcnNxEFp&4l!^z=RbaD0qJ=6eV_ccgr&7ziDf0yS~0n z|Md>+dS<3hd3pKofdLW@a^KEQvRAKOfnku=#?OSe2X-S6){U9mHd`x}b&h6=H~Mzc7fV~1Zh z_DzXT+&J^F%|74vI0PY?c)lZiqse?BvA!4ec6-7yqrFKPawQrmzDS!{`R|5#p16TU z;k&AZ>FGFgY`S#WY%wx`(mP)fVPf}Rnf%i`ERMBk@};@}PvR_LzSh%?{wB2uGy%1` zpMuv|VuMtjtk!T&7ijY-x}$r(x)aDkcLxkO%Vv0i1z!jbDP)x54n^iH2_BKZC%#}+ zJIETvSA>w@?|moCC>|o+K&h5$F@RAj*)npO>HdL#!InTomi16yrgl!DyS9&*eAqWK zF&x*ZXMyx}mM9GEm&+_uK3Kn8g}1Xy7%t&R?-G!@&e9SigKbaT=kyTr@Z?kW@_U3q@#aqW=bzUU||ln|Or4#Qn(YBM<6f7BI*2 zm0iEI*}bgL^5K*oM=Eno^f28VDo65uit2AY{rc|m$+Z1+5B<1GOW|B_&_3(uhA#A+ zM7o0#loZZ=Nnr-0SQy4!GS8o-C&Bh*fq?NbTlMzkjl9N=%h$oa zz#ktJ{-7|ODb*INo3w0>7Q9)cTe-)f*dj7#| zcKrI{v(7cC^gYg%l@;&+m-pf`cv7tN3Lblzwe&tR=;1=*``$PMRAKF0kCxwT8J(ms zPkgurQ~YX#;@Y7sOyRq}Q2~encumY)Puo%6eREUcxfJ;^(Z)uqI=aHMD;;-dBqLc? z;XJ4cFZ$h4$O&B`9C>dlqF3P!qGWku&xO36*3Ah?*fd+FDYwd)(7dX+{K@W#FWRcr zbfcqnzG8`6x22}b4Y}D>b`54tWW4VwaU(JROq8!xC4m_-#=pxF5ImT#Z4)L$EQ{@B zqQ~bR5q2u^W|tD-#~SV34QO}*z6{XNw+J{naVF-R+*=Q8mnAzf8f$7UjSsOno__hJ zPt>7Pc0B)6^n0Sh)W$!VKA@sfcS{mX;J^4d%yqbYyH|Ynj09NffzF4#J@2*8j`MCX z5w>^aQF}EBLeE6ecjt13OejnHAfaBW&U$Vb@(MKDY0KZ%+QPS5vn;eNKUW-dF=EqX z`CDp#v5>zfz7v^yZhSTz7=@#W{nB7eohkZGGTlR%N2~R8oUNIrx_YI5YEE!I4I)>r z?8^{lIh9gIAF?*8goDsg42!(&-p$w(PHZrmc|<3`vL(r(fDC8Vq~6UTqXs)0x!$6< z`R}z82za7mqJUWQ^ouW|@s>piCA`$nXlh2c?N}*KQw67>_7k|xA1ueLAts8|gGmKp z(-`#Ktv*12jNZLsk!)2AY-BXR)1?r*(nDtGK%nal4 zPY)M-n8*zL4{n;h&ZYmY%su5VMB#?-A=(#=9sMi8U*f_*|9g-H{X4dJ862!)g2bHB z99v_f>0%*%&n>*whYtU**! z|96BfS!RLL7KdF60%)=zPlv~gng#mEy^3u<9JW$wIUwY~}Oa8u?_ z^IUjh^hOg(l3!rrk3d(c*Tt&&%Vw{A?`El@)vzy>8!Xs@1xg6LtiN;568DtS&4ouQ z+iW`aN9HV>y$UQ)r@dBfV{U_PGQ`BJ=VvQ(kMxM#+n`s#glSTMFQ$`cc)VT)nc{H-p z?mVjpVt>hn#snERoF?OsU8gr}@sW|ir;|jO=4}6zUv%Z5vSYLxz|qms5#uqhnFD^m zZ@gg_lwa*j{wed8NMaq$lX)u~j@O$nU+`H%f@i0(!+*g)lZrh>k^lt`HH4^3aE+Mm z>g?GctTPZ(D8qJd%4TOiAwK>)s5Gumda7I=2H7yNv7H;ZWhC?EezjwS^GWu{y0aNG zNni-cJeOtHk9S>UWMmFy0^oF)e)(2{Q}ERA$I$`Q}^PZR|o4GFwEm-aAJl4MlLS5J2q}=4Y8nW`*1R2@O}0t zLX-2=YCpX}-2T~Ef64JpVFEM^%*j;JQy44t+K(|{*f zU#A5I>6n)AjMxrr7VOsZDkqI7V;T>k2PU!-El%zQqpDDmwrMX7u89U;MAA;Z-^|Fs zHQKh@k~$8!-bnSeaaY2K;_&3_YHZJ`HzUo%LeH)UY<-Z3_R;+w93>Oxc(TdzPlN-f z2Q7jZhsRh)_%5#hyl=&2V#b-|eT&-Wa~nXXH<-wxd+wN57V}pNKs8)73+(z%_B%x} zu^fxZ4;Pz~k{WC_!7H~LZI)|FRYoi#VGar;^No&7#4g9A9exWUE-u`}uFRn##I7OW zg#(>3rR~WI%5d&ehWvbB9wh>v1Z_3m0$hiH+77rfeT4~32q-9^CHb<6l;5aPODMq6QceUf2H%fxC`R?k-p!0VG83jd*N!t0m_5D#O z+jEU12#dPujmmefQ}rB{q>Uzv-@X@Z{5{DF3s(LQ@0_P>;aVdHN<}8|HicMOn4x@I ze&#o>GP;HEYVx&8^>0DlnouuTr682q%34m{sk(h9x6KFw3k*Udd#a_XK`q<0Pzb3c zKLO>aq(J4eG_m;#}`5-_x>XBYA|Ymx_*@Kk;%Xf9E7~59VxB zP%OvaJQTC&qcBCBY9$vjTPIoHVR1J&*ol=r(y6 zTX&SHqpK{U-(53VoK8`Qf0kyvoEVP0j4;8cyJ5l;(wbKoJeyfo+h`~q`0{DSl7N8` z$|QdJ(=)_(U$n&<*Z*_=UKD@t7#c;(rvP;FIXU@_?A|Ew zTB9li1F|>RXV54;w=)nlZr7fpS;Xwx8qX(AjQ|vapo<`(qYHaJM*|fYUy62RTHJW_ z#nZyV!%>Z=i`N$K4m)W5HvuxcH(!TQ(sGGsR+E%uUKg{zzK+q|crle!X+9kWIwZ4( zCN8k?E!WSt04s-}*e3Wan?iprz8-7Ni;T)f_f~~FVGEKCTFLSz2fmuGIZ)P|A z&IOb%MAwPom z^DnAlvsYB}3L6_d&ywV*(;k)Gz6>!l!$ELuJ-G?o)uoG6Sj?lT`}iwz1|hCD;w~s( zdP9jPo)d7?)v*(xQ1IR%_hm<)y%GrMkM5d-32?W>2Q{_DeT3&-_xJf}Vb7AT@e_QQ zEU|x}@^TKs{;_Y-1i8~<@~B(7NvR$hT+oVJ@3uqVjPCj9sK@zLpHLmzG1iv+^5Ehn z*xU71a+8Fap3#hE)Pb~EAlO1^O}d}KQmb1x(`D!&NIfgTK+Io7I5tKETcE}{1=jW6 zVS703SqWhI7(KyFd-UKb!$+`IA7r30#yuCP*NqbW^}U3~vao8R*X>t4{SNpLyf(B= zh#JpG4ftO-srU)9XEKNzuHyfq*e6Q{tYMwo3RwFp&mgwB|H_9NKVH9~|*kWZ8oKPpLK( zAS{BSqob_~RMpf-Nl78T>FXz34UA@qBz)MAf8GcXv9rL-W-b?#ir598z<>P)Q0}j? z*BeURl6*F%nUmG?btaHcxiyzzgL93mxpw$_}xn>L`U3YjI1FMA<9 zI($a-(<5?AU?w%N{&qwerY?pXyHDy@9$&VG560gzKX@3qRL8C)OqsIM1;wHf-u6%< zx^w?D;dwChI=q*j>f^L6v&37@`VUF0rkp$M>eC4fE25i2DS}E$IN`jf4B0LE&$x^>hr0`&|LXDs(1%wd(`w zt=TebO7NI3ITY;q7I{cWs=2gEb!0je(f!wV$R&KR)^yBDjp z@u_t4mo+t7>W!%Lupk_D9orzY2@ta1O=db+s7w8r4UQ(DtS$klfjQ0YBSDA}Kl|M@ zWKE#yrsTvr!8u+VX6Sd10#z1qJ{l^3r}uE&8qE{xv>oo0hGwccXl`x2^NZ$k|MisB4@@7vsz8ifND z2&$m=PJ^_zo}OG6NgyTfy_qk%9lI41FCoLblTc|8y|+aXf?|q)u*4oMl6ve z48mcfdOj5tc)lG46xQy|#C%_priy^)&I@n2rBK7f=OPbaqOl=MP0nl(4|f;3ZTF7z zTsBlaVT8KpP`WrQM(3hj{7X#dL`1IZE5UY>tNXw5`v`fQN=(?5p0`rZzjyvOlY#X4DuH7ASceQO?phs;|XfLzDE6e$Hs&@zTtI8+OC z@gr*;7B#hq<5$G|78mVa%kC)^dg||j#@Qd1nHZo7QM;yc|#=#j&6E-S)6b(40vOyxqCPP~Zpk zASsTES(wucMgluBQ(=#~P;dK|ojo25 zocgAxlRRGQ;&=F=Zh?nZ1*e~yN$X2X1AvQOXlW?}z|yZblN{&ybjT185GYexfVVyO z#d;K&2=>?OkF^F$#9&*aRpk5odxyKC8sOL40FQ{6nV#-3Fd%;a@PL4f{1g1v69t;# zSTx-H$G{31{4pF!e^F&TO+if^$m4vK%1{Ehu_{H)t`&kV4vR^G4{1zDqAXus(OnWS&1qjD;Jkw|BukW6Kg0#+pc62!5eP2&+X9#dv`!RFYU+&vX1Ck7}hu1;_l9y#Fzq- zP-LW)2OQAZjO$NZnV#*%^W4!u)Y~=1&;gI${ivv@4xo^R{b*uBTO#fVlT>tmXDu#{ zOfQj&+`8UNfATvk-0JLoO(d{e7vf|B`@g;Z8n%Fbcf?Q0$X zaQ;0!+@oJ{GPaIA%1o~>_bK6d$$^S<{iIO2Vtc%XzQOK*Q+ppoO<0>dNG3v@wvV)QmJ~jPZS|`PS&4h&6SwLH=J&U z0t_Bhx@`e?VRN>CDv0vW#njx9#rkh_h*bAS4m{TH(ncBulYQVLfU>ruT(2MZ>GPUc>n@mc#`DYDTAtubBdfAhsBF0Whkcni0*@VCeo^{PUVHkf7&w_zwJrH98~Fc>$kjwwS6A~u zTm&spVWF>V^^XNdj_r;F9WjfbY2zR@%NG-GT(E`dzU`)p%=d$~6}%=Z+c?NF`& z&J(S2ee~}Dc)$b%1_!^Tr1S@}KUq1s&dURYd8@NQ(3di&`?sBE1Z5pn09D0wB_MJukb3lae2v%qI&Ib zD~jlRf=kcY$XZXkgUd%k@p+Orj=(onrBKmf)ra95t`oV{ft}$_Y3m>Hg>DCwEc@M5 z`$GAvKP=I22*1jFlwl}76_M!cK51i(KD%~&0P?W^nmffv(5?lS=@PY?Re(3$6J_TP z2|1%#P3O??@jHORqDd|TZ7T;@iJl)$M#UDXl5(T;J|){P0N1d2%hfKc3QNA16C``xoK{69f(2+6-GFOx(sF|uqa<< zhBbd?(a!tdF7Q%K4Rb%cXV->Y-`z27#3)*@6Fm11+^5^R*^p|W2w3sHTIv}dMupJS z)C9W|j$(4=d- z(Knp-ho3$hZ*)A94%Ym0aWKY$XdBcm>p1VPCtw|;Gfz$-KX^W_S(W#*3OWi6^ zYOL z4kDT%@f8+>{x++NJd~7Vz`} zIFXCH?dUx#mntwQV{G6inM3`FoPOBnHVcBRK5j6u3=lQwWl*)#T;TQ{*qyb;mvKJ~ zFoE~PVz@Qc)CRCMT|`S3T>)#}SW8I(l2u5#wG~93e8Z(-4}c`%G+hu{ClxhAJ65Q! zWk6Fn zInOh*XYV~Te=8Xfv?1(2$+VcRg=GkP=fsw*Rs+dUI%|Goe`vT-veAObKTCvFlfA=o zLczL(cTn#{)zZ|OjL^GG4Mr|?$1Xb5A;VA|xE2E?H%Ku|8Y+#nPaqJy;rTB0F!qiN zGKyT>II9Bsl#a4>Wuec-x;P_41X%GDha@ia*s*>}bqIbIX>-@a-TpBM5F9t>e(hJ| z(U;2d*h{)f`zH?3|N9YIk9YOe+dZ@9p+$BqUq|IY4{2!&*8V?Xe^C#b9LGC<={d6 z#`7mg%%t{h!cpYd&2%wsh=GmFTnX6yenmi&GHkv9uo!mFwHts^w+OnVSq%s&aT(5 z3-am1!^3k(8R|=1DoyORhvH3?1%&6eCaVs%GAw!APQ~-AAJGbQRQ4u5B7E=@@)Hrq zYF|WR>$N#ZT9=0h{h&N0(~Q1{6ZgO$JEsiPU$>L16IdD&d*S@`AoJ4M+uiBisc{GO z=2&y6>F5y1SQC|&9sa}F(Pr>C$-#*53HU^iec^i|4_0KT5f2Ks9%{EoeRl)<$h-x) zH_^x2u_20c?S~a}wGF)BC@XWX!hS(_F?7#RTRH#;_B)QT^n~+*bDaDop)x3mehF$m z`kfxY_Tmam{F)p=r(m{*jlgl~CsVev7iLr6;{ki5CDH#!t)A|zPHb^n#y4=rPs>*!8Kv(ljdrP?U8UKL}+`onAV7(#awtC{d(-`>W z3mVe?!2xtfYDkFfc%oLNLea_Vu=&zpnQfbxGYA49@|+#7^L}1V+}SuLy=rmKZR{Y} z*BdL#tz~1gFT%|LKQdkNimIPWx^bYJoRs@Xd^p=D$YLbzAH*N7+%37Y)L zZH76KOUZd}<@iRsq6>_MYhS#`R~1@2hD3j#gj=4*9%2!|*5D{=2ROUz?hQAnvVv@7JCd?Tc-le*!OfYHA8& zofU_WP#ic@A|fKtP0@jzIqkozkmPc zFJT!3nDh0^mo%6Pm?;*Ta&Wz}m^%HrZ>eK*jRa2^4)*x?I0=u4s<48|W2Zp>9_B6kBa6Pa3`SWE)W+uEQh|9^N{rv_N4+#jw0PFcHzLk0_fiScsY)!KVd)m zSN&dA1r@TFn$8b`7|Oh1#?luCg*R{RST>vq!3V3HQ}ES=2~ zm&BsqzWqi-gl(%8dv!R6#r4r6D2?D|kr4_cbVbv%&v(*F6=U^+ zw*;}CqqyN%oy=ud7?J*9*sJ8SvT`&$=-ocPw@WU+scD`+hmFEya_}hu&IRIPf8KvM z?s!m)I^FXVo={;LgjtC5!x2Yz-M0kOG8^vzT#S2=>;rRaIu0jCIEVfa0D9VWpu;4{V_;~2kY0u*BW5m%+WM?7_ zl^>H`34wy?nuND28MDQ!VeCKbbmPAE3eg1erJT*?9~u}BrAMl{U%eLitPiySKy_f_ z<`Ex84DLm#uDDjKl^2JHL;1*&rSDn;m@x|j4Iq43|d1kz%aA8$;? zI&4jrvCw^8(RK=ljBP!d>ofj@j!eg zLYMvr2^?n^_L5+zg0!dBs3(%=j)4MaBC%mFjDwRV=sf-cN%oM*RV#us9&1aU3?e=Lvz~ z%5*)Ml#t+&ACi~=d~kNqNWseb;1fC?eW}~{kmAKvqcw;&=kM}X5;%=pAl`yc(7Lm~ zmlgAe#dH@8mTv2By0q!CRmS!0OXjr(2Xn4!iB{(|h-AGQKX!Y$W=lVI4n zLcZK5?EU5IS7zsHI4sgG+dLkZ)?0L;lWD^4?ZKp~>pM?>LNi8oBYX4?0gK?82QYQ` zl_r1xZCEzy_9gLPl5-}(XNU9Pf&6oXQI7xm*PV!n2wCS#XyanF*d#RhTd205G`VH4 z)D`WMY~VcU-w~SQe&KL=eX+xTKDG!EkuA;B6Es9&E2{^-zP^}*tYJx0?-Bf|`VXV# z3HyyWZfnInXZ1>x&fM_KT+KRsm4eDYoPgn=-fOv;af<}pkXnv!9YX2O>N4`Ha8n!n zb^ZqmhC83XUjprgC|+>ETE92=9Xn60f<`QaWPV9C8y-W%uwTvj;TqP@p{#CMG;eQO zRx$#DyG|AbE23-XuFsEA(zOQvLR3HG(1MJ70 z4@nV_szqx$nYpktngtKH5rTyPkLKB0PO4-tF*$kv?{F$4SdaEsM2N-OAth<|4zN$u zOiaNSeprSl+tbvOGwwSATJHAfMH-bEVxilcGSdGd<@iU9WrqKC=A;?RIvMN7rsYe(>ODwe^Ru!NE(wjZ3Cz zH@cx1`(wXlqYt2^>dwK>4pH<;QJcKKl|ESsBiq zYiDq)*^20ke?(hzh5W4LAhMT2?OOVSBKFprEBKfFTg+1pa9!b6JH4}qHP8Pu7ofSr z>s~G$55m=B^JH`q{NumqDvhTTh%Kt;la9yBY;*pn&{Z(lCgI3cGJ3@Sc?b@)H+OB!|;)lO6oKNZ=Z9Y&l?K8w3OQiDKnlxpG|n2A4e! zlRs$Eksj_BG3a-^bBG;55`b{>SAxY(HBZqOvGN46rrY5lN3rS5rO#EJ{gz~9zOwV> z*L(HH>$v$hrZv(s!$!l|SmYhQtiZoYi^X%YJ{}3xF}lp~Gw^|S^d)m|IzZAi9!o>s zk#+ZniTT0cqGqVn7B_kZR$TzYdqYx@Ykw;@?%8&ZQ7!ZYLG{DPh$ zs4ES8>e=aHC}NO8XHO4fB@<+*(^Dt2A5E(GZhMZkGE zJ_mRi5M=--*Xlk{%|eGa`T}9nh}Ck5m&=h8N*4rcg;b>WzvV7fsau~O+!8|wF8;7bf@ z(`#nMJf@*paHz>sq>fn!A^;pCiXi)Ixtv8mIxc#k_IY*H2n;)IKap?W!@v;G?STTZ zHz(Dtr%1CdJUQ9D<+#~<#{g8b=tAzW$VhJ}?e5+kh7A3v{pPKa5gPpFr?j-g2O)e; zhl66f2L}u<+D#7b)VH>_KuJZz&$#L1oUdFYdUbvzNoHu^QhVm_@4vXX__{!a3D&0@ zOxgC!dt5Z#@R`djVB)eSh&C5l$NjZg71aMfN5s|hS~7YBIPtxJiUjBypbUoU9bgPZEr_lu~HReO7zzJZ-gEeOJo2x%t4BOyC?D9GevjTAwm8Kv%JN~#Xiyp6Nx|Noj`-QGVdVWMT2dJy=e+1e(@EYV! zF$r*RTHq5!dUtu%nTS|Ey2}g|*ylgL%t&_3nx{F?PhYJ&uaO}BSX)#b|r%9x}?rz1l2lAM|Uhbi%?j-aNct*~CC z`CF_Z1$fff*niKO8v+A94C^6)?TA!Y7bj2*XX)dAs^9uCDcLetFj_cYR5fD&;?$TK z=R&^He6|A@B1wVdAj{W(G^&jle6Rlfi}L{iz-bTg>Jzf+APKnG(E^7Jv{S5I<5?Aq zWCud`9T@OaJ@-&t9d??9o_qpiFi>D92LfnEy=5a*@{nzr*bRF>uJmc%K}CHIzXbA% z48WHf#4^o`qtUEo3joLc{0AHX8LUUsj%T~A#?;BRq%fsXH00y&u;w6AK0ochC5F(l zLi=aMiW|X$+~afD-Rnr*z1V5W+~Dm^)b94V_XrIWO$VSt)~)$|*`znY>m$w=TUAI- z(9JIubLU#>TFvh6U8jTIsnxYnv!2jUMM zA?eWV)^ldU8IVy5Y>eRfDHYBSTAfN@aEcg!tNt=Kr-OR9(+`>bAgH6ezdy&_KLpW* z0@hqx;P+86Nt8^aVV+Fq4VT%#Cq#S(b{j}X=u^u3I6g8kAP-`^7pNNtyRD1kHKw#1 zqc`d%#Q;23AYQd|$OxYOdn=g484S&Nw^QU#wyI`T_NjZDlndX5gIrSnu~Shn@r(!_ zXa|tv+u4b6+}x$5TD?8ynqYY#*RJ zM?&;?AwGqzsz6znOMu77c>d&qZMNVfymk9_%|;&|5$C2LB^A}$bR8GDoBTQI z=tct9O8Q;$Hww5QT1T&>c)|$nlUpfGcj0M%Jj@NxvT)#z2OkcifyczK@K+0AS}SJ_Q)4%1jIvwjRI|>+Mc#8^luRLOfkek!^2etC_2GlkFaVl{F0z8 zTs{GFQ4KJX#G&RhPr<^-@JSD zmF_7;;+^VLTmBX>06RKx={jz+H(^+<4(O^Boqyh6>Oz=;LrBho;dmlB?2NyLOtU(W zej5y0`fF8Eah&ch>oUkMO#kS#2d!1t)I201VYIk@a7Xyrw>M8NmG$N2Z^#1NuG!B0 zs0T)^ZwEh)I28X>_D!JE`<8sF^PN!b0gM+oMs?B6t1C$Kow#>msd0&4MD%?*A8`L8 z_Ueg*_5c;$9bx!+@a04Sl-rBx54_1CLO17u?1ug2Tt?VhT3Q??Q_o<|w2F#K5ZMcy zPe7%z+l^fi24~kfKYH}2#_sHSEVFjDN^b&eSTR*QwqNNZrE$Bwmm`-d>&|#5j@uXq zKB6?h)%AmE!r7m9v&=#mB z7#a^sk^~mz?WqPwuHiM$g=Sa6_!BKvay9rMAB5a_NQ=|s}x^`zy{es^%tg! zRTjx+C@sOFQ~>X#icHK|39Dm;m(Fp?Jx-C!8Ex10^##w3oDxQv0h0}8cFb)ri&mP9 z5VE;(PuHG^Pj3VK0NNJ$^msB0R5ezaS@=001~b~s#!4T`$@SZHgoK0`{Q443B4kZ@ zRQB)RN7(!$3_oFYrU5pns$f*AC)Y}I{0wV;U0Png0Er2c^w=ZelPgGo6$bt7ZEd~) zE%pcf$;%Dp37FsO{Q9k6oRSLH2A}c0_##d49*c6o&szIololwPzQU&hPXqHY zKVgwdVl5M>q)(rAT`kgcnoWHP48%z0vu}ZU_dwSOUTv}?Jwzpd3v=iA z4hlGepKNYzA)ne@d)YDk%Yyrb3c7y#%uEW=aL$43&P?9u0`vRomy-@#fY%wobJaFE znOI%z)R!dCI#Idt#(woxv5~?sx_NxVF&!A0y8+a!O;)kMh1ER|qRcBep$lj^Tw~`3 zBC9v?#of8Fy+yDiGxSzcQQVA=jmhUnky~5uO*OhFZco?hvJ!$-#mP%U`bP(U9{O(l7J&{L8(eD~cLaa@;N-rk@R|uurd zI!ud9)L`^8w>vQyeQ7hEVm{3%{~HP(?0?ZJSy^b4LV{bfB#~Oubj{lqfOlJGW+gR8 z_T|zW$+@%DvJb{Bb8?nKE{D&Mw6xYMhUbwgz)eD|>Inr_W#xrpTbvECUeHa}AvxbnwtIEw=Lotbzn9PVXKD3#tu1`msY95-(-JG53 zaqH*oY$_Chai4Fa&i(uM21+WZmgeSL{hbB1;4`Cew3uz|9lg1rIohEBQ~Sj6-eL#B zO!(>Xi~QjRjVg}GM>sgA(3HM5vuJ*6VY3-Gr7EHI`MFRGFsy_aD!Cvd@7glA7vL8SCMy};Dq#x0%$z*?H z%)FlEd|~nz>B;3F)%plVkDaF~m+J71re^q4IFoYIpD~&8Nt)jJae->_ z$BFGVR>vjD=<1vPU*^!liOg+(ZWlto|844DSTwC%hT_fTVNLAuiQLr%#H;7iH!!r- zs8XGgkumpuo}x*qU|q`P!GWH!as2Y$;}IDl7F6%gk7zym6;f}qhSyR|J(1L6?qL>6 zwN^b=EPk&B3Dw%hM)HJDzKHX6?iqEKl0*C047pj4?YKJc0ourq#4yGfR*0Gpd`e48 z{|KoTs04!&BVY?EH#y>{{p);NZL>r#Q0v$V#UG%!3eOwl>yutCJ$+pGrdLJ~EjTRy zMgeuhs@vk^!RHbc7Z-;)X)#_Nt-_=M^2l!hq}(vPGhOZ~kpfrHq%r{ncm=vN9JVqx z7-1C3=eYgN*!DPepwZVC1sd^n7qeyJj~xM9WMpJm+1dRX85t@3Kwu+RqyqcetNs+d zrR`l56cj`v!sn9MTU;MOsP%AF_x61DNcbEWkJytko)v0Tr9cCp!Vfbw$QWNkLY6Pj z4xDWSWB~rKvOGj%(TQm0xR+zO5FBOp#-4qh$TcoJJt~6{@u$ zaYwzdg(E_G+&1}M6gvKgc@N~0a+yWb{@4kZ4Zchw>usLQy>YqYcdPiE>T|lAf?cn> ze1OL52r@bqHyxb+1zhuO1LYzZG}44}dkbyD=2EhO^r&aQ~> z_tDoUk;?i1saR*oQs1x0M-{~6GH1D#i$1N-mXY-^Nc?B^y_3ms#j~G*F>r;FlJb^! z^C!k`Zi0)dq3;Jm{ZgymX4h_)Vk#vHii+*X2N`n8wf8Z)-FjRaQb2P8iOb4?IYBp( zF*G%9?}Bg1QBFz8?uUm(ZzqJQ{*~U$_ci6lWT8PpklvpGJjw<74mo%md+ed zg`GKr=nyjE%PK3gpk3ilq4J{!*?!=*d%%-8RQTPHl`xLO8J(D`5Y~d~1rf0)00uK0 zOU-yD9nTw_%=hDip(q9oPa#VZ4}57|+XAlO(C<$Z8-76?ZB|<&z|8r#aFM{q5=OAV+4BdOg}``#jo-rc zZ4V*!X6z0k6!g;e6o{CA!QtKf^Or>ASos-k06tTf&)y;tpT+xH&RAy6g`q5|GkZxy z7$ke}dG{7gs>_$bS>)Fet`QfiZyHYtj~eT8VY*WJTdhbtQ2^~>{rs;+{}8`^K@b&j zoEz#-NxeQeYTqH>Ow`-R_j`pbp5C7Thi=|Jvj8g~81-mJH}_;#Sd#IS+632;*pA7a z?Uav_2u}(7k-YD(&p&oiH~wGJSNv`~oKR!C{6qo=BudbFeY;hQtqzuDz`g_Cr-cJ& z+hInw__sH`{@Fg=`u2ZgS!@)UCP~U|PkY+q6p_!Gz3;*e6V&LCs=zcwPIa}&y>S*e z@+)k@CO*vGa(0gV%=3>^yd>tP=yB1ANrhR#=tj6cQRVsUO3Om(N}JB_CQ~xG&@(l> z&x$lD`aC<#Lh9;jf^`q$u2x!_n?LU~X-JgmwZZ3raDJ}*wiK&|A(Le{(oyH<=Q!UD ztJFI7%H_MjN%+t5$H?KgCMtRJI^=sOp6>F93I`qfAjg3Bayy*&{{v-#AJ*(btoCzk zU*K~eS?=ISC!F3(=5_4s2>4mlM}nY!A-c0*L(!VwIJ>z5dX*uR-KO6s;bnN+lug;gs2UmwicnrNQ#7 zg@uKygAIHdKP<9`>o>#5Xg*awe*KayNI#I0-1F1&uDdvW zb!jPXL7UzImK~e=A(oWRVFi~!N}3p5hVW!1M?SB`f0;LV&*s%xd)gCfVtGcTXV)Rw zVYL})f_rImt#b~Kzr%OsE}@&?DZasp==)SwjU}o|tfZRy+LBXFzlt~j5xDnNOk;rb9*jASY$s|Y&cLi5hV@{4wOk~e+KfpWM>9SE!7<6*Y zDdMoOkP983?hOXRhvArP#5YgvrrdfBEEeWIrJAnJ&WCC-Z2XJaw`|wO(r-f=dtEX* zT-RUszTTY3MO0njfH(#QEpkuhYx^h~)3k5F>kVP#3Ttx!$bNrg$ZbIuO zuf54|maU=7v0Ean$g|zvX=2~B1wd!~_d8LRPatOvwXrLt_;uCz;E*-gQHf+%Gc7r4MZh5Wr~TCixdh+o^hHCJPyM-B5Vju zBPIOwL&F&N?t#)?XM`Slu9Qor@%wepnW6rg9{Ut|iPhWF5|6d8UTZpjdwP4w+X+|W zg(#PX;>tKi>%0FK)yn5KH-q3EBF*0HzRuR&je75>f){D4D06lmOpH`rT|Kvb?Dn~N zO2xX*^oFzpE)DYT-k!wU-Zkfo-r}5!(|(Pw7i&6Az9P$`XmHt4U;3ism2a}>UsM*T z+6rWQxl9KK7*qDXiaa~8I?6lP-`nf_t_cT+eQKp^gaJt@PaP$i-jjJx6O@Y=K3f|b ziNN5=pPX-!;v0* z)YxJ{VJ#<>|EbaDi9jAE2Kk6czf{UEDsfE2G4+P!Hn8Ja4|42j(2AJ zYmde?#>Ejgo?Id#j_m_4CnskTlqK1{3ByIM*a@7bee>F$C}|>r%iql>X?i_?IFwF# zP9&nRdwjfnb>gq@f(hA+ui=8#VTwD2-&ybP!Nc+rgW$(OL;?xRy$K4ncE&(%b->@S zIty6i9Rxo=5v$G<_&M*?)Yv|>A99Sogr(Qbv!1DU(;#vcYSj6G20fV8ya5-(Yishy z!q%1yP{S35hVRwXpAo|4eqWxwfhe<=&*`(DR4WKyU$7}E zJwHcHSr&3od3w*giRwItnyq%65-?!;o=&FlUa5#AXPTfBwg}3(Uw=wH?j2$AGTYJZ zKP;=`N2`NW?7^al+~cDvAz6B$1~VhrXX7OBb_+>(_KC^mP-0f_?X1JQF+7J`r|W=;t%!oKG-^h<)mEP_~|^t zxh^_|Vm6|}3(GbvC@z)(QxYU2l(|tVF&qAv zp8P(;DVl>(CO$5nk58Af@3~%3!nyqD^r#K4c8&c8KD2w15#d-WVVQY^ezTOZ~U_&Vk(mZD}ul>g> zKP=;X@vM*d3GHT5!ZFDg37a=6hg%KY1SAK>ibXT`zxeRM^knL`R;`YfkTa+j zf0JD5dS7kz`Lj1_=7L@n4g2is#MM)5I#XbZAUF zbU)EN-n@r^aYSS+aCEi%q<*JxJ?7AXkQny#EA*rQ0g)=51Ry1++WLSd)#I3GI9oOg z_)@#A319G(-pV#rfpT7_&oFhcbY4RVbZOu!zK!3&heRmkaf?l^2$vT3J_tgTtfkDy z$H!B3j;YnsDkMRHfgdKmuQ8r2dqy#9CNz7a?v0FU8;%_xt_@?7vqgY`Y)yHB+?|86Jd7B#MQSfiDyl zsn&6){mXo7*>~xi=~>`B!LC)RGw)><#Ct(WmHJH<{fFr+vrLw;T8u5Oj|#4DBA4YY zumEmw>^zE=^kqzZ^&Nm1_4DUA0Obf$`&*lvDP)9-i;H{CHrbyn30Sc@(i$45HEfUG z^eSZ8&zdQE!E+|ezO`c75{f+pO2zq^z_nsIJkCZ zW~P2RQ!HV$7f92x5ACI9<3pR|t9a>71kI-kcu`#SJ&#bE9{Td%1fh9jAWjpr*>r7m zjL;9i#B2O(Y0o&Lf_?G^xH{V=Yu>4~oCMIqVA`7mt9b}v&)fjE~_D6#-u07VCi1vr(bi;-n%C!{ol8)uP#Ig z-ve}^rl9vBpoAlgUr?;`Z1GEDRw$i(lA`8>ig&uYHRe)a#u?L{v#JMAHHA?E@cwm& z|K`dV7UD{JCMn(ma(OUuWZGE?`lCI@Ws<1cKitup7`_2M|Wbw7wn9V zXGH|B9$=!p5B@0`yv@XdX+N#NLH~_bBJAT!Itwfly!?x@Z2BEXbg^j1|3_^l4XoJ} zs@25^-@c3Uu8R5Y@y;T6o+#B4rSGw@fV1i=V>irs`B<0W^k=gn*#$@gu)ZI%ckvK83!@0)Y9_7-TP!u`T0rYu(1(i50jHgL52a! z5x+qzHD@J>9EkTs^()tfUveP4P(#y5bzR*fQc{^4g@lMzE%lFTG`uvt!ya%RK%m$hYYe6o31D>|dg|A3A zvH>3##Y%lcgE2G!Ff%hxp*OaH#dp~Epvr7q61e?57_|a35awXQfsdcQo9!jIyU+?X z2*kw1V6ca1zt+yj>WNfDR^JC^q(xLAtVEE_w`ij})3Y0+tree6)_+}?MAXpKPNp78 z3E_$p&iyuVR{ViC{-AIgq3w@b!T(|VV}*iIN%tL#@QOs7OaqEiT^=SObqM29ar(ZJ=On*WC9 zQBHX8A;1RW>)&Unj274Cg`p|W%GNehCh>3HB)GFq&H6|lzc7nh-m8B=L?ltQEr6JL z)tkuG3TuOsWyJvQ@;PjOoUT18d|yTalE{Mg06mR*Q4FFn)@k4g_&tJwtY%W@kQ)|N z!0k&B=sw3H-oHGBH76P093>!%2f`>oc@R(EpMbbW-xYNX2Fhc&9fs-+R|w?5VZ=I| zErZan!1Rza?y=OREEvxn4)n#c3nNOW4(o37UGj3H!B+r0a{(u=|9I4NlX7k-qCm*! zKmyqn(HR}Zpo+L5*%qS^bJUNhpik_#RXL1D;IrHO6AuA@s9vqY?t=E|(^A@JUw|Xd znmlm^xSKH^*&_qjtl>$$kZu&aHqh0)bAU3UVgOGw*ej|b8ZDBJVP z%cwuWvKfE1mcwE3=UH#uzB&v6x;n>(tb7*5q`}!s2+Z%hnti_eq=G$tq?5gzegwV? z7J+4^##U7?q;7_$-+c=n4JQlK??DuQ6eUSQo}Uj^Sa1(n5eOW!C;5a2>oLdA-riun zwt#e%0``V*kN>G#>EIqpCvb;H(%y(`B0tcXZM-7kc6uNuCl^90l%k#UhI3Jv@-A$0a*9EaZgbex)z^xoJCNSn^R@5!tR`* zwGo^P-Qbz)MYwbS*bzvr5BM{Y#VQ16rcgkG6n+BvdW zg4xf|BWdMyS3d(8yFU8Wb8)nKK&Uy}tl)7w9?ww%dcJCQyLo-Yw8ulRrCTg# zINh~V6=Ue#yKfq#st>f@D304KiAYu=t<}Z~YiDuC9Q3E5%L!Q*jTsMc?Tc!6<9)oR z{03(glTg#_C3Si&Q83LaXMPy>!0)HQ1;{QaSzl0<-|@!;_6wX49%1nhR_-DvKjfe< zT)y@_e9EKAml;c1yDSJ7?4?3j1lE%RV1vZ(@&56DC7+6klKiku^z~3jWmwA7bZ&Jo z_2}!LNS&xpGrjcm)icB!_wV%1Op4DF$?dOh)MlD)oXFu>pcJ4OJ~vO)4Dd#gSbW=V z;tLiB{EcG0UHg}_8Bg1BL|$6Hafw1xDW^j#W~WR=6LDV^1g2X1=b@!jx~UdU;L&JU zzko|I8@iYLZUUEOJDAmMzxP9CKikcmH+UTWKeyNUPoaW0swGF-7tM!cLLNP57%O0O zzT?tB2K5r8wJ*WJ^FS*bA0O=PHAAWZ?)%m2*TZHEYUNKI92`K1e29Y+vBAx~+3b(IM#M;)jLubHtscVE|a%$?mwF9%Lo*rUeEYWuA5VVws zCvve{z(R0I;5Nl&B_%ce1gOAkfhYrpvaYP{te%3P9(I=^Nx+r4b&rpS2a1``dK@-u z`%9P?QTp+4J(07&rok`7oP^OzF`ojE->GRprfi0sj&{G%HzF{g4wMn4B6U1dQ-+Mp zj2e$cRQUabn8ucyG5YZU3>5)Q!W(wNIrFJl=>sCJW+h+c?Kkm-NUN(wZ-r1mO9DDZvXmzs-^>GBc@^=~c6x_7=n=5Q3&5427tgGIeM-*VPTLjj{s$ zBRjGi9>kwKP2!!1ncw9J{<^wJFl>b}7Vk%8rAUlETsB}Chi z;>v$tPFWDLzLYeoWBzOr2`qn~Tma9sQ0~8@`TZ(U1h-bY|A~9ze8FcEtlNQQqVjFd^Y+59smpP)Ohu7h7<1^Wq=M z-V}meH3%y<8Eh|11iZ#o{3kwIj3tZ~|-lgitd42Kx}V=k={B%h|qzvfL4qu2>c^P;kMd+W{s4uoS)h_C<63PNPZz zH7|`{M<|)?$+jl&hwXr-YKTaZ3aliwDuAv7^Ia5+cHeiB*aBjBNAD)zQ57gXrKWvE z{HPVIh+uwN^x?6>A}uL;Oo76Zv>rR!Ht6ukaTmwZ`hYY%~m#7 z(2K{U9tFf?)GqVq!~){Jwj_u>KPM(oF)*;o)q}MR(evMkite*sQk-nhEKVG45c!p$ zCsb6hgR^68hHKB-nm^>r6JFk0`AZKgYwL9N%KRu6RWfq&;fwap&U&)`_;WhydIzgS72x2T8kJ0OgY2BwOWl$4cCuPX>hS#|Fh;r7V!kFrJ%R%@rTjp z&$Jv2*0j)r#VYrBeFFL?{||!I6Mj_d`^(>(XjzXyVQ_<Yr-HNmO`eJo!XyTNi5PWLuv`DoX71u=Q~Z;__=pwYiX z%a~GVmxYcOgqLqPM@A%b&}zN~rPh8YeE9^vuTZ-xL^Ar;moHzw*(Y+w;~QH!+P+rI zd(IRS;!NMR{f-^QAzfzn1TKB)C4?`ZKJGVt(rRDKF9!5!3L6O2R-5Z&6V^{7~N2 z`}>tW1v(8qe@tG0r8EOpjNkcNBn7y$w5+VtS_qq55LSpxLs7~(N-p~1F;>>qRi1W} zAYw$iVipo4k??Oxs^4G*1e6BWP@o)d3H|)~i1vArj)5%Vx-n_^Ar_%R*JRcwBoMl6 z{=o24pt(Xx`5ekEu3SK)wh|QBDuO=7;Z1Ft=(H14gvh>Bj9?x zJG|U`Mpj?NqUZzNnnM{Pwuo{V#PN^|@bfS4mNb={Z*YE$HuF=!7knJ-2Q}h43aVm} zx-t}_Z^9`>o?o58i}dli0~xRtOneCEQb!0mbfPl$TVDSb|B6G6XgdYy)-gLPq|tQu zl2utyCOj_gciCbGH1+gC&jW{c<1Q3+@KC$o2Bf{tksY>A;C+<6zUG6X z_uuZkHVpOdTzqIKQ>5~?>=g=P02V}LG&HoIz$SH{$Ur!E+@4ulk7h^`w2gsaZ~!EQ zoAa!blM`${Ax?Nvh^Gd932k6OemeDvZ$UmH*5K7=sf{C6j-I~K-#QHXh5^fHbVz%U=Fz~x@!sc&o^jg8~zlq*Wo zW{j>U+xl$*(Ni_HwEY*J2>>KPn8>zWk&R+h+pjr)PKXJ=|oy(2P|@iiV-yimph?a=C*v0eiSCNLW&N0_~9x?iNy4G6l%@rG>T-$!r=Av^$p zKnXEX&yUD|0@sM)QVnURgoc(ONb^$RlB8$Y(}^-acr9VoS6;NA$BwZ3UoZLdv8MEv5qxk%ueb&G_EGV#MSws>F$VJ(2(5+qDQ?k@;! zp_>PdrD-maYjEv5ia^jUD5>|D*StkD=~mOxUWI%G)YvV9K#e+|i`67Bl>@x*5qF46E5A)wKoljUi z`)eXEk!vCPq3i-*kvYb_cjIMsnGb2L3jFN}D(!%mcqGB;#dq5?RMMXP_Vm%+I}rFS zqI^ui^S}Z)Hd0=@G^yA=(0}5oOVLZ9gXEd*1Mfn-B8m&f$6+gzeOiJ@!V>kHM8Gsz|6fy7?^*-TCXsixf zy3FHD1xp0XK0ZD7oc-v`M#uG0EgSkn>$(03Bqawf8_(+GPc*`Cniv-C6xsp|BaX*F zf&cn+ebsvmBcy{jrz!)9*bQ(9XkRhHk>+^_U7^{*#LutZy8(-z-5=Kpd}DY&6@tZA z%=cm_a{t+aIjfH=e?^4KXGyX4=D~l$CbSLkbe8uFr0+m0)D1_Qq{R#-^ib1Xf;kpB zMD}+uJd#qQ`CCsV5F-P65>K3K*L&fryPYi&K+S~q3G}c1wpi`#;(ZfK%l?>Nq4}ky zHZUC+&8B}yI3tmWcvoYCV!!c+0*3zr=nA0!$-;__jScNFh^F1{*!X-W7PWmQ41DGu znFm!xH|@u(Q>eA0%Agj-8uv z@An#EW|2yqmp%rhB~M=KkDGchV3Q*M(w+~so7yw8WZA3nD;E$Rie6-AU5^f#+~v() z#SFft$6YAF2ryrImxZvP!fApu$VukzHO$O|d zUziqjM>PL}&W|EMf>dj_*7Jw%?fz9Y>0!MqP*G_se!%!E4;qEY~7hNEHDxx)e_3-5#WH<2x{fm^0|Nsp*5fxYFNhqATo_pKl*5hf<@Wmi6@?1XVE#20 zDyWP>cJ@8qnqV_Ox8t;&iP&hInx0l;y^*SD>~B_D%G8|v5yhYpL$QMxNAahy1J18g zJVMn4_x=O<;sc_lB}t3x`+FTRw9>k z`Xzb@r`*l|78>&6ZoICX;DnYqamrKlxZG_$2_of60im4W=Wm~>$LuZ~5l_o(SD4%7 z;=*+Gmstc;#TG?_S)manjwkYHgX`P4R+E+hG&y|oRONQ(B`N&>A@=^%)6(!)A(&n0 zcn04c!dkZON|j~x7g{IBVGaG(WaWpSpRVt0O?Lx6W#3|XX2b%m;n@nAer~(h7bM(P zVF>Z7y9TX>0PNU9`rS^RW2J^au%Mmh`tnRVo#}V)SdOr|=sSPFPmq4*hrF(_#`5fHutI{y)_yjhRBC>f!vUjTUiQybHf zo<%3Kg%n!+V6C=Wez<>G@jtx)a5C!;C#o#vKp%&rbh(pgnX7tZpRZETcY2Q;`mexf z3Yzn?vx=4(CBcF#ZXe2-=`krPmJim6is~Yvi(+xuetd2hqY}FyYYZ z7YtD7@h9sK9f}a0IkL@f5&oYSU{WrbSEgc_DUQuHCigxwn)5R@iq8Z5@7A;)>_?*c zG(82r*o_AVSDu7vP}Q+{)%Y$iRsP+*XED!f9kRq9tDt7~z){y&<&GAin=eOo~g2|)n~r9?tnKoIGaQV{9x z4(SG^lMv(6A&i_5|+So|3XZ7A@6b&c<7iZhM+a@PdAW?UAbv1Fj?PzybufGZH)G0Ic z|6jfqNHlO-wHMjyweA+|U%5vRf%AOZ7j{&4rXhjyHvaK?`0n~|IcZ1mc-E^G6!%gz42 z@{FO^!wfFgtd1h#Fe!CAOd8?>whNT3f_qNk0ZQ-SQ&2AuyN?lq8V;M4789p5R3~;6J z4PL>&!?{BXA}D~JXFy@d zSG{j7Uwi`=%>+*xT+H6~iFQ2T<>jqEoxXnGqyLn`K3}Pv7HojRAISuZPfkwQToulO zZ;w%Rv8VN3aaPQU>zP7;{hT;H?1;!_266=)P zIy0D&BvrH|@ltbQ9Glo`8Ki&j7e>X9tZri{>ZD5idSn)Ng~bauVS#eK$c9*4nopfmlMgMAQs{4y|rZ339 zM_@rJ(-%P-Ow;4-X&BLP$`;jTD@6V{a`i{7D)XRH(M2v7V@v z%I(#90r)j2r{I{xXDd7#&y^d0U(%?nJC`N(MZhx&DaRUI-CLFQ-$>$hz6-R1UqAr6 z`2n%E%?>(CZF}u!q+(dHUQP#CF8Y& z`@aVd9hCuGy^g0IHWj7tB7KolQ#3$re1*l2JRr9luET)P&Z-o2KVky*5;YxQD`>al zAFTKF^*uH2xc@t55d#~WbGrk>CxU^U-G@$2yT>A~DR{Ys#pJ1>l;h%^wP-y+!F3PV zm9XOf(^ngynf$nV(@sa8&f`H5rQP_uJOy2=`TmMUwU4?#L8M>Sb6tnhn`$EUgrP5i zd@B))>P$8{)tFsmH=Vfw=bx~ts;V&VVs&**4Tsg*5DHk};C`vMmlcTpi1S5{o%z@- z%t|M=^V+9@gI`j;YMiVf7^2b@J-SVnaHj3u_ZS^vTz}{D13jBQZ5FM1%|20A7D#W< zy*$IYI33mDnc8kp!oe&D7oq}q@qNhA`Q7V#KrQ#ec}r6mSN#7yWkN71noSjufQ#lU z#Ly-xW7mMDt>NN=1N^Vm;MEfdSD=q67@}vE(f8<)&1Y{}m$#}5bf9YDyCl+wcZC;kQ{iJo6yWhP`g5th}i7SIZX8I{M6Wv4yCn(WJ^)&&y>2x*vnZ{y76 zg9EU98|)OwI|?v`Oj>8m6keQP9&%gv0cwHNH33`&0mk|ugP;%cQO;-n{Ei@%-E2+_ zHn%Y4d?VzS^23z_=q>Ou`GC?#A>a5ld>k>*y(kFU^yrj)fcSv9t*zdW)xp)iQiGi0 z#l1yFmrP;Qqpis{IOzBHhi=Wr5?$?3kyfDBCn{r)F@gZ-ukA4yuP8ZVF-(Q;k2}KC7AJ_R%be<`jp}fey zAVkm;V`UAMXg+TaAUt3zE3{5|2}4^^`lp)-afS~CJX}6bi|y7bG7$Qr;{bjH0IeRF z7xb*_L7wn(@|P3yir$T!&NYA@-1Jg;|J$LoW#QmPM!|Wy`zG+Y-UlvCjfG-U=Q{zs z2K;uJA(O%f#_5H5Q~xH3r<V$(U&7Fe|Y_{cCwsEut1&0dIsMQ1;k?*fM+8;nC(${cvlQ; zfW`2O)$b6)E=Rof)8L>))GZ3B$X1vj)rud0|CBjqk2Sn`pu?h#8RgeFeb1ATBBY2* z^4es(e*XLS>)T-sy=0bnVsY*A3XvFugvTQjj9va_TiuD&gY351W;_Frcn0FkWSBW@ zlfO-O`=j>oV zC}2$2C4;;D{o)=WINM6gDqH_`1xG~SL28j-a&q!lE*dHQKRdH<55x1N@}BMi$oZwi zif*q)I}J4LK=BYhk#pL?0Vi8fIoC`ek})>7s4$-OtU=>W#QUO&kX9bkCT* zNnlw0D`{y=hFHJ4I@DM`ehBqR_qxP`sRGkzPCc`q&1^ty$h>0Cz({RrqI&;guZ#7| zOV6age^p@__4fAiQQ!$dEFxg=MRQ(UW&;TTi@r${DEuiWeQ8hOTaZ52gpF?6mo5Mt z#T=-5PR9j-N`XT^*|7++YMP*oV@~##b0);Mz7~)AJvDU`5k$CKJS*pWh6579XY1ux ztg+H9F;%q5o|9tQwe7&Ub$@%OHi{#JW@2J~YiOp0NGHon^7CBfI)uYZN`6*tVZ~^A z*8?&r5Xvzq=6!&<1qKE>TG{{*25baA6UGaYfUWVwW%WKlustv9-!=zaoHQRZUAm9} zsURG;D6*9yZ*DeBJgz8Wz4Wd2K+!A9=<%f;{xF46Lub-`INHJf{0wS4%Dv)|WQBz> zF*sEXCQi7^z2lL(EfFsuY(+%RpY0uvf)TdUUJ!h($lBB$y=J5U0CEs!!C~9-S3}t4 ztd5&HB+Yv~tfJyMM{^UgfWBXcCn8M{Nx8x-qPV+14_5e=zwd;f!ep15ucBvQ5Pg~C zpG|{H&d25|8%?XGq>9k_`5S4Lv4WlO-g93cFs?lS-P2IsY8(o;RlusdPU;y3!Ea`{wYf>W|r~2=c6Whj6UW4gJufI@U8%wQaSa9?X{!lUBlU zZ_@(1+z@xnXeI`8+ki}c;kE%*k5WF51i+}-6MxCFAG-Y@#W4>h4V4I%C~R#SxX;V0 z0V>qI8HJl*G^nlf>|4juM&SlI%;(SL$k7n|iFkyB;tC4)L9!A1M9<2=7g9uEGS1Y? z3>d<_^He^<=5%inIQeBT`l4;QYlAYf8Hh*lpwq0*iYmN&*FI$Qm7BOPZ`kw)>5w@N zX(&1)qs)fo=KJ?0Z7nTm&bYX>b+v57cDD;fx$~rQL)Hsv{+|( zCPTD9vm)pY{#2Gtnm`artgnv`2DV2kyvx&ZZ^-pQ!zB0InYk%=dB6eF$E?2L6I=@Z z&I&nj5@FoEn_~pt8|%rlZ|xFOwTXMO8xgS``n?m!t`{%1zr)fG0-}%o{qGxKkO-A9 zxH6Cgh7CwUd5;OeDKV0HqCrfzp#IYqywS*ymt#|(;aYACIh(ha8_Jm%K1pYTCrH4b z94|E~sk3^28Awgec$UkSO^qr^kB9^oxjy`_c}ECPz-omo+2WO^7` z!@@6Xkn6p`zt_0bqk&}m_Lu95>1U*)p1@6-5v2)D*kuiAoCPet|GSb5IMPG6AQHE+ z)Zp4+yS{E?;xxa%8)N|q#qZj};IriZ#!?$Le~v%(D7?YjG3T}Wryrcpoc4Z1*KJ0+ zD~T8BYCYMMiKj?E+hTvhuaR9~WofBeGJ`svP>pdt4PB)@$J3r&EByxWj^1L_AyMsA zCwNc{dN;;yq1C0I`~}6%?q*yMlF|o>e(@XRv>6eHjC`Ng|Y7^dFbi-&!M?BFjOM z4p8qyL<(34cqti!_XPu2VJ*Xh$4&C*A*}if+y`vlQ|Ck9m4dx4&-MV|S^R6#RW)5^ zvaOA5X@%7Vm+j6}Is$3nfo`XI3n0r*oGw!iFDZnDS=mgEEP+R8g@-AD+eYADh@n#& zx3>T!nlyqR0Ib(=zcWpIBSw!Q$5^M0NcmT_yL-qSljY7({H2#`{5MEp-lW%-_3smyQYlG}93cf{kxMvcCkrm$yD34=g4OJ}q^5n(& zCC>L96}c&VRK-;CyvC}dhrQ!jIbI2~JLl%)+^=`%My?uo{~r1yjc^yUU08XGjCuJ~ z!wVHKnR44x#%SU)QDV9?`{Lwy^=5)|~FdA_Uj`7*<$1=Xvsr}0#@YvXI(W0+Wm+k%9&{H^Dd+ZVXZR^wl zgY};7<>XQ4$GA!!-OaDUiP;_g;y0v~F(Fw#AbNV?#u`>wXjPBs-)bRBd~U(j(a{lf zery9eYq%8cLKgl0c_cOTrY}}sgL0VXYB>#r=fS~MLSvvGkS`&tovn^%W37)s@<{jt zquT*qr^70sRE|s%7MArqxAKA#c^Fcw$1BRpn%deP{x;R8%`hA;P>ZhjbbHs}<;lm# zr~1S6Sz3{rC}e2@U>wJ+p};}^+3a1e-O0|jgy4K;Ti7$xK1y(+B%B=)EcIO9@NEwU91w}(~zbJMD|w@RoC)(@c|@D{qp6@HUaQMKp;l(i>WZ(0MPzH_>~J% zLF0256jk5=>dL=7hs}Dd)Zq3uBH6@FfDMADj+c83W_{3xura@?6s!FGv6?*R@etJN z(Qo2~hf;W5T-}q&{?THHi@W~F+;NC7QjEV}s_urli5R644d2kiVjvutG!zmUh1N`N zi;QB0qAYg{a;e9jEBl6A#kUgC72k$8iiB$RKX|J4spUAnRP)})wEzrs*3bht&#+j; zsV(RhjS-15gT_5jGH3;eOu^4vo(FaAP@9UoW_UjkvG!(7y0l(3ya>EqV0Ntd2xqweeyS};IgW;~vcH#|F zwe7**w=K&|cTYV}e!$n-JgH@S?tZ-at`@a?O?6*CppM>*w!bn!0b5Dx=_1~`oV=MK_0w~-D{u1ov*e4NWx_0*m8w5Gq!bd_r*1(DKB>hGG0gHHr59EGhXRR$Z^SzGu^+m;} zdoz=}`46ehzjq*ymr4fXo8d@7qTB>42S+qSEg_XuK!omB%zy*6~mxY=a=sY+2uFBzuDy{IRFr~6CKAm8dnrS-qo z87fiN%fm>x@7w@b{G}m=L0d?NfJE`={#MOk|EdF!ZAeFWrd0#1Qn;)0xgC5q_&RR* z4aVf=+Z5d<``pQZ!10okli#S_ZIuLWm1G0j3a+#t4PlO@2j0*y8=VCw_d@!nVf4rHxHMMV5A(QB@D zJ0!gUZir^sVh!El*`a>^oKQnU!#Kd7aIgk1#vC9mo7bsd)(^cI9{(E~12=*MBr}|v zopWhFd=c^Y=L>C$Q*`i^_7Y-GeRbV`bbSrmGjb#6vN~%u6u$}I;HRM>g0I_gyJ9s> z@1$<|39e(aCrxkbS08XD85~CxK5r+qdP}n|KPe;ORPslD@<7zgj85kMz$AfW*Pj`) zPX)1kkAj-)R?UXITYYB7l0UeS@_QV7#(lt)B{OP`?AGy*O4Nswj7h!rZ-GHqJZtha zNvyOuY&`@NRr)Q`EjRO_rPAZ7g(xV@*3q$Ldipx>yaN0kZ)>hkX4@zTk5|nga=<{D z%Pi%MO8P!LR-vWyt@~>qKAzqku^#+YF{c!V4124I9MF&}gU}1|t4maYhNS08Fgn6$ zW&-smrSD8&N3?dLJZ{kX9I{YYm6O0E98Z+Hx42)C_C)H%ONO+I{->Hd`#K=NHH2u# z11ubxIoYeu%qr9VM*ww*FN60A6J+vrb5~ZAm7#D`6>lRjqymmiM5?@^ViEdQh}mX_ zQA|X@JEA{0s?!g2g~(b8C7%YYP`DLF@uj)N(QRz_;$tq23zi3_l5_p}zME#z^{kHIBu!CU5&OcUE2r@v< z0Lc^9Y{Y+mnBjvWu5D!G0hm7k7%!=)pn+IHV7(XAFsA?khdGQud=weuz+MEZAts%p z(lMo5ui+dv?0-cO1QDY<6p&vCrWY3Ip6<_Au|e(!$Z+xBjlRg;1lBE@?w`-IL)R)5 zQ}8YBuO>aefgA{zdaeXrKZ6Lzrh(u89(4d}iTR;U}EmsqI0xQ$EJSt@64&H$4wEe8ia9R0PIM+DKE&~Q`= z37(V|y?G#@5g+#!uI4J#D0e$#04Yh#yf%*7a0@(8Z@(!PXzf2;A1TTJV~t0h89s2S zi(t*I9=CU5LHPJ%txOeagpIxmCG7z{;Gauvyv`4RsNc_JV-dm&O2WWkrFr7maW_da zoW0MwCTKW_Bd>^7?|o&{jJfZc7lVR_x-$A^h=TTART`=qlh>NxSpQ_!r}{Ba;fzg^ zj`d?6`rj&udzC)viu$xd_oFGAajv*dONQb3PRz;r01bS@*;@ujP?AcTKe^?0Z?J5u5EYAdx^-&i|7+nqq69X{YOkWhwj`}o`?qpl)%Lf zbvcTO3~%7Yr6;gvLFLV;w*)BiPKXWOr1EtXY0aLFSHUJ6^zYhjkhZ*YJU1)rz3%l* z@wOo-I_Pg$yabURwnr$gfNJ^+-plAm=hN3O+!S4p+!$rLJYKJuR*ZWXZCw}t{{34d zkuB)+3yZSaDevcImaUHahqUDn__MOIN_1u&-_gAw4wc9}(F7EOre|Ov%F$vpp^hFw z3_K3>TFSy133HUNi!wH84B?7Zh<35bK$g@H3^;(;!)C}q{T5msV7ADXOA|oi@Q|~W zz=zO?rb|3L7p6DTEPPgb&o9Flm!R=)7C}mgo4A;=@{S4TQ{UKFLIa6#uIfv8fZ#KQ z!&Rdc4iHVkpUA~npjPg(RlR(2v5$CNIhZbdsj1e2B#=y!mGc*y{jpMsvAwP?TtUDF zA&Yg$kXN{F7z5JD=W)V@m`4^*fI$+gyvs*E=bIwK6fw{J4`4RLciq(w+k`QU_wC!U zbEmbTXKhEr`9N9^=il)2?@5P*CRy)evZJlB9t+glkEQPG*o^-NuDQ2IZP|*A zf`Won{${7La!@mcOnYCa0ICJ@{e<-~ui@{*V~Jl)0{lq|C-9)t!7eMME_hS&8%RL%W{-(&J zxpNboZJK(HN_eSmfUsecbGEN=)oIHiQu$9;GQ;8$!$; z3Z}v-CAgaq5`vx6aD1J%n>^q4a8j;#6gmFHdGFnU%To0A+Aon^UbvwGLW0)*{UWQw z0O*zPN}4rC*H|c)mLV!DApV8O$uR3l_xE#uqP-b0#Vvk+P`NXG$Ox&-ErWy6j4H)t zj_bSw`cY$@e#(r=G;Da_5q1zMOnmW3rt%$o9-_@)clRmhEVpo6Klg!s=x-S9g#i7#T522eN%0bapaI^!Q5 z!2^w4;CVPSU(yN|Z~Stu>IG6u0}g3|?}`ipnm;2T+HP)PLGc!USI1!a*SQvO3rx&v z%Z7|ChlJGTxu9L|Ba&0I0PCU;1zJ%U_Nv$a`FOSKl0avNRG0y32SqW@K)Bxsvkep@ zES)-c_V$L+$UI0^3KhXi72h1M`&?I7*KhSM_l*%ST0!G*Nh60R^0`{nSvEQA)2&Q- z%ol2U#N?kZqA1ELF#-Y%-n}jSEL5>iyVA9EBB{4_*x4na6CN0t0i#bf`=MY5#PUH& zuT6+G(k55`zzpf8mJ@_=975c6?c5CwpCI$+CVvet2*5(n-}qa4u=#J)5RLyofuLJq z`Xr$rJ2YtofJ0}&rDu}b;-0REzW$K~k|uMtU{7us^8=6&2_}W5yiC5>0xfnBGE)2c zdQVOuL%b^vI>*`yZYhiOn@!d7K=K$|Dxz!uKJbMuO~eX+1_)KPS_kw}U;<5zNsrHQcdYa;f`uFOkj%)<=&CnLdGEAItm^WgS5bv-44Wk z&vs8JiU=Sgi4bDs-0-*Dnf3M&#S9QGw5YEzn-Il8b4(Y|_er?&@;UJVbe8d#)~+?2 z@-M5wZp0W5yHvEd#r&2UT#s zch|WaYjFeboFN*}w;rqV7rIUWNmvFJmyf|GwtQ(~8ks)o==l8n3q)_Fyve2i++Q4& zHnxmhWY%$UanQTax^M(0{T*Q9@JUF_9L|A~RjaZlOM~X0?fP>TNYdawQzK%4#csQm+_3o?VSBJP+_m7M z1ub!)6M=+kE*&eIu`)EkkOB2GaBxS&YtKc?DHCfgEX-(<{j;k-eTit8tSKcLi}-f( zLYV$8+|9u1_Q1r%q|)+~%iZf4^K*--s;{4J!@zS!MFn6GK0xfSs=zSx;QVN@NKy?} z1pt?0*A1q-_hEPNhvYUGKb8mOLcNdu=H{1G&@3z-0#O-%nFPXOq5AFY>!WRi%h85f z?SXvfvl&VYf1_O3{i2Qn8> ze&@WNX0veW#l&&-3~x9!=775tRGP6u=0p3|ju!M--J8Ro+uc3NfgUU%8({^zI-j}2 zR+cF?l}U-=FBfO@b!(#aUmHB$!BJabJJ|R)XS4laI%{c_JQybHu-pz7$U_MrU3`1} z!2d{|Ad9h!O)c-rwWL&m8nrB!jIX!5^T8GfW<$9X9Vh#?YCoQ7@(~BI5i2ui;5vyP zf5k0JdGJ*H69Ws{SO?~qly4RXC2Evd;HQO7E>d<4*T}Kos6+R^{|oQGvcnn1dHWa| zxfL0pCsqQ)YGwmjcVKfus8DLFtCNCfWFdUMjmKdJ@16<5Sg>Rrr?bJ`=$YtG^}=5A zTKPG+vj?Yh=cs9D%r7mOv(LbAA!?fp>Q9gFDyxg!F6w~8Y5n?KRTV$BZ0F#xu$ap4 zT5Tfd@RBSS@nv=;GV{V~0Rw&tQ_S!N@&pVw1J4#{%@}s7V!ZacwUHrq%o>&Ly%Na0NrEs;!iVxTizqE^WdC?# z&fmTwAe&zxmwn&mAB3o|7kwXA9U@TYo;cyWGt(G^N(>Ygq*0`-f+4BM3f`pyRMNq< zm}#_98sV7PiBU%}vl``hcEc5D?10v48h@TPP@*SF z$;h_T94;^iEPM6%-qDeMa{yvxxJJ$itpajzo0^Qv03t};-!}l5gGocV*50=18Vd)< zs8b^vc0$jv4?EsVgt6WHptXRgB04&V^kV`|RfoNo7d8od0?gQiZqxp?WP)B_ex4ui zzIO&8?pQU-{;RrObP)e^K2wJLLy>*so&+{qg)rMV$UP~yUoLi7=}Uznwy|hO3xc0| zR$Pgg)n)VJm~EZm1vbZSYcTq*Ivy!?f1_wvZCIUWDaKX5WX@lVMOQURlH-iLrLZvj6>p?kAyFbmvI!U z?632f>3!3ve;o-BGmL%g{Xmd{Jwl32xEbMq&Ut$)J?IT>rp=*0-g&y=UeEg0!f2}q9TDHQ~<^? zPbUo%jfKo~MHyQdfQ)euyMYFVK3`xZNG6vwr_^lSAw{0WG(MHIfr3W_Mm?--W-v|H z{c`-KQpEy=C{)llWnL{rbY32g#`q&OJIySu_h z79Z=e!(PX}e86B>!N550`P3yf0^6>GHuRpKNrC`Jc2-TgBtQVKX~|wdaz?||S-#q4 z{pHa=fcaWhE@b8ZQceMErcAB?v(3lVH zAnsy73hQ#XU>JZZo>1cV2ZZ|oEs#9A-j~bVgpk>n53l*}m?-(8#f#JWvTBY;X0 zfrJ!in*(;C;;sy})qhS2I;X&_l=rq-ux&julIUYWXAAflz#2n^Z~{{bF|RQ;oP;Pd zfKx&m1wvI_eQ(lvn&|biKOdB3ad21~JLz5l>!@0Pfq&!d7}p4%IiV3}fw>Je_!422 zE`!v^5b}$Go)Hc^0v&)1G^hh_@TlCR=j(MoY6z{R8)PxU4_Wd(-9NEx4nVo)A_xj- z@K)~bPvkI>?KPv|bNCE{Qetn4{dB&OnlV5$7bo+|aM6!kzPN}`WPkt#$U<`e$vlUD zYxY~tpwau~BdgllI>NT%J0f~`nFrZ#b8hx*_vaxd=*la&&+wet-IPR?rpY$L*7LRq zyh&cYm5C#3#v~tpsJPHUuBG^E{|qKm#Zm2?CKIE`8r1^wD@|w z?FVm75@%$e*JYn6=5pK;_@uyU;9@l+6iu_WuYiv4XJBNNQq1%x`(u7^aEH~=kyFsW z8j9iqOB1zd#I4yIexJ6D_p+qGJMq9x5R_1>WBW)fGcX~6xc>YK@_GNZH^1uqP8;LQ z@HNEAzndm}{h;BA)MFS|@TWZRA3jVL;qeCb%bm^9a20K@L@=K)3TR7Z`@$2wJJX2z zhz#r6rUWdZ{B8$Gf%8OzcNz?+sW=b0_uzkvZvu4#`*4tm_A#7nehR`UngzQ>^K!8a zt-fF;Y5M7YT%^|X$=|=f%0{QQ)=q`VjK7{}wkN8`Tm>%`jgUc+>jsTa1|T0fi{ z5UV_DQdkQ(Wyh9Wb(56!J>is;6#bQkSw&%Tse*Sa^NAEhF;@Mg<|wyRVlbb`i|nxK z!jj+Jhcg#A)6o?UJ&^H%im5$PZCKOI^Ve9K(&F;@yG8#|Nl${7y5#fE)fM3|07n{? zrc2QC0XGk@ITDP-xh920bgd$*UTSCLw3q`qWeM2m5OLa_uuBe0kPa>=i)kKF7HO{g z%Y#r80xKwi!-VVd%>V0XutoJxz=u+`i)%%|t!Y>51sWh2Pmp@;i=VbgWhcT3Aat=b zfjVTq2V7@v$fg{HwPR~FUES&4o~Y)a4!~U=)p6bhK@IJj1PJG6Qu`GHm(q;Ub=&vv zXJFuh{#J5SNDbXit>dYmht|jLYu%gsQ)w~~Ee7B4Vt#QwyW138K7jVpXtB={*)1*U zR#z-`6LFe8Uhc`YH5fczgJ((L`Xc!8WA;`=IR0H6&ky+yN^v@a>Lb25Kp>?hn`f+jH*`NTtUXhZ zrag1p%6eTOYRrKs=(b!cQOvZM7eDjUJrE|0AYTRGlA2fjag924OO`JD{RcXlOuLQN zqOOeWXQ$E6He9jEEAv>N=mK>%u4D6AcjqxU3%k~o7)e00kpb*zGO#27sJ!#|5+&3* z(A3(R(_J8I-%VXII1rNVWMFibssyaLhw_KA;nT&XrPe&|Dc#W`oz?!#PhS;yoSghA z3bYBpJGSqrqmVyb%kBAcyMF)8f3FN}6M*6>!z-Vw0&=!KN~D0E&Zn3s{}DzD;S+d~ z!%oJaqKED^Wp8g%6`v#Z5mJ$pmTW%?{Pgnci(PVCC786OZy%4grEa)FidHn?*=fP>2chht<5Je?xSGMa9 zR_8^`iF)}UwY-SUiuS3a_6n^C4R^g2Eu7{o-GlAnHa7YjqUAv|>L&)+KJrVF_gPXy zzYUr{d+nZ(=BbpXR{22V)-dPQzo$SKBW;R#R`14I3JVJIlzUE4#Iv!_9LmETkJ^(E zrIp87b~E{$D<>qZM}o5QuW!8;9tk~ z&A^JE4XSzCf1rLd?z1TVFK?)5tT3NvNy zSYsVBYGmW*E(rFarT`e=rU7;nnj*L>*g*;44cb~Ba$INU=w-sjnQV=NNz)tV!v%>Z zO3OeIZdmSu@)D#o>P(mTw=yhU4pyja{n_r)V@St_t~8i@S<_~ZTSpk|9_r-XA80RF zmp(huWlvTS8Hw9?mG_b&e6cOJf2%gol9G|5l8JiqHToTZV5A;u;d|obUf}+Kh};TI z$%iV*-6K=&XAS=bC4un;z}@MeQh~Bq`mgUyqNW+;1L+p)qOB+6D?0Bb99hwVaUxYc zNCKq|4WB9i&2hRvmHU=_j72&~^UUrxf4{ePNu05((M=Vp&h0?C^AEvU?<3qHG*I)G z!?(|FfC)t7ZzEEg0chMy$*3>T%!k4L6cd92yr{4TJPja!n(3g|)rt^YhO`9nq2w`=e3Q8P=FWhAU9FE{2D=)Uz_jK?4y8+x5)K&Y!MOzrk zYQeT1mRh0Yl`sXO2x`DxsApyU%>$>u7KKia6z=|xQO8=iQf@^Ov?mtKa#FI~J3Jul&7JfR^h@cA>_{OPrIK46$1 z$FDw3bvGEOW4S--JYV*jEPFIH>^6|M9}lmk@_pC~mGR+xgBjY*bO70q=pYC#i5gNb zc_n`acyC#-ST4yz2>eIoq=l!>1y!Up+B?n0Q9{utij*2#Y^M~@E zStP%uJb$MUVM@pbgbU|Cm!u&6u#t3pt3D%&Y*iGsV?_z4`U{$Z1G_@m-Ld8eW9q(3 zrko=(av3~Mxa>WQBr5bz?s!@e4YUqFE?1)IBk8kl2wM!o7>dW2(PQq6e=4DZ0yVcniU3w#dC7Fkv<#EA4V}TRLp^-&KXnFZAPcxwC z4}NY!e{svQlC;fIgR^UuZWdh#*}s=AZwq@()sM$SHkAihK9`8tcFQY1XijVc zPIYfB{}RGq2`vP)LVfG_kxtJu_s1`O{ul={dc$QL;f(_2{L{HER;ky|>nS(D{D{ok z`9LKau<(lonW8k1O@Z3?)zx0xW4Gn;Mzy>m%Mcs5(DbXbPxVA)%O;`ZuapYDuB~6Y&-j?L}-|>}~DmOK(dVQHWSKO3oJPq;C zb#5!}e#_HW0A+eam&VunFA1@M9_P?PK;O7)y=fZvXJcWKeE8}u2Iw#%D{At*Vwy4bgzNTVs~ke5J`N} zUR(*K_qxA7&~2$Gv;VT-Oycv6KuVeE-n6T**-NqI4m85~VwBG;9-6|Yw4dMLx}xujncUQTTb;4){Lc@&B0-lD)E!9vJNK( z)ui5D8Vtm*l^daJv4aoH1 zFe}7R;jpt!!q4PG{_}t%ftBf^;EXgu7ZUGO*qhr2exZECna)t!e*gUzj!5Bi0hOh< z*{D$@gtUi71&@PLQg*kGGet0jTy}mRe5H2BUsmdzz@A;?Ut4t7k;-l?mwrX+e3?Y6 z#XY}r=A*VukSYMRt445+fh_?xuD?HRQ8QnKc2?lA($dnpZ!}#Cs%28GpC7g6y~QRz zAw`n<8KMoPP<;q6(Q63Pb@5zy2(87LFQ%e&eLxmE)+VD?YkJRO)B`Xky5vX6g6>=v zHz6venxjdl+Rp##Qm3bvU@A{f6x2AFNU<28NA2zHGlS19i1`fZpFVvmejMP3;%?K5 z4J^h@j3Tlx%k}$$szM$fd~hxwFW0466m9Rb*3TgD=}w>`>J<8cg9;EL{lH7(KJfSe zj4G(5jVM@ql(M@(mk};-fd`-^XqQs!@Y3JqhCP<~Nr_P{_G+4@9J|Hnj!`nmUNWfEx*?CCs8iIXxmz-32A zTfk6==~9bO8zo#VWns+!S%-#>tC96nk*U7+b4!4v;C7< zX(9R4h`MjXtiRgcio82~-n949f$Ooz(3|X%uVHF-sQTo&YivDByWs>V18s zUz78yUSKXTTO8=8wrL+aXuU%Sb_fd#->Q>$qa*FU>;@)WV%jUi@6#uue~uiMEAqg1 z?@iD#S8N#CF^Hl)1Xg67&yo#0@1vK(du6WoR#*A&`PkpG*J<+1CpO0d7R-5eCaN{& zau@Ut5iyb7r?*>)^lG-={7(z86iWQ;tB_U0UMC~1H#b>mFq8a0pB+wKr|YQxQ2<5d zbam6mHl?Hfqzn6oSo6AFe;wPzL||0-Jz5CyQp5|;``BKu-OVh%lg{oIFQN6?SbDFh7UMpUfhn}M!&61OK6 zehz|!)n8}=f+{0&Ue)ZQCuJTBsgxO&7>4>WN#z}|^9@j~9+)~!33)!dhfQyYnr>7xfq)!M{%z}F=8vmO}cp68$tq%AS4xO zx#gA!TL7S*^-t>J(#(v|wszf#VGCyTdBQ%)E3mnNuN`aPd5fW8)PDOB(wI>$m<&HB z>=94XuHf|ogw0GeP`p~3zKMW|9Do#sZwfTul?o-^zqk6XT$p51X*X~4`{JP*Y%lZE zUxdnYUXz@*O8RKKWC)GUMnje_9w}+(D+*@zYB~L{d)={cTY>|9j(L`zIy&Z{L>2KA zqlu$^3{zCYW+92NTigGBys^jE1{iVCR!MGvdIn}j(#Z$OITt)ac&Rk*TPd`C&yE)y zfdw!dE29A)qRK>0VIi~qGO2gm)w&+RC`B8+^*g*&!cPW>=M8aG;@JwN?`K6` z!VxhdG7cJCAK%d1oLhkcR?0g5Cea%zcgMETvKsEc-KD+=?nHOX(98X zCQA3q>AHvRE?-<)3Jm;nM*$Rc`DP+FmBbeaYSp*E4N}x!hn18hZk#L<-RMo_l>v}@ zmpkgYI{ib?%7})?YwN=SusWPi^zq}zi=9hnj}l!fsBZ3<+MYNqnDK_$8jkP~Nn%#Eq)$` zm9;~fhx3mK!m=s6Wx>L=0>B)K`Or)`Vr2O*GCWiwoCGEXrW=49gLr9*Pvx*WYNd!0 z!`QUH77dGti9XJrL@XpjUKZ>#?}XUf^W@qx!elAS>vljluPg65L>O3yf%*H|PxGVt zZoka5*v3*e{}~^+cs3~MrgqCGo)YvGC_Na`!|R8Z6DK^3DuoJ)q;RBacVlC{b0~t- zfRBeK@e|yypYiT{kNx|%yBvrQOJ!02nx#M24+KGg9=EsS(Zq&=O%~9#aJXUOB5m8Pl4+N$oRq8=}QMw1aPRYy~4L7UNKq^fdA+p-PpRt# z{(Q~Nt%4N2l0OjP(L!RAjnbhR6-0LPLFo*CMN(E2=kcjP^PvwT0-AXZhy*2cKGZQgZUv*49ozMVI3WCxCH|613%7aez``&%?k@t#4P4JVn(-H zZCs@w+Cl@q%|uA@gK&uYuUr;Gd5s{147HXSTz`RwuZLU^$(lWPJeBCO%8w(xsv)Sg zF01AVhU*^IBR}uQT&mMsDLaaQ$igF}7To+0e~V|* zN_-{=iRIR3wP>ct(+6&g$CPx(<4c|bW!;N|jIk7SeE7&++MT261@I_fNJWY$C_E3S zdXl)QnJj6Sd--`pf6AW$WWPTZ!sf+$!3*&FpZ@+xHI8Oe$XP@-dCX?M(yVbx0nk^^ z#zqcoaA1j&m2%dge+)DU_?dR+ai`~3R@%Xkkodx^tmD!IkqX})9zbTRlleqgf)^#k z?u-Ptk;P!!^jnCd7V0J7idK z{aMn&LX!r48sy_@8HwQq!6f9Jl(pXfCbgE`1U%-}^e9_FY<_Buq$dE&X7S}KW5e^S}i3x(d zd_49^pk8wTiJ*z)lK}RgI|_I~gB5MZC#${JD@((aqg-IhhC@sQEXgk-!^P|1y<1NF zj0DPsbTTzdW;WQu9c#iw*kzo#;Q-%?-#jzUPQ@yT!vvY|Dx1v3tTWF5oHf#tmJS$& zM3v3Y%H$_0^!$toQYbumD0Vn>S=9Y`M^hiMBZuYbQ>-;F(5HW2sgC_*5EyCt#Yf2S z{K?jlo_O1;<2O^L7=%oWA3mMjK$T6JW-*xjU?=`tqUSqim8|~ze5aq9MTg}J)4wG{ z7}APOMyj_a#}UmZx%S#Z^n49hzk)eT9zzh42QpU|v~R9dY!PbZCeSVhimgAO3HXF7 zzSve~2?{0xheRyv|XqoKzwWuem=0*0Fq2anH~TSX{Q!kC5F?yI)TVp z0Y|6cWvwq{0T54egL%Dr8_^6ATQ&`sl`gyt1o_NhBRm$o5IQs;hPvVfxKZAtphz>I z0AB%Ig~e}N9XDLZigBX}vkk&b13m8VGb%}-Dn#gmt5V3VjC8wjF)X7r?N-V#MCHXCOVsN_KeDo(B>mp}TOdm8TofQeZ?c3#~?!bQ` zNkQV*h`2X=_(`=WWJRahG5BD`2oL=uf1ECIFVIBzEq*?=y1M1o|IKT$-oo&=B&3j^=+U!GD4w31{ z4^N~Ni#9Cm&Rb;SyU)T7R|o%X2oQ3CpO2H&$YKv<7iyIruBEXFjNi{yVdeq1)C?H( z`g7%UkS_!VEgpxJDikel^9oW58=L5VJz6{cHKU9{*GowKE^S#RO#l_bfLJxN&!_R` z8yamImdTT*4m7L>33Yz~jPrt3LOfZyJY`lsPT*(KGZ(DU!DdK0iDcaXDOCIUUe8G) z^BN)^A*J%_3$JspA=?W>wCbSW?}S~-WN{V)s=>s7BJh&E|%lw$RDqV1D<@H!epI z0J}e)-U$94Kk(;%SNztrrj!qvZy=LsXz-SDeoKD~f)Y$lKHsYqv>}IQMX^9NlC|OF z3q%9j!oGCF{4?S#u>^2(NbIWUGaKnu>q1CvTB4Khk0Fu&Z~ZgGd43J0`E6K`}{E#_!|?Xm4c}FQc#B z$F?5m%CiwX%T2y6#w(9x$We+M`}uek-?szX7UC+}^ap8}M!$#>D*Yc#*8$CC+_s}g zD9V-*Wh8rVk)1sCwnz9+KGP@mZH^-tKbg8U-%eh|eiGM~-O=n%IQECD^(b6dy zJ(B077}P|-tk=0y$5O~mM+%HSSZjcA=pmlj<^GEVZri_`$8=RO_0|AQ8NL}Chii9$ zIqWy&#{2!1dEnH-T+eBz+9qN%@uX|>m&Iig5M8anLA9`|hd{^WgKFLv`PS^m4x4yL zbG~1h6rb%`obHEft-NDmcoarus?6*n1%e-u*}i^_8KJbP#GFXp`Nxp)Y59N}AfmcZ6R zbp!fQMaAM5qqo*%^as%#h+m?I5FszQxD3`1@oRD2&DXQN`hjtki znEz{sXWWvqvP)Mdrh4qe0N7I6)b6?2W9%w`9#YL(Ho5 zx1WnUxLX@Kt}8F|!wSfM38O(9%4pK= zBpXwU?_0${qPmn%&XPFUHfaHK7Y}ZC&U6VOSuKy+F&+&iuWQoRl9IIJEz~9nT}nIg zzaek+X41Yp`Q$!;H!SY;Ru6U{hNT_YS!*MGwGR}6(wIT=@ChtcEjJCXW2Mj(?M644 z?;nU1Se%LMdS7gJI(>3;`Yjh<%?;KMQs7arg5Oo$OR%Q*{JAcF)`%PV4U7M%Dj5daCb&)7iil6hJr*IbC;viA$v6Z}kZX(+K@x&D#iHeXGv%l%YrPF~_FHk?8VK|D|oR@4I3zx1C zg%CZS&j)I|yx=u=SMkA0-wFgRY1Jp3kRA!1&fW&E^iqC&hzJBfiV}XOvwt3iNt{I( zl^tf&)^$r$ap`8=4O5;+ht4K_u95>8Q?C@4*!B$9z&8Yw=o}ZSX2a8;`fz~wdU|*I zj{T+HofrFrN!mG~oVDA{Ccm&4<&@admG?li;7yPK`EAqN$m%stq<#Dc?CIj6MhFhk zyLZo|fh;Hv{_3}2D⑶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
T8Asp@O5G#y=^=nd1Ky)nGi_8VLe_m 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

o4 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 Eu>$1RcdabOUtS6V| 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

koEpo-xUv~^@uT9Yonkvt%SYm1zo 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 literal 403312 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ⅆOi={id#ji7GPrO@LBXQQq{(%7Hzs>4liA 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

DsUr$j*m=k4oDSTT{h2BU-hUlNYL6cuO3 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�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

S%i2%a;cJbRHiG7L{>nm?maJPwESts85gMXnRh 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 to mitochondriabwamem2/sentieon/bwamarkduplicatesmutect2alignment to shifted mitochondriasentieon-dnascopesentieon-dnamodelapplydeepvariantglnexusbcftools - rohstrangerupdvcfannocaddvepgenmodcaddvephmtnotegenmodmanta + id="tspan10">manta + + id="tspan11"> + tiddit + id="tspan12">tiddit + + id="tspan13"> + cnvnatorcnvnatorvepsvdb-querygermlinecnvcallergenmodexpansionhuntermultiqcmultiqcpicardtools+mosdepthvcfannoeklipsedefault path default path alternative pathskippable pathsmantamanta + id="path5" />retroseq vcfvepsvdb-query diff --git a/docs/images/raredisease_metromap_light.pdf b/docs/images/raredisease_metromap_light.pdf index 8a772fc4b88412e6b04bb8f5811b9ae277f696ce..eeac11385b72849cd361a917af08d68ff189045d 100644 GIT binary patch delta 14828 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 F`9E?;jEDdL delta 13933 zcmV-zHj>H2{RhPM2aryG%aRpA5n!g`E#~qJ|%qkXJyIZ3+T_#Q;9Dw8H4!AqqX_fyTocxdTv7CL3YmKMN$K|(W zJ;$`x?X;d#tgAn{)BpM(r@y>jPrrU$ocz(d6wB#9mi6>M<^TVGZTaP2CF^>6v&7Rs zpME%k=0bNg9Oy_MY1KM0Z$LvmZb7xobX(=_G zT}-E%>N#%P>2fM1o~zHN8tQpVNvQnq)4!mGp~kIvso|ZeQMSLALGeTshV3&VF-JALm?czHuk{`#Duq)`xNqu>n$3pM>{YZiw^QpOY^qU!=m)0$=Bwc}>};?S6e^RN-&VMJa*2$wDT{819hL zx%sxNkxb27I7eZTd@21UeCvpQ_{(Wjq5qPhE(86xJ~2e$k5CYf<{&g{UD=q1SfiX2 zkkJkQF{aIbEwz-TGkiQnj5_H|R570AM+0nR@dF)1GFL(ts!k^5Ey3WWHa^Ms;aoP3 zqycT`)yYT+PL=^DfQ%Sv4uEjZegKyR*vcV3GOgu6rUP2kWrAetCd@RWvIvqnsYh7` zT&DW;Jgvr^%)V8NeD(fbTgmwo{`>vco3CCNFW!xRQFCV$Z^g25hHFyVvTjI3nab8! zBxPl6DXC$UHC-l^0t?b{`j!c$d$DAzc>A!m%m{08VRkEd&|M%Cv zr@FJsR**x$g6Pi$xhF&_CCfQB)8YXnY)aT&r4nHRE~ll+Hj(0-NfzoonE|k*%Y?|< ziv7rch%7*4BVXsD47g0yX?c2u8<~BZbeP{Zbl2@Km=90Rc9*tu6j6)W^U9TQ!m?~Z z*kDtVjoN9eWhs$=MFff+;1HHkDI30@GKoBQpfeCH?J{H1tgw}3rX)LF&Aajpxy+Rs zxwacp$M$jl+-dcGk@){?u~xtPj_5i|XzM+Hv7@Xa>jghaT18gOlD31SC4`)e@_JX) z%fX4n3r;yG02_rNg}lgCPz9bLFyfPl#nmBOF(QgcgTYADsd}&SBP9D9;BsG}B&ERG zY@Brskg1OCfpkQOmk!&E8&mSqDlbyuDl+rE%1059eVzE2yrYP_=cCSb8N>hd^CA*| zxEE<&)T0NHFVc#*2)#pFb{tdH1kBpe8@RTVB1se)#p% z$G4xpoxXiOef;q4^X2{LPj7zz@cO5p|INxPF0hQcZc@tb=g6?hu*fprB1HZu%BHI> zqO@OL{q;Y7a_g(tAK!lTfBETOe};a4`QR{fetsi={VHXDc>DR&Uo0DQkZyufC#8wJ zlU6tX8h@^$c_dNGlJGu@8e2v0Vk2LDeEs{szxm_K^~2@$x3^zMYoJt03uHz)*>uOR zhw*0_8&JsdCR@G?Jt-h1AC>AK-`-xnd64_>KYw2fYy$jE?{Cg?&QQbK(EC+?)`z+& z0$s{UFP^;*1Y(93DBr{s`ZpKT@QNs6>!YQ}fTHHMs(uF=(lHI{>b1xdIcZA8^ewU==1@BF*bLYT4l>pl z*BJ8j>tX!46zHAFm3j(N?=3}tnF&vi{;%&py!-a{&CM+MFLpE!9msEwbxvw0n|$mam2s+3}r7BG9il;ciI*vc#h5b;7Acktvo$OQCjMAJvLcI4NPogleT@ZE1*> zj?vT*l#a^a97dF16fWzX9W}UYg-3Lo^my@idisZy?7D{Y7B_18TxeZ?76hjshCHnn zKcR5T{5=b!G0d>ggK|T%Y+)H`X_L(Cyj9Ld0oHQ~1CZ@Em!d-b$Rw=s%+$zqz}uEG zAo+U3L79;`;SaGuRP1Fb!mnC=4C)o`RQ65cCV$h+z2x&!x$r$fXIeM!$~l`1{G4PP z6$wSvGFetc$wOKO^ahJPMp{&t6{YxPWLfi` zL`z#CmkCMj^AkiK9K2cqO9w8a4n0d9pC4L4t>~szd+qRrH2TSZlL9ZpU1a_urC_hd zNHRqJ#gbcP7Y{NFi|08cYPj*wOrm}(%2|4bwd}udX)EC}As%OV!&UyCcxy8zBMDzeIeq>;F zB;x2r(wX;^ITcRtErzq_-!*+XZ6dYjl9!PshT zC#@ca^m;ZDhn8S5xozEU8GUJue`+&jZV^*4(xHDH z?XNr6%p>FhVbO(2L0Nf)4K)b|u1Qol$ zNzj)@Sq5CD`t*N1t;U_qzEyU|c-z*!R{64d@#HYU*%$@?Ep)4j4i&XL@h++)FQbkI zAwFsXmJ=fSX1l6xL0UII016NwNWog5q{NbW6-E=Cv#|#vgNj&2MdiC%ZDe22UW1Diwjf= zVatGITf+6=CgU4d18B3yftZN;sy-Nig|t)^uzDsaOgl0I(4sCABr6~e?~Mr7(ZC`{ zQ3hP5>WqIpWk==ECR;{tTe=@0FPRhX_Lm$~m8vMQ4_LNDqK$F?vuD_F5rDh4QedFC=!X=bc?DT*MmMU)M-Yl*d|I&!4YfPY>)I zm)CFX`zk!b_YhoV6WX*QfBUJvdi%w=6iTc)fP#ooIc&1sH)6gCrepY<6eJO z)t@(~dm?NJK>`I8rzAqwUfWbSH;BC!u&6E_W4Cek6yajkPUFTYrEMyCqthY|x@B1m z-H7*3Tw^G?_8|GJy8u(F^Hq z;{h`4-h&$GCtq3J2L1UfX<6EE8i{-Rl^5~@N`Z2t0FI`EUb;h8IZWR|6U7Fw&#J63 zX_v|E$#lSqy3A0-jBP{~0aUaZMHz6Js?+j}HYk-to2F64#~hzuwXATs$pD- zsZpT^p=!*)G_)Sn9|v6{OE`bfXn>V-nIXL_Y*aWgc+5LWQbZLjtBgTY3mTb2lT@F+ zZRmcCykJHgw8kIMdLoV8*MbAJy2;X4aH4h88;80fe_o+@Cedm=Ht?gmAtGNaXu4zx z(XUz6jrSkFefs?EZPPcNI0mU|elhi8hguJa+DR$0b&+T_oGGIhMGk+5-nC3w)&q?O zj9wg&vEQgnz1T|{z1S<$dU3R%kvTL;d-1lRhf|Q3%ZNWeoHvMUn~Y+a9irdWP-Rr# z4Cf!ved)fHaVp%!$By)0kGc(tIDji}Y!`_NTeLGoL!d@sU0AneztuIQ+AM{Af1v<^rtZ!K_hE5ZmE zhGuV`xFXOxo|~e$I_%N!>$5+^AN6plB%zS%h0( zxQ(JFN@b=Fs-X8vbeEsR$>l0QzbGukqVGcIullF3jlX?*{q3`!dwzdiMGtJL)}30eNdNWNx{)D3Yh(ah>fmeu2lfVaZ-zC5 z8p@OY*bHF+LjjygQQoeJmG8)p`eS3Sg%wndE3HnTt#p4Von4Lq!g(tIHW@nEyz93C zP+N(Jt}thc;XtMXTGVBNU^oFcL!+_?B0KHsrm_sUO!XOg@`230RZUyDY3o6Ad(pgj z`a*cqAPEy|24rmto0@m_RtKmWVb7WX{WQ**NNg;5JzNUEXkI)yOmI=*_cLff)}{oHp?L-+GsK)(li-PyArT*c_2b=RTaQQG zFPRsAUN3?eyJjCnZh*0Q6?D6i5O#X}122*DT28POFFC5H@bzzR{`&CSA8&u>-R?t$ zUQn|-vTUKMIPmM+-#=bIe0pnQ!R7V!YWJaDr0ME$$NC`ESW`wtfABg|BWi$gk2vg9 z70q?`&h*#O>#l|%AW>m|jG~5YaARCW2B?|l(>P-Bh_g{~PFQK*j<80eAR+vZUXFbBjpWgrR>6`Q-dfg*`l*L+cEA2(|iqctn zZ~gI)>$eZTU6_g9vJp3rB7BEc*pD1vK3rb^{)X4-N73>hKYsrD=Ixhn?~jK>-<7w@ zy7GX3KKW}sA6a5Ah`xr?D|njMogbF9hK0NY)7L3 zb24@g*wfSO48CM^svrV$*T~{59S`ZAR1#7@y}?zF!^q`-5@~E@aD0>EnD({slVCOj zjz=m?2d#yawGb#ZC=l$6ylJgygNMOYv{ueLb*_^YpEtx-EgXQE;~cFK;D=J}5}6kK zaQ)FTRt7@@LcdeHW=7hrS}i&=<7OMD)dt`bMDg-H3-~A7KHXFd$v9VoF$$avWU06G zVt3aV*geaC7!9i~>@yN5X*49um_}3&*cm4HFZFb>N!AcV-k_J(0Ft_A8OZ{tDfF-w zx^!UFtRdHdz&bMR0Q1qc_7}gQ$Cl0_13*=_FPiWea-|~@y|WByW4{yC^wNsGj2xq8 zHp^xtGipI^Al!^xXbe~;!0Yi`0~!~v69PVWlD!*$w9usk5XQ!!Q0oMl@5$+;iRN6@ zfUIXrJAkHvh!=vvi|9^i8zaxsgNY5f4rC0PRuM%Ofuwew`>31D^NHOzZ9eMCYE4OByY&YIq|%2)xsghL&;B<%>&Hl2wJn zkAQk2>LM9+k)PAK^z?;D$@KDC%@Hfo4-jd8+Ev3$)vFIX?T6Uun`VHQeVb5B!z9~A z1=B9r7hyI3NGpQvMjFerq*tw!#t|TZ8x%s>DPZoDEGxol*OHE31lk7^aZI9XGcQYF zKNo}ToCLV6>a=f&uFcLW4n+21-m73d!zj?wOW!IlBTF9!sp5nq)DOBDQaI_DlD#Fh3tXq{#Si;%57*AvLAeEj243rf(q~S8INN9AjSHE6F+Cw^F1&?YvP5@mE zU}a1Vg_7o3AsZ@UUok>80B>b~V?(g7)TG+6xdhgvN(QgF>*j6Qz@ValsF*24u+b*K zy%a#)42aQy_6>#+1Hi#eg$M^>bUZ{PfKUPrz*kU@;?^N>G*oJQ%lIx7Woc0V#-2`y zibXPp6qTMxCDAm&phYn@wPzDx#kDv*<&^C$UAWs{IwETTO$M%~Wk894W2{q!gRUcQ ztmp=e`ZeU*5Y-o8k9i%Lyk5L_MnLD#l8jjm0O6|Vb4$ZOr`B@}BU_&!jq(I&;g?x3XcD-05#Fs@HyM+cV1v&+C5W3Mx$yzi7-=k(H-hVU4944A}?@*{@TY7uFY zolFb}^S#zR6zl*8;n6vN>oP^MF+4Rrao3RRg!C0@s#3>LPs<3AIct2X(R~VCCukZN z?L&o@$H?7mNU~u-wrU%aB{`~AmjVPa85qKmaI+!(^6K=rpMrmNdDpJHcYMZq#(~d{ z0n+w-=2o!h^LpenWPlx`L%HF!s)l=3hq%oAGVGQ&c7Z;#+H8e?cC2>chSe_IVYQN* zb}2`FS{hG7im3M8MZ+95=sH0n=>_fA84}HXF+?T^5nP-QkmVMDQ+Jk*q!yiw(K?aF zUc$74Q!$X0G4vcmP~aHcsaxQ+L5j$#t!WV)Zh%FRM#kGmj8=wYG#PqG({Yr?X4Ml& zx?B=Unn%Q-#Sm|Qnc##$X>kh#%pi-RPBAEGI&0C=-fI1K@764o3`;~S?kry<~_$aUB!6+sha_$V{=wq*j^fzp7cF@jh! zu|tbuXld!$Xqykuj2QLOWdNdg1-0kyP{|tD>pEk)7YxdO@XhpfD&By(k_s6i!zx@w zW+bgVq#X=NtGBX@XAM|D8%GGaL!1yR{RhTpHbVyCHf6MI7(sQ&YJHt%Ir3$~8fO!Q6&i2hxVyGL7Uu1W{4TC#o)s$SnpRq~p*c@-!9B zG+wHvvjN;^W`s+7ajFIa052Va)bRXFgT&b#S>zV6$-kM3s6sL#0nxlLTTHYguow~> zA?#g%qUC|2g)~m62;lsNfCek)d9G|N3ox9YD}t+Y0D93Ec|}gZ76uTIjR+9jb_rNX zj&T-$06>Z*vi6T~@dIeBn#QbPx>$X&*C?Q$1XaZdg{sK5DkGq*Ac+Z!u-v(6-A$1)*gnoc)^jJ4MZYV2=>ZLYVn zmyYP})W?ht04zt`wd zir3xevOxIn7*VApAX- zZMIHaM!d-*n?pXbd0qz^aA32o>4VL}*F8#c#yWOIyn*zElAh_C8x zDPP!1dc;>%Z)wnVf*9Z2A0a*%qzJr!Pl3Scf&fB?JB?j=*+Vq1Sh0<)W}%*o0+e5X zs1Ad;|MYsTo4pjKh|3D`(1Uv;c9&k*3LpZRPe&42saN z1psUUh`4M3R&ilvr6m_3Z%8YLah__iqf7y~6#z)~P1eXRmBwY7PWFx84B#n$l=%`6 zp?V{T^+C}K1tM@fS!sBhI)Jb6h+XIixCz5S=$r;Ef;eNR2Ji2HU!A$14rm%DzVgJe zK?^Z7wL_BDU|2pl@?-)6!#rFjC{=1i*JZ-8K3viX=cvBYy>J8ODjIa1nucfNlDGCZ zC@_#`X9yzIYgx*(mgY#dI6Do0sCEt z?(As5(wKIcGJ&;NAtuDxkZ**0|Lj);wH56QuUK0q5VSlglN3{3;es?>)cs@d}4m8`n4o~`RvvsUWJ%w79Tq2)1uV$a;5IH1;= zVT0{OT*#uI^wC=dP)_9N0`Hqv)4_Mk^qHR%_0x?bWfmCi?jo<$J^~0C1H;%$s`8FTw zV>Z9C5~@MB$IUQfS`R3HTL8)L0wR#!HR|P)jkpMa?^n^#I}O>?;O+asBkv2jx<<3e z;2y@BH>g(I9=-=WTJwzXBp*#H%R!Tkn^f|@X^qQrH!X)&p?(( zO9*(h${`%Ojl7OHubSZZf%ff9!A`ddZg+0Tvy!MBbHEWII1>YghHD1YK&`n zt|L#NBfph+L+X(cUMMcfme11*oP$K}e0T!ML|Vj3fuLu3t|O0E2~A79A@yh*u>y+# ztj1=1-mD;09u-@EZ6U_E<+%172tv;T!S}aR9&H`{G7;F#ZPq$mg`x*73|ZB{pe@gJ zJ+cXy)1LNLe2FdSMpsoxwmjF7Cr~9&_259~(e^Q-(WYX9 zwGX!2i1?*_CGF!mzva1(JTQ|$1zP*|q#kV_pJ0LcSlFz8febLPswoee$4BZc$F=9M zHw0Sq_GBJeBkchgFx_)UL)57?TK|!q-bRAuxsE*OKTMG2{T)iQpw|`P{^Q8S^roaQ zRBKCdAO#!sU^BxIpKQO0GSAw%sywOHP*EfgZY?^La_uo@JJpP~P+9dY)GgjN>kg2FcyA>ZH9`KS9M zAoXFzGa9R>{<(di4@nyn|_2@8*ODglDS(L8bMV` z21w-jg0K35w+~GqZ^#<-SgU{Ig2h&Ne@o}l(y;eqW>Q82Z7jdw)4E10je!=nW~;dbOy%t$HkRG6LY+JTWL93;i5ME<*tqM29o>zyU*1He56XLry z4^)dp#d*L$bJ}WI)^K#9x%dW(=8_L1ECh0YtHlku=W_yq6|e=D#)y>ga^N|vzB2;v zh9FOEd`Jkk>Tsb;HTV4;TF>T#%l6u2c8w2^T`?d^42=&Nv0Is|u_3z5@xa)qoeg_x z&#MFiGr}1YP8vS55_ruF0f+G*1KnSwwHv;(TslZvF5J4dqs%+xp3MsApbuEoO5;R- z5LryfF{&x~kgC%xwecYclOABQ6?IX#rSwcL6z-+y!0H+kq(}}1S}l?XvE}iN1+r{$ zFhpUL4TdAF=ha|^dFrO!m)H+(6VA55K!1`4$itxx21>}5tJr7=tsid4p%(vg`fZ_r zf{k|#lwL!vJPF0st>=?P|L62+`E4P89&3?>j)y0jLG<^iGR`KQuTj)Qx8N%pqQ<{o zPrrUW{pCOF>A!tmw7jQ1dG!l~I1ZWW7gYOIRInbbBcA^Gj>J({n5>*??w7-OB!o9q zxm^yoXuwL^{(b!E$w;dOw_0d5l1%mvg<(%bJwiN3kA8S6&Ilj4q)ieJG`WX=^on`5>1*Vk`vfB*FQ+Xs4;Gh=)7mvJ!7UHsM8fB*31%j>^hHOtrT z1Ad3k5N$>0b@@p~BZd^t$wkqBrU&82Q(E<*zJ^>+h;a;~l7^&U&S$c*;vg--AvH&R zs76gk5gnTTVudEnkNAJbq6fwaZv~cWh2w*UXyLeuXb1|2{SMqN&^Q!cH?uI-H%n4- zv_@j2`1NjwKK~$2WEPPrLJ`F);che{?A2{FfF9F*evlb&#Ja-WKo&ZG96hlQd-(Ua zZ~pkw-&h8R5wU1R?1A}L|7*anAY)CVzYFN%W6w4}HY#rV05Q5?fKL8W>p`zz>uSg& zokzw<+b}Bh&CST8+pQx%7z!xDn%v4ojf7xB@=9-oxUGCk8F9PuFU+f0Q%hfH;KRGE zk!9VJXlX0tG9g~Ac9evF3@q6#VHVg5VHzK_S|~88ZQmc7fjfuWrtN&uUsTI)UTt{p ziw78~>t@c1cu`=xiNLUXHeEw=$P!f?44)ogp01HOdbSaN>)ry23zUdQ8y-1F55-X% zPIid*@f5fib>MmmFp7_vPX6;CD8a%MTJ*%Q7IBzNTcqi}ksvc_N0gx$H-?LvF43NpN zg59Yx;{D>H877c?;Ev~fp4Wdr`rKfE8D;k5F>jhW0Jlx)@qh&_A+2@^p{RRjOJ8J> z-}GhWo+YO}iI&!XGAPt&rdg<-YW%upA>e}=}YYu(>ciq<6o(G3GSWNLGDUbGlyslgZTnB)7Kzg}8Bfe@H z*Jc3l2L+s_S6b50OQ{fn3c&!F9uuI@^$uxVu^=7cD1!TD4Jm|eaN{yhB5dk#_I8EnP1de-%&}3ty zJ3@+jyNEP@P9T`}n|&ejxYjB-{RFx$(BU|~mR_?qwI(F28Zf~SAI$ex+rJE8?N(lfC>wdS-w}(7Y(%Xi ztkk8Y)mqd>Lvkj$c)0pO$u#6Tki2y(r-rD*gu$O z`NWfd`o@3Um+9?N>mx(Phh$xyXm{WqorC!eE~wll{i^0SJ?S#v_=Zny5^*euaMfec z`F_6e?)BGiznRvz@aTF$0GfNq^XU9{u-I=SQ7SfqP*rQsISaG|RDHVe{! z-P2M-MG-P{R8xpTQj=ErVlZuv-8?cNpl;oCsYTjD2L+HyOLMK(jnM$U;>F#+AuxP^ zB|<_xfX%h^LPa>Mr$)=N6ZQ?az!qs$$so=m!QB*Rlr&00EA z)rZB1X0LW)TI$l%qh<}c4g|I-HP1+YT=g*17+|jPOJh-UmA~-vQNM8g7FLay8`4I8 zqiN}-7ke35dezz_n-Fgy)_k+R3v`7v1}qbhO$cmAaegr z#?3koCp&QMKq>7RfClIm0E^+AGA4Va0^Ww6B?lWDavextR9Zb0um!KNKNRkNiywOr z8PGqQc^eJ`;U1m+E@J1>B1O)})S;*}Q$2#PFe+|84DP_p znD)$6^TEzc8V~N6sqY8Q%#79VnJK_6GtJU%FjMU{CuZ8M{KQN}?$O!l9{OTO!Q*ZW zObWRRYj8uZ1BsdIaQ& z44K6^vqAz!dW#)UA4`o`Ylw>E8ml5(Bu+IuK`;w-XJZ<*s`S#kj4UZr2cmB!??omA zuRF%r5iHRNuU2SrNgc!h`E(7cgBXJM39`MXX~?GDgpDZPj-dxLi(NV})yBWu%h@>uP{8@!A1p^B`#5U_~w+P!*&N3hiMPnBfM{kn2EbPq72k0+8}EP6tX< zbp&!+(Ya&XD|Tk#`slIv#;yF0K(sZEubG$XA4jhkGJQAk&+U7Ef4NKQ-Ta{7)OI~& zncE(>W82qsY&`6WM&pZxX=w~7b{{yHP%Mzl%m{CDaWKN?yxej^-&dVE5%Pf(8s1~( z1d$s~kkn3Lpx=>FjDHFUtGNEw}B^Z14((+k7u zwI`%3OCJfM1!-v2f#AHVmX5#@oczPFVTO9u0Ni3}(5;5RwcM$`(2zo&cA~YmcV1EK z(t)XNwVyH>vbo$WZabou=f;7Jj!bpwJTicz)Kh|K$d&e?JXcnr4g5yZ(n~M(GUi6F zS)XGA@oL_G+z_brjGn6uSSCPubQws|knh)lkkx4rwXU#YmkwOabX&*8rZ$)mU>U(j zf$IP;cQx)sM|7n|dP9iIg4?|q#_+TBU}QtC1DOU>nHQQS=C&S4%?iKwQffB$?L%-c z?T9yIxl8JxHqcJG=B76EB-PiNGZu!zWd3QS8w(Ar_0-~-BWpD zbg1sYX*FoxvDyMv4OTO7!j9GJwrBOa9a*jN_{?h60cTdP^_JBt0L-jb0bs{!7muvg z=p6S*P4`w_6r{X8;g+>!4Iqw@&9l&s;FVLdWmEaP1CRO}V5^7yi#-5~g)+L1d@tQS zfu4SUl`81T6Ky}FBGMPce4Y6Bo*st4z)3vIbRYP!p#o)E}94&76ogZnvKjRC7Jxh*z5zIz6@``(g9|1to7 zHUH7ixp!c>Rq{(uUwQ?4j#gp&eqaCA{#}!9I{xpy!A+{62eeN?w9v=4TG2WvP9h+r z#%n?B0X~b-w-!8y$Fnzt?nO9{`{|_v&)hU)jd(`r&W4xq#+9fuc*F|ZUD-6uyQXh< zOnnDZQ~lRtrq97{hCJ^eC|!7SC~VMw&2}o1bgJpQkFlc9GA|K|#a8YJPOotgP;vOE z=b4$>ikf=0^yP#nzkQ;_Z&_qZ!LebZU`Z?DGJwd-0{fmmPB^7ldJzU(MkNdx)ix4` zW?+!rHf=YpUR2B9?T3a_QTG05$S1!Qo=O-?1gI+m5Th<7)65Z5khR6piKUf)A%T}g zEsIILjY3OW36}{8JZ3QpjKjbfO}&t<#rx{jFr?SoDC`^288Wx)b|k!nR!^%eo>%gr zJo>g=X|Gy2p7Wg28P+hotAvf`Kg^2_0)D$#?vJQVt&p0V<;PP;HnZnIUwE83!tv?u zpwtjbAfd4YI)aG8t~m+tXe!ZvzvixeI+_8&CzO zG#CNT8-<>ZW(zP7$7?ksaq?wTQmqh88%tOVLq;u)!l50VC%d-Yj)fP~^dDF%=Qn~QVg^(XoKE;$#kJ15Iq!QGKM}!4gBuu?MW;QYv-YwKxJ>owd3uc-nSHC4!K8g#Z^z1i%jLxnER|A`Wbp&D zdXcvEGX2^4QpX0~CvVwRYa#m~CeDm;LU zD`UKNjQcHn6PeJa>YKxBCiM5(G$^$IUIkGDr2i}KXVZXcO*dUMERJ%~OY4$#K!?fXCGvPUPjc57s)Db*sB`Wq-^xAjZ_-MMMH7tKi zUt|a&1bvnVYr8WMk z3kK$Lwj^zT^iG(df~aq(1S2@F@Uf}7RPbSg23$_dmUZ(OnR41w8EJ3M0S)591&?2) zv2bPcELjU`=}WK6$g%B79GbIqmK+*+Gaz0f6W;CD96L|CyMl4u$GZ(%q6q%+)DYC7 zj*IfA*2Y_^vJ1ho0#xakuc1_&UMKv}!nh%LRw1Pl#CWR)aF;CY$m?I0{|6GG2?0{dtSBIVy)*{$ohpsb03d&^P9ENX0AUaB z9a`D84#2a;qBC~Ro?2}jjI^qp1aYZVNP)^kFVC~(S22r+v=evdfrSNjbEcX8q5@02rX z`;?~xFXmLKrTvZ}F&-k$8IpJ;0#0(uNJ@N?L-aaC-Gdzbjk9e7MUjeBUuSl-M~6tA zs(q7Y>r0Qf5L|2eG-?&Q*5<3yX1`e`7&9ckH{P~R8xLZbd5EG8*C;;z<-fQq71XCK zZ)xK{-onPFA6sdHy_ezm0TT{1ATS_rVrmK?ARsd_FqeV-0WASEm$2Xg9+%Di0YQIb zU|?YQ|DTD0L4bh)OfoStm~3ERU}Rw62azT-z~bCMHsh_SAo5u)Nc{X95c}H<5V`9B zNW?S&EZz(jSq>t1yMV|aZeVs4h`hcAOdbJ|H%q}}4~V=g1|lDS1(8p9LFCg4Fxd|x zUr2+Zw0RZmDCytk!{sA2fGC4IgGzujp HMNdWwyDY%H diff --git a/docs/images/raredisease_metromap_light.png b/docs/images/raredisease_metromap_light.png index aedb7e767e3942787738613a22e9982f4b26ab6d..f0b9b5cf3d9807e9f3b313416338318644bba928 100644 GIT binary patch literal 420122 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

M`1fG7y84{19D6&Tc3L_`FX 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

o(Ww5t^%cgSJad!ih|s0*nXc<=6TE?%L_$~ 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�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 mnZ2H+>o+foTIDzY-P2>BFT=IfBZ~!qLicGa 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%0D(iRPXYe4D+enANUsh!145I6t@3 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

S#`WWf{$K81EHZVwx1SzYw~MDh*F z^g+H9K?*4m-oLZ%JX{o36J6xDal`n-l`WDFFUn|biv4zBF7c(#bPna6w=GqBQ>=P7 z5f8f0e50luf)y>H%RqC~8a6=>g@Z{-)(0tT=$MiwQ%5JT`eIwl$BALQ_DTTZn#mVV z03qi|Z*=Cy&JJA?$5H7BWqb!{{}Nfu*s0k=A+NP6r_tlWRGGoWEbAkVYo7@Z>G^l? zdH>x%QQ~@GTwR6DxTr>t(j^Uz$0@`ud%&hd42kO3%m(x;sjsojObJyN4JR2@XVBJ5 z_;X|w3JeA>l>pgbpZL_&D(prsLFR^;(cQXfnkd(R`sS1Fg*5x3qS0LUQz0n@Oz;Bj z3mKUJS^lBwA}1wmHJTK1(38nP6yg!a6)U0g6~RsgO=pyMC!x?GqbYGZVuZQEh!w~} z45jl>XE1z5#QR5^=ks4%<^P=b?7$m7Sy5EeQ)WM&%N!Au`L(#C)ZpSPb&;UY7Y2Kx z9sQhN-U+RepU_ZO2QcUk-d3ua9Z9Y!E2#Yoq9GM+DQvd*!7V!__M03l3^Krc!LKnP@yE5l2LI*}-dt}}C4j$I}XoFEDt zg1%?@-@0{+c#Wt$5;@@Eo?3Y1rTD8{Y&kn9{CBI8&Lhc!01&P%2JKm8F=nOJDbbI#p%Xw z`YhgT;MUsHu0yZpZl>MeE%Qa-wBqc}nHLr<-t^`ro;PjKC_xiM2t;JaY5;nC)IVbi zKU~+r@qtKSkmP6)kP4WCQHbU&BJwe^TmvMW?10!pO2uoiau-n6{FBF84fX8o-bhPJ z+reQB=kfq(={pd}<~JcD_hDn*C&)JV1q2dGFU(U(qpZK#zdO%xkK3#*(yi5>{T2nF#+p1fMieNLuzU1dKX z(?PJAf$#4*FiKAb+kEZ%b%2t`g*NUE&z415`8O##>jgQnr~aFr@Wh5SlK>dJkmgDuMx=!sugz3Ob z4%v9-@_nps5r%m)L^coil{wnl8bMM=_C{c$Xp>`*!(pCWEqCh;a{Bek3J1Sv=r*<( z6h7n|*!wMCv`e}7CyW5)(LfqOi~;YH&ojyNCx8Zn;5C9ZWQCY$i`Gfmg93*valo#} z5M08}-rmD-OTuo|ZZBq8On9jSXNSuN*N;4y4E`_$($N7*whR9;UYHjO&WM@JF@48% zTp}0NAuU7NR&P;IUcN`(<@Zo?z_zIUzvs-mwlBZxSJWxKfu(%4l6xFk`y9VW*}K21Mm-hA?Rg+A%gfJvCJj!Y53u zsi04TBMq^^ZbzMn1q)|IAMVh?QVa~$qoyEh2N3|OAo+sY`VeU0RF}z}0D-7AY;gJj z#Qy}zl)A8WYoIT>e6o$J-ogX{EMuZvirRzV9}K9D(uU2wcr~!@PMe$tBSF@9A}wN$ zDggi0wh%d}6QJC@1d^i>MoXn#o>PuXN>fg`|LsVz;{EV4-thoZ56Y9#6G31c z`;n!SZC9@@ehEOAjF68-D~+}-ZNlu}!o8SHLiVOzhy!Ca0Uag$Mv4$x0;S{r_+*Fa z&Zzw3BvC|H-nZ#T*O!Wn_ve0TFnR@jA2s}@99mcDCRyd~+8Le|TbA3#mT%ycF*lbs za0Vqdw!Hp@Mh<=sTo_`_~`{HjE2lPO{ zYkp{>05g5VDTg9auBODd#i?@z*;@zi9bDcI5WW|$VEkj^hSxG)ZyIimm62$f=Z<>k zEMOmEKYu1d$aZ#7ea+yO7Wda8*UpSf-%B3hE7;ptw7i8WEVn(qH@xHl4^0N|zz;gA z1$&V&P*MkU5yufAW|TI3TC#H%?GU-q#%HZOfo!fpXw8PTtCE$K)za`QK1wx&WI;W5 z7^Np!LqfD}m|`m~u*WJ(a5R*?2$7IpsK>!D?e6~ zvi^`*pdc{gV-=zOIe?#>>|^8{jM%w@IBP)MX$o;XBspGK+XonlY`8(?KsNGXD}zA3 z?nt=(l1DOq`fvGi%4CfX+`2N|$d&^xUTz= zm7^T4wEfelI@sXE36yZQ(E5;3LF=76y6@7`I`DV;kw64pDA zl$F%paNuUo&Bl<*zpsVw8S3yKIP8>gP^!f(zFe3dv2eBXTTqvyz-%TUd9;Dy7~~D5 zSC_4&-3*bi-Ae5H025xlcI~WChVS?19udEOSY-i(%0uB>fKMDJHt0~|(L;1ta-kTJTD zd|RZy3~(gT&x!`##2Uphq5~ous%y ztb~mKyv1Y4GpH2VDezgTfDC=^HMF8}6!==BbYo=u^cumz7JVT9dPXEYY!wqiXG(r{ z$R}83-NZ4KLfnKf%Y~7unx|!cYo1`S&wb zy1n+?&2x5N#WFHYIcp6^jO!#FmM+?TW9IdfvBg_Y4wp;}UqhgH==>;qvh(UojTm8s zH_Y5#g)s@zC?vgHxHQ(7>40uK5A?e-ruNn2=;E`pRl(kcb7rSTa83oG&%{rU>be`B zmFzUZ>A^hcHEf^;4wGG3ITnzqRIXXa$NWsMzlcjkt}E0gA@C!&k)vX({Q&Q7QU9~; zeJg@@-)GWQR!HV|_&J z$Ew%YAiNocB^b$rScmna)bcRz35Z0QHtzGm!4!gv9eRSpNLIn<@@Y}BfOma~If^GV zsTd{dM}mNx&;ArUK0aOBxgE>L3u=60|6(kECBh`l z^tYOEyvJs~CPtIG(-mpomd105m_U(A*>|zwE*{8nw7LV99n7;DZNID+HZvD$@vkp6 zvAt0UlR%BoEDR_kDKlgv!WM_i(dFXtts=IDCoy=Hq!`*(?a0s=wwGoX-owgidIY__ z+$Xc2-jDp3SG=-U;2mg$p)GhsV#+qP z4y7O!uEQ97r|Nzih+>N1NDcQiagtdtz5lTlHoX~WEV21ZFsX4ZwV<*x09O^|SKO5m zsBpI~^O7S>7pPu_Y{U<7=zwUQQ1g=AofMKFNY!aI_4^Qx@7qpRSIvJ(pz1LkE>5;< zm|MN!*(H-Y$z;a&MQSS!3)afrQBPei=WaNPRQ)OIWXFA{FMV>Te9KsOFKhe1~K;ABxf%%WiEJ{{$tN)twlIPZ#Q(_U8@OVCIcFd^Sj$DdE$7u_Isd_LoR$_8Px!;Ff+a2y_9O89#_= z$Kd({tYj@lmjBw1`UW^YH;lJly?UiN5GA&XOaK4@O?4dMgt*NJm*OtJHVvu38f${F zZ%Ylz6PO3GBNLK6ycl}(L|2O-CyuRmIPM*Y1T|La3){ydmZx`}y--b=$@p|rVq0zE zT>l)Cwkdr`IOFX(X`@~CPwjnAvn5{lG3LNrM4quwB^VWAW#ayTVLuvhvNw}>`T_ER znJ6FD4r}>0*4Mwrv;;;0O2F#&HK&UqC7J+PjMdNLOsc;Lw?D`kMSzMF-K+|<*b4W1 z0OX|PLbY%c#(O}6pMm?S5k!W34loyl!Zmz@PxuqKI(Pdu&MOGzf`qF}xx}^J?;0xI z&Vhl4UDL3R)=Iv>f`e)TKNpOo_&}Qzp#{)Kk0c6c46p$=53ySnfLm;#Ib=*zTFyLZ zs>$*%?9-M@(sAAiTE?^3m{`e&G|yYi78zBp#BPfDFWT;AwVU0c?%~3dUtcmU^O9a5Z%{%hY|X5Fl;eE!$j$8coN-FV$;IJLJ3(jU@GNlUYPc+ltH zA*P59#$wh#?{Q;%$^zv-(g>+}i1({v4+0))z{Am(8WGR0`PV zHRtfj*A(p$vhlX^M1eC_r6#BCnC5r$W*5Fcg;?PtM?+EUo08&4YaZokSC?w3T13Sg zt^fopoW6q8H35f(v^eJqumX|1ABH-Y*}vQ!D^w#3T!N}0$0h)dHj+eQ88!zuG45mU}56}Lm zWCUMUQkQp|?@=F<8Q<#Iv{g4H7F}ksxb&(M)niq{U`*YnH*_B*2U{#^f@rM(w0eD} zYs%y#sut~V3u_ovf(Cea;T9CbWZe%1qbVN|X~MduLGj|y?!u7OAKypD4`kdY<4@fKO<1=J>TMmVhKnH%WZVuuhq ztQQiiE1Cg6+94n28v$VD5f`tUne``^sVGV5%5M+E;^XW7+ED!d>CM+}s}k={o|_|FK@vP8X+Cb9?m6|6*t3I}!Gov=d&loFJ9m&hh4Qp&UsIL#gqgVn@F>yo% zgK#(0+E=}PjvR8@aXB5xcd)dx%}XP!f+#}Ii};V<0hCh}RUO&284ju7-EA;$NXR?G zRrb&c)Nl+zI$sLf-azIp78_x3J7^WM@JKDrvDlf&@dwSgfHTyLtVmqsm;ZOD zZogQn3${}sscK$wfQ={+FN=o6KS4$zG2_|l4NmSKuObNqRp|abGT@P&SJIq#hV_g> z*OMEm%87}3tGG@KDC$L>5lzUNstJEnFX_9;vAizht&cG$`dSJ`6o`4oq&)^|!NDxf zMu_l1vzQF{D$u^R0hbv0>aNAj+%}pXr~+c94S@)hwTzf{`2aj6@FqD3=*K8-XrHiV zBl5HWNU5%p$+m%RIo(#CK4L@&#!3w!M&Pv^BSS+c*x<7Y8ZM?Fju8nOwSWN0Xk-_W zeN!0yAJ?2&UmOj1tN`;wB!LU3L$rlEyzajmQoBLm)b~o~pNG%fPCZwZR_<_{G!K_! z=?et9om(Q46%~ZMLUZ;%T$8L->m*&~H`9Gq;e{&w)LE|9X4i+w1 zPMP0v1(XbFppmWmmKXB zOAa6k23VJ^iEStZN@bISH5+W>j{e58a*TzZYfYg-Lu%*pMD=Yv?W|P(4I8#_;i-D9 za5jbn#0Y#PL3+V=hasyT2QX?Zf>f*svYq&pVv8VJo2bv}N~-qQ4gH>#HyCI76YRQ7KLb)_C74L>;K}5PeN+Qaa{E^EG&v}b|a23_Ns{W zm?2t80Y+{LGV7=)|&n3&S+b2oj3O|Ak@$BKn5q2 zjk=m@V6YkYDFR#)wP)78b_O9w7z0LaIq@9;bc$b8tqP!TU}ryyPT-Z6-P%|ZQ>1ke zNyst6LE_(5!m3QqoX~db5qnsZELJz>5YhwcSoXOMU#mOTwo91-Db3oq@#8?gd0oc$ z$kAg29*uTg&gU!r5t|M`HBA=^LQS=QoFjJuQHTuOPR1?3u05h4IJ$K$sUYFrfJL`q zz+yjR78MtV>|U|(;Gu276i^8I$77h$2jQuO6}IFupeh<{OkqX@LY_cd)q$Fz#u*HG z8>%4&11L5g$+*_I3<88A2Dzvh7cl?b?%*(E`!b>#(>@ANry&3DPc%YvOChxZKbj1n z(c=jFWbY{{h%hpz3Pd5WbQv=<8JeU1{Q}>+7nx$~zI}J`yRz~XhXF9YHe3QRUHPEs ze9EMKy0mxx7s#H<5?uD74jxC(+B&^Z8MtpHP?Tcd+L^h0$m&&6irK~00j4Jqa!S7q zeR%r7YkS9o+Q{UJ!@9k37d7ggc6U{JDRxCOE?f2lPK(Rpf zrjhjud=j$2caX9XRJr%=y#oi1YoJxhLnp){1!i>z;OJK+!Cib3fDS~+hH!AYxl!Z> zO8r-4Hv?7~8lOSU3WH5<)RzDSZL#MPiW{f zd1y^Q?n0pUF-hSj*VOR&zo?2a+rwOWQel-VUTchvT(C&@h)7rMq0Z5=slUtmZ}=GV ztzgW`69BZG7@VatP{7*hY}#sCN}o8z|23eWr-BC2!WvG_+m+{y5j3&O^(w;jwoSdg zy$soSlYxVYzlgDC9hwOs#0xibb6)}RM1er80zKCbZ2MXo=G&zJBRp<&wJ4Fmy99RC z0mjEZ)N{a8$U;Ymf`kD4^BNIK9jT2{_r`23#=|9Hh#&~<0@-Jdn-~J^;b?TIzcCkp zv3wM&2mxfKA0>r}3|Xgu+Bq(~w>Z!n&rU~9AJ`qj2Da4lPkYwT1toD%yE8+lQ>L9AzsD#2;3djtu5>oc3Zp70np`T~#z@7Y~i4 z+riH0ZEIucBy(O>WtoY6*?Pt#)n9pS?u@=7e08z$J`pMi$`tgaooF!LST=9;1bl#) zbI(|+4te%C=1n(u>*g*%C7Tae8WNndpr)|<#}E3aafCcl*PUytS5mbC`fpr&4rCPt zito4Yv6i9?mU+q$*^0Y-+m8R~Kzf+3Y|;RSV1Yr!%n#_(P*Jb~vF}W-)k~W7ReC#x zTc-}p3^4$%9lgzttsqKvTQsM!fE^{g0!(*k62P6a$>J1Le74A<>&z49eMPc2q=w$;5!%-jJnw`0oX;hWQGkzZHvW+1X0Lpv}>N|qpfl*na zg@lO0H?O%l6o_pV=9e-4xBpBN-7^z@{v+91o<>UE>yf<~T0W&J!5RvJ}WCajRl; zmZaT+{-p{t?|>G~n%)V5w>*bRi!4|L7{3=7Ed?`r`!ShruZLcnpq)#-t^hV6-4Nbx zA;y{r0SN{m0-PLSqyvldaQs+BE@+yBM*2i-hHpNaeTW>cm0HdhT{hzXws>73ESFS` zi{`EYz0WZbS;6{scveW+ocTFPsnsm2i&bx=cK6EJU$4rtP##?I_NU0WZ;^5aoAfn# z$BOz`{Pn}=G|}&^$5amaaRBs^symV60uIPWAhL1X!x*R2fCn8e(^5|~t9NDq0FNS2ej4goF)BDWh+QKpHK2>h^VgcO5i9yc!} zDFat<0js!`0WJGoQD+0rE(NJNx4BuS-Wt|f=Rt8%3n_AodsH zHm@2Oz>_4y$y>o@j)+C%L2i)4TA8YboywPwBh2NRKW*R0Z)Gh24_+;5$KM6?Xm z)aj=+1}!n4R!Vv0Y!%t9HT`v(`KWZ_!lZ?3c|=73A3%yjMUwvk(hx_%<>?QgRohSt zA!RLk1qW9O|9U@%WkFGUk~#Y6lL;QjVWdGJj30qLEQawsVHYBSK$3?Qiukt)qzOKf zj|&m_C`bq|931a$>uGOakPQ%wZruc=Z3mEDlqKJWn>S%z*McCDsDOE)>1F#I<6|5P z!Ke`QM5UJU`iN}|6pPt6xNt0^;33R`Q7tL4|pV+p`2exj4xiLq^LPaW2-s5BoZ+Kf?iM~HbBbJ zk_^MmO@!06q-gusDx)EL4i`*h#CyAoazW;gE&a31U>15#T*4#w^icfi-4%fS`LivN>c#Q8Nz*?kj}{UWFH7AZmrrV z(CPdtybOKN*QzLH)btb4(y16wq*wviA+Fz=g|I_QgbU_CFJ4D&1s6~K7tH*SajQSo zl7!FYXY<7-qDYA4__1z{)JD1V5L*2mvuRm zq(|fw%>fxK_C$T-O*&ks5t?lVv>_SeCA%n#85lHhU5Fp5#Utb}lGcF%SqU)t?m)~J@EXAjHSE! zmmL2h60XuuEkAqd60`L5vp65=2Z5oBG+r*=``Si~eQ@xi`oy={n2h9$8_!mXS*WY= zM&Uef#3%o7eqSPpBGTG9If+w{^-R#-vSW7);y~x%U@0m`5_g4D&5O;*0$Pl9X`u*4 zAJ~ELLhxQxRBJgnE^-9H7t;K(6cEGw(-`JNWO#_=Yz5^c;idpkjZRH@?Cj++gzgQ> zOe;G(UX<_fp7H{qtLY*!>8)i9+`IP~)9f7t2C^K{lJhUZ?1v zg#4etMyTv&XH1Bl@sjoYeevhAvqzU-3~6s<*x-72lifCnTL2i$s>XiI@W)H|G~Koo zjdtYg5e-do&nqrc7LDFUTZ?FQ8?DC#p!wr)yE`lE~rnR*#M0znLC0N zAEzfMq|%G0ZDR4slQ6IWf&GGMOw-}>A?kjS>^b}DCq_gq2@kjr276bn zUw;U>nj|pv*;rrR;9`MeL|_wCm7V?lN1)JvDM``bcST;WGwBYuNcICS_osGCl=wG< z@@kYyzkX1mmXJiI_KH#PUDxCih|I`Qn3;&FNDHDJHpknTg3afNVpp<^KOHi#}?JKHG zaVnq>YItuGR-P zXY8(f*S_;H)`zJas5t}ChkwAl;>iEtn5crkuTc-5tg|p31>~-ELcphgNl8OQSeFHC zk`6r+43t`3oYur~CRjgHE;Q_tL7>a)NT-EUZn-_9$M9AH7~ou8hFAzcC@G+^NV2fo z8!NR`UhD~7hBcB2wzN>ParemnND5YOw4qN8sShhM+Hw5pVzRawBow&8FnIQmE!_iS zNC@zMyveP=kPMUWIj1^}BEI61Q3CyAL3t{l&!81;(bv2%>r?7&IC>^7JJ^aomC} zPWWkVczZJ-6qgU)SLoUSOX8hq$?V{b@TcUmIP?dR2MBGop8uv)#?5oRDGd>NUb(WR z6Z8$F4aa9K1lQmMttQ?2DAw8GrSIUh#UR4wGhKp9oU)D*)>&?J$yiUGUA2&Q>Edf{ zw<--g%4qf%zdTVYx5gf0;-=G;jL#y3&SdDwu8KGKnTezq_+fpj?KVIfx!|CZ8rL`* z;zb&u4t0af6GbeWC&q(eL?HLoU5l52O#A-68HTq1352dE8l25-?-phB$~svZ?jJK* zfR1D9B(LcX%@?ac*f9O3)n{{9<&evA|(D)$FNH;kPD zDboszLl?Npb?OSlF*nVepeS)dDUO7^=Wy00|;QuthiQ{3u7m&rE* zuVx4#2T?wgVbtz&g~WshOG=V5hX0xw4EvZ|C)M}zTuyGpmR*9UOTX=G{&I-phOr0I zHd&yT)VPW&3~1tkX!Xzc#wv(&hRCy|`@#VngVkz(v^-D63!L{3RKJJ^{~-6ec)S|OC^jzXQiUusF)Uw8d&J#k@KJv1 zi*G~MO>=U;Jd5!WDG+|#WG>o&jP#V9m`=F@9SaLHvpPoQjqL` z&$p-|F0VX19{;GgeSGT9JgqOfGwWC9G-Qxw&bD{&Q$wkljL{n_B-c_yacbB;eiY$~ z>0eUmI>ml)B$6&Tn4}iZ-LS6WuV#L-#ZKEZw~a^J8|FzW1DF@gj+`V_x`Mi4Q2mPE zm8p-?cbb8ykU^`d=rXTHHm0L5KdYRza^6YUET`1aChgO%tjWvorcg5#qr~=Z{U#T@ zdp$xK>27|172o(bKCXV~E6lg%UGLhrSGiOjcQ0C6aH2mK3|P_uQyzaj*rKZTp0?7z zAB=o@{K{XYe>d|_uhk4$c>sDM{%2FL(#ijXU3ChvJFaBQOw?WO)Jik2$B!4&;H6q2 z_KN(Chmi!M3aeXuD_$}`J}2n$@QaSEbIQSgNCtd-n$iCTzR7&n&Sgy#%hE4}9(CO9 z>cye)a_OhH3KuuoZ5^M6NeF=tov@A+XCZ(+r?UJ?$a{BdTdSUQ#>Oh$OGDi)+!vX7Bf|tulMA?C2OmT*#`ep z!WO6TtaH_&R zbB^18Z87LQ3YBL4W716j`3f)%k~a~Xj}`d4waE>)YZdf*^>tHUeD{TsykGsZ(K;`l z;^?mq7<{Y~T_C=3kj-^khh&`#9DW%}QA1p>-+Vu|Jhkifaqsybk8X>hFmP5AT1Idh zmIrbo^lr=iw=4Gj_tXXyI-p8yb}Vl*{8naH3;V5(iH(b*bw?F(Fd(s|7WQsx>uJmN z@zOU;46ZscFgR;&*DM&ym+alq{h$J2XTHN*#ln>drB+g7^qJ23`g%OO|{Be1rgm zAsbb6;4Q|LE4S*)x_iuuld`{S0{y`HJ!k&%M8E`s0gK05fF4W_xssorrt%*y>fdcs zx;t$sI0t%GJPmS-@FQwJ&iMT_UYr=)D9$>_=3pgwC~1doa`|E1sH*S&T2Q)Fq;5$3 z^EB!Y16C$mav=+c+@>R-6GTII)Ta~QVJC3Fz`%f3i_LcEx-iqhrWyNUTOV1|SrnM` zad7FMquy2TD7*8~?MB%*RMw`d%3F8_JISt9|8ExrO&f~|c99tfmG|Lfc~LsyhPz|?P{)JcS*56V#T#}fYsKHv(?^tiQ0D$-VF z&#cF)(xI;fr;@KjewQ-;ksm!i+kS*UUgR$^hF*L_HZCffWC=FsVsdWrWz0+lHc+ad z8K+=^1oeCvDd&IVqlv8l9$MZL+js;j&3+zky6Jb+F%Ff`uc%>H%@UoG`5U0Bp0wZj z{R@fUGb`i!;_ap8WJ!_zZP=LvjX~_W+5#uy`D~;6fmYqO@xEy@0Mcnlx^c6A_z@NE z+1#st(2@WBwu*L*}R|u&#L(YI78aE+;KMyJ?{*dOYpFi}G173_BP6j-IAWTt zmjrW{LiOO`QR`Re;&T~%kRLkz^Y>*o6R0N_k1S z2%-1t1O-w$D9XE}qGNJC4pi(J`d8FR9n5ln(30L$$IGNwx?7GOEqvyzRk0O(w!2W0 zk$=#x&iM9nK?s=A;^K#Yc2yUq7Uty{?Aut?_|hk$$}d&<70M9E0jZ90S{e&4jf54B z)E>0>6r$8aRD(cc&KBL__UAabm~4!O8j!4$97NIIxpAHIVscVo4H1meUT#bTUD-Jh zb%fGFo5EK6xM&L~LxCinJDN@C&60F}zb1u$L-y+i+kthNjuqSutU<%4^P88ChD(0f z(Wm!mX(-jf5j_N<{gy8$#EzP@96x`lq#Q20Z*ME6K!8i!CjY#97g0-xh5}mNcj=_L zo#QP;Z*nno!`ihIc>_0;8k~A}=H74_(a2q@Z?vZL(9#k8qU$jX_=rVSlc0YfPYa6Q z+>Y)t8gp&>?vwXcNUe32PP@(*15ZL0OcV`5%vdHu6e?hureQF2u{L=AjQMnl|62+E zMe#TzcVtA@)<>`)D*a?Mow=XIahHKtIqxnh?5niz9eVNNg=Qgq9-GoWOyPisIdPz@ z8z_VtIdX#DR|mK_ws!+3=iK}cEt4@;v|jCr(!Nb>i5}dfx{ z1nL5U9!!QQevi{X{%mnS={sOEW#O=53Oi3RsGavGiufq0cHQ}}QtD}3b2<3RPuVRw z76=ueIrZE$Tv?as+B7~EF75|7TMRiOLpCt^BcR08*?WhFZ=)ZjK)kM&p?YX(F4)>q zAR?6Qx@m7zYFPrl?dX5te{S;7C)-|r)#h|s{OPTJA&>7Q_=@IN#%UUn(p>QJ&ml3$ z%q~#{dlI>R*750rsoO^^$1>rTb6+sd$xErVN){zRq#xX62(fIhzwjy0irI zEM>i@yYgAIiC-dnXVuR7qRIXYBhrVlfi3%|TYtu4H8XMNw+;(!rgLVSe%uSN^ZnoD zsXyM9yMAjBdH7-V+4(v>@53%}SNcZGILM6sDsj%lq{h*S83e&q7jG(0{92x>+|mB^ zLC=q?#U<#=@Ldx#p02{fSw<{&*E*j?BOY!2)7kb0Lx+)=7EeIWMui=`F)VN z?2)t$M<;$gv<`UW=kl#;E6;G#bMyTvhc9RD`lF)9c&#+ZTMW~@hUpD7KH>fBe)$JS zQhv6n$FEwFxm@lzJ?yq+MsRxG+Oi)ptVYs@KabI0`DL!fbjgtkw`cWvSENioOSiTd zce zF-1V^j<`1HJ0s^#-|5&fB3Jn+Yv)kA;sVo(eHF}p?{g;W(#^v3b2B$9>P|d&o~y2t zI&#bti_wZ=9iA+zg(Aj4Ukvzz89Y>d$J#dvCH+)cguarz@6S;J>dU2LFL5LxkF1Z>{ z(ze3qe|qkKZL7?Wwxz@{5H;gN39Fw>%Hd8h7%TQBO4yz?J#d}+&l86!Yr&c#!lnVOvb&QAJ9s$am6o|3s@$=F)1+^XcWCies%)3G)x+nj~)bOFt+>aR*3q?Ji&dp8)ozrff3Oiq} zAL{>JwU(o*N*c?x4~U9{(0YEX_O0wY-J0JLuqB~PZNkmdQYy;mZG_CK%Wc&XPLgT( zfe3LT&2gn`@>bzQuF+x}XqGCle1yTH%5_C+s;xJKkV()mZ|nE??i*eQb&GG$uWIjV zm(On%hW1tH+kDUZ)%)xIz6!3BPgcy9WZ-a_?-?@b@vX*3L?}Y(ez)gGj@a#SK+>P3 zvqDatkd14RE1U2?bhXl`H@0x&rn%!YE#9>dMHAos{<0MTjyzvKJ;TS7p8NRx*{y`n5|(bVI_UO8bqA5~fcS?(*EzNF^7pl@TkY6UDP~uk z1j{8KFyJP?kt`n3e|p2BweQ%tinHCr3C2~y-s&ds>Rrud8;J<_Q|iT+0kUVmy+~*L z4i}G(o*pc8?gIFV$%jOkpi-cT-47}dv5;up6VC-QY{Y8$Wy_bt+nI%WkQgLH0X?g! z&|nN3seA1Os0agkzPt%i;^N0Z5)AZuFy9RqxBeS~sfAX6o(9U#0$|+&U8tlb#_5V{ z25aIr#mCRk4|bW2+SwUVha8tR%`Qu~3@sgWP!Li$SjX|yA@aSH4UPr|CG;VAcf3)! zV(B6>Tnml(W5}H>pcTls7UT}{m0Dd+c15=zKiNkwYz^ex%>Cvn?dnSI%?sA7a)>@i zInKZNGfRZh@!G_%r%#?!^jMzwc+X~)h{c;Y4%}TC(31Y`)7rndBWR*oa^vSpgG0V7 z3(W4d*VQu#vn_WYW(zCLE|r<;ta+TMGQK`_0Dw03v={Ziiz{!(=)pbscL2w|7?`0r zd_=+{aC)dF+`ADPZR8YNX>TsqK|z>ORRBCHLpig%T)D~7x2rSYok&q@^+pBWOAu@3 zVV#xn$iDeNVR2;1Kkd2tc5aq_p_uMncO7h!9Cxah^6RGEMbRE?37)mYLfU+4w5!Y5 zVYq48el%2XwO}w31p)zo4W(^(SQVT)8P$WZx-^__diaDgN3NJfUAB?G%pn^aAxu=k z(up1H5sXHNo8VE7?A>t{4@_%bALewv3N1}Yn%eiTm0r-CJ%~HuXcgf4vAObI-)?=A zFY(b=4|60tO7e(qNcy%)%WQLVthO)|R`MX1Y;S2mTSDpuL_e%iO3A3D$!j{FTGDQ) z1G1~|{By>%xQcd&L1H$avDjl$oWmaO?SWV97Wx4`5_on&oKKHx?7Jj1U>@;g@vLJ9hptEkFFOTm}0TM9VP(5R^yXs5xK*E5LkrCTo z0}7Tj;=d0k4Bx6%2J1Z_xC3~e*WqHGO7?+1lC&@RQud1wBLK-N20m=zQOs+uyvD|y zl^5e`GTK-@`(5>Lp2=sUKp$o~bL&{Zen_+3(SMEY!3-{J%G8b>TLpPWxoFs{-i6Tt z*5W^%)`^=2#6ErcbQ)ufyKl4POF*I_XNzeZ3#v6ci$iFZ5RV)W^*| zF|>M3Jcj`g*W0B7r-b~Z_?tecLKPzkma7REkHf49WfUc?AQ}q|L2)8rf#ck(w99zs zkkhi@bKr%aJ;`+0aRgkiwr;qFrNk{?pILD!@v(CgtEIbZOIo6R>W+3?`N&!&%zt|Y zm#lQ-fQ}x4E|&j{k_o*tt1!;scUG=e`Ukb z82%w4WBf+<0U2h$bs_2h$JT$q_58N)<9I_uC?rXXLQ<5hcA-eAD5OnNXzyK;5>ZMh z8Yq%zlG0v^7K*gDq+MEC|Ko~!-`~&g-{bbai+c5XKA+cho#%O+$8ntcy%oQZ>TMJg zW4nx+otcHjE};t65UW=4uVGo#l4jdIZwQIqeyIIdi|N3L=#WyAJX@6!+ma?l8))QR`Ro#5V_U{uy%@NA{bK@vrNW4apkhNPo1{tiT1iTz9#S}l3Wl_ z;0b90cWXHm-aw>H{Y_vQwSBe%W?i5!ohn?G!0fUXL){O#k_R3(uBrez<`Mm332JA_C&8wWVfek zFuE@Vj8M~JLX<}~U*?Yt8yWh?pP!>h(+}OTiqwAen87RXhF5wr29{93`+GkC?Xp?U z$giLtV1UKG#{SwAKHQK~HuL5k{N^VXOH`+C)lX^WR&ZU3+Rw^)C-cLf{U(QeI!oi` z?DW3n|GIf|dDZy`Zf5){EA+8Cmq4U6&C$9;I8JV5r4Yh zRwua25^c)Z*w|AULVg{G|CBHBD>k!Z)ZRv~nsfJM*IEAK-xBmIF%u?*lN! z#e+wKHu^(OjEnhT|MVJK2ZRlW^$>iH3mxZYz~13ne+6t~O5!eN>SA~joWhiP5TnHU z=LrF74L|k$=Sz0rUwmIJ-sTN_KXxy{A@{<7VRT_hY=*twkEc(chBCZbR(EzfzEG~z z+cy1GrOCCyu>MHj2A9Bnt)w+>+~mJ#xG6@9 zV`OARz}7Wx=gr$(am~y4GhyGI5+A3@(kX^LnT`_Sal7BTf#|?M)5(D;`6)@$O*5$x z*PeEWIu33Cv#i!%X1u{BEiLV|ZViq$)8c!An&6Rn*ndbsHH1c26HcW z_QT2Y?_;~KulJ>-u4l||dvoT*$+V9B`x)|6)*5D{r4g<#1(cSic3F3-B3biG-vwZ3 zMJ%tOO3#Sa%807($Piw>XAN}e$v+wLN2=kSnS18sSJt5;j$5zYb+)?G#xGUz$K)s) z9Soc~fD}#@i?ogY+2ZX0T2ke z2*>=kY0&&e-sa3~uMs8UTs*7PBd`*}RY*twcNNEPecvl-o5g)bn6uuBK6{F0Ho+>z z_oU{sH+Sy5a!4%|A4rg|Au5Y7NvAKroK58G(UC!ujEYDXBwtm=E}PJ|$%e6OlX`7|VN?Yu*9xT{s|n?AMNjVNSo%xr9-eG^DwwpR=QexUWrgGcbeYu{l> z)oqWAk0|0&-@v*4Xqadqt`JGy3IrW_NbV*v{1d#!pxOq)R3O^6(O>6x1`uNxd{N~A ze5h5w2O3pHT1k#-xt?#3M*A)4(sKudAf|2de&+)CIKLxrBGK*+R8yC4-~Tw{r+7D|GzfYC4PT6Qhz%f4xF~$+Ic0fcGbBTQW4i0 z894Pj^e{m1EV}=hkS7`y!^s#;Kyh57Q8B{q!|m_&GrWkKb?pzlohtCCfbAIAPeamx z5i0kH*%8v=2mZM6tckPl649`QTS9n&)O@dqzv;KtU$U>S@97h~shrAB1X;bB?OK*x zeRak5>zC^+U@J!9w5FIwXY^E8=LuUWOu`2KcSJ#<1+*pnv%s??P;$u7Rg#g~&48BU z3)mA>wARmuxz8h)#(TMjfj(sNEXhi7BEO2Sxn&36JYHv6=9a9m^UNz@Ofc^A_RqpJ7{6jp#f&qSp9g%u z`@Esbd?I-*D>Kv5Mt$cie4XFR)bbdUZV4~T}yPbC`o+=h=Q^`mVNAkN%~ty<(Z* zFqXRfayqT}9JMp}N*_&&!Rj_0voKX^%)=&yYCp5v9(dy5@bJgI7O2+tew-)mcFaCn zJfn8vrft1tE~%tmavORV_g zIjEoEOX-Sv=b4z@EGi}z7!gr{OBDre1e(H|F!sa={NRVywmK*ecjJW2t*NQ$bp+cJ zpSJ+>gDNltlN^cn-(HL|z6)(Hp}Aw(-rsJI9HJJWE_5neHf_2J_G%R{G(G3;%_wb# zhZL?WxIc|H%AV~NJu$dWdg-l;PNUqS=bwAMTw~FHD^61~;=zNDXihS4I3OW1lGiYD zq17a}5`*+E3^^W;DEKzEhM#`?{mJcIs>;fpAnWh2Yyja-(}OEDIY!|KY*&I!i$V1J z`Q@o!w>=!=%iiBQbS|~#D(WAtn;w9m*$w$g+_j#wOm?997lGAWtJA-R`s{ONxzKlg zMA&3!<|k^MuNO`xZw1=`fp8ig7No@mvOB0Y%1ES+($wK@JyR0H65FM{+$%2^9-WTe zPwx}zJp8YT^BK5;#~vS`*)ZbO9!4x`{#MsZ!TWj+7tLC|Z#y>kL7t1F+UBM%_(AsKbz0db9%@OIew6iXA3#5r>^md_q*>{}gpmg@_ zQH`hJ3>ww_`gIR;lV@r420C?K9GlV*IQba=wH+0#o^3Kezw8Zwqh9^>9|MNt&s#Uh zB;BIxdFHLn@eqy@*ikr-rtN}YiFY0~*QsLm8L5!u^Kl*gr^-dVr&b4NL@7Pyn%m~> zIvu{k-@C54JZaE_()@I)c=!98R0$3uYkJdr;{QZ^-8#^Ayk*qfe}|a=H6I@>PJtIT zqA^l)9}{e!9tfxI3@h!B=BGQ^P|A8~PBEUmr_K9RGiDj@*;Gu53GZ`%x~%3%#?3n} z@l$-S`3wFec)S(0ALmFtm3B!vzOvxeK|BoWc&p4thViZeL(8qz?E{8eUAf=ksyD^N ztaZ$?*%(RP<9y;NUc&QRlb~6L+GG118O&?+1mSBXsy=&H#O9ZJSr4#$kpvi9DW8gn zxHsqD)$(ZeZy!~Y?Pj{0+F!p0Ywp@LP9bL{vR^x_=P6PP*Vet@*dBVII979o&lp8b zSkL|ruIqk&DSujH;WLBqajIth@_T-(-Qc5U-}gXyn0Xby@53Zvo25EA7c)Zarq6u3 z)AHj|MhH*pH*)mot2wt_=Y!HL^lOcU66S!FAjuZ=ha+kjWOOWBRacqVGAbQmUBCV# zP)l|u8xW$TXs5LZiX%Ob8M`>|*A!>~*gv*rNs{YI47MeixRz)J=(h+9=;Q9P?$dE4 z%VjyE__fYiVTXPlC#(<)Y@OuFcJ}l329O3~rylibd*1+0xh^pzb|4@i= zfvl|U^JhX3(^C#zr`MN!v#M4mWxcTcB9M~1qky(%b;i1-Rjhe_QjbsM#it1(c`uJ$ zChQ=#DdzhQqaLF{Lzj}nyHr^nNMN<@T#d%${=YZkqa4E6aFYtRJuemyQa zoksh`Y;Zlz8Hxki`@3>#w?vd=iGY!gC4xjIQ8XLXAdE^B(6IT5ejqZD!n{0B2;Ng5 z;{*9vS@FiG#Yxl_!WK=LIvMph)&y6aqCxLHStpuig_u5gFZFyA#S1!q7EI$a)WJu_LOg`)a}QY8K1-r zyl2`-C$QJ^Gp$Avg{AFPY28N`sp|`w)9)kasDv1&0^S0zDvl^AokIfh5(0|mq2gQY z80K~CtlF9nf#llyBMKluO%^}gl~@vq;2;NrG9E*!xG^M@a)%CSaYiC>fw?5HX)r2= zm3|>&1CE$>&=RAcK0OXETM!?Y5Y2*_4Ijy&MEyrO?QsiUkU!Et8QbIg0W%<&Y|2t?imw=MOZ z^Ql~k*P+EF6r}ugSlCE7Exm3_)9AX8VJW%dI`VcJ=Dt*IG-WZZGs_6!dV2PR1^x50 zI26Z*k=qh^a-CokjG;oL-NYFg|NKv4tGXyTUV&&8oiI@dxy-MDtgzrx8E~syY5>u)1$&r zrbkPsf{jZfw62lv#pL%L&wR78Fgp)hmgNPr5sJ(ZSk%FJJnxL~cVUUZhHj2~LH)1Z zHW|Pu+FSaXaruL%HmCbdkU2t>SlV{lyfH6@3^>1l`2tw$d>CU`oK8CKV9%FnM9d#8 zn?v(1y#DIF_pfWfjU45`Yiy}eE!;~c?#CDYQHlI6%p2GyB)xQ2g4LYw`<95q7uS7W z=DH1^bqMa*!3g<=-#O@EWNquE*YF7r8Qy= zaT-D}VvDv(ySfarWNbyJ2QH}O2y|J<)~O1a00h+n!)~zqeGWV%wH>n=H)G6a^AOgk z9P|Oih5(G!wDfdBwuHy_o<5#w^m@%uqR7VLByeV+s*&haJcJ=lod5qMgtY7D+V#ZSLHHnCeHVSb@%oXS6$*Gh(t9C*JA(iM4<>-VDg6!4FfaNmb#{^ zqXS}YwU}$<@%?ES^F5D0D!4!YcT#X|#rxt<>ySWTm(xj7&J^hnm2W+{%>BIC2Wot? z!jV;0EJ)v$9!d49&Dx+n}l1^;85G0Gj&YDFZm`k_+2G|k*51c_|U{{ z*i&x5Q{weybFtK@M7v^@M-dVtHcnl$j5k4w)?+Nd7OTGz3YMwny)A7G z81W9cKkXskdN9)GLAG}Qh*z7vR-MjR;a+c^5u)P%DS>@=yfHR9`4Gb#v86Cq{ZQ3_ zhrnXBcTxkP$R%dOso?F}-b2g6@0vl3!}gEdU=^Frdd& zqH=$It$NGv#|wR+tJ_zxc_Z54ioB+!fALyhg%2G+>8Udgw!cfge*XbO%Kf}pdK~xs zz5r0MZVRC==?%Y8;?|?GtxWS$y}_V$#Gti4i`TsGVTT5)+`jNDrw1X;Y5(!V=x+A5=FiIC*wxX`Im1N^t!W+fmH&QYD+dqNi|l4`Zh$it;SQfoDSATQ)8SMye#e?Y>xl5>Cqr=`vKhc)VE#hrhl`4AFg>}x63iv?T5*{xsLCe2vGgeN+3W9 z!I)qbx{8~diMaZ}(ImWf8cM`taHVsJ)@nQYU^kI8J~Vf6bQHc+y>-Kgn=fkbDwF~b z_F4FQd3j}_0rBA^4C0VwZjzD;hkR}%kB*yocB1x#<lan)jFKgr(5y$+pUUR~+yL)9SL)+>{%9gF|*E@cg z?@xR8`1+a%YJ+Upn(08g?%qEkU6yy7v>OVn;s!q zo8ytAxj!u?h7WA^Sk7ImSMi4+PhHK_a64@vw-X_1osIa~0 zzV3GWzLDqN(`WhPCM_*T>Wgd_a=N1V?hV;XnM5u{fk9kfrlNRwif$tc{mrzZ6>MkO zMJ4iHyh^?P)=I<3v-J*V?wLg8qfWwT9tMygDpmnEk+tZAB#V9ng6P(=G05w?UMsO)Obbov3@13|gfyG&CgohS2hEOzybY55$3(P9O(w!)}O< ziD~cayM?wNI<&~!J{hP$d`4!O8x75F#N+4rr-+>zq)@>@9ckHfAIf*ut(q?CPw#x4=2X6k2Wkq{@(h`|@`Gdfg$F3+Al zONRA;`^+e8WYQ1dmv?_p;>B%&|Gik{xUSp{q5m3$f!&{YM&?qtF)%eVIjB9-=qh9E z;GsE=p%Q4#7{2T4?!FEuK?*c3y3kH1?J|@H#@aott>~Txa)jj|=E>?@=`(N+_Ia#& zaL>%Id5W#C@0#n(Z-uP(_CLs~ay%p1agsCV%Uy;{cO*H)q7M+B5&Kk^%-j)YXJ`K& z2MF-7xx}ERPEA6RHG&|Jg7y#+rFlm#V7z({TQrpT}0??-__*KamR?%DJ8^*AwOII&V1r7co3!*^0J4#jkkgH0uv z3W7#&mm2#|s^u;78NGT#?_VfFsQYnBr|v_Ux=C;Nd+PS6N1ng=&+MPTsElq51Oe@w z$bhBY{yck zt56pmDa`JufcO!okqq$n6s<%z4Yc#|lTXkcK{JMM-jPcY11hBTq&`Cvo0Z0S`EVSn ze5_t!m>pr|U#yAegjRjuLy}oj70m)!M)?_o1|jLq@V;Q%#0L)?@+P!< ze*8G}R}dDBrXe;e`99KZgDZp+(DmoK8IbwCrWEljgxa(qZV%BZ!;sK?XAZ2#KnL*5$?-@{0$44AIiF86vq9mxx_oU=d~o?RJ)@d@!pXmak^&d4R{ z8yOk-Rp#1D%zgno-3Z@;UT?mwD}= z7R~;EV~JnuuWMN3-e1;g9gG+WOh0h?#x1XlGIiPOGLLhv`>a&dLQ*~Q;Xn{fsFtbl z9)6n^wNPN#gs6mswoVQP?_dP8GS+-3rrvAroX~~jmpDjK5S*}C47`pi1N<%Tp_>%K zcDseT2_QzUBE`V+GT8AU*h$ohK+uBj+$n#L%whXlFKP%832&GJO)s^d9Pml4z|Aka zkw*zfK}XzD$~5;GaU90{zx8+w^cPS-R24_#-iJ1;=)cBNy1?Qt!S&3YiTd3^uLmdv zkjMvSO1Q1cclSw?tAB6SxIDs?>5>8wZjq1S7%X#YjKolaq!7)14ELoZPUxf-_?3wb zkpwUaa}{(F<>pke(LriyM+XdJu)?7$0nOE7eGaA@JZ@v96SJ%C2PF;to-JZxp*UmU zUT0v{gp`7ei9nsY83!cj$%*JP=I#v$go2Qf@!k|I-I66C?*7-WKPI-}P2d*%M@+(y z--dNJa}C&8yqk}BTioAYdF;aH=YvBXc{uz68`wORGg|IjmL%qlOz6@+(q{kpiKiy^ z?}hR3Fok8%)S=`MTg#(u^S1ssSgW9vW`1=-@I*dkxgYGeK(MG%(2NIPX4#r{ciab) zKTxul8qu_Zmq6^`kvdgG>DRbC!0V10J5gZ{`;( zRbJ-y@Ls0T+U?(RA-&dHAs$I|P)gyZ(`oBf!mx4q_@HGD2 zDFaqz>PJUo%lexfOsh8;7H{-@x3to(^5*s+eGJPYhCqUh8=u3-0#_5mkWw4YO0?BZ!Vz-EU);8XW5bni1$59m^5? zx0#b3zMCC15Zc;_0@qk5Ph(kY-HQ66V7kLdxEwLc`@+{3ceB)2@$VH8X{l*GTNjWj zM4OV|`h>ecw@C`}9U@4cn`aU>H9V&1J;|rc`MI2=VC_Wt2?RTc|0pGowJtzP{LGv%(+>;W|f8n!>3M^$QV3(ihWU2(6{}MxKF3n~6 z1JWvBd2T({kU`TSuen=@XY-xK*i+cQO`}ARL1+NY5eK!ivkVhv?CZ>Q3b*nMZxD4{ zJuAUop_^)^L;dM7P3GX5wDj+LQx_NPuh^Ifstx@7*Rges*;SR4+R-CV)H*5!!vzG} zA{_9<5XfJ?6Ltq11O)~4CmZ|DxMPk0Xp#|T(Cf0f*AAc;U4${!S-bX3J#b82&3tOY+N1*34Ygk zn4iL_q5Rh$ghDDRDtPQK0he$ysz@LnLAP(`g8D#gr7%LPOhZMJOhv$1n~XlvZ1dcd z2k~%&-4NDGaa4e`A|y&9oFka|)B=CEf3C?1N~pykBVo7j>VnLuX#!DDVp zAIy*O<~0V}S32DE^6w+@kR87j#eD3h=kN&a;v_p)m<)2eit z|0>oSD=I~V-!TbJu=$6-(QUZ1YH(8LXY-0*r{3!7tO}ee|1dJxt_9R^EUDBv_Yq%S zW${?jLWS3|EzR**%F**KF+;h7wmTfVf`}bCdf5oLAF zQ^_C$B%z(?RHTYlo)JEVlEt<28wwfHaU)L&-0W^x)YPUS_XhaR1u}KYyDpgX{zTA% z`w$_`8@0pi%K$b|H2te*vG7t5=0PG&E@EV25<0fu5k)OZ1VivwYTu*VqM2^J85V~| z#ZZ&GVO2TQNLXCK+>N|46I7BhJ zki~5oecH;(XTNIR@QT4H%KD;Ps#in(9;++So6*pE^%?m22HSq%Pqg0ED<14*N249r zPDjmEb9epU!WiVFjdtR@qE(DtVm3Mv205599{!2!5pAU1+N`Tr=VLv=f9A&5Y3aFX z8|c77c3)hLsWy3VzawA);02@&-iYqUkB8o;A07J8w5KKTFxOesR5xL+3}OTzs=<+w zC_q~19r}>e9R5LX)R>WXvyw7f>b1qhf-Jt-SU4+kX5* z0f=S5X9ztWId1I9xV32Wk@{Cu?7UDVi1&m+Kz=C@j_aru)!-*UMNN%$zzrONNH?KO zQwO@^H-#SVEf{-2DO-XCZ)Imk3>$vhwQ+Kk@m!f^>lied3huzM15QYv6X1WL@OUw8B%L3}W4kLKb0 zN71Q=MlHwJXX{g6yqN0e@{8)I9)(-R0ZxzlB9>MBM}pK_y2=w%eBWKkNS7UmA3WB` zL%;B&n*Qtnf(vX{QS1Qx>`|=YZFL!UshNO#9wHe z`jczZh$#2uy3pVEF#lhVFNeebeW}*_^*L?AimMj)3yMrq{Y;jm_Ik@y9LzcV_(1?! z_-hU)4JEqra)@i%x-6l~-}SiVr9Z8ypP<$<7ysJ5_J+G% zlU9mLEf3f7^vX*el9%hJG7QozBo7s?+hKo*b~=?)MfY-( z?&BxYRcivL3e!sy9XWL}j@!CSob;Iu=uTHBJGR5Uqow6`-*=dg_1^w4lXvDA9~CM( zbL_Y=mHl#?*cUSih3f_s;;%1nYg#$BYg1#A*|g35vu!#*KXHglFZcIPy(PqBolv;h z(A~)>r)sEWfeSFcDzSCkxJ-1NNaUT2=@o+2e*<`ln{1=1SsVg2`7Pwu9sKWsuI7J4 zoB4$)TbDBMbLy?|2lr~XPnWR${K_`%YRay^i4O)HKaimn78H2FV7I!dTVZK%1S6=X z2{{L?6+id2cT&1#>^EzEQa^9hCfA#Q0ESHE0R|Yk#8~U28=aA*J`a{p-F99`DHN`s zjFrq3r{HpbexXhO`W2yqGoQ86?r80H@tyvP0w@IbE8ssRLcfu}&eMypHAO7Z_1x#R zUi)4wOJF*&(EWS_Mk+}x##Gv~aRN~5xs9I0QAk$U_(r=$x8v32wfrf54x=v;ZQYC< zEVM<|pDo@f%0?+Ae%^iyD?dgrhg#G=eOfzVcyFq1QXtWQStm{F^;BAVK6Bq=`KTw2 z^CEJ&8~4dUO6=_sCP11$KVYlKK}SbNV0px8pKI5yWmS<=A#mzH@UkQO)05*y$0w%m zTK4($wKw1N*7SR9Zs+)ddg4Ul3>Oa>(nA3RqRYh$kp|L(U?F|L;Ktf9TZ%r7K1?)X z=lH{$a?tTO!}FzC2Oht?#7dr^9G3!_b47q1WG7q1#p{~7gV!N0!D*EVDT+(X{4N{c zxwxWA+zMhOGaH!JzVeq%G|-fJ*V??VuJyBi+Ih)3nH;h?L3K-+v209t^CRmU(Wi zTG-$-Dsi@ERY}R#x~vAB)}hov%X7kO`cBQ?9knuaML%N#;lCxr<8c;EL-|J0L-V&d z`uq34ge1X1=eaL;Pd9fnvm0&Vkw4$H@pSf5H8nqTrphma7ue~SE;+dKRnSd8zk;f& zs*^*(N!=rG|jGO?QKnZ7y&6_rQV)2CKI9bT>9RaCLtpr{!SK|L$sjjO@mms zr$iJi#sgZj4@1ZBtw6j?4j2b_IADuPQE9KVO9{K-&WB9Ev0E z%gFggAhr)-$eX(aUK4=WO4}(23ZNn}*u9?2z(aHTO(?@0Ydfy$8(Y$BT1?izncSwS6R5keJo#0@jHOp91o?PWX@2U z0TQAXhNmVdQs=bx;Tb_`_5ock1pii~&{QJJijdj(-M`O@t^fsSD8ru)GGPRa9dZ;h z$p>&!5tutLEf~g=Nk%dX?+kFXS|AeHSDJ*hxVJfn8|wk^MJ#wPNPeDxtb`MUnVGqO z3|JVgRO)|KzcleIU$3aG1w&q=ZtL~2PnpL*4?w!L_~9M(4@&-byYB>2J{-?|V0K%t zP(IiW)8fCiXrx~l{}9l2Y$X>P+Yzj;bWC1tYHA|6RWX;#auhr$P)m@?k@pQIXe;hA z1(J0i!2clz#B_xCg97ITI(r^k+>e0WL75l8fj}(b67;01rhyU@?KIkz-!aRhD3fr{ z0Jh74{|eY?S7UQ<@ERRmUFCp0K-wYT>wx0$>&pQUJG%3LsEH z=`pa}3Dpi=3^X7Sxu(zVl?Fhl=h#Yv?V_NlnEWRVh;$r5lrfds6QI?x^yJCw_X7io zSpPIe8bD_N2g5Zu+N&J#tFX?Pa7vRQ4P?f{vjdL&(&h~xT^Z|b)~Idw;LHE1V zA$XQi^#F|y?Gr?lXTVEm68-ft9}>XmT*&{Je2Q`kJ>lB@*>P;3KzdPfllzH&KgZ zJR7KcQ))WhKf|%tbRB5AYC9cw+K8=&eB*tkXCK{w@=ix^eZDdOk$JWV!QlP`1{L!E z&%KG%Kkw+a;bk2|&VbjGOvAcZ`VdL(^)+7c9zuT({B9GJmTo$cHjN8>Xg5^x0@n=f z+njJ?h1N=#lvTF3wg#FhgPe}e03q|&iigX9rbp(rfd&XXy8@+e`Fn^ZS;4U++c3Q= zVi&uOrDg6JVWjdYELV)n6L6;qG)SE62kCQhpo-!sMXQc?+qN43WvwxFVgphLKyCOP zrS{ELHWw~>;3kU+@$gw zAG^vQ(#b;2P7>NQ4=pV%f0z40k(%9+2u)^Xu<=Cy3Olb5=jW^UiMDe<2BSVJ96IDv zbfphX#i~m1XOh;}V-7ZsMJx16NaX4iVBK^!H;+YAeOAw@YZ07}4buO^ zx5)86^q<(rsiiuO@f>ZQMg7?k^OCLk_N{F1%kl@k_#PkH;}|Wr`}qo=C-upvKWJSA zHqs}VP-?P&qLIf!$%Zgb!TUa{`|A2hw;QpSQ-HQhz5kXD`OvN>CDwkna6IJHV>2{mej9)gzTw=R?Bbd`GyAf9rF2O zUY0FO8jfVWb#ZaZZ#R2%BsZ&3V?HPN`yW%)MI3cl*4q9`ah+@x#YDG8+PcuG2l?V2 zY}x5ywb#c7lpmcuXZfzOIsAx<%HEmYwzi-yJE!gRm9fv!uKFlB^Sg?OQUDM%o>)0c z`ng>doYONiAhVV`G&KA`En9YC`7CiyML z2(;v<7pJb=pUV3o70OwlUUkF0l6@yiFVhB^jkj7_4;{;k`#JvR8VcYL_iV7%z&&x& z>I#0Umi>sPl>&!P8=4ykwbZ>>mZZ-Cq63vMrkbX-^-LF*U#viAqy%Y=3(!^S_g0CR zE8{QE0g$h~@nPUS{4=)f*>e}|2hH-GINm@NrXb#pG1En3HxG%rurYF6oAHnx4sWRW z{=kd!!M-c;9&`a=4?ixDK*-`+x)97@hutD3YG_~T_MA&llZmgg`JtNyU#?Ghq7`5D z(6wvaR}R_beXzb|eSHlG>VKTDADnj3zm>-@GC|xWk^HNMP~hBNW3Mg;msC z#fFD>SA98J8jS`!9lyP~_w7Ev`upFo5Z_Hsgw$+I$Rk(_pq^oHUWQP%8wjsUF4s;x zLx~}}*pejW8kpMZZL@tn;|!%sz<%48GsDl@nN(kUy=WRM{WqL@eudre?^KQcx8P=F zT*kS6oC}|`nikvjJ}lhl{l?<0KE5XuwArJ!Zhm#C{?(f}j#TA0{$`3t#I?>xnW}A5 z5?9##>R@n~B2R~Fh}H9*H?2afLaGLsWKxuOMG2qdhzRKUqxXJh)>V3ZD*NGdU`^(o ziUXacvNaD|D>)fG+>#BcO_*C=@efXHov_?HecRT$Km6|9y91-YfB!xphB>u=#5NA1 zYc%=X1Y?qHvUj|c73GLn%_xj?2L}%$$>~u?3t3hMF70GvqY1bvll-G=9Q~g8Swg){ z;rnPZp;+c}9n1@Bo^zdZ>I%ODJ(Cs<^iPlqh1lyOil3Kn~w;o<*J~tHL5sjgAL`IK* zLTOo}>%jSD;9Tg+*%6m!=bm{i3#+HdVcAJElvhP!WOo5$3bGheryPUkvhA)YR? z+j{qT#r-{{EnjF?{+wf1`@4FAqEmc4E$8n;bd)c>7h{gMUr$~~ZQ@0fq2Ea+m2>&6 zPkA1z?0K%+H<)n#35F%;3&2qX{FAC24-cZi%AV?%z@H2q6AV>QMP_N;C)Vb8pjM_P z>M#>J_jDW)jC#q2AEM%Oem?Pgj;ZS47i_g8YNwyovCL?pR;at62XX<%!Z>3MKm;cI z3*^?8Rm%H@Vq|8nqf4C(eg($J4`&_5&z(jz1jKy~9cn`(BQ*jK!Z=;02c-oYl15M% zThJyj076YX+`$|E1X=x#jNW9bDGy}BY#8Np{CLd7zEAvTig$c}y<)Gq*Tk#Ac79=+ z=@`YsGeY#UcRcJC_SY9po(&QbQ=2MN$sLPs+a+Pe<{-4rySXeS@&jc?;lIIbi*#@Ahiuve4F}3r+We<&bo+%{o>ud?c`;F zhX>l;m$NlZ>M|2E zHg+!xEQCBq;#eK{{w?%P-6sq-=*)l7ElNWxTlKv_-8n~(F(t=`lfS6(>s;B?fNZM8 zWNNN6a347DRlZ$|dJue_(9lqte#mmUB}Ckn?p|VzuuL$1ag}?6@X9AjczxrDm!_hQ zD@Br9j)@x@$~qsiayU6bMg90Qjpa%8=hiA#4!jE&ts=j0(JIG|ZP;x>e_xkgU|+7W ze%>>)qI&h=v6HTQrb4NDP-LD384pwTerPjcyeAU$-yosD0C!LGp6+fsN3+7_w9$k} zR>ex=P0qO2Dke8^47^DJB4%{8tsZ*f1v#nf~bKU=cBsz z+{|H)hR6d7AxBPi*KAw0#LnbEyYr_ONqUBD{r-y^zWbx>-{|_~$jbFp?r#wxO zm!&w7upEJR%jgE4muV6UOYw*?6?N<1FZgQHcMfKVrp+o&*t581Enn>}7?zTfEb=|G zb;Q*KK%z-hhi1dBucU@!b{qS}zE33nFIThw26QcrXx^W~OZo9!O zt}T9N3Ejc)7snFTR>v(pugKzXc;QWVA2nLoKWmP~@7A&V(5m`T?{wvuMYcITI z@uJ}CR|Fn#%=R`d6WE*k&hhkHwl9nvZUdjM)WUC*uR(ji@jCjN+ATcGFP-qwI?1F; zDHEe(<*@KdK^3PKR)@;jr%{jOqYAh$hi9BMn{KWA>y3V$tQ)^=VBhU zv`iOs8J}O{s^5KdrSAGmCp>M=Ju+f>zM7h{s4;lqMOQDrq`>E=8{cijo(%J82fKU+cEsjhT{W4Y4`c>AeROG~4Y9Y<+qW{lO4(94_|_Gh zCnz`PXmTt0>Gtn0Y7Ad^wJ!Tw~WKV8s z){6c4px7NKt225K}L^{atC7Rx3bVY<$ZKwQ?S3J&f@zO zXI^|tUdY!i5wAs{aFl!lYq4Z-A{FoNaMLl)K}Ljt{6o8E=zd)K3{$aPFI!*ke){E? zMUEFWeh7_``_#(cys(~*7)vZ{0^<<0=R4Wyn}I;VI!6SJB8eZn@WCc-d%<&btj}HP z_fTiq-*`c;I{b2Oo4M@YSMrWS4oLHjfbJL&=u&1ZJzA{}c7u4c7IFn(aqo9VqWAaj zW_1^`{o5kq1-s1~LV#7`8!uhjhN090DAp#wb}6Hi4Q>(3X`K1vJIA*!{%ow};$5H~ z1)(svj?8aB5dh9;j$;L2!Sq%ib|A#ZvPVg~7&oWAUwz>>ANg{9A?38CefQ&m$pvHs zo})1J{R~WsG*{e#x=D_rN%tATfAg%-Qy6}AtVIl$_Y{-wy}zU^Jn*3CbF8;f8|yYG zlW6|sgUJ7%q+}CII8ebrWX3_k!M4?Q;BcU85`gwYqQih5Y3bvS$I!IQ++-y(^Jj^5 zcNbsZmV=}D?-#Z{FHR@%5DEguQ*Pkpjmot{JS5x+s0HSJrN9S^Fi9DrloxN)5xxzH zY3zS<4z+u?l4pdJy)g+uFl|v@RS8=!mp<#<>bh6=syzCvK~)zos7FA1$a0mBhp}~2dB7$3W>#F1yz2Rcoz!lO*?k@qwCW9d_WrP zFtnb!-gT*(;Spo4-N$8vGJp4Th4PyPF2G0xe9}JPA04Vw0!XV?tTF`wiEv%Y_cb3i zG~Cn`X2S@o4Ezkka7`Tt!S1^8ZxfdU8<_E|URk>Gt zy)?}wZ?L^dfBO@vUD{0ig^M|6P_#ZVYk2R^=~BH1PHSYk29BaFHKQJw$VPH~9C%6S zk%jeu160O*b2b)x50tI8ux20x4*=p3q7}t9jrgOG%p(4XF+T+T&6)I+uCLx~JvIY? z0&XE}ml1@Bo%wwT{5#%_N6t+fqh(is8t%fUN0byOs5ZbP?kK zEVLAK#&Ld!4`?C+KS8pOrerdJFhYJ(pMq1=PpEBR0I_AmhRgW7&fkukhHD`p0e!za zYV2VoVk?dr_7+RW89c;IIqNP0+=dva>z=mx2RkU_`p{YC80A6(3-dg~a%TE0#A-+c zB}iLTKUTvy`3)4X3?lV3MDc@wov~paxQ^>sf7ndAny8$kBDRNjhy8LRrBndy#G- zuTH`v(!%P5w-brAnmO)L7cX8UL`o>ZhtTNUg|Q}715PNW2hqG>hEVPw;3W@rp!I=D znLVJ4q1OS@=?2h5&H&#hw_dEZ8(?h;V06i;3b8JZ{>%{-;@ArOxfW6q$i`to>WjO; zdKrCG7!>&GxR3^s+1o~1La`ps3;=vR!P?vnY)u}w7VipJ+T&ci!&{yd7Zr6fc#%cM zZjl)XaLT6M>}}v*iYC~e>J_$QAaO=G{b0igvOD^{T^9%o5$2oaD7DDQGZIRk-q+(n zUG(y$AUsA6LDCQ}h4HvV)DQ6UHnw3RZVhDP3P+C;$M|TxO`u~{=s@Z0pM;h`!qAAMh?rQ`0#;uX-gx>LP|qFBBLJ-o$e+C+z2dgyl3OFNvKd$vVKI=2$^n0* z8PtGo#;5;S4@DNSNbJUYjM#(Yz8!)*nn&Onre7k&K*;pq&2$5d-cILh03FHuAzod` zQ15`c`2~m6x&9$C(C{-h8rGC`JbdB4z}*Tf^a#*kV$}#G$cI?WQY0hFeuxPO3f{!= zMr4n8AtsJa=#2sVIKj=5cg=UvAo({%5rGKid`1sKPGlVH5 z|NM+f&u@|W3PULHZ%Uz?CH?qV-1mq*C^Xw~E=-;rM?cacUU*`ahOQk8&U1KMbS|k2 zkjI;uz|y(Vp-XAoS9h0`EEhiWV04)x@J8#e2--@A4iVXWD|)Y$>DgFpVX@7?t#z_J zokgc3pk-AilY4O+w`wMLSdG>Kpwl@!$cuTa`;kXMM!|^3TFyd0w;3KyM7T(11b}eC zp`kBh2k5Gc!HatpW}9M;CQ_MvD>o(u{E*eyyp{ z#EX;1Oyp-o%4pN2f>GUhpk7mwBBQn8Ctvp5tPB2*k|Sbp2GO%4V~2o%Uv91}5)Hz! z-?vf^ruEGIF$fB9odehT(4|Y4JbOrZL|Uzh+3)DJN%0RbwBXu_pp0Zws6Ou^4eF{+ zPDyd(O#Bc-?mt+ZSIR3=-pFA;;4yc_1 z>Cv6=aAjFpS(QF-Rz2b%MCMRbW+x^J<0nhX$^>D1uuViHxny8t_>P4#W+8vGW$+6K z=z0+sZ-AJE<6)#&W;U>S`p3TNSK9YciGj*3)`a$eJ|~a#DV)M$`ppOyVy!=-V)0x8 ze_I!-Qh$_rWB6e;QdW6XsYn4I4S~Kt-rHVEauO&CPe#w!b${`O9px2R zKR1E6Z4PTA3dDPAS)6*qN5`axBcfm&3_ChpBg_qSeRbzl_j^tusu{KRH|r(kDTkwA)~WaMy?(cHz!B1ZE40;_ZYKN1VLL zL60oq2l|ZjC!Nz6hf`&3ZLK8Ep`!JUDvF9!jC2(NzXQX<%CJpV zUf6D<7ySQ}K6ymmM_~?MngdK;+)Jmp#BHDF?m?O$)&t_Z`txxiQy?!a6dr%7BK;+n zGamNf&N&737-a}#*C0(8!^n(S=78jfGx>pJ5B`oR7a@U2IaDWR`3x|%g#rc8?yfrI z3#2-rV3M9_vGUIIC?9_qeQp7$Sy&*^>fe!zQqnIM6dlIw5zlsU3HVN5hDR;Lb0fOo zI^AJj?v6CoeMk=>WW%mqBWZucj$<`Zi~h3hiyHOlaKpX|ynEN~Ko-#nl58wIyc{IF zbtHkuYTAd4#p&By9C^ly6U?fTLw;S{PT%rVvAv8c!j^K(ZoE3(ukmTzz}|i@>Kehp zUJ$`3z&T$Qb@Iqu3gu$S--(P1NV?02(^N)*Uw(HP^KyssM04^vBeG<%&Pt2V; z+;kY_7xCs+eSRPGWGFhRa*86^p5ttQct-xRe zcttcVWQNV2J)>9u-2W|8ES;dgcP4EHvbbg^c!WEl9wz?^Ft!C!(#|W(cHlAJ zL5?5-gA35=G(!U1%Se_#uc)xaz4%>h^*otg43T<+P7G`elN}SXRs$?|Q72;Jux)(1KG*h+! zI70Z9K7*GcVS!}Gn6yCzqC_#>VwotFvq2&kN4+%HGTnT z*OydYAy-QO#)wg;SkSb~*O3|*g@azi2wJPMpa>)2$o$Y_IEYWl?Fx__rpGNaLd7cf z227y{*Wn`w0Y8y+WKZ$(^0J|{CBu%8exnMZ6MI7zesM!3Xjn=(eJ4nwG6M1ma7^djW-veBg^rgg+aCI4ml+ z5doTBmb240BSS-CA4Se&Bn2fOKR&@q)Is||2dH20)!NL4dmwGxXQ`ce>E!wVqgW99??ocQ?Lbi4OTVA$|zy2Fi7$uJtIa6;98Q| zdH^&EE!;=gNe+%WjKm(|ih)>O9eZbP-z-=Fl~AISkqjgy$INx0 zGMgAICx9E%AlTmB-<-7gnfop_?%9?P#ra(J`Q-&d)wq;4hM_aFY7SbSFJWXkpUpB~g%dY=VzE1ix3PI6T8fUEbZCG3`|2`3yR{4jmFTSq$ zvO>(OCOl2BByOa$AMq~wzX9co<|E{t$jslQ)!#l*Lgkl1`F~&d%g_RH{y&vn4FCU4 zLXHI4KG=4A5kvjbEr>@29EZ3lAe@FmYyqIRsPW#ytB5Nt0Qvxj6EUJ1nMom1pj^~C zHt{k*DhLI0>-&m@ANW#RxcK&Ga^R#5^EMA*-7#^Xua5J7vblkg|24MCQ9H4xULC03hAlqE})>_jA`5Rxq^)i9Py zw(L~K)-V-HNTqD0s4S5sm5L}@wJG&`pBcvY|N8%aUaxs(o*C{w_w~81^E%GsJkH~! zA9>%wgSr+LD$=7!@PjSLoF78)@DD4VkE6v{ZqTV8&irK0&j$Y4;$L||k59djeyE9f zM^Oo+C9&asuS4)T`XKiklvUD}lDEPRNowqWBdtE|8v3+`LvJ+VbH%)0*a4^^vcZ$<;>4px z+8BBDuG!OneR{jN-#(qw&CtjC&h#h_g1#^=61YL_MZ$+L2O=9Hz8&q?u<x*A; zuL{hnDvi?NzEcHHVL{k4{wCKlKye)DGu8Gs;E(W48+l2>pb9)dpCs?{<;$0+H#Piq zsDC5z*Q<#y;@2;4j=)ECO)LU=@+v05J~4r>Mi&qc7DQgqmnEY2YS=+zH#;HY^>vIJ zKq9X$o7N;5de0;K9+Powi_o>;4#hnL~(qTHp{6SNpN42cPP=+jvlhlJA zBBI1P%DEpBOb~NbeoG9mF=+GGWkBu&Gp9_M(p^g{^rP~xd*YMjFS_*8?h-ICu+NZ- zOR5dF29RVprMBjV>d7@n49&b~iz#|P{~I-&#ZdrUosrOR+pj2)_Uo2<+RhqEE8^W_ zTS3Ccb177S$P^LSuVFW1Fm(VAN*8wum{RE2%_TVtuNwUPoF3on|Ee;1=0lq)$)E`` zGo7s0AvrhQNY!P4$o_xkU~eEmj}T)A2yi=Z^m9+1HCz0%^73@KDi2SQh{L6iYS&A6 zL*R^3DyM8%mJy6nG*tWRX3H0+GX(I{J%3h*V{{rUFHSMWf>|oZI|IM(bW2iUj)O5 z0b6iQ8M^GTvz!pBPA9X$HjG5t${hx(+IljZDLh?RHz?d^qzn$dTxvpH05r?$I8&YU zo#fpW*yQW$+bwM8&*L&8@V`_4+6XdNb{POS6D+qFM`Nn{0Z=%S>!Ze_lyw>~R}KE) z1fK+28Y;9gc#`h5%z9>)=H`#-m@dwFI|a*m2H5rsuoNv0)(wj(3)S|Ie)Py3$5V&W zcRN?Ux#ss^^DkA1&n4&2TO(7ei`(s%{r^9+S_8u?)^gKMge%_!+{GR&X0|u5i^xMW znL8lr3T;I&^TX-cf|*LgEwxrEWXx&Q%|gHs0rLcdlNGeU4x8j;IhOkSN8MFVG`>rh z*e+MsB{-(g;WJ?FmZxX+B)-7IDVj1KhjL|GnnC!8{sFgsF5lBnKhVwDKv%ivr#i9I z&d~aUZVqRd^IBuFx=Z6vCD~C;`N@wVkrgCwQ84q7)PD-z&b=_Br?d=mdAOdobFR7$ zPd+d-Z!Gah3hAYoeyv*}t#5J~qH}dpApiCY+I4nz?)Js-XVCHN{2Pqg%;E%NhCtWc zXs_3>hwHvqhUDI=*+oU=e8iw(qsfqh5sxahWe^P^yt-LSiW9WG3F}1X0N$-8T#Fw%2iEn{5o$# z+$B8;0^d((jYz4yn%a_9mOk^YtQ8^V4A{IGF>xfkEY`X@ z?L@Z1#1Xr=Z>Uxk`;H$!p1s-8vG7ESm@B3_dE7Vb2?rxH5O9bm9Nc(+ctI&O1leu= zYqUnso7a}&Rxes`u;i1131MgOh9Bx=w${{EzoJR2;ICiT3zQK^Q>}T{<}N{aMBbfA zDxXSZTEaP%rnEjY&*xEU`{28ZbehGioqEjDYk1a{nq*<9V-y^lzV~{4+aL)Gwnuw! zez?;>^(T1Tpkf0gwAxmHtEe|tE-9$+at zCMHb=ib(321?wPiO2N6=$4H2j%3@7S2d9z{uk~xxuwe$FL}@V*G!z_AJ6RLrgXY`R zHAlahALk~3nM>m4r{QAA+*N!YNI}!`PRY0?qjV{HDCmhu1v9GVC85B}NMNHFuolfm z{qgfaj_C9Y;IE${%n%9Yen@bbn{{^{E5s`UvxG-wTPUK+Zo%5O%N7M4)SzHAoNST19Zbc6imj;~1TAHrf$!8%JgskTUDwWXlqwWavg$$BXWUMf(E zOP?;Uwe#kWf7OVWZw%1w$`A_}TD(c@)H?qX*m<7*FS_@U^inFC3SnK?=pHi}mVJhp zMwi!4_Fra)_Ei_S*<_?B_b$$w;?O0z?Qq%`*0VPv!J>5|kQ(&CHL02Q!bQ}XPaAq` zE2OT8)%G9Y0;vTt6Eq%%HI};n!9Xc~P;sg03>w}KG-$JFBMZHDZ2G^M!uZl2KV!_N zS*`aie4O(4|5uQX8)#%?WW3?|Y$1L~1p-Ky$a!l;kk?a0c!%yit{zg;QOD`BYPl&H z`Kfe3NRzE1)6=#y7iK1*3Y^oa8r^{aeRp~HcY>!p3w=Xz*G9d~^q*P)waod1`L^mS zX5DJ>kd~Jz>=<#cfz(^d05|OGGVC{kRV64%>o6^WX*7@d5W~i!EB<%Wd`igpfuZ;p zy`X1<{_rcQ-u@353> zOd@}mZ?IscX|=J>hd-Yyq3e#JREt4sO`HSspH5L#5_SYWDY{1d!0D%J34A7C&}MTp zVtLlD=X&(vcWgIHOKr%IW3)JmXr2fv^P+u<@tj+SZ2tZHa5Bh&H$QemLKZ;{{SnVl z?p87nxGCQp=?8iFQ_8tDYP#8~L_!No<7sdF-J~o}DU{x(wXc>Q>9ipQbRCC(l!!X8 z895IpRoj0d2@SZz(e(O%QL4p{K;SuBcJcZGv6sV{TReOeB09la7%}@2FtZFXp*A!P z4%xU|+Pyi>wIX=Hhdk)Xe;o5t$H02((Vk)$x2@w&cC%cXv=vR_t4d=no3|?+=BLf0 z57f@79%7!IXvr3lstC{B+WyAEpNr;syrM&`e`D2n@os~p3gnSMiP9<{u94ulbP6a< zSaDE@JKW8OS8uqODbLgz&DMNLCO`EHNqUk^R44IUoVoPFeQ|Xp`=G)!JdsxaU>YFA zDgaoc01oZ;;pqNt=}7`yQRrP&3piF=IzYxJ{%YG9;r9z^%`zA5BIcQs5S|OSMa4k! zaH%64tlN2$!Woy-A@JD7_Oz_qAx5d!xUrO?VKNKkqF(;A2c^i{lv(f62l$Ubtn|b1CkbMuGQ2TmRX6%<@Ke6LDvoxbqKgcMK-zMSO^i!MT%_z-1wNSU9c#$eS+v`YRFBO#?l1$355V@o?lh_Zg2tAdi zQ8>C)Q7}dRx|{lQllC$B!JDn0V>6ZwGCrMxX&TjBbM6|cppaNf_Z7AFMiGSmT zUZvh`j=S}j*+VCMo~^el?DSaO-3`0d(>s}>d@JsfkKX@UT}_S;-xI&(ZDMdv_oox% zgX4;ZTd2)04`!(W731JpE(Zim4hjs_N5ju%Jws7XL}Pc|J%?U4n9K3oO0?a#8@{%Of_BeG-a08aEG#T`U|UdJ zTr44y`&{ZL$)R?Vnc`)=J~w$`Y$_4$=dT0ZR{V5eq2)V~Zb&NcavAf-XPlkXOz;(& z0Hw>A#$rB;)fxKAm>(fl4hknHCz1Xp=tNiz($wsQ0*;(b3M#ScU+%_JJ9)u|14mo}1BdWlWdoi@>&I}a2Cyd{ zFCm{%kc><S|MGyOSZBN&>l@nXxKQ9izJW8So1OX#*rFHk9GKg zH0{(W7K5*7uTdk#(wIKE3!C>O%42Gc8g=FJw zLy7B*%I?|D%GC5W2l~pjYbqKVhe@GrurNvAj6;n`dPuyu;kILOOr!7v)SZ(&RAS$Z zIN$;t5?2(#cpNdi(!9T-HzN`G1T&|gga_G^xxLJ_^?>?h7W1-N_V3n54NB*vrzaXa zWwy8Q4;cBZrMbPcj$?)Y!|D-()lJiOs}AShR8;??{7;!>w6~59m7g;L9FcbvZO@-N zb*jkA;1V%Gy~E@-S8POJIG6Hj;b&?L;#jJ|w`3Ld$^`bwSUfngyLLU$dB*+}4-sNS zSMv3fqwEhO@e5lM&k8cSt0sS3CDG5)XSGIrviW^(nXE}G6~7nwqYF%vyTq5S#mn`=YEe!N%1DS-3q?zGRakb zF#o4HC!4=5dv-oHWT4)!)0*MFxvW>Ur&IM=Ef^zy=V&U$_(}f4H*!r?(;H4 z4I2=UM!ro(RC3Pl#L(q;4)vQW>RRytARY?`Ph~7T-y)ClASi1rTWZrQ{oT-h(hf6s|r{e1~L+bG-#6#}fwQ9DfTe9 z#_*I9Rw9F-WrbFSO|x0Mb_v>No*BQh`{MuTrM+eHA2n)AW`QZe=Jd>#`;YX4MrEKQ z8vc5=wk5U;_x!fCeCqwQkfofB)e($4fnYebndwwM3D*-h{ik8vsn~brkYC;L&=ugCvh;;MfFGUI6H>==o>^u~;01`!f4SWR&7z zvgGrZFUN)#zB&?%PlC;wHK<Bsc#03zE!5!$eZWzDqUtu4li?YKw?ZxecsZe*w|n^ z5IDJxZ6;2-my{&0jtd^p)X{LC(`!mpoZvZu!1awubDr1|M07>SxP z^S0&t28|l^R8uQ(f6@Ebw>xk=;n%R|ZUsssp?gIyprTTT9YN9&$rOVn#!ax%h8>U8 zVWdUVjvZGXI0LNw`uSB0XGv~oa=$*aVoFQZMJI_wN|!BS+XKOm_Es4{iZ=UM;F`?2%*{pIEKiKa1tR=Kqw@W zB+#i0=j+CERV!{Vyp;gvIK@XV8S`El)ylvTrBv{^%lS%lPRF1f6f|iz#i@5HuS*8t zfgKFhu#2d0#_$zQr$%rx0#if*b)2!oh2hnTYW{z|LoTs-RQs2qU;P_ zR>MO?Y%Ph>+#aWGV(;JI4*F_WrR7+$iDK(s-Wjpn5)6LU;KX4{DbpyBD5!!M%$s*K zdYuD#kzBK!<0tIU>+3G}Fb>_+tWBFXqAvg<<`)&+fBLk!f+GyuY}q`8^fo;m_DV+U zd3-3<;gwpTx|JLLx%ro}?4@RA<7kTD!gcV7YF;*X3PXgs>C;$$)!hrwV59bpTs$cC z!-q&p3vzEFSF*qk);#8*3)ZWYkG3-0EQgZT$^6wy40Mx&q+;7p`cp({i;{WRuwj?c zprs%A?+VmSwzb%y6W$#kN`4inUf29O)N@aq!PQi&&G_LWWyrBK; z82q~ebhAY;$(FC?&oBeQP$?fEG9ygEyt2}j%_EoqVo&TU!BXj|sm?SHMtf0qUYmBW9{VVkGur%p5@HgA z<3p9a4DOMdMA8W0cQSJ+fS~v6i!GVyA_JljW*_6rwo8VEyST^+BDGHuahPLRzhA$9dSpwY#QI2$n492y*0J%GjXG;> z8Vy+&Y*(n_?NA^igACV>DB=3;GyiJuyw6h=@yb=Nyu(vXt*zrx(L^5`;$!n2AS5>| zzl%=1#i3qZ$JG((Fr-b3?~8s;-oZ2{<-)(WqIPe==lh+uk#*#gl?|qmgDVf!-Oy!C zp(XCb#mSiK(5p70$E;hoF1tW>7NZZ$za#aLll=~KoAL0-Ugm^h&UKsi&y)wjmHt%3 zo^aWbcgn1m10KO6*ME#4W4&_qY6d(Svys~+QiPdE1!K3z)~ddU?uD7ATxw=vad<^$ z(=z7sWM7gE!bx9jYP#QCws`r z0QuN1w|$picT0hxM}?2{e*O4WkZcsTSzTNPV3uiy(R_6S#R4fo9q`s%*YlgIg6kE6 zLtI`!wC*N2g89rzN4USfge|XAS4=Au+;Ij0?K-B?O40>nEhfevK1^W3w2dEXbMeO` zjhjgVtY9hnKvOU;B9%*q7d4s$`obwRU=kI`QPvcGFrZ22VDAs{jouJjvzTXy~ z4h8v@8Hd*qnw0Y*|TLtc9D4%6}@|lZQtuk1-a%F&xlrQlsp^t7S z-|&2ITf(d~Cn#WWGKfPFfi4-+bpVra*3er9p-#ic58k%0q{-Jh+wp_jC&ex^CX!2_ zQwU=89P!+I6iFn5@(RqDr&rPt%~Y>{W;@GSi~yBnp(FO56dZqtj1 z%5EeyLsumHPwqDx$kra|uydEMUUjHB+ilnF#f!P;RNWsEZs0)ExJR**KH-avb?WEO z4I>D#l;ZR>;_2y@@oCfXkI4NP4QlUE6;B`Y90L?429) z9eYEWVnh~LcQk`b72p6#Dj$G6Vc;5t-XqqSfe8U z2pg2bK^#0}2$R-!aInk zQ7zQ>gAWx=+qYk_drAzjQ^FUjts0Awa+j8thF<9YUs@kJ_y2se=QOEdy(Tlo;F?sd z1Zs7mRKU&(9XfaAN?)6_O{jcjLKS(ZDJA5Uu;RoEsSbpdjXN8`x{A(3TJs4Um z1q9ZIgSy)WfTF1p(4^CduiJ+=={Rih${Hp4`KCPA1zW}bCfr}0C^9K<!nuZ>QXftUf>UpdXASVJ> zuHEUB#fc)knz#kS_dW=J1wmGZR&p`7f1T z(z?mlCmJCpJ+aD2^+roYi~v$s0`*uXde6M2@NLdMm%- z)djgNp~!87tU;UL*8 zLhex|nLy27znEb>V&DvlTC;H@GoD6qON6?e>7mBm56U(~*~2uS2UAYm_AV?cI*0ZF zl36}MO7h&+H-IFtCmBE}6m1NqnwX#VO))jYKrT~ZMHX|wiIN=>$@@ML*YWtP74h`x z0l@MM5?k{^E|cjrCBTXrKtc?|C{NF$jKo9wN}(>hXlr*?06Ar51#4+={L$SX&D5N7 z;q0ivo-MWgF-_&c&X`wkw(UE5xn-2<-wAG6!zcR;bIdAh^eF7=fcyCy*3Df!Vf)#- zoqO~gl%)}5+r-dDD@Qg0V>R33CUP2g<3^ke*W!;4C4aFQ# zHazu!IsV2jghpz8Jvi$?ph6Tlp_;MPj-xdrh&I#HKM;8h?ECGG z13t}dU9dzjusovpuX8&xq=ectfD;Q&>A ze+z|nO;)Ac^6WO=H5J%LvGxu?`s3@MepGngQ*T$fLYn@en(ZbQQFU&cD6|w9wa=`- zn@a9_8d6O<_Mj5s>3h z``9^pJjLZwwD;VXmM6Pu6DiW$=p5jtb~8Wm$Q#pG`Osld|3Falb>N@fynuYUwQ}V#WQJKpn@r=lh?ZDdP6YGe#Tuzn zm}t6mY0+!@|EzA4=l;GjhFrnWo@4p*$l#%+c$Vr0B1IJoWsi@+1g~+_bRGb5vy}C9rDxK_ zA-}eQ8=Em9FU?1BaNxUYJ4^Y2Gt=h7LvpVx(GEz~*~sU{KK~6l82|qDn@AB8@D~8k z!zo>#v~eE2@T4$9A}R6yiOR#w)N~Al1HnKuT4t`()!1OP$bg$Par(z{k_(LGQ(&YN ze2MXZ#CnR7+!UE`&vrSc-_oCgA}>{((hv)IkTs^Kr;me;(!+*eus^yP=kryrp-mn= zdL*40B%#8baU^@WE=LQ?y3|+EY@J$N>h{@-m3wpqsc`an~Y|Ys!84qoF@_!N_rwNt&J^ z!jMEk$RBKSc>U>!8d*>xLSqJVKp>j2QjuFY3B2Xhw6v`l{~QQD(%-1YXgGqD$mtAq z;w0hS+Rq=RuDcULVh^<%08Kg4fOK?<`*{0D6x z=ye0h`HBkCe+G`V;;`vyB;UPTlQ~QRn+;wNqOBhV(N-wiXY%au5sXb{ zEw+P7d0UZ;%whNKqcTaGPz3ZxZ{r(-CjUHG@&fb`OTIbj$iPnE5fQGvGS*z3BwZiEIm16LHZ!|RY&Us1Nwu4`S8(uf zatJvookngv>U%E3zc$F=$2CGPp4|Tw`(~m=W%agEr{xgX^|KU8kzZw+H*u|}c4kVk z?oy~N=_~vi=RN`v*UZ0e+IGiXmGdq%H#ALIOgZPny&N;;L-kwT3Mb8SBh80Ib1+RJ z>ws2h1TnK^$|09szwe5gyeygeboAIUo3etXD7U`fDa~wjkZ(woRf!3rhbA;EjC*bx z3(^7rNHuJ0Be>7M%s-%-#uDOAdaKHUo1{2s0h1?Iw&*33)atAj4#$Vy+l zd=BjOCf@ZTfv~>yAhBheHkK8SVGrO#30kVa3#B4a#=oOmLp9lD~+8T>(+vU76=1*MHwMLZx7(?DU5f5 z){Y-IGxYSe?JM%S4E*-~kE)qnwiM5esnR=~c65KiA9e1leXu)MQ9S3A@u(5jgVub_(&+E-xPA zQBwQB{18F|vL`8qynOZQ9scZ}J-?F~J|OjjH#tLaRT$q~Uyo_(MCb8z!ppcZ3Qslx z8_)+Fg)1kPPJm)$gR<8SVf;Lk&5%BPMmJCt2afikT?8Byf!`7Jhet3-FT?CL`TdkTjsjc6l&p>RM1CA3dN*_;?A9gV z1MV3C(EN~lckXn1;)TrxSfFkMH6UQ{P^0U}D8MDr+L;t1Q0=k$Nf9qz9H!RRl6J8+ zUgFu;QOB{Pj*gDx#pllT6bOl^_tMvreg$2B=9cWt2lnD+BL0BVhRrNPx=SbU@^`tr zFD3j*E>6bD>br)7l#lc)0=-HnIBlWnL4*UY*Uro&9W4}ZqG(0=R%qz&zJ1%t&@kS- zuuk2&HTN;=FrnWf-9>$oe&C@iGTg1T8xRJj9I&A@ESI?W^>L4g*aNSv<;@ETNCAjS zQ5=3kx6o_q$u98q*6D5kz51%^Q_mMV2w>Z2+wFbJ!uUU;JCAgqnfyN|x@IIv7S`OO zR}*b*?Z^plcv|7-QjH3Wyu&NP`0(SJ){P?&6L6DR3iFz^;_Xd!YHN|NU%$@yhL}&L zQG<)1p&IbLck=pGE?(l+Mm?o7-K>}krw`NVh%R~s#v+*d`1lWYCbyl(=Q3|CJ2_3# z2J+;|`4;(4}@90b|b$N8SolHjII@I&=P8tw1pNODy$)j8N$soI6HWqDCYT) zjGx!j=Wx!uw(?kXd0;$hXIuRf8UtQc0M2EOrHkVpUeIJZ-}62i;#N?}HyKx)rJl$U+O}#|9yx1C!N2 z7Y0ao;}D4|k3S|=9j*;P(1D~52=I_~;inS8WC5zCi!Cf7q4QkmsG;dW@E%*@=x6(i z(!p$$+g#o3dm-BbEMg~PWk9Bc=DIEM7cPYx(I6m5TFE#kkkqB|PLUsjm zjF641ref%H=X^o<2*-+HAe{^zi8(T9jB$c{p`CCE6+E%bCd5H(h*oaK$&yPF-r2=U zqN5bnk$!DHZ*6Y!D3NKS;6@XDHTo9Db_#-(KGPwk0tc9n{KhF{MH>;?snU#F+JRDpWQe%5Bc7$6!jm>;Bok&IyE<`HoqV@ctE4@chu+)k%O zO zgLgo^?%A2~-ae$;Qfz=lL=EvhF0NNMd9i4PXf|m`!CR(Im5X3K`=Hw zA+{sG>r~{`WCS$#r3=mk5DWWHC*pP1o)iP_R+0&ws*1p9^9{}fm;&(EAktasqawkZ zaj^Un$MA1VG5De9$P*&7xgJhafsqRL*6KaUo#>CwVA2Z>PMKcQ&D=5`JsZqD4rYqHoj@`2(9v z(k2nLpRQMkfgWj<#(UMn59&r#y#GyoHc&dUPGiYtWR0p|5O(T^8Et+iwiG0)4h>Y!PX&M0irr2S-#>tPJZopwLo4I8Sl?QUR6GjGkAy|CXxtl+VQ)0;*Qr5-BN_*<#k zBs69%@`-F7ep>_>DC;D@Y*^_~1r6w)8#{2pwa@QW?^Hpg9|i7vKtSQVb@XqlrqpVp zl9Ro7X{g?grzJT(=Z%m$8Hgg;*jQTerJiC%SMR$kf7O0y?lVdWDgaR=pX1>Oo!P9b5T084ZYFQZi-=#*|W3 zrmtk^3Ii;(6vPb`BK@mSa{0(8U5DWbiQ6FY zisfl0DySb^>*JJ*vB}BW(b;seil>GGX?Tz5wy==gNCz|KlSmWKV;Yp`wE5A-%pJHC zGEEXWgf^`=X{^#3&ON2S(GO}jA~2*q6B9%8%DmrPHr-}pz1Ab#&(E)nI_4i$)?b}E zMTh0YdnlLKH|g%>Rtsc!8Xr0lV~FI}g#yr} z3MT!^Jeh-)uc*ENnNikP0LF2%}6%dvT9s-4cn>RYiqrHc{HK%0?o`^bz)R1?0!rL z4$*nEAWtV3a1!rLcIAD3@#s zirvnKhw6#p9LqXy{(PDqI*1aBI@0b&X*`wW5PCTq)~`3`!fe=a*gp6t;c3Mt#^Wd~ z$h6bCF0*uY?mF5Y4FnVlT+SfOpy05A9lwvDfm-NY$wI_KPBJks0EQYDjo5&4ZCs${ zEzEQgxzRJwW9lovy~?9D>vD7vXMSIx!_*G>^&s4U97T9XAVyD0p2XQeI>!_|vNUZ2 zHwTqDmFb}WIt2=oegJ2JQP?5XHJtxW&JcaKo_y!-e8 zqxdZlozkGP$W`2R7F_r=-ed_nxo!wWmXJwfV?6|e7Ycffw94%fTP$T_AX%#V^X!&o zKL01Fi$eqlONrL*0iV^5svCFXg<=PYH>q8)6$c}TlS_^45hg$(zQzDxaleA|+<3Wa#S7A&iHXZEJ1auUl>;g`ZOFLxuF?bg3twMwfU;y6y=$YrvFANlA?O zRxew#T0AZ(bi@BY!w8tPN0%oaj*wM0EuFwW;^TJP4O%}^4!fFTbH~jyk4X<4F}iig zk*HC&IyG|sJg1f1wS~FU_Ui|`bsqcR?ZGI^$xVU-&S`1)ZNEBcs$HmGql|~g3Q9Am zN*2<`C+(LMy(m1kMFQEK#FH{p+ns8pS3_-Lr%%U_z>^rcro4ES7)tRHQGDG`QT<#S z*r2qiyg|C&m%V7Vz$-Fipy!m<=={eJwOXjRg;vh6R{yigF5rfr-2J~)0QY$)GnI03=Da!W@0j%9R%UgY(HKJw zF&b)EFfH4Yq8pUlisFE(7d{ zts%7{?AOT3c3L*dLJoL`SOArPMB)+r0N82aX$Pm(7R+5a=TucmsjvsK)&2Jf29dC} z!AysR==nfIp}$8>xac9J>v)no&z_+hJHCdd3Ne-!u}wB*hNWolsH3&$+&PXgcT{bu ztIgZ!XcrV1p+SK^LgS>YVeJ)lD`s@AS~`1;-sV9Y4oqG2=a;%OJDUV`9O~~?Q0nFs z(LVQJ)R6&=Q$p`7Se-a-aem~%s5WtR7p6>0*|4YM@Q)aLlw73M8UZ!rbMp5bF6 z)^&~EDF_72-s3c9tx1hgx>fd}1G`ZdFqf=vqjv*tNCAp)GAqYFbt3Jq3X}*wFpo}w zF=w%$Xs3*ND)U@E#3!cl?(_-asF3n{VP_9XXedx9Jxg3oPNxu78|;68MM#XP%Csm; z$jHd}lPoarvzy39q%V?~%Y`ByjhJc0Ex0f~V~b_w?~LU^Y572EIH|a%rzW-iKlpj< zJtN9R{MqxAo?O!4V?<5J1JOQmeCY1V*^mX*fJvlYIdA8-jqlOz5^9G*5I2-&BPGEi zr(qo$cGhYu1@@w>Lm9VV{TN?K>0qz2_s8N$G4=qqq4s{YX#g$LqDlnJF0m}B-~HWB z($yN7w~Rgm=yl%o;+_LJrEWD_Lx(3}EP&OAlD^B1UdFg0@Pxsk*Vvwm;i-ax=&S1T zgDDtYp;EIS5~wEW>7@FVe(g;}HKq`uC)m_ySv+dn`Vm|h)Eg%Sy{@VZ#=p8y3H3UEQbQCp z^E{JW%aVIEQYVoy+E!NCJ2e9GNGny=`TaCsp?W5|%25vVT-&@=y@))jHPwE7Pt6Yg-yjue(U z!;;mjy)quV9Fe_3bVQ4=gZQdQaaoowD-!L~#<-dJeCI_);JPC+dw>3fwg^@>_V zy^cKK)}UfI+mj4--Y`Y~1t+H+t$_+EIo%}13(CComLm>}!K7hOjYq5}kxmL>$agl) z?0I6>?%n33_o}t!$lhhVof1+RHp7A4 zQ{buCA{vg1yL7vd&7+9SiRK~^H3LfTa*U3Sve!V`mlR?fU%GwIS$2mfNmDatJpFpv zXTRk}oN;ZX(Uww`AGFSa7%8lC3{k$1J+1PQ-^QGcwu-D5er^(u3z?$P0)7|%eheHH zx+|EIyr31?$SK)cQgUR$Qgd?+#n?pJAt}wBMX;!s<4(W_9c;3YPS~L{m zqyw|E+nx=)gBpT@Ht{HoA`lBSz|=8Mz7T2nGQ?m4)F zXQXp2!&|d)&%s40q<3xdq z^A6A^ywkSZ5xj%l&r+-W>7GL3H-#V0Y6!EVVg+b`I;gFfJ2z3Y;AFR|I{&9<&aMiQ zp)PZ3MFsT2uY>Tc^~O3K9&9#&Rh}qrLJ(|32>^9Qr&;}_xtS#VurTFR80iOs!84`t zEAl9tUkWXROKE#Y#B`cP()(b=Vjve<47zNHY8FUx%%Sv$X1-fD>$#IA{g2aWN;&)G zn>S|2q)Da#U`h(uZd0~bpSVoAuh`g53rI;@$p$|- zn=)kP<9|-~)*RRGOY+sHNd~d4bR$}}ygR{s`VLcz#TIe7O*~Epaa&&?g z!JM{G(SJGbMrAnS`A)bgCxTeoPYSM)dl#rb6-N;BkF}Kz|dH1)k@6C?1cv_|HGtTk;*($q&G5 zty!~t63r-ZlyPoy_dUb9-6{^cG+y`K(jyC7)APA<{=8F0jL!LX1EZhx7YnT2@r4_O z$hd7vS)8rLD^0@dOV*%!w=^6_-AURKMy}(LpI~>;8^0^-E!hhO9PXr0C|-t2^S-zn zSO0!q=$uQ7Izc{(9{wIOob;VK6{g~5aOLgBH(Ro9vPthjoS88r=;FGZMfP7>LE|}* zt9GL?)C}gOLxU$=r!JtlD1M*j0^?gH$@XS&GeUPW)z;^kj40rSwh*V7>C>i7%MFs- z08a(gTY1}6bqS>!i@24_qd5NQ{vkQ86%`c*{wHv81=x&Yg~IZ$@Q&+tToVzgd1G(K z;cC2s&RiSc5`sRh-<+Pffx(!OgQGgO0MJaIGpF_Q=g;{$O`|%l(+|zN(_kK;E{t8~`g66H|Cd;87W->M3>YqqX3A@95Wm*#`>r!-2@sq)+P z#wjuH`?m6l4uv0gtP_eptsj8~ zy(5><@;NRc6h)!Fo8!c1HRoY!Gv)BO*KF&TraL>$|6Dft+zj`=+a@|V^ex4Dqceoz zsscSJN?JcrEA3T6V&eo3H*D8YV_esc1gG;EKF2F-B=m~W@O?P8xnfzTBMUbgK|%JW zj?)~^qI{KXhI#Cg83RPSbUZd+nQx)h(Osd)J z^mBTNZCbV*n*D8+5nS*YI%cNRxR~8LVor}k(dKHwjg=IN$H#9KCDBOrbnbD7?}^`( zJI?*GWpe8lN~0exU|JVAXD9;=zV`+)f`P^hX2q^-H?HC3MDok`+qGG^etHEaaC^Y_ zksz?_{(EaK*lV_DxC*r-iTh%-be}?0cG7kBb@leR`fREj-!7s=g9pz4+OOHVlx3xr z`|Wi<2U^`N3BTGUE!d9uveIYQw&K;Lm9?jI>s-FzZb@!}&XUiSjZ&(L?VB~xexCRJ z`{oJy!_K}dS2}g&$G(V*Z(X6WdUJXcgIl*IhQ#H6eK&Vv-x)^wwG{)b09Q5%(rvh)Lboh5OOf%0HM4Lgp^r_;mh6*4uv?HkSRg&$#|Og(5=3CwP0_u3f{Y zbjTm>tk~CGLY}B&_6+}UR7R@EaF+a+W_!n@`_^I`pBS*ShIb=q5LZ=)cMX~~6F7Ar zW2Y18y7H+C^Alr=1QYCJ|~(=yy8A`lOYt- z!NO!QyXfH+1RS zeOonnQPDklUZ8LE5RHU66CH0Fd`{UiskH|`OKu~Wik1iv+yqXEHR`a8edD?vnhdG} zr=(+Az8l*AK1^#m%l^n_$*G=<*XYSRT7s_ICRROBmvqCwJDZmk8~@v7yRj-HKC-sz z+tD{+IphXr0c#?ITY1)}QpI{7%J zUiBv`9_(1}FW)QU&fi`kPDiFU}5Rdn7KXvv=1^T!_*s z>rpTu^sQN4OCCuvTCGntvOMcwyHk2<=MZ)KIFrdH?j~X1bz8IE+2uL5;T?_`uho+o zar;+%=y0z3k0~Cw&x(AaBkw;;_1vY%WASeve;!`;NyFxil80GUPKbHeRzH5DV)WhN z)q%&tJtt`5%DD-Cuhy~9QNx{1G@J6`miP8q|NcHjBcG;htd)TUGd>M7jp%B0ENJuh z*GEggs$bc(YWbWGKfbU+G4#*s4Pr3TCTiSi`!PPgkLE8bGd-D?V7R1m;*>zOCjWlk z;weAQ+5B>iFKM5DO~B)vbp7{J<=a7<08_#yk0Q56&IeU*+)W z$@2U;uXF-6hP1jcY{TQ1!<;_OJ=4Y0J1Cg%Yng(nTQhFy1xcD{MIoWr_v<0SOmWRZ z4uk>_UViERr}#>(>~%ZWzaHq{&T;eSrx#3KSn{I04dhA$9Sz7~2!IQ9%&TL&$sb;9 zbvSMVe|Pq~{c%x9lub?TBSpb(FZ#Q6R}Sev@I=W!y)XGc`sN_Nm0yeBoR_uAQ%y8UDY@EtWD~jKSPcS&IkzMlRxASZU)z4Nnzqhdl)au_Yr-q~`cb6y5*U&A9h z4e{MH+W1zc-hj<}!;gfuu^iX$hy`PQE{$ zlzQd$w;S^hU2^Ctp_-!*yr+RY(&)qI)Y?sa%Db#ENgPS|2b%{J>@t3Em{ z?s)xfCUbR0&42Hu=a<{XLnGgu z`*+X9ix=xGoJoj53$xJyJJr3ANI`4H9=`~sKYjlEoADzd0H7On@*9n z&qd!jFU>DMLdVN0$o~Ay3opaV2j-vqQtW=W{BsM>H`lC#>}y^wvj1?*GOa^O=>&99 z;d+V6TfRQYe`rz(AkF*Gy|h1)k2xo8lkI49byZoYL!vCUpi3xt8%>>{(OV9#LgBvu z-;Fc9?~HtpEmPgPU)MSHJjdun^t~a<{dZlsl+>=f@(9&E_5nR|=2cAcz1Y_(sG(w| zCppqh@j>(ea5W>9brJA^geTx=!)2>Ls+fy~4ueEIVNCF#+hMv?U&SRMj6J}w4BZpP zb@}_t`R~s?%})Zz z;g=+xrx#}Z^FgVLt)$Doo|W@4ujY;K+1Yt>ZyNT(eIM1DFWU!Pq$&BT@1uV%TyS|d zb>x7UhY!5uP(vi)5A}r_Bw#Ke#v$TMe0qr_0>*`egCM8Y&CFPiekX~$DN?d7UOaNzhj zsX{pNn<5zq5b#P`#`Yjq8V}7G*vV6cF*t??4rr1B#M<=LQatSQoK2F?})6w<%G3t-Fo%LI8=6>X;a@M(;WU@7eaN~?RQ<@GGn+=$5TO}b~%^Mr1>?; zGCl!CTTLv$at>Yg0&>j^$)m)95sCKRn@4{gw!&M*viAJslwK(<4!LDlcGiA>aOM(X zV|frAzB79Dtbx7#t~b=CrgQ^4$@c0L);HSV z7k(e=qEo9@txotlmA*XvQEhq3r0dpi&W4&tMOC$_MwgEVeX5QwlL8iwC~`A#%DGb- zt?e^DaqAv{T!dxB%{GT$glxo=egf=d`%#4ty6@dh$8JLKoUj0`i-&zzeAPd-!Pnl- zD9nnK&jx(_*OMVT$uU8m7uOA#xv)d4OWy;Z`~U$DI#u6m7QBsHH@_?8N5xn5p4z#z z?15qVAQi>&)o+tZvK&IWlLp(Q-BXDVOWoQaYvDhCXL^m!@v{%g8M}!?md?(#E=WRl zkmwX2Ty*3y*8susTXmE+*Ry%k*e1VoR1_T8uJk$%0}EzU#?&62o-k+Su8a5kWgBo2|?n@j}nq5gfW1C*`&}*+w|MCU>7hG3Me8MN6ZBUrKu%D``b#VoTq&IWl#6A4; zvijufs(;(Aq7WPF6;6gdLfJ4#Z{p1e?`n{t(0kWvAuG}GWl&-96|2lIW-*V?q~$Kn zy}#|@qFv=x`78SmsOrL}Klm$j>X)pA{RRwJRa^nZ8J<(#x{Zdt#=b2l%7?rQD@nF0 zu0S8j^2Tj%cEMt=+@Fe5ht94OR(0`$>ocQn*~ASr*|RfhQL~cWHwURS8qvRw?dKEO z^As7Q7iE5Pdqu_CAuuyh(`;Qy?X|t$Ugh7P|dS+gqv7yEme1o!qTTRcW9*uha&CaRv&vgLLQ8PR^dczRfXgGZ2D z#*-&cKCV?xYua8wh)-P5)-i8SXth~3{6gsZmYHruq=i-7fQEgLfb$92Yed>1DcYu4iya(Wh3IH}y+CcUbCFR<5!)9)478kE@}|hvYSP8x{Gt`Vzd*!=lE3OUvTF zWcB~^625)Rw~Z@})V%fNY_LxGt9ahQSIcTtKKgX^3G8uiPp8cst<6#OMs}v_C;Q?* zX+?VvM{$8^p2q!nForzBKYLnT zs0dxAdDYg;tcKs&Wx0-5vgWEj58imc)!chmqB?hw9h&ecagqH17=+oG^ZV+k*0;@m z_VMJ8mDp3g@yE6b>a(la+l{XL^}6)sj@Mb6d>rgTXU}QxmUuYw1RLu>P;OL!>!B+b zFZSQLTxr?gjq5ht)#`eX8)x-|?{~1X3m29)?nX(ecCbZqHz9r+@0s06N3-|SFQNMX zTky}uahoUHK9w`Q=!L7n3p%jdr+j;HJq-?RbzX<@Kq)iIV-TIQGdD*K9y$JI?{K4I z)j@07LdT~Zs=RgwyjQo_HnQ0LcBk^y0dpV}5Bn`>mOI!Z+omHoetcWMkJ7GP^MXrahLtwye%g2CGecX5HkV6I-?I^qg_b_q>)4W|+z>bK z#v0R;&>ltHb7^iS$C_$7ZJF?5ZOs8^HtTQbSebfs-q&wiMBpF#@@zbL^b<*)(Z#GBmnU?+aEnT#C-PCziz0#>wlb3=ctH}tG!;Pdu ztMgmt;d*nQ=3iyb;4-{Sx}X~CfQ_0(5`1MorIoJaWG1;m=mPf&#LG=i&a0`H$Ff9H zc|UXU;)=lX##(t1!#-cWD>MY}xD`WJ=2Vc&yFpj1D!xg%RD02uqUS=sX_!6J{eR6$ ztMg2SV!;I|UpR8d2R-;KwJaML|LYG{o?2?WE>=DNZLXtc_PS@E)>o9pJM9sM)X3Z5 z+5b&Y2z0B3sp0M!l)aA5skKYjOge?OT1PSs-?&E)AG$5D4x8Ps8k%&uU7biN7WZSI zuaAsXXo;{RHYRjd-&Q)`KN(8V$mm$ztNwyQYYq+^oUv zQb4O?l1M^%Ba5(uJN0fFcdsoTTm6vp-6SL^6g}=amVap@>jIrTM7Ga(piS1>5C*T_ zGjuHQm`4Fp?6042FV4}ge{~1fU@4KH-MMq;upPI(M-6xhhFVn#KJ{ASkSldKh&T5X zMk8IJ7=42(R(EQ3JEN=j-h=bAsQhG%sLli)52dEN7ezxPBEi$3G^t}?IWZb={QvBk zmDB`fU>O6tkI)r#G6AsfJJD-tk!+{iE971UaO3wpCGj04gLbgzMn6^(1Im1O)zF2c9Ujc+Z}i z?%%+XzPntRAi;*Uv09T)rWDD73ww|VQ0$oZb1MiFLi&PRFffq`0pPI^7?*P?sCjea z1Y0}<16#SLiz9qM3adhxwoyr7NQ?%;Xdpl`#Ar$wO$nnZ0TKeFri8Em8IyPZxO2qs Qj1b5GPgg&ebxsLQ091W29smFU diff --git a/docs/images/raredisease_metromap_light.svg b/docs/images/raredisease_metromap_light.svg index 23c45049..da63879c 100644 --- a/docs/images/raredisease_metromap_light.svg +++ b/docs/images/raredisease_metromap_light.svg @@ -3,8 +3,8 @@ manta + id="tspan10">manta + + id="tspan11"> + tiddit + id="tspan12">tiddit + + id="tspan13"> + cnvnatorcnvnatorexpansionhuntermultiqcmultiqcpicardtools+mosdepthretroseq vcfdefault path default path alternative pathskippable pathsmantamanta + id="path10-04-6-7" />vepsvdb-query From 1353e069afa0d4608aea42379305a43c40554fe1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:41:08 +0100 Subject: [PATCH 1671/1921] fix? --- main.nf | 38 ++++++++++++++++++++++++++------------ nextflow.config | 47 ----------------------------------------------- 2 files changed, 26 insertions(+), 59 deletions(-) diff --git a/main.nf b/main.nf index fa0310ba..056ec813 100644 --- a/main.nf +++ b/main.nf @@ -11,18 +11,6 @@ nextflow.enable.dsl = 2 -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -include { RAREDISEASE } from './workflows/raredisease' -include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' -include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' - -include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_raredisease_pipeline' - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GENOME PARAMETER VALUES @@ -53,11 +41,13 @@ params.ploidy_model = getGenomeAttribute('ploidy_model') params.reduced_penetrance = getGenomeAttribute('reduced_penetrance') params.readcount_intervals = getGenomeAttribute('readcount_intervals') params.rtg_truthvcfs = getGenomeAttribute('rtg_truthvcfs') +params.sample_id_map = getGenomeAttribute('sample_id_map') params.sequence_dictionary = getGenomeAttribute('sequence_dictionary') params.score_config_mt = getGenomeAttribute('score_config_mt') params.score_config_snv = getGenomeAttribute('score_config_snv') params.score_config_sv = getGenomeAttribute('score_config_sv') params.sdf = getGenomeAttribute('sdf') +params.svdb_query_bedpedbs = getGenomeAttribute('svdb_query_bedpedbs') params.svdb_query_dbs = getGenomeAttribute('svdb_query_dbs') params.target_bed = getGenomeAttribute('target_bed') params.variant_catalog = getGenomeAttribute('variant_catalog') @@ -71,6 +61,17 @@ params.vcfanno_toml = getGenomeAttribute('vcfanno_toml') params.vcfanno_lua = getGenomeAttribute('vcfanno_lua') params.vep_cache = getGenomeAttribute('vep_cache') params.vep_plugin_files = getGenomeAttribute('vep_plugin_files') + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { RAREDISEASE } from './workflows/raredisease' +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' +include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_raredisease_pipeline' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NAMED WORKFLOWS FOR PIPELINE @@ -147,3 +148,16 @@ workflow { THE END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + +// +// Get attribute from genome config file e.g. fasta +// + +def getGenomeAttribute(attribute) { + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + return params.genomes[ params.genome ][ attribute ] + } + } + return null +} diff --git a/nextflow.config b/nextflow.config index 1cfa2fad..b3f5e3e2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -48,53 +48,6 @@ params { // Bam_qc ngsbits_samplegender_method = 'xy' - // File params - fasta = null - fai = null - bwa = null - bwamem2 = null - call_interval = null - cadd_resources = null - gcnvcaller_model = null - gens_interval_list = null - gens_pon_female = null - gens_pon_male = null - gens_gnomad_pos = null - gnomad_af = null - gnomad_af_idx = null - intervals_wgs = null - intervals_y = null - known_dbsnp = null - known_dbsnp_tbi = null - mobile_element_references = null - mobile_element_svdb_annotations = null - ml_model = null - mt_fasta = null - ploidy_model = null - reduced_penetrance = null - readcount_intervals = null - rtg_truthvcfs = null - sample_id_map = null - sequence_dictionary = null - score_config_mt = null - score_config_snv = null - score_config_sv = null - sdf = null - svdb_query_bedpedbs = null - svdb_query_dbs = null - target_bed = null - variant_catalog = null - variant_consequences_snv = null - variant_consequences_sv = null - vep_filters = null - vep_filters_scout_fmt = null - vcf2cytosure_blacklist = null - vcfanno_resources = null - vcfanno_toml = null - vcfanno_lua = null - vep_cache = null - vep_plugin_files = null - // Alignment aligner = 'bwamem2' min_trimmed_length = 40 From c1d7666ebe9fd62ecacd59226ce70f1b52e6ffcc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 11 Mar 2024 12:50:08 +0100 Subject: [PATCH 1672/1921] fix lint --- main.nf | 89 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/main.nf b/main.nf index 056ec813..aa92e744 100644 --- a/main.nf +++ b/main.nf @@ -17,50 +17,51 @@ nextflow.enable.dsl = 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -params.fasta = getGenomeAttribute('fasta') -params.fai = getGenomeAttribute('fai') -params.bwa = getGenomeAttribute('bwa') -params.bwamem2 = getGenomeAttribute('bwamem2') -params.call_interval = getGenomeAttribute('call_interval') -params.cadd_resources = getGenomeAttribute('cadd_resources') -params.gcnvcaller_model = getGenomeAttribute('gcnvcaller_model') -params.gens_interval_list = getGenomeAttribute('gens_interval_list') -params.gens_pon_female = getGenomeAttribute('gens_pon_female') -params.gens_pon_male = getGenomeAttribute('gens_pon_male') -params.gens_gnomad_pos = getGenomeAttribute('gens_gnomad_pos') -params.gnomad_af = getGenomeAttribute('gnomad_af') -params.gnomad_af_idx = getGenomeAttribute('gnomad_af_idx') -params.intervals_wgs = getGenomeAttribute('intervals_wgs') -params.intervals_y = getGenomeAttribute('intervals_y') -params.known_dbsnp = getGenomeAttribute('known_dbsnp') -params.known_dbsnp_tbi = getGenomeAttribute('known_dbsnp_tbi') -params.mobile_element_references = getGenomeAttribute('mobile_element_references') -params.ml_model = getGenomeAttribute('ml_model') -params.mt_fasta = getGenomeAttribute('mt_fasta') -params.ploidy_model = getGenomeAttribute('ploidy_model') -params.reduced_penetrance = getGenomeAttribute('reduced_penetrance') -params.readcount_intervals = getGenomeAttribute('readcount_intervals') -params.rtg_truthvcfs = getGenomeAttribute('rtg_truthvcfs') -params.sample_id_map = getGenomeAttribute('sample_id_map') -params.sequence_dictionary = getGenomeAttribute('sequence_dictionary') -params.score_config_mt = getGenomeAttribute('score_config_mt') -params.score_config_snv = getGenomeAttribute('score_config_snv') -params.score_config_sv = getGenomeAttribute('score_config_sv') -params.sdf = getGenomeAttribute('sdf') -params.svdb_query_bedpedbs = getGenomeAttribute('svdb_query_bedpedbs') -params.svdb_query_dbs = getGenomeAttribute('svdb_query_dbs') -params.target_bed = getGenomeAttribute('target_bed') -params.variant_catalog = getGenomeAttribute('variant_catalog') -params.variant_consequences_snv = getGenomeAttribute('variant_consequences_snv') -params.variant_consequences_sv = getGenomeAttribute('variant_consequences_sv') -params.vep_filters = getGenomeAttribute('vep_filters') -params.vep_filters_scout_fmt = getGenomeAttribute('vep_filters_scout_fmt') -params.vcf2cytosure_blacklist = getGenomeAttribute('vcf2cytosure_blacklist') -params.vcfanno_resources = getGenomeAttribute('vcfanno_resources') -params.vcfanno_toml = getGenomeAttribute('vcfanno_toml') -params.vcfanno_lua = getGenomeAttribute('vcfanno_lua') -params.vep_cache = getGenomeAttribute('vep_cache') -params.vep_plugin_files = getGenomeAttribute('vep_plugin_files') +params.fasta = getGenomeAttribute('fasta') +params.fai = getGenomeAttribute('fai') +params.bwa = getGenomeAttribute('bwa') +params.bwamem2 = getGenomeAttribute('bwamem2') +params.call_interval = getGenomeAttribute('call_interval') +params.cadd_resources = getGenomeAttribute('cadd_resources') +params.gcnvcaller_model = getGenomeAttribute('gcnvcaller_model') +params.gens_interval_list = getGenomeAttribute('gens_interval_list') +params.gens_pon_female = getGenomeAttribute('gens_pon_female') +params.gens_pon_male = getGenomeAttribute('gens_pon_male') +params.gens_gnomad_pos = getGenomeAttribute('gens_gnomad_pos') +params.gnomad_af = getGenomeAttribute('gnomad_af') +params.gnomad_af_idx = getGenomeAttribute('gnomad_af_idx') +params.intervals_wgs = getGenomeAttribute('intervals_wgs') +params.intervals_y = getGenomeAttribute('intervals_y') +params.known_dbsnp = getGenomeAttribute('known_dbsnp') +params.known_dbsnp_tbi = getGenomeAttribute('known_dbsnp_tbi') +params.mobile_element_references = getGenomeAttribute('mobile_element_references') +params.mobile_element_svdb_annotations = getGenomeAttribute('mobile_element_svdb_annotations') +params.ml_model = getGenomeAttribute('ml_model') +params.mt_fasta = getGenomeAttribute('mt_fasta') +params.ploidy_model = getGenomeAttribute('ploidy_model') +params.reduced_penetrance = getGenomeAttribute('reduced_penetrance') +params.readcount_intervals = getGenomeAttribute('readcount_intervals') +params.rtg_truthvcfs = getGenomeAttribute('rtg_truthvcfs') +params.sample_id_map = getGenomeAttribute('sample_id_map') +params.sequence_dictionary = getGenomeAttribute('sequence_dictionary') +params.score_config_mt = getGenomeAttribute('score_config_mt') +params.score_config_snv = getGenomeAttribute('score_config_snv') +params.score_config_sv = getGenomeAttribute('score_config_sv') +params.sdf = getGenomeAttribute('sdf') +params.svdb_query_bedpedbs = getGenomeAttribute('svdb_query_bedpedbs') +params.svdb_query_dbs = getGenomeAttribute('svdb_query_dbs') +params.target_bed = getGenomeAttribute('target_bed') +params.variant_catalog = getGenomeAttribute('variant_catalog') +params.variant_consequences_snv = getGenomeAttribute('variant_consequences_snv') +params.variant_consequences_sv = getGenomeAttribute('variant_consequences_sv') +params.vep_filters = getGenomeAttribute('vep_filters') +params.vep_filters_scout_fmt = getGenomeAttribute('vep_filters_scout_fmt') +params.vcf2cytosure_blacklist = getGenomeAttribute('vcf2cytosure_blacklist') +params.vcfanno_resources = getGenomeAttribute('vcfanno_resources') +params.vcfanno_toml = getGenomeAttribute('vcfanno_toml') +params.vcfanno_lua = getGenomeAttribute('vcfanno_lua') +params.vep_cache = getGenomeAttribute('vep_cache') +params.vep_plugin_files = getGenomeAttribute('vep_plugin_files') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From dc7610fda6419a9d77ca75c580d8f6147a677816 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 12 Mar 2024 08:54:43 +0100 Subject: [PATCH 1673/1921] fix reduce_input --- subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 50e07b88..a0636268 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -41,7 +41,7 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_GERMLINECNVCALLER ( ch_gcnvc_in ) GATK4_GERMLINECNVCALLER.out.calls.toList() - .flatMap {CustomFunctions.reduce_input(it)} + .flatMap {reduce_input(it)} .buffer (size: 2) .combine(ch_gcnvcaller_model.collect{it[1]}.toList()) .join(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls) From 7b40c581b76c36e2907d3dd044b2fb951e156960 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 12 Mar 2024 08:56:57 +0100 Subject: [PATCH 1674/1921] remove TODO --- subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 5a39c012..c70f1783 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -226,7 +226,6 @@ def genomeExistsError() { // Generate methods description for MultiQC // def toolCitationText() { - // TODO nf-core: Optionally add in-text citation tools to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def citation_text = [ @@ -240,7 +239,6 @@ def toolCitationText() { } def toolBibliographyText() { - // TODO nf-core: Optionally add bibliographic entries to this list. // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "

  • Author (2023) Pub name, Journal, DOI
  • " : "", // Uncomment function in methodsDescriptionText to render in MultiQC report def reference_text = [ @@ -265,7 +263,6 @@ def methodsDescriptionText(mqc_methods_yaml) { meta["tool_citations"] = "" meta["tool_bibliography"] = "" - // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") // meta["tool_bibliography"] = toolBibliographyText() From 4f198f2eefe2f3a860c4dc293f8e3ace6e15b885 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:16:44 +0100 Subject: [PATCH 1675/1921] citations --- assets/multiqc_config.yml | 1 + .../utils_nfcore_raredisease_pipeline/main.nf | 238 ++++++++++++++++-- workflows/raredisease.nf | 2 +- 3 files changed, 216 insertions(+), 25 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index d6e1ef01..174bb344 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -21,6 +21,7 @@ run_modules: - qualimap - picard - mosdepth + - custom_content module_order: - fastqc: diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index c70f1783..e2d24ec0 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -226,27 +226,220 @@ def genomeExistsError() { // Generate methods description for MultiQC // def toolCitationText() { - // 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 + + def align_text = [] + def variant_call_text = [] + def repeat_call_text = [] + def snv_annotation_text = [] + def sv_annotation_text = [] + def mt_annotation_text = [] + def qc_bam_text = [] + def me_calls_text = [] + def me_annotation_text = [] + def preprocessing_text = [] + def other_citation_text = [] + + align_text = [ + params.aligner.equals("bwa") ? "BWA (Li, 2013)," :"", + params.aligner.equals("bwamem2") ? "BWA-MEM2 (Vasimuddin et al., 2019)," : "", + params.aligner.equals("sentieon") ? "Sentieon DNASeq (Kendig et al., 2019)," : "", + params.aligner.equals("sentieon") ? "Sentieon Tools (Freed et al., 2017)," : "" + ] + variant_call_text = [ + params.variant_caller.equals("deepvariant") ? "DeepVariant (Poplin et al., 2018)," : "", + params.variant_caller.equals("sentieon") ? "Sentieon DNAscope (Freed et al., 2022)," : "", + params.skip_haplocheck ? "" : "Haplocheck (Weissensteiner et al., 2021),", + "CNVnator (Abyzov et al., 2011),", + "TIDDIT (Eisfeldt et al., 2017),", + "Manta (Chen et al., 2016),", + "GLnexus (Yun et al., 2021),", + params.skip_eklipse ? "" : "eKLIPse (Goudenge et al., 2019),", + ] + repeat_call_text = [ + "ExpansionHunter (Dolzhenko et al., 2019),", + "stranger (Nilsson & Magnusson, 2021)," + ] + if (!params.skip_snv_annotation) { + snv_annotation_text = [ + "CADD (Rentzsch et al., 2019, 2021),", + "Vcfanno (Pedersen et al., 2016),", + "VEP (McLaren et al., 2016),", + "Genmod (Magnusson et al., 2018),", + ] + } + if (!params.skip_sv_annotation) { + sv_annotation_text = [ + "SVDB (Eisfeldt et al., 2017),", + "VEP (McLaren et al., 2016),", + "Genmod (Magnusson et al., 2018),", + ] + } + if (!params.skip_mt_annotation) { + mt_annotation_text = [ + "CADD (Rentzsch et al., 2019, 2021),", + "VEP (McLaren et al., 2016),", + "Vcfanno (Pedersen et al., 2016),", + "Hmtnote (Preste et al., 2019),", + "HaploGrep2 (Weissensteiner et al., 2016),", + "Genmod (Magnusson et al., 2018),", + ] + } + if (!params.skip_me_annotation) { + me_annotation_text = [ + "VEP (McLaren et al., 2016),", + "SVDB (Eisfeldt et al., 2017),", + ] + } + qc_bam_text = [ + "Picard (Broad Institute, 2023)", + "Qualimap (Okonechnikov et al., 2016),", + "TIDDIT (Eisfeldt et al., 2017),", + "UCSC Bigwig and Bigbed (Kent et al., 2010),", + "Mosdepth (Pedersen & Quinlan, 2018),", + ] + me_calls_text = [ + "SVDB (Eisfeldt et al., 2017),", + "RetroSeq (Keane et al., 2013),", + ] + preprocessing_text = [ + params.skip_fastqc ? "" : "FastQC (Andrews 2010),", + params.skip_fastp ? "" : "Fastp (Chen, 2023),", + ] + other_citation_text = [ + "BCFtools (Danecek et al., 2021),", + "GATK (McKenna et al., 2010),", + "MultiQC (Ewels et al. 2016),", + params.skip_peddy ? "" : "Peddy (Pedersen & Quinlan, 2017),", + params.run_rtgvcfeval ? "RTG Tools (Cleary et al., 2015)," : "", + "SAMtools (Li et al., 2009),", + "SMNCopyNumberCaller (Chen et al., 2020),", + "Tabix (Li, 2011)", + "." + ] + + def concat_text = align_text + + variant_call_text + + repeat_call_text + + snv_annotation_text + + sv_annotation_text + + mt_annotation_text + + qc_bam_text + + me_calls_text + + me_annotation_text + + preprocessing_text + + other_citation_text + + def citation_text = [ "Tools used in the workflow included:" ] + concat_text.unique(false) { a, b -> a <=> b } - "" + return citation_text.join(' ').trim() } def toolBibliographyText() { - // 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 + + def align_text = [] + def variant_call_text = [] + def repeat_call_text = [] + def snv_annotation_text = [] + def sv_annotation_text = [] + def mt_annotation_text = [] + def qc_bam_text = [] + def me_calls_text = [] + def me_annotation_text = [] + def preprocessing_text = [] + def other_citation_text = [] + + align_text = [ + params.aligner.equals("bwa") ? "
  • Li, H. (2013). Aligning sequence reads, clone sequences and assembly contigs with BWA-MEM (arXiv:1303.3997). arXiv. http://arxiv.org/abs/1303.3997
  • " :"", + params.aligner.equals("bwamem2") ? "
  • Vasimuddin, Md., Misra, S., Li, H., & Aluru, S. (2019). Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), 314–324. https://doi.org/10.1109/IPDPS.2019.00041
  • " : "", + params.aligner.equals("sentieon") ? "
  • Kendig, K. I., Baheti, S., Bockol, M. A., Drucker, T. M., Hart, S. N., Heldenbrand, J. R., Hernaez, M., Hudson, M. E., Kalmbach, M. T., Klee, E. W., Mattson, N. R., Ross, C. A., Taschuk, M., Wieben, E. D., Wiepert, M., Wildman, D. E., & Mainzer, L. S. (2019). Sentieon DNASeq Variant Calling Workflow Demonstrates Strong Computational Performance and Accuracy. Frontiers in Genetics, 10, 736. https://doi.org/10.3389/fgene.2019.00736
  • " : "", + params.aligner.equals("sentieon") ? "
  • Freed, D., Aldana, R., Weber, J. A., & Edwards, J. S. (2017). The Sentieon Genomics Tools—A fast and accurate solution to variant calling from next-generation sequence data (p. 115717). bioRxiv. https://doi.org/10.1101/115717
  • " : "" + ] + variant_call_text = [ + params.variant_caller.equals("deepvariant") ? "
  • Poplin, R., Chang, P.-C., Alexander, D., Schwartz, S., Colthurst, T., Ku, A., Newburger, D., Dijamco, J., Nguyen, N., Afshar, P. T., Gross, S. S., Dorfman, L., McLean, C. Y., & DePristo, M. A. (2018). A universal SNP and small-indel variant caller using deep neural networks. Nature Biotechnology, 36(10), 983–987. https://doi.org/10.1038/nbt.4235
  • " : "", + params.variant_caller.equals("sentieon") ? "
  • Freed, D., Pan, R., Chen, H., Li, Z., Hu, J., & Aldana, R. (2022). DNAscope: High accuracy small variant calling using machine learning [Preprint]. Bioinformatics. https://doi.org/10.1101/2022.05.20.492556
  • " : "", + params.skip_haplocheck ? "" : "
  • Weissensteiner, H., Forer, L., Fendt, L., Kheirkhah, A., Salas, A., Kronenberg, F., & Schoenherr, S. (2021). Contamination detection in sequencing studies using the mitochondrial phylogeny. Genome Research, 31(2), 309–316. https://doi.org/10.1101/gr.256545.119
  • ", + "
  • Abyzov, A., Urban, A. E., Snyder, M., & Gerstein, M. (2011). CNVnator: An approach to discover, genotype, and characterize typical and atypical CNVs from family and population genome sequencing. Genome Research, 21(6), 974–984. https://doi.org/10.1101/gr.114876.110
  • ", + "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", + "
  • Chen, X., Schulz-Trieglaff, O., Shaw, R., Barnes, B., Schlesinger, F., Källberg, M., Cox, A. J., Kruglyak, S., & Saunders, C. T. (2016). Manta: Rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics, 32(8), 1220–1222. https://doi.org/10.1093/bioinformatics/btv710
  • ", + "
  • Yun, T., Li, H., Chang, P.-C., Lin, M. F., Carroll, A., & McLean, C. Y. (2021). Accurate, scalable cohort variant calls using DeepVariant and GLnexus. Bioinformatics, 36(24), 5582–5589. https://doi.org/10.1093/bioinformatics/btaa1081
  • ", + params.skip_eklipse ? "" : "
  • Goudenège, D., Bris, C., Hoffmann, V., Desquiret-Dumas, V., Jardel, C., Rucheton, B., Bannwarth, S., Paquis-Flucklinger, V., Lebre, A. S., Colin, E., Amati-Bonneau, P., Bonneau, D., Reynier, P., Lenaers, G., & Procaccio, V. (2019). eKLIPse: A sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genetics in Medicine, 21(6), 1407–1416. https://doi.org/10.1038/s41436-018-0350-8
  • ", + ] + repeat_call_text = [ + "
  • Dolzhenko, E., Deshpande, V., Schlesinger, F., Krusche, P., Petrovski, R., Chen, S., Emig-Agius, D., Gross, A., Narzisi, G., Bowman, B., Scheffler, K., van Vugt, J. J. F. A., French, C., Sanchis-Juan, A., Ibáñez, K., Tucci, A., Lajoie, B. R., Veldink, J. H., Raymond, F. L., … Eberle, M. A. (2019). ExpansionHunter: A sequence-graph-based tool to analyze variation in short tandem repeat regions. Bioinformatics, 35(22), 4754–4756. https://doi.org/10.1093/bioinformatics/btz431
  • ", + "
  • Nilsson, D., & Magnusson, M. (2021). Moonso/stranger v0.7.1 (v0.7.1) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.4548873
  • " + ] + if (!params.skip_snv_annotation) { + snv_annotation_text = [ + "
  • Rentzsch, P., Schubach, M., Shendure, J., & Kircher, M. (2021). CADD-Splice—Improving genome-wide variant effect prediction using deep learning-derived splice scores. Genome Medicine, 13(1), 31. https://doi.org/10.1186/s13073-021-00835-9
  • ", + "
  • Rentzsch, P., Witten, D., Cooper, G. M., Shendure, J., & Kircher, M. (2019). CADD: Predicting the deleteriousness of variants throughout the human genome. Nucleic Acids Research, 47(D1), D886–D894. https://doi.org/10.1093/nar/gky1016
  • ", + "
  • Pedersen, B. S., Layer, R. M., & Quinlan, A. R. (2016). Vcfanno: Fast, flexible annotation of genetic variants. Genome Biology, 17(1), 118. https://doi.org/10.1186/s13059-016-0973-5
  • ", + "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", + "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • ", + ] + } + if (!params.skip_sv_annotation) { + sv_annotation_text = [ + "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", + "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", + "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • ", + ] + } + if (!params.skip_mt_annotation) { + mt_annotation_text = [ + "
  • Rentzsch, P., Schubach, M., Shendure, J., & Kircher, M. (2021). CADD-Splice—Improving genome-wide variant effect prediction using deep learning-derived splice scores. Genome Medicine, 13(1), 31. https://doi.org/10.1186/s13073-021-00835-9
  • ", + "
  • Rentzsch, P., Witten, D., Cooper, G. M., Shendure, J., & Kircher, M. (2019). CADD: Predicting the deleteriousness of variants throughout the human genome. Nucleic Acids Research, 47(D1), D886–D894. https://doi.org/10.1093/nar/gky1016
  • ", + "
  • Pedersen, B. S., Layer, R. M., & Quinlan, A. R. (2016). Vcfanno: Fast, flexible annotation of genetic variants. Genome Biology, 17(1), 118. https://doi.org/10.1186/s13059-016-0973-5
  • ", + "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", + "
  • Preste, R., Clima, R., & Attimonelli, M. (2019). Human mitochondrial variant annotation with HmtNote [Preprint]. Bioinformatics. https://doi.org/10.1101/600619
  • ", + "
  • Weissensteiner, H., Pacher, D., Kloss-Brandstätter, A., Forer, L., Specht, G., Bandelt, H.-J., Kronenberg, F., Salas, A., & Schönherr, S. (2016). HaploGrep 2: Mitochondrial haplogroup classification in the era of high-throughput sequencing. Nucleic Acids Research, 44(W1), W58–W63. https://doi.org/10.1093/nar/gkw233
  • ", + "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • ", + ] + } + if (!params.skip_me_annotation) { + me_annotation_text = [ + "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", + "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", + ] + } + qc_bam_text = [ + "
  • Broad Institute. (2023). Picard Tools. In Broad Institute, GitHub repository. http://broadinstitute.github.io/picard/
  • ", + "
  • Okonechnikov, K., Conesa, A., & García-Alcalde, F. (2016). Qualimap 2: Advanced multi-sample quality control for high-throughput sequencing data. Bioinformatics, 32(2), 292–294. https://doi.org/10.1093/bioinformatics/btv566
  • ", + "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", + "
  • Kent, W. J., Zweig, A. S., Barber, G., Hinrichs, A. S., & Karolchik, D. (2010). BigWig and BigBed: Enabling browsing of large distributed datasets. Bioinformatics, 26(17), 2204–2207. https://doi.org/10.1093/bioinformatics/btq351
  • ", + "
  • Pedersen, B. S., & Quinlan, A. R. (2018). Mosdepth: Quick coverage calculation for genomes and exomes. Bioinformatics, 34(5), 867–868. https://doi.org/10.1093/bioinformatics/btx699
  • ", + ] + me_calls_text = [ + "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", + "
  • Keane, T. M., Wong, K., & Adams, D. J. (2013). RetroSeq: Transposable element discovery from next-generation sequencing data. Bioinformatics, 29(3), 389–390. https://doi.org/10.1093/bioinformatics/bts697
  • ", + ] + preprocessing_text = [ + params.skip_fastqc ? "" : "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
  • ", + params.skip_fastp ? "" : "
  • Chen, S. (2023). Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta, 2(2), e107. https://doi.org/10.1002/imt2.107
  • ", + ] + other_citation_text = [ + "
  • Danecek, P., Bonfield, J. K., Liddle, J., Marshall, J., Ohan, V., Pollard, M. O., Whitwham, A., Keane, T., McCarthy, S. A., Davies, R. M., & Li, H. (2021). Twelve years of SAMtools and BCFtools. GigaScience, 10(2), giab008. https://doi.org/10.1093/gigascience/giab008
  • ", + "
  • McKenna, A., Hanna, M., Banks, E., Sivachenko, A., Cibulskis, K., Kernytsky, A., Garimella, K., Altshuler, D., Gabriel, S., Daly, M., & DePristo, M. A. (2010). The Genome Analysis Toolkit: A MapReduce framework for analyzing next-generation DNA sequencing data. Genome Research, 20(9), 1297–1303. https://doi.org/10.1101/gr.107524.110
  • ", + "
  • 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. https://doi.org/10.1093/bioinformatics/btw354
  • ", + params.skip_peddy ? "" : "
  • Pedersen, B. S., & Quinlan, A. R. (2017). Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy. The American Journal of Human Genetics, 100(3), 406–413. https://doi.org/10.1016/j.ajhg.2017.01.017
  • ", + params.run_rtgvcfeval ? "
  • Cleary, J. G., Braithwaite, R., Gaastra, K., Hilbush, B. S., Inglis, S., Irvine, S. A., Jackson, A., Littin, R., Rathod, M., Ware, D., Zook, J. M., Trigg, L., & Vega, F. M. D. L. (2015). Comparing Variant Call Files for Performance Benchmarking of Next-Generation Sequencing Variant Calling Pipelines (p. 023754). bioRxiv. https://doi.org/10.1101/023754
  • " : "", + "
  • Li, H., Handsaker, B., Wysoker, A., Fennell, T., Ruan, J., Homer, N., Marth, G., Abecasis, G., Durbin, R., & 1000 Genome Project Data Processing Subgroup. (2009). The Sequence Alignment/Map format and SAMtools. Bioinformatics, 25(16), 2078–2079. https://doi.org/10.1093/bioinformatics/btp352
  • ", + "
  • Chen, X., Sanchis-Juan, A., French, C. E., Connell, A. J., Delon, I., Kingsbury, Z., Chawla, A., Halpern, A. L., Taft, R. J., Bentley, D. R., Butchbach, M. E. R., Raymond, F. L., & Eberle, M. A. (2020). Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genetics in Medicine, 22(5), 945–953. https://doi.org/10.1038/s41436-020-0754-0
  • ", + "
  • Li, H. (2011). Tabix: Fast retrieval of sequence features from generic TAB-delimited files. Bioinformatics, 27(5), 718–719. https://doi.org/10.1093/bioinformatics/btq671
  • ", + ] + + def concat_text = align_text + + variant_call_text + + repeat_call_text + + snv_annotation_text + + sv_annotation_text + + mt_annotation_text + + qc_bam_text + + me_calls_text + + me_annotation_text + + preprocessing_text + + other_citation_text + + def reference_text = concat_text.unique(false) { a, b -> a <=> b } - "" + return reference_text.join(' ').trim() } def methodsDescriptionText(mqc_methods_yaml) { @@ -257,14 +450,11 @@ def methodsDescriptionText(mqc_methods_yaml) { // 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.
  • " + meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • 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"] = "" - - // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") - // meta["tool_bibliography"] = toolBibliographyText() + meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + meta["tool_bibliography"] = toolBibliographyText() def methods_text = mqc_methods_yaml.text diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dbc1fcb6..96debe46 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -685,7 +685,7 @@ workflow RAREDISEASE { // ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() - ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.fromPath("$projectDir/docs/images/nf-core-raredisease_logo_light.png", checkIfExists: true) summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) From 8b75be3a1f932a8c30001453dae67160249e2da8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:18:23 +0100 Subject: [PATCH 1676/1921] remove getGenomeAttributes from subworkflow --- .../local/utils_nfcore_raredisease_pipeline/main.nf | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index e2d24ec0..8ab5e642 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -178,17 +178,7 @@ def validateInputSamplesheet(input) { return [ metas[0], fastqs ] } -// -// Get attribute from genome config file e.g. fasta -// -def getGenomeAttribute(attribute) { - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - return params.genomes[ params.genome ][ attribute ] - } - } - return null -} + // // Replace spaces in vcf files with underscores // From f11aff261f3e49325c988600ae83467e93ea6aeb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Mar 2024 09:51:17 +0100 Subject: [PATCH 1677/1921] add peddy --- assets/multiqc_config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 174bb344..b3a8c6c8 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -21,6 +21,7 @@ run_modules: - qualimap - picard - mosdepth + - peddy - custom_content module_order: @@ -34,6 +35,8 @@ module_order: name: "Qualimap" - mosdepth: name: "Mosdepth" + - peddy: + name: "Peddy" extra_fn_clean_exts: - "_sorted_md" From f607faef103fe3d685db69618198c621673a9e18 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:10:50 +0100 Subject: [PATCH 1678/1921] fix s3 issue --- modules/local/replace_spaces_in_vcfinfo.nf | 59 +++++++++++++++++++ subworkflows/local/annotate_mt_snvs.nf | 11 ++-- .../utils_nfcore_raredisease_pipeline/main.nf | 19 ------ 3 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 modules/local/replace_spaces_in_vcfinfo.nf diff --git a/modules/local/replace_spaces_in_vcfinfo.nf b/modules/local/replace_spaces_in_vcfinfo.nf new file mode 100644 index 00000000..afd66029 --- /dev/null +++ b/modules/local/replace_spaces_in_vcfinfo.nf @@ -0,0 +1,59 @@ +process REPLACE_SPACES_IN_VCFINFO { + tag "$meta.id" + label 'process_single' + + conda "conda-forge::python=3.8.3" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/python:3.8.3' : + 'biocontainers/python:3.8.3' }" + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*_reformatted.vcf"), emit: vcf + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + python3 < versions.yml + "${task.process}": + replace_spaces_in_vcfinfo: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ + + stub: + """ + python3 < versions.yml + "${task.process}": + replace_spaces_in_vcfinfo: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ +} diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 393ac317..917893b4 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -2,7 +2,7 @@ // Annotate MT // -include { replaceSpacesInInfoColumn } from './utils_nfcore_raredisease_pipeline/main' +include { REPLACE_SPACES_IN_VCFINFO } from '../../modules/local/replace_spaces_in_vcfinfo' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' include { ENSEMBLVEP_VEP as ENSEMBLVEP_MT } from '../../modules/nf-core/ensemblvep/vep/main' include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../modules/nf-core/haplogrep2/classify/main' @@ -83,12 +83,8 @@ workflow ANNOTATE_MT_SNVS { // HMTNOTE ANNOTATE HMTNOTE_ANNOTATE(ch_hmtnote_in) - HMTNOTE_ANNOTATE.out.vcf - .map{meta, vcf -> - return [meta, file(replaceSpacesInInfoColumn(vcf, vcf.parent.toString(), vcf.baseName))] - } - .set { ch_hmtnote_reformatted } - ZIP_TABIX_HMTNOTE(ch_hmtnote_reformatted) + REPLACE_SPACES_IN_VCFINFO(HMTNOTE_ANNOTATE.out.vcf) + ZIP_TABIX_HMTNOTE(REPLACE_SPACES_IN_VCFINFO.out.vcf) // Prepare output ch_vcf_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } @@ -103,6 +99,7 @@ workflow ANNOTATE_MT_SNVS { ch_versions = ch_versions.mix(HMTNOTE_ANNOTATE.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) ch_versions = ch_versions.mix(ZIP_TABIX_HMTNOTE.out.versions) + ch_versions = ch_versions.mix(REPLACE_SPACES_IN_VCFINFO.out.versions) emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 8ab5e642..912c7ace 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -179,25 +179,6 @@ def validateInputSamplesheet(input) { return [ metas[0], fastqs ] } -// -// Replace spaces in vcf files with underscores -// -def replaceSpacesInInfoColumn(vcf_file, parent_dir, base_name) { - def outfile = new File(parent_dir + '/' + base_name + '_formatted.vcf') - def writer = outfile.newWriter() - vcf_file.eachLine { line -> - if (line.startsWith("#")) { - writer << line + "\n" - } else { - def split_str = line.tokenize("\t") - split_str[7] = split_str.getAt(7).replaceAll(" ","_") - writer << split_str.join("\t") + "\n" - } - } - writer.close() - return outfile -} - // // Exit pipeline if incorrect --genome key provided // From b7af9ff3e858f0d52331dc60a00957e49a5607ef Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 18 Mar 2024 10:32:34 +0100 Subject: [PATCH 1679/1921] review suggestions --- docs/images/raredisease_metromap_dark.pdf | Bin 199627 -> 199656 bytes docs/images/raredisease_metromap_dark.png | Bin 429743 -> 429662 bytes docs/images/raredisease_metromap_dark.svg | 46 +++++++++++++-------- docs/images/raredisease_metromap_light.pdf | Bin 130756 -> 130783 bytes docs/images/raredisease_metromap_light.png | Bin 420122 -> 420125 bytes docs/images/raredisease_metromap_light.svg | 42 ++++++++++++------- 6 files changed, 56 insertions(+), 32 deletions(-) diff --git a/docs/images/raredisease_metromap_dark.pdf b/docs/images/raredisease_metromap_dark.pdf index 2a13f7e930aca33b4219195ef8ac189f13cdcca7..bb8df737113eb5c4f4e63c794c807cfa01f61704 100644 GIT binary patch delta 13903 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 PZ0s!X6ciFllJNfry2WQ$ delta 13837 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 M1PTgqMG1ue0*@3^SpWb4 diff --git a/docs/images/raredisease_metromap_dark.png b/docs/images/raredisease_metromap_dark.png index 15faf8f34d0c70c84f6f29de3cb99f3a6c150ef6..ece6bb7dcb88ee41effe53797d17ccdad36032b7 100644 GIT binary patch delta 387317 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 z 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

    |jZ+v!WZf=JAzg^3`ZlOQL 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%0D< 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 NHO=1=cmIC%{{U`AGvWXM delta 387387 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

    HBZ;At|k)0_t(Y2YoK*n>+r-pSA8ij+yF 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%0APo|}5o&@s6 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 + id="tspan3">manta + + id="tspan4"> + tiddit + id="tspan5">tiddit + + id="tspan6"> + cnvnatorcnvnatormantamantasvdb-query + y="539.37262">svdb-query diff --git a/docs/images/raredisease_metromap_light.pdf b/docs/images/raredisease_metromap_light.pdf index eeac11385b72849cd361a917af08d68ff189045d..2ae11fff3ad30db4469df3c1a7825482db386a93 100644 GIT binary patch delta 1998 zcmV;<2Qm1>{RiLu2e4BzfA8)Y`xHbAeQK)}t%KquVv=jfK=>5%WwySx;6-NI-tc+^ zBFf!PFCBQ{rWtF*OO`h_yo~FDqR!wQRcv=<)0c)ceZ6DqQ{non5{G7BkX<)zH?3Y(%iryXhEq}Y z_Gri_k83WmG?oY;`vug0)TLy)IbsU3wlJMoS{V{}Sk$tZ)Y~Yuq?K@5jb7AEOWD$>)trdsx-c&T~rl@P^@8 zC44;pVP0(T=8TKw_K4cl3#r|h{BY{XX8s)L3lE!Psy97kOVuczAfaIaI)XKd@xhtWHL_s{KcoOGIskGb#j#z>EGJ zfua>&vR>B0M=kXrCFyK6q`6tXWT|6Nt5kGq@O9CFRCTO$(b*BAR~t8@nydrBbMgUK zTIw=q(yJGPOb4{2^9*@C=`=E&+j?Bk%Tk12wfYz|e=6Ll?3+Ym@>MhUubsbEF1&Cd z2i&!I$zp7r0T5DWwHsHKi+e(--IZC*LOb4{6^9(t?HEvWEo%Ret z*UB>BJk_V?={0U-_N`h5llE=B9xJbx7eBC6Iz}%FwqC;5v#pou$JR?BX0A2-A1El{e&S%qrYE3&LJ#FQjC&aTijKXr-%*}cfW59W;%E+_rs2m$)U4Pxo z{WN&BY|wggCB zywv8&3z)d6%)^9@F%2Vw#?#Vg8A5mkDlQ{SPJ0q9ZH1gCB+_NU zNRYTllFKMX0esTxVaTYtkvOyjqxHIV`ykS_YIY099Vh*H|h} zj}v}qVcatA?UPbs)KmkwOP27$b7t>xLgx#{cHbTh$Qy@i$*k+u}B_A-C~HRJsvggz=d^YiJSpCipBn zh17CmKu?DE`PC^)w$H~|#Ie@p8`iVrG?jDfhl%{_z|YS?H>l8*W9msHzr z!<6q0zW+Q`!$!0-F1qwdrNK_UN$nO!S!)m`_;4Utl{JnHKZJ+Y=;8~xH zT-om!65}D_oFR!B5%5wVd&K!{#>ePQh`NVj^taA-EmT!1QhlA-(*eCi>SW{FG+SK; zyo2C6Jyh%1wb5Tj>BDxFV9b#CCP91KIi)>_app@DRk%j+@h|_yUCSUpZGB4{|M3w>wL;rIa)mvj9AI{`75u;2k6m(BeFL4RXlU|{(FpNWA%fPn!_GBGk(_%bjs zGBEIiNDEW2I5&{Zc+Ut#zLEloU$z9Xf0=^FeX(Gbf5GAkU=bHE`4B|@ehg-R2a&fu z!DJ$cyekAIH9_Qq%^>pmBrv%OM7|USlR6;s^$rmE9jxa2X%P8S08FYw-OLCknHd@X g_6&o>|1M)-007YQCc~GT{sABfH!un%B}Gq03R@=TlmGw# delta 1993 zcmV;)2R8WM{RhPT2e4Bze>bUy_l$iCqJ=)S)r!_ZaS}1fHDn-siup2I-&*h@Gi`5p zJpvKsZl{+Hyl~TuHR2`98yjB6bwN>Q@Qy0ByRzv^Lz=$cG4&~OP4!<-`923b8S*@X z(3{mVyI_QG(A9P-l60!+yU}ydXPJix#h&-*2&~sI1k}vXA~bJOe_K&kua-VbTY1fJ z8ChgYf!VN8u%s1n9zf(_fql>GO0ZHay$A!&qY{RUY8#0|Gcd@mo3@))ud3zm_Cv#| zD0_P}ObmIGTj_81zB5|PAshq2|O%nSxo9}6k5_sI8R8RnZ+nD z6d1#V_CmH6a<*5)e~?~lqp)v8XUN>H>yhvpT0O0@c;VBB^5pZzr9G_bXy-Yldw9d} ztP(z+|1d8$cyq?Za(hH=>V?#9Onx|ZWHWyb^o57bG1Z$MvZZPiPms{C03E@j7Oq_q zplK@cj?GQ~bTk8kPcrFAk&O=uweVwyb@Pf&EgH2*O@TsYe*mgV);z2s5NRqLg-TDJ z1@Ic%yyr-jp?5lko@No}3Gfu4i~?fm!J@YGGBnLHtP+NdN*aZID==2B8n&Auucz5B zTqyY+ZYyt*BhffQMBnm8W$5cy9c3KU7N;$iRE{_pD|-$!7#H~(g`SS)3osDJV>Kgj z@?}#}tq@Hce@j>kLq;u)!l50VC%d*?kA+v$^dDFV!xU$WFOs8uRDHTb&dK&m=cy6Ef((W{M{QBBqX;5qq# zD=l@IGwIcfL8b#*(s_owo^%=+&TTy|=w&IwuUdT!e;O5TRQ64xG5M;Q``6B2D;Hk4 z5b{IHr?M18+$6r-1My)ljHXCqWtZgOCnH(kDL8b#*)Om)S-WoS5i%xrn zplf9raGvVZ^Yj`wGW%97gGu|gUXPX6%ZndaDjlO21zRuS>)F=J^keI#5b_o_#OX87 z11WTse|f=z$w+-g7tF-C2^}e$`G)C=Sz<~S1?yI;R$L5#Oo_>h zE?#Q$T`PQ#|3{%=l9s!Ke?c!1=UnSvQZ7DW^S^k@j{uf1p8JxNzfFX)IjXJWJMsTKe4UGIDHt5{Kq2 zoh64xUJZ!X$b@(MHOK5pH&-yO`*=EROBBIBoEm~!)NxS$+}e0eRdykGR)8um=4&h! zr^g9Dv@mWN_x4FCF>0y-+$BqR;kxM7ppFp?z>Zrl*v~s=RvCwvR~UB{SL5JQe=SJT zIBbT{A#U|vAIcfopaAVjb;Jrh@38hz@F0b#U+_{JB^q*`>(z6O_HjtUDf>GjN z)Tmd_HQLij9h<0H(sjcRD&v21VCHHF{rH^9B6EdL*?L0cONWo~41baG{3Z3<;>WN%_>3N;`w zAa7!73LqdLF*GtZIDVaW zJ7aInxs}SoL<(&UP(tSfVRG@laf>wVXk|rn(b5rPtLe0V#wy`W(028wlOlhNrGyg( zr_t26izuD$Ep6(J@CqiI1w)o0#~Ceh&Yz!Q$p(hf22!~de z-l0cmie8|t4{@t#6w!)5);YBNI2;b#3jpKj0TCcQL%IYEn9?*>AO5n{Gx~7sk8|dC zOm~@PQc9*vP0U!x9F$yImMNdWw&cnF{ diff --git a/docs/images/raredisease_metromap_light.png b/docs/images/raredisease_metromap_light.png index f0b9b5cf3d9807e9f3b313416338318644bba928..ce8f63b48ba75dacc28a155cbc5a74187664506b 100644 GIT binary patch delta 175820 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

    T~{qs_yT>T2lWn4M3r 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 delta 175804 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 diff --git a/docs/images/raredisease_metromap_light.svg b/docs/images/raredisease_metromap_light.svg index da63879c..7390dfb5 100644 --- a/docs/images/raredisease_metromap_light.svg +++ b/docs/images/raredisease_metromap_light.svg @@ -28,12 +28,12 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showgrid="true" - inkscape:zoom="0.38318665" - inkscape:cx="1551.4633" - inkscape:cy="742.45802" - inkscape:window-width="2560" - inkscape:window-height="1440" - inkscape:window-x="1440" + inkscape:zoom="0.31207156" + inkscape:cx="1339.4364" + inkscape:cy="860.37958" + inkscape:window-width="1440" + inkscape:window-height="872" + inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="0" inkscape:current-layer="layer1" @@ -623,23 +623,23 @@ transform="matrix(1.3718931,-0.01669353,0.01669353,1.3718931,438.73449,-78.364966)">manta + id="tspan3">manta + + id="tspan4"> + tiddit + id="tspan5">tiddit + + id="tspan6"> + cnvnatorcnvnatormantamantasvdb-query + y="532.31738">svdb-query From 7b289891945c61351b822d12c155662a41ca31fb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 18 Mar 2024 11:00:16 +0100 Subject: [PATCH 1680/1921] bumpversion2.1.0dev --- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index b3a8c6c8..b8bb11a1 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 b3f5e3e2..5065d2d9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -293,7 +293,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.0.0' + version = '2.1.0dev' doi = '' } From 752a9e172d710c8c67bbb6791955c91eb6f5fbde Mon Sep 17 00:00:00 2001 From: Maxime U Garcia Date: Mon, 18 Mar 2024 14:52:38 +0100 Subject: [PATCH 1681/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e61d9268..f676b8d9 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). -## 2.0.0 - Asterix [xxxx-xx-xx] +## 2.0.0 - Asterix [2024-03-18] ### `Added` From 45eb7d5c230f852d29d0461adadad068a0350fcf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 18 Mar 2024 14:58:56 +0100 Subject: [PATCH 1682/1921] update changelog --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f676b8d9..b5243d01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,25 @@ 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). +## 2.1.0 - Obelix [xxxx-xx-xx] + +### `Added` + +### `Changed` + +### `Fixed` + +### Parameters + +| Old parameter | New parameter | +| ------------- | ------------- | + +:::note +Parameter has been updated if both old and new parameter information is present. +Parameter has been added if just the new parameter information is present. +Parameter has been removed if new parameter information isn't present. +::: + ## 2.0.0 - Asterix [2024-03-18] ### `Added` From 9534c95d8a32e5f2de0ac5a4217470a29304d772 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 25 Mar 2024 11:36:34 +0100 Subject: [PATCH 1683/1921] change calls to casecalls --- subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index a0636268..57ed2552 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -40,7 +40,7 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_GERMLINECNVCALLER ( ch_gcnvc_in ) - GATK4_GERMLINECNVCALLER.out.calls.toList() + GATK4_GERMLINECNVCALLER.out.casecalls.toList() .flatMap {reduce_input(it)} .buffer (size: 2) .combine(ch_gcnvcaller_model.collect{it[1]}.toList()) From 21658fbc54c890935dfef7d6126c8798635020f9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 25 Mar 2024 12:31:54 +0100 Subject: [PATCH 1684/1921] update changelog and bump version --- CHANGELOG.md | 6 ++++++ assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f676b8d9..afabf4ad 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). +## 2.0.1 - Asterix (Patch) [2024-03-25] + +### `Fixed` + +- Germlinecnvcaller subworkflow uses the output channel `casecalls` from germlinecnvcaller module instead of `calls` which was invalid. [#535](https://github.com/nf-core/raredisease/issues/535) + ## 2.0.0 - Asterix [2024-03-18] ### `Added` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index b3a8c6c8..1880cf3e 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 b3f5e3e2..2df0fde4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -293,7 +293,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.0.0' + version = '2.0.1' doi = '' } From 701cae8e5c1fa0ac4e13eca35a98ef37ed5d5111 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 11 Apr 2024 13:54:07 +0200 Subject: [PATCH 1685/1921] patch --- conf/base.config | 6 +- conf/modules/align.config | 45 ++- conf/modules/align_MT.config | 60 ++-- conf/modules/align_bwa_bwamem2.config | 79 +++-- conf/modules/align_sentieon.config | 42 ++- conf/modules/annotate_consequence_pli.config | 71 ++--- conf/modules/annotate_genome_snvs.config | 196 ++++++------- conf/modules/annotate_mobile_elements.config | 7 - conf/modules/annotate_mt_snvs.config | 3 - .../annotate_structural_variants.config | 88 +++--- conf/modules/call_mobile_elements.config | 6 - conf/modules/call_repeat_expansions.config | 3 - conf/modules/call_snv.config | 6 - conf/modules/call_snv_sentieon.config | 62 ++-- conf/modules/call_structural_variants.config | 6 - conf/modules/call_sv_MT.config | 16 +- conf/modules/call_sv_germlinecnvcaller.config | 35 +-- conf/modules/generate_clinical_set.config | 6 +- conf/modules/generate_cytosure_files.config | 63 ++-- conf/modules/gens.config | 33 +-- conf/modules/prepare_references.config | 12 - conf/modules/rank_variants.config | 277 ++++++++---------- conf/modules/raredisease.config | 14 +- conf/test.config | 1 - lib/CustomFunctions.groovy | 12 - modules/local/create_hgncids_file.nf | 61 ++++ subworkflows/local/generate_clinical_set.nf | 8 +- workflows/raredisease.nf | 11 +- 28 files changed, 565 insertions(+), 664 deletions(-) create mode 100644 modules/local/create_hgncids_file.nf diff --git a/conf/base.config b/conf/base.config index 3f84e832..c65c634b 100644 --- a/conf/base.config +++ b/conf/base.config @@ -57,7 +57,9 @@ process { errorStrategy = 'retry' maxRetries = 2 } - withName:CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false + withName: 'NFCORE_RAREDISEASE:RAREDISEASE:.*' { + publishDir = [ + enabled: false + ] } } diff --git a/conf/modules/align.config b/conf/modules/align.config index 29fda646..84f4a36a 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -12,36 +12,27 @@ */ process{ - withName: '.*ALIGN:.*' { + + withName: '.*ALIGN:FASTP' { + ext.args = { [ + params.min_trimmed_length ? "--length_required ${params.min_trimmed_length}" : '', + '--correction', + '--overrepresentation_analysis' + ].join(' ').trim() } publishDir = [ - enabled: false + path: { "${params.outdir}/trimming" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } - if (!params.skip_fastp) { - withName: '.*ALIGN:FASTP' { - ext.args = { [ - params.min_trimmed_length ? "--length_required ${params.min_trimmed_length}" : '', - '--correction', - '--overrepresentation_analysis' - ].join(' ').trim() } - publishDir = [ - path: { "${params.outdir}/trimming" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - } - - if (params.save_mapped_as_cram) { - withName: '.*ALIGN:SAMTOOLS_VIEW' { - ext.args = { '--output-fmt cram --write-index' } - ext.prefix = { "${meta.id}_sorted_md" } - publishDir = [ - path: { "${params.outdir}/alignment" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ALIGN:SAMTOOLS_VIEW' { + ext.args = { '--output-fmt cram --write-index' } + ext.prefix = { "${meta.id}_sorted_md" } + publishDir = [ + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index 5ffec1c0..1bd88f14 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -17,28 +17,22 @@ process { - if (params.aligner.equals("bwamem2")) { - withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}_sorted" } - } + withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}_sorted" } } - if (params.aligner.equals("bwa")) { - withName: '.*ALIGN_MT:BWA_MEM_MT' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}_sorted" } - } + withName: '.*ALIGN_MT:BWA_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}_sorted" } } - if (params.aligner.equals("sentieon")) { - withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { - ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes"))} - ext.prefix = { "${meta.id}_sorted" } - } + withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { + ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes"))} + ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:GATK4_MERGEBAMALIGNMENT_MT' { @@ -74,28 +68,22 @@ process { process { - if (params.aligner.equals("bwamem2")) { - withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}_sorted_shifted" } - } + withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}_sorted_shifted" } } - if (params.aligner.equals("sentieon")) { - withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { - ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes"))} - ext.prefix = { "${meta.id}_sorted_shifted" } - } + withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { + ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes"))} + ext.prefix = { "${meta.id}_sorted_shifted" } } - if (params.aligner.equals("bwa")) { - withName: '.*ALIGN_MT_SHIFT:BWA_MEM_MT' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } - ext.prefix = { "${meta.id}_sorted_shifted" } - } + withName: '.*ALIGN_MT_SHIFT:BWA_MEM_MT' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.when = { !(params.analysis_type.equals("wes")) } + ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ALIGN_MT_SHIFT:GATK4_MERGEBAMALIGNMENT_MT' { diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index e91360fc..f0725de9 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -17,46 +17,43 @@ process { - if (params.aligner.equals("bwamem2") || params.aligner.equals("bwa")) { - - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.prefix = { "${meta.id}_sorted" } - ext.when = { params.aligner.equals("bwamem2") } - } - - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { - ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.prefix = { "${meta.id}_sorted" } - ext.when = { params.aligner.equals("bwa") } - } - - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { - ext.args = '-s --remove-overlaps' - } - - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_MERGE' { - ext.prefix = { "${meta.id}_sorted_merged" } - } - - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:MARKDUPLICATES' { - ext.args = "--TMP_DIR ." - 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 } - ] - } - - withName: '.*ALIGN:ALIGN_BWA_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 } - ] - } + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.prefix = { "${meta.id}_sorted" } + ext.when = { params.aligner.equals("bwamem2") } + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { + ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.prefix = { "${meta.id}_sorted" } + ext.when = { params.aligner.equals("bwa") } + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { + ext.args = '-s --remove-overlaps' + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_MERGE' { + ext.prefix = { "${meta.id}_sorted_merged" } + } + + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:MARKDUPLICATES' { + ext.args = "--TMP_DIR ." + 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 } + ] + } + + withName: '.*ALIGN:ALIGN_BWA_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 d5156e58..f3fb359f 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -17,30 +17,28 @@ process { - if (params.aligner.equals("sentieon")) { - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { - ext.args = { "-M -K 10000000 -R ${meta.read_group} " } - ext.prefix = { "${meta.id}.sorted" } - } + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { + ext.args = { "-M -K 10000000 -R ${meta.read_group} " } + ext.prefix = { "${meta.id}.sorted" } + } - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { - ext.prefix = { "${meta.id}_datametrics" } - } + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { + ext.prefix = { "${meta.id}_datametrics" } + } - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_READWRITER' { - ext.prefix = { "${meta.id}_merged" } - } + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_READWRITER' { + ext.prefix = { "${meta.id}_merged" } + } - withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { - ext.args = { $params.rmdup ? "--rmdup" : '' } - ext.prefix = { "${meta.id}_dedup" } - ext.suffix = ".bam" - publishDir = [ - enabled: !params.save_mapped_as_cram, - path: { "${params.outdir}/alignment" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DEDUP' { + ext.args = { $params.rmdup ? "--rmdup" : '' } + ext.prefix = { "${meta.id}_dedup" } + ext.suffix = ".bam" + 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/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index e9451357..6cda707f 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -13,69 +13,46 @@ process { - if (!params.skip_sv_annotation) { - withName: '.*ANN_CSQ_PLI_SV:.*' { - publishDir = [ - enabled: false - ] - } - withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_sv_csq_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_sv_csq_${meta.set}" } + } - withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_sv_csq_pli_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_SV:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_sv_csq_pli_${meta.set}" } + } - withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_sv_csq_pli_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_SV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_sv_csq_pli_${meta.set}" } } } process { - if (!params.skip_snv_annotation) { - withName: '.*ANN_CSQ_PLI_SNV:.*' { - ext.when = !params.skip_snv_annotation - publishDir = [ - enabled: false - ] - } - withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_snv_csq_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_snv_csq_${meta.set}" } + } - withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_snv_csq_pli_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_SNV:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_snv_csq_pli_${meta.set}" } + } - withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_snv_csq_pli_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_SNV:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_snv_csq_pli_${meta.set}" } } } process { - if (!params.skip_mt_annotation) { - withName: '.*ANN_CSQ_PLI_MT:.*' { - ext.when = !params.skip_mt_annotation - publishDir = [ - enabled: false - ] - } - withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_mt_csq_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_mt_csq_${meta.set}" } + } - withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_MT:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } + } - withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } - } + withName: '.*ANN_CSQ_PLI_MT:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } } } diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 768aeee3..60bcd259 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -17,104 +17,102 @@ process { - if (!params.skip_snv_annotation) { - withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { - ext.args = { "--samples ${meta.probands.unique().first()} --skip-indels " } - ext.prefix = { "${meta.id}_roh" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:RHOCALL_ANNOTATE' { - ext.args = { "--v14 " } - } - - withName: '.*ANNOTATE_GENOME_SNVS:ZIP_TABIX_ROHCALL' { - ext.prefix = { "${input.simpleName}" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { - ext.prefix = { "${vcf.simpleName}_vcfanno" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:UPD_SITES' { - ext.prefix = { "${vcf.simpleName}_upd_sites" } - ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} sites"} - } - - withName: '.*ANNOTATE_GENOME_SNVS:UPD_REGIONS' { - ext.prefix = { "${vcf.simpleName}_upd_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_GENOME_SNVS:CHROMOGRAPH_SITES' { - ext.prefix = { "${sites.simpleName}_chromograph" } - ext.args = { "--euploid" } - tag = {"${meta7.id}"} - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_REGIONS' { - ext.prefix = { "${regions.simpleName}_chromograph" } - ext.args = { '--euploid' } - ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } - tag = {"${meta6.id}"} - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_GENOME_SNVS:ZIP_TABIX_VCFANNO' { - ext.prefix = { "${input.simpleName}" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_VIEW' { - ext.prefix = { "${vcf.simpleName}_filter" } - ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } - } - - withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { - ext.prefix = { "${vcf.simpleName}_${intervals.simpleName}" } - } - - withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { - ext.prefix = { "${meta.prefix}_vep_${meta.scatterid}" } - ext.args = { [ - '--dir_plugins vep_cache/Plugins', - '--plugin LoFtool,LoFtool_scores.txt', - '--plugin pLI,pLI_values.txt', - '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', - '--distance 5000', - '--buffer_size 20000', - '--format vcf --max_sv_size 248956422', - '--appris --biotype --cache --canonical --ccds --compress_output bgzip', - '--domains --exclude_predicted --force_overwrite', - '--hgvs --humdiv --no_progress --numbers', - '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', - '--uniprot --vcf' - ].join(' ') } - } - - withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { - ext.prefix = { "${meta.prefix}_vep" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_GENOME_SNVS:TABIX_BCFTOOLS_CONCAT' { - publishDir = [ - path: { "${params.outdir}/annotate_snv/genome" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { + ext.args = { "--samples ${meta.probands.unique().first()} --skip-indels " } + ext.prefix = { "${meta.id}_roh" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:RHOCALL_ANNOTATE' { + ext.args = { "--v14 " } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ZIP_TABIX_ROHCALL' { + ext.prefix = { "${input.simpleName}" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { + ext.prefix = { "${vcf.simpleName}_vcfanno" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:UPD_SITES' { + ext.prefix = { "${vcf.simpleName}_upd_sites" } + ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} sites"} + } + + withName: '.*ANNOTATE_GENOME_SNVS:UPD_REGIONS' { + ext.prefix = { "${vcf.simpleName}_upd_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_GENOME_SNVS:CHROMOGRAPH_SITES' { + ext.prefix = { "${sites.simpleName}_chromograph" } + ext.args = { "--euploid" } + tag = {"${meta7.id}"} + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_GENOME_SNVS:CHROMOGRAPH_REGIONS' { + ext.prefix = { "${regions.simpleName}_chromograph" } + ext.args = { '--euploid' } + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample', 'test_sentieon']).size() >= 1) || workflow.stubRun } + tag = {"${meta6.id}"} + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_GENOME_SNVS:ZIP_TABIX_VCFANNO' { + ext.prefix = { "${input.simpleName}" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_VIEW' { + ext.prefix = { "${vcf.simpleName}_filter" } + ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } + } + + withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { + ext.prefix = { "${vcf.simpleName}_${intervals.simpleName}" } + } + + withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { + ext.prefix = { "${meta.prefix}_vep_${meta.scatterid}" } + ext.args = { [ + '--dir_plugins vep_cache/Plugins', + '--plugin LoFtool,LoFtool_scores.txt', + '--plugin pLI,pLI_values.txt', + '--plugin SpliceAI,snv=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz,indel=spliceai_21_scores_raw_snv_-v1.3-.vcf.gz', + '--distance 5000', + '--buffer_size 20000', + '--format vcf --max_sv_size 248956422', + '--appris --biotype --cache --canonical --ccds --compress_output bgzip', + '--domains --exclude_predicted --force_overwrite', + '--hgvs --humdiv --no_progress --numbers', + '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', + '--uniprot --vcf' + ].join(' ') } + } + + withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_CONCAT' { + ext.prefix = { "${meta.prefix}_vep" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_GENOME_SNVS:TABIX_BCFTOOLS_CONCAT' { + publishDir = [ + path: { "${params.outdir}/annotate_snv/genome" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index bed2c0a7..13425a7a 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -17,13 +17,6 @@ process { - withName: '.*ANNOTATE_MOBILE_ELEMENTS:.*' { - ext.when = !params.skip_me_annotation - publishDir = [ - enabled: false - ] - } - withName: '.*ANNOTATE_MOBILE_ELEMENTS:SVDB_QUERY_DB' { ext.args = { [ '--bnd_distance 150', diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 3e25c36f..8675aff7 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -51,9 +51,6 @@ process { withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { ext.prefix = { "${meta.prefix}_uncompressed" } ext.args = '--offline' - publishDir = [ - enabled: false - ] } withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { diff --git a/conf/modules/annotate_structural_variants.config b/conf/modules/annotate_structural_variants.config index f8666a82..07725c24 100644 --- a/conf/modules/annotate_structural_variants.config +++ b/conf/modules/annotate_structural_variants.config @@ -17,58 +17,50 @@ process { - if (!params.skip_sv_annotation) { - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:.*' { - publishDir = [ - enabled: false - ] - } - - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_BEDPE' { - ext.when = {!params.svdb_query_bedpedbs.equals(null)} - ext.prefix = { "${meta.id}_bedpedb" } - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_BEDPE' { + ext.when = {!params.svdb_query_bedpedbs.equals(null)} + ext.prefix = { "${meta.id}_bedpedb" } + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_DB' { - ext.when = {!params.svdb_query_dbs.equals(null)} - ext.prefix = { "${meta.id}_vcfdb" } - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:SVDB_QUERY_DB' { + ext.when = {!params.svdb_query_dbs.equals(null)} + ext.prefix = { "${meta.id}_vcfdb" } + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { - ext.prefix = { "${meta.id}_svdbquery" } - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:PICARD_SORTVCF' { + ext.prefix = { "${meta.id}_svdbquery" } + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_view" } - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_view" } + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { - ext.args = { [ - '--dir_cache vep_cache', - '--dir_plugins vep_cache/Plugins', - '--plugin pLI,pLI_values.txt', - '--appris --biotype --buffer_size 100 --canonical --cache --ccds', - '--compress_output bgzip --distance 5000 --domains', - '--exclude_predicted --force_overwrite --format vcf', - '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', - '--no_progress --numbers --per_gene --polyphen p', - '--protein --offline --regulatory --sift p', - '--symbol --tsl --uniprot --vcf' - ].join(' ') } - ext.prefix = { "${meta.id}_svdbquery_vep" } - publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:ENSEMBLVEP_SV' { + ext.args = { [ + '--dir_cache vep_cache', + '--dir_plugins vep_cache/Plugins', + '--plugin pLI,pLI_values.txt', + '--appris --biotype --buffer_size 100 --canonical --cache --ccds', + '--compress_output bgzip --distance 5000 --domains', + '--exclude_predicted --force_overwrite --format vcf', + '--fork 4 --hgvs --humdiv --max_sv_size 248956422 --merged', + '--no_progress --numbers --per_gene --polyphen p', + '--protein --offline --regulatory --sift p', + '--symbol --tsl --uniprot --vcf' + ].join(' ') } + ext.prefix = { "${meta.id}_svdbquery_vep" } + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } - withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:TABIX_VEP' { - publishDir = [ - path: { "${params.outdir}/annotate_sv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*ANNOTATE_STRUCTURAL_VARIANTS:TABIX_VEP' { + publishDir = [ + path: { "${params.outdir}/annotate_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/call_mobile_elements.config b/conf/modules/call_mobile_elements.config index 0a5e4faf..fd6bf61c 100644 --- a/conf/modules/call_mobile_elements.config +++ b/conf/modules/call_mobile_elements.config @@ -13,12 +13,6 @@ process { - withName: '.*CALL_MOBILE_ELEMENTS:.*' { - publishDir = [ - enabled: false - ] - } - withName: '.*CALL_MOBILE_ELEMENTS:ME_SPLIT_ALIGNMENT' { ext.args = { [ '--output-fmt bam', diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 7fbcdc4c..743b2a31 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -18,9 +18,6 @@ process { withName: '.*CALL_REPEAT_EXPANSIONS:.*' { ext.when = { params.analysis_type != "wes" } - publishDir = [ - enabled: false - ] } withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { diff --git a/conf/modules/call_snv.config b/conf/modules/call_snv.config index 1170d515..1546df4b 100644 --- a/conf/modules/call_snv.config +++ b/conf/modules/call_snv.config @@ -13,12 +13,6 @@ process { - withName: '.*CALL_SNV:.*' { - publishDir = [ - enabled: false - ] - } - withName: '.*CALL_SNV:GATK4_SELECTVARIANTS' { ext.args = { "--exclude-intervals ${params.mito_name}" } ext.prefix = { "${meta.id}_snv" } diff --git a/conf/modules/call_snv_sentieon.config b/conf/modules/call_snv_sentieon.config index 83cedb9f..869aabc3 100644 --- a/conf/modules/call_snv_sentieon.config +++ b/conf/modules/call_snv_sentieon.config @@ -17,45 +17,43 @@ process { - if(params.variant_caller.equals("sentieon")) { - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { - ext.prefix = { "${meta.id}_dnascope" } - ext.args2 = { - params.variant_type ? "--var_type ${params.variant_type}" : '' - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNASCOPE' { + ext.prefix = { "${meta.id}_dnascope" } + ext.args2 = { + params.variant_type ? "--var_type ${params.variant_type}" : '' } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { - ext.prefix = { "${meta.id}_dnamodelapply" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SENTIEON_DNAMODELAPPLY' { + ext.prefix = { "${meta.id}_dnamodelapply" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { - ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" - ext.prefix = { "${meta.id}_mlfiltered_0.95" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_ONE' { + ext.args = "-s 'ML_FAIL' -i 'INFO/ML_PROB <= 0.95' -m x -Oz" + ext.prefix = { "${meta.id}_mlfiltered_0.95" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { - ext.args = "-i FILTER='\"PASS\"' -m x -Oz" - ext.prefix = { "${meta.id}_passed" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCF_FILTER_TWO' { + ext.args = "-i FILTER='\"PASS\"' -m x -Oz" + ext.prefix = { "${meta.id}_passed" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { - ext.args = '--output-type z --multiallelics -both' - ext.prefix = { "${meta.id}_split" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:SPLIT_MULTIALLELICS_SEN' { + ext.args = '--output-type z --multiallelics -both' + ext.prefix = { "${meta.id}_split" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { - ext.args = '--output-type z --rm-dup none' - ext.prefix = { "${meta.id}_split_rmdup" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:REMOVE_DUPLICATES_SEN' { + ext.args = '--output-type z --rm-dup none' + ext.prefix = { "${meta.id}_split_rmdup" } + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:ADD_VARCALLER_TO_BED' { - ext.args2 = '-s 1 -b 2 -e 3' - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:ADD_VARCALLER_TO_BED' { + ext.args2 = '-s 1 -b 2 -e 3' + } - withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCFTOOLS_ANNOTATE' { - ext.args = "-c CHROM,FROM,TO,FOUND_IN --output-type z" - ext.prefix = { "${meta.id}_split_rmdup_info" } - } + withName: '.*CALL_SNV:CALL_SNV_SENTIEON:BCFTOOLS_ANNOTATE' { + ext.args = "-c CHROM,FROM,TO,FOUND_IN --output-type z" + ext.prefix = { "${meta.id}_split_rmdup_info" } } } diff --git a/conf/modules/call_structural_variants.config b/conf/modules/call_structural_variants.config index f8da7840..23e9325b 100644 --- a/conf/modules/call_structural_variants.config +++ b/conf/modules/call_structural_variants.config @@ -17,12 +17,6 @@ process { - withName: '.*CALL_STRUCTURAL_VARIANTS:.*' { - publishDir = [ - enabled: false - ] - } - withName: '.*CALL_STRUCTURAL_VARIANTS:SVDB_MERGE' { ext.prefix = {"${meta.id}_sv"} ext.args = '--pass_only --same_order' diff --git a/conf/modules/call_sv_MT.config b/conf/modules/call_sv_MT.config index 05f98e84..388fee33 100644 --- a/conf/modules/call_sv_MT.config +++ b/conf/modules/call_sv_MT.config @@ -27,15 +27,13 @@ process { ] } - if (!params.skip_eklipse){ - withName: '.*CALL_SV_MT:EKLIPSE' { - ext.args = "-tmp ." - publishDir = [ - path: { "${params.outdir}/call_sv/mitochondria" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*CALL_SV_MT:EKLIPSE' { + ext.args = "-tmp ." + publishDir = [ + path: { "${params.outdir}/call_sv/mitochondria" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index 5f85c0f9..a63da3d3 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -17,30 +17,21 @@ process { - if (!params.skip_germlinecnvcaller) { - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER.*" { - publishDir = [ - enabled: false - ] - ext.when = !params.skip_germlinecnvcaller - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { - ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" - } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_DETERMINEGERMLINECONTIGPLOIDY" { - ext.prefix = { "${meta.id}_ploidy" } - } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_DETERMINEGERMLINECONTIGPLOIDY" { + ext.prefix = { "${meta.id}_ploidy" } + } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER" { - ext.args = "--run-mode CASE" - ext.prefix = { "${meta.id}_${model.simpleName}" } - } + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER" { + ext.args = "--run-mode CASE" + ext.prefix = { "${meta.id}_${model.simpleName}" } + } - withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:BCFTOOLS_VIEW' { - ext.prefix = { "${meta.id}_gatkcnv_segments_refiltered" } - ext.args = { '--output-type z --exclude "N_ALT = 0" ' } - } + withName: '.*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:BCFTOOLS_VIEW' { + ext.prefix = { "${meta.id}_gatkcnv_segments_refiltered" } + ext.args = { '--output-type z --exclude "N_ALT = 0" ' } } } diff --git a/conf/modules/generate_clinical_set.config b/conf/modules/generate_clinical_set.config index 4ab31579..75502110 100644 --- a/conf/modules/generate_clinical_set.config +++ b/conf/modules/generate_clinical_set.config @@ -21,7 +21,7 @@ process { withName: '.*:GENERATE_CLINICAL_SET_SNV:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_snv_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*:GENERATE_CLINICAL_SET_SNV:TABIX_BGZIP' { @@ -36,7 +36,7 @@ process { withName: '.*:GENERATE_CLINICAL_SET_SV:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${input.simpleName}_sv_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*:GENERATE_CLINICAL_SET_SV:TABIX_BGZIP' { @@ -51,7 +51,7 @@ process { withName: '.*:GENERATE_CLINICAL_SET_MT:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_mt_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } withName: '.*:GENERATE_CLINICAL_SET_MT:TABIX_BGZIP' { diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index 1cd076f3..4cdb2f21 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -17,41 +17,38 @@ process { - if ( params.analysis_type != "wes" && !params.skip_vcf2cytosure ) { - - withName: '.*GENERATE_CYTOSURE_FILES:TIDDIT_COV_VCF2CYTOSURE' { - ext.args = { '-z 500' } - ext.prefix = { "${meta.id}_cov" } - } + withName: '.*GENERATE_CYTOSURE_FILES:TIDDIT_COV_VCF2CYTOSURE' { + ext.args = { '-z 500' } + ext.prefix = { "${meta.id}_cov" } + } - withName: '.*GENERATE_CYTOSURE_FILES:SPLIT_AND_FILTER_SV_VCF' { - ext.args = { [ - "--samples ${meta.id}", - '--output-type z', - "--exclude 'gnomad_svAF > 0.05'" - ].join(' ') } - ext.prefix = { "${meta.id}" } - } + withName: '.*GENERATE_CYTOSURE_FILES:SPLIT_AND_FILTER_SV_VCF' { + ext.args = { [ + "--samples ${meta.id}", + '--output-type z', + "--exclude 'gnomad_svAF > 0.05'" + ].join(' ') } + ext.prefix = { "${meta.id}" } + } - withName: '.*GENERATE_CYTOSURE_FILES:BCFTOOLS_REHEADER_SV_VCF' { - beforeScript = { "echo ${meta.custid} > ${meta.custid}.txt" } - ext.args = { "--samples ${meta.custid}.txt" } - ext.args2 = "--output-type v" - ext.prefix = { "${meta.custid}" } - } + withName: '.*GENERATE_CYTOSURE_FILES:BCFTOOLS_REHEADER_SV_VCF' { + beforeScript = { "echo ${meta.custid} > ${meta.custid}.txt" } + ext.args = { "--samples ${meta.custid}.txt" } + ext.args2 = "--output-type v" + ext.prefix = { "${meta.custid}" } + } - withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { - ext.args = { [ - meta.sex.equals(1) ? '--sex male' : '--sex female', - '--size 5000', - '--maxbnd 5000' - ].join(' ') } - ext.prefix = { "${meta.custid}" ? "${meta.custid}" : "${meta.id}" } - publishDir = [ - path: { "${params.outdir}/vcf2cytosure" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } + withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { + ext.args = { [ + meta.sex.equals(1) ? '--sex male' : '--sex female', + '--size 5000', + '--maxbnd 5000' + ].join(' ') } + ext.prefix = { "${meta.custid}" ? "${meta.custid}" : "${meta.id}" } + publishDir = [ + path: { "${params.outdir}/vcf2cytosure" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] } } diff --git a/conf/modules/gens.config b/conf/modules/gens.config index 6882775c..691cacd7 100644 --- a/conf/modules/gens.config +++ b/conf/modules/gens.config @@ -16,27 +16,20 @@ // process { - if (!params.skip_gens && params.analysis_type != "wes") { - withName: '.*GENS:.*' { - publishDir = [ - enabled: false - ] - } - withName: '.*GENS:COLLECTREADCOUNTS' { - ext.args = { [ - '--interval-merging-rule OVERLAPPING_ONLY', - '--format HDF5' - ].join(' ') } - } + withName: '.*GENS:COLLECTREADCOUNTS' { + ext.args = { [ + '--interval-merging-rule OVERLAPPING_ONLY', + '--format HDF5' + ].join(' ') } + } - withName: '.*GENS:GENS_GENERATE' { - ext.prefix = { "${meta.id}_gens" } - publishDir = [ - path: { "${params.outdir}/gens" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + withName: '.*GENS:GENS_GENERATE' { + ext.prefix = { "${meta.id}_gens" } + publishDir = [ + path: { "${params.outdir}/gens" }, + 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 3721d220..04416bcd 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -78,12 +78,6 @@ process { ext.when = { !(params.analysis_type == "wes")} } - withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { - publishDir = [ - enabled: false, - ] - } - withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { ext.when = {params.known_dbsnp && !params.known_dbsnp_tbi} } @@ -109,9 +103,6 @@ process { withName: '.*PREPARE_REFERENCES:GATK_ILT' { ext.when = { !params.target_bed.equals(null) } ext.args = { "--PADDING ${params.bait_padding} -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2" } - publishDir = [ - enabled: false - ] } withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { @@ -121,9 +112,6 @@ process { withName: '.*PREPARE_REFERENCES:UNTAR_VEP_CACHE' { ext.when = { (params.vep_cache && params.vep_cache.endsWith("tar.gz")) } - publishDir = [ - enabled: false - ] } withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WGS' { diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index a17dee05..3d8f1804 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -16,56 +16,49 @@ // process { - if (!params.skip_sv_annotation) { - withName: '.*RANK_VARIANTS_SV:.*' { - publishDir = [ - enabled: false - ] - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { - ext.prefix = { "${meta.id}_sv_genmod_annotate_${meta.set}" } - ext.args = { [ - '--annotate_regions', - params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' - ].join(' ') } - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_MODELS' { - ext.prefix = { "${meta.id}_sv_genmod_models_${meta.set}" } - ext.args = " --whole_gene " - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { - ext.prefix = { "${meta.id}_sv_genmod_score_${meta.set}" } - ext.args = " --rank_results " - } - - withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_sv_genmod_compound_${meta.set}" } - } - - withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { - ext.args = "--output-type z" - ext.prefix = { "${meta.id}_sv_ranked_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*RANK_VARIANTS_SV:TABIX_BGZIP' { - ext.when = false - } - - withName: '.*RANK_VARIANTS_SV:TABIX_TABIX' { - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + + withName: '.*RANK_VARIANTS_SV:GENMOD_ANNOTATE' { + ext.prefix = { "${meta.id}_sv_genmod_annotate_${meta.set}" } + ext.args = { [ + '--annotate_regions', + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + ].join(' ') } + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_sv_genmod_models_${meta.set}" } + ext.args = " --whole_gene " + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { + ext.prefix = { "${meta.id}_sv_genmod_score_${meta.set}" } + ext.args = " --rank_results " + } + + withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_sv_genmod_compound_${meta.set}" } + } + + withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { + ext.args = "--output-type z" + ext.prefix = { "${meta.id}_sv_ranked_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SV:TABIX_BGZIP' { + ext.when = false + } + + withName: '.*RANK_VARIANTS_SV:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } @@ -74,56 +67,48 @@ process { // process { - if (!params.skip_snv_annotation) { - withName: '.*RANK_VARIANTS_SNV:.*' { - ext.when = !params.skip_snv_annotation - publishDir = [ - enabled: false - ] - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { - ext.prefix = { "${meta.id}_snv_genmod_annotate_${meta.set}" } - ext.args = { [ - '--annotate_regions', - params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' - ].join(' ') } - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { - ext.prefix = { "${meta.id}_snv_genmod_models_${meta.set}" } - ext.args = " --whole_gene " - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { - ext.prefix = { "${meta.id}_snv_genmod_score_${meta.set}" } - ext.args = " --rank_results " - } - - withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_snv_genmod_compound_${meta.set}" } - } - - withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { - ext.when = false - } - - withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIP' { - ext.prefix = { "${meta.id}_snv_ranked_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*RANK_VARIANTS_SNV:TABIX_TABIX' { - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_ANNOTATE' { + ext.prefix = { "${meta.id}_snv_genmod_annotate_${meta.set}" } + ext.args = { [ + '--annotate_regions', + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + ].join(' ') } + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_snv_genmod_models_${meta.set}" } + ext.args = " --whole_gene " + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { + ext.prefix = { "${meta.id}_snv_genmod_score_${meta.set}" } + ext.args = " --rank_results " + } + + withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_snv_genmod_compound_${meta.set}" } + } + + withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { + ext.when = false + } + + withName: '.*RANK_VARIANTS_SNV:TABIX_BGZIP' { + ext.prefix = { "${meta.id}_snv_ranked_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_SNV:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } @@ -132,55 +117,47 @@ process { // process { - if (!params.skip_mt_annotation) { - withName: '.*RANK_VARIANTS_MT:.*' { - ext.when = !params.skip_mt_annotation - publishDir = [ - enabled: false - ] - } - - withName: '.*RANK_VARIANTS_MT:GENMOD_ANNOTATE' { - ext.prefix = { "${meta.id}_mt_genmod_annotate_${meta.set}" } - ext.args = { [ - '--annotate_regions', - params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' - ].join(' ') } - } - - withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { - ext.prefix = { "${meta.id}_mt_genmod_models_${meta.set}" } - ext.args = " --whole_gene " - } - - withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { - ext.prefix = { "${meta.id}_mt_genmod_score_${meta.set}" } - ext.args = " --rank_results " - } - - withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { - ext.prefix = { "${meta.id}_mt_genmod_compound_${meta.set}" } - } - - withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { - ext.when = false - } - - withName: '.*RANK_VARIANTS_MT:TABIX_BGZIP' { - ext.prefix = { "${meta.id}_mt_ranked_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*RANK_VARIANTS_MT:TABIX_TABIX' { - publishDir = [ - path: { "${params.outdir}/rank_and_filter" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } + + withName: '.*RANK_VARIANTS_MT:GENMOD_ANNOTATE' { + ext.prefix = { "${meta.id}_mt_genmod_annotate_${meta.set}" } + ext.args = { [ + '--annotate_regions', + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + ].join(' ') } + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { + ext.prefix = { "${meta.id}_mt_genmod_models_${meta.set}" } + ext.args = " --whole_gene " + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { + ext.prefix = { "${meta.id}_mt_genmod_score_${meta.set}" } + ext.args = " --rank_results " + } + + withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { + ext.prefix = { "${meta.id}_mt_genmod_compound_${meta.set}" } + } + + withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { + ext.when = false + } + + withName: '.*RANK_VARIANTS_MT:TABIX_BGZIP' { + ext.prefix = { "${meta.id}_mt_ranked_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*RANK_VARIANTS_MT:TABIX_TABIX' { + publishDir = [ + path: { "${params.outdir}/rank_and_filter" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index a16e6e0c..a4f1bbac 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -32,14 +32,12 @@ process { process { - if (!params.skip_fastqc) { - withName: '.*RAREDISEASE:FASTQC' { - ext.args = '--quiet' - publishDir = [ - path: { "${params.outdir}/fastqc/${meta.id}" }, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } + withName: '.*RAREDISEASE:FASTQC' { + ext.args = '--quiet' + publishDir = [ + path: { "${params.outdir}/fastqc/${meta.id}" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] } } diff --git a/conf/test.config b/conf/test.config index 5301f96b..adc70962 100644 --- a/conf/test.config +++ b/conf/test.config @@ -60,7 +60,6 @@ params { variant_consequences_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" variant_consequences_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } diff --git a/lib/CustomFunctions.groovy b/lib/CustomFunctions.groovy index 9ed0a9c0..0ff3eadd 100644 --- a/lib/CustomFunctions.groovy +++ b/lib/CustomFunctions.groovy @@ -51,16 +51,4 @@ class CustomFunctions { return case_info } - // create hgnc list - public static ArrayList parseHgncIds(List text) { - def ids = [] - def lines = text[0].tokenize("\n") - for(int i = 0; i versions.yml + "${task.process}": + create_hgncids_file: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ + + stub: + """ + python3 < versions.yml + "${task.process}": + create_hgncids_file: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ +} diff --git a/subworkflows/local/generate_clinical_set.nf b/subworkflows/local/generate_clinical_set.nf index 87250ff9..3e71e6b0 100644 --- a/subworkflows/local/generate_clinical_set.nf +++ b/subworkflows/local/generate_clinical_set.nf @@ -15,19 +15,17 @@ workflow GENERATE_CLINICAL_SET { ch_versions = Channel.empty() ch_vcf - .combine(ch_hgnc_ids) - .multiMap { meta, vcf, ids -> - clinical: [ meta + [ set: "clinical", hgnc_ids:ids ], vcf ] + .multiMap { meta, vcf -> + clinical: [ meta + [ set: "clinical" ], vcf ] research: [ meta + [ set: "research" ], vcf ] } .set { ch_clin_research_vcf } ENSEMBLVEP_FILTERVEP( ch_clin_research_vcf.clinical, - [] + ch_hgnc_ids ) .output - .map {meta, vcf -> [ meta - meta.subMap('hgnc_ids'), vcf ]} .set { ch_filtervep_out } TABIX_BGZIP( ch_filtervep_out ) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 96debe46..6553281f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -112,6 +112,7 @@ include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/mai include { RENAME_ALIGN_FILES as RENAME_BAM_FOR_SMNCALLER } from '../modules/local/rename_align_files' include { RENAME_ALIGN_FILES as RENAME_BAI_FOR_SMNCALLER } from '../modules/local/rename_align_files' +include { CREATE_HGNCIDS_FILE } from '../modules/local/create_hgncids_file' // // SUBWORKFLOWS @@ -285,9 +286,9 @@ workflow RAREDISEASE { : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) ch_vep_extra_files_unsplit = params.vep_plugin_files ? Channel.fromPath(params.vep_plugin_files).collect() : Channel.value([]) - ch_vep_filters_std_fmt = params.vep_filters ? Channel.fromPath(params.vep_filters).splitCsv().collect() + ch_vep_filters_std_fmt = params.vep_filters ? Channel.fromPath(params.vep_filters).map { it -> [[id:'standard'],it]}.collect() : Channel.empty() - ch_vep_filters_scout_fmt = params.vep_filters_scout_fmt ? Channel.fromPath(params.vep_filters_scout_fmt).collect() + ch_vep_filters_scout_fmt = params.vep_filters_scout_fmt ? Channel.fromPath(params.vep_filters_scout_fmt).map { it -> [[id:'scout'],it]}.collect() : Channel.empty() ch_versions = ch_versions.mix(ch_references.versions) @@ -315,9 +316,11 @@ workflow RAREDISEASE { // Read and store hgnc ids in a channel ch_vep_filters_scout_fmt - .map { it -> CustomFunctions.parseHgncIds(it.text) } .mix (ch_vep_filters_std_fmt) - .toList() + .set {ch_vep_filters} + + CREATE_HGNCIDS_FILE(ch_vep_filters) + .txt .set {ch_hgnc_ids} // Input QC From 7b3c42ef5e67f63a6cc483047b1a4b663fd413a0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 12 Apr 2024 00:09:00 +0200 Subject: [PATCH 1686/1921] update output --- modules/local/create_hgncids_file.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/create_hgncids_file.nf b/modules/local/create_hgncids_file.nf index 439e7c4d..a6e1abdb 100644 --- a/modules/local/create_hgncids_file.nf +++ b/modules/local/create_hgncids_file.nf @@ -11,8 +11,8 @@ process CREATE_HGNCIDS_FILE { tuple val(meta), path(input) output: - tuple val(meta), path("*_reformatted.txt"), emit: txt - path "versions.yml" , emit: versions + path("*_reformatted.txt"), emit: txt + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From 82ad9021c8a763cb0213a53b4092135d830d10b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 12 Apr 2024 13:50:39 +0200 Subject: [PATCH 1687/1921] update me vep --- conf/modules/annotate_consequence_pli.config | 20 ++++++++++++++ conf/modules/annotate_mobile_elements.config | 27 ------------------- conf/modules/generate_clinical_set.config | 14 ++++++++++ .../local/annotate_mobile_elements.nf | 18 +------------ workflows/raredisease.nf | 16 ++++++++++- 5 files changed, 50 insertions(+), 45 deletions(-) diff --git a/conf/modules/annotate_consequence_pli.config b/conf/modules/annotate_consequence_pli.config index 6cda707f..21e2e835 100644 --- a/conf/modules/annotate_consequence_pli.config +++ b/conf/modules/annotate_consequence_pli.config @@ -56,3 +56,23 @@ process { ext.prefix = { "${meta.id}_mt_csq_pli_${meta.set}" } } } + +process { + + withName: '.*ANN_CSQ_PLI_ME:ADD_MOST_SEVERE_CSQ' { + ext.prefix = { "${meta.id}_me_csq_${meta.set}" } + } + + withName: '.*ANN_CSQ_PLI_ME:ADD_MOST_SEVERE_PLI' { + ext.prefix = { "${meta.id}_me_pli_${meta.set}" } + } + + withName: '.*ANN_CSQ_PLI_ME:TABIX_BGZIPTABIX' { + ext.prefix = { "${meta.id}_me_annotated_${meta.set}" } + publishDir = [ + path: { "${params.outdir}/annotate_mobile_elements" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } +} diff --git a/conf/modules/annotate_mobile_elements.config b/conf/modules/annotate_mobile_elements.config index 13425a7a..7d001727 100644 --- a/conf/modules/annotate_mobile_elements.config +++ b/conf/modules/annotate_mobile_elements.config @@ -51,31 +51,4 @@ process { ext.prefix = { "${meta.id}_filter" } } - withName: '.*:ANNOTATE_MOBILE_ELEMENTS:GENERATE_CLINICAL_SET_ME:ENSEMBLVEP_FILTERVEP' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_me_${meta.set}" } - ext.args = { "--filter \"HGNC_ID in ${meta.hgnc_ids.join(',')}\"" } - } - - withName: '.*:ANNOTATE_MOBILE_ELEMENTS:GENERATE_CLINICAL_SET_ME:TABIX_BGZIP' { - ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_me_${meta.set}" } - } - - withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:ADD_MOST_SEVERE_CSQ' { - ext.prefix = { "${meta.id}_me_csq_${meta.set}" } - } - - withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:ADD_MOST_SEVERE_PLI' { - ext.prefix = { "${meta.id}_me_pli_${meta.set}" } - } - - withName: '.*ANNOTATE_MOBILE_ELEMENTS:ANNOTATE_CSQ_PLI_ME:TABIX_BGZIPTABIX' { - ext.prefix = { "${meta.id}_me_annotated_${meta.set}" } - publishDir = [ - path: { "${params.outdir}/annotate_mobile_elements" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } } diff --git a/conf/modules/generate_clinical_set.config b/conf/modules/generate_clinical_set.config index 75502110..de4d1b27 100644 --- a/conf/modules/generate_clinical_set.config +++ b/conf/modules/generate_clinical_set.config @@ -59,3 +59,17 @@ process { ext.prefix = { "${meta.id}_mt_${meta.set}" } } } + +// ME variants +process{ + withName: '.*:GENERATE_CLINICAL_SET_ME:ENSEMBLVEP_FILTERVEP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_me_${meta.set}" } + ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } + } + + withName: '.*:GENERATE_CLINICAL_SET_ME:TABIX_BGZIP' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_me_${meta.set}" } + } +} diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index 0d22cd80..cb6087a7 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -7,8 +7,6 @@ include { ENSEMBLVEP_VEP as ENSEMBLVEP_ME } from '../../modules/nf-core/en include { PICARD_SORTVCF } from '../../modules/nf-core/picard/sortvcf/main' include { SVDB_QUERY as SVDB_QUERY_DB } from '../../modules/nf-core/svdb/query/main' -include { ANNOTATE_CSQ_PLI as ANNOTATE_CSQ_PLI_ME } from '../../subworkflows/local/annotate_consequence_pli.nf' -include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_ME } from '../../subworkflows/local/generate_clinical_set.nf' workflow ANNOTATE_MOBILE_ELEMENTS { @@ -19,7 +17,6 @@ workflow ANNOTATE_MOBILE_ELEMENTS { ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_vep_cache // channel: [mandatory] [ path(cache) ] ch_variant_consequences // channel: [mandatory] [ path(consequences) ] - ch_hgnc_ids // channel: [mandatory] [ val(hgnc_ids) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_extra_files // channel: [mandatory] [ path(files) ] @@ -76,25 +73,12 @@ workflow ANNOTATE_MOBILE_ELEMENTS { BCFTOOLS_VIEW_FILTER( ch_bcftools_filter_input, [], [], [] ) - GENERATE_CLINICAL_SET_ME( - BCFTOOLS_VIEW_FILTER.out.vcf, - ch_hgnc_ids - ) - - ANNOTATE_CSQ_PLI_ME( - GENERATE_CLINICAL_SET_ME.out.vcf, - ch_variant_consequences - ) - ch_versions = ch_versions.mix( SVDB_QUERY_DB.out.versions ) ch_versions = ch_versions.mix( PICARD_SORTVCF.out.versions ) ch_versions = ch_versions.mix( ENSEMBLVEP_ME.out.versions ) ch_versions = ch_versions.mix( BCFTOOLS_VIEW_FILTER.out.versions ) - ch_versions = ch_versions.mix( GENERATE_CLINICAL_SET_ME.out.versions ) - ch_versions = ch_versions.mix( ANNOTATE_CSQ_PLI_ME.out.versions ) emit: - vcf = ANNOTATE_CSQ_PLI_ME.out.vcf_ann // channel: [ val(meta), path(vcf) ] - tbi = ANNOTATE_CSQ_PLI_ME.out.tbi_ann // channel: [ val(meta), path(tbi) ] + vcf = BCFTOOLS_VIEW_FILTER.out.vcf // channel: [ val(meta), path(vcf) ] versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 6553281f..84f68eb6 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -119,6 +119,7 @@ include { CREATE_HGNCIDS_FILE } from '../modules/loca // include { ALIGN } from '../subworkflows/local/align' +include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_ME } from '../subworkflows/local/annotate_consequence_pli.nf' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_MT } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SNV } from '../subworkflows/local/annotate_consequence_pli' include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkflows/local/annotate_consequence_pli' @@ -130,6 +131,7 @@ include { CALL_MOBILE_ELEMENTS } from '../subworkf include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' include { CALL_SNV } from '../subworkflows/local/call_snv' include { CALL_STRUCTURAL_VARIANTS } from '../subworkflows/local/call_structural_variants' +include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_ME } from '../subworkflows/local/generate_clinical_set.nf' include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_MT } from '../subworkflows/local/generate_clinical_set' include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_SNV } from '../subworkflows/local/generate_clinical_set' include { GENERATE_CLINICAL_SET as GENERATE_CLINICAL_SET_SV } from '../subworkflows/local/generate_clinical_set' @@ -668,12 +670,24 @@ workflow RAREDISEASE { ch_genome_dictionary, ch_vep_cache, ch_variant_consequences_sv, - ch_hgnc_ids, params.genome, params.vep_cache_version, ch_vep_extra_files ) ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) + + GENERATE_CLINICAL_SET_ME( + ANNOTATE_MOBILE_ELEMENTS.out.vcf, + ch_hgnc_ids + ) + ch_versions = ch_versions.mix( GENERATE_CLINICAL_SET_ME.out.versions ) + + ANN_CSQ_PLI_ME( + GENERATE_CLINICAL_SET_ME.out.vcf, + ch_variant_consequences + ) + ch_versions = ch_versions.mix( ANN_CSQ_PLI_ME.out.versions ) + } // From 6d0f929c2bffb858112364a90e845e00db3aee91 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 12 Apr 2024 14:07:45 +0200 Subject: [PATCH 1688/1921] remove variant consequences --- subworkflows/local/annotate_mobile_elements.nf | 1 - workflows/raredisease.nf | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/subworkflows/local/annotate_mobile_elements.nf b/subworkflows/local/annotate_mobile_elements.nf index cb6087a7..cfd66de9 100644 --- a/subworkflows/local/annotate_mobile_elements.nf +++ b/subworkflows/local/annotate_mobile_elements.nf @@ -16,7 +16,6 @@ workflow ANNOTATE_MOBILE_ELEMENTS { ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_vep_cache // channel: [mandatory] [ path(cache) ] - ch_variant_consequences // channel: [mandatory] [ path(consequences) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_extra_files // channel: [mandatory] [ path(files) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 84f68eb6..dc7fde2b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -669,7 +669,6 @@ workflow RAREDISEASE { ch_genome_fasta, ch_genome_dictionary, ch_vep_cache, - ch_variant_consequences_sv, params.genome, params.vep_cache_version, ch_vep_extra_files @@ -684,7 +683,7 @@ workflow RAREDISEASE { ANN_CSQ_PLI_ME( GENERATE_CLINICAL_SET_ME.out.vcf, - ch_variant_consequences + ch_variant_consequences_sv ) ch_versions = ch_versions.mix( ANN_CSQ_PLI_ME.out.versions ) From d0b512be4b6c542fa8537ea508e7f931e4dab491 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:50:37 +0200 Subject: [PATCH 1689/1921] update test config --- conf/test.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/test.config b/conf/test.config index adc70962..5301f96b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -60,6 +60,7 @@ params { variant_consequences_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" variant_consequences_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" + vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" vep_cache_version = 107 vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" } From 6848a01d739aea984900a2704d5604281263e3c0 Mon Sep 17 00:00:00 2001 From: jemten Date: Fri, 19 Apr 2024 10:04:37 +0200 Subject: [PATCH 1690/1921] fixing typo --- subworkflows/local/call_snv.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 3e76ab91..72c91ecf 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -74,7 +74,7 @@ workflow CALL_SNV { ch_sentieon_vcf = CALL_SNV_SENTIEON.out.vcf ch_sentieon_tbi = CALL_SNV_SENTIEON.out.tabix ch_sentieon_gvcf = CALL_SNV_SENTIEON.out.gvcf - ch_sentieon_gtbi = CALL_SNV_SENTIEON.out.gtbi + ch_sentieon_gtbi = CALL_SNV_SENTIEON.out.gvcf_tbi ch_versions = ch_versions.mix(CALL_SNV_SENTIEON.out.versions) } From a7e9f95073f0d0762024f6701bda4dfdac264c9b Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 29 Apr 2024 10:43:25 +0200 Subject: [PATCH 1691/1921] update repeat expansion files --- conf/modules/call_repeat_expansions.config | 21 +++------------------ docs/output.md | 5 ++--- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 743b2a31..085d4a41 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -43,27 +43,12 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { - ext.args = "--temp-prefix ." - ext.prefix = { "${meta.id}_reheader" } - } - - withName: '.*CALL_REPEAT_EXPANSIONS:RENAMESAMPLE_EXP' { + ext.args = "--temp-prefix . -O v" + ext.prefix = { "${meta.id}_repeat_expansion" } publishDir = [ path: { "${params.outdir}/repeat_expansions" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : - filename.contains('_renam.vcf.gz') ? "${meta.id}_repeat_expansion.vcf.gz" : - filename }, - ] - } - - withName: '.*CALL_REPEAT_EXPANSIONS:TABIX_EXP_RENAME' { - publishDir = [ - path: { "${params.outdir}/repeat_expansions" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : - filename.contains('_renam.vcf.gz.tbi') ? "${meta.id}_repeat_expansion.vcf.gz.tbi" : - filename }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } diff --git a/docs/output.md b/docs/output.md index a0053784..3e44849a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -319,14 +319,13 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. #### Expansion Hunter -[Expansion Hunter](https://github.com/Illumina/ExpansionHunter) aims to estimate sizes of repeat sequences by performing a targeted search through alignments that span, flank, and are fully contained in each repeat. +[Expansion Hunter](https://github.com/Illumina/ExpansionHunter) aims to estimate sizes of repeat sequences by performing a targeted search through alignments that span, flank, and are fully contained in each repeat. The files generated are ready to be used with [REViewer](https://github.com/Illumina/REViewer).
    Output files - `repeat_expansions/` - - `_repeat_expansion.vcf.gz`: file containing variant calls. - - `_repeat_expansion.vcf.gz.tbi`: index of the file containing variant calls. + - `_repeat_expansion.vcf`: file containing variant calls. - `_exphunter_sorted.bam`: A BAMlet containing alignments of reads that overlap or located in close proximity to each variant identified by ExpansionHunter - `_exphunter_sorted.bam.bai`: Index of the BAMlet file From 8e028140426d218636209eb0843fb2b04f23d249 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 29 Apr 2024 11:48:33 +0200 Subject: [PATCH 1692/1921] adding explicit temps --- conf/modules/align_bwa_bwamem2.config | 2 ++ conf/modules/prepare_references.config | 7 ++++++- conf/modules/rank_variants.config | 22 ++++++++++++++-------- conf/modules/raredisease.config | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index f0725de9..30d14cf4 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -19,12 +19,14 @@ process { withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwa") } } diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 04416bcd..5d24cefa 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -115,7 +115,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}", + "--temp-dir ./" + ].join(' ') } ext.when = { params.analysis_type.equals("wgs") && !params.readcount_intervals } } diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 3d8f1804..66fafd0e 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -21,22 +21,24 @@ process { ext.prefix = { "${meta.id}_sv_genmod_annotate_${meta.set}" } ext.args = { [ '--annotate_regions', - params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38', + '--temp_dir ./' ].join(' ') } } withName: '.*RANK_VARIANTS_SV:GENMOD_MODELS' { ext.prefix = { "${meta.id}_sv_genmod_models_${meta.set}" } - ext.args = " --whole_gene " + ext.args = "--whole_gene --temp_dir ./" } withName: '.*RANK_VARIANTS_SV:GENMOD_SCORE' { ext.prefix = { "${meta.id}_sv_genmod_score_${meta.set}" } - ext.args = " --rank_results " + ext.args = "--rank_results" } withName: '.*RANK_VARIANTS_SV:GENMOD_COMPOUND' { ext.prefix = { "${meta.id}_sv_genmod_compound_${meta.set}" } + ext.args = "--temp_dir ./" } withName: '.*RANK_VARIANTS_SV:BCFTOOLS_SORT' { @@ -73,21 +75,23 @@ process { ext.args = { [ '--annotate_regions', params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + '--temp_dir ./' ].join(' ') } } withName: '.*RANK_VARIANTS_SNV:GENMOD_MODELS' { ext.prefix = { "${meta.id}_snv_genmod_models_${meta.set}" } - ext.args = " --whole_gene " + ext.args = "--whole_gene --temp_dir ./" } withName: '.*RANK_VARIANTS_SNV:GENMOD_SCORE' { ext.prefix = { "${meta.id}_snv_genmod_score_${meta.set}" } - ext.args = " --rank_results " + ext.args = "--rank_results" } withName: '.*RANK_VARIANTS_SNV:GENMOD_COMPOUND' { ext.prefix = { "${meta.id}_snv_genmod_compound_${meta.set}" } + ext.args = "--temp_dir ./" } withName: '.*RANK_VARIANTS_SNV:BCFTOOLS_SORT' { @@ -122,22 +126,24 @@ process { ext.prefix = { "${meta.id}_mt_genmod_annotate_${meta.set}" } ext.args = { [ '--annotate_regions', - params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38', + '--temp_dir ./' ].join(' ') } } withName: '.*RANK_VARIANTS_MT:GENMOD_MODELS' { ext.prefix = { "${meta.id}_mt_genmod_models_${meta.set}" } - ext.args = " --whole_gene " + ext.args = "--whole_gene --temp_dir ./" } withName: '.*RANK_VARIANTS_MT:GENMOD_SCORE' { ext.prefix = { "${meta.id}_mt_genmod_score_${meta.set}" } - ext.args = " --rank_results " + ext.args = "--rank_results" } withName: '.*RANK_VARIANTS_MT:GENMOD_COMPOUND' { ext.prefix = { "${meta.id}_mt_genmod_compound_${meta.set}" } + ext.args = "--temp_dir ./" } withName: '.*RANK_VARIANTS_MT:BCFTOOLS_SORT' { diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index a4f1bbac..12ff0f37 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -33,7 +33,7 @@ process { process { withName: '.*RAREDISEASE:FASTQC' { - ext.args = '--quiet' + ext.args = '--quiet --dir ./' publishDir = [ path: { "${params.outdir}/fastqc/${meta.id}" }, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, From b2ee216b1f4622ef272cb581ebdcb3dd051f922f Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 29 Apr 2024 11:56:08 +0200 Subject: [PATCH 1693/1921] adds trailing comma --- conf/modules/rank_variants.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/rank_variants.config b/conf/modules/rank_variants.config index 66fafd0e..cd5ab7c9 100644 --- a/conf/modules/rank_variants.config +++ b/conf/modules/rank_variants.config @@ -74,7 +74,7 @@ process { ext.prefix = { "${meta.id}_snv_genmod_annotate_${meta.set}" } ext.args = { [ '--annotate_regions', - params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38' + params.genome.equals('GRCh37') ? '--genome-build 37' : '--genome-build 38', '--temp_dir ./' ].join(' ') } } From 77f486e9f5c24d40d3667973f8dc31d1986b8149 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:29:34 +0200 Subject: [PATCH 1694/1921] remove lane from meta --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- subworkflows/local/alignment/align_sentieon.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 10537898..ab5b8d9b 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -44,7 +44,7 @@ workflow ALIGN_BWA_BWAMEM2 { ch_align .map{ meta, bam -> new_id = meta.sample - new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] + new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - meta.subMap('lane') [groupKey(new_meta, new_meta.num_lanes), bam] } .groupTuple() diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 366f6cd9..792d9c34 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -23,7 +23,7 @@ workflow ALIGN_SENTIEON { .bam_and_bai .map{ meta, bam, bai -> new_id = meta.sample - new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] + new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - meta.subMap('lane') [groupKey(new_meta, new_meta.num_lanes), bam, bai] } .groupTuple() From 62e8e97a68112be6566b2f661933ff647b4fdbd9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:15:49 +0200 Subject: [PATCH 1695/1921] move hmtnote to the top in mt annotation wf --- conf/modules/annotate_mt_snvs.config | 11 ++--- subworkflows/local/annotate_mt_snvs.nf | 57 +++++++++++++++----------- 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index 8675aff7..ea261a30 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -16,6 +16,11 @@ // process { + withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { + ext.prefix = { "${meta.prefix}" } + ext.args = '--offline' + } + withName: '.*ANNOTATE_MT_SNVS:ENSEMBLVEP_MT' { ext.args = { [ '--dir_plugins vep_cache/Plugins', @@ -38,7 +43,7 @@ process { ext.prefix = { "${meta.prefix}" } } - withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_HMTNOTE' { + withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_VCFANNO_MT' { ext.prefix = { "${meta.prefix}" } publishDir = [ path: { "${params.outdir}/annotate_snv/mitochondria" }, @@ -48,10 +53,6 @@ process { ] } - withName: '.*ANNOTATE_MT_SNVS:HMTNOTE_ANNOTATE' { - ext.prefix = { "${meta.prefix}_uncompressed" } - ext.args = '--offline' - } withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { ext.prefix = { "${meta.prefix}_haplogrep" } diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 917893b4..f6dbbe5d 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -3,12 +3,13 @@ // include { REPLACE_SPACES_IN_VCFINFO } from '../../modules/local/replace_spaces_in_vcfinfo' -include { TABIX_TABIX as TABIX_TABIX_MT } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_TABIX_VEP_MT } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE_MT } from '../../modules/nf-core/tabix/bgziptabix/main' include { ENSEMBLVEP_VEP as ENSEMBLVEP_MT } from '../../modules/nf-core/ensemblvep/vep/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 { ANNOTATE_CADD } from './annotation/annotate_cadd' -include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO_MT } from '../../modules/nf-core/tabix/bgziptabix/main' include { HMTNOTE_ANNOTATE } from '../../modules/nf-core/hmtnote/annotate/main' workflow ANNOTATE_MT_SNVS { @@ -27,29 +28,45 @@ workflow ANNOTATE_MT_SNVS { ch_vep_extra_files // channel: [mandatory] [ path(files) ] main: - ch_cadd_vcf = Channel.empty() ch_versions = Channel.empty() + // add prefix to meta + ch_mt_vcf + .map { it -> + return [it[0]+ [prefix: it[1].simpleName + "_hmtnote"], it[1]] + } + .set { ch_hmtnote_in } + + // HMTNOTE ANNOTATE + HMTNOTE_ANNOTATE(ch_hmtnote_in) + REPLACE_SPACES_IN_VCFINFO(HMTNOTE_ANNOTATE.out.vcf) + ZIP_TABIX_HMTNOTE_MT(REPLACE_SPACES_IN_VCFINFO.out.vcf) + + ch_hmtnote_vcf = ZIP_TABIX_HMTNOTE_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf]} + ch_hmtnote_tbi = ZIP_TABIX_HMTNOTE_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi]} + // Annotating with CADD if (params.cadd_resources != null) { ANNOTATE_CADD ( - ch_mt_vcf, - ch_mt_tbi, + ch_hmtnote_vcf, + ch_hmtnote_tbi, ch_cadd_header, ch_cadd_resources ) ch_cadd_vcf = ANNOTATE_CADD.out.vcf ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) + } else { + ch_cadd_vcf = Channel.empty() } // Pick input for vep - ch_mt_vcf + ch_hmtnote_vcf .join(ch_cadd_vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] merged: it[2].equals(null) - return [it[0]+ [prefix: it[1].simpleName + "_vep"], it[1]] + return [it[0]+ [prefix: it[0].prefix + "_vep"], it[1]] cadd: !(it[2].equals(null)) - return [it[0] + [prefix: it[1].simpleName + "_cadd_vep"], it[2]] + return [it[0] + [prefix: it[0].prefix + "_cadd_vep"], it[2]] } .set { ch_for_mix } @@ -58,7 +75,6 @@ workflow ANNOTATE_MT_SNVS { .map { meta, vcf -> return [meta, vcf, []] } .set { ch_vep_in } - // Annotating with ensembl Vep ENSEMBLVEP_MT( ch_vep_in, @@ -71,34 +87,29 @@ workflow ANNOTATE_MT_SNVS { ) // Running vcfanno - TABIX_TABIX_MT(ENSEMBLVEP_MT.out.vcf) + TABIX_TABIX_VEP_MT(ENSEMBLVEP_MT.out.vcf) ENSEMBLVEP_MT.out.vcf - .join(TABIX_TABIX_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .join(TABIX_TABIX_VEP_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) .map { meta, vcf, tbi -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, []]} .set { ch_in_vcfanno } - VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources).vcf - .map { meta, vcf -> return [meta + [prefix: meta.prefix + "_hmtnote"], vcf]} - .set {ch_hmtnote_in} - - // HMTNOTE ANNOTATE - HMTNOTE_ANNOTATE(ch_hmtnote_in) - REPLACE_SPACES_IN_VCFINFO(HMTNOTE_ANNOTATE.out.vcf) - ZIP_TABIX_HMTNOTE(REPLACE_SPACES_IN_VCFINFO.out.vcf) + VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) + ZIP_TABIX_VCFANNO_MT(VCFANNO_MT.out.vcf) // Prepare output - ch_vcf_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } - ch_tbi_out = ZIP_TABIX_HMTNOTE.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } + ch_vcf_out = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } + ch_tbi_out = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_haplogrep_in, "vcf.gz") ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) - ch_versions = ch_versions.mix(TABIX_TABIX_MT.out.versions) + ch_versions = ch_versions.mix(TABIX_TABIX_VEP_MT.out.versions) ch_versions = ch_versions.mix(VCFANNO_MT.out.versions) ch_versions = ch_versions.mix(HMTNOTE_ANNOTATE.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) - ch_versions = ch_versions.mix(ZIP_TABIX_HMTNOTE.out.versions) + ch_versions = ch_versions.mix(ZIP_TABIX_VCFANNO_MT.out.versions) + ch_versions = ch_versions.mix(ZIP_TABIX_HMTNOTE_MT.out.versions) ch_versions = ch_versions.mix(REPLACE_SPACES_IN_VCFINFO.out.versions) emit: From c186c5b81e7f46e9b6f8b934dbea0e20c038d6d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:22:22 +0200 Subject: [PATCH 1696/1921] remove blank line --- conf/modules/annotate_mt_snvs.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index ea261a30..b740176d 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -53,7 +53,6 @@ process { ] } - withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { ext.prefix = { "${meta.prefix}_haplogrep" } publishDir = [ From 9bfeae04d9bbe8029f802f374928a88a5aa9cb4f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 23:10:47 +0200 Subject: [PATCH 1697/1921] update pedigree file --- conf/modules/prepare_references.config | 2 +- conf/modules/raredisease.config | 14 +++++++ lib/CustomFunctions.groovy | 16 -------- modules/local/create_pedigree_file.nf | 53 ++++++++++++++++++++++++++ workflows/raredisease.nf | 6 ++- 5 files changed, 73 insertions(+), 18 deletions(-) create mode 100644 modules/local/create_pedigree_file.nf diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 5d24cefa..103a1ad7 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -119,7 +119,7 @@ process { '--padding 0', '--interval-merging-rule OVERLAPPING_ONLY', "--exclude-intervals ${params.mito_name}", - "--temp-dir ./" + "--tmp-dir ./" ].join(' ') } ext.when = { params.analysis_type.equals("wgs") && !params.readcount_intervals } } diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 12ff0f37..12d77a06 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -73,6 +73,20 @@ process { } } +// +// Generate Pedigree File +// + +process { + + withName: '.*RAREDISEASE:CREATE_PEDIGREE_FILE' { + publishDir = [ + path: { "${params.outdir}/pedigree" }, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} + // // Multiqc options // diff --git a/lib/CustomFunctions.groovy b/lib/CustomFunctions.groovy index 0ff3eadd..1a8d0227 100644 --- a/lib/CustomFunctions.groovy +++ b/lib/CustomFunctions.groovy @@ -2,22 +2,6 @@ import nextflow.Nextflow class CustomFunctions { - // Function to generate a pedigree file - public static File makePed(samples, outdir) { - - def case_name = samples[0].case_id - def outfile = new File(outdir +"/pipeline_info/${case_name}" + '.ped') - outfile.text = ['#family_id', 'sample_id', 'father', 'mother', 'sex', 'phenotype'].join('\t') - def samples_list = [] - for(int i = 0; i${case_name}.ped + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + create_pedigree_file: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ + + stub: + def case_name = samples[0].case_id + """ + touch ${case_name}.ped + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + create_pedigree_file: v1.0 + python: \$(python --version | sed 's/Python //g') + END_VERSIONS + """ +} diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index dc7fde2b..68b1cc1f 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -113,6 +113,7 @@ include { SMNCOPYNUMBERCALLER } from '../modules/nf-core/smncopynumbercaller/mai include { RENAME_ALIGN_FILES as RENAME_BAM_FOR_SMNCALLER } from '../modules/local/rename_align_files' include { RENAME_ALIGN_FILES as RENAME_BAI_FOR_SMNCALLER } from '../modules/local/rename_align_files' include { CREATE_HGNCIDS_FILE } from '../modules/local/create_hgncids_file' +include { CREATE_PEDIGREE_FILE } from '../modules/local/create_pedigree_file' // // SUBWORKFLOWS @@ -163,7 +164,6 @@ workflow RAREDISEASE { ch_multiqc_files = Channel.empty() ch_samples = ch_samplesheet.map { meta, fastqs -> meta} - ch_pedfile = ch_samples.toList().map { file(CustomFunctions.makePed(it, params.outdir)) } ch_case_info = ch_samples.toList().map { CustomFunctions.createCaseChannel(it) } // Initialize file channels for PREPARE_REFERENCES subworkflow @@ -301,6 +301,10 @@ workflow RAREDISEASE { ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) } + + // Generate pedigree file + ch_pedfile = CREATE_PEDIGREE_FILE(ch_samples.toList()) + // Read and store paths in the vep_plugin_files file if (params.vep_plugin_files) { ch_vep_extra_files_unsplit.splitCsv ( header:true ) From e9b15db0d0bbee44100ff0e7d6906dd0cb9be55d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 23:15:44 +0200 Subject: [PATCH 1698/1921] fix error --- workflows/raredisease.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 68b1cc1f..1bd76e08 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -303,7 +303,8 @@ workflow RAREDISEASE { // Generate pedigree file - ch_pedfile = CREATE_PEDIGREE_FILE(ch_samples.toList()) + ch_pedfile = CREATE_PEDIGREE_FILE(ch_samples.toList()).out.ped + ch_versions = ch_versions.mix(CREATE_PEDIGREE_FILE.out.versions()) // Read and store paths in the vep_plugin_files file if (params.vep_plugin_files) { From eaa87b6c016f184796a04e823ea90fae9fdce2b7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 23:26:05 +0200 Subject: [PATCH 1699/1921] fix versions --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 1bd76e08..00805e43 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -303,8 +303,8 @@ workflow RAREDISEASE { // Generate pedigree file - ch_pedfile = CREATE_PEDIGREE_FILE(ch_samples.toList()).out.ped - ch_versions = ch_versions.mix(CREATE_PEDIGREE_FILE.out.versions()) + ch_pedfile = CREATE_PEDIGREE_FILE(ch_samples.toList()).ped + ch_versions = ch_versions.mix(CREATE_PEDIGREE_FILE.out.versions) // Read and store paths in the vep_plugin_files file if (params.vep_plugin_files) { From 2b3ae4f90ab6bdc1b78c8d15f932eb0851558c86 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 Apr 2024 23:43:52 +0200 Subject: [PATCH 1700/1921] update output docs --- docs/output.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index 3e44849a..a872c036 100644 --- a/docs/output.md +++ b/docs/output.md @@ -66,7 +66,8 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [CADD](#cadd-1) - [Hmtnote](#hmtnote) - [VEP](#vep-2) - - [Rank variants and filtering](#rank-variants-and-filtering) + - [Filtering and ranking](#filtering-and-ranking) + - [Filter\_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) @@ -478,7 +479,7 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen Output files - `annotate_snv/mitochondria` - - `_mitochondria_haplogrep.txt`: file containing haplogroup information. + - `*haplogrep.txt`: file containing haplogroup information.
    @@ -504,8 +505,8 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Output files - `annotate_snv/mitochondria` - - `_mitochondria_vep_vcfanno_hmtnote.vcf.gz`: file containing mitochondrial annotations. - - `_mitochondria_vep_vcfanno_hmtnote.vcf.gz.tbi`: index of the file containing mitochondrial annotations. + - `_mitochondria_hmtnote_vep_vcfanno.vcf.gz`: file containing mitochondrial annotations. + - `_mitochondria_hmtnote_vep_vcfanno.vcf.gz.tbi`: index of the file containing mitochondrial annotations. From 4fa280df0bdcec3a38a59ce1c01c7d35da677ee6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Apr 2024 06:53:58 +0200 Subject: [PATCH 1701/1921] fix reheader args --- conf/modules/call_repeat_expansions.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 085d4a41..d76ae186 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -43,7 +43,7 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { - ext.args = "--temp-prefix . -O v" + ext.args = "--temp-prefix ." ext.prefix = { "${meta.id}_repeat_expansion" } publishDir = [ path: { "${params.outdir}/repeat_expansions" }, From 30128fc03a631571b16d935e88eacd02b98231d5 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:30:05 +0200 Subject: [PATCH 1702/1921] ignore error from bwa-mem2 and if output is missing, run bwa --- conf/modules/align_bwa_bwamem2.config | 1 + subworkflows/local/alignment/align_bwa_bwamem2.nf | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index e91360fc..d82fb5d6 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -23,6 +23,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } + label = 'error_ignore' } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 10537898..6d5847a7 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -24,14 +24,14 @@ workflow ALIGN_BWA_BWAMEM2 { ch_versions = Channel.empty() // Map, sort, and index - if (params.aligner.equals("bwa")) { - BWA_MEM ( ch_reads_input, ch_bwa_index, true ) - ch_align = BWA_MEM.out.bam - ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) - } else { + if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + else if (params.aligner.equals("bwa") || !BWAMEM2_MEM.out.bam.exists()) { + BWA_MEM ( ch_reads_input, ch_bwa_index, true ) + ch_align = BWA_MEM.out.bam + ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) } SAMTOOLS_INDEX_ALIGN ( ch_align ) From 5accab2506ea70661860f038631c0dedfc9f781f Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:30:41 +0200 Subject: [PATCH 1703/1921] change logical gate --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 6d5847a7..650c5fc6 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -28,7 +28,7 @@ workflow ALIGN_BWA_BWAMEM2 { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - else if (params.aligner.equals("bwa") || !BWAMEM2_MEM.out.bam.exists()) { + else if (params.aligner.equals("bwa") || (params.aligner.equals("bwamem2") && !BWAMEM2_MEM.out.bam.exists())) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_align = BWA_MEM.out.bam ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) From afeefc1a5c221ff174571d4878db92aea3e97e56 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:36:47 +0200 Subject: [PATCH 1704/1921] typo --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 650c5fc6..e26d4bde 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -28,6 +28,7 @@ workflow ALIGN_BWA_BWAMEM2 { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + } else if (params.aligner.equals("bwa") || (params.aligner.equals("bwamem2") && !BWAMEM2_MEM.out.bam.exists())) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_align = BWA_MEM.out.bam From 7eae508bb1e7b62ce408a671843114ff4c32b995 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:48:00 +0200 Subject: [PATCH 1705/1921] move vcfanno to the top of anno mt snvs workflow --- conf/modules/annotate_mt_snvs.config | 21 +++++++++---- conf/modules/call_repeat_expansions.config | 3 +- docs/output.md | 6 ++-- subworkflows/local/annotate_mt_snvs.nf | 34 ++++++++++------------ 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/conf/modules/annotate_mt_snvs.config b/conf/modules/annotate_mt_snvs.config index b740176d..0d0026cf 100644 --- a/conf/modules/annotate_mt_snvs.config +++ b/conf/modules/annotate_mt_snvs.config @@ -37,6 +37,21 @@ process { '--uniprot' ].join(' ') } ext.prefix = { "${meta.prefix}" } + publishDir = [ + path: { "${params.outdir}/annotate_snv/mitochondria" }, + mode: params.publish_dir_mode, + pattern: "*{vcf.gz,vcf.gz.tbi}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_MT_SNVS:TABIX_TABIX_VEP_MT' { + publishDir = [ + path: { "${params.outdir}/annotate_snv/mitochondria" }, + mode: params.publish_dir_mode, + pattern: "*{vcf.gz,vcf.gz.tbi}", + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: '.*ANNOTATE_MT_SNVS:VCFANNO_MT' { @@ -45,12 +60,6 @@ process { withName: '.*ANNOTATE_MT_SNVS:ZIP_TABIX_VCFANNO_MT' { ext.prefix = { "${meta.prefix}" } - publishDir = [ - path: { "${params.outdir}/annotate_snv/mitochondria" }, - mode: params.publish_dir_mode, - pattern: "*{vcf.gz,vcf.gz.tbi}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*ANNOTATE_MT_SNVS:HAPLOGREP2_CLASSIFY_MT' { diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index d76ae186..002ddffb 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -43,7 +43,8 @@ process { } withName: '.*CALL_REPEAT_EXPANSIONS:BCFTOOLS_REHEADER_EXP' { - ext.args = "--temp-prefix ." + ext.args = "--temp-prefix ." + ext.args2 = "-O v" ext.prefix = { "${meta.id}_repeat_expansion" } publishDir = [ path: { "${params.outdir}/repeat_expansions" }, diff --git a/docs/output.md b/docs/output.md index a872c036..3241f5d4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -67,7 +67,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter\_vep](#filter_vep) + - [Filter_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) @@ -505,8 +505,8 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Output files - `annotate_snv/mitochondria` - - `_mitochondria_hmtnote_vep_vcfanno.vcf.gz`: file containing mitochondrial annotations. - - `_mitochondria_hmtnote_vep_vcfanno.vcf.gz.tbi`: index of the file containing mitochondrial annotations. + - `_mitochondria_hmtnote_vcfanno_.vcf.gz`: file containing mitochondrial annotations. + - `_mitochondria_hmtnote_vcfanno_.vcf.gz.tbi`: index of the file containing mitochondrial annotations. diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index f6dbbe5d..02554461 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -42,14 +42,22 @@ workflow ANNOTATE_MT_SNVS { REPLACE_SPACES_IN_VCFINFO(HMTNOTE_ANNOTATE.out.vcf) ZIP_TABIX_HMTNOTE_MT(REPLACE_SPACES_IN_VCFINFO.out.vcf) - ch_hmtnote_vcf = ZIP_TABIX_HMTNOTE_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf]} - ch_hmtnote_tbi = ZIP_TABIX_HMTNOTE_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi]} + // Vcfanno + ZIP_TABIX_HMTNOTE_MT.out.gz_tbi + .map { meta, vcf, tbi -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, []]} + .set { ch_in_vcfanno } + + VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) + ZIP_TABIX_VCFANNO_MT(VCFANNO_MT.out.vcf) + + ch_vcfanno_vcf = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf]} + ch_vcfanno_tbi = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi]} // Annotating with CADD if (params.cadd_resources != null) { ANNOTATE_CADD ( - ch_hmtnote_vcf, - ch_hmtnote_tbi, + ch_vcfanno_vcf, + ch_vcfanno_tbi, ch_cadd_header, ch_cadd_resources ) @@ -60,7 +68,7 @@ workflow ANNOTATE_MT_SNVS { } // Pick input for vep - ch_hmtnote_vcf + ch_vcfanno_vcf .join(ch_cadd_vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] merged: it[2].equals(null) @@ -86,19 +94,7 @@ workflow ANNOTATE_MT_SNVS { ch_vep_extra_files ) - // Running vcfanno TABIX_TABIX_VEP_MT(ENSEMBLVEP_MT.out.vcf) - ENSEMBLVEP_MT.out.vcf - .join(TABIX_TABIX_VEP_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) - .map { meta, vcf, tbi -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, []]} - .set { ch_in_vcfanno } - - VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) - ZIP_TABIX_VCFANNO_MT(VCFANNO_MT.out.vcf) - - // Prepare output - ch_vcf_out = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf] } - ch_tbi_out = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } // Running haplogrep2 HAPLOGREP2_CLASSIFY_MT(ch_haplogrep_in, "vcf.gz") @@ -114,8 +110,8 @@ workflow ANNOTATE_MT_SNVS { emit: haplog = HAPLOGREP2_CLASSIFY_MT.out.txt // channel: [ val(meta), path(txt) ] - vcf_ann = ch_vcf_out // channel: [ val(meta), path(vcf) ] - tbi = ch_tbi_out // channel: [ val(meta), path(tbi) ] + vcf_ann = ENSEMBLVEP_MT.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = TABIX_TABIX_VEP_MT.out.tbi // channel: [ val(meta), path(tbi) ] report = ENSEMBLVEP_MT.out.report // channel: [ path(html) ] versions = ch_versions // channel: [ path(versions.yml) ] } From 2d2efd2382de6698786686b3572897b1a3e322fd Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:49:25 +0200 Subject: [PATCH 1706/1921] change syntax --- conf/modules/align_bwa_bwamem2.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index d82fb5d6..cf5e79f8 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -23,7 +23,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } - label = 'error_ignore' + errorStrategy = 'ignore' } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { From 52b7caa8411216e3f04e9633a2871851cea504c0 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:53:37 +0200 Subject: [PATCH 1707/1921] change logical gate --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index e26d4bde..6ee8dfc9 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -29,7 +29,7 @@ workflow ALIGN_BWA_BWAMEM2 { ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) } - else if (params.aligner.equals("bwa") || (params.aligner.equals("bwamem2") && !BWAMEM2_MEM.out.bam.exists())) { + if (params.aligner.equals("bwa") || (params.aligner.equals("bwamem2") && !BWAMEM2_MEM.out.bam.exists())) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_align = BWA_MEM.out.bam ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) From 2c0bdb028434045076490960bc51c7ee53ec9dd1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Tue, 30 Apr 2024 14:24:45 +0200 Subject: [PATCH 1708/1921] change logical gate --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 6ee8dfc9..acf684e0 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -22,14 +22,15 @@ workflow ALIGN_BWA_BWAMEM2 { main: ch_versions = Channel.empty() - + count = 0 // Map, sort, and index if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + count = BWAMEM2_MEM.out.bam.ifEmpty(1) } - if (params.aligner.equals("bwa") || (params.aligner.equals("bwamem2") && !BWAMEM2_MEM.out.bam.exists())) { + if (params.aligner.equals("bwa") || count == 1) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_align = BWA_MEM.out.bam ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) From ecd62865665c2026f85587607f9661726017ba02 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 2 May 2024 11:38:53 +0200 Subject: [PATCH 1709/1921] try a retry with more memory --- conf/modules/align_bwa_bwamem2.config | 2 +- subworkflows/local/alignment/align_bwa_bwamem2.nf | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index cf5e79f8..ff53af13 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -23,7 +23,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } - errorStrategy = 'ignore' + errorStrategy = { task.exitStatus in (1 + (130..145) + 104) ? 'retry' : 'finish' } } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index acf684e0..10537898 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -22,18 +22,16 @@ workflow ALIGN_BWA_BWAMEM2 { main: ch_versions = Channel.empty() - count = 0 + // Map, sort, and index - if (params.aligner.equals("bwamem2")) { - BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) - ch_align = BWAMEM2_MEM.out.bam - ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - count = BWAMEM2_MEM.out.bam.ifEmpty(1) - } - if (params.aligner.equals("bwa") || count == 1) { + if (params.aligner.equals("bwa")) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_align = BWA_MEM.out.bam ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) + } else { + BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) + ch_align = BWAMEM2_MEM.out.bam + ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) } SAMTOOLS_INDEX_ALIGN ( ch_align ) From eee78184da59049ce512d1308aebf28a0ba8d2d3 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 2 May 2024 13:50:05 +0200 Subject: [PATCH 1710/1921] try a retry with more memory --- conf/modules/align_bwa_bwamem2.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index ff53af13..04739e9a 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -23,7 +23,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } - errorStrategy = { task.exitStatus in (1 + (130..145) + 104) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in (1, (130..145), 104) ? 'retry' : 'finish' } } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { From 85fc2ea7fbcac4848899852ff81b3b9661b6dc28 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 2 May 2024 14:22:21 +0200 Subject: [PATCH 1711/1921] try a retry with more memory --- conf/modules/align_bwa_bwamem2.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index 04739e9a..30d961e7 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -23,7 +23,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } - errorStrategy = { task.exitStatus in (1, (130..145), 104) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in [1,104,130,131,132,133,134,135,135,136,137,138,139,140,141,142,143,144,145] ? 'retry' : 'finish' } } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { From f6d99dcb548e8e4679842c4d0c862c57bbc2f4be Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 2 May 2024 16:32:11 +0200 Subject: [PATCH 1712/1921] change logic --- conf/modules/align_bwa_bwamem2.config | 2 +- .../local/alignment/align_bwa_bwamem2.nf | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index 30d961e7..cf5e79f8 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -23,7 +23,7 @@ process { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwamem2") } - errorStrategy = { task.exitStatus in [1,104,130,131,132,133,134,135,135,136,137,138,139,140,141,142,143,144,145] ? 'retry' : 'finish' } + errorStrategy = 'ignore' } withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 10537898..3499551e 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -24,14 +24,19 @@ workflow ALIGN_BWA_BWAMEM2 { ch_versions = Channel.empty() // Map, sort, and index - if (params.aligner.equals("bwa")) { - BWA_MEM ( ch_reads_input, ch_bwa_index, true ) - ch_align = BWA_MEM.out.bam - ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) - } else { + if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) - ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + + + if (BWA_MEM.out.bam.ifEmpty()) { + BWA_MEM ( ch_reads_input, ch_bwa_index, true ) + ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) + ch_align = BWA_MEM.out.bam + + else { + ch_align = BWAMEM2_MEM.out.bam + } } SAMTOOLS_INDEX_ALIGN ( ch_align ) From 17ed5d4900efc57fa0b0c4ad9d183c15056f1130 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 2 May 2024 16:44:17 +0200 Subject: [PATCH 1713/1921] change logic --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 3499551e..62fb99df 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -29,11 +29,11 @@ workflow ALIGN_BWA_BWAMEM2 { ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - if (BWA_MEM.out.bam.ifEmpty()) { + if (BWAMEM2_MEM.out.bam.ifEmpty()) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam - + } else { ch_align = BWAMEM2_MEM.out.bam } From 8adc86f77838dae0ed6580e85f3a87e9791f88aa Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Thu, 2 May 2024 17:00:33 +0200 Subject: [PATCH 1714/1921] change logic --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 62fb99df..8c7a189a 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -29,7 +29,7 @@ workflow ALIGN_BWA_BWAMEM2 { ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - if (BWAMEM2_MEM.out.bam.ifEmpty()) { + if (BWAMEM2_MEM.out.bam.ifEmpty(False)) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam From ad00cbc9474d2479c3c28f85ceb8a18bf5214847 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 3 May 2024 11:01:05 +0200 Subject: [PATCH 1715/1921] change if statement --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 8c7a189a..79ca1640 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -22,22 +22,26 @@ workflow ALIGN_BWA_BWAMEM2 { main: ch_versions = Channel.empty() + ch_align = Channel.empty() // Map, sort, and index if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + ch_align = BWAMEM2_MEM.out.bam - - if (BWAMEM2_MEM.out.bam.ifEmpty(False)) { + if (ch_align == Channel.empty) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam } - else { - ch_align = BWAMEM2_MEM.out.bam - } } + else if (params.aligner.equals("bwamem2"){ + BWA_MEM ( ch_reads_input, ch_bwa_index, true ) + ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) + ch_align = BWA_MEM.out.bam + } + SAMTOOLS_INDEX_ALIGN ( ch_align ) From 7ba937f31556c80f6908270bcd3136829b78277a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 3 May 2024 11:09:58 +0200 Subject: [PATCH 1716/1921] change if statement --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 79ca1640..78c4974c 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -30,13 +30,13 @@ workflow ALIGN_BWA_BWAMEM2 { ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) ch_align = BWAMEM2_MEM.out.bam - if (ch_align == Channel.empty) { + if (ch_align == Channel.empty()) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam } } - else if (params.aligner.equals("bwamem2"){ + else if (params.aligner.equals("bwa")){ BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam From b2c0eb1855f99060d252e4cc53fc0796e50a5288 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 3 May 2024 11:37:14 +0200 Subject: [PATCH 1717/1921] change if statement --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 78c4974c..acc1546e 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -22,26 +22,21 @@ workflow ALIGN_BWA_BWAMEM2 { main: ch_versions = Channel.empty() - ch_align = Channel.empty() // Map, sort, and index if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - ch_align = BWAMEM2_MEM.out.bam - if (ch_align == Channel.empty()) { + if (!file.exists(BWAMEM2_MEM.out.bam)) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam } - } - else if (params.aligner.equals("bwa")){ - BWA_MEM ( ch_reads_input, ch_bwa_index, true ) - ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) - ch_align = BWA_MEM.out.bam + else { + ch_align = BWAMEM2_MEM.out.bam } - + } SAMTOOLS_INDEX_ALIGN ( ch_align ) From 98e202a017058d041a501186068d412ea385f088 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 3 May 2024 12:10:25 +0200 Subject: [PATCH 1718/1921] change if statement --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index acc1546e..0871b063 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -28,7 +28,7 @@ workflow ALIGN_BWA_BWAMEM2 { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - if (!file.exists(BWAMEM2_MEM.out.bam)) { + if (!(BWAMEM2_MEM.out.bam).exists()) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam From e811efd82a5523ff38fe53d4b487bb5292504af1 Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 3 May 2024 12:53:41 +0200 Subject: [PATCH 1719/1921] change if statement --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 0871b063..730a95e4 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -28,7 +28,7 @@ workflow ALIGN_BWA_BWAMEM2 { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - if (!(BWAMEM2_MEM.out.bam).exists()) { + if ((BWAMEM2_MEM.out.bam).isEmpty()) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam From 68f9bc892d7cc46c6f4fa1546891f2ba6b34631a Mon Sep 17 00:00:00 2001 From: Annick Renevey <47788523+rannick@users.noreply.github.com> Date: Fri, 3 May 2024 14:31:29 +0200 Subject: [PATCH 1720/1921] add tmp channel --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 730a95e4..f7e5cb19 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -22,13 +22,13 @@ workflow ALIGN_BWA_BWAMEM2 { main: ch_versions = Channel.empty() - + ch_align_tmp = Channel.empty() // Map, sort, and index if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - - if ((BWAMEM2_MEM.out.bam).isEmpty()) { + ch_align_tmp = BWAMEM2_MEM.out.bam + if (!ch_align_tmp) { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) ch_align = BWA_MEM.out.bam From 8192e855cdf680d621081ffa70f7168bcf677ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Mon, 6 May 2024 15:17:57 +0200 Subject: [PATCH 1721/1921] Include "other" variants for CADD to analyse multallelic indels --- 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 4ac5b618..404e71e5 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -21,7 +21,7 @@ process { } withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { - ext.args = { "--output-type z --types indels" } + ext.args = { "--output-type z --types indels,other" } ext.prefix = { "${vcf.simpleName}_indels" } } From e6b62b7a9504f4db4bd1af7bc38a7d852790a122 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 6 May 2024 16:09:41 +0200 Subject: [PATCH 1722/1921] update align --- .../local/alignment/align_bwa_bwamem2.nf | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index f7e5cb19..16fff1bc 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -3,6 +3,7 @@ // include { BWA_MEM } from '../../../modules/nf-core/bwa/mem/main' +include { BWA_MEM as BWAMEM_FALLBACK } from '../../../modules/nf-core/bwa/mem/main' include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_ALIGN } from '../../../modules/nf-core/samtools/index/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MARKDUP } from '../../../modules/nf-core/samtools/index/main' @@ -22,20 +23,33 @@ workflow ALIGN_BWA_BWAMEM2 { main: ch_versions = Channel.empty() - ch_align_tmp = Channel.empty() + // Map, sort, and index - if (params.aligner.equals("bwamem2")) { + if (params.aligner.equals("bwa")) { + BWA_MEM ( ch_reads_input, ch_bwa_index, true ) + ch_align = BWA_MEM.out.bam + ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) + } else { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) + ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - ch_align_tmp = BWAMEM2_MEM.out.bam - if (!ch_align_tmp) { - BWA_MEM ( ch_reads_input, ch_bwa_index, true ) - ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) - ch_align = BWA_MEM.out.bam - } - else { - ch_align = BWAMEM2_MEM.out.bam + + if (params.align_fallback.equals(true)) { + ch_reads_input + .join(BWAMEM2_MEM.out.bam, remainder: true) + .branch { it -> + ERROR: it[2].equals(null) + return [it[0], it[1]] // return reads + SUCCESS: !it[2].equals(null) + return [it[0], it[2]] // return bam + } + .set { ch_fallback } + + BWAMEM_FALLBACK ( ch_fallback.ERROR, ch_bwa_index, true ) + ch_align = ch_fallback.SUCCESS.mix(BWAMEM_FALLBACK.out.bam) + ch_versions = ch_versions.mix(BWAMEM_FALLBACK.out.versions.first()) } + } SAMTOOLS_INDEX_ALIGN ( ch_align ) From d15cf7e9009cb19259632d4180263b63f2752052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20Bj=C3=B8rnstad?= Date: Mon, 6 May 2024 17:30:45 +0200 Subject: [PATCH 1723/1921] Describe change for #545 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5243d01..98537916 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Include multiallelic indel sites in CADD scoring jobs [#545](https://github.com/nf-core/raredisease/pull/545) + ### Parameters | Old parameter | New parameter | From cad7ce23becf08d7033f5621927f5bc4046a6eac Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 7 May 2024 10:40:32 +0200 Subject: [PATCH 1724/1921] update param --- nextflow.config | 1 + nextflow_schema.json | 5 +++++ subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 5065d2d9..fb385fa6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,6 +22,7 @@ params { // Main options analysis_type = 'wgs' + bwa_as_fallback = false bait_padding = 100 run_rtgvcfeval = false save_mapped_as_cram = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 6e2fbc81..1d1049bd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -459,6 +459,11 @@ "fa_icon": "fas fa-user-cog", "description": "Options used to steer the direction of the pipeline.", "properties": { + "bwa_as_fallback": { + "type": "boolean", + "description": "Specifies whether or not to use bwa as a fallback aligner in case bwamem2 throws an error.", + "fa_icon": "fas fa-toggle-on" + }, "analysis_type": { "type": "string", "default": "wgs", diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 80bf3822..40e93196 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -34,7 +34,7 @@ workflow ALIGN_BWA_BWAMEM2 { ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - if (params.align_fallback.equals(true)) { + if (params.bwa_as_fallback.equals(true)) { ch_reads_input .join(BWAMEM2_MEM.out.bam, remainder: true) .branch { it -> From 7efe3b876169a97e9c03eb214efe703cdbd01e8a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 7 May 2024 15:04:19 +0200 Subject: [PATCH 1725/1921] arrange param --- nextflow_schema.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 1d1049bd..d70f69ed 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -459,11 +459,6 @@ "fa_icon": "fas fa-user-cog", "description": "Options used to steer the direction of the pipeline.", "properties": { - "bwa_as_fallback": { - "type": "boolean", - "description": "Specifies whether or not to use bwa as a fallback aligner in case bwamem2 throws an error.", - "fa_icon": "fas fa-toggle-on" - }, "analysis_type": { "type": "string", "default": "wgs", @@ -471,6 +466,11 @@ "fa_icon": "fas fa-align-center", "enum": ["wgs", "wes", "mito"] }, + "bwa_as_fallback": { + "type": "boolean", + "description": "Specifies whether or not to use bwa as a fallback aligner in case bwamem2 throws an error.", + "fa_icon": "fas fa-toggle-on" + }, "platform": { "type": "string", "default": "illumina", From 2ca958fd17f2dbc9ffc9cbe41f19880367b26c82 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 May 2024 13:13:28 +0200 Subject: [PATCH 1726/1921] update test one sample --- conf/test_one_sample.config | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 404fe607..4f641aac 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -34,33 +34,33 @@ params { skip_peddy = true // Input data - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_single.csv' + input = params.pipelines_testdata_base_path + 'raredisease/testdata/samplesheet_single.csv' // Genome references - fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" - fai = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta.fai" + fasta = params.pipelines_testdata_base_path + 'raredisease/reference/reference.fasta' + fai = params.pipelines_testdata_base_path + 'raredisease/reference/reference.fasta.fai' 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" - 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" - mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" - mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" - reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" - score_config_mt = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" - 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" - svdb_query_dbs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" - target_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target.bed" - variant_catalog = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_catalog.json" - vcfanno_lua = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_functions.lua" - vcfanno_resources = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_resources.txt" - vcfanno_toml = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vcfanno_config.toml" - variant_consequences_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" - variant_consequences_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/variant_consequences_v2.txt" - vep_cache = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_cache_and_plugins.tar.gz" - vep_filters = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hgnc.txt" + gnomad_af = params.pipelines_testdata_base_path + 'raredisease/reference/gnomad_reformated.tab.gz' + intervals_wgs = params.pipelines_testdata_base_path + 'raredisease/reference/target_wgs.interval_list' + intervals_y = params.pipelines_testdata_base_path + 'raredisease/reference/targetY.interval_list' + known_dbsnp = params.pipelines_testdata_base_path + 'raredisease/reference/dbsnp_-138-.vcf.gz' + ml_model = 'https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model' + mobile_element_references = params.pipelines_testdata_base_path + 'raredisease/reference/mobile_element_references.tsv' + mobile_element_svdb_annotations = params.pipelines_testdata_base_path + 'raredisease/reference/svdb_querydb_files.csv' + reduced_penetrance = params.pipelines_testdata_base_path + 'raredisease/reference/reduced_penetrance.tsv' + score_config_mt = params.pipelines_testdata_base_path + 'raredisease/reference/rank_model_snv.ini' + score_config_snv = params.pipelines_testdata_base_path + 'raredisease/reference/rank_model_snv.ini' + score_config_sv = params.pipelines_testdata_base_path + 'raredisease/reference/rank_model_sv.ini' + svdb_query_dbs = params.pipelines_testdata_base_path + 'raredisease/reference/svdb_querydb_files.csv' + target_bed = params.pipelines_testdata_base_path + 'raredisease/reference/target.bed' + variant_catalog = params.pipelines_testdata_base_path + 'raredisease/reference/variant_catalog.json' + vcfanno_lua = params.pipelines_testdata_base_path + 'raredisease/reference/vcfanno_functions.lua' + vcfanno_resources = params.pipelines_testdata_base_path + 'raredisease/reference/vcfanno_resources.txt' + vcfanno_toml = params.pipelines_testdata_base_path + 'raredisease/reference/vcfanno_config.toml' + variant_consequences_snv = params.pipelines_testdata_base_path + 'raredisease/reference/variant_consequences_v2.txt' + variant_consequences_sv = params.pipelines_testdata_base_path + 'raredisease/reference/variant_consequences_v2.txt' + vep_cache = params.pipelines_testdata_base_path + 'raredisease/reference/vep_cache_and_plugins.tar.gz' + vep_filters = params.pipelines_testdata_base_path + 'raredisease/reference/hgnc.txt' vep_cache_version = 107 - vep_plugin_files = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/vep_files.csv" + vep_plugin_files = params.pipelines_testdata_base_path + 'raredisease/reference/vep_files.csv' } From d605f7e02cec12532f37d1f3bac762de05060736 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 May 2024 13:38:49 +0200 Subject: [PATCH 1727/1921] fix lint error --- .nf-core.yml | 3 +-- nextflow_schema.json | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.nf-core.yml b/.nf-core.yml index 6d22d4b4..070882cb 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,6 +1,5 @@ lint: - files_exist: - - conf/modules.config + modules_config: False files_unchanged: - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md diff --git a/nextflow_schema.json b/nextflow_schema.json index 178afd2d..8e5ed746 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -27,8 +27,7 @@ "type": "string", "format": "directory-path", "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.", - "fa_icon": "fas fa-folder-open", - "default": "results" + "fa_icon": "fas fa-folder-open" }, "email": { "type": "string", From 9838708e245fbf9d4f8a6fd81c7e4a7f6dd23256 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 14 May 2024 13:42:55 +0200 Subject: [PATCH 1728/1921] fix lint --- .nf-core.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.nf-core.yml b/.nf-core.yml index 070882cb..8d084d3b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,10 +1,12 @@ lint: - modules_config: False + files_exist: + - conf/modules.config files_unchanged: - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md - docs/images/nf-core-raredisease_logo_dark.png - docs/images/nf-core-raredisease_logo_light.png - assets/nf-core-raredisease_logo_light.png + modules_config: False repository_type: pipeline nf_core_version: "2.14.1" From 03b0e9d40d3a8cd94ffa2dad572aaec094174edb Mon Sep 17 00:00:00 2001 From: Sima Rahimi <54620700+sima-r@users.noreply.github.com> Date: Thu, 16 May 2024 10:26:16 +0200 Subject: [PATCH 1729/1921] changed valid values for sex This is now compatible with the PED file format and documentation --- assets/schema_input.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 7bcd1812..38249daa 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -40,9 +40,9 @@ ] }, "sex": { - "type": "integer", + "type": "string", "meta": ["sex"], - "enum": [0, 1, 2], + "enum": ["1", "2", "other"], "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { From 9da1d8d8a92f6605546610cf86b6c2d169f21f3c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 May 2024 10:41:36 +0200 Subject: [PATCH 1730/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d054ab79..2e74f569 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` ### `Changed` + - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) - Refactored mobile element annotation subworkflow files [#538](https://github.com/nf-core/raredisease/pull/538) From 91fc58e3a39ab8ff37eb9154f5ee48f155bef579 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 May 2024 13:14:52 +0200 Subject: [PATCH 1731/1921] update changelog --- CHANGELOG.md | 2 ++ nextflow_schema.json | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e74f569..44e6f516 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- A new parameter `bwa_as_fallback` to switch aligner to bwa in case bwamem2 fails [#551](https://github.com/nf-core/raredisease/pull/551) + ### `Changed` - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) diff --git a/nextflow_schema.json b/nextflow_schema.json index 0c26050c..674c19c8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -468,6 +468,7 @@ "bwa_as_fallback": { "type": "boolean", "description": "Specifies whether or not to use bwa as a fallback aligner in case bwamem2 throws an error.", + "help_text": "errorStrategy needs to be set to ignore for the bwamem2 process for the fallback to work. Turned off by default.", "fa_icon": "fas fa-toggle-on" }, "platform": { From 2f42dd03b7e038d992425e2c8d1d063dfeb399ff Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 May 2024 19:28:20 +0200 Subject: [PATCH 1732/1921] refactor mito --- conf/modules/align_MT.config | 6 -- conf/modules/call_repeat_expansions.config | 4 - conf/modules/prepare_references.config | 10 +-- conf/modules/qc_bam.config | 8 +- nextflow.config | 1 + nextflow_schema.json | 5 ++ subworkflows/local/align.nf | 87 ++++++++++--------- subworkflows/local/alignment/align_MT.nf | 16 ++-- subworkflows/local/call_snv.nf | 81 +++++++++-------- .../local/call_structural_variants.nf | 6 +- subworkflows/local/qc_bam.nf | 22 ++--- workflows/raredisease.nf | 22 ++--- 12 files changed, 139 insertions(+), 129 deletions(-) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index 1bd88f14..6ec96d0d 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -19,19 +19,16 @@ process { withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes"))} ext.prefix = { "${meta.id}_sorted" } } @@ -70,19 +67,16 @@ process { withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes"))} ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ALIGN_MT_SHIFT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } - ext.when = { !(params.analysis_type.equals("wes")) } ext.prefix = { "${meta.id}_sorted_shifted" } } diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index 002ddffb..a3c140a0 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -16,10 +16,6 @@ // process { - withName: '.*CALL_REPEAT_EXPANSIONS:.*' { - ext.when = { params.analysis_type != "wes" } - } - withName: '.*CALL_REPEAT_EXPANSIONS:EXPANSIONHUNTER' { ext.args = { ("${meta.sex}" == '1') ? '--sex male' : '--sex female' } ext.prefix = { "${meta.id}_exphunter" } diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 103a1ad7..efcea90c 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -30,7 +30,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { - ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2"} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { @@ -38,11 +38,11 @@ process { } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { - ext.when = { !(params.analysis_type == "wes") && params.aligner == "sentieon"} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.aligner == "sentieon"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_MT_SHIFT' { - ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwa"} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.aligner == "bwa"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { @@ -63,7 +63,7 @@ process { } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_MT_SHIFT' { - ext.when = { !(params.analysis_type == "wes")} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) } } withName: '.*PREPARE_REFERENCES:GATK_SD' { @@ -75,7 +75,7 @@ process { } withName: '.*PREPARE_REFERENCES:GATK_SD_MT_SHIFT' { - ext.when = { !(params.analysis_type == "wes")} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes)} } withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index d57670c7..7d88c095 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -74,23 +74,23 @@ process { withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS' { ext.args = "--TMP_DIR ." - ext.when = { params.analysis_type.equals("wgs") && !params.aligner.equals("sentieon") } + ext.when = { !params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:PICARD_COLLECTWGSMETRICS_Y' { ext.args = "--TMP_DIR ." - ext.when = { params.analysis_type.equals("wgs") && !params.aligner.equals("sentieon") } + ext.when = { !params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics_y" } } withName: '.*QC_BAM:SENTIEON_WGSMETRICS' { - ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("sentieon") } + ext.when = { params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics" } } withName: '.*QC_BAM:SENTIEON_WGSMETRICS_Y' { - ext.when = { params.analysis_type.equals("wgs") && params.aligner.equals("sentieon") } + ext.when = { params.aligner.equals("sentieon") } ext.prefix = { "${meta.id}_wgsmetrics_y" } } } diff --git a/nextflow.config b/nextflow.config index a0dcaa43..e4d19a56 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,6 +23,7 @@ params { // Main options analysis_type = 'wgs' bait_padding = 100 + run_mt_for_wes = false run_rtgvcfeval = false save_mapped_as_cram = false skip_eklipse = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 8e5ed746..72d5496c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -479,6 +479,11 @@ "fa_icon": "fas fa-align-center", "enum": ["xy", "hetx", "sry"] }, + "run_mt_for_wes": { + "type": "boolean", + "description": "Specifies whether to run mitochondrial analysis for wes samples", + "fa_icon": "fas fa-toggle-on" + }, "run_rtgvcfeval": { "type": "boolean", "description": "Specifies whether to run rtgtools' vcfeval", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 51bbf3fb..da1c7ab6 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -26,12 +26,18 @@ workflow ALIGN { val_platform // string: [mandatory] illumina or a different technology main: - ch_versions = Channel.empty() - ch_fastp_json = Channel.empty() - ch_bwamem2_bam = Channel.empty() - ch_sentieon_bam = Channel.empty() - ch_bwamem2_bai = Channel.empty() - ch_sentieon_bai = Channel.empty() + ch_bwamem2_bam = Channel.empty() + ch_bwamem2_bai = Channel.empty() + ch_fastp_json = Channel.empty() + ch_mt_bam_bai = Channel.empty() + ch_mt_marked_bam = Channel.empty() + ch_mt_marked_bai = Channel.empty() + ch_mtshift_bam_bai = Channel.empty() + ch_mtshift_marked_bam = Channel.empty() + ch_mtshift_marked_bai = Channel.empty() + ch_sentieon_bam = Channel.empty() + ch_sentieon_bai = Channel.empty() + ch_versions = Channel.empty() if (!params.skip_fastp) { FASTP (ch_reads, [], false, false) @@ -70,48 +76,49 @@ workflow ALIGN { ch_genome_bam_bai = ch_genome_marked_bam.join(ch_genome_marked_bai, failOnMismatch:true, failOnDuplicate:true) // PREPARING READS FOR MT ALIGNMENT - CONVERT_MT_BAM_TO_FASTQ ( - ch_genome_bam_bai, - ch_genome_fasta, - ch_genome_fai, - ch_genome_dictionary - ) - - ALIGN_MT ( - CONVERT_MT_BAM_TO_FASTQ.out.fastq, - CONVERT_MT_BAM_TO_FASTQ.out.bam, - ch_genome_bwaindex, - ch_genome_bwamem2index, - ch_genome_fasta, - ch_genome_dictionary, - ch_genome_fai - ) + if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { + CONVERT_MT_BAM_TO_FASTQ ( + ch_genome_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_genome_dictionary + ) - ALIGN_MT_SHIFT ( - CONVERT_MT_BAM_TO_FASTQ.out.fastq, - CONVERT_MT_BAM_TO_FASTQ.out.bam, - ch_mtshift_bwaindex, - ch_mtshift_bwamem2index, - ch_mtshift_fasta, - ch_mtshift_dictionary, - ch_mtshift_fai - ) + ALIGN_MT ( + CONVERT_MT_BAM_TO_FASTQ.out.fastq, + CONVERT_MT_BAM_TO_FASTQ.out.bam, + ch_genome_bwaindex, + ch_genome_bwamem2index, + ch_genome_fasta, + ch_genome_dictionary, + ch_genome_fai + ) - ch_mt_marked_bam = ALIGN_MT.out.marked_bam - ch_mt_marked_bai = ALIGN_MT.out.marked_bai - ch_mt_bam_bai = ch_mt_marked_bam.join(ch_mt_marked_bai, failOnMismatch:true, failOnDuplicate:true) + ALIGN_MT_SHIFT ( + CONVERT_MT_BAM_TO_FASTQ.out.fastq, + CONVERT_MT_BAM_TO_FASTQ.out.bam, + ch_mtshift_bwaindex, + ch_mtshift_bwamem2index, + ch_mtshift_fasta, + ch_mtshift_dictionary, + ch_mtshift_fai + ) - ch_mtshift_marked_bam = ALIGN_MT_SHIFT.out.marked_bam - ch_mtshift_marked_bai = ALIGN_MT_SHIFT.out.marked_bai - ch_mtshift_bam_bai = ch_mtshift_marked_bam.join(ch_mtshift_marked_bai, failOnMismatch:true, failOnDuplicate:true) + ch_mt_marked_bam = ALIGN_MT.out.marked_bam + ch_mt_marked_bai = ALIGN_MT.out.marked_bai + ch_mt_bam_bai = ch_mt_marked_bam.join(ch_mt_marked_bai, failOnMismatch:true, failOnDuplicate:true) + ch_mtshift_marked_bam = ALIGN_MT_SHIFT.out.marked_bam + ch_mtshift_marked_bai = ALIGN_MT_SHIFT.out.marked_bai + ch_mtshift_bam_bai = ch_mtshift_marked_bam.join(ch_mtshift_marked_bai, failOnMismatch:true, failOnDuplicate:true) + ch_versions = ch_versions.mix(ALIGN_MT.out.versions, + ALIGN_MT_SHIFT.out.versions, + CONVERT_MT_BAM_TO_FASTQ.out.versions) + } if (params.save_mapped_as_cram) { SAMTOOLS_VIEW( ch_genome_bam_bai, ch_genome_fasta, [] ) ch_versions = ch_versions.mix(SAMTOOLS_VIEW.out.versions) } - ch_versions = ch_versions.mix(ALIGN_MT.out.versions, - ALIGN_MT_SHIFT.out.versions, - CONVERT_MT_BAM_TO_FASTQ.out.versions) emit: fastp_json = ch_fastp_json // channel: [ val(meta), path(json) ] diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 8f7930c7..1bb5c56f 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -23,25 +23,21 @@ workflow ALIGN_MT { main: ch_versions = Channel.empty() - ch_bwa_bam = Channel.empty() - ch_bwamem2_bam = Channel.empty() - ch_sentieon_bam = Channel.empty() if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) - ch_bwamem2_bam = BWAMEM2_MEM_MT.out.bam + ch_align = BWAMEM2_MEM_MT.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) } else if (params.aligner.equals("sentieon")) { SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) - ch_sentieon_bam = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } - ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) + ch_align = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } + ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) } else if (params.aligner.equals("bwa")) { BWA_MEM_MT ( ch_fastq, ch_bwaindex, true ) - ch_bwa_bam = BWA_MEM_MT.out.bam - ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) + ch_align = BWA_MEM_MT.out.bam + ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) } - Channel.empty() - .mix(ch_bwamem2_bam, ch_sentieon_bam, ch_bwa_bam) + ch_align .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) .set {ch_bam_ubam} diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 72c91ecf..48bc500a 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -38,6 +38,8 @@ workflow CALL_SNV { ch_deepvar_tbi = Channel.empty() ch_deepvar_gvcf = Channel.empty() ch_deepvar_gtbi = Channel.empty() + ch_mt_vcf = Channel.empty() + ch_mt_tabix = Channel.empty() ch_sentieon_vcf = Channel.empty() ch_sentieon_tbi = Channel.empty() ch_sentieon_gvcf = Channel.empty() @@ -93,46 +95,49 @@ workflow CALL_SNV { ch_genome_tabix = GATK4_SELECTVARIANTS.out.tbi ch_genome_vcf_tabix = ch_genome_vcf.join(ch_genome_tabix, failOnMismatch:true, failOnDuplicate:true) - CALL_SNV_MT( - ch_mt_bam_bai, - ch_genome_fasta, - ch_genome_fai, - ch_genome_dictionary, - ch_mt_intervals - ) - - CALL_SNV_MT_SHIFT( - ch_mtshift_bam_bai, - ch_mtshift_fasta, - ch_mtshift_fai, - ch_mtshift_dictionary, - ch_mtshift_intervals - ) + if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { + CALL_SNV_MT( + ch_mt_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_genome_dictionary, + ch_mt_intervals + ) - POSTPROCESS_MT_CALLS( - CALL_SNV_MT.out.vcf, - CALL_SNV_MT_SHIFT.out.vcf, - ch_genome_fasta, - ch_genome_dictionary, - ch_genome_fai, - ch_mtshift_backchain, - ch_case_info, - ch_foundin_header, - ch_genome_chrsizes - ) + CALL_SNV_MT_SHIFT( + ch_mtshift_bam_bai, + ch_mtshift_fasta, + ch_mtshift_fai, + ch_mtshift_dictionary, + ch_mtshift_intervals + ) - ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) - ch_versions = ch_versions.mix(CALL_SNV_MT_SHIFT.out.versions) - ch_versions = ch_versions.mix(POSTPROCESS_MT_CALLS.out.versions) - ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) + POSTPROCESS_MT_CALLS( + CALL_SNV_MT.out.vcf, + CALL_SNV_MT_SHIFT.out.vcf, + ch_genome_fasta, + ch_genome_dictionary, + ch_genome_fai, + ch_mtshift_backchain, + ch_case_info, + ch_foundin_header, + ch_genome_chrsizes + ) + ch_mt_vcf = POSTPROCESS_MT_CALLS.out.vcf + ch_mt_tabix = POSTPROCESS_MT_CALLS.out.tbi + ch_versions = ch_versions.mix(CALL_SNV_MT.out.versions) + ch_versions = ch_versions.mix(CALL_SNV_MT_SHIFT.out.versions) + ch_versions = ch_versions.mix(POSTPROCESS_MT_CALLS.out.versions) + ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions) + } emit: - genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] - genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] - genome_vcf_tabix = ch_genome_vcf_tabix // channel: [ val(meta), path(vcf), path(tbi) ] - genome_gvcf = ch_gvcf // channel: [ val(meta), path(gvcf) ] - genome_gtabix = ch_gtabix // channel: [ val(meta), path(gtbi) ] - mt_vcf = POSTPROCESS_MT_CALLS.out.vcf // channel: [ val(meta), path(vcf) ] - mt_tabix = POSTPROCESS_MT_CALLS.out.tbi // channel: [ val(meta), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + genome_vcf = ch_genome_vcf // channel: [ val(meta), path(vcf) ] + genome_tabix = ch_genome_tabix // channel: [ val(meta), path(tbi) ] + genome_vcf_tabix = ch_genome_vcf_tabix // channel: [ val(meta), path(vcf), path(tbi) ] + genome_gvcf = ch_gvcf // channel: [ val(meta), path(gvcf) ] + genome_gtabix = ch_gtabix // channel: [ val(meta), path(gtbi) ] + mt_vcf = ch_mt_vcf // channel: [ val(meta), path(vcf) ] + mt_tabix = ch_mt_tabix // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index f590bb60..76f40af5 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -57,7 +57,10 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { cnvnator_vcf } - CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) + if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { + CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) + ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) + } //merge if (params.skip_germlinecnvcaller) { @@ -85,7 +88,6 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_CNVNATOR.out.versions) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) - ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) ch_versions = ch_versions.mix(SVDB_MERGE.out.versions) diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index b1ce5141..b8bc8af6 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -31,6 +31,8 @@ workflow QC_BAM { ngsbits_samplegender_method // channel [val(method)] main: + ch_cov = Channel.empty() + ch_cov_y = Channel.empty() ch_versions = Channel.empty() ch_qualimap = Channel.empty() @@ -58,17 +60,19 @@ workflow QC_BAM { MOSDEPTH (ch_mosdepth_in, ch_genome_fasta) // COLLECT WGS METRICS - 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_genome_fasta, ch_genome_fai, ch_intervals_wgs.map{ interval -> [[:], interval]} ) - SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:], interval]} ) - + if (!params.analysis_type.equals("wes")) { + 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_genome_fasta, ch_genome_fai, ch_intervals_wgs.map{ interval -> [[:], interval]} ) + SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y.map{ interval -> [[:], interval]} ) + 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) + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first(), SENTIEON_WGSMETRICS.out.versions.first()) + ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions.first(), SENTIEON_WGSMETRICS_Y.out.versions.first()) + } // Check sex NGSBITS_SAMPLEGENDER(ch_bam_bai, ch_genome_fasta, ch_genome_fai, ngsbits_samplegender_method) - 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) ch_versions = ch_versions.mix(CHROMOGRAPH_COV.out.versions.first()) ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first()) @@ -77,8 +81,6 @@ workflow QC_BAM { ch_versions = ch_versions.mix(UCSC_WIGTOBIGWIG.out.versions.first()) ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first()) ch_versions = ch_versions.mix(NGSBITS_SAMPLEGENDER.out.versions.first()) - ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first(), SENTIEON_WGSMETRICS.out.versions.first()) - ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS_Y.out.versions.first(), SENTIEON_WGSMETRICS_Y.out.versions.first()) emit: multiple_metrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics // channel: [ val(meta), path(metrics) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8d3e0aa2..17ac7f5c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -366,7 +366,7 @@ workflow RAREDISEASE { .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) - if (!params.skip_mt_subsample) { + if (!params.skip_mt_subsample && (params.analysis_type.equals("wgs") || params.run_mt_for_wes)) { SUBSAMPLE_MT( ch_mapped.mt_bam_bai, params.mt_subsample_rd, @@ -396,14 +396,16 @@ workflow RAREDISEASE { // // EXPANSIONHUNTER AND STRANGER // - CALL_REPEAT_EXPANSIONS ( - ch_mapped.genome_bam_bai, - ch_variant_catalog, - ch_case_info, - ch_genome_fasta, - ch_genome_fai - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + if (params.analysis_type.equals("wgs")) { + CALL_REPEAT_EXPANSIONS ( + ch_mapped.genome_bam_bai, + ch_variant_catalog, + ch_case_info, + ch_genome_fasta, + ch_genome_fai + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + } // // SNV CALLING @@ -557,7 +559,7 @@ workflow RAREDISEASE { // // ANNOTATE MT SNVs // - if (!params.skip_mt_annotation) { + if (!params.skip_mt_annotation && (params.run_mt_for_wes || params.analysis_type.equals("wgs"))) { ANNOTATE_MT_SNVS ( CALL_SNV.out.mt_vcf, From 6ac690f98cd768c4897ad4d7aa9f94811362838d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 May 2024 19:36:04 +0200 Subject: [PATCH 1733/1921] updatae changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e74f569..69e6f072 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- A new parameter `run_mt_for_wes` to turn on mitochondrial analysis for WES cases [#552](https://github.com/nf-core/raredisease/pull/552) + ### `Changed` - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) From 2d5c9181d1cd8900b26bab78b37cd28151a85ee9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 17 May 2024 22:19:00 +0200 Subject: [PATCH 1734/1921] Update align_bwa_bwamem2.nf --- subworkflows/local/alignment/align_bwa_bwamem2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index 40e93196..b846cad3 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -34,7 +34,7 @@ workflow ALIGN_BWA_BWAMEM2 { ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) - if (params.bwa_as_fallback.equals(true)) { + if (params.bwa_as_fallback) { ch_reads_input .join(BWAMEM2_MEM.out.bam, remainder: true) .branch { it -> From a27c043cdb7b4d40329d0555327b9d187f749e65 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 19 May 2024 11:06:34 +0200 Subject: [PATCH 1735/1921] add mem and index --- modules.json | 10 + modules/nf-core/bwameme/index/environment.yml | 7 + modules/nf-core/bwameme/index/main.nf | 61 +++++ modules/nf-core/bwameme/index/meta.yml | 44 ++++ .../nf-core/bwameme/index/tests/main.nf.test | 59 +++++ .../bwameme/index/tests/main.nf.test.snap | 108 ++++++++ .../bwameme/index/tests/nextflow.config | 7 + modules/nf-core/bwameme/index/tests/tags.yml | 2 + modules/nf-core/bwameme/mem/environment.yml | 11 + modules/nf-core/bwameme/mem/main.nf | 94 +++++++ modules/nf-core/bwameme/mem/meta.yml | 90 +++++++ .../nf-core/bwameme/mem/tests/main.nf.test | 239 ++++++++++++++++++ .../bwameme/mem/tests/main.nf.test.snap | 67 +++++ .../nf-core/bwameme/mem/tests/nextflow.config | 9 + modules/nf-core/bwameme/mem/tests/tags.yml | 2 + 15 files changed, 810 insertions(+) create mode 100644 modules/nf-core/bwameme/index/environment.yml create mode 100644 modules/nf-core/bwameme/index/main.nf create mode 100644 modules/nf-core/bwameme/index/meta.yml create mode 100644 modules/nf-core/bwameme/index/tests/main.nf.test create mode 100644 modules/nf-core/bwameme/index/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwameme/index/tests/nextflow.config create mode 100644 modules/nf-core/bwameme/index/tests/tags.yml create mode 100644 modules/nf-core/bwameme/mem/environment.yml create mode 100644 modules/nf-core/bwameme/mem/main.nf create mode 100644 modules/nf-core/bwameme/mem/meta.yml create mode 100644 modules/nf-core/bwameme/mem/tests/main.nf.test create mode 100644 modules/nf-core/bwameme/mem/tests/main.nf.test.snap create mode 100644 modules/nf-core/bwameme/mem/tests/nextflow.config create mode 100644 modules/nf-core/bwameme/mem/tests/tags.yml diff --git a/modules.json b/modules.json index 2e29bd6f..e23ee838 100644 --- a/modules.json +++ b/modules.json @@ -75,6 +75,16 @@ "git_sha": "74363e1acc38eaedeede8d429477397c1a6f9e18", "installed_by": ["modules"] }, + "bwameme/index": { + "branch": "master", + "git_sha": "79480293280ff4f10f30bdea1ddd903f223f8489", + "installed_by": ["modules"] + }, + "bwameme/mem": { + "branch": "master", + "git_sha": "79480293280ff4f10f30bdea1ddd903f223f8489", + "installed_by": ["modules"] + }, "cadd": { "branch": "master", "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", diff --git a/modules/nf-core/bwameme/index/environment.yml b/modules/nf-core/bwameme/index/environment.yml new file mode 100644 index 00000000..5d76ea18 --- /dev/null +++ b/modules/nf-core/bwameme/index/environment.yml @@ -0,0 +1,7 @@ +name: "bwameme_index" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::bwa-meme=1.0.6" diff --git a/modules/nf-core/bwameme/index/main.nf b/modules/nf-core/bwameme/index/main.nf new file mode 100644 index 00000000..870f494c --- /dev/null +++ b/modules/nf-core/bwameme/index/main.nf @@ -0,0 +1,61 @@ +process BWAMEME_INDEX { + tag "$fasta" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bwa-meme:1.0.6--hdcf5f25_2': + 'biocontainers/bwa-meme:1.0.6--hdcf5f25_2' }" + + input: + tuple val(meta), path(fasta) + + output: + tuple val(meta), path("bwameme"), emit: index + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${fasta}" + def VERSION = '1.0.6' // WARN: Version information provided by tool on CLI is incorrect. Please update this string when bumping container versions. + """ + mkdir bwameme + + bwa-meme index \\ + $args \\ + -t $task.cpus \\ + -p bwameme/$prefix \\ + $fasta + + build_rmis_dna.sh bwameme/$prefix + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwameme: $VERSION + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${fasta}" + def VERSION = '1.0.6' // WARN: Version information provided by tool on CLI is incorrect. Please update this string when bumping container versions. + """ + mkdir bwameme + touch bwameme/${prefix}.0123 + touch bwameme/${prefix}.ann + touch bwameme/${prefix}.pac + touch bwameme/${prefix}.amb + touch bwameme/${prefix}.pos_packed + touch bwameme/${prefix}.suffixarray_uint64 + touch bwameme/${prefix}.suffixarray_uint64_L0_PARAMETERS + touch bwameme/${prefix}.suffixarray_uint64_L1_PARAMETERS + touch bwameme/${prefix}.suffixarray_uint64_L2_PARAMETERS + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwameme: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwameme/index/meta.yml b/modules/nf-core/bwameme/index/meta.yml new file mode 100644 index 00000000..2db1d3a8 --- /dev/null +++ b/modules/nf-core/bwameme/index/meta.yml @@ -0,0 +1,44 @@ +name: "bwameme_index" +description: Create BWA-MEME index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - "bwameme": + description: "Faster BWA-MEM2 using learned-index" + homepage: https://github.com/kaist-ina/BWA-MEME + documentation: https://github.com/kaist-ina/BWA-MEME#getting-started + doi: "10.1093/bioinformatics/btac137" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - fasta: + type: file + description: Input genome fasta file + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - index: + type: file + description: BWA-MEME genome index files + pattern: "*.{0123,amb,ann,pac,pos_packed,suffixarray_uint64,suffixarray_uint64_L0_PARAMETERS,suffixarray_uint64_L1_PARAMETERS,suffixarray_uint64_L2_PARAMETERS}" + +authors: + - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/bwameme/index/tests/main.nf.test b/modules/nf-core/bwameme/index/tests/main.nf.test new file mode 100644 index 00000000..b61f7660 --- /dev/null +++ b/modules/nf-core/bwameme/index/tests/main.nf.test @@ -0,0 +1,59 @@ +nextflow_process { + + name "Test Process BWAMEME_INDEX" + script "../main.nf" + process "BWAMEME_INDEX" + + tag "modules" + tag "modules_nfcore" + tag "bwameme" + tag "bwameme/index" + + config "./nextflow.config" + + test("BWAMEME index") { + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("BWAMEME index - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/bwameme/index/tests/main.nf.test.snap b/modules/nf-core/bwameme/index/tests/main.nf.test.snap new file mode 100644 index 00000000..e608af8b --- /dev/null +++ b/modules/nf-core/bwameme/index/tests/main.nf.test.snap @@ -0,0 +1,108 @@ +{ + "BWAMEME index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.amb:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.ann:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.pac:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.pos_packed:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64_L0_PARAMETERS:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64_L1_PARAMETERS:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64_L2_PARAMETERS:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,c80b8097b8a9c022e4c1e2617771ea3d" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.amb:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.ann:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.pac:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.pos_packed:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64_L0_PARAMETERS:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64_L1_PARAMETERS:md5,d41d8cd98f00b204e9800998ecf8427e", + "genome.fasta.suffixarray_uint64_L2_PARAMETERS:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,c80b8097b8a9c022e4c1e2617771ea3d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T13:44:38.551252246" + }, + "BWAMEME index": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66", + "genome.fasta.pos_packed:md5,3534bc04a547d02d6e4cb50908a40db9", + "genome.fasta.suffixarray_uint64:md5,51abb48f687661f88bf5bf5d370521e3", + "genome.fasta.suffixarray_uint64_L0_PARAMETERS:md5,ad6397d3d33bbb6a31b1320349e23274", + "genome.fasta.suffixarray_uint64_L1_PARAMETERS:md5,6c0d6dc7e733a7f373aa7b2730621aa4", + "genome.fasta.suffixarray_uint64_L2_PARAMETERS:md5,b2d4bad4e9f0e8960a0af12b7038ab1e" + ] + ] + ], + "1": [ + "versions.yml:md5,c80b8097b8a9c022e4c1e2617771ea3d" + ], + "index": [ + [ + { + "id": "test" + }, + [ + "genome.fasta.0123:md5,b02870de80106104abcb03cd9463e7d8", + "genome.fasta.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e", + "genome.fasta.ann:md5,c32e11f6c859f166c7525a9c1d583567", + "genome.fasta.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66", + "genome.fasta.pos_packed:md5,3534bc04a547d02d6e4cb50908a40db9", + "genome.fasta.suffixarray_uint64:md5,51abb48f687661f88bf5bf5d370521e3", + "genome.fasta.suffixarray_uint64_L0_PARAMETERS:md5,ad6397d3d33bbb6a31b1320349e23274", + "genome.fasta.suffixarray_uint64_L1_PARAMETERS:md5,6c0d6dc7e733a7f373aa7b2730621aa4", + "genome.fasta.suffixarray_uint64_L2_PARAMETERS:md5,b2d4bad4e9f0e8960a0af12b7038ab1e" + ] + ] + ], + "versions": [ + "versions.yml:md5,c80b8097b8a9c022e4c1e2617771ea3d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T13:44:25.040725565" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameme/index/tests/nextflow.config b/modules/nf-core/bwameme/index/tests/nextflow.config new file mode 100644 index 00000000..5934b7d1 --- /dev/null +++ b/modules/nf-core/bwameme/index/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: BWAMEME_INDEX { + ext.args = '-a meme' + } + +} diff --git a/modules/nf-core/bwameme/index/tests/tags.yml b/modules/nf-core/bwameme/index/tests/tags.yml new file mode 100644 index 00000000..ddbcab04 --- /dev/null +++ b/modules/nf-core/bwameme/index/tests/tags.yml @@ -0,0 +1,2 @@ +bwameme/index: + - "modules/nf-core/bwameme/index/**" diff --git a/modules/nf-core/bwameme/mem/environment.yml b/modules/nf-core/bwameme/mem/environment.yml new file mode 100644 index 00000000..388eedd2 --- /dev/null +++ b/modules/nf-core/bwameme/mem/environment.yml @@ -0,0 +1,11 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +name: "bwameme_mem" +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - "bioconda::bwa-meme=1.0.6" + - "bioconda::mbuffer=20160228" + - "bioconda::samtools=1.20" diff --git a/modules/nf-core/bwameme/mem/main.nf b/modules/nf-core/bwameme/mem/main.nf new file mode 100644 index 00000000..db41316e --- /dev/null +++ b/modules/nf-core/bwameme/mem/main.nf @@ -0,0 +1,94 @@ +process BWAMEME_MEM { + tag "$meta.id" + label 'process_high' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-ed29b84fa94419f5a7bf6a841ddbcb964768825b:139b5e403886ad278b9ad139174967441c1c6ff3-0': + 'biocontainers/mulled-v2-ed29b84fa94419f5a7bf6a841ddbcb964768825b:139b5e403886ad278b9ad139174967441c1c6ff3-0' }" + + input: + tuple val(meta), path(reads) + tuple val(meta2), path(index) + tuple val(meta3), path(fasta) + val sort_bam + + output: + tuple val(meta), path("*.sam") , emit: sam , optional:true + tuple val(meta), path("*.bam") , emit: bam , optional:true + tuple val(meta), path("*.cram") , emit: cram, optional:true + tuple val(meta), path("*.crai") , emit: crai, optional:true + tuple val(meta), path("*.csi") , emit: csi , optional:true + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + def mbuffer_mem = 3072 + if (!task.memory) { + log.info '[bwameme-mbuffer] Available memory not known - defaulting to 3GB for mbuffer. Specify process memory requirements to change this.' + } else { + mbuffer_mem = (task.memory.mega*0.5).intValue() + } + def mbuffer_command = sort_bam ? "| mbuffer -m ${mbuffer_mem}M" : "" + def mem_per_thread = sort_bam ? "-m "+ (mbuffer_mem/task.cpus).intValue()+"M" : "" + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + def VERSION = '1.0.6' // WARN: Version information provided by tool on CLI is incorrect. Please update this string when bumping container versions. + """ + INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` + + bwa-meme \\ + mem \\ + $args \\ + -t $task.cpus \\ + \$INDEX \\ + $reads \\ + $mbuffer_command \\ + | samtools $samtools_command $args2 $mem_per_thread -@ $task.cpus ${reference} -o ${prefix}.${extension} - + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwameme: $VERSION + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def samtools_command = sort_bam ? 'sort' : 'view' + def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ + def extension_matcher = (args2 =~ extension_pattern) + def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" + def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" + if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + + def create_index = "" + if (extension == "cram") { + create_index = "touch ${prefix}.crai" + } else if (extension == "bam") { + create_index = "touch ${prefix}.csi" + } + def VERSION = '1.0.6' // WARN: Version information provided by tool on CLI is incorrect. Please update this string when bumping container versions. + """ + touch ${prefix}.${extension} + ${create_index} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bwameme: $VERSION + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/bwameme/mem/meta.yml b/modules/nf-core/bwameme/mem/meta.yml new file mode 100644 index 00000000..c7eb7b28 --- /dev/null +++ b/modules/nf-core/bwameme/mem/meta.yml @@ -0,0 +1,90 @@ +name: "bwameme_mem" +description: Performs fastq alignment to a fasta reference using BWA-MEME +keywords: + - mem + - bwa + - bwamem2 + - bwameme + - alignment + - map + - fastq + - bam + - sam + - cram +tools: + - "bwameme": + description: "Faster BWA-MEM2 using learned-index" + homepage: https://github.com/kaist-ina/BWA-MEME + documentation: https://github.com/kaist-ina/BWA-MEME#getting-started + doi: "10.1093/bioinformatics/btac137" + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - sam: + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - cram: + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - crai: + type: file + description: Index file for CRAM file + pattern: "*.{crai}" + - csi: + type: file + description: Index file for BAM file + pattern: "*.{csi}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@ramprasadn" +maintainers: + - "@ramprasadn" diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test b/modules/nf-core/bwameme/mem/tests/main.nf.test new file mode 100644 index 00000000..3b67b39e --- /dev/null +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test @@ -0,0 +1,239 @@ +nextflow_process { + + name "Test Process BWAMEME_MEM" + script "../main.nf" + process "BWAMEME_MEM" + + tag "modules" + tag "modules_nfcore" + tag "bwameme" + tag "bwameme/mem" + tag "bwameme/index" + config "./nextflow.config" + + test("sarscov2 - fastq, index, fasta, false") { + + setup { + run("BWAMEME_INDEX") { + script "../../index/main.nf" + config "./nextflow.config" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + input[1] = BWAMEME_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - fastq, index, fasta, true") { + + setup { + run("BWAMEME_INDEX") { + script "../../index/main.nf" + config "./nextflow.config" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)] + ]) + input[1] = BWAMEME_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, false") { + + setup { + run("BWAMEME_INDEX") { + script "../../index/main.nf" + config "./nextflow.config" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEME_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true") { + + setup { + run("BWAMEME_INDEX") { + script "../../index/main.nf" + config "./nextflow.config" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEME_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [fastq1, fastq2], index, fasta, true - stub") { + + options "-stub" + + setup { + run("BWAMEME_INDEX") { + script "../../index/main.nf" + config "./nextflow.config" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ + } + } + } + + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) + ] + ]) + input[1] = BWAMEME_INDEX.out.index + input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) + input[3] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + process.out.versions + ).match() } + ) + } + + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap new file mode 100644 index 00000000..281011ae --- /dev/null +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap @@ -0,0 +1,67 @@ +{ + "sarscov2 - [fastq1, fastq2], index, fasta, false": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T20:04:31.962017214" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T19:28:46.895668666" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T20:44:56.510177191" + }, + "sarscov2 - fastq, index, fasta, false": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T20:00:05.782384898" + }, + "sarscov2 - fastq, index, fasta, true": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T20:44:05.2657749" + } +} \ No newline at end of file diff --git a/modules/nf-core/bwameme/mem/tests/nextflow.config b/modules/nf-core/bwameme/mem/tests/nextflow.config new file mode 100644 index 00000000..e7dd707e --- /dev/null +++ b/modules/nf-core/bwameme/mem/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + + withName: BWAMEME_INDEX { + ext.args = '-a meme' + } + withName: BWAMEME_MEM { + ext.args = '-7' + } +} diff --git a/modules/nf-core/bwameme/mem/tests/tags.yml b/modules/nf-core/bwameme/mem/tests/tags.yml new file mode 100644 index 00000000..9e3a26cf --- /dev/null +++ b/modules/nf-core/bwameme/mem/tests/tags.yml @@ -0,0 +1,2 @@ +bwameme/mem: + - "modules/nf-core/bwameme/mem/**" From fbddb916ccf99e465ef8107ea1e2257a8f7df540 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 19 May 2024 16:31:39 +0200 Subject: [PATCH 1736/1921] add align --- conf/modules/align_MT.config | 10 +++++++ conf/modules/align_bwa_bwamem2.config | 7 +++++ conf/modules/prepare_references.config | 10 +++++++ main.nf | 1 + nextflow_schema.json | 10 ++++++- subworkflows/local/align.nf | 9 ++++-- subworkflows/local/alignment/align_MT.nf | 9 +++++- .../local/alignment/align_bwa_bwamem2.nf | 8 ++++- subworkflows/local/prepare_references.nf | 30 ++++++++++++++----- workflows/raredisease.nf | 5 ++++ 10 files changed, 86 insertions(+), 13 deletions(-) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index 1bd88f14..3ed86cf5 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -23,6 +23,11 @@ process { ext.prefix = { "${meta.id}_sorted" } } + withName: '.*ALIGN_MT:BWAMEME_MEM_MT' { + ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } + ext.prefix = { "${meta.id}_sorted" } + } + withName: '.*ALIGN_MT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes")) } @@ -74,6 +79,11 @@ process { ext.prefix = { "${meta.id}_sorted_shifted" } } + withName: '.*ALIGN_MT_SHIFT:BWAMEME_MEM_MT' { + ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } + ext.prefix = { "${meta.id}_sorted_shifted" } + } + withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } ext.when = { !(params.analysis_type.equals("wes"))} diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2.config index 30d14cf4..82f812da 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2.config @@ -24,6 +24,13 @@ process { ext.when = { params.aligner.equals("bwamem2") } } + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEME_MEM' { + ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } + ext.prefix = { "${meta.id}_sorted" } + ext.when = { params.aligner.equals("bwameme") } + } + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 103a1ad7..be3602af 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -29,10 +29,20 @@ process { ext.when = {!params.bwamem2 && params.aligner == "bwamem2"} } + withName: '.*PREPARE_REFERENCES:BWAMEME_INDEX_GENOME' { + ext.args = '-a meme' + ext.when = {!params.bwameme && params.aligner == "bwameme"} + } + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwamem2"} } + withName: '.*PREPARE_REFERENCES:BWAMEME_INDEX_MT_SHIFT' { + ext.args = '-a meme' + ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwameme"} + } + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { ext.when = {!params.bwa && params.aligner == "sentieon"} } diff --git a/main.nf b/main.nf index aa92e744..838d75d7 100644 --- a/main.nf +++ b/main.nf @@ -21,6 +21,7 @@ params.fasta = getGenomeAttribute('fasta') params.fai = getGenomeAttribute('fai') params.bwa = getGenomeAttribute('bwa') params.bwamem2 = getGenomeAttribute('bwamem2') +params.bwameme = getGenomeAttribute('bwameme') params.call_interval = getGenomeAttribute('call_interval') params.cadd_resources = getGenomeAttribute('cadd_resources') params.gcnvcaller_model = getGenomeAttribute('gcnvcaller_model') diff --git a/nextflow_schema.json b/nextflow_schema.json index 8e5ed746..3b92976b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -74,6 +74,14 @@ "help_text": "If none provided, will be generated automatically from the FASTA reference.", "fa_icon": "fas fa-folder-open" }, + "bwameme": { + "type": "string", + "exists": true, + "format": "directory-path", + "description": "Directory for pre-built bwameme's learned index.", + "help_text": "If none provided, will be generated automatically from the FASTA reference.", + "fa_icon": "fas fa-folder-open" + }, "cadd_resources": { "type": "string", "exists": true, @@ -579,7 +587,7 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-align-center", - "enum": ["bwa", "bwamem2", "sentieon"] + "enum": ["bwa", "bwamem2", "bwameme", "sentieon"] }, "min_trimmed_length": { "type": "integer", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 51bbf3fb..23df720f 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -17,9 +17,11 @@ workflow ALIGN { ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_genome_bwaindex // channel: [mandatory] [ val(meta), path(index) ] ch_genome_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] + ch_genome_bwamemeindex // channel: [mandatory] [ val(meta), path(index) ] ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mtshift_bwaindex // channel: [mandatory] [ val(meta), path(index) ] ch_mtshift_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] + ch_mtshift_bwamemeindex // channel: [mandatory] [ val(meta), path(index) ] ch_mtshift_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_mtshift_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] @@ -40,11 +42,12 @@ workflow ALIGN { ch_fastp_json = FASTP.out.json } - if (params.aligner.equals("bwamem2") || params.aligner.equals("bwa")) { - ALIGN_BWA_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 or bwa + if (params.aligner.equals("bwamem2") || params.aligner.equals("bwa") || params.aligner.equals("bwameme")) { + ALIGN_BWA_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 or bwa or bwameme ch_reads, ch_genome_bwaindex, ch_genome_bwamem2index, + ch_genome_bwamemeindex, ch_genome_fasta, ch_genome_fai, val_platform @@ -82,6 +85,7 @@ workflow ALIGN { CONVERT_MT_BAM_TO_FASTQ.out.bam, ch_genome_bwaindex, ch_genome_bwamem2index, + ch_genome_bwamemeindex, ch_genome_fasta, ch_genome_dictionary, ch_genome_fai @@ -92,6 +96,7 @@ workflow ALIGN { CONVERT_MT_BAM_TO_FASTQ.out.bam, ch_mtshift_bwaindex, ch_mtshift_bwamem2index, + ch_mtshift_bwamemeindex, ch_mtshift_fasta, ch_mtshift_dictionary, ch_mtshift_fai diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 8f7930c7..9eb9ec43 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -5,6 +5,7 @@ include { BWA_MEM as BWA_MEM_MT } from '../../../modules/nf-core/bwa/mem/main' include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' +include { BWAMEME_MEM as BWAMEME_MEM_MT } from '../../../modules/nf-core/bwameme/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../../modules/nf-core/picard/markduplicates/main' @@ -17,6 +18,7 @@ workflow ALIGN_MT { 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_bwamemeindex // channel: [mandatory for bwameme] [ 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) ] @@ -26,6 +28,7 @@ workflow ALIGN_MT { ch_bwa_bam = Channel.empty() ch_bwamem2_bam = Channel.empty() ch_sentieon_bam = Channel.empty() + ch_bwameme_bam = Channel.empty() if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) @@ -39,9 +42,13 @@ workflow ALIGN_MT { BWA_MEM_MT ( ch_fastq, ch_bwaindex, true ) ch_bwa_bam = BWA_MEM_MT.out.bam ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) + } else if (params.aligner.equals("bwameme")) { + BWAMEME_MEM_MT (ch_fastq, ch_bwamemeindex, ch_fasta, true) + ch_bwameme_bam = BWAMEME_MEM_MT.out.bam + ch_versions = ch_versions.mix(BWAMEME_MEM_MT.out.versions.first()) } Channel.empty() - .mix(ch_bwamem2_bam, ch_sentieon_bam, ch_bwa_bam) + .mix(ch_bwamem2_bam, ch_sentieon_bam, ch_bwa_bam, ch_bwameme_bam) .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) .set {ch_bam_ubam} diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2.nf index ab5b8d9b..1670dc37 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2.nf @@ -4,6 +4,7 @@ include { BWA_MEM } from '../../../modules/nf-core/bwa/mem/main' include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main' +include { BWAMEME_MEM } from '../../../modules/nf-core/bwameme/mem/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_ALIGN } from '../../../modules/nf-core/samtools/index/main' include { SAMTOOLS_INDEX as SAMTOOLS_INDEX_MARKDUP } from '../../../modules/nf-core/samtools/index/main' include { SAMTOOLS_STATS } from '../../../modules/nf-core/samtools/stats/main' @@ -16,6 +17,7 @@ workflow ALIGN_BWA_BWAMEM2 { ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] ch_bwa_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] ch_bwamem2_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] + ch_bwameme_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 @@ -28,10 +30,14 @@ workflow ALIGN_BWA_BWAMEM2 { BWA_MEM ( ch_reads_input, ch_bwa_index, true ) ch_align = BWA_MEM.out.bam ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) - } else { + } else if (params.aligner.equals("bwamem2")) { BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) + } else { + BWAMEME_MEM ( ch_reads_input, ch_bwameme_index, ch_genome_fasta, true ) + ch_align = BWAMEME_MEM.out.bam + ch_versions = ch_versions.mix(BWAMEME_MEM.out.versions.first()) } SAMTOOLS_INDEX_ALIGN ( ch_align ) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 64d33248..2bd4b6dd 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -6,6 +6,8 @@ include { BWA_INDEX as BWA_INDEX_GENOME } from '../../modul include { BWA_INDEX as BWA_INDEX_MT_SHIFT } from '../../modules/nf-core/bwa/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_MT_SHIFT } from '../../modules/nf-core/bwamem2/index/main' +include { BWAMEME_INDEX as BWAMEME_INDEX_GENOME } from '../../modules/nf-core/bwameme/index/main' +include { BWAMEME_INDEX as BWAMEME_INDEX_MT_SHIFT } from '../../modules/nf-core/bwameme/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' @@ -45,24 +47,27 @@ workflow PREPARE_REFERENCES { ch_sentieonbwa = Channel.empty() // Genome indices - BWA_INDEX_GENOME(ch_genome_fasta).index.set{ch_bwa} - BWAMEM2_INDEX_GENOME(ch_genome_fasta) - SENTIEON_BWAINDEX_GENOME(ch_genome_fasta).index.set{ch_sentieonbwa} SAMTOOLS_FAIDX_GENOME(ch_genome_fasta, [[],[]]) GATK_SD(ch_genome_fasta) ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() GET_CHROM_SIZES( ch_fai ) - ch_genome_fasta.map { meta, fasta -> return [meta, fasta, [], [] ] } - .set {ch_rtgformat_in} - RTGTOOLS_FORMAT(ch_rtgformat_in) - // MT indices + // Genome alignment indices + BWA_INDEX_GENOME(ch_genome_fasta).index.set{ch_bwa} + BWAMEM2_INDEX_GENOME(ch_genome_fasta) + BWAMEME_INDEX_GENOME(ch_genome_fasta) + SENTIEON_BWAINDEX_GENOME(ch_genome_fasta).index.set{ch_sentieonbwa} + + // MT genome indices SAMTOOLS_EXTRACT_MT(ch_genome_fasta, ch_fai) ch_mt_fasta_in = Channel.empty().mix(ch_mt_fasta, SAMTOOLS_EXTRACT_MT.out.fa).collect() SAMTOOLS_FAIDX_MT_SHIFT(ch_mt_fasta_in, [[],[]]) GATK_SD_MT_SHIFT(ch_mt_fasta_in) GATK_SHIFTFASTA(ch_mt_fasta_in, SAMTOOLS_FAIDX_MT_SHIFT.out.fai, GATK_SD_MT_SHIFT.out.dict) + + // MT alignment indices BWAMEM2_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) + BWAMEME_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) BWA_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) SENTIEON_BWAINDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) ch_bwa_mtshift = Channel.empty().mix(SENTIEON_BWAINDEX_MT_SHIFT.out.index, BWA_INDEX_MT_SHIFT.out.index).collect() @@ -79,7 +84,6 @@ workflow PREPARE_REFERENCES { // 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,9 +105,15 @@ workflow PREPARE_REFERENCES { 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} + // RTG tools + ch_genome_fasta.map { meta, fasta -> return [meta, fasta, [], [] ] } + .set {ch_rtgformat_in} + RTGTOOLS_FORMAT(ch_rtgformat_in) + // Gather versions ch_versions = ch_versions.mix(BWA_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_GENOME.out.versions) + ch_versions = ch_versions.mix(BWAMEME_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_GENOME.out.versions) ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_GENOME.out.versions) ch_versions = ch_versions.mix(GATK_SD.out.versions) @@ -112,12 +122,14 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(GATK_SD_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(GATK_SHIFTFASTA.out.versions) + ch_versions = ch_versions.mix(BWAMEME_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(BWA_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) ch_versions = ch_versions.mix(TABIX_PT.out.versions) ch_versions = ch_versions.mix(TABIX_PBT.out.versions) + ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) ch_versions = ch_versions.mix(GATK_ILT.out.versions) ch_versions = ch_versions.mix(CAT_CAT_BAIT.out.versions) @@ -129,6 +141,7 @@ workflow PREPARE_REFERENCES { 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_bwameme_index = BWAMEME_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) ] @@ -143,6 +156,7 @@ workflow PREPARE_REFERENCES { mtshift_dict = GATK_SHIFTFASTA.out.dict.collect() // channel: [ path(dict) ] mtshift_bwa_index = ch_bwa_mtshift // channel: [ val(meta), path(index) ] mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] + mtshift_bwameme_index = BWAMEME_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) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8d3e0aa2..75e68b81 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -212,6 +212,8 @@ workflow RAREDISEASE { : 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_bwamemeindex = params.bwameme ? Channel.fromPath(params.bwameme).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.genome_bwameme_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() @@ -242,6 +244,7 @@ workflow RAREDISEASE { 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_bwamemeindex = ch_references.mtshift_bwameme_index ch_mtshift_dictionary = ch_references.mtshift_dict ch_mtshift_fai = ch_references.mtshift_fai ch_mtshift_fasta = ch_references.mtshift_fasta @@ -355,9 +358,11 @@ workflow RAREDISEASE { ch_genome_fai, ch_genome_bwaindex, ch_genome_bwamem2index, + ch_genome_bwamemeindex, ch_genome_dictionary, ch_mtshift_bwaindex, ch_mtshift_bwamem2index, + ch_mtshift_bwamemeindex, ch_mtshift_fasta, ch_mtshift_dictionary, ch_mtshift_fai, From fdd11e008fa98ed213c3c2a3708c86e221f7c411 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 19 May 2024 16:37:22 +0200 Subject: [PATCH 1737/1921] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e74f569..aed485c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- A new aligner, bwameme [#553](https://github.com/nf-core/raredisease/pull/553) + ### `Changed` - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) @@ -21,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Old parameter | New parameter | | ------------- | ------------- | +| | bwameme | :::note Parameter has been updated if both old and new parameter information is present. From 4f2eb0e63dbda85ad932696773bb1f245b572e5b Mon Sep 17 00:00:00 2001 From: Sima Rahimi <54620700+sima-r@users.noreply.github.com> Date: Mon, 20 May 2024 10:40:17 +0200 Subject: [PATCH 1738/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e74f569..072c3d36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` ### `Changed` - +- Changed valid values for sex according to the PED file format [#550](https://github.com/nf-core/raredisease/pull/550) - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) - Refactored mobile element annotation subworkflow files [#538](https://github.com/nf-core/raredisease/pull/538) From 40c1e5e02601976b5fdc9aa66edc82abc1f2facf Mon Sep 17 00:00:00 2001 From: Sima Rahimi <54620700+sima-r@users.noreply.github.com> Date: Mon, 20 May 2024 11:06:39 +0200 Subject: [PATCH 1739/1921] ran prettier --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 072c3d36..532dcfd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` ### `Changed` + - Changed valid values for sex according to the PED file format [#550](https://github.com/nf-core/raredisease/pull/550) - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) - Refactored mobile element annotation subworkflow files [#538](https://github.com/nf-core/raredisease/pull/538) From 1b98b1869a9b0603999aa17bedcbaa11f9f864de Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 May 2024 13:42:14 +0200 Subject: [PATCH 1740/1921] review suggestions --- conf/modules/align_MT.config | 8 ++++++++ ...2.config => align_bwa_bwamem2_bwameme.config} | 16 ++++++++-------- nextflow.config | 2 +- subworkflows/local/align.nf | 14 +++++++------- ...a_bwamem2.nf => align_bwa_bwamem2_bwameme.nf} | 2 +- 5 files changed, 25 insertions(+), 17 deletions(-) rename conf/modules/{align_bwa_bwamem2.config => align_bwa_bwamem2_bwameme.config} (81%) rename subworkflows/local/alignment/{align_bwa_bwamem2.nf => align_bwa_bwamem2_bwameme.nf} (99%) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index bcdd1433..a616272b 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -19,21 +19,25 @@ process { withName: '.*ALIGN_MT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:BWAMEME_MEM_MT' { ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN_MT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } @@ -72,21 +76,25 @@ process { withName: '.*ALIGN_MT_SHIFT:BWAMEM2_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ALIGN_MT_SHIFT:BWAMEME_MEM_MT' { ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted_shifted" } } withName: '.*ALIGN_MT_SHIFT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } + ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted_shifted" } } diff --git a/conf/modules/align_bwa_bwamem2.config b/conf/modules/align_bwa_bwamem2_bwameme.config similarity index 81% rename from conf/modules/align_bwa_bwamem2.config rename to conf/modules/align_bwa_bwamem2_bwameme.config index 285e3c64..c217f8da 100644 --- a/conf/modules/align_bwa_bwamem2.config +++ b/conf/modules/align_bwa_bwamem2_bwameme.config @@ -17,40 +17,40 @@ process { - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM2_MEM' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:BWAMEM2_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEM_FALLBACK' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:BWAMEM_FALLBACK' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWAMEME_MEM' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:BWAMEME_MEM' { ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } ext.when = { params.aligner.equals("bwameme") } } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:BWA_MEM' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:BWA_MEM' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_STATS' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:SAMTOOLS_STATS' { ext.args = '-s --remove-overlaps' } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_MERGE' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:SAMTOOLS_MERGE' { ext.prefix = { "${meta.id}_sorted_merged" } } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:MARKDUPLICATES' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:MARKDUPLICATES' { ext.args = "--TMP_DIR ." ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ @@ -61,7 +61,7 @@ process { ] } - withName: '.*ALIGN:ALIGN_BWA_BWAMEM2:SAMTOOLS_INDEX_MARKDUP' { + withName: '.*ALIGN:ALIGN_BWA_BWAMEM2_BWAMEME:SAMTOOLS_INDEX_MARKDUP' { publishDir = [ enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, diff --git a/nextflow.config b/nextflow.config index 63b2b529..e5f507ba 100644 --- a/nextflow.config +++ b/nextflow.config @@ -326,7 +326,7 @@ includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' includeConfig 'conf/modules/align_MT.config' -includeConfig 'conf/modules/align_bwa_bwamem2.config' +includeConfig 'conf/modules/align_bwa_bwamem2_bwameme.config' includeConfig 'conf/modules/align_sentieon.config' includeConfig 'conf/modules/annotate_cadd.config' includeConfig 'conf/modules/call_snv_MT.config' diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 52256fb1..802bda1b 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -3,7 +3,7 @@ // include { FASTP } from '../../modules/nf-core/fastp/main' -include { ALIGN_BWA_BWAMEM2 } from './alignment/align_bwa_bwamem2' +include { ALIGN_BWA_BWAMEM2_BWAMEME } from './alignment/align_bwa_bwamem2' include { ALIGN_SENTIEON } from './alignment/align_sentieon' include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' include { ALIGN_MT } from './alignment/align_MT' @@ -48,8 +48,8 @@ workflow ALIGN { ch_fastp_json = FASTP.out.json } - if (params.aligner.equals("bwamem2") || params.aligner.equals("bwa") || params.aligner.equals("bwameme")) { - ALIGN_BWA_BWAMEM2 ( // Triggered when params.aligner is set as bwamem2 or bwa or bwameme + if (params.aligner.matches("bwamem2|bwa|bwameme")) { + ALIGN_BWA_BWAMEM2_BWAMEME ( // Triggered when params.aligner is set as bwamem2 or bwa or bwameme ch_reads, ch_genome_bwaindex, ch_genome_bwamem2index, @@ -58,9 +58,9 @@ workflow ALIGN { ch_genome_fai, val_platform ) - ch_bwamem2_bam = ALIGN_BWA_BWAMEM2.out.marked_bam - ch_bwamem2_bai = ALIGN_BWA_BWAMEM2.out.marked_bai - ch_versions = ch_versions.mix(ALIGN_BWA_BWAMEM2.out.versions) + ch_bwamem2_bam = ALIGN_BWA_BWAMEM2_BWAMEME.out.marked_bam + ch_bwamem2_bai = ALIGN_BWA_BWAMEM2_BWAMEME.out.marked_bai + ch_versions = ch_versions.mix(ALIGN_BWA_BWAMEM2_BWAMEME.out.versions) } else if (params.aligner.equals("sentieon")) { ALIGN_SENTIEON ( // Triggered when params.aligner is set as sentieon ch_reads, @@ -71,7 +71,7 @@ workflow ALIGN { ) ch_sentieon_bam = ALIGN_SENTIEON.out.marked_bam ch_sentieon_bai = ALIGN_SENTIEON.out.marked_bai - ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) + ch_versions = ch_versions.mix(ALIGN_SENTIEON.out.versions) } ch_genome_marked_bam = Channel.empty().mix(ch_bwamem2_bam, ch_sentieon_bam) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2.nf b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf similarity index 99% rename from subworkflows/local/alignment/align_bwa_bwamem2.nf rename to subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf index 6856ee69..87e9a958 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf @@ -13,7 +13,7 @@ include { SAMTOOLS_MERGE } from '../../../modules/nf-c include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' -workflow ALIGN_BWA_BWAMEM2 { +workflow ALIGN_BWA_BWAMEM2_BWAMEME { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] ch_bwa_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] From d94278a058be647381597488eb1ffc735434447f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 20 May 2024 13:42:55 +0200 Subject: [PATCH 1741/1921] fix error --- subworkflows/local/align.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 802bda1b..8822d1cb 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -3,7 +3,7 @@ // include { FASTP } from '../../modules/nf-core/fastp/main' -include { ALIGN_BWA_BWAMEM2_BWAMEME } from './alignment/align_bwa_bwamem2' +include { ALIGN_BWA_BWAMEM2_BWAMEME } from './alignment/align_bwa_bwamem2_bwameme' include { ALIGN_SENTIEON } from './alignment/align_sentieon' include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' include { ALIGN_MT } from './alignment/align_MT' From bd01ffdd606c78cc3490da9c9310d41b3b4d84b4 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 21 May 2024 14:16:28 +0200 Subject: [PATCH 1742/1921] metromap --- docs/images/raredisease_metromap_dark.pdf | Bin 199656 -> 200004 bytes docs/images/raredisease_metromap_dark.png | Bin 429662 -> 401258 bytes docs/images/raredisease_metromap_dark.svg | 2514 +++++++++--------- docs/images/raredisease_metromap_light.pdf | Bin 130783 -> 128883 bytes docs/images/raredisease_metromap_light.png | Bin 420125 -> 394146 bytes docs/images/raredisease_metromap_light.svg | 2656 ++++++++++---------- 6 files changed, 2559 insertions(+), 2611 deletions(-) diff --git a/docs/images/raredisease_metromap_dark.pdf b/docs/images/raredisease_metromap_dark.pdf index bb8df737113eb5c4f4e63c794c807cfa01f61704..030e64e00175bfae4d963f0e209e6490e4f42612 100644 GIT binary patch delta 28741 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

    qx;Ove(F{Zt>2-6y`8 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 diff --git a/docs/images/raredisease_metromap_dark.png b/docs/images/raredisease_metromap_dark.png index ece6bb7dcb88ee41effe53797d17ccdad36032b7..1d5faec28340615bb5c64b7a06f6642a3bc70836 100644 GIT binary patch literal 401258 zcmeFZhgVbE+W*VmDp(LuP(Yd#K|q@H5>T*FqkteaNR{3R5FjcD(xvyrLfLfbJxG_n zsiB7+X$ds}0?A#R^ZNdNE0>D9}(E>lraT~&Yf zNSBK0N(dDd&Cx|_;1#MMJ`dpUOK#7MJgKPY+RlFd=yLtb8hDY_>+vfuJy%;V=xYxf zDku~xYVYFcY4zI8M%2~AE(51@i;C(tmHMNH`o5W)vwoR#-hud2BHq}RpJbh;uBv+T z;YE`Nk@FEeiVh|h9z857-U_Ul=qJ2^;lcc5i!7{q@k;lGpc@3`<^OZcxP{MQox zJp=!>g#X``u=z4aSG~%Z126G=>fSc}6-@-5uq&)T9ya4U;2Yx`)6iwIF}4{NinmRp zP3*?q7wm$)`u+I_0GT`(*5gYMh8-?^cM`DC6`?-2Q^J$>im#Y&!}zP)?+>!LzIUT~ zi~X(+0{9y*MArQT_1Lm+s!z(1r0(yWW|c)iHh?e?RSe9%CEwRn5@a{O`}Y zJ!1$tN2NsbGQRIGx+e=Z@x@!#c1MqvPamz#z7ZISy#H9@RaA;i+N@xCPF7`?ozw3F z=kqSM{y~KZ&V7l9YLTr@cn4x9f}Zo6=vrIG+s1R)47=Tv`~6vV-7~rxlmI;*2KoMi zR^#qaQ_8Yd=2e0tf#qxak)7OfIiP`s{r3?Hh}-N`7EBzl&9b8tEZOGg?UNBC z*^9g!2v>Nb2eMa{c=fI(Ve=+%@&6tVx~8G|=c#^tH}&t%2#adT=(klSO~P5fg(LL& z*8CR-&)IyX`OTAW2LvwCP_f*Rv>W(&ghi?>*HcagDLv=tmF1`zL1rNJ9F~*4AF25N zB}{hOD&X2ae;XCA6_Ow$EVnrTL4zo|?pKG&W5&iZtKskbKgRkggm zd>Aw0ifH|>uU=3neI2d`43VcEQPL~+-5t~hYyQ5>?V{TkX;?IJo*`tVxAa!Cl?r6n zN^suxX?&6}1Obyok4dsT8V^?H7f1Q~`|ox}ir(^=4W?I4bPZU_uo54V1W8{cD&P41 zb-q4;HEj02P8bfFT}+J3jXAveIN}TQ9~}57$$_7*!#HG?>jwi?CGBgb&kjC4q-nn2 zeW>;OaH=SohjKs669tHQCzIHmBEwD?(>#M=zP`uW9am0|*<9_6-K5e08(RLUiU?xf z@56pn#N1}Lpzlc_jRdvDx!1~mSBX&}*JgSRtE-iec3&FW^o|#w{eL&qg>2%OR>0&2 z_7wHsN536fo-lcf)D=ySCk%qXv~-&_nqo~-Nj)fdk%QE&qZzES$`i(|hjC2c@D@9LULs~L;oiZQ0a*wA%!ZiZ@gxWxk->3Iu zp?Yin&W zp4c=;&Vyu`G^7jSFo`|R8@hFHtKr?_{|yUE>I?%D!V#4*2t=pf6+Hr2E56cPNw&%{ zC9ghUPqJ5%h1aGjK2rhK*hQuA3=9T~Hg3P?M$f`2r$?o(fsXq!C5C#Unel|7CP8K$ z?MYc~z|{8QIo1YC4Dacn%eB}1-dL@J8gwyriX%AV2yP0@@|NceU`Xz zv9zLI)9c4VL?;%d7ys+4ES~S(I`t=2B%=42^SnnZ`P2_$s??#<#djo!4_B5(P>#+H zXi%o*63!iwh|T7O=@IAxd&GXkW_gdNr71#jpEgQP_Ve^&o`{3;5#ySxxu=q+-IXP; zA#=EVTeO5^#YSpczLfErd6gg|r%{G_uVJoqnPLMej}9Mt$~auV{8u8>_1Q`IYI_Byu$p%Rk1G^t2|2jPKR;^VQVl+xq4|BIoL!EPgzj}^NaLhqE#oVL& z)5dry=2KxQYV|EaC^B2gTW88nOLkS%$(MRH6a zFbd=(tFNH6*MfeWniy3k1Y5(b62s2_K5N1ghJlA8%9h5r zup%0;x#jF3jjh$EdX(dD-6c(#$Fpzp2>o4pO`gu_cK5XQ9-rEq2Ix=a4d`s8ujDKF zQ%P{p+USB-DsitN2BsBC9Z&=Ok>`d_?qNH9)^)l;U0|Zsfs{cxif2fJ6;u)crm&i>QmOtlnE`AbUj3-C`>{S_Jtt z_#hurp_FvBfv|CG>BxH^rt)d3#?W?NI&#E+uCh{0MIs4btaBQAL$I2beYx~4Hrt3X z6yBfwjtOH{ftPMb?!Adp3r5l9Cj48+`lAmv9F7w4x{tY z8)_vDi#_02-&n$MnmuwUAM>A633}k0r-4gGE58C*mAbTV zJ!HUD`upmvudQ`|U^bOot|#Fd#4tw#&?l8oCts?QW*)0ceC_Qro1D%f3>)PKxPHWZ z{XGj*?BWmQXtJB!9B!2wB@!0&;%ybHD5hys+OgRab1Y+l5$_DvWkKmv#PMwRf!0d! zX73M^81;j9+WBU{je9x$)LR7+Trb?#oGX89MHPms7*rPaTzhGf9H z)aAVoUG?P?E5SJC|D}W@h zcrafXZ2@;s-HHej4jYC*!1Xt8lhVHLP=W4xePLjyiX+B8RIMWy@=U=F|o3|vF?i5 zn*1K5HeO_waj=25o33_Vx{qxSXOx7KPwtsF-UYI?SYU;%&3a{in)qu~hcV;yV%uBi z&H>&E8+Uz$Oo}b-D_`lYu10c>rF{xr7=zk8gaXc^1KZM z2HgQj7Df2qiB9R)+)LVvM>s@ODe6(yclGhJa=CxFt}KYGk$=wG zXN{(G%3m1?=$@%e9?;n8ypca!@84%-83Z5_kg(Du-M2A;jJgBqpDY~=dvFfA!ts{$ zg5GIN{XRWr{Y)EB0pXgQS19QYwT!0%1hI(h`jiluD;Fk3BW{$y%jcTZeGz;KC*_G9 z=(o>n;>kn!JLt%f5BCoaa`N)*km$y7bLEFJx))p4? zpZn^3cNR1KI$8ZDd(D%rVvOSR_40BjMyx!zd~h>qHoYlW6UssHjMs?v5!tyWXV!%) z(JxFlU%%YCJHB!Gj@Uq?`TkdS=w?}(a-hFM)fdQWZ+Ty5G@B=B3%Xp04wObi;DBPg z00M#JPxlR1`T%b07C>gAP$+#N5+ygXKSLHYq%7eFIcV(=g2RF zFov2EbHoDe+dWgRN@ zc7OLg1z;;+V;eX75MWx5)ik@+#YjvlGiv@qzCj^Pz+m~k3g_wS0MfXL=d3q+WdqVI zZ&JfKLHurBitUpe{AnWAa8Cf?yZHUjl`n}lX-_%*_>f0^c6+6es8LabzLxT zxu{~WM;NRqQeoSF%V!iNAZ%FD2b&|&9IeVW%Wpc8j*oZ8Ys{0ch}GU6$pfp*8^v4q zCX3W9_6Y9{B2TbRtikw==j7v3G;w<)L&Iz1)&09}+ zu6INz&@c6W1CZDMjJI~u59QQ^?Dn(W$KRjXa+&vS8>q-yN$%ZVeOHr=sjKvP69H~I zI~*R>s7v;l4M2Lzwfk-?Mgva87398Z7CtCd&Rhp=WU(ku2|Wg;SdUYd*XX{LI8|ws z!6_)@ph34T=y62D_?BVRss74Iw|%qKT1%QER{jc+c4?bdWUuBn!hj$^Urxq$)=c z3+9|W2uodD5Xlcb#O-kYF6*ceV-8Cos<4uBbM=kNBm2exmtj54vTtb~#?WC=y-g?n zDxQAi8hEcZEgy68#sL!$&@LcLZvqyHHtg5jxD%GMS&;oE1vsbBo+O?m8ri%iUk7SY zd4;4fnY^F_wfv$P37HB|M*pUcpC$Y(W!oM^nVlzBvic7PjqK?uHOnT!O_HUItyIn# z)w;bV|Dvae17V}*uS^Y4;@sTanJ>4|wZeevtOR;m)3~-6`E+G@_jCy01C_&I;%ejG zKz{?~6lPTCF!l$gLN|Z8(y)=oHE_d5ekD;)w~#|Y4C9II>n33+%xACAtt*Fd_`D)7 z;3>**A`y;^4cfP|ujwMoK4{#DX1>ZAEYO{VM0vEs5@*M(3GLS)6n(~NoBCd!3?X%S zIxt#2ehs8v^~`uK^}=s!r0M;lm+1cMFD82q70GB%=G@G=1WP-~D#zqJLh(y`5F8*k zQ4Ju#+E>%??f|HPy{EOYJehCSpftwiBIhgMVHhC=`5U=9c|})e>()%(%iJP51f6*u zRIR=wP_84L!+sE%+39#Q@3hf=@^nKW$7f@G6jjaBQ9T4IBi4Q1M5gY}To8;!C@Wt( z1Pe!;m6)I$;Uq9d;4+t$U6!{2c@vCD5u{n;`!#gmsx#_jmWCoD7O-%o%Z9?-^y~3a zE3-1P7qb&H1?icODKc}d0g#MCm)I{=8k5}Kp16*OA9klRsZ>)GS9tXH+;YCqzG!&qs_3srT+l{hn9$d+*&4xgfa58TgX?M&b?9 zriu%78+PKDOlacy#$Ynp{*+ZI$bEr+!vU~-S+eElq)n$>P?O@h6jAk+7VWiqTR(vM zo_bf0FWR3$>Q3911P^crZ4P2an~&Xuh|bRtzs?EAx@Z!C(76GWVwn}U`P@ziruqAO~H9f*)UPgQo~8c$Q;cc7R+;`dTGN$ga2?q~p`%-4+3 zOlHrDg>NpU$$L5>*?@o`MqU)NojpD{I_#p@_YpwY&598W2GCK!W)iz2EeU)T{85L) zAI6O56kQFH2|E5$T_gdY6+`}k9{Umg6*FN2yO%Iucb_Mj2Ka_h(>Ea=FpPMiu-32Auw}^->4VI^=Ce z?>z98%ehye2K1?IRcnB?^i^U)3^FT^QwY94dg*Ao!*j2Y9)!3`il{~YoyCI%rzN8M zQ{%r05VOq#kGofFj8^BuWL7aa^R&Vm=fM)ITzUjGIf{+LKlb%+Q}&g)7NUY46ShYv z$o5OF(j(^UUK{=k`)4;2eCh@@Bl{ah4oZo6r&}-WGn?;jJ=RMo*DCua?~CC={yeQZ zBQ*tkI{YJCd13l^FZ~(j>H56XtL$w_E9gkbOTm2S=^&rSHW=pvkE-xRI!iMj&NPJv z_`-yKP^E+!`krQ)E%v+Z5`!+2;GjwBB3V1w_2&F%-|k3Ariw2fM%OKOlxOBMX(PW? zX&6Oh0ZT#$G8^%M@c3Ra_|vJa0rJ*)pf1N#B2@-Yj`q5|V@gU&PIkCXUzk%uuapOp zevzLTt~3LU2Bg)*-uvXgWK|-up`e>F)IywatGB248 z9tM1y9B7769w|p1#GTm@e2* zXy1tQvu}E%vkoys^u)^Wt4TK`@f0uFH(5n~(STCBA~@D?1$YXB+D z)x)?Hf!zITO~uH(Zlz4W)MO`0);-B4jdD27J9&)C*pr2OJaGWa*O5k96ZSeq6n7^@ zOps-#MPK77K@&xd0iB7UDy$L8(v!UJib{h8Rg%+?rp>}tgXFs_LrwOlGuH%R4NniX z|MyOWF8y6fV)3@2gwSR-%KZHmKDufbLAmYB-DV#B_( z&<>am%iR$Kh`RyfuT?;F(b}3?$uFAT3!mBYOE{}0rv^8)b(L9bUq-ynGFMJqFYnI} zIvhCDZaR&w0QL53`z$%(12%)~-6rYaytt7UQ<`=;JQr2&o<-q-O!)44g<1n7ROacd)aSOE7_KEs@*t3~LQ4=rSzCO!dv(1(x| zh-4PIwX?S8O6sUti4ZRB8!sM=%6Qs#MrHto1G1?jgk)?`V(dN726*lfIbFXL66eI~ zySr4J{i;m53Ot)ZC|u3+K0eWReHGUu5-YGW2dQvraC})(Pk354@2!a->`?6H`U0Fc z2t|TOr807eKL}p^#>E!=7iHf$o{u)eG&D`r%JbZCvFr~!w=9*j`vAl z;^R0=LrI$#+1{H`l?Y766uektYXcAzD(N*_2HLpG^*nQqxH? zph>NiF+~$lM6MWvv~{RKo(#!rH5`s} zmuWR{ZELH41ER8PWKwK^BF*Agk2hR@Wf`nFS}+lt%duoDR9vNQ#SpGAK-X_wF4nEp7I!OP+3iwn1T@L1C_O zaqis+{lZ{)$(Vy$5C!8uX#?c?&X2bBdjk!-L$N_p6!%^c@Rh~Lug_dvU4zKjAkpSs z;pR+M$xtXIUoUsL^@`|E0p+9aYyHxRvdwGS`Dh~hGs-KYJ_oMRd+YZ$@FzRI{nKt2q?6H}VpGzaFVyx@t(u!^RrYBlZIc?csidUnke{ zw~oTymU7LGPKl>TZmVtN#JJW$4@@u9-S<|%PnR;ypa0{z4+I!ORG3GF&fp*&U;z0# zgyr4?2U(@eb!SKVDfNkt&e^r&%|LrGM0%%Ru7y%VMOwK*w%-)se^P+|8J@Yw=_b*M5py%AlC(+$ zGH3|(xv%O#9mqgvEYgv(xtJ*Si)|c{RH~A^nA{bHaE5xmB7*b*f`gonQDm#8enNzd ziw#_wPh(62560>a#!dFNBW~DB-5Pu)Yd@UL?$>@z{$NyZug4H|AJBPC&pH!TXuuRe ziz6*uL5B;C*e3WVd;nGvc5(tVNp^pnqhA(=91+=p_l}w{FzA4i)i1qo#AR(}NM>ok z3PumNq>nx4j&CBaK!b?TilEcuGnJ%&6~P66`~ol`8&xovUn?^esD}WV%VuY>W3t|R zT5=qmDJKDRs@R@NjhxxW$pM5C3mVW(wvlm}Nd*V&Ce)Eb*>)G`DONE`iyvRlQVsym zIN8fnPV#{k#i`*^k;k zugrH3B=G?iB&#)$+oR-q9~tPrGp4ADu-7!f>^F12gW}tfOCD%E@Fh z`AnobnnaQ&?|~LVP8H-&GAjl-hcbIp#0E{^3(iIW@&^^em*bx9nlv9wAK{xRB)?u0 zQ4T_oK$e#-ok~EEL6NWZ1R59XJYBQ$C5-cyhnZ0_U}eCc$#QQ;gHrRXGtswZW;YsC z0zW8(fWD5jl-3cZ0_M-bs~}|rt5{Gn<}e!5M(YjwIi2mpI&k*SYzuYH!Zj(V`a1M2^$jVZ ze)s>VSoB%(f5`dXDmBZTbyX2vnNiQ5tKgocY*deyz@`Iq>{$wmsuVJMu z`{%sI8>4+Dbjj;yK_pn_1loraUsrJ^rS>MxNg~>kt6pd$o{$ z@W*tFwo$uaUfa;Ehg7vTw>wlQ;vLm?h}%t&T%YL8dbNiyvVlhFGIErF&!+&^`pKb6 zVN(oH{;*42lswbp zHX3IwnN1_M=qGarI4B-UOSURD5QguNiCDt4D;EKgq;aRzf2=SxaMl;re}uhCO4rVi zSpie_2SX27UR668Det8X(m5g>s?rU!$OW%;WcNX0etQ{VrZpZbJu_}?(ckKcEp8jm zv33^pu1?0{b#_Pz-}nGr0hjIP1??BV0m$ty57om8EhD}yM$#}sQE+RLk>=d0Pnwf! zHVcb+qWpSARS(m2hM=)ck8ym7hHhy#$l0>IL7FAs=jDjPYg?gM7j2+=b%t z=e_|Nbas{J_WAv6Z=g%L z2;PvxMdrQgn$y?hK*$FtlPWN~n1xLFz++${@!;Yo2GwV(j$^KVIIa&+wii>EHwQP^v)T)=Myw|v2(YsUawFvql95?GRjPKy3{XxwW%;vd$;Ph_S5>Zv)>`Z@ z;@FPX23@!u*{OmkBuoVquY6O~^b;Co)0?~~r!zM)a>WKH2(w4l8VQeHw3osIv8e-& zj*d$|T7vtsB(X)rd#1IYycGKX{=0of%WEUdwIgcRkUKOi?5KkSs`b-P?={-f%#XR1 z%WqfwT(EyB$!8$nwCH6FLHF~Sn$vX7H~t+tG7k1Vl3HB5ld6|yD$yvT z{XOXBLIL$jgNZv5|4#j`GfH>nxmGRe!yA{!IL5dO=W3}(Qd%%x7d`K*eMf!pwH4&2 z4prUeXcf-ACR*6i+#NR((Uw0Cs)l=qhGh)*&p3_j)}jw?+V&qzh7(R7O$++)1|#aCVF#S z!e8x~w{u8TM=NF*#l*z& zP$)!9Ow157@?5frSvnCxAovitPkwGiCxU#*HFbA!zAqqNQ!gcO=Z(m0R9kS6cu(M?zy4_K3S?6!n zT=&#NSVjI(VnaiT@8o%0Anii#aA|B>a+G|cSUjP|jdIwdEZ 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 dxq;-Es& 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 literal 429662 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

    -IFh^ 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 h&cL4r|F1`4m@ssentieon-bwasentieon-dedupmarkduplicatesbwamem2bwamantaalignment to mitochondriaalignment to mitochondriabwamem2/sentieon/bwabwamem2/sentieon/bwamarkduplicatesmarkduplicatesmutect2mutect2alignment to shifted mitochondriaalignment to shifted mitochondriasentieon-dnascopesentieon-dnascopesentieon-dnamodelapplysentieon-dnamodelapplydeepvariantglnexusdeepvariantglnexusbcftools - rohbcftools - rohstrangerstrangerupdupdvcfannovcfannocaddcaddvepvepgenmodgenmodcaddcaddvepvephmtnotehmtnotegenmodgenmodmanta + id="text16-5-0-9-5-5-5-04" + transform="matrix(1.3718931,-0.01669353,0.01669353,1.3718931,438.73449,-78.364966)">manta + + x="-95.560486" + y="292.85658" + id="tspan13"> + tiddit + x="-95.560486" + y="299.03019" + id="tspan14">tiddit + + x="-95.560486" + y="305.20381" + id="tspan15"> + cnvnatorcnvnatorvepvepsvdb-querysvdb-querygermlinecnvcallergermlinecnvcallergenmodgenmodexpansionhunterexpansionhuntermultiqcmultiqcpicardtools+mosdepthpicardtools+mosdepthvcfannovcfannobambam vcf vcf vcf vcffastqfastqreferenceseklipsedefault path alternative pathskippable pathsretroseq vcfvepsvdb-querymarkduplicatessentieon-bwasentieon-dedupbwa/bwamem2/bwamemefastqbamfastqbam vcf vcf vcf vcfeklipsedefault path alternative pathskippable pathsmantaretroseq vcfreferencesvepsvdb-query + inkscape:connector-curvature="0" + d="m 56.147034,260.93382 h 12.22215 v 5.39866 c 0,0.29149 0.236487,0.5276 0.52759,0.5276 h 4.660723 v 2.64321 H 56.147034 Z m 17.410508,24.51077 H 56.147034 v -5.08297 h 17.410463 v 5.08297 z" + id="path6276-4-8-2-4" /> diff --git a/docs/images/raredisease_metromap_light.pdf b/docs/images/raredisease_metromap_light.pdf index 2ae11fff3ad30db4469df3c1a7825482db386a93..ac9e3918267d62da42151079abd413d1dd4355ed 100644 GIT binary patch delta 19858 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 delta 21386 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

    (rB{2~`74RXc>#)k*U5@&*uR!N4xr`;?ShFh6W+ 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%0Au#FJP@N=%D5ZCLxFWxImI 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 `Ut#_6J{&c~eIJF0l1DG3Ac#m+8|@hxNl`A! z0eI!(`q%pPuYslF=UiUS7He1~Py=VCz_cHUx)8J*<+z(2Am>vl|Y+c6btR01&h8ty^h~ z1K2iz|JPQgHZ7a5X}FBdsQT4bRP6?7u>8ZsE+A`Tni#X)o*R9NfytqC^=6iEfg zG*)hhmw7MW*-6rW)c!%T2gy_xABgNv(zk$3Pj(&-i`e*hT|5smUA|}Ga78nD6^AID zjs;#V3a`_&K;%Q%+zr z%B@JssUbNm&<}%a42vADThB-`0eCBnyZVl-n3~Txn5T;w5slLGo}9RVQ|+im~aJmurADEaT9} z_;p>F{2Bbc#MlIP2vI4Mex~otZlXiAf>044MFpzWM^*aDudXNz8Rerh!EBLKmiW(B zIGB-@Ln?0^WJJUI_qQ8Gqy7i#Mtt-@se6k5xeZaq02Z;2dT`Pzin0R4{)3Pj9C_~m zM}k>a1~mh=I!^=*PD|ytQTtDE2)=s~7+w|nX~f|LU6jHqDZm=%3j&5$x|Ux0YDzy5 zW_s_D!hEdh*mb#?sfMgXWs9?toO_GY`(RC)Su|-(L)qPwQNlP07G}!#As;1o2{$V)ISb6$T$NKyU>j9{=4*HUHh*I z2xpY;w;j729oAvM?c>P3Y3|IEhGXgHG-n_u;yG)uek^LAkEk?4#G7ip*}9 zp7Cd4nmskcem64B%;0>C4r`5GHtfmpE=WEix`J3VQ%IBF0i_q%hu<>|HiHT*>ufvG zQG;Rv#-t!L`s1yV2{kd)zzz-*GGijsWUOb|kkY<2{TS;bPq`dd4&Wx4YuBFR5IP1F z1Kk(2{`aC6Z{sk88fO#g^u0Lqag}j-=AuJTE_by_8bFN!yyJp|1O;ISVZy5P>r-uQ zKeC5KOcp;0bswc@Q1`*7C*?q!cqfUzT?=F5W z=`nBssd}UUP{b8L{$3!O$Svt`s}vvn#`lwi*noul4oOxS4#! zv8a1cB9Of7xM#Nzw1HV8p*>)_J^g{^)VYX}`|_HJ>S?_9EHLu}gFko6R zw2zc171VdWr2&rUw_V*^B9Y;Rv<{s%yOH4>8N1x#IJ21I5 zLJcb3hO}jhe3kjelYbBoU1fI@?81=YABuRK73c*ww@;{`Cstv;?HY3L-Wqbp;y4N# z!`oU-l$ICix#is6bf2GfINMgZlym8824*j z4M>CNEFE2cfpOO^0xV*VT7f?*;`=zafMo`vz$IM7ouykSF9108!qvie;|m)U(Sl4d zC^zxpWjx+@^5c1tZX9PvCSXqgax(FOUa-8SWr4cxBJHM2S^^UGzdz@ zk(HfIvb+el4o0b}=~^{tqv^(`Ur%CcRgIBiNU0wdI2$~hflOH9xGS4O$w-3dWnLpk z?;ie|^AWypCFW6JzK545l)_t4aGcd%b&Wa_CSQ(mDhc)kT-p!rnUBd^Yy@<)tSAHU zOQb5RyunZjdq)vGC_F~YZIqL{57Wdy+{N#O%ZZCJjz>B19ZoBfg9kRj(-RDL(HA`j zNf~{_Lw|pNS;vma5inJhOQT@(`V*z60eUeE;eLGU|4~_@#=UJs+_N2+b7MRfUHGI zMFbmI<<7FUfxdq1FQ!^KP(F#k6o0fbSMb~w#nLe4LkaP8%Q-Y{DbC_mAAaxJwF_bD z#Feay7eJj``|wNY-A=>TfXr^mwz=AQTOijfu5YUjtZND7VuZk7*goPX;vU(isXh(NoA_aH3O`}8} zg`+^_=LHj~DPCUQ>u9t{c}VvD%a^6}0Vn`4;X3EB+^IzFaGcMdF;Bw@5)=`kmFR+6 z%K%j#WXcnV>n?u@hKB;UrSL(01WYL96?Y;j5jvfJv!JP|{B6x3Y0vP{NVzNlyRz&g z_yInF|K1tAl9rbktt=_O8mGU}zo7tL7krxwrnkgcP=S}1myZPRU37%7frS`LmTOCd8hk%U zK?Z+Jh1Mf9ybu=2s^*$?7M}!Jx(DyCx3`zmGqKULXeMalad>!YHc?$uz%y71-~C1# zpk*FH!r*q|bNx4HWNQe9CHr%yRmrR29|gh~1ogwiLH3@-f(H6Fm1M(pxIkztQ(r;@ z5k>X3AB#(fBF-|dmf_Kfqj#Zt$prBX`vC{Pg7R@YTU%8?U~me%h~AbQ^W=f!2V#h& zJvG0y*uPj!>=wA(yXh;dDCQ5iOmri>*{E38P9(Uz%6GgHQ_OexFbXS4O~F zZi3rmlUTN;;D1O4|&sUw=m|#c+o}+)RT?t`}7!ch@92sWSA=0(^7> zdV1$hH-8(=dz^b`(466o>4FGD@LxiV83Rp;nCyU*tdHLUc;?P;Hz_5r;?_;N9JLlu zP1(ti09l+H&{D`+UXrHu(B1#9Nf^gD2+E3!^MbzrvSSc(_rc77fe~de5IlMsaUmj}nZ5<@r zXZkV*u|g|H7p{R8;* zZu?y%oxIWSM2A5^yKA9DWdok)y>^Lo(P`Ruz{P@d8E&WHn(}c4(Jpy?sWv7;xULXu zu6pggh&h|a4@++4#Fz7S$Q@*-?Z8un#)LRpf$55p5>{@M5@4K?25ZBH4P;seOpNVu z6@)_wrW{k1sYP4+A=B<@Qd&LC=f+57gr??A{u6}@~^nMiX z8XuJu2uVom1ab(PWLm5|*{3^G3Y`+Ob8?7y54Fh}Hk3%{HxalAUp6B1v;2_9R(J_t zaWzwaBT88V%S(MRQK_jlXxu<>fKHcx>LU31|IALJJo1=X%YSbEbguH8!$?K4p4K*o zrE(|3W=6+-8TzC5C9cVpPnYilpH-wehLtYg)%N1n$7#396-($Y97-wj+*Qnqhv$#+ z9BAA|u)!ieKMzaUh5nNd8^m!mg9y(Hf=ktKmqS2c zrzM&q`qd|D?th__EJH9BSelqo6Gwa3m01S3I^*cvgqDqTtwe|c2odY59HGegk7RCp zo0!J%g5OI)^5+4Vp;izia|87FI&k43);jA;J)2e0bm2y9?0C&iYx!0DwA6;IiL4H;(z2^sg1O_V%`*|beJ%< zU#YlztMA#@5?yAKFcr=`_sNc94NZE|S;w3lZ1?Wadu*xpVXDf<}FlXCa?C z+|6#@%!3;`I0}S>0O<`Ni!+xm(_%bBJW-)HLLISj`KSks4=upn)r!@lrwgh*`g2+I zo(1ZEtjd-W*OKVBmvtDK`n?2u?^$t8v*qEm@6~8f5je{Exd_D^MKRd(ITc6b5i4*) zV`@UJ!rb3hkGWk|KKpPt*EkoI+hl}e5M31^C>q4?EX?u%)_?3xhuS}P#MwcI_|ESa zbD#a*^E7(=*w1!dAz{}0Irpd-HcohHH)xh?w!G_AFB(*diaVn>`04i5&YJ>(NmIHx ze1C5tkKYYYtDJ_w16}4CbP-Q9bdF^a?b-EI+a(HoXOL9EBV6}yUe`UjDp{k3 zxSSJm3as@`EEs`Ksg&7nu^fF67BO{A#A|Z=%3#>*smB?=P8K{G%=Tdaed)8jj>iP| zTyBKAZpw#|krAH5-Yk3eJcOXSdvD^AqAA9>j8l=V5SIk#EyM{iX9?ih+WZjTxc=xP>kpUgRGcY7yS!%28e-Cp ziz?-$E!GSRLPFYy=b?dBPL3^n;e`9?3VKvbbIO1u+y$+Ks}*RT4`{2fO1mG;Z4WU> zNICJP$B}%)*m#O`pS4jhEeZ*^P`FXScxp>go?BwJz5k-x5ra=}<72*tc&7)7>o2iJ z_86_Qn0)wYB{_9z$e~|N$d&I26UVReOI<4&Ae?{B&w2iN^pIiucS$bIeWGnbUv3Yp|%|vPBaf74R9OtEFH4k!Pug zS>NW~oh}$wD$ogRTQ5oRh`x}Jo&Nb}QvCVY#QU1iN5bN1VG+kpiOlx<&9Ij@4IU}| z$??EFL-4uyF5ke1#b;KuW6P%-7dTFw_i_5b?|7=EwUrO&RoP#u04{xGzkzJDmWVY@ zpV>Kfr|{xAb*&K5y^_v}+CSz&x?6i4SNXz*YHbefThr)@gLL{)&0`+3K5;{wb^_BK zon-eCQLneJX8}G?SfD~*cv*)_B(*T~2xa5x}JR2HSdi~;^xaP2c{$uzh-?0`Fz zyLPX*mf+o|cp3n}_SY$qYoH?-eDUJq*KU`oJ5xfMj+T`hp1PiFs!Swjrky=mo}1i1 z$;6iPL9}qBr119>qXSN_>NEN0hZa>`raI3X+U}%)1{m~-z?84QeI0E7d0M4y@i8&( zNMOej1kWoPBk_h?y1H)i2X?G}nkm7m!wbU^Q8o+v{2e+NTZu5rLx0H6<#gE&3=IL&--`}eK%vpf;$#T%Wfv3~Qxw@(A zUfE;T6oAOcDncZrz<~{eL&|q>)dPANglr`|Q`B-#Mwww&gi|9pw}`xgAB(8UOzLEQ z%wxSkI`9C#rC@dJ7a72hf|kn{4UTRbO4(!JiD9n+15W-$xVWI)ZGZ-wRM<%u_S`x; zoR6*14XHWi?a{i9k^`G9!1t6n&TQrW9YZ%B^p)t3h~IC>A85M;%sXCyZb#JTVA6d3 zs*vV`3R#;1=+PIrnjMi0A3pz69dx)t@QA)R;oT}u+qAp{$iGoOWHd$ocTbf5 zHS8d}h2MPqPK=&V?yJ)FJMM|<)#LsTc?u(2TN-o}+|$FH%r=YAoqVx)h~wEGBZjP^ zK9B7)FRqrjoJ7B`2Y#E=;!pxsNKi<~|FQQb-duL?7x0}XMafv9NGK{oQc8x9sY0fZ zLMl{5%9NBLLn=yAlrdALB148KL&}&b85>X%GE2PsP~UofYrSi|f52<4=gFt|eD3?) z=Ul_S_O&k$H0Of_y5I=nT4=*iSsne@*B#%!y+Oc7ii^<72*bIZE@=%dDLMOedhYa_ zfLHfRS1aFGBI_*`d%;q}ptni0RzJ;0U*%L{;(C3bn8bL^h;(g@RJzpU)Ii?bN=Ji^ zKHlFsIo1E#S?m~paPZY*KXVQXCttB`8?`&!^(J_yc#`cBid#@{F`~o5ju%%3I`3JT zfCm$wtD?EA72r1}1hS#)Tn1@XHHfH3j~_>HBUkszP}dm_5t0Qf`*KHDqxBf2!+l{$ z>SLjSZDVVD2HXnpxoOaeO9s4Kgn}{v+~NvK*HEaNPrGPQfq_--dpiz+SuvGxht$;?JeuIUt2rwP29mWGus1#<}^{}B8Wet;e3QCd$ z__HKKW(e3zxgzv5zdG7oJr@Ddjn|(~)ISRTx@-Lrh$|uyHUX`I3^c=i&INje0E?nf zva1H=4-Jw&^E>3_kJ>ES9=F2f9P8?+k`?Jj^BCDAI6b+$n)oZOPN^NA}x?^XOY zDn;ojnf0fh5j&%!6}-wT&ud&FV~zO!pD&(J{XDwY{EZVBn~(7uZi=70@(yHD#=r}> zNu)W}<}tGJ@}DWXLT}7&^71N+OD;UmEiUnbH}%a+O|?bcei~C&vWBs-0fKq0b^7fG zb(r#UpEbk|&-d8F8ohoeR)A2f;H6T5Ec*>0Gc`f&$%6dN6+DO|I6j#dr*{D;h)x9) zekpdA_70sY@%L3c=9GO`==seUI|;mVDaZ#UKw;;|B+{vA3_#$N7LS!s*8%F3AkRzM zdfM3d62WPKqgj-o3PXli&g^0ct5$^m%wKvDXPgvWp%|Y$Xh^@wWg6{|6ou_um7TQN zTb>3U7~K6M7{xLMslB=%gQKG*DDhO|;D?GJ0QE%s@bl(oPGDs9D}b}UL~?oN$0ud& zjDB4|Ogkpr2AD1~1q&12BM`54Hzac*0=tG=g{lBO0$9P35Uk@6>%G9M3>8Tmt1~j3 znX2e6#HVjD*3n|WyQ85{{lU3LHoKbkbRMsiwCXE(Y7!Srw7x`rHZ$ocZ%Y-P$T1px zV8(AO-)M2t>eu#f<&TVP&tc{i`C?`G-;)a8@QUFKZ|7ZQlPm+t_A8xSAN>Ty)tIiA zJy?|P$h~FH@((v-_#{oJO6|aO` z3i5uMEW@S2Y72tZ9*QX9unB7X=vuMz>4NHDZ^e=oA6k}jHMo?xAJi~slyw*GVNgiY zymaXL?j`y=l5`}_o@+E^7OAYN@dC=;ddf@ zjqQ{xluLdd*KJSmd{LDVa{e}G2D`wmuEhSC4iMea^;GAs-J9h168kmI(pF ze3k9_^H-iZ4WKp2*%=FW;9E{%l%@db%mIUHMOwu&;tYQb4h}$7CO$iqgFHRZ5cw!-<;XaD<8->&9-;ud#wsi zCzrVm2Y6IDW1?*-mkWbpY;Mf1K?-X(+`C$MPsq;inty^;`(T2!X?5Z%^~HP_k6aSW zK>jGl%Vdo68y&iskx?T!ZE#@aRmuE^@ym)CmuiB84Ywrl^Jtf>twWzLZwYtx3GU*9BsDO&zm;kVe0jK1=EEMs%{7Y<#f z;V#k+ro`fHgByo_M)45_<04X^%X6(G2ONnj3ZJ~ zRuON=?+YgTdQV3*yz-#+%RdycZP(WCjrER_%^Tyf-hvDhx>kNmWSQ&o_~M^9?Y{b> z&q6Eb!CJY^pWfK0cjQ?B0X7$B1 zON%iW=;}KwdiU#o_q;_TeBQijX3I~%e{I3iU3@+_<4OzC5~PiPMEfaKC`)L}7~#M@ zFalQJC($OS!?WwBg11Q>9`4inw|ewO%IW75uD9v$ce|OjDgNNIBL_b+E|WcK9dbNa zS?~NbHIH^|U8i97gF9Co;GOw5jEf)LYgTmg>byyIhvs&>Ip>V-a8^Aj-Ol5+Ib4Tf zGP&qzJ#=abhZykMM zpEmt|8=Dh3_2R`Rqi*Z9+Rp+NVd3 z>5TQ3$DQclRR5soz1{qdv-#Rx+nzBo>{YLomw$LOC@5y)7lK%y&nqH_dGaUlG-JacI~qOYvb@X7OPeFd>M@s&J2y)eWEK1h*F9Eq^w9&-~9giwKY#f zCYuF0FS^WCk)^0dKSx~)25_2hORQd`>aEsmZ@Nc%vaUlFrfqij1^*4Syx$IF_!+%_ zS|Z1mOFbaqPY2HrB%niugq?vh+1BxW&ffm(NvbVJtHqh>L0v#U6%E7{P&$Q za&PLL_j}{ok6&iWIK1NUqtU$m3z?7Y4)l+H$=P#v|8t*b&j#`rUQy)~-XHfIhBdWk z;GlE+`#D?_=RAEqa;pb~4(Azu3js$U@*}gh7C>$?YEOk_t+X^3s=g)oFZD=9sLO5LYSl^~tfn(b6TjK!mP6y1xX)YEIAeFOD_|4y*oM zTw~{+uXW&D;E*Antt$1~rkIypww^hd5jO40iaTur7f05Yz0^E=mSM{oMXiywvi!r_r>m42E8^@mCvBkPy;9RI?oIL1JUn^0}D@uA* zS*iPL3gD8O*%H=2TmZ$-s#^Z2^XI%QYM(z(_BrbBkny~Xq~|U#zlOsZ@NZC2V?egU z@0|gLFGxqojo$GN#Gdr6bh#vbKcuL>^dtYTP8M&atHHwy+IQzy@cSwUzIPj1G0Dkj z(w}{P=e;jdqcTGZJ1h5H@~hQM9#1^f!(Mx6LPK$9#k%IVPI|GB%?er zNN)AZW*5)jMQ_=@*_dGIPNnN2j;Cz9noq03T~l#!lZ=Qs&0 zkyKkYV`cR0*?M_&7=Z{yxN*dWejr7k-*{E7BWZmM?QxQ?c6E?wb^!#lUG ze=5(rHIv)fpmq^rquqVugY5Km&$x3C0eEp=reu@HRb-ztOs{?!&(HNGl;QW*%Qc!@ zzW>kOGj@DbZFz6oMDS+jh@iWY;cXYXFxxb6g|@xX)}_&{d+dV=U66Sw6QBb&y-pnLaxLG<~OGs=M>n;vqb5)=j* zlTnpj7*6)_Mo`f407LJxY_Qcnpt7c4f+2yv&ccf>yMhU_o0sX!)nAy&bMupO^d48& z%x}x#59kv5dS4){4I2*^xMSnMyl-c|`41Co;SI;XofNxS)P7Xc>Arghyw-x`o{o3) zCaa`BroGZ!G5vgue3in%Jhf4;U|ea7YfJO;y^go$=}xH@@=c93la# z>rNLxCAIg?qUz~^G@HVtr%wj##`Ym_{hI!bF*Mk#`;GiJ7ssV?c}ya7OV{>1JXYe2 zj56{Avc!*fx3CQtpB1-1wa;a>;l^)%O}ZReJRB;_%RT(RAh;`KeHR_-sl4;oAeKJu zd>dxY3J@UvlVhBg4~naWkd#9<^LE8FgaZbOhm882WBiqW)ajmc5waOnO^dIPI9+qSLHjQj3HLS3+aQc_Z$qs?MV_II@Kg_n=z zo!F9lU3pL_0RfJl%29rAKHZ}o3a33~L*4c&FPj&&;qi^|QdzZQOg6Ws%PSuyX>*t= zM|Px$4dm_%G_W|m;C9RSi`eu&dkCYu9NR@#xc3#tN4A><_0!H>tysDIR%3rV_ib@@ z;}aIY!_Fc0{=@5Mm$>Xw0LvQ3_nFvWJa%kMVjCAbb0r$mZ0?%SLHe5aG&jH{H!6Jv zCj|n#<~K(=Iyy8Wn{!@F`9)uo@ao9hnvyW*M^T;jH`7MNGxc-@L(yD z2W^>7rj-jCPWV1pdyV_O>%!!m#6ueSJ{hu3W&-pZjy#MoTdB8f^(U>@?F%oA?m7HC zs!2+|QD-ZGuTH5e1g)6K?}E-Y9TN-JNN^Qu8?jC0pS+ebG-Y z`1)RkrKZO1KNlqPVO=81_VQ>JU!%jBl)2Hhwg4KR8}EjuTmKKY8W4+& z(Lu7zS6q6j25+gqWA`;>TYf=bQ6cGSM`svy5KR`8Ji#%+MoR0mQ~qfr&njErvh7oh z`K}ZcNTo3zsWSEsIgpMaeS9^=h9^BMzYZx_-wWQjAZFVAo&xK}#gmlN`$~nNct7sT z-={|wxSr3s%aOC^>7`YPaVHKgU~7D)*BI%Uo*--al7~^0b^Efg@v2S425V@*=&A1T zu({H3)ywC_{{jK-H9tKxdN#fk)l=Q17P3U6nq)4fq03G0SgrH&U0+kL3)>@FAzi;s zh{<~yo()L6xu#1vw=F|esaEp#M5R=uEw7-k&4XwQPG;XCLKvwQ!Qv(i+uy&P>m}&Z ze4=;y6c}gH0D-MqISB~jBpjckk2o)H#8xCv=e&~q+E!(}x^=)J zX?XP`%fqYkwtinwRIbtarOqK_D9B9y(gg%Qj^$6ppS--{63STf#q!Y!(fG!Nvq7AZ zIJDDi_JtcV`WEFJlh@klqKVPU_|jVH<+pKYnYaApm4kw;BchgX5~Ww{c>hLz?Vfz5 zqO!~(Jkx=}+R;6X?@DJ3sSO7gUG+xP~C6Cf*l z39J4HPyG6{+#o6pg*?R)7H@fdE}NS4<=VSi>yyUTbeoQSN>zs`q#x0NH?B6YZL05Qh$MQqVTB{0{)6H!w2~K)FP{iS; z-qKXmI7BR4YyfnM7j{-YIQ&WCVvQ=3_dI}%3WJ@V7nzwEwS{VG_PNd)Krg{0&!u^^ zr^T2{?zcUUf9BM0)gwU-s463B8EO1UZ!iPs%+@R;o@#9@gMRgxH;FcqyNc<#^o1QOXbiDYnE<_xF^n9erIV%dHPw} zQ3U4iSMROL&{rK>(KsGDb9?Kt_jiNOkOB=S44|ENnful`6*C{bjh?7twqBgRfD@9O z_I6E#jq3yM-w}MZWy33}WviOm+aEM;7#rwdY*zEGaXMvm+3@2XUtd-4Y-7?6Ybl#4 z_u42s<>#)zJxm64ex`u)_^#c%aU;x3c#x@tPcY%7y(KH*mC6>CG`dYF( zG9;>SMN>~#C$HHtV^M<8>*E6jt=s3=0gci~EAY=)8lH%0cRgM?iR%x$JF8iO0;Y;c zE;=>I|KpYqPs8VR$1OMq2M0G)>ncx-jmhx%b4yDf?#<*8c+q`F{_~}m)hZwL&~gfr zTYG2cF|9W!E@SS`a`uwwYxRmnYXupimfr2-qlgL_j=tYDCjh0rP6I2E7{=X{-qrub zJ!2>PZXTu}+|;!98)r61^oz{zp!)a6C``TsJ~Vr7{s0kPUQ@Q^Ar=JbiTYHQDm_6n zvTMoiG2asXF2N^*Tdo~EXfFKnZIC?AB~YY3*$iK6zf6ulQ*cafu}HKgne}B1R7bI> z87lGhACDQ`bt0J6>ZZOvR2w7E#i3Y4&%jWEq;aU#SCH+z>cXKPi{+-jCU%&bHqVum z{~RpO>-pf6_9sDBrPp{X$M1fr(?5GV`2SJfKhOkEglKqt^jgn}v=a3PBfyYWKP+k2SK-a;&++oo zU0gT~`9@xT{zB+r$L3btmr5AUtW7-{TH;+MX?ys%(xH=KO6q;rxL8>+&EdEy*y0O{ z?n&Ck*PB?2F*vcg9q`~6z4<&|L%g(7F@9BLd3g~6Z6Y?P6g_cqG7s%OpsOEvt>|j^ zHw5IznX2Tjf9`%P ztmeJmwt^3~5_QEm4XKbi28FvdcC1M;#T!P&}4q=uH}esb&RP*&IDfw>IP%ok=Ike1}i=K*yJOr)S=jur^rcl zw?139mHwdR*=sAux2vxo^fNkaWY*awb3bUlu5XRQW(6Lm7m5~hEaT>HjP6Xi#d4AB zcSZ@P9O$l8H6kEJ{4-t%Y+~52V6yLSLC;3M&dl+O(d0F2Bc>~Grcus_I@1hI^U=Px zD`3RS4xrDfI>mVRr>=zMrRWX7_07@I`Np)5)d1lo8MFstapFhxJQkv?t&VY_i65~O zi%{z$z1oQ%NmJCyj-1rH4Ia;^!QP$I#E zre$DgSiu1$QgFFcLxeRP`XQzf26a7l21S+|D$ys;85@|rG7V-#pw(x5lT+YOF8O;Qiy+2MpLW2kg3Rtf4 zJR%3x{SrwBv8GQB_e;G}xxwr*)HGVPW9JKWiVaKBOzvnAT;*WI@ zT-dlKgfc1ZbQS6Y7z9ax`Ah1akS|3->cBt z{^yv-avqW0R;>!z^L5bLrw&{QL0!!k44e)>iPp`^J0pI41!Z|`q9=I(VqJ1^T3^!@ z@t`kGPhq^D09bs7Z9U~b?}k=G-gqYmxP|&X89LpXkf?a`K$;6&aC^T$g)J<#hCjFU=qBj#xeQNZD5BCU_7WPhK6Q3jV9G^2WxRRiuodtDnazo zCtYzP)|rr!F}d_Id|C&J^!i;;_lZO+*b3}xOfjCDsyE4XT>0-Uv(EotIdl%TT--Cz z=D;3t$F^UYo`;Rwh)I#4x2fG*p)nt`3S2>#A_I;nR~&6)4@(~RoWH`s)uj-z^NFiCOY%?>nH7H;rtltf(1vK&b-@m_64}YWG|NfKL)j#RY-vc-MU4+dHS>eAQ zHT&u_%l|&`|GZn7z#l8|pZmg#zytq8+@-aos0?|DNbJvU&}mU)V{L|_DkF%hXyepM zHfs4a06G)eP?to-#Js>r19U5*Wmt54muKng*KUSFR}ejgh8~LRl>6rrwce%fo_&}o zd2T}+KbgdC4Z2AB$NXO-9N^)1ba&Hc85*g)(@-E<&d`Wv0eeQwz8Bt21a0~!+wuSz@G**<_FQsjC3n;zi4{R09n zqr{T4BD8!55Bt$^GKzD2e zfGCGT*kM!j zo7&HxK5_H$%||anbg0iOXa}q!wjAQm8a>c|q$5n3&6}%U2LHVgMs4T+JmJMY+K21F zAtw_*D2S0xy}l(l{{ZWv9>-s0@d2OSKRPIe@e5%f)3BSOh`*2mH+VV8lUL+}d;^_^ zcN$sC(3pZKQSP1xG7r$W+nVQC4V2q5%!b#@{kwA`evlJ5`=!;ruu%O3| zztjpEZSO)TfPepe`nX$M2me$+aJwsg9whyKsS#`kCJAX~#&c1SlcUkp)NKFu4Ustm zA*6$(;tHL^)&X2#fBy6@hNs{rLpw9AA`5*ZxEFU&!3f0!F#zU82*apZe{bHt=Ro_wU_XL?rzvas|>hZeGKSjzAQ4#Kef416Zo$;Q|mR6K2p;W%SA63IYI_Zk%UVR4hPx zA&xu(Mw{Ihy`j=w6=+fE;wsThgmHvm-~Y}XS`a|e zPQGKp8$f&Hp#M)+g*Yu945dIXwj9Kiz*y-3WCl*5p1yv3`GxdM2}}wBKUo&U7ha}C zC<#)S_+F#xuVpD z%ah~rrznss$S~Xy6(uDZj5WfPpCjNY0nEXp32UTj1%2rw!Yt^FxTB+puwh2+Y8&7U zp(L~jU2ce-OynG27HYfD{Y3b=<>#oQS_z67Ur>u;obA~YW^@IXLCidlS-Lz>5 zWHbPIL4w|0Z)3e=vh^;k350JIj~(MjbMnyCyO9q?bRfduC@cWA!?8<`8+VOcB7Oze z-`az{cf`snSu!JlEo;a2?FG;TiB12+I zdId$r_)bt+j8ZZ(8nRtbc3^ih%CwfHxN*Q~poXY ze#6WS%Ul;IJ;}k#oi)lw1MXr3N*0!w3&lq*Lm#y}n!ssszwA9wHgrdOTtXrwYj^u6 z*CAv}&oA}Bx-MV&;?*nVQ!W_wQw8R6qAiB`tc5DtlSZlZMRat`2n(XclQ7N_EyZWk z$DtCkoT5c%DidZ=#}41MgTN)W3A@vhm7?+#H%#OnyKk6F^VVSrwwgzKdpl3^0Vu)L zjiAGx6*FN3uyOpd(2d26z%^!A68?z}-5D$|O;U@+QFlrID#>91ke`Mk0>yGlN?z)S zNYlqa-z|iufBYaIK%G1@fN|V(NMDdHy4r5%KJ59PylmHaYJWi z->GthyB>(s=|CCBz?fxF2@oQZ%`0}=r))m*oH9nvK}feyv)hD5Lm8wU{>6Fdi(*5N z%Z=kE6RV#dk68_Cp_@+!Bgcj})ID19@4lY1<2Nw{KYO4~^$}!ZMLZ#l*t`aP zR7j){P1ItXyUh^0L2KylQ=wsz2Tm27IfcZ)4f}96fORy*+JkU<gsAK zcC-ePad}Wd^Z};dPA&={6m&reWf=;y^bQUVZpv7weMXm^*rZLAs4EYNgwvpbWh4??TAlaLN^Y{N2mufu&hkUCjuiK-!|vO^Df6esGgOXAY+4VdzbK+w0FZ#Q&m9K&IFX zz>yWAMG3tKjnLIX;^&TA>VWsRSe0UHV^c-6)ub=320{#L;|}IDgrmtY2IRyRpH4x> z^PDk&_+`FDCm>&hR!M6}O~DkC$p&MXhcZwu(Z&rCa|nOL8s$pD*<;K2VLmpb8@b@R zwS5JGUXy?hjhb~Lm?w`eq%|=46iiFl(}&g)X*7Ym|8N0*AQU2+FGQOKJqOkBWYAUa zfR+ig_IIOXk_xyNMDjhGJT>E9V$x>{=^`bKt-vkGgdT7rk02x@lhuI;JbEew&Lq4! zg5-I?%MfCay$h!GM?J8-J4 zBp+EeNrR~{$eNI`L)7!aLK+xsNb(gU(Iw+~;Q#d_6UIS=?uS9az=xI3Utep54~&S#a(3dpogIPX?~Y5mlG*(`bo8f1CO*(y>N*_F!uu zzU6}^y!oJ^V(-`Jss6PAS^~FBL?mZJ(J$Vs3ca^rDlKd|bU7BOL~EXUgftn}7zV+j zWVf8$JnAyMank^_skBSpBcM0xaY3&WBSnjk(b+N8-?3Z!eCu}GPGbHnKH>&1-@JK~ zl7Zf5bQ7Ay?@%(x-3rlGz6oKZh14EO4yV-vm~y-y#3*8aw5FO~X+mpp4?HM`Rn8hx zFb%1MnBaVWC0@J%E&O);M=;;jKW~90SR*d3ed>^w)~)!+e(dqOV(3k;r?5(eO{n;7mLzzQ9K-Tsd90 zv>3s>ww>yIXqYMP!f2Yf_@0Rb5oARhsbyrQ&bggix9SWxEqA%FI6))Qlae8tO%;Ps z=DHfcdpu$El3ciYt}g$+kl3wTkqv9>j=+q^`w0Z97$eiCp~BHYAURrZ_R@xMb50I4<+t#J!e#B_x)=QBN2*N6j49E54? z@qm>lJ!C>bbkJvDqi7N3dHMPt@Erxl6Z<_wcSqj??9Ac8&bpsl1O-(RUr)fiYqxY9 z(A0E?HlmKW%coMt^mG!7Ak)HgyJwXr07kW{I0OJT63GbCZ$r_-Mp;~eQ!;=KnmA&VmyjhTL zc&qTA&1@Ee=o^^?%nU_g`^8t}&!4wyRiPcxp{#lP76yHZUq!tqned{YVN7k7kl2Iv z3W`EsyMDt#0|PQMX0w>sfgP>cc9wP9NjMYvGchob6>%{o6FF!ttJ{J2p#XiMrj-by zG1Ha@Q{L)&vo=GT^G34s%)3N)CP-PMSF*C*s>Yj6;+oIpVR_D;# z*t3$0>pD5kXtsbzjc@S~FrwKt zsKF98&|=gMs*@yspk$yjgC6;7h%pk1i%dk&#JI5COkxy~OzuccSL?=ZwZ5-keefI- zT#6~-bIk@3rPb8MG4{o#%M$(sG?{@QHYKe2tNxetA(r~+1ajT z2ewswTTFCxK}*Xa(^DD^1`T>=ERiBzYi>3q`62>alwhmxkm*X43`BZ>v_SUbI=NGn z1+ZVCAE55<#1VOVTNyhw-jP+LOuU2@Gc`Vc$5q))yY{-oJkV zg;Jmb+CPIwG4PB4DAd{Sb%=;a7={HSnx*=(7l@dO`JwlaY=n#7^Ra;B&2wD!JF@c@ z8xaK~Qh-^ISjV?^?OZIilA0PZ4pi(^&|d=*D{Ar^zy!($NT<9IjTMoCV6M}3v+V_2H}tT2tuvZ#uw+H)tVfquRNiUG z&P<=bsyN^W1ew0+$@=+ShcaEKwGmrc*v=v8G*uNQI~PaL?T5hE309Uj%U#+( zBiO|recdzRz<2YNI_6n5KReHWovy>`-ebE2-B)vB59@l!g$v3FkDa4-S17kRMQ1u7 zLVW>1`V3S-6Z^~$NZt4cNYq;Wx0G8J)#mbZ31Tu2d7c6=2faa`D?qR*zM6|GS&&xZ zDV6G~HSuFD)1gC|zCLmLuk;73|8AJZD$6F+iEi%AyiCgePAq2)>sj{)MIN!$2%b;#uRu=u3hYx8eh}I14Z=}usA=I6AS}mwAfQ1idWe$ZH(yl@vlOOY2 z;!Wo_sOpvsMz924e>!@qfXp0%r+Az76d5wvcoBde{jISg@5{DP*)`#!80HmEh>mr zDFE}baC!~}=`WD+lt;uB)}%gN0Xq}l2KB=gwc~~lLX6I@YrQ;{Jpv^Ld?d4@ zi%VX`< zlX-`;h`6}c>5%NgF-*q_wN)E%*{pDK_o%Rii|o45%U1MN{D_mOBWP8U)UoE;d2!0H zZ|Btu{Socy&@cAjrj@LWX;0tK9NOAAdP>%R8-^VBIJx%@y`;aW{k1m>wgMa{#y|<&ZTA$r7TZ2?mWkxP)Vjph7?*9mYuD3 zFJgD5$g1nUny{h3!&gx$!094wYDyBeLzIpZ-Z61oUY7GvLk>a$%IKV2{>5nw6@!P3 z|Il)IyqM&N81d|j%V@0uztKYyW5`@;8x%ln$LlMWz&nnPjU@y5qL ze~Pq`xF{Src?wqKbQPBu5K{p6U4Yfwwal6SiA?<1awKm8NYoaEppp>t=>=AI)(Eb0gX6~F-2 zscrVZfhiILX|4SC;9VAKKvZ47LRCej5b}#Yei~Z-r;MQtcL@+YBt1kh=p#L%A5qB1 z+|kwpc6u%dl~m<)zoE;Oh5~x;j^O!=;YBPeL~&R-_P@WMEVy0{)8ml_TweXoQkOW3 z=jaVgyXNHR7=gfuawXwlPYBjcW*HcP^SX!CWiKIm+a0ccVijzkCTjwR{@71R2w2g$ z#*d9^V^WeUWEJ6VQlT}%W6GMh5Tj1#fHjJejkd`5gvE>9RBHm?-H14P>Z9kkzRu1C z?Vo!d_Oz1WQ55j^xoE4a%C@q$PH8fvx*@g!{1Ip#(E$zJjvOhm>xdVWI8c3~s(z)E zfERw_?%l;UVGEZ1Qn#w^JH@-BU&EiNyZGN;n>cv1}72|tg8Sx0>ZnZx3L)RNCTU3 zY+`~)oI=b1mAIIA+P8Q1RTOI zMz2J`BLhL&s=N;_9V5SYySVH^j^PFDA2`OsF(jsEP-Wy96#j1QIdX~~M3e^?Mh^OCu|{VW9yO&4qD#Io zj4I3yfS_|IKwCN-uiw0xM?pu67IGlSQeI$YPpxFjhCmep0s&&jh~_15t;y_z{r&2{ zasV)M0=0-@lU}!OA>zoJ`ixmglfFBaqiGPnXbuHTEM_3j2NYWXG;=6mSogmc+$|jN zY0_;-=h|t%nQ8|bSb{25ZSm@z_O7r3aY>P>40+vmyCCXAktG)|CbnTj|1aT!QCsJq zf{xNXoT(28=Nr?^nW65GP#+Aj^X$eHW7LjUP|q{vdUOdB01by^1QBNY`JwmHyk*y=r{IKYACvz*eC**j@vNZe|Ek9t!My0bhYmey(I;6Zs(&b! zcoO>oObyTR04ry{epD_@3?3OtS}aP?u<6y_endN_U3VDm`BIKU1j_nkvmL1lY9kEP z7!(LFck=XU3rhq{w63y;)nyK;J7P!OQQJitN1S9uE)B8ZHdHtKX@^ zIcyW--`VQHA<-FcU>mcY*|zVMpoVP}pAYTQTXy$H-HbxdcP%+r7ihiMxpn`o>Ar1C zU8FtsI8QH>bR3Gs{GmuZN=!OdoWGbwX>=UT^um}BSq^LfJ@-1GpMd!EkX$E%>y;y; z51fDYW;CIKg2xqwvK{I!`+@Rf;zj_P03u+d6M#>$IbqCD90Gz@4Gj`6#Gr6gi<&Ox z?7S)}DvHp_vN7Z1<%J5pCR-&m-0F~YE9ZOEifJNryfE5w{;sH*4<hf4m0xbj3nbAknP6LWTX92=02e`Sp89DWe=l&Xbk9x|@qWg&bv~k__VX|&%$15>E zZ%Ao@n=HU~_8sRQ(Jyc#=*!@y&lmRqO8(s2yNQ9}I(-lD;vXX;w}XOo!AUOQ#yAS) z0Dv3{*v%>jzX+aIyMK$X8V9I)j=QXO*-;Y3#ewr8)PKm^~mA2Wm7v5 zt-VFMumynJDxeftfANM^m!GGG2`Fsvly})uYWAzNj{f2DGaiiO759OQq%zt3?eS4B#kOQiGgj1A9oeb@pr;q^z|uDlSmy(1dX4gWI{L$ZEWtp6N`@4sS^vLkfC4H4Y^Y>$Tw5DbN9Do>o z9a5Mt07w?o(LsMPloax?B4tN5cVn-L2CE4gH7013<2};@bLHo!Wf#`G@mGvD7|)Z_X6%(>%`{%1RnKSss+EXsvaE|Yp-LkU7u z5K`-jEvx_j&QUL!Z8NW)bA5Upv>)oJPtJj9@aL;Ps8R3PoIkJr{Q3OimEXVh=Wp=m z(F5}e|L;$7-}`e(|NP)PmP`NK?d(64KBRS@`_IpiZ)LVBaC82jzoQ-t{8^m8|8iq5 zBkjV!FK51UJ?ZoRUm{tF|9=&!c6eDe;>KL2#*bTO(9CQQo0b1=q<#ia{K&b&Y{>>l zj6Q0awVtJB|L)7@(*3PYedb6?9;c@V#>B+H=N#?5J@bAtLMF$17tDM+^FQuq+kxy6 ze~P1OfnO0k@bD^%Z0o_4vCNqL!T)m&5^wHH8Gu1h3s^T1?hxn@`7FUh*=gwpv!^2q zBf9>6#ux|qoPn^eFv75gCm{XgUNCb8UF-gPZcF!Jnh2_rj>-XQ{5PS>e(LkJ*~>ny z`0pW`dWg_39!@0Vs{&e z6@f$a=Yz9tU)~=I1u_?C;f~#g66t(>= z9zh-IS;VOYeERn75i)<3fSpoO#4FZ4I`}px57BlLY6WGtHzfcZFMIdyo#2I;^>J|=oSCU?B^UN(>t{ii3*&m6Ev&JB`>9p)G84cS)h z)AIY>{$oRw*ri=^NdAQ!ycg5~nBM?i?Igp4=r>S@FJNV6j)X?i-BFeeI%+7R-{74; zfBqK?uhIE}x(vQP8U1S^(N7u|N0t${CXRx~yT-}3>zZIr*P@Jf2t#@x%V`0)4~v$y zdfBotRJS&uKnT!71E{OG;>=r8S^qJn+XJdk)FPDl+}9@@S$#qS1odFFMp#ab5ou{) z{6KX+VVtZo4un3cn0T3nDe_PaLfJ^;D<*~_Y;s60I8uf3$Y-oQQgm~KjR(cJXFksL z-_uYUju!q$=>Ix_F(yDd{Kv<^cl?AQCRn69RulVFR348Fk`D$)pbn+o?K^h#pqy5X zf@vZy@?NFGSbz9_CxcrtbBn%m2|ax+@}MoKW?(qn zj<;R2H)_B7^gr(FhAF0+Cg?e7nWL)0O)1OEYNeV4@J3e0;*B=|KRmR;FkpP^8D)0F zyS6XdQ9Fw!GOSsdnX!n@g5Umj=ZEG0IoC4Rh%l6gr)ODt`QCuD2uKjwnPonOLHOE~ zp1>P-ae7KW-z8T;N=RrQYB6YrxQCqprUr?}-^^}bs$F{X|EDATj&%6eB7a1hxtBmL zc=-_Dn`MrGlY?@$KjC#L#~bBlliD@{HgcT6R`Cbv1*0vKFaz`0=M}T7v+{QY@s9d! z`KF#A)D;jF)x>xaZEq&Nn!5Af8pDAqs00xGC{zi}>?@FJiepGzqF$=p#mO`AiHV6A z^cn^tL+ShXJ8V5?-+B!C`{ba@Y?YZ^E7vXnj5TOxVCCd|1bkRo6UDYPa8Ou<3>!^O z0e?>iKo+?1pe9r&p+D#JJxk(rvpOhPCZ?vK97ThE@^A;k%)38t`oC{}6-Dj@Fmfev zVcB;v_#T62!qKsJ=Rr%ZlP(YeEmTm!aF0T;ssBw`MFm2&h@%fY9G&$={XGA*>0?%y z0KXjF%TpYR$U2iUbm zO_X=hN@Nc8D8GE}?0gs&#!Uin6rgIr`1$JC6Je@V--lgNzx>P1`vl&0mDF=rHR%XR58lak%Pr!0|8Y{YdnBq-w+&D#$G5N z+CKaCM)NoVSZb zRDln%rDMyy!dw#a0pR)EcTxo4Lrxbm>^Rg;Fw^+ex2Lm__v8O~1L0`wuJvGXB8X63 zK2dRV-E|nKjmr8@j`;y}zuB=8=`zran>cnTGl@exO093!<8yEL*W>qV+CUQ(J~FCJ zt_^+pPh)@n{MiGf{U+})2Hv9hTG1cE#HVrsyPqp6VGi$@0@bB**(FWnH0o_4AndyXrj5-4@K>A-fnD((Bs$vya_~|KGr3axESRK`GLK zN_QoRu=|lf2jtJ1Izr}yb5;siu#__vX4K5S7~_}X0Uj#{Jlq!=kHOQv6DUO3!9(O? zUf*=@`q@4DZt1^QI!%V6lkH8MFc`~h>0nQgU?))5NaGUC{7)Sn;TSq3$j4V?(gK3C zHdeO<Q&FN4-Ai1VcWZC=1%)< zMDI+EHA#^d?a^9Jqt-?IQj_n0hMZc(S}(edS#l;#;m(CAJb|qs2w5Q5S2AVv6*$x6 zAZ$p^F)s%WuI%; zbYSf25G9=L0YXb0F5Crq1A>n!K+wD%Eg8vVn7J~%?g2s)$6VRM_StuyX83o@2&(#>OBm?&8K|KfB2mU1Hz$G6$JvjT0 z@BWiz312NZq7L>pE{%LF(9*6f%XNG2Mj=MtfOrXZtIXODj`~>o;+fySvGzZnB8b2@ zaBfNPUTCL@0(1>8W65R-^gBkxv{)&i_}Z!jltzx(-}d$OB_`UfAPliB36@_CP0gNh z8}@(m)u{k%?Kl)HCU6J>kFw=h zWn$vNCPGYU0fJkl)DG+~(zSy$<%tQ)%sRModi-N4UAtfy0|-J2hb92RA+zuK(RvUrNP#`Lipeu94^kkPtp06YL!1* zPLj`a4N~lFdBJ*bsNbs3_Nkqg-s^U??wQ-X!9lvY$Q-$FIgcUevV%3I0+Dr<<<0jI z91*TO`1SC+`w)d~X@KCbHmJylFlDkYXYd-xTQ}-VXYPplbRx%OHohaTxp$L(7Yq-# z8|>T*u-hDr@|CS0q!8fe4it01(CL8tf&~3o62kNKyu9*oxP*X!X!WtptowK6y#DVZ z(K|RgTEIE8aUDkiQW2xv{jn(f?(d9)XPDi%K!D2-55S)UH;K($mdt6>&B1E?mJ%~t zWz07HJcI7Zniu)GmG9~`j5oQ7g|8()Cv&<6bA5WzV-6Y(Mk$97aMe%(1n|9gHp|ZX zCv~`(H|Yq;-!(R_hv7U}w{`X-lAbT=nE7tzorKPzZJnGcENU&{pCNFc*NcnSnUv!k z-CDPQH8L)9p!AhemdL;3^-?1U2^sY{gIbUf_N?ICu8AZT0kCoJ?E7b}koX;o|Nb1; z<-G_7zP9E*Ly_@bk`CBBmG9vZxQlG(_My?kNo4E46)8yD0;?hx{khJZ* zN@^75VpKgFD{C~;iLao4)&iN=Lear8V`k+`J$^^MGj~;LjKFv*4g97^?0HK(wwd%% zPA(0o1N4E70C|%oLs1|G6@kI~47>ZiY|AMTgYe+>GuyhaBOG{l{-P00M83ZE0{yl*KDab8S zVuJ(@C}J1i!p1BtEF^J&Z8?Tx!n+6XUO<618$bWBoF?ZadFFVCuknwhRUW268+`_3 z1ESzve|qL1-SGX_|Jrz=JV}`LOAI|sEJ0s%gI_6&6E z36q7CktR?8fJwnPQ-QZ`MPU!${bRdj_L-OtzQ0bP*sC2bH$U-kerp7@ zpVq?WlUNuVpi(LZ;~z+|hxf}BE|-*85{hNp4@8iu9sp7D+ZTZVn?E%y><1orja5eP z;atbMGPJhg>vt+UyQ%$A0JsIwOjPRNsVXLO@V?LozR8ON-?6_EZDzN4SJHc)O$Sby z_x$vwAOdTkO(h;>+Siqp`w_lmWUe_p(F?FGaKi?86BPNupnUur)SLAD$9CPAyZ6Da zLm*r*GC@8LRFO9rMX*T7(<;f&Ick}?kHssT|zPL5e5KYvYh)Da|rzxpc;CG1d) zsf8bePFij>upZm~_o$i7E_EIB7Gi)Q9L%zvxy#dg{((12ivg0M*cO3M%^V3$XBX-i zZ;`X|Dx( zqVlY9KL{ekwg(KMyIxR0;FX~*Mgj%!sS-#K9Y2Lyt>>p zumBFBTM<^ctmYkMxy@xVlb7s=&g01b?qawz(zzr8=7YH386-Rvi`_>26Ym#TBXwY9 zw}+RIz4^TF+oP75^EdN9*Zk9H&rjz*3~vUuXNKv3mV zMudQEstw3g?3vy3uO=oYTF8HVk0YnM&HJu#^4xuY7rv;CC5$mJ09Sw9a0X;Lm`T)K8lntJqtVZ+Ja50Bf zH}=%soeq!pJ=k@MaY0ZNwB802e+GO4&H|363fg7Y(a&I6DU1I#h+6}0-{w~aKzC#O z9emst1SAAw!+;DOJb7&p2!^3x2_F#fskb)~UR)&r{n(Gtk0{b}Z{cG-07e9Og^?po z0ogX6eL$MBN-ah?CxDzN!fzm37rdt}jzcE~_fF)iqH_^o3i&8FoAOCQp2W$KdssQM zQZkDFdI#Zfc-^w2qR~!MCH*AY9ZtUZOBEEeTJ-pxMd(LrvS6bJz{;tVKag(AIghc` z*pIgnEMu1^Jz6<0G!arv!u(7S<0cSkIe+F>gaiLyNCN0wKxx3NnsJ1A_5~IOaGzaq`|wj#zx{v=bUQT_?~Og4S;m5);vCym>^AOo7ipr27l_?=(98xM#DiK0TWh_Lf&tvU)pI+bZ=P&s5!*Qtge(vY< zzSp|ebzN)Sy|lHb;^&Gsd&+nkZt7GVc~%z&oLBecm;^-_9r5#4mBty`+&l2MB8**a zvG!WGaJ-{I17`oDJ|8lTT5eDl5AclJrvIG&oLM;$Qd|Gz^S{rlg1&0))T*v@s0r+344+T<26AE0P^ZIyG22t| z@Mk=BdF5lKQOAhf93FjVjuC+SxMl1CVoP7EOJ*!=M`!0OApTUcRAl@5Cv|CG65k4_ zn=(iBcr3t493!~gI3rdcjyCmqKjkWPS+=lxp!T)kBu-OB3su!{7{z&Q#>bpGbr0Jh z>-GRiq-W2b2?w4aCJoiqJ;sU0@`Mi@I3P@H@JO$a0Ye))e-PfNuaYD*gg9ZpdsGGAq4k}l^&F@vK$a|r8m1?P0P;__y8tKF&RZ2X@46l0p z8@;8nqeVVLHWNZdy;tYXfAZGe7MW|QJp+L?!aeT+9>PL;lsCqlj3I* zY$vUjtF|OH_YsB8`fA#wTsrldzGZ(*H*9XypPRgSVTJ|=($gph{ zmDt@rG1W{ij>mX#o}V(NFSvJLop{+Ok$QINa(#{wUY!;#TBsWY4R=4wpbNie=9t(U z)UQvgaj?839AS{d+G{(~IjL?G9S$atpZr1?ZYPmVai*t(hjrisN*{9J^C2n~VSJhe z@YdsvjC8VyM^V7j+hh-Hm6L@VH$Zc`{cykICN2sOobI^w*SZywd0`j@SVukmo#H(Vhxn$4g@xI3;j(0y2}bOYz~JA@B>s{up0=V#=T5N8<%NkvhUIVE zi*So&ao@Wc5LJ!IBP%$Vi|t^gIJ3Oa7}wJ)Aem%BqBNN@C9;$DhHo?klNI_noZC?- z`XAtQ_mX3Rp}ix2ik7EqRN(_(&o(||g`5C(1wgODWyxB1g`*{Q>3Wu*;dP-ik9&MA z2`m%B25Ni?=iMHj5O{##G0&xf07V~?h75IJH<|0S@_i{%AULB4wptu-XE29v=v?Nn1>rF@T5Na3rK5ay^Win$rwzez_{6QaFSI)I z1PZ}oRO|ZZ`eC~xRA7Tkht6)ncYeWZ!Ks5@i)r&MymDt%78n%ltg&U7kQ%;^va37A)Q(6~0O79( zc51-?jJ1s9`Zohzi&!vT5ujmy00z_ibtm2BM`gyDx9!|os8p?n7K8EpF3A&WBVVA zOf`BTS6s&pKpDU1t7c%`ieL=4uyq%FO0e+ALhQ=(KGho)z*zfD;tfE>ohiyHvW39AEjoC6 zGDs!eete#DlhC52Ct5CO{-=t-??gAs>dOHQObjp<(Fv0&gdiuJnG*^>Z|Tq^HVAA; zD|L&uZ5O;T<@u}R{ZXCNx+=}=a?{A=5<^&&TP^?*zrG{R-NiXR6^tdNEAD4S7yzLN zwq}>oF@rU;l^s5bu~n9oarsSZnI#fKrjk)Tao_8DRa_EuN%<{uIsjwO&4-ltg>(x0 ztHS_IB3C57pMbTuv|%ee5k_T~dl?Y8^Y4D86DopgQ?OW_HP8OuR=4NSq2{FI>4?iQ z7J>?V8&)UpD-N(Z!U^5fej&_kJ4&pJ81LU(_Q!=76c&*1ZbBlvsSC!gEpFT}bptSQ z5hI=1(kVKik(T|f^qe--h|EO}Z&0t^WYXC3cTa|2<}B6*jT>i3I|jV0$hj<~athwQ zpHny=moarPX&0CWSejFc%pVE;A<**lDTB%v?@50SupAdqp)-%qj9_hEeXqLuDOT$Q z>K-KG(<}SPV{sf(t<;K}wUnk+9mc89*+q0<%Kt8PK}vGhoFn9jw-%i`_2-iaF3GCN3=E=mL01bIrQeeVGOZqVlKY%_AaGKow%#nF?BdiTQ`MmB@wx1l@&Z>HE1= z@2UE*v^&)?U`>LcOn&dg3ELp|#V}}|i#xF>pRa3Z6UaXZLF4xQ%c-AFVoh~suwo4% zLgadag3^Kw9VeQiXjmy3Yt(~M2xCVhge?ZdK^J1BFN7)v5fKzMY>=Uo`@=cEi=J;8|)FkioY>jN!= z6l@~ilzB<5zJB?#JB#U>M)*6XP^gi)j!@eeCr2a&x;RetbY4DwV z=CR?N-zW}x(Wx0jaTG^lIaLgdu>KY;M3Hc+rD9Q=Dfl7>wt7E{>3H{eT#=8(S?S&W zm#bMG%lo=afZe4IeC`7krm)d&o57)g{MGLK5yA#K<7M^vRQ34<9Ku{qN6S3i1MnNb zCT`~|7O^PKTCRV@xiJkT99EzGZ6N9x*alw-%&oPR78s+i<@w1Z|8%79sYs3n##cPP zo}n+r;A(Aqnuy%DMB|4%ipCzpz`^1=HLc`yVF#XG=3=SdMl~5-jnlllq(&xOxOnUG z?GRUW>R!%@G(ULb#*Kovod`PWoW?zuyQffx)UI8(ZZWR9400)@*nmdn6G{XsR6iddALh*OeS7vhrH?`Rn^qrKHHARM z{2;tjB`l+_wQ2;$Q6ghQA!x@Estxs49%yzPeFEt&poz?CjUfip1kt z@wGq^hE3oVa*gU+`u+XYDeHRkHh~X%`Njx8D#k`qV&Q_TUXKman13_R&h7|f+3Ek8ZkOx>NebXHpZZ z0#DAqUG{YFD4sSFPp@<{WS3Rn-VDCXc!zQn|1%8#(Lr}{CpB(jsj{Gq>7xkPCP+-J z)4nP@mn?o2UuE;m;l|Gt9{~=6$K+JcQ6!3RNHe;+{CaXJRSf_ z+d57KHFW}6!Gy|)%&@0)!*3dDpi${}A#`YT5GXvV7 zGztP~i6dai(-FdFt2z;Rg|UENRtKB;v>&QDcy6tsi&^1rZ(|FD)`5PWg*#$8lgnDP zX>*jU(hKxE_YK7$JwQ>gRzDbum~z@yn2ivB;CupsiXUmvv?*ue>_PqLO`}lzk?pMK zBU(*?QS=WAT2QDo!jueX`=7n|{h0F%uaO8v@^zpAl21N4-qOwO0;)^$lO`40Q4flt zn0Bc9bQop|8J=pt3MaC3i|80N48j3{-2UKHBl9^%sdV>um+cCb zUabGQbl-R2F}WznPOK|&?p2Ur4wBJLqb+PZMUf|OeOxoB9USd6Idum zcJFQjb1+dDe13M1VUL=QyRa>UtSX;x;JoB!<;V0%7)82Mh$Y%A;^}8FP1C>_g+~@* zv`*tXYlOanz$+r92r0>K@3UmdyS>BeSsy~vkP7AJCHJg$x4Gm-bued7VII_7dccKu z5tj(hr~I8)Wkf-U`^2=zdwf}p(UEi6s&M|d!6AzKP&PBEq9_}(z?h+Z>}qH{W3HbG z=@GH6n*mVh^r^)1TPcjL5Fhu7XV+_slPe_V&Fj~BxH^Tta<6LX~f&3D-I-jN7sn6QghzzSBRTgxVD6@_KTs66lbSUU6V$99h3IBdnS^<@Z@9~ ze?XxaSz*fT9u9*rA5J;Ibh)X(eaDvzM=c&oVurgsL`n|_&B!yv!!DkE>DhxvQmDfW zKYAVgX*(v)a1bVsfrVW%mpEpqZzuq6USwmJ7?IZ{tq_+YR z<}cxlz-*jRVow4v_4R`S#V9bC+%Df049AAV@w<2aOv3EuR(+3A@fIH3KH`F13Xb8U z@XWf)p06Fdy<@Q7ht-y)Ebs#RAC#D-h0W#qJ2t51j7TWO3Jkm2RqzcrQ|40=KaN4U zC(%X7c+x58!prejMSpwo{JFXT=--rE#{6Mz@$bSixp7QV22;g>69Y_|TVpR`hIW60 zG=K=o^3Kw_wH*^+l>{;gq$YtTxzv#kN@!c{^oNvB#hCh#;vt!(I5N2G6{6$p?Cif8kNHitS`}LHDRc76B)Q&A$Gd$hvq-cO2v} zo6rUc!&%E`Id5I80itwLnVv5wmwE;#jd)WYFwHaVae?%*F@pCv72siSZxxgd zqm?VayR`i}8rpot%iAqyVh~`g$@ZE3!TkjCY~My)dz|0qtIL$6xO@_|Nn5sW&*IjA zApRzb3_Pf6skjq5@&qtPxKwW48NkD$v+-A#)bna13L!wG({MfO+H$3s?Eg;HE8U9v z`YCS7Vi{>BxsY5V6{yhl!Upc!rv@cp&m#n+qqWpZ$xU!3Rib|d_Ki8;SUlEoFP<;? zPaI507cPx5MV2=4U+MD)@7jZDt6$XkB*ZjZ#oRmGiyecQSvw!ih_aMyMUS`vy#(cVOGU?@Fm$(Ky(WjKu zIRi3}LUG8#li~xwWILnX@4xQ{rHG2B5NoqA3vzNd_);_kbgyu###m2zZd{hx|6EoC zf_B(NpJQCOq<$ndf$z9YX)o@U&M7Z0Lfd1V*o8#iZ`KtJ>V8S5b=F+_W1NZx+QAH= zPI;W4Ku)$nPH1G@HF32|K@EN077hx;l9!vy;-;=83(wp1N_j1#6h4RkZxN}eY(FSe z0ICKVUTP5`rbV-$h1o#syt>c|@>kCMP*2Rrmp70p!Q;?771*QTfT@ek`qqyGkyx zwJv{ozC{rRa}Eu*C@_CX&iVcFXi%r6GDY7Kzl!0Q+9lGB!gqvXbbAvcD#C(7edVj> zR=%iaAjoq?RGe{s>3+15eFRLwG?0CPvXu!JuYetyEHr5vpyz>qHRWUHslxlT#Q`N% zBblq`kRcD!7{<(3+|~a{ar=?V=mNMel7bxFfyEy8NWk)QvoFCDG-%Mk7^O;MZ;O+Q z8E-NbT^n6G3d5Q`Jcc5Sr#v4=leF!uYp%3qd3znK2Asc+1>s6Mmq^akhYghThtXIQ zp;u_l3fNXRufFv2a<2q27&wPU(Ed~;BoqsAUHY|$hmIU6Cgkv#=)WK^rGIC=5W#IW z*_#%J&Wi9F27%2;hRz1SgI&?lPK$3TnbZw!(BbZ-byj}nGE?VI)-xxL_ju)5dr^m& ztDo+-*ROI8mPA7%+CvE8=t*ZbY)=re;kbYNhhZfUpoTcnyL0DjY0FB2S^N>qB9aC# ztSlNGlw`aA{;E$~qVfyKSVu8#J%dr)FzFd-Q%a;&eLgr@TwlwTo=(%X=X{j+N_lOJ z0dmAC9<$_Wi0ymJ(~Q^PjI+B{S=~%^nBjlz68t!=X;c6D>$+!FOAWKh#QcPHW6H#P zh(YaU+Q5*WK+(1Xti357?W@3cs9+TwMjyu5s|wxMMO*mc+CU0{bm*;{pd*Gl>L5~O2O5Kx^~`9 zKl@Zr;i0*DI|zY&m4+(smOpQk@-kfi0;a9{{$ZRDbW$F`fyM8odZq)QmzS59xOI+k zn0v}`m**mb$N&R~R%+DFSlEZny@PiQ@0%N9lVA{$l>af2_lFXUz6}2L!1#-G28!E3QjZi!=7Zv7(E)~}S`aB$VDVGW zvfzr+(8@f=8F3|2sfkm9nF!+z4Ye+IhiUSv{Bcg^%+Q=71!5X`tv`s|a$>{0MbvQj zVGan}r5aB+3IdfPGUATxC>0o z8^t!rB%DMqtTWgSNe5MG8vgvPW9K&M{#(g*;sB|5CPBNvq?g=vvli6=*2(c$52sSy zedH=frmZ3r0T3jA08x|kmwSKu3WX<93JdGyj?c92kK;PT;jUpxiaL}jTzdGbUMa_v84-?%8MMKG0!KX|(E9y#Y!FQE~MHH3LN zQLv>_^(V#1L00r}Kun%_y{(~H4zK!=`a8$T2S+-zym+rDYl>mpP!m%ee^3|kL5Gte zY@IFDW*vpJ&i)`-pGshKzaxU|-iJk>S}u3B>MQptRKN=MxJH3=ynt8>sak~~J)OD+#gd*c%5kEmC?+zwO-y?Kpz>E70W$Oy+ zW6sJ2al@eeN9#!0&F#3InK{V9sa61aq6Li^*I!%m(8c%}L2=UENz8~?^^m%!3!zQ2 z&^CACC=qJp@lua}&hZ|~MV_X)bcyB_#_VBRo)>$9;^x@Qi)RzRkPAP;tMN}nLZv#4 zk-#p*bu8I-{G>_K2?k<21cp0s3pWdmB#mx4L6z4V_TPP9YBZG8tz%!*vQviK*Q2WC z+{k#U_vCHEh75VddrV_dy^Xypg+8Q*df=i4BQc;!XF?Wa@rQqFwhF*j3UtnVZ7GQf zw;GabQHTzG%VM7pg_l&M6*%jX%PGRY-C2Xy35!KK|WwuUF|uQft{EIB>8* zifkK>!KnL0nV(`eRUwvyTZ(j(`_2VtzV%n;*FL@{pL-L86J5C7+DmieHXM^aCeP2= zc5W~Ir%%Xl^7gx7<>O`=?ONX&cc+2bnudm%dpaxugIT#19^!|OTMk85o(^v9?!-hD z^KUa+xP)zW8B%!8M5DvC17h%o$dNXzz<9>Z-j|YZ=7sw$0lhK%ES=REX!@>*tgEjgS0Zj~5qfG34yiohOeJ{LNy`18)HRK4*N;&j^_ zdQ^A9lDfOX(04`{C-UC~*Voo(0jFw*cntb8eEO2a;~UevX4LLD7FVjl==16%tZNHL zyD(9BLOfH@@pxaFFc;45PD%C<*OD+fI!a&>WtTK2$uJVE>DNR8l0Lsxev=WSL8 zI=6S7arjs#B^k3j)dow>?T+9o~Cf93E*n@eorV>4okx@LVU zE!7$p60o#*heORwwZ7NRP;+8<_@FJ+iYowJi`M8Ck7=oWba3#0iZt82H8H8g9R+Nk6rZdJciLO>|3-WXhO z-@7+3-GeK}X}Re139_v1tga(QRD4(?>Daqvb*j9T-O`hOMt`R7@i_t1-@SYHxZ~|w zww$*zC(|e2G;fi)j=kNd;g$PNKU^aBjA^O8aeHOkT!P?Igt7j2Cu8Qf!iJ`)%Jd@b zZ*4JhY;XOCJe|njszaCtO%65O(_#C@jV^gX=5JQ?eDgU$r-p;|tna;4+rOR=pBg%{ zGQsE>W^PGX!+5hChL1-QzJs>@`R{3nnyR?~G~q^20xfuWCOk0*Eh;5bngp_!b?Ov) ztD&+#%JiRV)tK43e=_uvw*mIbwohF`-9W^!Xm#S{SAE`m_R^EnRu^pE6Wp+IW6!W4 zCV1QFdfedl{s}wA9jmXmO?h*Fl4_32mnUnlg3+ax&siAE2HM@hi?E1P?D4cc z4idMb@FN}7lmwqyo&Wjp6R#Xf-u8};e-^>F(OK=V;Y*l3e|ba1>n-UIHe5;#cQc57 z0ld-$VUNzZ;Q8$=b0O_3RvdF3zkb8Ex_W0p#3GD!f59~lR^2nw>k9j0?%9d7z0+W} zKvOgxF>c(s^YN^w0p-hG=~)Ndh?L(nP&xm|vFZO@RqcqKzL)JfM>|Q&7c|26xEPcq zQR5GF!i{$7$KGNV}BXrcNtyQ_fuQOBznpPARJeJw5?vps_U zTbOP*t`Aq{N#OyBlKy(HkKg46_i{FST+fW!7qYT&|LXOTrI=m8Pgh?{)loIxNAZ_RA&!JK_d_{ zFv2%#QU0DC{pmK^KC;4$>W+Lf*rIaX+lph;PEFiqQ&;2JL-#{514^_GJsG&@JATP< zAm>kEB+jM+lb|W8!5Q0>wxu^4*U>5dw*Iz@>7BO^68^d!H7saxVKdY2Fn7cd6Jo(> z%Tl#-8{7Gem02dr*_aF@3I1I$N!)XLW#hiLNAk6JE0b9+sZ|wf?*8SozW?*n%Ip^_ zRw_b{*gE0Nd*j0v)c^~NDa--QVW%UDp^OritWpGb7};g?h?0M%7Hm0ClzwD;b|F-G z1lBuYhWLGPT8a;pJf21fdTU;O+4*UPv**>sP4^S7qwVO-T%*z9-=eka*3HXqwu%8= zSOh9p7s=#r;=eKUgm?fVa3eQ8(;sINE)%toB$A_(ZF6gPbVkaaM! z^1BH&V)o7|?k!KddRmJSO$1AA1f@XJm{fcZP*_*c3H^uz|z#{`|=^p7YpEkrDsrFHaO?E z7}O}fi+hag#5|ro{vfi{QKXlEZB<>*9h+B+rwJwvXuCnf7oHGVIVR<`uS?v=e^r*n~jMs#4|u{{_(#J~6}U7&$dyTgjML$ZOKT zW~jth*7II#{G5YRb)EW9N$_e}o>|hH**Z<{ybu?p)pEL+5S!-6R$|m_z&8ISj7XQ^ zTSD_PC~0<~63s{YUbEM3+qZ*qmn>bfVtUiemti+HJehtsbILc1Nhzzx{JbHqyvq0q zm%c4A$EuNz6G1CqI-CeN=DmZaG5>=W;n9ar3EzO=j?qnWuZD6FkFvT}?Wq799*OsA z>9gyKFi?_hP;~S`qi2;UWCKC?0+zrLybGf%UM z8I5~^+fzCH6iN&LwF61@$_$q)P9Qa)PWrgF@XLS87Tj&hs!DR})_!$3NLC=WIE!sDn_Mn@;*1aRDy zOiOKeC~+9lP!)YTs^grwh4OMP9;w62_98&+7r!9(-hgdNVZ}58HbU`skVwF41;fj7 zoC3D_7BGe5D66z;r>ZqoQm|^B2DE8}khLFQrFh-A_!1xK>VQ!sE>9G~HI0c~s|RWZf))&p~0xjCoDv9r5zzx9q|P{B5Dk0>PF188~s zrHY}?56TJ6ftS1ix3!s+ewaf9&1Hg(SQ=%ho6wBXT88r~g3l^4RAT5enT|#jmFcUf z&pYTv=_XXo`!V5GmoEr=MQW0&R$%s_uI9na@ev0p1W-)Xx^iu%T!g0Gu|xvO#j;A) zldf}~q60pBw`c2GpUz=Tb)!c~3}6@V#q13Zb{eST>$SDbz`s~=yO?(+rf)*AxpI+L zY^Q@s{B@Wx%Q6`Ckw;o`t2OtDfWDp$^ojDyg3WhDmVK0 zWI$5%g*syD#Clt4f$byHp`;N?Ax(mB9$%cU5W_vZ4D*MV2vsYRJMwA-jyOKBZF~hQ z%|Jm*kmE=_xg`0@-l{CX`kdlQFi4DJ1Q+g#UCcc>j?=#g1C0z{f?*MJ7R~D2lG?I! z6=Cj!w$(~_DBb~uq6^JAu5NC&K^M8LLM+ShU|1z#S=SkpJw_>*N;#Ycpji|o;7s!zNyQGiPk?H3d<_ssb{Wf4hDgV-;(i;K@fz=qsT{=Hy zN;8A-1357>9KleUd0R~+@xRX_?Mz{InoNP>*A{>&0`ni|X8IF+OXJk-!Y`vj{1~1|Sty$W3RHTj=FN2~yL=j-nSgm2P_gm^0ujwHXPAJ4 zvnR32#jykM^&#i~J!fY=W1tltkb~lz<_osjU zo!*>jS66w`iVdphU-iS8F?y8uTdwe-5WBrJ8^5`hgG7t#%E^B_CZA3P~=|Fqe%{x>W@6|c^${%5U+7%C1SqSA! zijcuETU}|qfeTvht4zzoy&nIMOD;g&><$wz@-P(nEnxb6KI5lUTbSLu(ELhd13{=3$ zAws{w1$UD#NE0Wxy|k1(346jGVvt8y_BVmE;IriDkb0Op!Fwc6Z?DPlM5&?GvGs~U2<9WgB%wa(wSODW>!<>P+Z;PI0L8D8Egt^gXf&+ zepnWb0yVoGdBHpBow~wF;BtR4Q%)tZG8*Ur4LbPsBy94HX>`8Fmy;KdA`RzlqX%JXu8E~$Y+j41&II1p2P z?7jcyEHQH$w6DCQ7|tx@UI{UZ9kFoh2TW~ZI-&1Ve1TGn;TxIv(47q+qzooR>C&0X zdLhDCvJYjhf|!Wk6cATk(x~jli{B8d^)!a~(F{y=I1zH#lxV$5A-hGya`a&X1;^+l(rvL93u@4Z z6@my1Aexf>vD{fOCsvH1JO~p=chwg}da2(JkNx0ParNRw_jnG^OPWfnybM}E5S6xB ztfT$g?Me3fTbh`8Ic1B!bZQWaq<=}C4(&HXJ;qBEO{MfXE?9%)FOv$9S7oKz%y>b& z#0P`EDCW!t7!z;FM`YuwDMzk}jbCF{akgEkKWUZMMY49x)mAP({*%{4)}MCw#k`!yZ+I*5 zcgaqa(?_A*kKxb2s}xlJvCyw@{ah#MC^C@b9sdB`MMidFv#^5cl9{Aak4^1m;Jn9- z>zz;fGJ+}|>Z}&`7uQ*3(3U7(gCnTmD#Sz#k#i6qnO&qOP)*%{FnmxxJqNmq*HIkX zqUQQN#G{i19TK?AFb`NJ#c&ZnV@hgtd?rl)q~kL7h-o7V^}&PBxgY<5BUar&uoXOI zybB$Xnv0uBZ{&gn3j%ax!P1d%jGMN--T&3jTa;kl%-?JA*$QrO-@WSJexTTkc}Wlz zj6x#autY)TJVw=N+R-ERa;5g#N~c;+*xJ~sR9vVUI*B9-d@c+zH2j?>e?86Xke!)lRc2 zQ2uD|(M$Tl4fa)+t}V1JQ!LezB?V22zl;g2MxSMHIHHZePh+pV(G>!vv6S|HQJgyB z+XUg#vSYxDiZCK(F(jjHR(pJ#1Vx_O0TI%%HO_Oll_fuut7?fC3Gxk7)-!_my}hW>Q&+NR1YF=)y9v%KBZZYHTUebXXqlN#*LKO zxZpr;eji$s)0Uk!qS+3=-F;FTC7NB3y9{)se})lH`d&Xi?P5^lp7|C0yqxPGeMSNs z$>UNGfvU9U+}P;;WM$nvJ3>+hjS4a$0V(AS%ELEnc^W8#RE zIcfyQLj195RBf`SWnM>7NYsUhy2Xyh&qu%OV_$sqN7Rx0QC+wn8=Poe6g)z8JUCG1 zOd+P@7Vc(%ms!CQV&fi0pEu%4bSz{Tx;W*qx4g}6|9{YW)mY{B*CplCEVf&2$J@7y z3x{ma<5{qn#BMJiK_V3HK}3&8$zBs2hzL<)zGo{+*(-DC3QgZ(^|ZYZ&cV1ARHajh zzfN!Tykjmn6>P&ADbsc_=t~8O$;CE{nvHJS#kPAksmpvY>By(GWVZj{;&kC{N={Qh zi}zIO5-K!;j~J!oYzjzw-{obEJ=kWc527)^h{1qeDcm~A!+&cmx#=i@^x^qs2Qg7c zQgs%5-tlV%oNRj*{X=zbp;%2TSLVjmkjevH2ncZc&v=V3kazQkF4O7uO7e^SnEF}1_)t`MaIAXtS4dHK)=!qF0whEDW!h{K6N}|4b_uCus)m$ z5>enjS!;XLy{I!`8=lxLnR}${l10_>_;wL2Bh5-+oL)GYc^K(DFeXuSVEE!Owx<-; z(rHZ|WAd~G5XN6!nzMN~iOUt=ODAF0ktRBt+NQ_^C<;YsZ-*)si_&|8U$E$8dnJl6 zwZkMWNu<{CBjTp%;Y&zhJvQ=#0vg`pino)*$X5gR^5_J@-9 zTh<=?V%ph-=D^uPV5uUE>zmISX4@`Y+)3FhEo&=cj%Vl^R&Iz(|H~g0>hnAnx>)%# zM#7*iJTGhBIhIJB^pKy)gq3=qPDOiTCu)}Q4E%%a`P{hGnr#{>)am7sStkH& ztT>Z#Z)WRK`$&fql7s*qs~7B!{>F=!CO* zSU{(*__-9?v@S_`4vWy^>bJMUL~xUX?v96&D{~EG&^8YC1jH5Ddb?iEKn)Yipdt)* z+9t>y!?4Wx8h_!NZH_2|G*Tw)7lKatl{Z`fvbW`~fPj@xbwEBc_QA%+rk}c-p7#9)xBNgmbptHMS#&Eotb9!BlXl|AsD$toCXS9FAA5mQtGocG zvsW;ZZL*C`SnsJvedh+&a3IMXM~bo{Uu4P@o1&uLg>St^%Y+CCIRwi zqoT6%PL1DMoVqdXj^&}FM`L@u?He%TaBjUspNPHZmo70f(RO;?J7sw9-)pyz)oEc(b>sV#qk85 zzGaUdJUGcn5W>Nh?1i?N1otvD2bqiWn#a-~s1>2j2}e7or@`c^4qK_glRpgIk-TSc z|BTUb!0RKZG7P1EwWN~=Sfmf53&XCu6-S+87=x|~4(k;~V z;5~hAF{8ixUl~ySmiSiPl9@)qy8eWkrFbDnl)vgqk4rM2;0vLoMjK9fMB}XRpjh=N|(szc&%ugZ|p5SR4G|ZewvM; zbI8!4&tARSUE~z_-znP(#p4@4<2fl7Go1J~PnVNR=K`T3XI%~9?G=pQAT^JMSZ5^f z@;49tA3S(4wJa;jqP1V*7<+sB?lzT`IhR~zw9=G)qiUe78&NX2u#!2JycxAXzzX2U z&i=DP=xiaDg$#>&%l?-MuRMHOClyoXZT#*4fY<;pH;`aV8FOdYyGx_doXv<2$6{#K zdd8UfGm9Pt5Z0cNvo?X}{YHAN!p89G$>m`XIjZLC`Apwy;RZNNroB{pXBg{dJG_Mn zP!w1jkR4usDRl<+(n5X(W^4ZOO`A8%D6RHG9oK@cnzw9u6LR-&xZXBewv7mZwXGR| z9Nuv!v`rV|$3h@xFJU^appL)YN?(>ae|Dlo-G#ippm8}h9& zv6(p~|I!umH$;v7!!y0c9^AnOhPP;E_`;d3Q?EgT>-X;MU_WZE`u;_`>N7Du3rZzu6z@O-595V0SC!b_rf&=vbUpYNQPZm5;JJTh!9X%9dEhJ0cKtv z^_w)w=UP?9j2(M8=r3k?b*bz}!G3^3yuI%7dcYA-WfHQ^HRv!|rQm53+aq5d(il{e z0!Xb_uT8WG&D9Jvjw;NK?m?Y#0118Vh7BgfBb8)ZEl~e#)FBm4yUZ;vCYYYh*)!aI zC3I>HGcXD;{0Njo%%_C_*%8nyE5(u3S&M)gqdm0n<0;q<}-t5Y5{EQ;?%;LvEur0xqtxEwV zm;&RdxH+G-JI{ux5?g?lGu|$9a+(XbuQDM>dlNp^T?V^qs*>g+$<| z8UFyRO7_j#nUzFE6b=`X@oy(D=$ozEw>M?v2oARm#AR0MJ3Z$gMBlz9U!YYNwKUY% zw+7iEvJar!kcydj@ncJ`u|x^0^Pr@=gn-kwDYtR;f1w=#JXVXIUyt|K>T*8DTEM0g z1N4(8eu{x||H3?VmO?}J#aV6V%52p3Ud%WmH>(3gRrEZ*`0^+RQVKg3+>v3|C(oVh zp{=bwZH+U|VvTpI*z26dH6S+wXG=U;`~IuGtb?ClB~4!)Ddzu6{<6Hd(ueqG)}j6g z6b~4i#b4bBI*f+tK)oVfFE|=mz9g#}`{=@AwOeGi?m5|;XSs}fS2<+Gkl`L+7C7D4<>KycaZ_^!JwPnx78+*0wEwOps!xFe z1%BEGMrxFFAqOtwxFBfv6c%ZkWwi4iKdAypu504v*S-Mtk^>R z;YbvR)xAZnntjo^Kki(Yfj3!d2@N@wp$$h5*IBcg{B=+EU~+bLAl<#z1KPN}&#gh{ zUh0hrwL?~Ax_%zII4@y`CCx{@;ZgbmRL2lURn9vVGy(p4py;vBIhgnwsKVBD=}I1Y z_y~8%k3FQ%8o5P91H?Y>J(cYR$ zW@n%2+vqO2i_4E^igo?$4bDF`JG)So{FR4^g(Gwaj4oZ(T~{}V$a#uUW3q0*WfM_? z6F3D5pm#sg+>cHZ+wqG_O1Aj;#FV??D>$<-TLEn;XEx>!hkmHLkKYd%*{))npI>u{ zwZIo|M4D0tEl-Iw8wf_=Ahti?bK5jpU%6l;J3Fzxq;5zC%C>(XQO%Cyj{~zBkOY^l zTxpA@^X1z&yE%tTlBo-qIyrSEBQvb|@aB>3_WcP&Zqx!uO&oV%pqabw#GzL=wI$c$<>nCDuI@*J9U~wJu*MzSW7}V!2cw+ zObSZl$5=mC5&2dhi5=A7ArJ=#@^K&|oM#XitiS zH4byw#v@6mJB12$&B22&DlhlsqZ>?T6wYtCK)bV+7Xf_KxpSCd!l;aO^e0LcY~Jhk zESp5dI^0k!f9~pFZp?V6nOq@v`2diS&1W8bO#J^}U!TL}aOKBmiwO5&D~fDfClwYK z8-iBKTdMzxCd84=CZo@@(JnQk;@ii@lwg3g9mt?=9NdG0_E#7QHu9lc5`& zh_`1!3el zV#Y%P)!}te)GU|2-TgTGx*n~U1NWqaKTkcJP4~rWcqGRk_N@)@2>$m)&g>}IT5D!n%qpI1<%j>CPsaqHF_)&uSm zwISkC7|O=MdLOp*pTONnGvc%2V3G|%q|SZ$@^3Z+o4BcnS{|k@`M4YAqCBvYdirSw z*x}*U=eDv6XEU!Q{5b)zCMJZsrdfUpg}_qwwq$EM&+$ACXcOtxekN8^7U9~c|pNm_+ebe&~-i!RAR z24PNH^GS<1{E|DhJ0)LxPm$k*<;l^_gSq`SUzcP}^3$FHvvx5>)L^nDUF#OfnHZK>&LNgc?HQ5E0* zvqp^gl3R;e9N8ylugUO4R_)B^$hqh&Gef3OgCwoZMVXrd0B#g9n}Flu=H^JhK~ju3 zfY2o~&NIE#1kh4XFW6-lCG}KyCUzkhCG&xntynRS4IjR3d}^cAZSy$xQG*Ib0x>sd z3WvL}+X``GW|UL*o`xw+)}Lne7me~fh#Q)PTFm2<_Y5r{9R=Z}Ve05!Z8g3#sZbDYi}Brl2wB1}Hkh;zCx z?MMj$_3r{@Z)IfYWLS~^#6bNW5$udZ);4y#?c|mxLMi`HK>vb>(&(YXzSznvlF6Vt zZm)&|HP>cNmsf$KJUyXy-8Pyw_0W0hNVUMwd(L3pjx^>7xhI{C^Sf6L!?kmy6=CMr z*Y{50oh{i=6+PGwD(7QkcWBv7q*{<7?P_JkFz(oP}3`#YC`$_UHJ|N%DD_9*eqfls%i1l0TD5>k{1?SQ7*p1LxuUL}88P3xi+$R0}p-XdBFr}!(QLb|LPr`h2fusKVt0p)x z{N=S%{7$oG%~awDieK{lCJk|Z+g^o`HV4L3P$5B(d7CSM#sNeBzMRKXBOQEsdfZ^* z#Q5}dKW>CEY`0{02TnUpJmfc))GacdH$zeBr>(_6csNvKX6oBv+F z{$2^kPca*L1jphTzJ^K{q6H{p{@Ab2^nUOee}jAmw)yzID0JG>;k$R=*ic#OIq__h zF=zLNHc{QQF`>8!RdC3VA%gt45$0${8SeLh4&0)Kj67Sqe0d(~1b3y5cmFG2{*h8A z^TPS_&04qKkZ4nLA4!--c5e`)?ZPQ1ym^`|>Ctla%bx#67@2>3kCt5%ykB9EmWw6i5 zy7Qnge|_ckT4BZp*6)pjO^_TTEEr%s7&#;AIop`}u$2CWX6@T=W$k0B0QzmkZSY)4 z6WH>4sh&Pt7u31Ri<9z%;o3XgJwVVbHU9I00=t;wG{^;XeY57Df6OpSbu*#2p}Z?mY~tOq<c_=lOaZjFv@G`S8?MtJi9Hs?krjSR3)_*O zvdPru@mjapd#VGhy>$MTvLn&69_ucDK47plrh>lk)$|GL7fo^y%bee7h z3`A3P^T)0Ql@u^JIXNyAofLCjsGuJ^kgk7y?WmkEw~WW8-Vy-MxGyOYma#5S`t}i1 zD9USjLlD3-+@^-?Tc(X5k6K2z*lqBS%6XR$UBpDVvn@GoG`C#X4F;X;6C?WrbevH4 zrz|mn5ODJcS(IU)UhkFG4edw`i?dt#hi3%^x1dzlMMU(W=f;-8>k>VZEU)K;TK0hV z5t9e!7H0p2(9HS3bMRj8>^*HWGuSw%zz_zY*R*3T*b58l?9!$KuO9b?qKK$AoH>a7 z*aCBCEi)|!${T@2V^_Xu%M_-Qn;9H+k};(!j265G|Gjhe*DVk?Tgos;39+HV1V%^| z&$kb`2^`hrse%L$&^v^Z@ri3e2c0!nN5N3-=bP%?x^aM@GZVC@eFr701Qa*zG$IV} zc|Xcx7xx~}od_iu8FUTAuW_{>&dqt{Ux-k~Z~FgAU;G(3TFJ1VI8U-r61461gmOEY zP+XtUZPI=psG9}p2h$FT{x|V+h*yOkAX>s5i)k4x3`ylIndrHra8Ud!*M0F773}Dj-}A((VSuXHaSd2*&iXiC<%z%;rw1243*z$)5E1 z>PQij06%NaWCD^@_~G}A4K1O}diMPJbtVpi6?b>bXMrG?)Nj-%jHC|m=s<@RLQ@j% zJ%QsUMhjZ3K9Z6P|MG$jL{yxN(HA!A{L*JN1tcTy1;o&;Hir$QLY`5}Sfhp&@i|^B za(g;^o@}FarWFg<^%MbT9J4@NO7iNn`+!e+&Wj*;YVcxzjXhL0gE5*OKR#vgE`qE0 zX}gxGyZUz`bG_uvDaJ#k7HQK)pK3w?Eq|QWZOr?;C@h5a-uiL|q}mt2DaYHjuCr#< zC5`_cRmqZlp$}Lrm#zb1dd<3`M~;)hn&HoxCEpNu*PX!uJ9|#~2hKq%Z}Pc@1N_RJ zXa8;h&NkvSk;6C^+K=#PgGx*=W#Y-nhw0V>1~6QUB5=sc*KGjk6U%f%89G>x92Yqw zX0w!35J<=@utRbDFhglz)f;+a$eE_~Efkl94~wei0IC|oQ1EOWy=d?y=E8~W%J*eu zNBHpY1J5W~De8=)yg*f7Fc7Ui(pc9k?u`_blr7H)FMIV||A5{XiG?~3e&SS4IwKLml-m+*u4iTKqQxg-IBbAJ zpqd-Gc&o-ZVok+Os!#aeF7!!*(T;ea#B#@pyr!tp8KP*h*(r1ky-v9#IhT<8h ztdjfg-I7mFFksy!0jUt9ZV~0p;aS98O(9_vQy>eCRVux2867)$ysrU0P-x-%3;grv z_pJL8flC^=%N*cav80sU$m14sXw(%x66!H2hPyD3dkY77L+JLbEiHOoCm{6LfbhZIN|acI))`5U)yKZ3xwkZF&|KfWL`)St*qgs}G<6FC{~2?hq& zN2*hgBlNJFP>zwuiL|#j{-GgBpMa}R$%KR?j97r}7DC^Q4%roUGcPQc_MzP=wkQVi z6jz#>i(G31rS=HDf;~Y2FdK*|nzOzf=J&)qq5)1lLTyh$oKAZ*P^oWOf6Mc}=w}Ei zfm3~EbEWfmDx})pqbnCuT<@qf0_F3ThjGB!Bn32vjYm`;#kj-__4fdPfv5~B)Jn#| z%}SCf|N9nq`|4Nc{@6a4$MW;_8038XK0!w?#c(EiL=n#2lBTljVa z=Za&7;+Etx@1XOFYELF%x%^RP4_DB&umKWXM#DXa$mO0_s zXCl@$&Y%L8ZTs78`Y$g)F0oI0!TpV7-Wi{{gxTZ~N~2vuS#l4Ed{Vzr#s-=_GoiAc z3wnr4FN`N;#4#=*;{pPokmO7-#2%?WV8DQsAM#6Q7qz1jY|+P5W2RH3R&@4O7C(Ks zRAJk=?aS!6!V9$p-~^R<{pr)n*s{8H>Xgvf!pI$;sXm>$c=do(CNhev4)t_AI*{t% z#g@lbu(_@I8BA?XShJ~_Y&W5WC8X6G!CW7L{Ja%QfC348qr8`?_n@ahUYm9+9O+zTKGASg<~>w zM^9SyKUktl#I#yQHGoFnmPI545-xl5bBj9+Uh*Uidtao*xh5p(C#$|Kf|pNZ%Zm0S zTs3IT)E$gGkh+POT~{yob_a+AeSLk~odKIcXFM#GTn1|i`7r-@1fBzA-x|3%Y72P$ z^N%O71lM<105K0r=6?QbL1!Przd9gi^B`?+q8$SO0x12tHn-z?#_e_X8 zB9yA)>ZR`zkVNJ>b?Vx}L8XO9LPwl)y+{)+E3tmuvCi%HaizE-)({C8&a~&Ps}ei> z4!4CKHpH`Bo40-eC6I$o#9q`wu*Ocy;@b~%642a%MaGE`YS6x@3F|}_(rzmX5`xdx z4#QgEkiiZ=9&dwY?Dgq>_v~*FN$CubV=b7usm~xV1o(qgLLZB>n!4z={GJ-RT~Z=w zN8%7~B5{hD-CE=yy8nC-6M6TookoUGXW1G{%lfaclBcJkVDpnF{zYU?drH!3Gi0e6 zz&Sctv(E#5%hqr5g8WpCe;6gM%(78?fTSPiZfHhklT4ddK)y`Qzo$LHqb z$H5?65xtG$O zBz-OP-9cs_&rv$pp&;gSDiqP+%%%RGA{>$a<__BPl>_6jtOa#D%Rq8e@=e(b;}Q2D zUR8L*z+uk)_y8$)XIS;%(ck*_-!(whWegRID6@Hg=H6APDtYLlL5i$AN3tzmhq*9~ z;h#A%paF|BjJ#54wWeBt{Qgu)UFGS_9<)cU3XoRA8aWiJ$?I4Lc(yx~4$0#>dG54b zqoTK{Jb6dgx_r<{=Pp$y+iRDQf||8xaRZ#?!clLku$ITxXF?y|#d(!9r2y<@=ya7g zo($y_qUXx&faYz6I@*lgx#KX*BYweTc9!623P?kz$1ujd@DKt5uF>XI^r~zma7}=*qsx=hxo8o0PTIZ)k56IPmD}gn1}-i`L_-3h#q+dr z`^<=9`ax%+Y2AHZl@+N`F_ubj@-->A%4f1ppD3S06_2OtGP2svjFP^32|3P-Pq#d|* z&E7ZV$R2OXq!08}q;WD3!9t%Hf&o%(=+Hni)bAZSELxE&mIJUc2vp`R0qDbGosk0` zTv*XZ91|OjNdj`=SXMhvJLt)`?8$M6NK(525VgxVr$?1YUpHjXa!U%8$E5+&4axCe zl@QnHsh6k9GnS$R7nBfsM*21{s9Z>$1FoWAS;tZK>+{62&_5os{~B2rJ>#sU`^q^9 z)VU$&gYw$XvK zRcsay9rJvRA&yuCC`7}_Tr94e3N5`wruA|7z;8gnnH^qI>F?uXwEjMNeiB4h0;DI& z?I55~Tu*pfGJEer=@9~)y>tW0DfHq~7Mgh9I634N<3hTQ_w`csOS~a=r>Rr#kGxPR z*NPntanUxtOiFgp1SoPY;Ub_I^>V`Q0jmK9a|g6R7r9><-h>sCI7GlTssOeVk<_3V z7Hy(Ww3au%;NfL!)x4?JYlVFsdH|}N2wm5ueAOqgu*;6Zt1F@5Hj(xTWId=-#UBQV z_lmfe?SBl=R?#7tN?i^Tz0D-5|>Eppnl*I6so+Ik@BB&rE1s#zzK zqMyAW^4zr7Hm0vgjM|+I#l)kgrn2UmkUoX<6n8^u97vEcbad1tCg7tOfUq3#?eXKs z_3PDBv4$OK54|crI+q61DQ!> z)-jAk)D|3i6Yr$BJz>)*simw7pLMljOJC6}t%mRr2?ZQwT7zeC=|g-w2Cwg=TMXs1 zsh+1R9>aHbKp5sm_TJm|GchdXzja(hl`U z0h9+tphEZz!XcAY8tMfnSG=xqk4HlK4$Kc>o{Hcg`i2NrQd4V1qOASjmx0%y{HyK0 z!i9A?5lPH6fo!2D=C{CX|Mt!=EKH=M`wQ;r$hN1n7^oXY&|o%Sdwdy5pD5ANtJq-S zJONa*k-??xXLJkoshzolX5dj~(@I6eO<#y&KiWZvX5c~|D-X-y2Bvqv=ky~mSm02n z?hw1Rtl^pfH`g3zp*EN?IgdrtT~kv*CZA{jq~u-emM#BA2o^eu=N;btW>ZzowYcF* z1@{9!S(!WXN61Gg%4mqhNo&SthSGJj)eMBkSJTi)c1*c*XB$CAo>*^Y%Z#{b5OnNa z#|aaj|6BQWL=TI)T`cZQ+OU-%J5RzeU4sG#g%y^91pt+Cfs7iB&vtKcuqc$Eb)%U0 zN00W9K`1lIb4*-#ypt#=F$~qBSe{fGllK)SXCpMZ$Y$&yVIkp7Pt)X$u`iXZo(M_u z|8Vu*0XhF~`~Q_avR5G^8D&;NRz@hLNJiO8Nw$oTdJ__%5ZNS2i0n`qr6f_3tkP6g zWfhIz;|!nM_vfGY=XRs(dcB^{a~#KU9w+c;2X@$?JN5u1TE!}L z#VR`JT6ODY!W6^b^=Q%+1FgTmyjzU7)|I-5!94jSGS`AJlQh;F? z;AYP){JH|_ijk}sN^aVnRtoA0;YDc_6#_q@2m`5}O$r1caHnbjx`qM@q>`diXi6-O z3kTAgL%cOT*sqbjeXep)wx4}`Ur?Rd^t%%Ujl!FDs~draE) zwD8wOYuXh(L@`Tu)*6^gbeNRzQ)UwmMTaeCn9;IrfDHka6%4r^ndBSS3Kx{b+nB29 zxQ;$fIC(m0BDF0)ZX)x_ODYSSihD#xk!rB%r4-5W&0n8xBus<2pGGZu2QCG)aSkC` zPPQ9UB&5tJST+gVCcIz6J&^hZnB|-7d6E|wG1bDN zu~2MUTAoN5VXb=v7c&bj>S!WzDSIiX<=Vx&AgD2?RHIm^&Gc3-E#Xy9g98?RdX5vJ zz2O5Uhb3zyR0=3cIs?t@>$|88x-nX!a)Wb1l~XNd^VJjr?Mv%}I)&DBGpIE9oYAt? z*GkhEn>zw+0fZ(LAR0kw04~i{iiE{0!Q4(sq}kk}&Ye1SN**+0ZDDofwHwzACKUcTk5LiM5P|S$^g@0rafH!CN-&O*X z04Az7lf(4^4%%f`Sx;b|FQhVWFeek;RXi_3m_MJB@~{A{{zcBWB~%q{TMmxtikSec z{1yATBNkAHOxm5 zTB{VltXTk9Xhz$t;Ef#44%@uBCi8$O2zPSE1x5qcxJTihtPFDZ_g9f;lKW!sl!K}B za|luQqND9rXjRw~1_kxN6pYBX!_?L>Vj1&-6mMmVJ&POOEx}!NE%njv_;=9lc zIm1;JrtH^4cHW#gl12+;#G;QsddNKh0vw4@G zN{+3xNrKtil11g^eGbG6CD%s9rMRFy8pvo{owra>GTGcnGvb**EtnolGN3zm`4k3` z$i^AKWJVI|ckUdh{LtcW7~sF<3y4}pEq@7rz$6`Z_oAtqqHGQ-eHiTB6HF zRL>LdIDC3fq~i!V%!b%`{5Y`8>xt9K}Y!Cvn?ZBTwJU| zZEFMEP#l(i9Lz|C2*#z&UHKs7EIQvW5GA6jB^e=o-#%e2JcUSU2HoYh;vLpkOZiIAh)h;45@++Y_`1GTbmFxGS z=?B}Ap_`|2>x+6`ph97E%!EH6)fl~ZN2aP9f95bN1d;gG=52^{s^n{6v_)Y#rD1H( z>46}7=HsJ7VSvY8T{w+8)-%>N^o#>YK0K3p`}Y6QO_WXg)qlW%z)27O#uoltrr+!L%V8$ouruP3TC=XY^Gw&f%MK#{K}?oIU{|xJ8e_^rf`HNb3%R z8?&s)1%pI>$9hNVK7VAzLEr1raB|VvfwvWuh&m&FTaUaweb}4J@lXt5W<>@CbaWcK zF-_TvAwx??gyJ%a0KPoyblH_fX=XA9#JA9ga*1x*{-2jnVU2>_c?^%&3y5M$IF{88 zo6Ksi^G3P?%y>D>&c^00PYr_IF-N1Ly6byP!2@YognHw}Fij%EMc`I~H35K7QH&s2 z)lycz6tpF&e@rzV2Ev7`L8T6dJV0Z4}H~A*-g1x^JsfNIyzI_8T|nW^?AH%qRfCTIXSLUFh-2ygPFYwau>PoinVo^x;Aw!r1M%Tz@T$4U%tHP@@s_*e%7|y5~E8hY)5A? zF@*pVb7(+cKEDm|MED(%NS(FTB&}2}lxslMF(7@M=3H7+ zvd{(CYK(;rD>b`0oticpe9H=b-07Mr9ELcG19SAI%%6oGELh4b$Y*GTssdI*#50oM z$jo0*{)@gPC8RCY`kYRd|H$OkEBb7DXg0)94B|ZQNRn7?5P9E4C?lnB*==k)I zE%c+>G=33KZRIYseUmZFNnTC^t>EVTc(q0<@!x3+1^3DQHKy~l2zyb05S)gs`)^Ze zPah`OFAdDv;H`NJ1Q+LvHlrT8OE+`I zuAoIbnki0J;j<}=-ezSPqMVV$BhpHs5VOnckj(ubwzu&5VRRWN=nB4nM{~G|IR+*$ z9wBOtp`RwyjMo)4)Zbr|<-kmL5Ui8$&*(z;i{l$Pe^l`r$-t2ZF$H!Ba_vRF?Rt(F zV;d!4e!{FW17J^;IFNLK1Wl;xs^^h~KGafj6X`disqr9#a!hCk;*ll1<8SPbf5)en z5k?uF%g&yYylo0fW5_^eZk6#j$e?>+VqpuCKlS9MPR@F22I~%zhja;A>rk}io_mjm z36Lp(q&zW&|4}be;87!^RiDamm(V~~SIPt#;iNE1Lo_WFEvXA5lWN8vzSX(7>_^3p zTLX4%FIih*P=0WWhPy|{-4-2BHD0seSeLVBeXU0uZ#n+m@NAif%hrH-UM@i+-K`%? z>Ut_*#FpnH?pbsn+UQs>I%p?v^dg;E{zEVvO)Xl2HGJyBdTc8tkQNTzrB~+j%r`ND3~6f8s^L% zQcIE~sdHxUP8Ac*T)e1@i&%}rukNb#TO6rF5FAWN6-yG8@}DnnOK~~%<|=Kgz$Jf! zBL9tjp`2qd(Qb>8FS@z2b#%vc8XxAAI;JjGB#pR3zv5IdZIWzCYn`aswUN@Q(qe51 zKHLQb<6biA!*IoQ=P#XreYGf{G}^U`)XAlm7ELHcT$PQ}$UBj7s-n(BB`a^uY$&o3E(?C^Hq55OL+r2qxlH?Xpt@*0|k;xJ!8e14}Y})C{~;v zP5-BxnQoVl@WW~tgbQnh072XPbK^8AV0SRC_w4S2D~Uz{U z7$Gni*mPqMh5UaPtKj?!QCnZ2uR?Suf(yu@bRwU0Nus6&Bnj60k{x#+07&F(IF{>@ zOGkfk87#IXbSPHDX7CFcyxG=L&l4$!94NX98DsrJktAxDCP)cLIM((vm6^(B&Gsx@ zv$Mq%>Y{xNZz}*RVm&Vtmg@{bcxG|X0E_YIF5f0VWX?@une^MYzS;obs2Nf(IW%GN zY$nYjZ!QsR^HS3f$@plx8XCTAGh*>!SL*Pxx+7~_R z@>h8?_oAY-LBma!d_F>pw3Sf#&}4&P?#}3BGBNAFaPxk5cy8$25qj2(K- zs1wPijX*)DG<5p!$-VRJnJ;tZrE`>iTx{;%O1Xwq;fSdY58tG2br(QSm>5Dy0O}bA zRou~Q{+X6xjeKno2X$Zt85OSh6;V-D9FXX~Zs$kFg8a&nM(o{`(Q2AE2r!@J#*exP zWKLjFh`vdt0#*9b&57;=T1n7N(SB%u;^_;GG;vy$j*hy1rc^F8Wel&kL}Wr`mXViN zdkB$@R!gH>w+}t*hKazLAP~dPJ#&snd4PY1Nv5RUuQ#7CXa+xLyO1|^i~}S+H0EMn zKx;`(2sE=@D}w8CaX%%6k|N9Yo$ zGKnbKY(w3Gtk0LA=f7a`+87Rs1R>?MLKI;nECrE%8?7wuRngw}c;~rso^*&}B3Twe zR7Lp@1KKP9*`l@EYl?y#%q|zfm^>!JtciBNfzJIAp;l2an>LHCDE66$r>8nS5MNp- z6eNh7u(E-u(5hiR9RH`a-;yWs{)x5pxnn$+kee&5On@Aa*8gXjY56a3tDZ1g?al}t zZ%Ltae%s7CjNvcK)#T~z@*3p0xgZcgJe8BiHCoq3)3Xv=V`6(ev4Hdd_MHV5a{JMv z9#-?&%{`ggOQy~#QJQL6+?)3b91xkTWXcU2s!G3bIc~*ji7*teqJrjWP%HY)enqMk zJ(3(d&JJ4iZijUD>>UAm$TP9$j4G5N^+aANN9*#u2|T#FKnw{KGS2upDL{BT6OE2B z>>_d!P>{NN-YLjiR<;>p4-jo(y6ns?f((_SZRX_Y{xHSFf;>R<-4y+z45G2h6 z7pFa=0F~1tpUL$*>l-^?+u|PpJg8Q zi0i=Y81D@fNSQe~cFW7sn!8uM$&LqZXRp+n*VTPOMHYlamT#i8Po{oqC>v?_0ZAqt zQa#@Tt?=tLYnbPfiXW~OLZVQv?FGLl`nBbncgi1@p=8a1!a{j@z8OboIVCm|UZutcB#EM< z<>CkHacEcx*#>M^#*!#`m9V#K^wL}T`1-|-ydN%r$8Fkk`m4nF0oa=GGo+y&%TZ={ zRd_UBU1QKNr${O@vL1sx6L%A}7{cuJ&WK+DF^_aSk(sr`i zYOn3vqmz^OK$nA6wIE#hWrPXoNMFLm76KRiYVXNk4garw@IEuN`df8B>ep)Ax+^z9 ziuy9hsk-lptLPPh0DPvgF3W)EEm7Flu_B;dY2J?)5v~T%UnMDy9=06;7X9g8k-CWN z0lAEY*E9eQ3KoAdIgGuI+C|e;`esIJhJ@a~NG#fi#jGE>+xi?MrHq)ykV~Bz>?OUb zkTo^W!3<4eJ(RdI0slE%ukO4>-V6MIyiyv|;mp84k8q7hPMc+pV;(ZjUF)YYRst7u zm#Q+A$$vyrIrtZbYBjtH6h*zJ+_HC<*WWv+n)8(_3yvI~zb)BYWD%ftOLHF9j+B8b zaU$?Dl?i=5m;K@^ehKuvW_(W|+D;Tyq8>vkSAYtU({thOzQ zxJF3KZfB_>Jw=@);e&=-{85mNb7bFAs7ULD!PhQK zY~l{Wgo^M^K00rT5_g@aBi0TL0X|5(iH-w`)^Ejyi0TQ49gA?r(~b=Gg2oppLVGZz zq44zJ7jIT&))Qj^y@fh{j9ASgsWhh)ao0&kc@$EF zV5VUm4<0JK7&q%6BstaAo^vu_^Y@q0vlF?|o-ro51XG!^1yjwvlEdE=-;DkpIus>{ zmWY(rgoWQhy(T(b>Zn=$YYXH+|qQ>#hMP0lsddxI|$NQ{znqGIJf#S706q2(zw z(fN$k7O9pAgqn!psY?y1Po=Y9JB8@cqKe5t3iD4lDyAy0!@kQzyO>u?1+jL2?vXv+ z5Z=qCJ?Y!x$WRr z7B|(JH{T>elocFP=@=(|LEb8|QFkhRP!Vx(ax5<@!cAPv&8xTLC+{;o8L@2<^@t3? zE2dAM4zGN|c{?A|XRv64kW8Gd--pLL9+HLluq*1wpf%0i(ECiD*7rdCw$}QMi2-2! zj}W4X)libow{G^##7hk?oZ-87wT4iNKn>4C-znTXg{pY@a3OYJMwwiSoYA^|jh{b% zHg4Ve;HNeJPplk8;3!JO-q0kp!Ssq?LfVx6mpo%;EJII0Wu;)cQQzv=U8*KkX4(}f zoQ!^y9zKmGi0WxJxzu;|lvPE#0^|eac=Pwa(4m4PzXSE+23@qa0b`NI3o??tbf7VtLuNr#)Zz7y-F|F+ zy?_^&xS1<>L0K#BsqsE@VjQEmr7KvQOFse(%2tj|7MwYt}N1SMHyk`Dh*31GF2 z5+Ez!3WMH)4d;gC$UEZuAAY}I-7lH{Lu8he+S1riD6A{{HVL-@Q|8aE!94Ju0=V{h zzDX1$_yruyUXFj>bM#}$nJ)lIt@AGJgspqh#J zQWRa}|A3YvQu#e|(}3RDo>%$xbJ`Iee*rxWE>+s zHfdV<+EY$IK!QI?zgf8OA4tkDa^|`hc1DKN=aKkD`d);e@GHX+Bj(H;S>Y8N{64LD z{2+F^^1EEh$k z*b^Y4(AcW)^sXUCDT)G%Yxf0HBdcgx3jw_$H9cs|M75|9hx>!DiA;mI6uE17O*A|d zDq=@Rc*f@OO2;>}vdAw1h{WX#U5Kx`|5MR4G4a@U%#Zdx+g|-R++*$6bidr}^A~b0 zw>mqZsyBLu>azo9eFUcgBLw@f!7 zNT?{c&Oa`5b1R)@3MnO}*+K!J^Rds~ErWo=k?{3GXvQQ(wSmrQI*^GbOMbMKb-Lno zKvC0}T_|T-{Q`ageN!&T3KA;a0ooxz;$YI-nyb>p6dN+-loL zC^qhRz`6>va5 zRolff`LdlhWC@@Z4bUji2zvPp>OYyo;cua9TUA_eY|eIEjChMML_$;K#Q*wrXDYc1 z5$khE5jebTCf)@rj*T|iqZNg?PhKrDfY`%BzTonBi#?%gNQNOGtivV%8-)MN?@Dbp z3?L6IrLKUE8XAUC=@moy9qRNdfL?b}Q&kD#^o}Ap2Goho5T{#(l&5D@#JY&sG?uQV z(qRpE+82vtV&v~Hjq1REjf|scs|Y~#2pOt}JY(vH0Mbb8py<@5^}=|12n@20hVbE4 zWHN4YSoxsk=;j0$Mq^_*-Gl_;Sedv~<*LfiACPyo zNaW6dwN(n>JG4;^1YZX^@p9A(aWJTUG#%>55#xF@-#g?J;IChU&)8eyuDst zDS1JVcx*`oE%^AdZ|a~INd{XXO01^gf^veq$~CQt!W-E+t`~PxQ%gz~nEicn{5MPW z6nQ?YC$;23n2I@0E!BH&lnxriO&XydX$kZDz_j^%SPk$gt^|@o$n_Um-XIJsc-lbx z)?O6ZJCGO4REKc595A|}aW57Oncg2Pgz`ZJ$xL`@kqKp`f)js~ibKQ+Xo(e~Y$o5> z>7_yG6RsLHX)>G!J8_UJ0m?ZXztd%6g9bLj5J9e37-hn9$|NftPZFl`oE(d(of)o> ziF>$tt}dOS+3FKVG^qi6a2|aO*8AKt;*fzguo{?~ z$XJ$M`x?ZLP~wl*kO?OWS4#fOLo46V%+-?~0V)c-$(S-dX->jFwUfH$xS`iPV$#4b z9=vO6IK2+&Dml9A>+l(z|5FUwh=Frx#*V;^vbuL-3Z^fD#CmMq>JN}F^4H%N*$6V2 z&I3knKUFj!(;lanTW_{TunJ=&jxfHCQlCMvi5gKXD#TNS+`DV{ZbL2>kj15YFQCH7 zY|!jPuFQ(^&lNheTk&a&4uXGxXbCY4S#n}V#JY)@h*Lp4#MOgBU#w8ZPYZ@Hl}gHu zN{=DPyx#GHF3LUSO9A+7Vs=8KRfAf!(y3sD!IqRmn3SB@Loxl5N?H10^<(1RI$arwtF)1y>vL&=VWW6iwxvJ>`y4e1Y)X)zyu zH>2g>N=cW3RBwy6H~10C7D%!4aV}#Df{Bj}u7|dIobZB8X9B5OBo3ufgcMDyP>q5U zO=dzsLo8>*bzjYY)|a>qo>y&PiB(B)p$(TEt1U9ZA><<`D(tcX@VGXm59DvK&9f$F zSwX!iBiLa4)Oo2(%YrJ(KD&w)5Pt=V?8-KyY11wKkW*D_g*mj3nVuEJ%vB_45?giZ zl1#*xiAWsy{F^pPEh54atl5}Ld_ey`Pj9dQX*=48-39;DTd%%vj6xO|bvh}aN{hRc zqj^vKYhr*z&3S+;iXl`25{|8$H?XKcTG@%qI1=}0KZjE?(yd-tT~R*jw~@!m`+aok zp=2S>GShM#hM)5snZI}y{2e;?jwrVff@2>06tqzwn2APO>OD7$oc(j<5Cz_e zwJUS;A{=+1z0&EB#U+RAmk2^7PD|L1k|-6iVeVT?pHQA+lhsdHPwE88#~h$3{f*6l zKXhaiH@fzdaQHge>Z5AMyxM+7QsQ3yv)aKqehWzJIjYbUw5%Jb{PL8&o>56mFU3{PQf1AY$-Qkq|5tx57Ve2PezfpnN$ zf==I6QuUf(Ia7`#NBj3gFv>g9vPJ?d$X5QW2ll#H*GH9y^+%lpM(hg%}!wkA(Ud+3k zoRNf5nXo#WBO(&lignC>*Bh9ZgHK9q#m$<|B@13%^9F|oM)m}g=i-W65T$s=hY$0c zIreTTL^ImhKdw-zIyorF#dp~1B4sHdb1Nb*YUlZR<>K<~H;TemNlH=F4@P{ofn?kd7@&mOjX8MvhtNSx?%!wd1UMfG;*p@qsd)br z^v%DxJlKlvWR6J7a3`N~j*a)KZsfHAQTmJx^rslC1Srtf$2}(;$<&&V57gu*z?!So zs3FAowvn&xXy$DDP~%1d!E(CEkiPS#a_-RCv@OUo?gKJ%u_aQ9HT!e?Ql*cD9hati zaCvd2Z6+P@aUgij<}N4+#f_rSi5lfuyxPMCsEuhCcI9ejiF)jen;E+k%MRFO1z0~MABCxt%X+^p9KA*Qsm2* zzk1qar-IluTD4TsyQ6EjpVL8DLx0o;whVwZRmiA6n*81mDO>;dOT$GPt?5SQ2K~(I zqFZ~51jFG4lJ$}>q)@ztJcAk zVN&%s)w1*;Au`p?h6gy zS^(-QPb5{mjo7fYl;1|r3L`4YcEA!XVMJ_jX~A%?josbsAaD>%dJ^K3=$Ax5&7sk4 z_wr%vvuDlSVq#(}Z4esI)_n7sgG6MWm`V3?9Ks4NvGITbH!hj{KabL?=RC8TfN!2p2J|vg-c`FvB=Vus}`ytSfK}3b96Cg$JaOn{LALY6-HS~m81DX=? zd2#@HC^+Gt!QVdnjHQg7TfJ1%%;&=?|CKt?v;~N|>4*Rfmq>1Wcs_MEdM( z4hvj;4+ZEw&{dbH%WM)U{QkYhOiBn5OD@<|X>5LnFpT!QE6kWe)JeRZ*|yZ>%7)I%uVf91~>D6-ixsh2`q9oz8QVSY`4_3aEz`SQ76GeG~L9C#9xc5X- z+K&Iw)Q_@Wc4Z*nmX@)`hW2BYwJ6d3e?hvs%dfO({aJZuF!H)mr&)s{a1*Y)w*}dBxFpChX z^@z9j_m{V+2^E5$p5}=IzP%qQekKUitqvsJ3w6J~#1>TXhMYW-VjI?{euZVkT zlO}hG_H;p}o=fa5T5U}CnFZwsmBG)!I;som(MWXW{NRZp)5p+7oz38Xcu@w@2V9;C zYS@Z$2;^`259I`Jj4W(*W})GV#7tfs6Dh)TK{R>edZ`ELo-VHbHV>WgP%IDlm&GbF z?@-u3Nz5p0tm71K(|l*AWZ#G@EJqZEfk=JRi7(*CGV|ktQ*Bdhp1~XYE!~i{VXnSh;{$$gLQ5Y{B*98k;HC=$EPIL zzD)8M6&_B;s)d-2yX0mH82HRgFkgtbp?tL`+^4xrjKi>9nEK`W_mi}20`!3D*#1~3 z+$U%_qV*!$m8JPlH7oJSzhBJgQ4(3JQ(j}5 zvr1&u4w#a+cb0*H}emU*&5ALlCPUs2&*~6t+A0IUGb4^E$%}%e#XK!U>H+2?xD5 zMmw7EGI9?yp4X86M$oDCx0gc8;Vn0rSjjL`RWL+`1XQJ(rM2qZr_Zy-jBIQU3F%3l zhz=iESM?o792{7U(81Rc>oS7J#r{uaT|EeV6p7Z12P0cmP~jlz*vWX<1zbvbi>0p2 z=d!j$lkWKMeQo63yRzf)!D3yNPyh&Whn|4b!cg+;Z`tqO74LY4akE8B`>sCvqLC6h zRaDF{#0O`;0*X=+3OOvhlV3vDkehd?02Lw|p&c;OK1Y_rwZ)H&`UQG0(B4x@@sU)u zTOqkYQC7Zj-b~k4Rp@tElKIPzhLPo^(}ozdvkdcl0p*KdjfSY#z}GYxMbq6x>AaNT z9l8{ehYAT?_y*AGJZ`+~VfLn{+*9YYHt zZ-vm2Nhnrm%C-$UffY4u|M4HL*m(O)pF8S)0OG$9vMbCzQ4ChqU421H1C+DY(~nSU z1C%KiqmISLVHhRe*&H7K1|;73i&EMQTy;JmW~|}iY0x|JiD?mJ_+-*_=O~>O6j5X( z$;b3Xk*{A5s;ax^;Zd>FrGwxwFJ?rPtEJn&qqpnB1-}}qw;i-9$60^=2mR#P(_7kV zU~a>-mJ|ZWq})k^zC4~P=Jh@5weHu@jmKeCZk0F^Ttd3v?`>|-`S7gj;O-QshoLbQ z&qeD`t>*Vt@LuW5;WNbjeCYvf=g}WROH>^GfoUsul^c>@~iXxp1_ZT_iHnRyj z|Dg;NXp|TrPE0!e)i|Zb9f+)RxXb_%3Ybp<6Cwr$2(K!t7JUVLe6Damd*=B{-D&N4 z`!$xR;_fT>8}!V?3-agakY|&SwQ96*HUj_{K|93&XdUEr3K;+v5fFU2SX|>j`;dR| z0^U1RLgEXyD|Yv7zyB-0V+;ZWBWO$#^v(DNN$m89soIA?62!OJ7|CLkNxBjU4uxmK zR;{*D8MFPj`$+$VQ?equqD`PZuQ?ODQwbcZ2bqQS7`Vs)?K7GMfh`515hD+dbjPh< zP(tx?Wzy(3O(Hd6cPf42M3aUM-F~;;oe&+1EXmV?THpa1xgKHjSkj zA%Rtu`Fo=3K2$;iks{+04iUga^tqz>Af*G2Jvny2YSv%}ZF%Q;i&w|HiM`~A+ZVbS@6g09ewiv~v?FD0u&^!OA9 z2;Y@NG)hIR>KAHslEsdXV4-)!+Ga3HmM!uX;44`x#9uI(N_zWW#Yso(Zy~Ouzkhk# z&xGa4*@j(OIhar_Jd)=-FIdD@_Evq%mzvQOVWWL1tT|=e+O?$-4?v0qp|_s4hOune zfGUx5d$TmpRx~;?TmTNHdCtMcW*2V0Z*EQu!6eqAEdBZI+e)Z^n0bxkYg)u(ICF@v z9qdSLc79;u&k$*qDPl?&97JUg^de^xU+UMeE*xT+En}X1heRk|YY8 zFuEqIG;&@itQUgX?h&J2UUJx#Ju|v(M+#foW*{y}Iudg~TmEzTRgtq~b!3D^Tc&l% z3bYWBwmNg1M)$l0pu5ahNO_Q z0Zh>Wpf+YCQH7&unX;eQB!~+~au!vQ!@os!X-#k;XJZ+Y19*l^wGuDCWN$G;f@`hb z6yIME6d6XOER5vwFE1+L$baV|YhD5SMDJ1MMY(+nyBp3{z77|LzG=@eMn2*KrrjypT z{oiXQAM3Yl6t>gCG;$;*Fzdp`=f&^z4aCwyNXHD`x}JQB{S@?j{$X zN4D~WDFHF)olQ2N7rlVS6}C}qrYK3NKeZwL;ttYLLFlm#th@C+yj#XkeMt?^#H>te zK=>uiF;Mr5a#O0xJa82>sO=b(74QbOltMlgSeo!6!_EExtiGMQzyo6FW&sgSgI5!T zGU%May3$p|8Sm*Y|K=d#iK|G2dv2kdkuUosVo~M)&$~q&Z$|;-IQ_IX|DXgCcoM7r zn+zmc3Bf`5C-a&oP1OzNm??=tOp+k+%hBk8?aa%27)}QQu(VM1GyNnVnE);Lj^Ixj zKe>Yr`)(QKG{sJlk~|g-JRcInt;t@p0fBfa^QtAeM@oP`yV)SpxQDx)%>PsNo^^_! z_V;x$G2NCIX4@X5&>v?5BvAVRQ+}s@d1n>Rlg?d{NgloEXV0El)C%YMGdR)BM!aQV zdSpX|jI1u$74Od6Yz%jJG$H^Q+Oyb3{OKmf_ys3yezg?`LjLJx;G0~u-8m(mwi9VP zsR^e{Z)>owHB2KkQYGTQjACj8*Fi~YAG?e6FC2P2v?=~p7Js;ykk|+N7jIKjuT8(d zhlW2HO{1=OH*rdc*++=B!jm#HMs_!Trf2l~4`z+9YD@r+g zHk!O6iilnaz>kW!+j~!)Iu&v7J>JP^*Xdy=R?mjvwH1g!=15-Lp26p_Sb_frXcX6XWAd@C ze+rwgC(R=ab@b5zNFmSL+T}9$0B2jdtf4TEva+Hmp#B1RHz>6yp~Mi@k$ZWPOe0)$ zVzbsVVnhXni#dVAWVsr%n~2x`>sHJ8f5bRkWXZ-YBZAi4eUH$tG@5pJ=n?gr+u zi$oR|ewsy`$4dVErD!3<#WGD4Xt*Z`*@=>9EEo^wxXO{T*c1tEwMZGSVd!ILhP61s z6MXMb?o;FkylgXl1yb>2#1{eE33^Y^KZ=+#ZWUPr!&-cXbs_g7rUvup;RW4LAhWVy zf#%F+-VtQc`jI3^85*K{$N@N&8JkrW?><80ung7doq0TMb(NhNwM&cgVAGZ@wV7oRQl5c&ughF1VHULZ)S)uIbosKbjfvH0 zj2T%Nc9d(&2|P@R3@j)>FT|D5>Z@ifaEaO3UNIlui_wFV*X@uHC;*>~E9%wq9@CMn zj6_%B;(h8!X$29gR}MJ`S&XpxK=Yz_{@a$>;au+L&ke+JBdPBy`4%;G85D+I8$-(v zb`$?$@t^NEtn{cx`>7uDO*#9Swe0qcjsg;W8q%amlW{?o`6>7V$R1`i4Nm|SP?yO? z<)8ia;lMkwY2l{HULVSzCupkpWIx92$m>D{KR0_~JJdBU`!$J~G zl?{Pd3L3J*c=9ioYmfGU((OE=ip+gfr#cJ*((F8>=%Z?Hhm$2414lQJNdwg@q-YbN zC5;bS&Q(Mh&u=pLLAHC6l;lssOj~O{th5Vn4sg2@rs%?6{`}_1fXa?z$7Xq6kWj+3 zX_q}Bx|4<07Tf$7_oZn%&ih3z-nqk-c6{m5USGd`lM!5NYiprX2tN<&8~=G8_Zk?5 zcG(znl7HOL!op{y`W0W_=J>&%vedHF+ViuPSZ|2Hg9}1Ud!ONKLVGAnGq^W0vQ397 zW7On}z@O`Ai?XOkDcKO4M2Rmfi9nJzSa3G=7vnFrHx3)h6&}k7A3Gatyr=_C*^Cde z1f3e;AAvcRnB;SQF_qy{+=dh59P+OPXs0A6e`{4?xbgS37`AqcR6g)aNV<>Y?4!}e z=rnu%CWVh3S;k`OP+px;P2os6bdkR{_wYY{Tt{F1 z_xW~jXwdR{QCD{{OGlwlw9AHyTxR>|qBIw_WCmghKaU>FH>X|zR6365M?=EjO172x zyUmA-zbpOK0@PQtux!4}{~+~|QiuE`3#8uV=byfhzrZUlShWim8KJaNItP)!sTY5N*pbaOkx#|})ke_C7?;Q8%X;E| zN-3DXPM+!7R-*$NqX`tJN;(b_b=7oQOPQ0{<=><-Mh~l1=>H`4gTlRGo)~w}b#x34 zZnU-`eUpra((JW#0S3jlcq>Hmu7d|nDZE7W%UJWc9b(@=X3wDKQtaEmUsjBA=aX$H zI7H?G2G8#%vV#m`-QZ7H=Pmwb(;GXVJ%f7MPByGwg%=|dqxh^mm&rD%P_z~N#yv@y1!zN#O_6}S!U;0`}bSAw_`4t zW_~rZutRBlpR#XYbxkp=C(KPm+_P zUcG89eHY$Ocr#j9s_FFZZCUZlwaFvI35OYPZsykvasmVlqV~5MdX5eyhn>|BJM){2a;>SVsZgiQIE*{BJHZllEx`CERYe8 z=O&TfVF!Jbdl>fTFE=HmRhtRMBRJu%4vqPEp&?@Y@gY@LfDWF&g&K2xaX{k=y4=kp zb^1lpOKSJ-oyD!fO|9o^o92JN)R4w^Ha4sX0iBV!$VBhC>9;(&0fP7QGl2X%#5+q{ z(4&W$|5>sobzmE?4b+tS46?wM6TMs~%%^UCw(28&kwsAH>C2U+lf=R)6<^DcMl8i3 z3p6^8Tip96-gq3P`oOWb@7$@hl3Td&@N6%BHfCLBSc<_1jGYuz{$#|+kxPMB%(s*I zXiK*7rqVMr{h$1JtMma%WeE#GIa~LU1?!pB{v`u7(1*J4n2W9|wZCWIipf!`oKB$h zBuL|9)i`JBhXm9VqM8Pq2s&O(44ApMCgdFl09DU&fYP^&%tcb!jUQ;K`S+`wsA*iQ z#jwY8>HrHe<$;bX@f~xc>N+|)@z;@Ih>Q~{o#n4@U%ygR*pf-E-MHaDc5O+>AyCkH zH|y7~U6P^q_a9t4h1)Jc_;8?~;BmLs@MdMX8sy|GTU+s9H@F^6@hdj!=y*Vc0`y5vD_DZ7A75TEsD9}N zL^EC~0OG%F2mU?2iD{JMg6mOR*uz>VIB2@8w~?-u*_-4ojX_kHem!cbmB)VN=#}@$ z0%Cl@oJAh9uoR~<>m&{=DB&!aBj)^%MguR&h9Kn^n)Z1NB6{lWdI&QakFMng1o4Ck z5OI9Pw(_Y>3Z{A><3cHO4K1&>fRQ9PRrwt8G6aW#5y@}igoIkAZGXo~YMNJ*8XwGR zdGDu5f194Jhy+`C06VK&S(K@-3FYueS0$h^6o^+jG;Ec{oOTfXz4&JJ)_YtTbIR2q56k<#bQHqAWVv{8m4XSYXXdAV+&?2O~r>9Lq*b zX%$862@s$coq`Il>~qDf*n`i!(AiiFI_qY~G1ff_#z8tSt9o$7UjH zVzNA--_ZO~6G{81;;Ke+S!5|FF-hc;{DY2`4S=BfQQy{_i98=nblU4&9Bx38#%b-5 z$HZwDBaTkyhfR@iIlKp3IbmT^}RZNzWBzOkXIDDFht!fIp&TKrPqN=K7wfiV;H z%E(cpHuG3cw~hH3Nz&kyQo%guE$@FXMu4=FO1+R4LL%=xx1?@+_u@We7(Fwa%6cwF zODci32kC919Z>|+J|%}RFg}9klyuO5TPxWg>ULb0Hx;9usl3GLwYcCdYSUphrT3G= zE3Ou;q)APl&@4Tob_Psvq6*=EIP>g}laj_KIHrbX8+@AZw*|YZM+$^ESkD9HJ&ItB z8!3ydDgAp#)2keT!#p~+OFuS(L1tL|V4>3i&Vf)cSQ1?b4LwdzP2!Qg$vl=_Im7Q6 zgkrHXbKycWnh!qea5`ONYqEiz>(x7YJ5FKPe9*o0-hL(}G4T$J3FB-|PEOZY!obAO z9W?M{KiN`H{_}lLY)qGW(>cSJwtfqz~D`EoACZ?wV`#WLNF zL!mt^q14dyvK@Q%8e3Lo&!v@!32ut;Rkm+Fe)eo)NT5X!9=_dZKt$R=Y@j|pVD*wK zQs}q6t-&LnZy|dUDey^gb5=^wMa*4fU90`Q1|4YM5g?1yMP_ZtF#S-c@I?I7_R|k|cL%>MU|dRMP_$Jf+whUu zpP!00o8;7lRn2G5F7Qn9zn3fP(Zq*Z#IRBqWB71FKb$!p-lnQ-UnzX|q=Q#En2pZr zuXAyMzeClBZ`2lz4Rs5>kj_$Xc9#7{XxCtjp&+xj?z&yslzfEem2n$*-eRzRhID50 z4MZM+@Y);y3Nm&KQ8#&+sAf0^3NeER#^+yE6qJ@M6E9|HL*Bd`2Q+9HSAH~2J;J3( z=!?jJzExUHs<-?m&nk0AXqD^!9Sr;YAeDPn>>fSGQ=2MmCPfj#=%AMXB4T--m?b*|e ze4Po|0Mk*>XJRyZJ3rw0jJfg7^S{KzVgQu}ruIXsKnlD>A5!7B_ z&jFl(5o`^pUPabHgmJQ^k3w+kty?ZNMrhsJVG>{=k}dw22lX)eG}#FtcOTuuoE59& z^eV*V6L1``=T3ZlJut}SGicQXZB@WkXTk90hclQd%S08TNkX;5yKc%&$R+2iOMiUa zv~8U(q}Sqb&8Bq_f0**;uCetO=qB#N&dPT)_<(P|tI4N2?ZZuEWhXUO-p@9`JJAmx zDpS|-4X|UWI9`ItJb*?)MOD?C0t_M*@Lye1Gw)(fD}IY(!+YaTb|yDRser5Tu|qTRx%L!+#`0ZwO;9^= z9|{cn9JdG(N)6oVCJ*RhuBgJI^l9DL7hlEcmqnkdQj#n(tn>~&*88czp zZ-~u9uD?tK0lIKDk=rCq{Y>dDE-J`C$TZY_i&ifh>e1Gkyvk${%ih;hKjRsb{Rh@; zi&cR=&8LK6xzXDCnrz%aU(2@8K(&8vzAXGcZroEy+^{%K^%qR zE3$|fB}xo#LgXQom0A~vOLOL4Jj$Z|)LO?lD+54H#nLIFpK9xL&NpxH6q^Zw5oqjjX2Xk&~aP=m3-e7-{b~F)+{9*m!9-p_54#)tDg3laxe&$dr z|G9{JxzAr&0!QIAYu-FbBO>g@$|&K(&JoRj0ApgOWXw=xco)^yZ`!_nK>)&~_()D# zTk>VbD3lapa?p!fE;3T)&6WVvcxh7xOD9WJR%va&P4!Ex-hu@SWRybWEzq2Ks_T4n zcr}D-K^}SF_Av28d7zkJ?Q{GI_UI|QaTL}S>5k)ms~{#+xRw@<`dPiFyJ9A#k5G;@ zwnjSF1eHtMNLgj@8_DY?}qaFd5;-b7Dcj@iIUJn{)+85 zEOEuVl}}m3gBF=@YWvEnb!~HL+&n@~jO{WRc{{KD!H2Q##pgs<5A;F86{S{ki=^=^ zERKPb5N`}r{XVu+3nxsEST}|W3ghAON$=?{InJYye1?y+<;@y?m$M*#z@!G}U*EeI zlrNh~bYh(4M)Y%(3+DkN6-buWW8yQi0zgKPU-$$CHi7>k75E}P+mU9WZP-|cC>0zh zfB=IoeIw{f6TD==7P+h~GqI2I2ny09O+f?nk6O(U(a_2-b7(@3X~W5-6>B&AyZXHy zXW$&MqG`QxSdaUZsSVTo$)Z(d$zJdK9Ldox79U~MuP=Y^JJOXvBa2b!u>!cUc`eS6 z9h|=K@S1mw#{nF~B((v`ijPX{$c6tx&#Qm=dZ4pHVpM24-Ucq38VJ0SB zZTjx6j>$(**Rgr;-mwO(xeV;lZRkVoQCreg&RVo6M7t+wH|TJEH{wfh#aTkv^<|x> zg*nX<3lyn*Y-1W4k8PHr3o>~Dz8g1}>%`ko?SkMGyc@56OSBGoXf|kd^Bt#FIJG>$xo>~( z#}Jc_sXd0-*8UUd{nVmY2GfBfMjBrBlUFCc7-_a2`Q|M5R=ycAYvHU}LlFxy!x-7u zYKF%Lk*mXM7tRP7Pq&A8YqrXQLMs%zcVT7>^o7+GI-7s$OGZ>(kp_X=4b~SoDGpBQ zlucUqBA!Ji{Wqy_+>C)e_pYd4<;7XE%^t++*VO3O8Ab!$7aU!N6slIOn(h*%L2d?- zlLdohUV6<@gMRQ}CtF!9!S0`i)6ULLq^H1$0+?etw7PrY44^M@e4w9{r!9g{;@iGn zv(`uVW0*sRFh>X6!P<>8;rMk2Hq*q>=i&^=?Mw@4IOs5 zFK!=N%eYp;K$*$rv-zoQYM6GJ>YuK^ApTib7zS>`arO|U%^%}khOB8;kqWdDikC$7c}tr9ac3GAD@$8Ui9j zy9f0y1!7|$UEC&~6PZT30t(0s4_Pwu*SvJ9ZTc19gh$FR%_jm_Zxc8^e>FqgRKM#^ z8-y?yc@cm>rr!Y`C>bKcdcrTFheZK#Y++Yga}=rh`J0E8zT+H-wwT9YwoI0q5|64= zB4#qwejFl^GcgY5DU5PMdbAU=(c`l$|Ko?-QaC{(q9Po{pNFim}D|sQg$uMP2mh@hvH+z5|a0u~StPKty<0k$GR+ z;AN1K({}<2$-LG~DYJI-t1`&q8!H^x9dX;O>6|mfXzJhh>9`zwjuM(BiD9;B;0VV(mH5-(= z$W*u}J8;p&4$=6_*I-6*NdBvSe$@o`up#-hECW`Is3<=`1QD}ZnY1U;>&&buSe#jjg6L-P`k5KEEAf#z)ieEpX+UN4a-+?+m+2|G39&ScCeo;=rO$It$6 z?;E?owSeBA&P6@G2gP)gjl*su)|Nr&)vH&_xC1RANWmRc1|lIo`C$wJ{wMwkOMw{~ zAu~TMKAU%`d&DCSk?quP3ixp@PY@APi_QzlG_`6VeAgl(|$ z`tLs_zJyR$W5ED=-+%G^c`q5iqi&$W*f}x+{F4F=v&@M;w++Tqp!kV}wQNpW*9Iir zmZYno9uT_MYhCy5-Q^X^{-+n0gQdUo28kDWr-&*BuU&Q81|D+^yVqfP`CD=E!W61+ z6)ysYti;qs-ZL1<>5wKhs#Oy&oo}3h`$hT5UB5Xpf5On=dIAwqiG><1fT!fOvi*X4 zCh{QFTOIia^FGjUDL^55#%s$gDYCC>HEXgR`{}kiya7tQtwtLqBn34*?0f<^*5Red zR%$jdyBtEvO?d2U-2ZFPjmuf>dTy_AVs20R8|vQ~PL}Vv{-*#yIp<@ZOo|Iv zYhLxG_wXq#hQFTL^nruv?WxgCWB2S>um8oO*Iw<_bq={+Zqa`5UQ3EK+e;0Sy@8hc zEzfTX4{ST9xTcGK7dp0N?CZ%pEp&)wld+2xDYqgsUF>^3cJ9GL=etktP;; zVlyz)6Yd%EzjJN&!jdH0sd2LzU;3 z9b0fIMjjix7|^bF$ezmj)>i6U^{qSI3m$d={5@e7U?EP;G`)VuL$FYy$rumsmtg(= z?nd9IO;zUoH}1fL3ayFWWdlQBjIfuCmo;0u#Q86)Hk}qQrC$SmL#-Fas_GzC`wo*5g%~z0SyTxbJP(loWNOo&X6HX_3fLonCKfm>SCfH5s-ZMIKr#DQ|**;qMp6 z_zb3MeGtFCd-qOOI#Mzq+Dcq?>NTw_ z>f>P)WOEc!G*fU_>hoZEy;DR`L3og@?+lXneEnl*GNH-_ zUY}Pji_m4K3Wt|q$q1YP-GpGUEQ>+8nYPKKwz(P~TxF{csUegXD1yRqQyQzsF)9lz zvJI@@F_XKr|H&?-Pw~XyJqGqqdG+cbb&u?qAVCRSNuW$P^>|}L^}EDBWk*LxVTNF7 zcm;I9VjKfsWdbY7PZDL|QtS0Gy{KJbHGP;T@*?k7eT>=yQ}L&1a|TODFJ{!Sm!4iW z{GyO~znHX(qbrj0Ph_OYygZ=2dyE-ZK!gi?yk~R!_UaW0fDV>@>g8#+&GW;gaw1+J zcQ`RQf%z2v1<^|ID1d0N_r$A`kWRCFy|Q?@LpMyJXSYJdK!X!v5c)i;T4{&%{aUQp z^<~!8YpSZ-iYg5HyMMm<@V!CE$$j(`YM>EcqdqSOG=6&ITFQE#DQk|~lx7=;tFKx8 z{)C5P*9t{FgJdm+VyFsI9i~JL$fEYSxQxF zoCxEPW>8~Lr`g2}4&Bcmm0iDZAhM=tx?VsKh2K9;Q6QLN@pND8w2#thNB$b`i8x>r zSU*KbLUBFHl>VUf{~ufL9oKXJzW-;FkWt7iM6xQOj7UgEB-v$C5eXFyvPwiU%E~B7 z5)vV0w2VYXMxvo4R1$^icRyY4&-bt2=bz8}x^7qXdOe?y$2pGUIFBzBJSQW2l3hX@s^36m*YH37N7Q=s{Er4t4Op78z zJYZz{FR2i^kgglf=iP-L@7jxqV{b?XBT^8wwo_m|!=VZkO!m=ze(~$qU{3_B^hHW> z{g0RCToF!Dm+Y{+f=V|W*9-F5B48GQ@;NRK)(w#3;5NfzM204n)O1vks09{t9_oiL z)bLn)O(Xc?XTL^Qm$jW*{$%;@V>Zdj8;{TRET4Hyskw58(qS*E`1Cdv@iHMn`qUa~ zX`67UQm4nbf-zxPwh92XX}dWrVIaXp_DR8B0gd4Dfy zhO?=aR;_CtsWfc9|NOZWiyW$F8DFM!lU3R{h45(Us_sxjV|H_7gCEC(yIxm191J%H zzle#sawT7LrW$G$*#!m%wU`5{cK-uK($pDtsQNylV)z^{7B#@L3ak*nL%y(>XG0gd z@6NVLGjMRKQ|Q-p57U~4pWY`J(VJCPR+fUtW2(t^mCc6jJDwmUDA=sC@aLJ8ATmk> zO1gCA%0z#q=As6J98iq&^cEM|_MJ{u-XVI337_mgpwO1lcdE^Wlu7hXcHOts!wFmZ zTY!RT{F6u=IbU^3%!l2ehZ?(Lw4AJsKtynR#OJX2?3pzW<2x%xj7tcj(CR>BV zCd&1nFA^*{ zJh7jL>9144(cgd8@%VXs@{RzfnXZ2n4&5sW2$@*De8r~9l$POF(I`-q;#-g_nmkLZLNmpGY#kv1ENJoT9Xs`c*Wv<|O zbx!~vseMH-D;rs;xS!Fl^KFZ$qmu(E-$H}V_l9jn)b8xTk_!?@;y)1y+!ia?M_}<{ zs$&jPzxaNut{-dPLkM)DKW^5wVp?_0duTCsf;KO$(L1eNB$Zo*w%F- zReY#k7SzJCzl_F#grQLtQXCe5iH6CbuQJ=pw|>N|LEb1&xt-o6Ea+} zun_S2F{==Es$aZS=+#UcVKX2^c>>Ygi4gk^9WG*@<(Z~uK<^0 zZEU)r`e9G{;ioyvY`Zx0A-%Vj$q9NeV_u}#5c3s)9?qOyUU?_w{y7}DmyO-l*W{|q zYw(Ef09T8_2Hc`rH4%@M5K1mKoqmvxYh#y6FJrh4R(achf|uB}KJyx@>jqd<)eMYg z@s7FQpV9%l3F((Et?6VQ5)5itX8^c=y5TV?j}@frgb1lu5|R8kP-n}6d)ue7(E=nq z3FQI1SSI~$fL2Un^t{;BbzE#JhU%lD0KHzce0eI>?<@@A6zE-1oWX)Cfpbry*Qa3| z1prNdEUS4Co$9XW@(`4=1_Z!qMT)9YFS7-aZ^nTIh zIgZ~&gj(f}e88p?O>7J-Y zbsDP5L_c7+;OFQ!AMbtjPcmB5ObYj=%-bnb*F0Umu`IU%X}~IB(0~DZ6ASiGDmtR- zuP7GU3EQrTyG*@zA^eMN)iSXrY(%V4nR>sf_tU2~d}0xDeDC3-NB>5>oMdJ;Yh6c$ zZ5{12Y9%>0-ONawt4$Xqc3@ss25>ZaOXTcr!CeZGWM=IMA}de9M;6JG-qS5Ip9z`~yvy zZN2m0ftiDsdv`;_!$9AN#58yB4CEGD7@b|YWJv=ViWhL^)&Gt@ah9-zJb^pyVTBt3U0|zOGRJ{pX@HZmwBA6 zUy}g5Fkrxdu9}(+x6MsyUG(YRmbsJ(=pFOAq-eKMWS*c1=@3Am{Pj(IE@&TPzFdaB zHIclC9rW8{V~14eN9;M!caG{N*c{{=i39(+b74jE0oWSq+}7=y-k?EeIDPL&tp1k) z)^?wCsywNo%YSsaKz8xka;I(Ib86q zeK6~cLb%HPcyu=08=IH{;ER9rAM00c>G(-i_wPCVXQNG5)bCK@nvt=wcRe?c!u*FL zVSASD=s_hmR7AO8rs4ue{J`AEloWc+UF^5thoToSMh z>;t_JC%Q?qW=SZkk8SE=V2gy)6gH z621{#iE!!==*-43#Bw+}kib!|q|29z@88XwB3tzQpmpHE6<@3W@ECQ0cZn8y=8LR# z20uBVIj-mBF9$oAXK!;a|Meu}*{G9IM@|jr(r}$TDsI?LcbOcaaivnnwnL$D`oND< z>4Wy6^KgH0m@K^U+}G>pR5uUoox4mk)GX=slMYJp7xx{^p7z=$J>YC&;G^afC{i@p z#MBN{M8Y+~12h$h^nwE&mN#p!Ti>O&>vYI7iVQ`H60=KI2u=us4No91Y9GD1kEVe^ z5Y45mz=b{+u?c0LR47DCG_HS@ZZa{;brE=rSU=hE#$@6P3~4UNHd*Wt>a4S?CL&LG zgoug3;JVByEPyisUbX$P2i*>ryH0pd4|=TN%1Rdqu&oy1^+(Q`(*fRd{kJS1#x9bR zwGsmOCRPY@$J5z}BLxi?h@Ti{^2Zb^8Ku>4l|a-mqYY&G^A3jsV#WS^TNRaUsIU~^ zN+-{V^~hK0?@=Fq_k#+NKh*rxrThY$fg=q4i!#@je)#J9PqJX5DNvxS z+613OUjk6nfa@W(_rQIffW0QbNGZ6$!}$1UneSy~MiYSNVeY^8)94I9Ag%OvoE0s^ z9fT-SMRR&&{wKJj4X6MErFCS7I8FN^9@1Z2kffaYTp@}TDW4xM9^3ewE3`@qEZLlm*G(9#c;LLpFB@lLv~^| zgN>v35>}PSG*M@4sD%#7E8&ze@#|4VHGf&Qabarkh?D z-94gaUaCu3;*b?P3d+pFQUO4D88a0M;ypk5m&U($Zk^xZqP+X0V{YwlpZPN`_Q&U9 zZ70uW)plcinkkKciV(~Ug|N@nt3TUDIs-|_*x9LhCnM(@hpB(+a6h1`#ryaV>vHFu z>u{*%i@~M)O|pD9G~c8;d*1f6d#`Ytklg80(5cHysYJP9%z66~_iFPDr5ORD z`+Ux`%d>R*+nYvIduL8>8PLX@9MC^6Te)TMh8{kTe)iL9PLE!dSJwWGYIs_y;@4h> z!c70A1dVz?q^&``Wvc}*b8}40y2Fbq82ZEA58dG%28JM*b;zh3eG?{;QE#2MzIB+% zp{F6^TjL=3B;$9@bp|mXRn(RxIQ?06T1@ z?3Be~6&2@5UqVQ5#8Lx=#R8eD{ERrluIkAIUuHSx^C{#rg3Fw3eeYjY zc-gS;0khBtU*JM(v(e8ob$0Q04AKhZ+d=J~{z`iEXkuRFdn7f}s0l4o{^#X+j&{sr zuKV0G%I^iMixm3(dYYak>(-Iq_u7EOF6G8)y~#V^6X)%o_VCrp(o$oC0A6e?%<&CDV!eYt*Xsuf7W7+4l9RH7h{vUVxlZ-S|5 zS3o6Ff}AQQbzivCI*Ukv|9Xk#D{l7%i51Xt3a@BfWe4B7qqHz2K~2hQVWSv>TxUbX zq9>8*GftZPD|+HnWq+o5@4{_I+_m|&z1k=WMtJ;qXG%)(r@XR!Dm7*}PkZT(-jr$D z4H`Dgh5qHXA+VSai6q!R0B~rp##jEMzIPa(lpz5=cQfqemuTDZ@Th4x@f*W=s#rk zY=nIz1kGhSJ5Oj9G7Kl28kAP*T*VtDSK1fZH10+_dr9Ky8G zk~pu)GKU*b*UXrr4}kliK$_k zXF$gNSj4_6KTY0rHuBg7mdlHt@HA{nFCl(JYK=z>i?{x#?a))VP``ZW)2HR4%c7fP zgb`itcK-H1Y4NsLSe2&S^!o}KDz}&7h zy{$DT&PT4mnF1#USVX-jfs&;w>OGUaOT@E_vt4kv_L6h(f~oUt?j@JBS2j`7&|sJP zp`|4aR$Ll)DapFkoeNbd+uyyi-?dZ4ePN0IPp?;Z6bH2#xUhlBm^N*c16_?O&AKaX z*Zom(v!BtU*MH7O`xy>c@-^mGT&`dH4jszb?kJoXfR^q67zSl66{f(17h|x(>)kvm zCzc3K8+beuj15VE7g}0MvOU)ZRMu4gp#+!9)SB{(_Fc9MkXr*X4FvE=wF>FV$i1=R z-GoUjv|9h6w#MLsMTCD0v&l~iJT;iPc!P1EA|mxw?PJPTL5h;` zrRuqvFldZMiMC(cpy8OUtE*y+4!y5*s*35dXGC0vSysNqi4#*73>|B=Hsq+k>-PMv z7UL9|YxA+iC5x*mVorA2Y+>&ue(s5+sMc$ZGBPs@xlM?n^tN11v!((bOS*S~UQ`hG z3(y3ZsTO<|h2|ZH+{S;0k$_oQ!_-Y4h(9br;rr+5cQc=Zp8dn_`pi_WT=r`#Jh~&% zWT(o6So_Ho+7#uqMdZQz+@HhmwsC=7paSVEXa)6+GWbT-&yxiE6Ug?+E?0J8OejRP(b~^m{+Kl zzLC0*-UZQ{4m&*syYrhRqCn%t%`KGsnG8~Ikn{d$=-X#)kwW-5R9`{p#trKDYbNh_ z?8cU52VLWD8dQE+b3@fjd&>Mn@4ZyVL_EFyX#1M6W2P#59*Bcfq_RIce52JOC72Ew zvqY@}L%KGrj5>=anoM&=@EbpH2f-!-x#`!ey{T8F{{xk~qPhwY5scf~zO3f!lEu9` z_jkyxxx2&nj&oJW&hgRqwx>={$v9~;Z>;6=aVN8qi#DwEH{^qFHD%a+3tJdBC(T z`S6Y^>SWh-X?K_KAfb{l%;Wt@;tNuM7*#Q(J76$s3QcYxzbYnW<|Y3VS~0M z`A>}u?JFC4i@@S(o0O;&-q^&p3YaI~$qmtVVo7_`9GZR#E~Wf?x{xO*CHn z&_;fNhTdK;1RqVb8rNRsWZHh|e4vd8tSNbBKQ{HQRc+rPZTpUIeSR4w?g&h+9Wkou ze#Hh>Rc24l?(Ot-XXcrZlLgya+aSAbNkXkDNJm#X3LgtCbl)hcWUw44e^v5VJ{R?d z`Oo3rN5@54iLKPxfdh8`pB7;5ylFP2hE$V?VnVi^->0eZv-R;i&SfsH0j)PhDBWL=`yKam3+R^_5g0Y(nA!8NF;CA0hMrhdN&yJbqOGIz zrfBU7HqeoL8RW|_8|Ggf{=!ZK?clO3cryE0#laM{rpO~ktsmd|^v;iN7yEAvwoV-W zso~UfpVnS?s8e0iZgza%c@qYi%n0X?wbAO<04lhag$&~fyk%!011~bFH>X$c~g03F0u z;EfDki}|A3A|k0MXEBjD-1*<*_3qdURX!>VjGP>-lUvr#3M|b&?u6(h8 zkSbm?A@(vJC=+8U9A~br-_xe@Vo7+<<9B{d3HaInb>DK;g_l> z;U<%?a=9LAH~aWJze(jyJNZF2Um$*wF`D-6eW+OJuJX(wXLJ1;QQU%)Q!>(!oJ2J( zT77cpsj#p^g9cOo+V(=e%iG{Dw7^f&nAy2ljseBxo+HtadkFJT;^qUivy{xpp%3sY ztcw%%CIgLF?u|S-WpQHUzo5CAiD61(q2q|+{CT^h*J#&J9B!eMQNDPfg zAGnJL9JKu}ElPIzFD)M2=e3&gMrJmAFFAg{*`uld+?JQ7{&jRVD(-TlHQO(WVtN<$ zAHzFazS4Tjup7T;?{>!tlgu`5{`~nnAD28iS&yFUK;bdd7-GLz@xcw;qXG4lH>wdnzU!7L794DTCTMpX zDrF0eL4yv0Ckw4&9q)EuOtD}`f9;yAJ%=aKmiXegaRsy%g`YU$+`iqlo?dGWC%6<@ zOaq$j%fS^#9>HqYu3LAV#|(fwD%2u}H$+7tsu&vE`tzw4CmtEJTSPnH`zBG27>n{o zH($8W4+%ER{+Z0LJ{=d+kcrhP`DF?AmW}KgzD0qmf+z;4+38?^iMLRVzl0IhE zOpLpFiUqyF9rni?sMeqYw@0nqL3AKd3+ ztGe@n*wCBEg`}rppX~>Xyky!&lw+WA-#yv=jty&L7&4`1&4NJF;biL6%v#Mny~)Ut zBToev2~P%mhW|O8Y2wS5gNCn~mahQ#yOaV^PM@pHaV zyXu>L6q)uS!X?cGA)*Bo&a-yKTyr!U$Y>tpH7gj;vz+FFtEpdZs0B-QWUp80s_3g% zlQT01e=9@t*bBa`;nME)<9usU>%M=t!gFnNecSTlndadWw9D0$`eiCUjNA4sU(Lt0 z=C1+gdnrj@ml!Qy!LK;Dq6fVsQ#{bZlIfijgF1u znKuq$L?C9Wyp7?Rl&iw?(oc>CDz_D<%u$8$?B!X-bYihw&I8~z!FI134`lf ze7K~f#GH;0X(-|7gjIxC^)NkjHzPy0Uov+>hE#?AZmO0*Uoe)|R?-GsOj?O~ejl5* zIV9v6s#krLUXawpMGEJE(u#^nYg2A9HKqrE?J`u?t)+^}7)lcXZt)xFPMK45AYPu` z8gH5wyem?9V7Y!;2h6B&k|-?m(yDP_mZhbn4A{k|v^=|YScmusqiC=A_z`r0DGwg> zo>cO$>ePt%e?{XUUPe%wO?p3_@}KLCPuv?7s&1IT0Gk zl{?OCG|->!)5z?t%Hw}k-qW^vZ}cEL?6^t9!i;=1vu$3-5AJTiIXzOJvkeWFQWht3aK?aLxU{p(vQczq5oT2|< zrb?9u&?NWVe?tsRtIK#S@40A=(Z7fmbnHv55JMrS_nsZl(8l_4s=a+iNV{QsE{u4* zWX^}|wVL-HTuW<%uR3)+W-@A2BA}T4l0FzOA3uJy-cqY?Y4^|Q70o->4U7gjqhb`b=x*mV$qP$NXgdc8sa z*W=Z^&%QGBkK-7FuoPRnGUqjyxkPDvH}QSP>%^MsK|&3cwMI}4aJOP0+EmuI%xN4D z$j#P6F2U#;a!0Y%MT^!iTNE&G#&v~sY_-etq-Af`bBUh-%+y6>gf4j&LaiA$UWuJM z1nhR+>GvN+(`4B>Jc;bE$n=KU)PyuTDZY`&5bU*Q9WNt`bl zfkuYwzoatZfO22Z3d}9U(L{%BGp<6*@W$g@%Dfn45i*s`sfjDaE<^}*A^`FbX6MBMc_6$^sS^Cba z9FU*MBJn8^Fa9No@T%$!yrtar^DCW|)GvDh*{wlM0L*h2G=o84v$ZXQpq+PpWOE|T zi6BZ z7!x-~RbvjXv;l>n&&Czdj#8lxIQ=N;%^Nk0q+?S+lzsmgTX{ej9?nlq;?Mas73&ely)x#@=6;(stw;Go#BAwkAT2F!iv%*HkY$K9&h@ zI)2=GY?zkG!PPh=@Je=20a83Ip$!3%6|K39?8*=rad8RVeY*}FFe>U$;&dUZ3UhL* zQ4nRdl30F@)>5YL7!M4oa`!o^MLo>Cg%iXv93}%xO2p`tl$3Ed`uMJ*WDx%_?ph;S zW^%wxX2KcAcXWd26Ke}G*BLi%2mO>ZFl194>;|G*PDH%Sg#3IvJ2mHQQs$+rR|{y3 zqy?t2&^&yPqD17$W}!cPTLr!6-3eDmiP@u9uU>atID@j$9ubaI3y0o~0s{z;wGxt` zHhuwL=6|$)G!*v@espZ46(E0S7{9#T6bMH#){sTyjBS5(YA5ZfclUp(z{j)g*5aa~ zO9Wb_N4=aJ*RLmD4|d!W+I4Qop$@C+wOhBcnE-JczKq@WHE{W}1Fg0<;GH%0A6|cJ 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

    f2AiR`{f7g1Sq)f?Tt>b- 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

    M`1fG7y84{19D6&Tc3L_`FX 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

    o(Ww5t^%cgSJad!ih|s0*nXc<=6TE?%L_$~ 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

    }btAje_fL<%^t0T^=a^wF5ah8~$0Bet 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

    25.719000 K (93.033098%)", "paired end (151 cycles + 151 cycles)"] def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 198"] + "reads passed filter: 162"] def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads_fail.get(0).get(1).get(1)).linesGzip.contains(failed_read2_line) } + { assert path(process.out.reads_fail.get(0).get(1).get(2)).linesGzip.contains(failed_read2_line) } } }, { html_text.each { html_part -> diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index b4c0e1dd..3e876288 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -7,7 +7,7 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,168f516f7bd4b7b6c32da7cba87299a4" + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" ] ] ], @@ -15,7 +15,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-01-17T18:08:06.123035" + "timestamp": "2024-03-18T16:19:15.063001" }, "test_fastp_paired_end_merged-for_stub_match": { "content": [ @@ -65,7 +65,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-01-17T18:06:00.223817" + "timestamp": "2024-03-18T16:18:43.526412" }, "versions_paired_end": { "content": [ @@ -112,7 +112,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-02-01T12:03:37.827323085" + "timestamp": "2024-03-18T16:19:15.111894" }, "test_fastp_paired_end_merged_match": { "content": [ @@ -283,7 +283,7 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-02-01T11:57:30.791982648" + "timestamp": "2024-03-18T16:18:43.580336" }, "versions_paired_end_merged_adapterlist": { "content": [ diff --git a/modules/nf-core/fastp/tests/nextflow.interleaved.config b/modules/nf-core/fastp/tests/nextflow.interleaved.config new file mode 100644 index 00000000..4be8dbd2 --- /dev/null +++ b/modules/nf-core/fastp/tests/nextflow.interleaved.config @@ -0,0 +1,5 @@ +process { + withName: FASTP { + ext.args = "--interleaved_in -e 30" + } +} diff --git a/modules/nf-core/fastp/tests/nextflow.config b/modules/nf-core/fastp/tests/nextflow.save_failed.config similarity index 50% rename from modules/nf-core/fastp/tests/nextflow.config rename to modules/nf-core/fastp/tests/nextflow.save_failed.config index 0f7849ad..53b61b0c 100644 --- a/modules/nf-core/fastp/tests/nextflow.config +++ b/modules/nf-core/fastp/tests/nextflow.save_failed.config @@ -1,6 +1,5 @@ process { - withName: FASTP { - ext.args = "--interleaved_in" + ext.args = "-e 30" } } diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test new file mode 100644 index 00000000..2289f73f --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test @@ -0,0 +1,38 @@ +nextflow_process { + + name "Test Process GATK4_BEDTOINTERVALLIST" + script "../main.nf" + process "GATK4_BEDTOINTERVALLIST" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/bedtointervallist" + + test("test_gatk4_bedtointervallist") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + [file(params.modules_testdata_base_path + + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + input[1] = [ [ id:'dict' ], // meta map + [file(params.modules_testdata_base_path + + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap new file mode 100644 index 00000000..48c322fd --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "test_gatk4_bedtointervallist": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.interval_list:md5,e51101c9357fb2d59fd30e370eefa39c" + ] + ], + "1": [ + "versions.yml:md5,29a18c36f27584eb5a5f2f5457088b3b" + ], + "interval_list": [ + [ + { + "id": "test" + }, + "test.interval_list:md5,e51101c9357fb2d59fd30e370eefa39c" + ] + ], + "versions": [ + "versions.yml:md5,29a18c36f27584eb5a5f2f5457088b3b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-19T14:20:12.168775" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml b/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml new file mode 100644 index 00000000..b4d54f12 --- /dev/null +++ b/modules/nf-core/gatk4/bedtointervallist/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/bedtointervallist: + - "modules/nf-core/gatk4/bedtointervallist/**" diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test new file mode 100644 index 00000000..a8a9c6d2 --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process GATK4_CREATESEQUENCEDICTIONARY" + script "../main.nf" + process "GATK4_CREATESEQUENCEDICTIONARY" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/createsequencedictionary" + + test("sarscov2 - fasta") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - fasta - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap new file mode 100644 index 00000000..16735f95 --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "sarscov2 - fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.dict:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ], + "dict": [ + [ + { + "id": "test" + }, + "genome.dict:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-16T10:16:16.34453" + }, + "sarscov2 - fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "genome.dict:md5,7362679f176e0f52add03c08f457f646" + ] + ], + "1": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ], + "dict": [ + [ + { + "id": "test" + }, + "genome.dict:md5,7362679f176e0f52add03c08f457f646" + ] + ], + "versions": [ + "versions.yml:md5,e60dd34a71fc2029d81dc67ccb5d6be6" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-16T13:58:25.822068" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml b/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml new file mode 100644 index 00000000..035c5e4c --- /dev/null +++ b/modules/nf-core/gatk4/createsequencedictionary/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/createsequencedictionary: + - "modules/nf-core/gatk4/createsequencedictionary/**" diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/README.md b/modules/nf-core/gatk4/determinegermlinecontigploidy/README.md new file mode 100644 index 00000000..c6a45456 --- /dev/null +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/README.md @@ -0,0 +1,9 @@ +# Conda is not supported at the moment + +The [bioconda](https://bioconda.github.io/recipes/gatk4/README.html) recipe is not fully working as expected, cf [github issue](https://github.com/broadinstitute/gatk/issues/7811) + +Hence, we are using the docker container provided by the authors of the tool: + +- [broadinstitute/gatk](https://hub.docker.com/r/broadinstitute/gatk) + +This image is mirrored on the [nf-core quay.io](https://quay.io/repository/nf-core/gatk) for convenience. diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf index 38dd44c7..0532ec02 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/main.nf +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -59,7 +59,7 @@ process GATK4_FILTERMUTECTCALLS { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi touch ${prefix}.vcf.gz.filteringStats.tsv diff --git a/modules/nf-core/gatk4/filtermutectcalls/tests/main.nf.test b/modules/nf-core/gatk4/filtermutectcalls/tests/main.nf.test new file mode 100644 index 00000000..83c3703f --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/tests/main.nf.test @@ -0,0 +1,176 @@ +nextflow_process { + + name "Test Process GATK4_FILTERMUTECTCALLS" + script "../main.nf" + process "GATK4_FILTERMUTECTCALLS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/filtermutectcalls" + + test("human - vcf - base") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.stats', checkIfExists: true), + [], + [], + [], + [] + ] + + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions_base") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert path(process.out.tbi.get(0).get(1)).linesGzip.toString().contains("TBI")}, + { assert snapshot(file(process.out.stats.get(0).get(1)).readLines()[0]).match() } + ) + } + + } + + test("human - vcf - with-files") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.stats', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_test2_paired_mutect2_calls.artifact-prior.tar.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_test2_paired.segmentation.table', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_test2_paired.contamination.table', checkIfExists: true), + [] + ] + + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions_with-files") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert path(process.out.tbi.get(0).get(1)).linesGzip.toString().contains("TBI")}, + { assert snapshot(file(process.out.stats.get(0).get(1)).readLines()[0..5]).match() } + ) + } + + } + + test("human - vcf - use-val") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.stats', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_test2_paired_mutect2_calls.artifact-prior.tar.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/test_test2_paired.segmentation.table', checkIfExists: true), + [], + '20.0' + ] + + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions_use-val") }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") }, + { assert path(process.out.tbi.get(0).get(1)).linesGzip.toString().contains("TBI")}, + { assert snapshot(file(process.out.stats.get(0).get(1)).readLines()[0]).match() } + ) + } + + } + + test("human - vcf - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/paired_mutect2_calls/test_test2_paired_mutect2_calls.vcf.gz.stats', checkIfExists: true), + [], + [], + [], + [] + ] + + input[1] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + ] + input[2] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/filtermutectcalls/tests/main.nf.test.snap b/modules/nf-core/gatk4/filtermutectcalls/tests/main.nf.test.snap new file mode 100644 index 00000000..1c39e3b5 --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/tests/main.nf.test.snap @@ -0,0 +1,140 @@ +{ + "human - vcf - use-val": { + "content": [ + "#Ln prior of deletion of length 10=-20.72326583694641" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:46:03.887912" + }, + "versions_with-files": { + "content": [ + [ + "versions.yml:md5,1e86368bd682668a6777ccf2cfd90689" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:45:43.679571" + }, + "human - vcf - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.filtered.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.filtered.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.filtered.vcf.gz.filteringStats.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,1e86368bd682668a6777ccf2cfd90689" + ], + "stats": [ + [ + { + "id": "test" + }, + "test.filtered.vcf.gz.filteringStats.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + [ + { + "id": "test" + }, + "test.filtered.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.filtered.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,1e86368bd682668a6777ccf2cfd90689" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:46:32.666273" + }, + "versions_use-val": { + "content": [ + [ + "versions.yml:md5,1e86368bd682668a6777ccf2cfd90689" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:46:03.876073" + }, + "versions_base": { + "content": [ + [ + "versions.yml:md5,1e86368bd682668a6777ccf2cfd90689" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:47:39.930795" + }, + "human - vcf - with-files": { + "content": [ + [ + "#Ln prior of deletion of length 10=-20.72326583694641", + "#Ln prior of deletion of length 9=-20.72326583694641", + "#Ln prior of deletion of length 8=-20.72326583694641", + "#Ln prior of deletion of length 7=-20.72326583694641", + "#Ln prior of deletion of length 6=-20.72326583694641", + "#Ln prior of deletion of length 5=-20.72326583694641" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:45:43.699286" + }, + "human - vcf - base": { + "content": [ + "#Ln prior of deletion of length 10=-20.72326583694641" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-05-15T12:47:39.949405" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/filtermutectcalls/tests/nextflow.config b/modules/nf-core/gatk4/filtermutectcalls/tests/nextflow.config new file mode 100644 index 00000000..12fa58fb --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_FILTERMUTECTCALLS { + ext.prefix = { "${meta.id}.filtered" } + } +} diff --git a/modules/nf-core/gatk4/filtermutectcalls/tests/tags.yml b/modules/nf-core/gatk4/filtermutectcalls/tests/tags.yml new file mode 100644 index 00000000..44731031 --- /dev/null +++ b/modules/nf-core/gatk4/filtermutectcalls/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/filtermutectcalls: + - "modules/nf-core/gatk4/filtermutectcalls/**" diff --git a/modules/nf-core/gatk4/germlinecnvcaller/README.md b/modules/nf-core/gatk4/germlinecnvcaller/README.md new file mode 100644 index 00000000..c6a45456 --- /dev/null +++ b/modules/nf-core/gatk4/germlinecnvcaller/README.md @@ -0,0 +1,9 @@ +# Conda is not supported at the moment + +The [bioconda](https://bioconda.github.io/recipes/gatk4/README.html) recipe is not fully working as expected, cf [github issue](https://github.com/broadinstitute/gatk/issues/7811) + +Hence, we are using the docker container provided by the authors of the tool: + +- [broadinstitute/gatk](https://hub.docker.com/r/broadinstitute/gatk) + +This image is mirrored on the [nf-core quay.io](https://quay.io/repository/nf-core/gatk) for convenience. diff --git a/modules/nf-core/gatk4/intervallisttools/tests/main.nf.test b/modules/nf-core/gatk4/intervallisttools/tests/main.nf.test new file mode 100644 index 00000000..2891bf9e --- /dev/null +++ b/modules/nf-core/gatk4/intervallisttools/tests/main.nf.test @@ -0,0 +1,72 @@ +nextflow_process { + + name "Test Process GATK4_INTERVALLISTTOOLS" + script "../main.nf" + process "GATK4_INTERVALLISTTOOLS" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/bedtointervallist" + tag "gatk4/intervallisttools" + + setup { + run("GATK4_BEDTOINTERVALLIST") { + script "../../bedtointervallist/main.nf" + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true)] + ] + input[1] = [ + [ id:'dict' ], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)] + ] + """ + } + } + } + + test("test_gatk4_intervallisttools") { + + when { + process { + """ + input[0] = GATK4_BEDTOINTERVALLIST.out.interval_list + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + + test("test_gatk4_intervallisttools -stub") { + + options "-stub" + + when { + process { + """ + input[0] = GATK4_BEDTOINTERVALLIST.out.interval_list + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/intervallisttools/tests/main.nf.test.snap b/modules/nf-core/gatk4/intervallisttools/tests/main.nf.test.snap new file mode 100644 index 00000000..7718ed00 --- /dev/null +++ b/modules/nf-core/gatk4/intervallisttools/tests/main.nf.test.snap @@ -0,0 +1,88 @@ +{ + "test_gatk4_intervallisttools": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "1scattered.interval_list:md5,64f6665f9fbd257e4a300ec602f4e995", + "2scattered.interval_list:md5,f515c3da0c6accfd8e7dc33df50855c5", + "3scattered.interval_list:md5,7a918e8c9211b54334587793e8cbae53", + "4scattered.interval_list:md5,1b93105227a7dc81f07101a1efd31498" + ] + ] + ], + "1": [ + "versions.yml:md5,ff682cc9ad70d65a80280df57b316b03" + ], + "interval_list": [ + [ + { + "id": "test" + }, + [ + "1scattered.interval_list:md5,64f6665f9fbd257e4a300ec602f4e995", + "2scattered.interval_list:md5,f515c3da0c6accfd8e7dc33df50855c5", + "3scattered.interval_list:md5,7a918e8c9211b54334587793e8cbae53", + "4scattered.interval_list:md5,1b93105227a7dc81f07101a1efd31498" + ] + ] + ], + "versions": [ + "versions.yml:md5,ff682cc9ad70d65a80280df57b316b03" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T21:26:22.252885" + }, + "test_gatk4_intervallisttools -stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + [ + "1scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "2scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "3scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "4scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + "versions.yml:md5,ff682cc9ad70d65a80280df57b316b03" + ], + "interval_list": [ + [ + { + "id": "test" + }, + [ + "1scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "2scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "3scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e", + "4scattered.interval_list:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions": [ + "versions.yml:md5,ff682cc9ad70d65a80280df57b316b03" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:15:11.772344" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/intervallisttools/tests/nextflow.config b/modules/nf-core/gatk4/intervallisttools/tests/nextflow.config new file mode 100644 index 00000000..b24b20db --- /dev/null +++ b/modules/nf-core/gatk4/intervallisttools/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: GATK4_INTERVALLISTTOOLS { + ext.args = '--SCATTER_COUNT 6 --SUBDIVISION_MODE BALANCING_WITHOUT_INTERVAL_SUBDIVISION_WITH_OVERFLOW --UNIQUE true --SORT true' + } +} diff --git a/modules/nf-core/gatk4/intervallisttools/tests/tags.yml b/modules/nf-core/gatk4/intervallisttools/tests/tags.yml new file mode 100644 index 00000000..bf85ff5f --- /dev/null +++ b/modules/nf-core/gatk4/intervallisttools/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/intervallisttools: + - "modules/nf-core/gatk4/intervallisttools/**" diff --git a/modules/nf-core/gatk4/mutect2/tests/f1r2.config b/modules/nf-core/gatk4/mutect2/tests/f1r2.config new file mode 100644 index 00000000..2d3c8a17 --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/tests/f1r2.config @@ -0,0 +1,3 @@ +process { + ext.args = { "--normal-sample $meta.normal_id --f1r2-tar-gz ${meta.id}.f1r2.tar.gz" } +} diff --git a/modules/nf-core/gatk4/mutect2/tests/main.nf.test b/modules/nf-core/gatk4/mutect2/tests/main.nf.test new file mode 100644 index 00000000..d247ee35 --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/tests/main.nf.test @@ -0,0 +1,360 @@ +nextflow_process { + + name "Test Process GATK4_MUTECT2" + script "../main.nf" + process "GATK4_MUTECT2" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/mutect2" + + test("tumor_normal_pair") { + config "./pair.config" + when { + process { + """ + input[0] = [ + [ + id:'test', + normal_id:'normal', + tumor_id:'tumour' + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + ], + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + ] + input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) + input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) + input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) + input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats, + process.out.f1r2, + process.out.versions, + ).match() + } + ) + } + } + + test("tumor_normal_pair_f1r2") { + config "./f1r2.config" + when { + process { + """ + input[0] = [ + [ + id:'test', + normal_id:'normal', + tumor_id:'tumour' + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + ], + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + ] + input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) + input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) + input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) + input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + """ + } + } + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats, + process.out.f1r2.collect { file(it[1]).getName() }, + process.out.versions + ).match() + } + ) + } + } + test("tumor_single"){ + when { + process { + """ + input[0] = [ + [ id:'test'], + [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true)], + [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + ] + input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) + input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) + input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) + input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + """ + } + } + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats, + process.out.f1r2, + process.out.versions + ).match() + } + ) + } + } + test("cram_input"){ + when { + process{ + """ + input[0] = [ + [ id:'test'], + [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram'], checkIfExists: true)], + [ file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true)], + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + ] + input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) + input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) + input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) + input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + """ + } + } + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats, + process.out.f1r2, + process.out.versions + ).match() + } + ) + } + } + + test("generate_pon") { + when { + process { + """ + input[0] = [ + [ id:'test'], + [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true)], + [ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + ] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats, + process.out.f1r2, + process.out.versions + ).match() + } + ) + } + } + + test("mitochondria"){ + when { + process { + """ + input[0] = [ + [ id:'test'], + [ file(params.test_data['homo_sapiens']['illumina']['mitochon_standin_recalibrated_sorted_bam'], checkIfExists: true)], + [ file(params.test_data['homo_sapiens']['illumina']['mitochon_standin_recalibrated_sorted_bam_bai'], checkIfExists: true)], + [ file(params.test_data['homo_sapiens']['genome']['genome_bed'], checkIfExists: true)] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_dict'], checkIfExists: true) + ] + input[4] = [] + input[5] = [] + input[6] = [] + input[7] = [] + """ + } + } + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats, + process.out.f1r2, + process.out.versions + ).match() + } + ) + } + } + + test("tumor_normal_pair_f1r2_stubs"){ + options "-stub-run" + when { + process { + """ + input[0] = [ + [ + id:'test', + normal_id:'normal', + tumor_id:'tumour' + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam'], checkIfExists: true) + ], + [ + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test2_paired_end_recalibrated_sorted_bam_bai'], checkIfExists: true) + ], + [] + ] + input[1] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta'], checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_fasta_fai'], checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], + file(params.test_data['homo_sapiens']['genome']['genome_21_dict'], checkIfExists: true) + ] + input[4] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz'], checkIfExists: true) + input[5] = file(params.test_data['homo_sapiens']['genome']['gnomad_r2_1_1_21_vcf_gz_tbi'], checkIfExists: true) + input[6] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz'], checkIfExists: true) + input[7] = file(params.test_data['homo_sapiens']['genome']['mills_and_1000g_indels_21_vcf_gz_tbi'], checkIfExists: true) + """ + } + } + then { + assertAll( + { assert process.success }, + { + assert snapshot( + process.out.vcf.collect { file(it[1]).getName() }, + process.out.tbi.collect { file(it[1]).getName() }, + process.out.stats.collect { file(it[1]).getName() }, + process.out.f1r2.collect { file(it[1]).getName() }, + process.out.versions.collect { file(it[1]).getName() } + ).match() + } + ) + } + + } + +} diff --git a/modules/nf-core/gatk4/mutect2/tests/main.nf.test.snap b/modules/nf-core/gatk4/mutect2/tests/main.nf.test.snap new file mode 100644 index 00000000..f047af19 --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/tests/main.nf.test.snap @@ -0,0 +1,204 @@ +{ + "tumor_normal_pair_f1r2_stubs": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + "test.vcf.gz.stats" + ], + [ + "test.f1r2.tar.gz" + ], + [ + "h" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-21T10:14:45.599103891" + }, + "generate_pon": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.stats:md5,b569ce66bbffe9588b3d221e821023ee" + ] + ], + [ + + ], + [ + "versions.yml:md5,d94731c50c20569fe9896235a843f382" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-20T15:57:18.264453766" + }, + "mitochondria": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.stats:md5,4f77301a125913170b8e9e7828b4ca3f" + ] + ], + [ + + ], + [ + "versions.yml:md5,d94731c50c20569fe9896235a843f382" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-20T16:05:47.668766905" + }, + "cram_input": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.stats:md5,55ed641e16089afb33cdbc478e202d3d" + ] + ], + [ + + ], + [ + "versions.yml:md5,d94731c50c20569fe9896235a843f382" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-20T15:52:27.894730554" + }, + "tumor_single": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + [ + { + "id": "test" + }, + "test.vcf.gz.stats:md5,55ed641e16089afb33cdbc478e202d3d" + ] + ], + [ + + ], + [ + "versions.yml:md5,d94731c50c20569fe9896235a843f382" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-20T15:43:28.935723443" + }, + "tumor_normal_pair": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + [ + { + "id": "test", + "normal_id": "normal", + "tumor_id": "tumour" + }, + "test.vcf.gz.stats:md5,17d2091015d04cbd4a26b7a67dc659e6" + ] + ], + [ + + ], + [ + "versions.yml:md5,d94731c50c20569fe9896235a843f382" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-20T15:31:31.913366311" + }, + "tumor_normal_pair_f1r2": { + "content": [ + [ + "test.vcf.gz" + ], + [ + "test.vcf.gz.tbi" + ], + [ + [ + { + "id": "test", + "normal_id": "normal", + "tumor_id": "tumour" + }, + "test.vcf.gz.stats:md5,17d2091015d04cbd4a26b7a67dc659e6" + ] + ], + [ + "test.f1r2.tar.gz" + ], + [ + "versions.yml:md5,d94731c50c20569fe9896235a843f382" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-03-21T09:45:52.321385704" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/mutect2/tests/mito.config b/modules/nf-core/gatk4/mutect2/tests/mito.config new file mode 100644 index 00000000..de61d3e2 --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/tests/mito.config @@ -0,0 +1,3 @@ +process { + ext.args = { "--mitochondria-mode" } +} diff --git a/modules/nf-core/gatk4/mutect2/tests/pair.config b/modules/nf-core/gatk4/mutect2/tests/pair.config new file mode 100644 index 00000000..2a812b82 --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/tests/pair.config @@ -0,0 +1,3 @@ +process { + ext.args = { "--normal-sample $meta.normal_id" } +} diff --git a/modules/nf-core/gatk4/mutect2/tests/tags.yml b/modules/nf-core/gatk4/mutect2/tests/tags.yml new file mode 100644 index 00000000..46187927 --- /dev/null +++ b/modules/nf-core/gatk4/mutect2/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/mutect2: + - "modules/nf-core/gatk4/mutect2/**" diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/README.md b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/README.md new file mode 100644 index 00000000..c6a45456 --- /dev/null +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/README.md @@ -0,0 +1,9 @@ +# Conda is not supported at the moment + +The [bioconda](https://bioconda.github.io/recipes/gatk4/README.html) recipe is not fully working as expected, cf [github issue](https://github.com/broadinstitute/gatk/issues/7811) + +Hence, we are using the docker container provided by the authors of the tool: + +- [broadinstitute/gatk](https://hub.docker.com/r/broadinstitute/gatk) + +This image is mirrored on the [nf-core quay.io](https://quay.io/repository/nf-core/gatk) for convenience. diff --git a/modules/nf-core/gatk4/variantfiltration/tests/main.nf.test b/modules/nf-core/gatk4/variantfiltration/tests/main.nf.test new file mode 100644 index 00000000..36b7438d --- /dev/null +++ b/modules/nf-core/gatk4/variantfiltration/tests/main.nf.test @@ -0,0 +1,87 @@ +nextflow_process { + + name "Test Process GATK4_VARIANTFILTRATION" + script "../main.nf" + process "GATK4_VARIANTFILTRATION" + + tag "modules" + tag "modules_nfcore" + tag "gatk4" + tag "gatk4/variantfiltration" + + test("test_gatk4_variantfiltration_vcf_input") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.idx', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions, + file(process.out.vcf.get(0).get(1)).name, + file(process.out.tbi.get(0).get(1)).name).match() }, + ) + } + + } + + test("test_gatk4_variantfiltration_gz_input") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.dict', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions, + file(process.out.vcf.get(0).get(1)).name, + file(process.out.tbi.get(0).get(1)).name).match() }, + ) + } + + } + +} + diff --git a/modules/nf-core/gatk4/variantfiltration/tests/main.nf.test.snap b/modules/nf-core/gatk4/variantfiltration/tests/main.nf.test.snap new file mode 100644 index 00000000..36c03f7c --- /dev/null +++ b/modules/nf-core/gatk4/variantfiltration/tests/main.nf.test.snap @@ -0,0 +1,30 @@ +{ + "test_gatk4_variantfiltration_gz_input": { + "content": [ + [ + "versions.yml:md5,96943659275ba62de1f0d283a2f6e97b" + ], + "test.vcf.gz", + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:43:27.609784" + }, + "test_gatk4_variantfiltration_vcf_input": { + "content": [ + [ + "versions.yml:md5,96943659275ba62de1f0d283a2f6e97b" + ], + "test.vcf.gz", + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.04.2" + }, + "timestamp": "2024-05-22T22:42:55.316294" + } +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/variantfiltration/tests/tags.yml b/modules/nf-core/gatk4/variantfiltration/tests/tags.yml new file mode 100644 index 00000000..4818037d --- /dev/null +++ b/modules/nf-core/gatk4/variantfiltration/tests/tags.yml @@ -0,0 +1,2 @@ +gatk4/variantfiltration: + - "modules/nf-core/gatk4/variantfiltration/**" diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index 5d5666c6..c1b339a9 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -66,11 +66,11 @@ process MANTA_GERMLINE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.candidate_small_indels.vcf.gz + echo "" | gzip > ${prefix}.candidate_small_indels.vcf.gz touch ${prefix}.candidate_small_indels.vcf.gz.tbi - touch ${prefix}.candidate_sv.vcf.gz + echo "" | gzip > ${prefix}.candidate_sv.vcf.gz touch ${prefix}.candidate_sv.vcf.gz.tbi - touch ${prefix}.diploid_sv.vcf.gz + echo "" | gzip > ${prefix}.diploid_sv.vcf.gz touch ${prefix}.diploid_sv.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/manta/germline/tests/main.nf.test b/modules/nf-core/manta/germline/tests/main.nf.test new file mode 100644 index 00000000..1d49ad23 --- /dev/null +++ b/modules/nf-core/manta/germline/tests/main.nf.test @@ -0,0 +1,162 @@ +nextflow_process { + + name "Test Process MANTA_GERMLINE" + script "../main.nf" + process "MANTA_GERMLINE" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "manta" + tag "manta/germline" + + test("human - cram") { + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [],[] + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = Channel.of("[manta]", "enableRemoteReadRetrievalForInsertionsInGermlineCallingModes = 0") + .collectFile(name:"manta_options.ini", newLine:true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.candidate_small_indels_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.candidate_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.diploid_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert snapshot(process.out.version).match("version") } + ) + } + + } + + test("human - cram - bed") { + + when { + process { + """ + input[0] = [ [ id:'bed_test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz.tbi', checkIfExists: true) + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.candidate_small_indels_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.candidate_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.diploid_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert snapshot(process.out.version).match("bed_version") } + ) + } + + } + + test("human - cram - bed - jointcalling") { + + when { + process { + """ + input[0] = [ [ id:'bed_test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram', checkIfExists: true) + ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram.crai', checkIfExists: true) + ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed.gz.tbi', checkIfExists: true) + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.candidate_small_indels_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.candidate_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert path(process.out.diploid_sv_vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.1") }, + { assert snapshot(process.out.version).match("joint_version") } + ) + } + + } + test("human - cram - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + [],[] + ] + // fasta + input[1] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // fai + input[2] = [ [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + // config + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/manta/germline/tests/main.nf.test.snap b/modules/nf-core/manta/germline/tests/main.nf.test.snap new file mode 100644 index 00000000..79d5541e --- /dev/null +++ b/modules/nf-core/manta/germline/tests/main.nf.test.snap @@ -0,0 +1,139 @@ +{ + "human - cram - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + "versions.yml:md5,18070b443a26855ef64dafa179dfba01" + ], + "candidate_small_indels_vcf": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "candidate_small_indels_vcf_tbi": [ + [ + { + "id": "test" + }, + "test.candidate_small_indels.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "candidate_sv_vcf": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "candidate_sv_vcf_tbi": [ + [ + { + "id": "test" + }, + "test.candidate_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "diploid_sv_vcf": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "diploid_sv_vcf_tbi": [ + [ + { + "id": "test" + }, + "test.diploid_sv.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,18070b443a26855ef64dafa179dfba01" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-21T17:54:09.788372" + }, + "joint_version": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T15:03:07.745972" + }, + "bed_version": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-21T13:49:38.745653" + }, + "version": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-21T13:49:14.885769" + } +} \ No newline at end of file diff --git a/modules/nf-core/manta/germline/tests/nextflow.config b/modules/nf-core/manta/germline/tests/nextflow.config new file mode 100644 index 00000000..22acb242 --- /dev/null +++ b/modules/nf-core/manta/germline/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: MANTA_GERMLINE { + ext.args = '--exome ' + } +} diff --git a/modules/nf-core/manta/germline/tests/tags.yml b/modules/nf-core/manta/germline/tests/tags.yml new file mode 100644 index 00000000..99d1a73c --- /dev/null +++ b/modules/nf-core/manta/germline/tests/tags.yml @@ -0,0 +1,2 @@ +manta/germline: + - "modules/nf-core/manta/germline/**" diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml index 88c7126c..bcb9d64a 100644 --- a/modules/nf-core/mosdepth/environment.yml +++ b/modules/nf-core/mosdepth/environment.yml @@ -5,4 +5,4 @@ channels: - defaults dependencies: # renovate: datasource=conda depName=bioconda/mosdepth - - mosdepth=0.3.6 + - mosdepth=0.3.8 diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index c7e24303..6f4a8383 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -4,8 +4,8 @@ process MOSDEPTH { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.6--hd299d5a_0' : - 'biocontainers/mosdepth:0.3.6--hd299d5a_0'}" + 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.8--hd299d5a_0' : + 'biocontainers/mosdepth:0.3.8--hd299d5a_0'}" input: tuple val(meta), path(bam), path(bai), path(bed) @@ -63,13 +63,13 @@ process MOSDEPTH { touch ${prefix}.region.dist.txt touch ${prefix}.summary.txt touch ${prefix}.per-base.d4 - touch ${prefix}.per-base.bed.gz + echo "" | gzip > ${prefix}.per-base.bed.gz touch ${prefix}.per-base.bed.gz.csi - touch ${prefix}.regions.bed.gz + echo "" | gzip > ${prefix}.regions.bed.gz touch ${prefix}.regions.bed.gz.csi - touch ${prefix}.quantized.bed.gz + echo "" | gzip > ${prefix}.quantized.bed.gz touch ${prefix}.quantized.bed.gz.csi - touch ${prefix}.thresholds.bed.gz + echo "" | gzip > ${prefix}.thresholds.bed.gz touch ${prefix}.thresholds.bed.gz.csi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test index d991f819..21eebc1f 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -237,21 +237,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.global_txt[0][1]).name, - file(process.out.summary_txt[0][1]).name, - file(process.out.regions_txt[0][1]).name, - file(process.out.per_base_d4[0][1]).name, - file(process.out.per_base_bed[0][1]).name, - file(process.out.per_base_csi[0][1]).name, - file(process.out.regions_bed[0][1]).name, - file(process.out.regions_csi[0][1]).name, - file(process.out.quantized_bed[0][1]).name, - file(process.out.quantized_csi[0][1]).name, - file(process.out.thresholds_bed[0][1]).name, - file(process.out.thresholds_csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap index dc4d9508..c604540b 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test.snap +++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap @@ -1,23 +1,236 @@ { "homo_sapiens - bam, bai, [] - stub": { "content": [ - "test.global.dist.txt", - "test.summary.txt", - "test.region.dist.txt", - "test.per-base.d4", - "test.per-base.bed.gz", - "test.per-base.bed.gz.csi", - "test.regions.bed.gz", - "test.regions.bed.gz.csi", - "test.quantized.bed.gz", - "test.quantized.bed.gz.csi", - "test.thresholds.bed.gz", - "test.thresholds.bed.gz.csi", - [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.global.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "11": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.d4:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "6": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "7": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "9": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "global_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.global.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "per_base_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "per_base_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "per_base_d4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.per-base.d4:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "quantized_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "quantized_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.quantized.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "regions_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "regions_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.regions.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "regions_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "summary_txt": [ + [ + { + "id": "test", + "single_end": true + }, + "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "thresholds_bed": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "thresholds_csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + ] + } ], - "timestamp": "2023-11-27T15:14:34.897155161" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:33:16.953408231" }, "homo_sapiens - cram, crai, bed": { "content": [ @@ -47,7 +260,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -67,7 +280,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -76,7 +289,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -85,7 +298,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "7": [ @@ -94,7 +307,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "8": [ @@ -118,7 +331,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -127,7 +340,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -145,7 +358,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "regions_csi": [ @@ -154,7 +367,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "regions_txt": [ @@ -182,11 +395,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:18.171150781" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:50.160217828" }, "homo_sapiens - bam, bai, [] - quantized": { "content": [ @@ -216,7 +433,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ @@ -230,7 +447,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -239,7 +456,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -254,7 +471,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" + "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" ] ], "9": [ @@ -263,7 +480,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" + "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0" ] ], "global_txt": [ @@ -281,7 +498,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -290,7 +507,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -302,7 +519,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" + "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" ] ], "quantized_csi": [ @@ -311,7 +528,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" + "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0" ] ], "regions_bed": [ @@ -339,11 +556,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:29.228103864" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:33:01.164885111" }, "homo_sapiens - bam, bai, bed": { "content": [ @@ -373,7 +594,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -393,7 +614,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -402,7 +623,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -411,7 +632,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "7": [ @@ -420,7 +641,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "8": [ @@ -444,7 +665,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -453,7 +674,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -471,7 +692,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "regions_csi": [ @@ -480,7 +701,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "regions_txt": [ @@ -508,11 +729,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:04.537716314" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:39.071657456" }, "homo_sapiens - bam, bai, [] - window": { "content": [ @@ -542,7 +767,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -550,7 +775,7 @@ "id": "test", "single_end": true }, - "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" + "test.mosdepth.region.dist.txt:md5,0b6ea9f0da1228252d9aef2d3b6f7f76" ] ], "3": [ @@ -562,7 +787,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -571,7 +796,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -580,7 +805,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" + "test.regions.bed.gz:md5,34f48d16fcdd61e44d812e29e02c77b8" ] ], "7": [ @@ -589,7 +814,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" + "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970" ] ], "8": [ @@ -613,7 +838,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -622,7 +847,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -640,7 +865,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" + "test.regions.bed.gz:md5,34f48d16fcdd61e44d812e29e02c77b8" ] ], "regions_csi": [ @@ -649,7 +874,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" + "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970" ] ], "regions_txt": [ @@ -658,7 +883,7 @@ "id": "test", "single_end": true }, - "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" + "test.mosdepth.region.dist.txt:md5,0b6ea9f0da1228252d9aef2d3b6f7f76" ] ], "summary_txt": [ @@ -677,11 +902,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:23.708536171" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:55.631776118" }, "homo_sapiens - bam, bai, []": { "content": [ @@ -711,7 +940,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ @@ -725,7 +954,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -734,7 +963,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -764,7 +993,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -773,7 +1002,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -810,11 +1039,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:46:56.975710077" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:33.642125299" }, "homo_sapiens - cram, crai, []": { "content": [ @@ -844,7 +1077,7 @@ ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ @@ -858,7 +1091,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -867,7 +1100,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -897,7 +1130,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -906,7 +1139,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -943,11 +1176,15 @@ ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:47:12.09259995" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:32:44.704920941" }, "homo_sapiens - bam, bai, bed - thresholds": { "content": [ @@ -976,7 +1213,7 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" + "test.thresholds.bed.gz:md5,fe70ae728cd10726c42a2bcd44adfc9d" ] ], "11": [ @@ -985,11 +1222,11 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" + "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055" ] ], "12": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ], "2": [ [ @@ -1009,7 +1246,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "5": [ @@ -1018,7 +1255,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "6": [ @@ -1027,7 +1264,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "7": [ @@ -1036,7 +1273,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "8": [ @@ -1060,7 +1297,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" + "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" ] ], "per_base_csi": [ @@ -1069,7 +1306,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" + "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" ] ], "per_base_d4": [ @@ -1087,7 +1324,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" + "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" ] ], "regions_csi": [ @@ -1096,7 +1333,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" + "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" ] ], "regions_txt": [ @@ -1123,7 +1360,7 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" + "test.thresholds.bed.gz:md5,fe70ae728cd10726c42a2bcd44adfc9d" ] ], "thresholds_csi": [ @@ -1132,14 +1369,18 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" + "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055" ] ], "versions": [ - "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" ] } ], - "timestamp": "2023-11-27T14:49:44.311847326" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-04-29T13:33:06.737266831" } } \ No newline at end of file diff --git a/modules/nf-core/ngsbits/samplegender/meta.yml b/modules/nf-core/ngsbits/samplegender/meta.yml index 997bc06e..961462b3 100644 --- a/modules/nf-core/ngsbits/samplegender/meta.yml +++ b/modules/nf-core/ngsbits/samplegender/meta.yml @@ -12,7 +12,7 @@ tools: homepage: "https://github.com/imgag/ngs-bits" documentation: "https://github.com/imgag/ngs-bits" tool_dev_url: "https://github.com/imgag/ngs-bits" - licence: "['MIT license']" + licence: ["MIT"] input: - meta: type: map diff --git a/modules/nf-core/ngsbits/samplegender/tests/main.nf.test b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test new file mode 100644 index 00000000..2cf4757b --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test @@ -0,0 +1,47 @@ +nextflow_process { + + name "Test Process NGSBITS_SAMPLEGENDER" + script "../main.nf" + process "NGSBITS_SAMPLEGENDER" + + tag "modules" + tag "modules_nfcore" + tag "ngsbits" + tag "ngsbits/samplegender" + + // Only a stub test here because the modules needs the full chrX and chrY + test("homo_sapiens - bam, bai, [], [], sry - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), + file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true) + ] + input[1] = [ + [ id:'reference'], // meta map + [] + ] + input[2] = [ + [ id:'reference'], // meta map + [] + ] + input[3] = "sry" + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap new file mode 100644 index 00000000..48fd8af9 --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/tests/main.nf.test.snap @@ -0,0 +1,35 @@ +{ + "homo_sapiens - bam, bai, [], [], sry - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,72f3e70be3e6a734bf39d1a6bf6d604b" + ], + "tsv": [ + [ + { + "id": "test" + }, + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,72f3e70be3e6a734bf39d1a6bf6d604b" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.02.0" + }, + "timestamp": "2024-03-18T15:36:37.639882564" + } +} \ No newline at end of file diff --git a/modules/nf-core/ngsbits/samplegender/tests/tags.yml b/modules/nf-core/ngsbits/samplegender/tests/tags.yml new file mode 100644 index 00000000..8b7a0da9 --- /dev/null +++ b/modules/nf-core/ngsbits/samplegender/tests/tags.yml @@ -0,0 +1,2 @@ +ngsbits/samplegender: + - "modules/nf-core/ngsbits/samplegender/**" diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index dc1a387d..4300ba7f 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -8,12 +8,15 @@ process PICARD_ADDORREPLACEREADGROUPS { 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(reads) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fasta_index) output: - tuple val(meta), path("*.bam"), emit: bam - tuple val(meta), path("*.bai"), emit: bai, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*.bam") , emit: bam, optional: true + tuple val(meta), path("*.bai") , emit: bai, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -21,6 +24,8 @@ process PICARD_ADDORREPLACEREADGROUPS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { log.info '[Picard AddOrReplaceReadGroups] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -28,15 +33,16 @@ process PICARD_ADDORREPLACEREADGROUPS { avail_mem = (task.memory.mega*0.8).intValue() } - if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ picard \\ -Xmx${avail_mem}M \\ AddOrReplaceReadGroups \\ $args \\ - --INPUT ${bam} \\ - --OUTPUT ${prefix}.bam + $reference \\ + --INPUT ${reads} \\ + --OUTPUT ${prefix}.${suffix} cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -46,10 +52,10 @@ process PICARD_ADDORREPLACEREADGROUPS { stub: def prefix = task.ext.prefix ?: "${meta.id}" - - if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ - touch ${prefix}.bam + touch ${prefix}.${suffix} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/picard/addorreplacereadgroups/meta.yml b/modules/nf-core/picard/addorreplacereadgroups/meta.yml index ab573ac8..efd5b86d 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/meta.yml +++ b/modules/nf-core/picard/addorreplacereadgroups/meta.yml @@ -20,10 +20,28 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - bam: + - 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 ] + - reads: type: file - description: Input BAM file - pattern: "*.{bam}" + description: Sequence reads file, can be SAM/BAM/CRAM format + pattern: "*.{bam,cram,sam}" + - fasta: + type: file + description: Reference genome file + pattern: "*.{fasta,fa,fasta.gz,fa.gz}" + - fasta_index: + type: file + description: Reference genome index file + pattern: "*.{fai,fasta.fai,fa.fai,fasta.gz.fai,fa.gz.fai}" output: - meta: type: map @@ -40,8 +58,12 @@ output: pattern: "*.{bam}" - bai: type: file - description: BAM index file + description: An optional BAM index file pattern: "*.{bai}" + - cram: + type: file + description: Output CRAM file + pattern: "*.{cram}" authors: - "@sateeshperi" - "@mjcipriano" diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/bam.config b/modules/nf-core/picard/addorreplacereadgroups/tests/bam.config new file mode 100644 index 00000000..3f37c2fd --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/bam.config @@ -0,0 +1,13 @@ +process { + withName: 'PICARD_ADDORREPLACEREADGROUPS'{ + ext.prefix = { "${meta.id}.replaced"} + ext.args = {[ + "--CREATE_INDEX", + "-LB ${meta.id}", + "-PL ILLUMINA", + "-PU bc1", + "-SM ${meta.id}" + ].join(' ').trim()} + } + +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/cram.config b/modules/nf-core/picard/addorreplacereadgroups/tests/cram.config new file mode 100644 index 00000000..966c14d7 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/cram.config @@ -0,0 +1,13 @@ +process { + withName: 'PICARD_ADDORREPLACEREADGROUPS'{ + ext.prefix = { "${meta.id}.replaced"} + ext.args = {[ + "-LB ${meta.id}", + "-PL ILLUMINA", + "-PU bc1", + "-SM ${meta.id}" + ].join(' ').trim()} + ext.suffix = { "cram" } + } + +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test new file mode 100644 index 00000000..9c029354 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test @@ -0,0 +1,93 @@ + +nextflow_process { + + name "Test Process PICARD_ADDORREPLACEREADGROUPS" + script "../main.nf" + process "PICARD_ADDORREPLACEREADGROUPS" + + tag "modules" + tag "modules_nfcore" + tag "picard" + tag "picard/addorreplacereadgroups" + + test("sarscov2 - bam") { + config "./bam.config" + + when { + process { + """ + input[0] = [ [:], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ] + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.bam[0][1]).name, + file(process.out.bai[0][1]).name, + process.out.versions + ).match() + }, + ) + } + + } + + test("homo_sapiens - cram") { + config "./cram.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), ] + ] + input[1] = [ [:], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [ [:], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + file(process.out.cram[0][1]).name, + process.out.versions + ).match() + }, + ) + } + + } + + test("sarscov2 - bam - stub") { + config "./bam.config" + options "-stub" + + when { + process { + """ + input[0] = [ [:], file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ] + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap new file mode 100644 index 00000000..63a55843 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/main.nf.test.snap @@ -0,0 +1,74 @@ +{ + "homo_sapiens - cram": { + "content": [ + "test.replaced.cram", + [ + "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T12:05:47.668865" + }, + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + + }, + "null.replaced.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + ], + "bai": [ + + ], + "bam": [ + [ + { + + }, + "null.replaced.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "versions": [ + "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T10:51:24.530553" + }, + "sarscov2 - bam": { + "content": [ + "null.replaced.bam", + "null.replaced.bai", + [ + "versions.yml:md5,0a6f049f94501dcf23aabfbc0e272891" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T12:05:29.696728" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/addorreplacereadgroups/tests/tags.yml b/modules/nf-core/picard/addorreplacereadgroups/tests/tags.yml new file mode 100644 index 00000000..733010d6 --- /dev/null +++ b/modules/nf-core/picard/addorreplacereadgroups/tests/tags.yml @@ -0,0 +1,2 @@ +picard/addorreplacereadgroups: + - "modules/nf-core/picard/addorreplacereadgroups/**" diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index 80930cc4..ad0b2963 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -8,13 +8,14 @@ process PICARD_MARKDUPLICATES { 'biocontainers/picard:3.1.1--hdfd78af_0' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(reads) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) output: - tuple val(meta), path("*.bam") , emit: bam - tuple val(meta), path("*.bai") , optional:true, emit: bai + tuple val(meta), path("*.bam") , emit: bam, optional: true + tuple val(meta), path("*.bai") , emit: bai, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true tuple val(meta), path("*.metrics.txt"), emit: metrics path "versions.yml" , emit: versions @@ -24,6 +25,8 @@ process PICARD_MARKDUPLICATES { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -31,16 +34,16 @@ process PICARD_MARKDUPLICATES { avail_mem = (task.memory.mega*0.8).intValue() } - if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ picard \\ -Xmx${avail_mem}M \\ MarkDuplicates \\ $args \\ - --INPUT $bam \\ - --OUTPUT ${prefix}.bam \\ - --REFERENCE_SEQUENCE $fasta \\ + --INPUT $reads \\ + --OUTPUT ${prefix}.${suffix} \\ + $reference \\ --METRICS_FILE ${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml @@ -51,10 +54,10 @@ process PICARD_MARKDUPLICATES { stub: def prefix = task.ext.prefix ?: "${meta.id}" - if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + def suffix = task.ext.suffix ?: "${reads.getExtension()}" + if ("$reads" == "${prefix}.${suffix}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ - touch ${prefix}.bam - touch ${prefix}.bam.bai + touch ${prefix}.${suffix} touch ${prefix}.MarkDuplicates.metrics.txt cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 1ab90c07..1f0ffe16 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -21,9 +21,9 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - bam: + - reads: type: file - description: BAM file + description: Sequence reads file, can be SAM/BAM/CRAM format pattern: "*.{bam,cram,sam}" - meta2: type: map @@ -32,7 +32,7 @@ input: e.g. [ id:'genome' ] - fasta: type: file - description: Reference genome fasta file + description: Reference genome fasta file, required for CRAM input pattern: "*.{fasta,fa}" - meta3: type: map @@ -57,6 +57,10 @@ output: type: file description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag pattern: "*.{bai}" + - cram: + type: file + description: Output CRAM file + pattern: "*.{cram}" - metrics: type: file description: Duplicate metrics file generated by picard diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test index c5a29b4b..e3e97f6c 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test @@ -18,14 +18,8 @@ nextflow_process { [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) ]) - input[1] = Channel.of([ - [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = Channel.of([ - [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) - ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] """ } } @@ -49,14 +43,8 @@ nextflow_process { [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ]) - input[1] = Channel.of([ - [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ]) - input[2] = Channel.of([ - [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) - ]) + input[1] = [ [:], [] ] + input[2] = [ [:], [] ] """ } } @@ -95,7 +83,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(file(process.out.bam[0][1]).name).match("cram_name") }, + { assert snapshot(file(process.out.cram[0][1]).name).match("cram_name") }, { assert snapshot(path(process.out.metrics.get(0).get(1)).readLines()[0..2]).match("cram_metrics") }, { assert snapshot(process.out.versions).match("cram_versions") } ) diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap index 31c9130d..eb17111e 100644 --- a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap +++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap @@ -5,39 +5,59 @@ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" ] ], - "timestamp": "2024-01-19T10:26:45.092349" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-20T15:31:50.928021" }, "unsorted_bam_name": { "content": [ "test.marked.bam" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-19T10:26:28.100755" }, "cram_metrics": { "content": [ [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.cram --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" ] ], - "timestamp": "2024-01-19T10:27:03.253071" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-20T15:25:47.518152" }, "sorted_bam_metrics": { "content": [ [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" ] ], - "timestamp": "2024-01-19T10:26:45.086503" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T11:39:10.318331" }, "cram_name": { "content": [ - "test.marked.bam" + "test.marked.cram" ], - "timestamp": "2024-01-19T10:27:03.241617" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-20T15:25:47.459663" }, "cram_versions": { "content": [ @@ -45,6 +65,10 @@ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" ] ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-19T10:27:03.26989" }, "unsorted_bam_versions": { @@ -53,22 +77,34 @@ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17" ] ], - "timestamp": "2024-01-19T10:26:28.159071" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-20T15:31:24.040403" }, "unsorted_bam_metrics": { "content": [ [ "## htsjdk.samtools.metrics.StringHeader", - "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", + "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false", "## htsjdk.samtools.metrics.StringHeader" ] ], - "timestamp": "2024-01-19T10:26:28.143979" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-21T10:51:12.831787" }, "sorted_bam_name": { "content": [ "test.marked.bam" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, "timestamp": "2024-01-19T10:26:45.080116" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 3e95dd71..9c24eb0a 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -1,8 +1,10 @@ name: samtools_faidx + channels: - conda-forge - bioconda - defaults + dependencies: - - bioconda::samtools=1.19.2 - bioconda::htslib=1.19.1 + - bioconda::samtools=1.19.2 diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index e189af28..f3c25de2 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -39,6 +39,10 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - fa: + type: file + description: FASTA file + pattern: "*.{fa}" - fai: type: file description: FASTA index file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test new file mode 100644 index 00000000..17244ef2 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -0,0 +1,122 @@ +nextflow_process { + + name "Test Process SAMTOOLS_FAIDX" + script "../main.nf" + process "SAMTOOLS_FAIDX" + + tag "modules" + tag "modules_nfcore" + tag "samtools" + tag "samtools/faidx" + + test("test_samtools_faidx") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_bgzip") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fasta") { + + config "./nextflow2.config" + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_samtools_faidx_stub_fai") { + + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ] + + input[1] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap new file mode 100644 index 00000000..3e651ef6 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -0,0 +1,249 @@ +{ + "test_samtools_faidx": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:22:39.412601" + }, + "test_samtools_faidx_bgzip": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.gz.gzi:md5,7dea362b3fac8e00956a4952a3d4f474" + ] + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:23:22.427966" + }, + "test_samtools_faidx_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,6a0774a0ad937ba0bfd2ac7457d90f36" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:24:04.107537" + }, + "test_samtools_faidx_stub_fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + [ + { + "id": "test", + "single_end": false + }, + "extract.fa:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:24:45.868463" + }, + "test_samtools_faidx_stub_fai": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ], + "fa": [ + + ], + "fai": [ + [ + { + "id": "test", + "single_end": false + }, + "genome.fasta.fai:md5,9da2a56e2853dc8c0b86a9e7229c9fe5" + ] + ], + "gzi": [ + + ], + "versions": [ + "versions.yml:md5,4870fc0a88c616aa937f8325a2db0c3c" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-18T16:25:27.550554" + } +} \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config new file mode 100644 index 00000000..f76a3ba0 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -0,0 +1,7 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = 'MT192765.1 -o extract.fa' + } + +} diff --git a/modules/nf-core/samtools/faidx/tests/nextflow2.config b/modules/nf-core/samtools/faidx/tests/nextflow2.config new file mode 100644 index 00000000..33ebbd5d --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/nextflow2.config @@ -0,0 +1,6 @@ +process { + + withName: SAMTOOLS_FAIDX { + ext.args = '-o extract.fa' + } +} diff --git a/modules/nf-core/samtools/faidx/tests/tags.yml b/modules/nf-core/samtools/faidx/tests/tags.yml new file mode 100644 index 00000000..e4a83948 --- /dev/null +++ b/modules/nf-core/samtools/faidx/tests/tags.yml @@ -0,0 +1,2 @@ +samtools/faidx: + - modules/nf-core/samtools/faidx/** diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index cdd8305d..fc374f98 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -8,11 +8,14 @@ process SAMTOOLS_SORT { 'biocontainers/samtools:1.19.2--h50ea8bc_0' }" input: - tuple val(meta), path(bam) + tuple val(meta) , path(bam) + tuple val(meta2), path(fasta) output: - tuple val(meta), path("*.bam"), emit: bam - tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true path "versions.yml" , emit: versions when: @@ -21,14 +24,24 @@ process SAMTOOLS_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt cram") ? "cram" : + "bam" + def reference = fasta ? "--reference ${fasta}" : "" if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + samtools cat \\ + --threads $task.cpus \\ + ${bam} \\ + | \\ samtools sort \\ $args \\ - -@ $task.cpus \\ - -o ${prefix}.bam \\ - -T $prefix \\ - $bam + -T ${prefix} \\ + --threads $task.cpus \\ + ${reference} \\ + -o ${prefix}.${extension} \\ + - cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -40,6 +53,7 @@ process SAMTOOLS_SORT { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.bam + touch ${prefix}.bam.csi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml index 2200de72..341a7d0e 100644 --- a/modules/nf-core/samtools/sort/meta.yml +++ b/modules/nf-core/samtools/sort/meta.yml @@ -23,8 +23,18 @@ input: e.g. [ id:'test', single_end:false ] - bam: type: file - description: BAM/CRAM/SAM file + description: BAM/CRAM/SAM file(s) pattern: "*.{bam,cram,sam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome FASTA file + pattern: "*.{fa,fasta,fna}" + optional: true output: - meta: type: map @@ -33,19 +43,29 @@ output: e.g. [ id:'test', single_end:false ] - bam: type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.{bam,cram,sam}" - - versions: + description: Sorted BAM file + pattern: "*.{bam}" + - cram: type: file - description: File containing software versions - pattern: "versions.yml" + description: Sorted CRAM file + pattern: "*.{cram}" + - crai: + type: file + description: CRAM index file (optional) + pattern: "*.crai" - csi: type: file description: BAM index file (optional) pattern: "*.csi" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@ewels" + - "@matthdsm" maintainers: - "@drpatelh" - "@ewels" + - "@matthdsm" diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test index 31e24b88..8360e2b1 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test +++ b/modules/nf-core/samtools/sort/tests/main.nf.test @@ -13,15 +13,43 @@ nextflow_process { config "./nextflow.config" when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) + ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + """ } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("cram") { + + config "./nextflow.config" + + when { process { """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) """ } } @@ -37,7 +65,7 @@ nextflow_process { test("bam_stub") { config "./nextflow.config" - options "-stub-run" + options "-stub" when { params { @@ -49,6 +77,10 @@ nextflow_process { [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true) ]) + input[1] = Channel.of([ + [ id:'fasta' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) """ } } diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap index a7cf0210..38477656 100644 --- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap @@ -1,4 +1,69 @@ { + "cram": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] + ], + "4": [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] + ], + "versions": [ + "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-03-04T15:08:00.830294" + }, "bam_stub_bam": { "content": [ "test.sorted.bam" @@ -30,13 +95,25 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,c6ea1346ec4aae007eb40b708935088c" + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" ] ], "1": [ ], "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] + ], + "4": [ "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" ], "bam": [ @@ -45,11 +122,23 @@ "id": "test", "single_end": false }, - "test.sorted.bam:md5,c6ea1346ec4aae007eb40b708935088c" + "test.sorted.bam:md5,bc0b7c25da26384a006ed84cc9e4da23" ] ], - "csi": [ + "crai": [ + + ], + "cram": [ + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.sorted.bam.csi:md5,8d4e836c2fed6c0bf874d5e8cdba5831" + ] ], "versions": [ "versions.yml:md5,e6d43fefc9a8bff91c2ce6e3a1716eca" @@ -58,8 +147,8 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.01.0" + "nextflow": "23.10.1" }, - "timestamp": "2024-02-13T16:14:52.736359271" + "timestamp": "2024-03-04T15:07:48.773803" } } \ No newline at end of file diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config index d0f35086..f642771f 100644 --- a/modules/nf-core/samtools/sort/tests/nextflow.config +++ b/modules/nf-core/samtools/sort/tests/nextflow.config @@ -1,7 +1,8 @@ process { withName: SAMTOOLS_SORT { - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}.sorted" } + ext.args = "--write-index" } } diff --git a/modules/nf-core/sentieon/bwaindex/environment.yml b/modules/nf-core/sentieon/bwaindex/environment.yml index ce0a85e4..c806ed0e 100644 --- a/modules/nf-core/sentieon/bwaindex/environment.yml +++ b/modules/nf-core/sentieon/bwaindex/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/bwaindex/main.nf b/modules/nf-core/sentieon/bwaindex/main.nf index e36dcc34..f5e8b582 100644 --- a/modules/nf-core/sentieon/bwaindex/main.nf +++ b/modules/nf-core/sentieon/bwaindex/main.nf @@ -5,8 +5,8 @@ process SENTIEON_BWAINDEX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/sentieon/bwamem/environment.yml b/modules/nf-core/sentieon/bwamem/environment.yml index c090bfa5..f03db6f8 100644 --- a/modules/nf-core/sentieon/bwamem/environment.yml +++ b/modules/nf-core/sentieon/bwamem/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/bwamem/main.nf b/modules/nf-core/sentieon/bwamem/main.nf index 230297d0..62693851 100644 --- a/modules/nf-core/sentieon/bwamem/main.nf +++ b/modules/nf-core/sentieon/bwamem/main.nf @@ -7,8 +7,8 @@ process SENTIEON_BWAMEM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/sentieon/datametrics/environment.yml b/modules/nf-core/sentieon/datametrics/environment.yml index df094207..b5ea91f6 100644 --- a/modules/nf-core/sentieon/datametrics/environment.yml +++ b/modules/nf-core/sentieon/datametrics/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/datametrics/main.nf b/modules/nf-core/sentieon/datametrics/main.nf index d1678187..bc55d275 100644 --- a/modules/nf-core/sentieon/datametrics/main.nf +++ b/modules/nf-core/sentieon/datametrics/main.nf @@ -7,8 +7,8 @@ process SENTIEON_DATAMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/sentieon/dedup/environment.yml b/modules/nf-core/sentieon/dedup/environment.yml index 622cf739..e29cfff3 100644 --- a/modules/nf-core/sentieon/dedup/environment.yml +++ b/modules/nf-core/sentieon/dedup/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dedup/main.nf b/modules/nf-core/sentieon/dedup/main.nf index fbcd595f..5f19ab56 100644 --- a/modules/nf-core/sentieon/dedup/main.nf +++ b/modules/nf-core/sentieon/dedup/main.nf @@ -7,8 +7,8 @@ process SENTIEON_DEDUP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/sentieon/dnamodelapply/environment.yml b/modules/nf-core/sentieon/dnamodelapply/environment.yml index 6d27d44a..a2f88193 100644 --- a/modules/nf-core/sentieon/dnamodelapply/environment.yml +++ b/modules/nf-core/sentieon/dnamodelapply/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dnamodelapply/main.nf b/modules/nf-core/sentieon/dnamodelapply/main.nf index b728a5ec..9a0c70dc 100644 --- a/modules/nf-core/sentieon/dnamodelapply/main.nf +++ b/modules/nf-core/sentieon/dnamodelapply/main.nf @@ -7,8 +7,8 @@ process SENTIEON_DNAMODELAPPLY { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(vcf), path(idx) diff --git a/modules/nf-core/sentieon/dnascope/environment.yml b/modules/nf-core/sentieon/dnascope/environment.yml index 45c2116c..e6da2dde 100644 --- a/modules/nf-core/sentieon/dnascope/environment.yml +++ b/modules/nf-core/sentieon/dnascope/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/dnascope/main.nf b/modules/nf-core/sentieon/dnascope/main.nf index 6adea35e..0671307b 100644 --- a/modules/nf-core/sentieon/dnascope/main.nf +++ b/modules/nf-core/sentieon/dnascope/main.nf @@ -7,8 +7,8 @@ process SENTIEON_DNASCOPE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai), path(intervals) diff --git a/modules/nf-core/sentieon/readwriter/environment.yml b/modules/nf-core/sentieon/readwriter/environment.yml index 67dd1505..423de42d 100644 --- a/modules/nf-core/sentieon/readwriter/environment.yml +++ b/modules/nf-core/sentieon/readwriter/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/readwriter/main.nf b/modules/nf-core/sentieon/readwriter/main.nf index 0bace538..c12ca2f9 100644 --- a/modules/nf-core/sentieon/readwriter/main.nf +++ b/modules/nf-core/sentieon/readwriter/main.nf @@ -7,8 +7,8 @@ process SENTIEON_READWRITER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(input), path(index) diff --git a/modules/nf-core/sentieon/wgsmetrics/environment.yml b/modules/nf-core/sentieon/wgsmetrics/environment.yml index 24878e29..a33a3fcc 100644 --- a/modules/nf-core/sentieon/wgsmetrics/environment.yml +++ b/modules/nf-core/sentieon/wgsmetrics/environment.yml @@ -4,4 +4,4 @@ channels: - bioconda - defaults dependencies: - - bioconda::sentieon=202308.01 + - bioconda::sentieon=202308.02 diff --git a/modules/nf-core/sentieon/wgsmetrics/main.nf b/modules/nf-core/sentieon/wgsmetrics/main.nf index a028e4a1..811c0077 100644 --- a/modules/nf-core/sentieon/wgsmetrics/main.nf +++ b/modules/nf-core/sentieon/wgsmetrics/main.nf @@ -7,8 +7,8 @@ process SENTIEON_WGSMETRICS { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/sentieon:202308.01--h43eeafb_0' : - 'biocontainers/sentieon:202308.01--h43eeafb_0' }" + 'https://depot.galaxyproject.org/singularity/sentieon:202308.02--h43eeafb_0' : + 'biocontainers/sentieon:202308.02--h43eeafb_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 0f4bc7cb..f350e314 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -31,6 +31,7 @@ process TIDDIT_SV { tiddit \\ --sv \\ $args \\ + --threads $task.cpus \\ --bam $input \\ --ref $fasta \\ -o $prefix diff --git a/modules/nf-core/tiddit/sv/meta.yml b/modules/nf-core/tiddit/sv/meta.yml index b13ae5cd..bfcbc4e3 100644 --- a/modules/nf-core/tiddit/sv/meta.yml +++ b/modules/nf-core/tiddit/sv/meta.yml @@ -21,14 +21,24 @@ input: type: file description: BAM/CRAM file pattern: "*.{bam,cram}" - - index: + - input_index: type: file description: BAM/CRAM index file pattern: "*.{bai,crai}" + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test_fasta']` - fasta: type: file description: Input FASTA file pattern: "*.{fasta,fa}" + - meta3: + type: map + description: | + Groovy Map containing sample information from bwa index + e.g. `[ id:'test_bwa-index' ]` - bwa_index: type: file description: BWA genome index files diff --git a/modules/nf-core/tiddit/sv/tests/main.nf.test b/modules/nf-core/tiddit/sv/tests/main.nf.test new file mode 100644 index 00000000..6e32b9e1 --- /dev/null +++ b/modules/nf-core/tiddit/sv/tests/main.nf.test @@ -0,0 +1,193 @@ +nextflow_process { + + name "Test Process TIDDIT_SV" + script "../main.nf" + process "TIDDIT_SV" + + tag "modules" + tag "modules_nfcore" + tag "tiddit" + tag "tiddit/sv" + tag "bwa/index" + + test("sarscov2 - bam - bwa") { + + setup { + + run("BWA_INDEX") { + script "../../../../nf-core/bwa/index/main.nf" + process { + """ + input[0] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + // fasta + input[1] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + // bwa_index + input[2] = BWA_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.1") }, + { assert path(process.out.ploidy.get(0).get(1)).readLines().contains("Chromosome Ploidy Ploidy_rounded Mean_coverage") }, + { assert snapshot(process.out.versions).match("bam_bwa_version") } + ) + } + + } + + test("sarscov2 - bam - no_bwa") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + // fasta + input[1] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + // bwa_index + input[2] = [ [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.1") }, + { assert path(process.out.ploidy.get(0).get(1)).readLines().contains("Chromosome Ploidy Ploidy_rounded Mean_coverage") }, + { assert snapshot(process.out.versions).match("bam_version") } + ) + } + + } + + test("human - cram - bwa") { + + setup { + + run("BWA_INDEX") { + script "../../../../nf-core/bwa/index/main.nf" + process { + """ + input[0] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + // fasta + input[1] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // bwa_index + input[2] = BWA_INDEX.out.index + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.1") }, + { assert path(process.out.ploidy.get(0).get(1)).readLines().contains("Chromosome Ploidy Ploidy_rounded Mean_coverage") }, + { assert snapshot(process.out.versions).match("cram_bwa_version") }) + } + + } + + test("human - cram - no_bwa") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true) + ] + // fasta + input[1] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + // bwa_index + input[2] = [ [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.vcf.get(0).get(1)).readLines().contains("##fileformat=VCFv4.1") }, + { assert path(process.out.ploidy.get(0).get(1)).readLines().contains("Chromosome Ploidy Ploidy_rounded Mean_coverage") }, + { assert snapshot(process.out.versions).match("cram_version") }) + } + + } + + test("sarscov2 - bam - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + // fasta + input[1] = [ [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + // bwa_index + input[2] = [ [], [] ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/tiddit/sv/tests/main.nf.test.snap b/modules/nf-core/tiddit/sv/tests/main.nf.test.snap new file mode 100644 index 00000000..541c48bb --- /dev/null +++ b/modules/nf-core/tiddit/sv/tests/main.nf.test.snap @@ -0,0 +1,99 @@ +{ + "cram_bwa_version": { + "content": [ + [ + "versions.yml:md5,0ffcce416e40bcc98da2243f1d7e348a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-22T10:33:01.300519" + }, + "cram_version": { + "content": [ + [ + "versions.yml:md5,0ffcce416e40bcc98da2243f1d7e348a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-22T10:27:12.52902" + }, + "sarscov2 - bam - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.ploidies.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,0ffcce416e40bcc98da2243f1d7e348a" + ], + "ploidy": [ + [ + { + "id": "test" + }, + "test.ploidies.tab:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,0ffcce416e40bcc98da2243f1d7e348a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-22T10:21:51.950503" + }, + "bam_bwa_version": { + "content": [ + [ + "versions.yml:md5,0ffcce416e40bcc98da2243f1d7e348a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-22T10:31:40.918479" + }, + "bam_version": { + "content": [ + [ + "versions.yml:md5,0ffcce416e40bcc98da2243f1d7e348a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.0" + }, + "timestamp": "2024-03-22T10:21:38.449053" + } +} \ No newline at end of file diff --git a/modules/nf-core/tiddit/sv/tests/nextflow.config b/modules/nf-core/tiddit/sv/tests/nextflow.config new file mode 100644 index 00000000..9bbd0bee --- /dev/null +++ b/modules/nf-core/tiddit/sv/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'TIDDIT_SV' { + ext.args = '--skip_assembly' + } +} diff --git a/modules/nf-core/tiddit/sv/tests/tags.yml b/modules/nf-core/tiddit/sv/tests/tags.yml new file mode 100644 index 00000000..aac5351e --- /dev/null +++ b/modules/nf-core/tiddit/sv/tests/tags.yml @@ -0,0 +1,2 @@ +tiddit/sv: + - "modules/nf-core/tiddit/sv/**" From 63450a1a0a8f80e4bb5c0c26ca5a82c9e084a865 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 May 2024 18:02:53 +0200 Subject: [PATCH 1751/1921] Update CHANGELOG.md Co-authored-by: Anders Jemt --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffddb392..ae0a5915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changed valid values for sex according to the PED file format [#550](https://github.com/nf-core/raredisease/pull/550) - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) - Refactored mobile element annotation subworkflow files [#538](https://github.com/nf-core/raredisease/pull/538) -- Refactored to remove "a process is defined more than once@=" warning [#557](https://github.com/nf-core/raredisease/pull/557) +- Refactored to remove "a process is defined more than once" warning [#557](https://github.com/nf-core/raredisease/pull/557) ### `Fixed` From 345d3e2312cb78e56ea06a22dc0aad04f6160ae7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 24 May 2024 18:20:01 +0200 Subject: [PATCH 1752/1921] update modules --- modules.json | 2 +- modules/nf-core/mosdepth/environment.yml | 2 +- modules/nf-core/mosdepth/main.nf | 12 +- modules/nf-core/mosdepth/tests/main.nf.test | 16 +- .../nf-core/mosdepth/tests/main.nf.test.snap | 423 ++++-------------- subworkflows/local/alignment/align_MT.nf | 8 +- .../alignment/align_bwa_bwamem2_bwameme.nf | 6 +- subworkflows/local/call_repeat_expansions.nf | 2 +- subworkflows/local/subsample_mt.nf | 2 +- 9 files changed, 123 insertions(+), 350 deletions(-) diff --git a/modules.json b/modules.json index 94d50b3f..a6c5abd4 100644 --- a/modules.json +++ b/modules.json @@ -296,7 +296,7 @@ }, "mosdepth": { "branch": "master", - "git_sha": "e0616fba0919adb190bfe070d17fb12d76ba3a26", + "git_sha": "69e3eb17fb31b772b18f134d6e8f8b93ee980e65", "installed_by": ["modules"] }, "multiqc": { diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml index bcb9d64a..88c7126c 100644 --- a/modules/nf-core/mosdepth/environment.yml +++ b/modules/nf-core/mosdepth/environment.yml @@ -5,4 +5,4 @@ channels: - defaults dependencies: # renovate: datasource=conda depName=bioconda/mosdepth - - mosdepth=0.3.8 + - mosdepth=0.3.6 diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index 6f4a8383..c7e24303 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -4,8 +4,8 @@ process MOSDEPTH { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.8--hd299d5a_0' : - 'biocontainers/mosdepth:0.3.8--hd299d5a_0'}" + 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.6--hd299d5a_0' : + 'biocontainers/mosdepth:0.3.6--hd299d5a_0'}" input: tuple val(meta), path(bam), path(bai), path(bed) @@ -63,13 +63,13 @@ process MOSDEPTH { touch ${prefix}.region.dist.txt touch ${prefix}.summary.txt touch ${prefix}.per-base.d4 - echo "" | gzip > ${prefix}.per-base.bed.gz + touch ${prefix}.per-base.bed.gz touch ${prefix}.per-base.bed.gz.csi - echo "" | gzip > ${prefix}.regions.bed.gz + touch ${prefix}.regions.bed.gz touch ${prefix}.regions.bed.gz.csi - echo "" | gzip > ${prefix}.quantized.bed.gz + touch ${prefix}.quantized.bed.gz touch ${prefix}.quantized.bed.gz.csi - echo "" | gzip > ${prefix}.thresholds.bed.gz + touch ${prefix}.thresholds.bed.gz touch ${prefix}.thresholds.bed.gz.csi cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test index 21eebc1f..d991f819 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -237,7 +237,21 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + file(process.out.global_txt[0][1]).name, + file(process.out.summary_txt[0][1]).name, + file(process.out.regions_txt[0][1]).name, + file(process.out.per_base_d4[0][1]).name, + file(process.out.per_base_bed[0][1]).name, + file(process.out.per_base_csi[0][1]).name, + file(process.out.regions_bed[0][1]).name, + file(process.out.regions_csi[0][1]).name, + file(process.out.quantized_bed[0][1]).name, + file(process.out.quantized_csi[0][1]).name, + file(process.out.thresholds_bed[0][1]).name, + file(process.out.thresholds_csi[0][1]).name, + process.out.versions + ).match() } ) } diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap index c604540b..dc4d9508 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test.snap +++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap @@ -1,236 +1,23 @@ { "homo_sapiens - bam, bai, [] - stub": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.global.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test", - "single_end": true - }, - "test.thresholds.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "11": [ - [ - { - "id": "test", - "single_end": true - }, - "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": true - }, - "test.per-base.d4:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": true - }, - "test.per-base.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": true - }, - "test.per-base.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test", - "single_end": true - }, - "test.regions.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "7": [ - [ - { - "id": "test", - "single_end": true - }, - "test.regions.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test", - "single_end": true - }, - "test.quantized.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "9": [ - [ - { - "id": "test", - "single_end": true - }, - "test.quantized.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "global_txt": [ - [ - { - "id": "test", - "single_end": true - }, - "test.global.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "per_base_bed": [ - [ - { - "id": "test", - "single_end": true - }, - "test.per-base.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "per_base_csi": [ - [ - { - "id": "test", - "single_end": true - }, - "test.per-base.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "per_base_d4": [ - [ - { - "id": "test", - "single_end": true - }, - "test.per-base.d4:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "quantized_bed": [ - [ - { - "id": "test", - "single_end": true - }, - "test.quantized.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "quantized_csi": [ - [ - { - "id": "test", - "single_end": true - }, - "test.quantized.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "regions_bed": [ - [ - { - "id": "test", - "single_end": true - }, - "test.regions.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "regions_csi": [ - [ - { - "id": "test", - "single_end": true - }, - "test.regions.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "regions_txt": [ - [ - { - "id": "test", - "single_end": true - }, - "test.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "summary_txt": [ - [ - { - "id": "test", - "single_end": true - }, - "test.summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "thresholds_bed": [ - [ - { - "id": "test", - "single_end": true - }, - "test.thresholds.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940" - ] - ], - "thresholds_csi": [ - [ - { - "id": "test", - "single_end": true - }, - "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" - ] - } + "test.global.dist.txt", + "test.summary.txt", + "test.region.dist.txt", + "test.per-base.d4", + "test.per-base.bed.gz", + "test.per-base.bed.gz.csi", + "test.regions.bed.gz", + "test.regions.bed.gz.csi", + "test.quantized.bed.gz", + "test.quantized.bed.gz.csi", + "test.thresholds.bed.gz", + "test.thresholds.bed.gz.csi", + [ + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" + ] ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:33:16.953408231" + "timestamp": "2023-11-27T15:14:34.897155161" }, "homo_sapiens - cram, crai, bed": { "content": [ @@ -260,7 +47,7 @@ ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ [ @@ -280,7 +67,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -289,7 +76,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -298,7 +85,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" ] ], "7": [ @@ -307,7 +94,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" ] ], "8": [ @@ -331,7 +118,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -340,7 +127,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -358,7 +145,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" ] ], "regions_csi": [ @@ -367,7 +154,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" ] ], "regions_txt": [ @@ -395,15 +182,11 @@ ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:32:50.160217828" + "timestamp": "2023-11-27T14:47:18.171150781" }, "homo_sapiens - bam, bai, [] - quantized": { "content": [ @@ -433,7 +216,7 @@ ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ @@ -447,7 +230,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -456,7 +239,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -471,7 +254,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" + "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" ] ], "9": [ @@ -480,7 +263,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0" + "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" ] ], "global_txt": [ @@ -498,7 +281,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -507,7 +290,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -519,7 +302,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" + "test.quantized.bed.gz:md5,3e434a8bafcf59a67841ae3d4d752838" ] ], "quantized_csi": [ @@ -528,7 +311,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0" + "test.quantized.bed.gz.csi:md5,be9617f551f19a33923f1e886eaefb93" ] ], "regions_bed": [ @@ -556,15 +339,11 @@ ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:33:01.164885111" + "timestamp": "2023-11-27T14:47:29.228103864" }, "homo_sapiens - bam, bai, bed": { "content": [ @@ -594,7 +373,7 @@ ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ [ @@ -614,7 +393,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -623,7 +402,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -632,7 +411,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" ] ], "7": [ @@ -641,7 +420,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" ] ], "8": [ @@ -665,7 +444,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -674,7 +453,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -692,7 +471,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" ] ], "regions_csi": [ @@ -701,7 +480,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" ] ], "regions_txt": [ @@ -729,15 +508,11 @@ ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:32:39.071657456" + "timestamp": "2023-11-27T14:47:04.537716314" }, "homo_sapiens - bam, bai, [] - window": { "content": [ @@ -767,7 +542,7 @@ ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ [ @@ -775,7 +550,7 @@ "id": "test", "single_end": true }, - "test.mosdepth.region.dist.txt:md5,0b6ea9f0da1228252d9aef2d3b6f7f76" + "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" ] ], "3": [ @@ -787,7 +562,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -796,7 +571,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -805,7 +580,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,34f48d16fcdd61e44d812e29e02c77b8" + "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" ] ], "7": [ @@ -814,7 +589,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970" + "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" ] ], "8": [ @@ -838,7 +613,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -847,7 +622,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -865,7 +640,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,34f48d16fcdd61e44d812e29e02c77b8" + "test.regions.bed.gz:md5,f02e2cb49cc050e13d76942d6960827a" ] ], "regions_csi": [ @@ -874,7 +649,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970" + "test.regions.bed.gz.csi:md5,257d67678136963d9dd904330079609d" ] ], "regions_txt": [ @@ -883,7 +658,7 @@ "id": "test", "single_end": true }, - "test.mosdepth.region.dist.txt:md5,0b6ea9f0da1228252d9aef2d3b6f7f76" + "test.mosdepth.region.dist.txt:md5,39e0e707ec32feb5176fd20a95f1f468" ] ], "summary_txt": [ @@ -902,15 +677,11 @@ ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:32:55.631776118" + "timestamp": "2023-11-27T14:47:23.708536171" }, "homo_sapiens - bam, bai, []": { "content": [ @@ -940,7 +711,7 @@ ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ @@ -954,7 +725,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -963,7 +734,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -993,7 +764,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -1002,7 +773,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -1039,15 +810,11 @@ ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:32:33.642125299" + "timestamp": "2023-11-27T14:46:56.975710077" }, "homo_sapiens - cram, crai, []": { "content": [ @@ -1077,7 +844,7 @@ ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ @@ -1091,7 +858,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -1100,7 +867,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -1130,7 +897,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -1139,7 +906,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -1176,15 +943,11 @@ ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:32:44.704920941" + "timestamp": "2023-11-27T14:47:12.09259995" }, "homo_sapiens - bam, bai, bed - thresholds": { "content": [ @@ -1213,7 +976,7 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz:md5,fe70ae728cd10726c42a2bcd44adfc9d" + "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" ] ], "11": [ @@ -1222,11 +985,11 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055" + "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" ] ], "12": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ], "2": [ [ @@ -1246,7 +1009,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "5": [ @@ -1255,7 +1018,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "6": [ @@ -1264,7 +1027,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" ] ], "7": [ @@ -1273,7 +1036,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" ] ], "8": [ @@ -1297,7 +1060,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz:md5,da6db0fb375a3053a89db8c935eebbaa" + "test.per-base.bed.gz:md5,bc1df47d46f818fee5275975925d769a" ] ], "per_base_csi": [ @@ -1306,7 +1069,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294" + "test.per-base.bed.gz.csi:md5,9e649ac749ff6c6073bef5ab63e8aaa4" ] ], "per_base_d4": [ @@ -1324,7 +1087,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz:md5,9ded0397623fda26a6a3514d6a0e2a2c" + "test.regions.bed.gz:md5,5d398caf7171ec4406278e2add3009ae" ] ], "regions_csi": [ @@ -1333,7 +1096,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9" + "test.regions.bed.gz.csi:md5,47669cfe41f3e222e74d81e1b1be191f" ] ], "regions_txt": [ @@ -1360,7 +1123,7 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz:md5,fe70ae728cd10726c42a2bcd44adfc9d" + "test.thresholds.bed.gz:md5,13101e326eea3cbfa1d569b69f494f4c" ] ], "thresholds_csi": [ @@ -1369,18 +1132,14 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055" + "test.thresholds.bed.gz.csi:md5,912055ee9452229439df6fae95644196" ] ], "versions": [ - "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce" + "versions.yml:md5,f8b1896c9c6784181f1234e87225f0e8" ] } ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-04-29T13:33:06.737266831" + "timestamp": "2023-11-27T14:49:44.311847326" } } \ No newline at end of file diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 9121bc2d..d2a9581d 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -27,7 +27,7 @@ workflow ALIGN_MT { ch_versions = Channel.empty() if (params.aligner.equals("bwamem2")) { - BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) + BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, ch_fasta, true) ch_align = BWAMEM2_MEM_MT.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) } else if (params.aligner.equals("sentieon")) { @@ -35,7 +35,7 @@ workflow ALIGN_MT { ch_align = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) } else if (params.aligner.equals("bwa")) { - BWA_MEM_MT ( ch_fastq, ch_bwaindex, true ) + BWA_MEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, true ) ch_align = BWA_MEM_MT.out.bam ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) } else if (params.aligner.equals("bwameme")) { @@ -49,11 +49,11 @@ workflow ALIGN_MT { GATK4_MERGEBAMALIGNMENT_MT (ch_bam_ubam, ch_fasta, ch_dict) - PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) + PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam, [[:],[]], [[:],[]]) PICARD_MARKDUPLICATES_MT (PICARD_ADDORREPLACEREADGROUPS_MT.out.bam, ch_fasta, ch_fai) - SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam) + SAMTOOLS_SORT_MT (PICARD_MARKDUPLICATES_MT.out.bam, [[:],[]]) SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf index 87e9a958..33a5575c 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf @@ -28,7 +28,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { // Map, sort, and index if (params.aligner.equals("bwa")) { - BWA_MEM ( ch_reads_input, ch_bwa_index, true ) + BWA_MEM ( ch_reads_input, ch_bwa_index, ch_genome_fasta, true ) ch_align = BWA_MEM.out.bam ch_versions = ch_versions.mix(BWA_MEM.out.versions.first()) } else if (params.aligner.equals("bwameme")) { @@ -36,7 +36,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_align = BWAMEME_MEM.out.bam ch_versions = ch_versions.mix(BWAMEME_MEM.out.versions.first()) } else { - BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) + BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, ch_genome_fasta, true ) ch_align = BWAMEM2_MEM.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) @@ -51,7 +51,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { } .set { ch_fallback } - BWAMEM_FALLBACK ( ch_fallback.ERROR, ch_bwa_index, true ) + BWAMEM_FALLBACK ( ch_fallback.ERROR, ch_bwa_index, ch_genome_fasta, true ) ch_align = ch_fallback.SUCCESS.mix(BWAMEM_FALLBACK.out.bam) ch_versions = ch_versions.mix(BWAMEM_FALLBACK.out.versions.first()) } diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 65437480..130b7a5b 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -33,7 +33,7 @@ workflow CALL_REPEAT_EXPANSIONS { ) // Sort and index realigned bam - SAMTOOLS_SORT(EXPANSIONHUNTER.out.bam) + SAMTOOLS_SORT(EXPANSIONHUNTER.out.bam, [[:],[]]) SAMTOOLS_INDEX(SAMTOOLS_SORT.out.bam) // Fix header and rename sample diff --git a/subworkflows/local/subsample_mt.nf b/subworkflows/local/subsample_mt.nf index d8da5aae..180748e5 100644 --- a/subworkflows/local/subsample_mt.nf +++ b/subworkflows/local/subsample_mt.nf @@ -19,7 +19,7 @@ workflow SUBSAMPLE_MT { ch_mt_bam_bai.map {meta, bam, bai -> return [meta, bam, -1]}.set {ch_genomecov_in} - BEDTOOLS_GENOMECOV (ch_genomecov_in, [], "genomecov") + BEDTOOLS_GENOMECOV (ch_genomecov_in, [], "genomecov", false) CALCULATE_SEED_FRACTION ( BEDTOOLS_GENOMECOV.out.genomecov, From 6974324edf9cbf80d963d1c447a13d1ca534acb6 Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 27 May 2024 10:58:28 +0200 Subject: [PATCH 1753/1921] updating meta.sex type check --- conf/modules/generate_cytosure_files.config | 2 +- subworkflows/local/gens.nf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/modules/generate_cytosure_files.config b/conf/modules/generate_cytosure_files.config index 4cdb2f21..6aab516d 100644 --- a/conf/modules/generate_cytosure_files.config +++ b/conf/modules/generate_cytosure_files.config @@ -40,7 +40,7 @@ process { withName: '.*GENERATE_CYTOSURE_FILES:VCF2CYTOSURE' { ext.args = { [ - meta.sex.equals(1) ? '--sex male' : '--sex female', + meta.sex.equals('1') ? '--sex male' : '--sex female', '--size 5000', '--maxbnd 5000' ].join(' ') } diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 93f1ac0a..fbcfafc3 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -36,8 +36,8 @@ workflow GENS { COLLECTREADCOUNTS.out.hdf5 .branch { meta, counts -> - female: meta.sex.equals(2) || meta.sex.equals(0) - male: meta.sex.equals(1) + female: meta.sex.equals('2') || meta.sex.equals('other') + male: meta.sex.equals('1') } .set { ch_denoisereadcounts_in } From 6ec160f19fa6cac1b3656cf96491c3c88d47367e Mon Sep 17 00:00:00 2001 From: jemten Date: Mon, 27 May 2024 16:39:05 +0200 Subject: [PATCH 1754/1921] switching equals to matches --- subworkflows/local/gens.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index fbcfafc3..36c0ede5 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -36,7 +36,7 @@ workflow GENS { COLLECTREADCOUNTS.out.hdf5 .branch { meta, counts -> - female: meta.sex.equals('2') || meta.sex.equals('other') + female: meta.sex.matches('2|other') male: meta.sex.equals('1') } .set { ch_denoisereadcounts_in } From 2f91f84235e3544a958b6f42606dd63b91cf1974 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 28 May 2024 09:52:14 +0200 Subject: [PATCH 1755/1921] update changelog and modules [skip ci] --- CHANGELOG.md | 9 +++++++++ modules.json | 6 ++---- .../germlinecnvcaller/gatk4-germlinecnvcaller.diff | 14 -------------- .../gatk4-postprocessgermlinecnvcalls.diff | 14 -------------- 4 files changed, 11 insertions(+), 32 deletions(-) delete mode 100644 modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff delete mode 100644 modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff diff --git a/CHANGELOG.md b/CHANGELOG.md index ae0a5915..8367aad5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored config files [#538](https://github.com/nf-core/raredisease/pull/538) - Refactored mobile element annotation subworkflow files [#538](https://github.com/nf-core/raredisease/pull/538) - Refactored to remove "a process is defined more than once" warning [#557](https://github.com/nf-core/raredisease/pull/557) +- Updated modules [#558](https://github.com/nf-core/raredisease/pull/558) ### `Fixed` @@ -40,6 +41,14 @@ Parameter has been added if just the new parameter information is present. Parameter has been removed if new parameter information isn't present. ::: +### Module updates + +| Tool | Old version | New version | +| -------- | ----------- | ----------- | +| bwa | 0.7.17 | 0.7.18 | +| CADD | 1.6.1 | 1.6.post1 | +| Sentieon | 202308.01 | 202308.02 | + ## 2.0.1 - Asterix (Patch) [2024-03-25] ### `Fixed` diff --git a/modules.json b/modules.json index a6c5abd4..9c1c6a32 100644 --- a/modules.json +++ b/modules.json @@ -179,8 +179,7 @@ "gatk4/germlinecnvcaller": { "branch": "master", "git_sha": "60a7dbae179bcfa24c10294cc9a07423a239c19a", - "installed_by": ["modules"], - "patch": "modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff" + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", @@ -205,8 +204,7 @@ "gatk4/postprocessgermlinecnvcalls": { "branch": "master", "git_sha": "60a7dbae179bcfa24c10294cc9a07423a239c19a", - "installed_by": ["modules"], - "patch": "modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff" + "installed_by": ["modules"] }, "gatk4/preprocessintervals": { "branch": "master", diff --git a/modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff b/modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff deleted file mode 100644 index c501e50e..00000000 --- a/modules/nf-core/gatk4/germlinecnvcaller/gatk4-germlinecnvcaller.diff +++ /dev/null @@ -1,14 +0,0 @@ -Changes in module 'nf-core/gatk4/germlinecnvcaller' ---- modules/nf-core/gatk4/germlinecnvcaller/main.nf -+++ modules/nf-core/gatk4/germlinecnvcaller/main.nf -@@ -36,7 +36,7 @@ - avail_mem = (task.memory.mega*0.8).intValue() - } - """ -- gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ -+ gatk --java-options "-Xmx${avail_mem}M" GermlineCNVCaller \\ - $input_list \\ - $ploidy_command \\ - $output_command \\ - -************************************************************ diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff deleted file mode 100644 index b922c53d..00000000 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/gatk4-postprocessgermlinecnvcalls.diff +++ /dev/null @@ -1,14 +0,0 @@ -Changes in module 'nf-core/gatk4/postprocessgermlinecnvcalls' ---- modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf -+++ modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf -@@ -35,7 +35,7 @@ - avail_mem = (task.memory.mega*0.8).intValue() - } - """ -- gatk --java-options "-Xmx${avail_mem}g" PostprocessGermlineCNVCalls \\ -+ gatk --java-options "-Xmx${avail_mem}M" PostprocessGermlineCNVCalls \\ - $calls_command \\ - $model_command \\ - $ploidy_command \\ - -************************************************************ From c1b9b0da360d194d0eaac2691badedb5f9ec1ed4 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 28 May 2024 10:05:59 +0200 Subject: [PATCH 1756/1921] update gatk --- modules.json | 4 ++-- modules/nf-core/gatk4/germlinecnvcaller/main.nf | 2 +- modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules.json b/modules.json index 9c1c6a32..1b731501 100644 --- a/modules.json +++ b/modules.json @@ -178,7 +178,7 @@ }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "60a7dbae179bcfa24c10294cc9a07423a239c19a", + "git_sha": "cf607b7749da0a8f5ca2a1e31233e13e3159e2fe", "installed_by": ["modules"] }, "gatk4/intervallisttools": { @@ -203,7 +203,7 @@ }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "60a7dbae179bcfa24c10294cc9a07423a239c19a", + "git_sha": "cf607b7749da0a8f5ca2a1e31233e13e3159e2fe", "installed_by": ["modules"] }, "gatk4/preprocessintervals": { diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index 535b14c5..cd1916ec 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/main.nf +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -39,7 +39,7 @@ process GATK4_GERMLINECNVCALLER { """ export THEANO_FLAGS="base_compiledir=\$PWD" - gatk --java-options "-Xmx${avail_mem}g -XX:-UsePerfData" \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ GermlineCNVCaller \\ $input_list \\ $ploidy_command \\ diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index 31db78bc..73d4a715 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -37,7 +37,7 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { """ export THEANO_FLAGS="base_compiledir=\$PWD" - gatk --java-options "-Xmx${avail_mem}g -XX:-UsePerfData" \\ + gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ PostprocessGermlineCNVCalls \\ $calls_command \\ $model_command \\ From 8b0dd21f5fc46f59ffe6ebc2df769b38c1e2c5d6 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 28 May 2024 13:24:46 +0200 Subject: [PATCH 1757/1921] refactor --- .github/workflows/download_pipeline.yml | 7 ------- CHANGELOG.md | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 2d20d644..f24cc9ff 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -77,10 +77,3 @@ jobs: NXF_SINGULARITY_CACHEDIR: ./ NXF_SINGULARITY_HOME_MOUNT: true run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results - - name: Run the downloaded pipeline (stub run not supported) - id: run_pipeline - if: ${{ job.steps.stub_run_pipeline.status == failure() }} - env: - NXF_SINGULARITY_CACHEDIR: ./ - NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results diff --git a/CHANGELOG.md b/CHANGELOG.md index 8367aad5..8da95ac0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,13 @@ Parameter has been removed if new parameter information isn't present. | bwa | 0.7.17 | 0.7.18 | | CADD | 1.6.1 | 1.6.post1 | | Sentieon | 202308.01 | 202308.02 | +| bwameme | | 1.0.6 | + +:::note +Version has been updated if both old and new version information is present. +Version has been added if just the new version information is present. +Version has been removed if new version information isn't present. +::: ## 2.0.1 - Asterix (Patch) [2024-03-25] From 2c00cf09439180e30695bf0a918cda4db96392fc Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 29 May 2024 10:52:46 +0200 Subject: [PATCH 1758/1921] bump-version --- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index b8bb11a1..02488444 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 7c0d0a6c..928d3a8c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -304,7 +304,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.1.0dev' + version = '2.1.0' doi = '' } From 32e27a2303635d10eb11da69fe07460dd5b5ecf5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 29 May 2024 11:29:18 +0200 Subject: [PATCH 1759/1921] Update conf/modules/align_sentieon.config Co-authored-by: Felix Lenner <52530259+fellen31@users.noreply.github.com> --- conf/modules/align_sentieon.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index f3fb359f..56b75c26 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -19,7 +19,7 @@ process { withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_BWAMEM' { ext.args = { "-M -K 10000000 -R ${meta.read_group} " } - ext.prefix = { "${meta.id}.sorted" } + ext.prefix = { "${meta.id}_sorted" } } withName: '.*ALIGN:ALIGN_SENTIEON:SENTIEON_DATAMETRICS' { From 4237c6d1edf33684ec2366d513782b0933240db6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 29 May 2024 11:36:14 +0200 Subject: [PATCH 1760/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8da95ac0..6854689c 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). -## 2.1.0 - Obelix [xxxx-xx-xx] +## 2.1.0 - Obelix [2024-05-29] ### `Added` From 70ba186961dc9a6d023e52b20826f1b0ca6d7ac4 Mon Sep 17 00:00:00 2001 From: Emeline Favreau <9661216+EmelineFavreau@users.noreply.github.com> Date: Mon, 3 Jun 2024 11:00:18 +0100 Subject: [PATCH 1761/1921] typo --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 84aca20a..5558ee64 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -547,4 +547,4 @@ plugins { } ``` -This should go in your Nextflow confgiguration file, specified with `-c ` when running the pipeline. +This should go in your Nextflow configuration file, specified with `-c ` when running the pipeline. From a7ab56a0abb32ab719003609ab25ae044164bab3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Jun 2024 14:40:21 +0200 Subject: [PATCH 1762/1921] bump-version 2.2.0dev --- CHANGELOG.md | 11 +++++++++++ assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6854689c..8ec96518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ 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). +## 2.2.0 - Dogmatix [XXXX-XX-XX] + +### `Added` + + +### `Changed` + + +### `Fixed` + + ## 2.1.0 - Obelix [2024-05-29] ### `Added` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 02488444..b8bb11a1 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 928d3a8c..1a1b0a2c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -304,7 +304,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.1.0' + version = '2.2.0dev' doi = '' } From 6aeecee6de5c31e653b9c0597a72b13e8ddfa1f5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Jun 2024 14:58:24 +0200 Subject: [PATCH 1763/1921] lint --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ec96518..fce9b9d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` - ### `Changed` - ### `Fixed` - ## 2.1.0 - Obelix [2024-05-29] ### `Added` From efb39f6845bc6f5217417e0d1017c6623af539d2 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Wed, 5 Jun 2024 18:11:41 +0200 Subject: [PATCH 1764/1921] adds missinf citations for bwameme --- CHANGELOG.md | 2 ++ CITATIONS.md | 4 ++++ docs/output.md | 7 ++++++- docs/usage.md | 9 +++++---- .../local/utils_nfcore_raredisease_pipeline/main.nf | 2 ++ 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fce9b9d6..67fdb977 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Citations for bwameme [#563](https://github.com/nf-core/raredisease/pull/563) + ## 2.1.0 - Obelix [2024-05-29] ### `Added` diff --git a/CITATIONS.md b/CITATIONS.md index 36b3cd7b..1db771ac 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -22,6 +22,10 @@ > 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 +- [BWA-MEME](https://academic.oup.com/bioinformatics/article/38/9/2404/6543607) + + > Jung Y, Han D. BWA-MEME: BWA-MEM emulated with a machine learning approach. Bioinformatics. 2022;38(9):2404-2413. doi:10.1093/bioinformatics/btac137 + - [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 diff --git a/docs/output.md b/docs/output.md index 3241f5d4..376acce9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -17,6 +17,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Mapping](#mapping) - [Bwa-mem2](#bwa-mem2) - [BWA](#bwa) + - [BWA-MEME](#bwa-meme) - [Sentieon bwa mem](#sentieon-bwa-mem) - [Duplicate marking](#duplicate-marking) - [Picard's MarkDuplicates](#picards-markduplicates) @@ -88,6 +89,10 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [BWA](https://github.com/lh3/bwa) used to map the reads to a reference genome. The aligned reads are coordinate sorted with samtools sort. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to bwa. +##### BWA-MEME + +[BWA-MEME](https://github.com/kaist-ina/BWA-MEME) used to map the reads to a reference genome. The aligned reads are coordinate sorted with samtools sort. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to bwameme. + ##### Sentieon bwa mem [Sentieon's bwa mem](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#map-reads-to-reference) is the software accelerated version of the bwa-mem algorithm. It is used to efficiently perform the alignment using BWA. Aligned reads are then coordinate sorted using Sentieon's [sort](https://support.sentieon.com/manual/usages/general/#util-syntax) utility. These files are treated as intermediates and are not placed in the output folder by default. It is not the default aligner, but it can be chosen by setting `--aligner` option to "sentieon". @@ -96,7 +101,7 @@ 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 and bwa 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. +[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 bwameme and bwa 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 diff --git a/docs/usage.md b/docs/usage.md index 5558ee64..996d0e6a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -139,7 +139,7 @@ Note that the pipeline is modular in architecture. It offers you the flexibility nf-core/raredisease consists of several tools used for various purposes. For convenience, we have grouped those tools under the following categories: -1. Alignment (bwamem2/bwa/Sentieon BWA mem) +1. Alignment (bwamem2/bwa/bwameme/Sentieon BWA mem) 2. QC stats from the alignment files 3. Repeat expansions (ExpansionsHunter & Stranger) 4. Variant calling - SNV (DeepVariant/Sentieon DNAscope) @@ -162,14 +162,15 @@ The mandatory and optional parameters for each category are tabulated below. | aligner1 | fasta_fai4 | | fasta2 | bwamem24 | | platform | bwa4 | -| mito_name/mt_fasta3 | known_dbsnp5 | +| mito_name/mt_fasta3 | bwameme4 | +| | known_dbsnp5 | | | known_dbsnp_tbi5 | | | min_trimmed_length6 | -1Default value is bwamem2. Other alternatives are bwa and sentieon (requires valid Sentieon license ).
    +1Default value is bwamem2. Other alternatives are bwa, bwameme and sentieon (requires valid Sentieon license ).
    2Analysis set reference genome in fasta format, first 25 contigs need to be chromosome 1-22, X, Y and the mitochondria.
    3If mito_name is provided, mt_fasta can be generated by the pipeline.
    -4fasta_fai, bwa and bwamem2, if not provided by the user, will be generated by the pipeline when necessary.
    +4fasta_fai, bwa, bwamem2 and bwameme, if not provided by the user, will be generated by the pipeline when necessary.
    5Used only by Sentieon.
    6Default value is 40. Used only by fastp.
    diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 36c0cbaa..54ee0a08 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -217,6 +217,7 @@ def toolCitationText() { align_text = [ params.aligner.equals("bwa") ? "BWA (Li, 2013)," :"", params.aligner.equals("bwamem2") ? "BWA-MEM2 (Vasimuddin et al., 2019)," : "", + params.aligner.equals("bwameme") ? "BWA-MEME (Jung et al., 2022)," : "", params.aligner.equals("sentieon") ? "Sentieon DNASeq (Kendig et al., 2019)," : "", params.aligner.equals("sentieon") ? "Sentieon Tools (Freed et al., 2017)," : "" ] @@ -325,6 +326,7 @@ def toolBibliographyText() { align_text = [ params.aligner.equals("bwa") ? "
  • Li, H. (2013). Aligning sequence reads, clone sequences and assembly contigs with BWA-MEM (arXiv:1303.3997). arXiv. http://arxiv.org/abs/1303.3997
  • " :"", params.aligner.equals("bwamem2") ? "
  • Vasimuddin, Md., Misra, S., Li, H., & Aluru, S. (2019). Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), 314–324. https://doi.org/10.1109/IPDPS.2019.00041
  • " : "", + params.aligner.equals("bwameme") ? "
  • Jung Y, Han D. BWA-MEME: BWA-MEM emulated with a machine learning approach. Bioinformatics. 2022;38(9):2404-2413. doi:10.1093/bioinformatics/btac137
  • " : "", params.aligner.equals("sentieon") ? "
  • Kendig, K. I., Baheti, S., Bockol, M. A., Drucker, T. M., Hart, S. N., Heldenbrand, J. R., Hernaez, M., Hudson, M. E., Kalmbach, M. T., Klee, E. W., Mattson, N. R., Ross, C. A., Taschuk, M., Wieben, E. D., Wiepert, M., Wildman, D. E., & Mainzer, L. S. (2019). Sentieon DNASeq Variant Calling Workflow Demonstrates Strong Computational Performance and Accuracy. Frontiers in Genetics, 10, 736. https://doi.org/10.3389/fgene.2019.00736
  • " : "", params.aligner.equals("sentieon") ? "
  • Freed, D., Aldana, R., Weber, J. A., & Edwards, J. S. (2017). The Sentieon Genomics Tools—A fast and accurate solution to variant calling from next-generation sequence data (p. 115717). bioRxiv. https://doi.org/10.1101/115717
  • " : "" ] From c568ef79a39f1e79f0dd92c571c41f5100457e37 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jun 2024 10:27:12 +0200 Subject: [PATCH 1765/1921] change type and update container --- modules/local/get_chrom_sizes.nf | 4 ++-- modules/local/rename_align_files.nf | 4 ++-- nextflow_schema.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 4ab80ed1..e84dbe20 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -4,8 +4,8 @@ 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' : - 'biocontainers/gnu-wget:1.18--0' }" + 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h36e9172_9' : + 'biocontainers/gnu-wget:1.18--h36e9172_9' }" input: tuple val(meta), path(fai) diff --git a/modules/local/rename_align_files.nf b/modules/local/rename_align_files.nf index da9f890b..40278ca5 100644 --- a/modules/local/rename_align_files.nf +++ b/modules/local/rename_align_files.nf @@ -4,8 +4,8 @@ process RENAME_ALIGN_FILES { 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' : - 'biocontainers/gnu-wget:1.18--0' }" + 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--h36e9172_9' : + 'biocontainers/gnu-wget:1.18--h36e9172_9' }" input: tuple val(meta), path(input) diff --git a/nextflow_schema.json b/nextflow_schema.json index 6e2fbc81..10e7f354 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -106,8 +106,8 @@ "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", + "description": "A directory containing the models produced by GATK4 GermlineCNVCaller cohort.", + "format": "directory-path", "help_text": "This model is required for generating a cnv calls when using GermlineCNVCaller." }, "genome": { From bf98157390d9307111242ad9d294f00591c347eb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:45:40 +0200 Subject: [PATCH 1766/1921] revert a change --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 974b16fd..f9db3a8f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -113,8 +113,8 @@ "type": "string", "exists": true, "fa_icon": "fas fa-file", - "description": "A directory containing the models produced by GATK4 GermlineCNVCaller cohort.", - "format": "directory-path", + "description": "A file containing the path to the models produced by GATK4 GermlineCNVCaller cohort.", + "format": "file-path", "help_text": "This model is required for generating a cnv calls when using GermlineCNVCaller." }, "genome": { From 16c2be05363955b49a81f7c08eee048eb6a509f0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:46:32 +0200 Subject: [PATCH 1767/1921] fix typo --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f9db3a8f..80cdfd11 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -113,7 +113,7 @@ "type": "string", "exists": true, "fa_icon": "fas fa-file", - "description": "A file containing the path to the models produced by GATK4 GermlineCNVCaller cohort.", + "description": "A file containing the path to models produced by GATK4 GermlineCNVCaller cohort.", "format": "file-path", "help_text": "This model is required for generating a cnv calls when using GermlineCNVCaller." }, From 71c81b3e8622918b63fd4ed9c12699b2d65f3d3b Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jun 2024 13:47:01 +0200 Subject: [PATCH 1768/1921] update bwameme --- modules.json | 2 +- modules/nf-core/bwameme/mem/main.nf | 13 ++-- modules/nf-core/bwameme/mem/meta.yml | 3 + .../nf-core/bwameme/mem/tests/main.nf.test | 15 +++-- .../bwameme/mem/tests/main.nf.test.snap | 65 +++++++++++++++++++ 5 files changed, 86 insertions(+), 12 deletions(-) diff --git a/modules.json b/modules.json index 1b731501..d6310623 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ }, "bwameme/mem": { "branch": "master", - "git_sha": "79480293280ff4f10f30bdea1ddd903f223f8489", + "git_sha": "c3793385cf559bb60d33e6c3b0cb379a40b26602", "installed_by": ["modules"] }, "cadd": { diff --git a/modules/nf-core/bwameme/mem/main.nf b/modules/nf-core/bwameme/mem/main.nf index db41316e..db91482f 100644 --- a/modules/nf-core/bwameme/mem/main.nf +++ b/modules/nf-core/bwameme/mem/main.nf @@ -12,6 +12,7 @@ process BWAMEME_MEM { tuple val(meta2), path(index) tuple val(meta3), path(fasta) val sort_bam + val mbuffer output: tuple val(meta), path("*.sam") , emit: sam , optional:true @@ -29,14 +30,14 @@ process BWAMEME_MEM { def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def samtools_command = sort_bam ? 'sort' : 'view' - def mbuffer_mem = 3072 - if (!task.memory) { - log.info '[bwameme-mbuffer] Available memory not known - defaulting to 3GB for mbuffer. Specify process memory requirements to change this.' + if (!mbuffer) { + log.info '[bwameme-mbuffer] Memory for mbuffer is not set - defaulting to 3072MB for mbuffer.' + mbuffer_mem = 3072 } else { - mbuffer_mem = (task.memory.mega*0.5).intValue() + mbuffer_mem = mbuffer } - def mbuffer_command = sort_bam ? "| mbuffer -m ${mbuffer_mem}M" : "" - def mem_per_thread = sort_bam ? "-m "+ (mbuffer_mem/task.cpus).intValue()+"M" : "" + mbuffer_command = sort_bam ? "| mbuffer -m ${mbuffer_mem}M" : "" + mem_per_thread = sort_bam ? "-m "+ (mbuffer_mem/task.cpus).intValue()+"M" : "" def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ def extension_matcher = (args2 =~ extension_pattern) def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" diff --git a/modules/nf-core/bwameme/mem/meta.yml b/modules/nf-core/bwameme/mem/meta.yml index c7eb7b28..85a8b5b3 100644 --- a/modules/nf-core/bwameme/mem/meta.yml +++ b/modules/nf-core/bwameme/mem/meta.yml @@ -52,6 +52,9 @@ input: type: boolean description: use samtools sort (true) or samtools view (false) pattern: "true or false" + - mbuffer: + type: integer + description: memory for mbuffer in megabytes output: - meta: diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test b/modules/nf-core/bwameme/mem/tests/main.nf.test index 3b67b39e..961d6379 100644 --- a/modules/nf-core/bwameme/mem/tests/main.nf.test +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test @@ -11,7 +11,7 @@ nextflow_process { tag "bwameme/index" config "./nextflow.config" - test("sarscov2 - fastq, index, fasta, false") { + test("sarscov2 - fastq, index, fasta, false, 0") { setup { run("BWAMEME_INDEX") { @@ -38,6 +38,7 @@ nextflow_process { input[1] = BWAMEME_INDEX.out.index input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = false + input[4] = 0 """ } } @@ -54,7 +55,7 @@ nextflow_process { } - test("sarscov2 - fastq, index, fasta, true") { + test("sarscov2 - fastq, index, fasta, true, 2048") { setup { run("BWAMEME_INDEX") { @@ -81,6 +82,7 @@ nextflow_process { input[1] = BWAMEME_INDEX.out.index input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = true + input[4] = 2048 """ } } @@ -97,7 +99,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, false") { + test("sarscov2 - [fastq1, fastq2], index, fasta, false, 0") { setup { run("BWAMEME_INDEX") { @@ -127,6 +129,7 @@ nextflow_process { input[1] = BWAMEME_INDEX.out.index input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = false + input[4] = 0 """ } } @@ -143,7 +146,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, true") { + test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048") { setup { run("BWAMEME_INDEX") { @@ -173,6 +176,7 @@ nextflow_process { input[1] = BWAMEME_INDEX.out.index input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = true + input[4] = 2048 """ } } @@ -189,7 +193,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, true - stub") { + test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048 - stub") { options "-stub" @@ -221,6 +225,7 @@ nextflow_process { input[1] = BWAMEME_INDEX.out.index input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = true + input[4] = 2048 """ } } diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap index 281011ae..a8ff281b 100644 --- a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap @@ -1,4 +1,17 @@ { + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:17:31.035368735" + }, "sarscov2 - [fastq1, fastq2], index, fasta, false": { "content": [ "test.bam", @@ -25,6 +38,19 @@ }, "timestamp": "2024-05-15T19:28:46.895668666" }, + "sarscov2 - [fastq1, fastq2], index, fasta, false, 0": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:17:08.497131484" + }, "sarscov2 - [fastq1, fastq2], index, fasta, true": { "content": [ "test.bam", @@ -38,6 +64,32 @@ }, "timestamp": "2024-05-15T20:44:56.510177191" }, + "sarscov2 - fastq, index, fasta, false, 0": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:16:23.45126091" + }, + "sarscov2 - fastq, index, fasta, true, 2048": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:16:46.541148031" + }, "sarscov2 - fastq, index, fasta, false": { "content": [ "test.bam", @@ -63,5 +115,18 @@ "nextflow": "23.10.1" }, "timestamp": "2024-05-15T20:44:05.2657749" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048 - stub": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:17:40.514767321" } } \ No newline at end of file From 03a71f6fc409996f5f4ead0f3f828e84b0db6708 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jun 2024 14:03:25 +0200 Subject: [PATCH 1769/1921] update bwameme --- nextflow.config | 1 + nextflow_schema.json | 7 +++++++ subworkflows/local/align.nf | 2 ++ subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf | 3 ++- workflows/raredisease.nf | 1 + 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 928d3a8c..b6defbc2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -53,6 +53,7 @@ params { // Alignment aligner = 'bwamem2' + mbuffer_mem = 3072 min_trimmed_length = 40 mt_subsample_rd = 150 mt_subsample_seed = 30 diff --git a/nextflow_schema.json b/nextflow_schema.json index 80cdfd11..47f36d06 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -605,6 +605,13 @@ "fa_icon": "fas fa-align-center", "enum": ["bwa", "bwamem2", "bwameme", "sentieon"] }, + "mbuffer_mem": { + "type": "integer", + "default": 3072, + "description": "Memory allocated for mbuffer in megabytes (used only by bwameme)", + "help_text": "To know more about this parameter check [bwameme](https://github.com/kaist-ina/BWA-MEME?tab=readme-ov-file#building-pipeline-with-samtools) documentation.", + "fa_icon": "fas fa-less-than" + }, "min_trimmed_length": { "type": "integer", "default": 40, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 8822d1cb..db7b0bfc 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -25,6 +25,7 @@ workflow ALIGN { ch_mtshift_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_mtshift_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] + val_mbuffer_mem // integer: [mandatory] memory in megabytes val_platform // string: [mandatory] illumina or a different technology main: @@ -56,6 +57,7 @@ workflow ALIGN { ch_genome_bwamemeindex, ch_genome_fasta, ch_genome_fai, + val_mbuffer_mem, val_platform ) ch_bwamem2_bam = ALIGN_BWA_BWAMEM2_BWAMEME.out.marked_bam diff --git a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf index 7d635d51..b11f589f 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf @@ -21,6 +21,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_bwameme_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_mbuffer_mem // integer: [mandatory] default: 3072 val_platform // string: [mandatory] default: illumina main: @@ -32,7 +33,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_align = BWA.out.bam ch_versions = ch_versions.mix(BWA.out.versions.first()) } else if (params.aligner.equals("bwameme")) { - BWAMEME_MEM ( ch_reads_input, ch_bwameme_index, ch_genome_fasta, true ) + BWAMEME_MEM ( ch_reads_input, ch_bwameme_index, ch_genome_fasta, true, val_mbuffer_mem ) ch_align = BWAMEME_MEM.out.bam ch_versions = ch_versions.mix(BWAMEME_MEM.out.versions.first()) } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ab09b6f2..ee00ee66 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -370,6 +370,7 @@ workflow RAREDISEASE { ch_mtshift_fasta, ch_mtshift_dictionary, ch_mtshift_fai, + params.mbuffer_mem, params.platform ) .set { ch_mapped } From 98ed2cdc3ea0ac0d4582ce330c307417cad4cd40 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 15:53:36 +0200 Subject: [PATCH 1770/1921] remove readcount interval generation --- nextflow_schema.json | 2 +- subworkflows/local/prepare_references.nf | 30 +++++++++------------ workflows/raredisease.nf | 34 +++++++++++++----------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 47f36d06..032569bf 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -281,7 +281,7 @@ "fa_icon": "fas fa-file", "description": "Interval list file containing the intervals over which read counts are tabulated for CNV calling", "format": "file-path", - "help_text": "Generated by GATK4 preprocessintervals. If absent, pipeline can generate this file." + "help_text": "Generated by GATK4 preprocessintervals." }, "reduced_penetrance": { "type": "string", diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 2bd4b6dd..36445800 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -31,13 +31,14 @@ include { UNTAR as UNTAR_VEP_CACHE } from '../../modul workflow PREPARE_REFERENCES { take: - ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] - 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) ] - ch_vep_cache // channel: [mandatory for annotation] [ path(cache) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_dictionary // channel: [mandatory] [ val(meta), path(fai) ] + 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) ] + ch_vep_cache // channel: [mandatory for annotation] [ path(cache) ] main: ch_versions = Channel.empty() @@ -49,7 +50,8 @@ workflow PREPARE_REFERENCES { // Genome indices SAMTOOLS_FAIDX_GENOME(ch_genome_fasta, [[],[]]) GATK_SD(ch_genome_fasta) - ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() + ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() + ch_dict = Channel.empty().mix(ch_genome_dictionary, GATK_SD.out.dict).collect() GET_CHROM_SIZES( ch_fai ) // Genome alignment indices @@ -89,7 +91,7 @@ workflow PREPARE_REFERENCES { TABIX_PBT(ch_target_bed).gz_tbi.set { ch_bgzip_tbi } // Generate bait and target intervals - GATK_BILT(ch_target_bed, GATK_SD.out.dict).interval_list + GATK_BILT(ch_target_bed, ch_dict).interval_list GATK_ILT(GATK_BILT.out.interval_list) GATK_ILT.out.interval_list .collect{ it[1] } @@ -101,10 +103,6 @@ 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, [[],[]], [[],[]]).set {ch_preprocwgs} - GATK_PREPROCESS_WES (ch_genome_fasta, ch_fai, GATK_SD.out.dict, GATK_BILT.out.interval_list, [[],[]]).set {ch_preprocwes} - // RTG tools ch_genome_fasta.map { meta, fasta -> return [meta, fasta, [], [] ] } .set {ch_rtgformat_in} @@ -134,8 +132,6 @@ 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) ch_versions = ch_versions.mix(RTGTOOLS_FORMAT.out.versions) emit: @@ -144,9 +140,7 @@ workflow PREPARE_REFERENCES { genome_bwameme_index = BWAMEME_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) ] - readcount_intervals = Channel.empty() - .mix(ch_preprocwgs.interval_list,ch_preprocwes.interval_list)// channel: [ path(intervals) ] + genome_dict = ch_dict // channel: [ val(meta), path(dict) ] sdf = RTGTOOLS_FORMAT.out.sdf // channel: [ val (meta), 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/workflows/raredisease.nf b/workflows/raredisease.nf index ee00ee66..bc5fef99 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -58,7 +58,7 @@ if (params.variant_caller.equals("sentieon")) { } if (!params.skip_germlinecnvcaller) { - mandatoryParams += ["ploidy_model", "gcnvcaller_model"] + mandatoryParams += ["ploidy_model", "gcnvcaller_model", "readcount_intervals"] } if (!params.skip_vep_filter) { @@ -171,24 +171,27 @@ workflow RAREDISEASE { ch_case_info = ch_samples.toList().map { CustomFunctions.createCaseChannel(it) } // Initialize file channels for PREPARE_REFERENCES subworkflow - ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.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([[],[]]) + ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() + ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.empty() + ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).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_genome_dictionary, ch_mt_fasta, ch_gnomad_af_tab, ch_dbsnp, @@ -220,8 +223,7 @@ workflow RAREDISEASE { : ch_references.genome_bwameme_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_genome_dictionary = ch_references.genome_dict ch_gens_gnomad_pos = params.gens_gnomad_pos ? Channel.fromPath(params.gens_gnomad_pos).collect() : Channel.empty() ch_gens_interval_list = params.gens_interval_list ? Channel.fromPath(params.gens_interval_list).collect() From 27cf8fb946790b34186581b4f1a1b099119110f6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:48:21 +0200 Subject: [PATCH 1771/1921] update module --- modules.json | 2 +- modules/nf-core/bwameme/mem/main.nf | 13 ++- modules/nf-core/bwameme/mem/meta.yml | 5 +- .../nf-core/bwameme/mem/tests/main.nf.test | 15 ++- .../bwameme/mem/tests/main.nf.test.snap | 108 +++++++++++++++--- 5 files changed, 118 insertions(+), 25 deletions(-) diff --git a/modules.json b/modules.json index d6310623..4322c732 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ }, "bwameme/mem": { "branch": "master", - "git_sha": "c3793385cf559bb60d33e6c3b0cb379a40b26602", + "git_sha": "0aa157a00b54bcbe2c50be375cafd68d928e7f4d", "installed_by": ["modules"] }, "cadd": { diff --git a/modules/nf-core/bwameme/mem/main.nf b/modules/nf-core/bwameme/mem/main.nf index db91482f..2efc8c0f 100644 --- a/modules/nf-core/bwameme/mem/main.nf +++ b/modules/nf-core/bwameme/mem/main.nf @@ -13,6 +13,7 @@ process BWAMEME_MEM { tuple val(meta3), path(fasta) val sort_bam val mbuffer + val samtools_threads output: tuple val(meta), path("*.sam") , emit: sam , optional:true @@ -31,13 +32,19 @@ process BWAMEME_MEM { def prefix = task.ext.prefix ?: "${meta.id}" def samtools_command = sort_bam ? 'sort' : 'view' if (!mbuffer) { - log.info '[bwameme-mbuffer] Memory for mbuffer is not set - defaulting to 3072MB for mbuffer.' + log.info '[bwameme-mbuffer] Memory for mbuffer is not set - defaulting to 3GB for mbuffer.' mbuffer_mem = 3072 } else { mbuffer_mem = mbuffer } + if (!samtools_threads) { + log.info 'Number of threads for samtools is not set - defaulting to 2 threads.' + threads = 2 + } else { + threads = samtools_threads + } mbuffer_command = sort_bam ? "| mbuffer -m ${mbuffer_mem}M" : "" - mem_per_thread = sort_bam ? "-m "+ (mbuffer_mem/task.cpus).intValue()+"M" : "" + mem_per_thread = sort_bam ? "-m "+ (mbuffer_mem/threads).intValue()+"M" : "" def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ def extension_matcher = (args2 =~ extension_pattern) def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" @@ -54,7 +61,7 @@ process BWAMEME_MEM { \$INDEX \\ $reads \\ $mbuffer_command \\ - | samtools $samtools_command $args2 $mem_per_thread -@ $task.cpus ${reference} -o ${prefix}.${extension} - + | samtools $samtools_command $args2 $mem_per_thread -@ $threads ${reference} -o ${prefix}.${extension} - cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bwameme/mem/meta.yml b/modules/nf-core/bwameme/mem/meta.yml index 85a8b5b3..e5d28db2 100644 --- a/modules/nf-core/bwameme/mem/meta.yml +++ b/modules/nf-core/bwameme/mem/meta.yml @@ -54,7 +54,10 @@ input: pattern: "true or false" - mbuffer: type: integer - description: memory for mbuffer in megabytes + description: memory for mbuffer in megabytes (default 3072) + - sort_threads: + type: integer + description: number of threads to used during samtools sort (default 2). output: - meta: diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test b/modules/nf-core/bwameme/mem/tests/main.nf.test index 961d6379..8175f58a 100644 --- a/modules/nf-core/bwameme/mem/tests/main.nf.test +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test @@ -11,7 +11,7 @@ nextflow_process { tag "bwameme/index" config "./nextflow.config" - test("sarscov2 - fastq, index, fasta, false, 0") { + test("sarscov2 - fastq, index, fasta, false, 0, 4") { setup { run("BWAMEME_INDEX") { @@ -39,6 +39,7 @@ nextflow_process { input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = false input[4] = 0 + input[5] = 4 """ } } @@ -55,7 +56,7 @@ nextflow_process { } - test("sarscov2 - fastq, index, fasta, true, 2048") { + test("sarscov2 - fastq, index, fasta, true, 2048, 4") { setup { run("BWAMEME_INDEX") { @@ -83,6 +84,7 @@ nextflow_process { input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = true input[4] = 2048 + input[5] = 4 """ } } @@ -99,7 +101,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, false, 0") { + test("sarscov2 - [fastq1, fastq2], index, fasta, false, 0, 4") { setup { run("BWAMEME_INDEX") { @@ -130,6 +132,7 @@ nextflow_process { input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = false input[4] = 0 + input[5] = 4 """ } } @@ -146,7 +149,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048") { + test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, ''") { setup { run("BWAMEME_INDEX") { @@ -177,6 +180,7 @@ nextflow_process { input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = true input[4] = 2048 + input[5] = "" """ } } @@ -193,7 +197,7 @@ nextflow_process { } - test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048 - stub") { + test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, 4 - stub") { options "-stub" @@ -226,6 +230,7 @@ nextflow_process { input[2] = Channel.of([[:], [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)]]) input[3] = true input[4] = 2048 + input[5] = 4 """ } } diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap index a8ff281b..55235959 100644 --- a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap @@ -1,5 +1,5 @@ { - "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048": { + "sarscov2 - [fastq1, fastq2], index, fasta, false, 0, 4": { "content": [ "test.bam", [ @@ -10,7 +10,7 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-18T10:17:31.035368735" + "timestamp": "2024-06-20T16:07:51.065498711" }, "sarscov2 - [fastq1, fastq2], index, fasta, false": { "content": [ @@ -25,7 +25,33 @@ }, "timestamp": "2024-05-15T20:04:31.962017214" }, - "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, 4": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-20T16:08:18.378362535" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, ''": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-20T16:25:43.613918051" + }, + "sarscov2 - fastq, index, fasta, false": { "content": [ "test.bam", [ @@ -36,9 +62,9 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-05-15T19:28:46.895668666" + "timestamp": "2024-05-15T20:00:05.782384898" }, - "sarscov2 - [fastq1, fastq2], index, fasta, false, 0": { + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048 - stub": { "content": [ "test.bam", [ @@ -49,9 +75,35 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-18T10:17:08.497131484" + "timestamp": "2024-06-18T10:17:40.514767321" }, - "sarscov2 - [fastq1, fastq2], index, fasta, true": { + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:17:31.035368735" + }, + "sarscov2 - fastq, index, fasta, true, 2048, 4": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-20T16:07:24.071789902" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { "content": [ "test.bam", [ @@ -62,7 +114,20 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-05-15T20:44:56.510177191" + "timestamp": "2024-05-15T19:28:46.895668666" + }, + "sarscov2 - [fastq1, fastq2], index, fasta, false, 0": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-18T10:17:08.497131484" }, "sarscov2 - fastq, index, fasta, false, 0": { "content": [ @@ -77,6 +142,19 @@ }, "timestamp": "2024-06-18T10:16:23.45126091" }, + "sarscov2 - [fastq1, fastq2], index, fasta, true": { + "content": [ + "test.bam", + [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-15T20:44:56.510177191" + }, "sarscov2 - fastq, index, fasta, true, 2048": { "content": [ "test.bam", @@ -90,7 +168,7 @@ }, "timestamp": "2024-06-18T10:16:46.541148031" }, - "sarscov2 - fastq, index, fasta, false": { + "sarscov2 - fastq, index, fasta, true": { "content": [ "test.bam", [ @@ -101,9 +179,9 @@ "nf-test": "0.8.4", "nextflow": "23.10.1" }, - "timestamp": "2024-05-15T20:00:05.782384898" + "timestamp": "2024-05-15T20:44:05.2657749" }, - "sarscov2 - fastq, index, fasta, true": { + "sarscov2 - fastq, index, fasta, false, 0, 4": { "content": [ "test.bam", [ @@ -112,11 +190,11 @@ ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-05-15T20:44:05.2657749" + "timestamp": "2024-06-20T16:06:58.802149967" }, - "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048 - stub": { + "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, 4 - stub": { "content": [ "test.bam", [ @@ -127,6 +205,6 @@ "nf-test": "0.8.4", "nextflow": "24.04.2" }, - "timestamp": "2024-06-18T10:17:40.514767321" + "timestamp": "2024-06-20T16:08:28.453969552" } } \ No newline at end of file From 481f9f53191d2546609975a3d57326713043754a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:14:49 +0200 Subject: [PATCH 1772/1921] add sort threads option --- nextflow.config | 1 + nextflow_schema.json | 7 +++++++ subworkflows/local/align.nf | 4 +++- subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf | 4 ++-- workflows/raredisease.nf | 3 ++- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/nextflow.config b/nextflow.config index b6defbc2..f109b654 100644 --- a/nextflow.config +++ b/nextflow.config @@ -54,6 +54,7 @@ params { // Alignment aligner = 'bwamem2' mbuffer_mem = 3072 + samtools_sort_threads = 4 min_trimmed_length = 40 mt_subsample_rd = 150 mt_subsample_seed = 30 diff --git a/nextflow_schema.json b/nextflow_schema.json index 032569bf..7004ba9e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -605,6 +605,13 @@ "fa_icon": "fas fa-align-center", "enum": ["bwa", "bwamem2", "bwameme", "sentieon"] }, + "samtools_sort_threads": { + "type": "integer", + "default": 4, + "description": "Number of threads allocated for sorting alignment files (used only by bwameme)", + "help_text": "To know more about this parameter check [bwameme](https://github.com/kaist-ina/BWA-MEME?tab=readme-ov-file#building-pipeline-with-samtools) documentation.", + "fa_icon": "fas fa-less-than" + }, "mbuffer_mem": { "type": "integer", "default": 3072, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index db7b0bfc..2163767c 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -27,6 +27,7 @@ workflow ALIGN { ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] val_mbuffer_mem // integer: [mandatory] memory in megabytes val_platform // string: [mandatory] illumina or a different technology + val_sort_threads // integer: [mandatory] memory in megabytes main: ch_bwamem2_bam = Channel.empty() @@ -58,7 +59,8 @@ workflow ALIGN { ch_genome_fasta, ch_genome_fai, val_mbuffer_mem, - val_platform + val_platform, + val_sort_threads ) ch_bwamem2_bam = ALIGN_BWA_BWAMEM2_BWAMEME.out.marked_bam ch_bwamem2_bai = ALIGN_BWA_BWAMEM2_BWAMEME.out.marked_bai diff --git a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf index b11f589f..15d3db9a 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf @@ -23,7 +23,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] val_mbuffer_mem // integer: [mandatory] default: 3072 val_platform // string: [mandatory] default: illumina - + val_sort_threads // integer: [mandatory] default: 4 main: ch_versions = Channel.empty() @@ -33,7 +33,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_align = BWA.out.bam ch_versions = ch_versions.mix(BWA.out.versions.first()) } else if (params.aligner.equals("bwameme")) { - BWAMEME_MEM ( ch_reads_input, ch_bwameme_index, ch_genome_fasta, true, val_mbuffer_mem ) + BWAMEME_MEM ( ch_reads_input, ch_bwameme_index, ch_genome_fasta, true, val_mbuffer_mem, val_sort_threads ) ch_align = BWAMEME_MEM.out.bam ch_versions = ch_versions.mix(BWAMEME_MEM.out.versions.first()) } else { diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index bc5fef99..361bbee2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -373,7 +373,8 @@ workflow RAREDISEASE { ch_mtshift_dictionary, ch_mtshift_fai, params.mbuffer_mem, - params.platform + params.platform, + params.samtools_sort_threads ) .set { ch_mapped } ch_versions = ch_versions.mix(ALIGN.out.versions) From 5296b877a37249ed2de4ce3d0667a164731aa12a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:44:49 +0200 Subject: [PATCH 1773/1921] update changelog --- CHANGELOG.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67fdb977..e29858c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,16 +3,28 @@ 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). -## 2.2.0 - Dogmatix [XXXX-XX-XX] +## 2.2.0dev - Dogmatix [XXXX-XX-XX] ### `Added` +- Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#564](https://github.com/nf-core/raredisease/pull/564) + ### `Changed` +- `readcount_intervals` parameter is now manadatory for running germlinecnvcaller. [#564](https://github.com/nf-core/raredisease/pull/564) + ### `Fixed` +- Docker manifest error from gnu-wget container [#564](https://github.com/nf-core/raredisease/pull/564) - Citations for bwameme [#563](https://github.com/nf-core/raredisease/pull/563) +### Parameters + +| Old parameter | New parameter | +| ------------- | --------------------- | +| | mbuffer_mem | +| | samtools_sort_threads | + ## 2.1.0 - Obelix [2024-05-29] ### `Added` From 9c74555c1d21d7e0290ad0962f0b9f5a68d21801 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:47:31 +0200 Subject: [PATCH 1774/1921] update changelog --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e29858c7..8e998348 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,15 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` -- Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#564](https://github.com/nf-core/raredisease/pull/564) +- Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#570](https://github.com/nf-core/raredisease/pull/570) ### `Changed` -- `readcount_intervals` parameter is now manadatory for running germlinecnvcaller. [#564](https://github.com/nf-core/raredisease/pull/564) +- `readcount_intervals` parameter is now manadatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) ### `Fixed` -- Docker manifest error from gnu-wget container [#564](https://github.com/nf-core/raredisease/pull/564) +- Docker manifest error from gnu-wget container [#570](https://github.com/nf-core/raredisease/pull/570) - Citations for bwameme [#563](https://github.com/nf-core/raredisease/pull/563) ### Parameters From 798a150a6ed8ce06f95c14d9b3c9b903bae1106d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 21:31:34 +0200 Subject: [PATCH 1775/1921] fix error [skip ci] --- conf/modules/prepare_references.config | 15 --------------- subworkflows/local/prepare_references.nf | 2 -- 2 files changed, 17 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 9ec4d47b..10fda4a3 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -124,19 +124,4 @@ process { ext.when = { (params.vep_cache && params.vep_cache.endsWith("tar.gz")) } } - withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WGS' { - ext.args = { [ - '--padding 0', - '--interval-merging-rule OVERLAPPING_ONLY', - "--exclude-intervals ${params.mito_name}", - "--tmp-dir ./" - ].join(' ') } - 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") && !params.readcount_intervals } - } - } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 36445800..7c7726b4 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -13,8 +13,6 @@ 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 { RTGTOOLS_FORMAT } from '../../modules/nf-core/rtgtools/format/main' From 3cbe7a77afe26bd0ee04ecd10439cb1ceaf7002a Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 21:33:44 +0200 Subject: [PATCH 1776/1921] remove module --- modules.json | 5 -- .../gatk4/preprocessintervals/environment.yml | 7 -- .../nf-core/gatk4/preprocessintervals/main.nf | 62 -------------- .../gatk4/preprocessintervals/meta.yml | 82 ------------------- 4 files changed, 156 deletions(-) delete mode 100644 modules/nf-core/gatk4/preprocessintervals/environment.yml delete mode 100644 modules/nf-core/gatk4/preprocessintervals/main.nf delete mode 100644 modules/nf-core/gatk4/preprocessintervals/meta.yml diff --git a/modules.json b/modules.json index 4322c732..e400f22d 100644 --- a/modules.json +++ b/modules.json @@ -206,11 +206,6 @@ "git_sha": "cf607b7749da0a8f5ca2a1e31233e13e3159e2fe", "installed_by": ["modules"] }, - "gatk4/preprocessintervals": { - "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", - "installed_by": ["modules"] - }, "gatk4/printreads": { "branch": "master", "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", diff --git a/modules/nf-core/gatk4/preprocessintervals/environment.yml b/modules/nf-core/gatk4/preprocessintervals/environment.yml deleted file mode 100644 index ec0b09e9..00000000 --- a/modules/nf-core/gatk4/preprocessintervals/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: gatk4_preprocessintervals -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::gatk4=4.5.0.0 diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf deleted file mode 100644 index dffc4bb1..00000000 --- a/modules/nf-core/gatk4/preprocessintervals/main.nf +++ /dev/null @@ -1,62 +0,0 @@ -process GATK4_PREPROCESSINTERVALS { - tag "$fasta" - label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.5.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.5.0.0--py36hdfd78af_0' }" - - input: - tuple val(meta), path(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 - 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 include_command = intervals ? "--intervals $intervals" : "" - def exclude_command = exclude_intervals ? "--exclude-intervals $exclude_intervals" : "" - - 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.mega*0.8).intValue() - } - - """ - gatk --java-options "-Xmx${avail_mem}M -XX:-UsePerfData" \\ - PreprocessIntervals \\ - $include_command \\ - $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 deleted file mode 100644 index cf3f6ac4..00000000 --- a/modules/nf-core/gatk4/preprocessintervals/meta.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: "gatk4_preprocessintervals" -description: Prepares bins for coverage collection. -keywords: - - bed - - gatk4 - - interval - - preprocessintervals -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 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 reference information - e.g. [ id:'test' ] - - 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" - - "@ramprasadn" -maintainers: - - "@ryanjameskennedy" - - "@ViktorHy" - - "@ramprasadn" From 306d03b8ba4885197a94a18a0b3e44497c14a658 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:08:10 +0200 Subject: [PATCH 1777/1921] skip repeat analysis --- nextflow.config | 3 +-- nextflow_schema.json | 5 +++++ workflows/raredisease.nf | 22 ++++++++++++---------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/nextflow.config b/nextflow.config index 78a92109..66588359 100644 --- a/nextflow.config +++ b/nextflow.config @@ -38,10 +38,9 @@ params { skip_me_annotation = false skip_mt_annotation = false skip_qualimap = false + skip_repeat_analysis = false skip_snv_annotation = false skip_sv_annotation = false - skip_me_annotation = false - skip_mt_annotation = false skip_mt_subsample = false skip_vcf2cytosure = true skip_vep_filter = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 7004ba9e..4a7a459d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -568,6 +568,11 @@ "description": "Specifies whether or not to subsample mt alignment.", "fa_icon": "fas fa-toggle-on" }, + "skip_repeat_analysis": { + "type": "boolean", + "description": "Specifies whether or not to skip calling and annotation of repeat expansions.", + "fa_icon": "fas fa-toggle-on" + }, "skip_snv_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotate SNV subworkflow.", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 361bbee2..e9ef671c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -258,7 +258,7 @@ workflow RAREDISEASE { ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.empty() ch_readcount_intervals = params.readcount_intervals ? Channel.fromPath(params.readcount_intervals).collect() - : ( ch_references.readcount_intervals ?: Channel.empty() ) + : Channel.empty() ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) ch_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() @@ -409,15 +409,17 @@ workflow RAREDISEASE { // // EXPANSIONHUNTER AND STRANGER // - if (params.analysis_type.equals("wgs")) { - CALL_REPEAT_EXPANSIONS ( - ch_mapped.genome_bam_bai, - ch_variant_catalog, - ch_case_info, - ch_genome_fasta, - ch_genome_fai - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + if (!params.skip_repeat_analysis) { + if ( params.analysis_type.equals("wgs") ) { + CALL_REPEAT_EXPANSIONS ( + ch_mapped.genome_bam_bai, + ch_variant_catalog, + ch_case_info, + ch_genome_fasta, + ch_genome_fai + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + } } // From aa4c0e651a658541b56a3a1614a81ccaa9eda88d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:09:52 +0200 Subject: [PATCH 1778/1921] fix error --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 361bbee2..2b6e3483 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -258,7 +258,7 @@ workflow RAREDISEASE { ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.empty() ch_readcount_intervals = params.readcount_intervals ? Channel.fromPath(params.readcount_intervals).collect() - : ( ch_references.readcount_intervals ?: Channel.empty() ) + : Channel.empty() ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) ch_rtg_truthvcfs = params.rtg_truthvcfs ? Channel.fromPath(params.rtg_truthvcfs).collect() From 74087e2ea0594044b95cf2776d9c414e4d786f96 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:38:54 +0200 Subject: [PATCH 1779/1921] add skip_snv_calling --- nextflow_schema.json | 5 + workflows/raredisease.nf | 274 +++++++++++++++++++++------------------ 2 files changed, 151 insertions(+), 128 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 4a7a459d..557b1ec2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -578,6 +578,11 @@ "description": "Specifies whether or not to skip annotate SNV subworkflow.", "fa_icon": "fas fa-toggle-on" }, + "skip_snv_calling": { + "type": "boolean", + "description": "Specifies whether or not to skip nuclear and mitochondrial SNV calling and annotation.", + "fa_icon": "fas fa-toggle-on" + }, "skip_sv_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotate structural variant subworkflow.", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index e9ef671c..26c56682 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -355,9 +355,12 @@ workflow RAREDISEASE { ch_scatter_split_intervals = ch_scatter.split_intervals ?: Channel.empty() - // - // ALIGNING READS, FETCH STATS, AND MERGE. - // +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ALIGN & FETCH STATS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + ALIGN ( ch_samplesheet, ch_genome_fasta, @@ -406,9 +409,12 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(QC_BAM.out.versions) - // - // EXPANSIONHUNTER AND STRANGER - // +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CALL AND ANNOTATE REPEAT EXPANSIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + if (!params.skip_repeat_analysis) { if ( params.analysis_type.equals("wgs") ) { CALL_REPEAT_EXPANSIONS ( @@ -422,49 +428,133 @@ workflow RAREDISEASE { } } +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CALL AND ANNOTATE NUCLEAR AND MITOCHONDRIAL SNVs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + + if (!params.skip_snv_calling) { + CALL_SNV ( + ch_mapped.genome_bam_bai, + ch_mapped.mt_bam_bai, + ch_mapped.mtshift_bam_bai, + ch_genome_chrsizes, + ch_genome_fasta, + ch_genome_fai, + ch_genome_dictionary, + ch_mt_intervals, + ch_mtshift_fasta, + ch_mtshift_fai, + ch_mtshift_dictionary, + ch_mtshift_intervals, + ch_mtshift_backchain, + ch_dbsnp, + ch_dbsnp_tbi, + ch_call_interval, + ch_ml_model, + ch_case_info, + ch_foundin_header, + Channel.value(params.sentieon_dnascope_pcr_indel_model) + ) + ch_versions = ch_versions.mix(CALL_SNV.out.versions) + // - // SNV CALLING + // ANNOTATE GENOME SNVs // - CALL_SNV ( - ch_mapped.genome_bam_bai, - ch_mapped.mt_bam_bai, - ch_mapped.mtshift_bam_bai, - ch_genome_chrsizes, - ch_genome_fasta, - ch_genome_fai, - ch_genome_dictionary, - ch_mt_intervals, - ch_mtshift_fasta, - ch_mtshift_fai, - ch_mtshift_dictionary, - ch_mtshift_intervals, - ch_mtshift_backchain, - ch_dbsnp, - ch_dbsnp_tbi, - ch_call_interval, - ch_ml_model, - ch_case_info, - ch_foundin_header, - Channel.value(params.sentieon_dnascope_pcr_indel_model) - ) - ch_versions = ch_versions.mix(CALL_SNV.out.versions) + + if (!params.skip_snv_annotation) { + + ANNOTATE_GENOME_SNVS ( + CALL_SNV.out.genome_vcf_tabix, + params.analysis_type, + ch_cadd_header, + ch_cadd_resources, + ch_vcfanno_resources, + ch_vcfanno_lua, + ch_vcfanno_toml, + params.genome, + params.vep_cache_version, + ch_vep_cache, + ch_genome_fasta, + ch_gnomad_af, + ch_samples, + ch_scatter_split_intervals, + ch_vep_extra_files, + ch_genome_chrsizes + ).set { ch_snv_annotate } + ch_versions = ch_versions.mix(ch_snv_annotate.versions) + + GENERATE_CLINICAL_SET_SNV( + ch_snv_annotate.vcf_ann, + ch_hgnc_ids + ) + ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SNV.out.versions) + + ANN_CSQ_PLI_SNV ( + GENERATE_CLINICAL_SET_SNV.out.vcf, + ch_variant_consequences_snv + ) + ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) + + RANK_VARIANTS_SNV ( + ANN_CSQ_PLI_SNV.out.vcf_ann, + ch_pedfile, + ch_reduced_penetrance, + ch_score_config_snv + ) + ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) + } // - // VARIANT EVALUATION + // ANNOTATE MT SNVs // - if (params.run_rtgvcfeval) { - VARIANT_EVALUATION ( - CALL_SNV.out.genome_vcf_tabix, - ch_genome_fai, - ch_rtg_truthvcfs, - ch_sdf - ) - ch_versions = ch_versions.mix(VARIANT_EVALUATION.out.versions) + + if (!params.skip_mt_annotation && (params.run_mt_for_wes || params.analysis_type.equals("wgs"))) { + + ANNOTATE_MT_SNVS ( + CALL_SNV.out.mt_vcf, + CALL_SNV.out.mt_tabix, + ch_cadd_header, + ch_cadd_resources, + ch_genome_fasta, + ch_vcfanno_resources, + ch_vcfanno_toml, + params.genome, + params.vep_cache_version, + ch_vep_cache, + ch_vep_extra_files + ).set { ch_mt_annotate } + ch_versions = ch_versions.mix(ch_mt_annotate.versions) + + GENERATE_CLINICAL_SET_MT( + ch_mt_annotate.vcf_ann, + ch_hgnc_ids + ) + ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_MT.out.versions) + + ANN_CSQ_PLI_MT( + GENERATE_CLINICAL_SET_MT.out.vcf, + ch_variant_consequences_snv + ) + ch_versions = ch_versions.mix(ANN_CSQ_PLI_MT.out.versions) + + RANK_VARIANTS_MT ( + ANN_CSQ_PLI_MT.out.vcf_ann, + ch_pedfile, + ch_reduced_penetrance, + ch_score_config_mt + ) + ch_versions = ch_versions.mix(RANK_VARIANTS_MT.out.versions) + } } - // - // SV CALLING - // +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CALL AND ANNOTATE NUCLEAR AND MITOCHONDRIAL SVs +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + CALL_STRUCTURAL_VARIANTS ( ch_mapped.genome_marked_bam, ch_mapped.genome_marked_bai, @@ -524,94 +614,8 @@ workflow RAREDISEASE { } - // - // ANNOTATE GENOME SNVs - // - if (!params.skip_snv_annotation) { - ANNOTATE_GENOME_SNVS ( - CALL_SNV.out.genome_vcf_tabix, - params.analysis_type, - ch_cadd_header, - ch_cadd_resources, - ch_vcfanno_resources, - ch_vcfanno_lua, - ch_vcfanno_toml, - params.genome, - params.vep_cache_version, - ch_vep_cache, - ch_genome_fasta, - ch_gnomad_af, - ch_samples, - ch_scatter_split_intervals, - ch_vep_extra_files, - ch_genome_chrsizes - ).set { ch_snv_annotate } - ch_versions = ch_versions.mix(ch_snv_annotate.versions) - - GENERATE_CLINICAL_SET_SNV( - ch_snv_annotate.vcf_ann, - ch_hgnc_ids - ) - ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SNV.out.versions) - ANN_CSQ_PLI_SNV ( - GENERATE_CLINICAL_SET_SNV.out.vcf, - ch_variant_consequences_snv - ) - ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) - - RANK_VARIANTS_SNV ( - ANN_CSQ_PLI_SNV.out.vcf_ann, - ch_pedfile, - ch_reduced_penetrance, - ch_score_config_snv - ) - ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) - - } - - // - // ANNOTATE MT SNVs - // - if (!params.skip_mt_annotation && (params.run_mt_for_wes || params.analysis_type.equals("wgs"))) { - - ANNOTATE_MT_SNVS ( - CALL_SNV.out.mt_vcf, - CALL_SNV.out.mt_tabix, - ch_cadd_header, - ch_cadd_resources, - ch_genome_fasta, - ch_vcfanno_resources, - ch_vcfanno_toml, - params.genome, - params.vep_cache_version, - ch_vep_cache, - ch_vep_extra_files - ).set { ch_mt_annotate } - ch_versions = ch_versions.mix(ch_mt_annotate.versions) - - GENERATE_CLINICAL_SET_MT( - ch_mt_annotate.vcf_ann, - ch_hgnc_ids - ) - ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_MT.out.versions) - - ANN_CSQ_PLI_MT( - GENERATE_CLINICAL_SET_MT.out.vcf, - ch_variant_consequences_snv - ) - ch_versions = ch_versions.mix(ANN_CSQ_PLI_MT.out.versions) - - RANK_VARIANTS_MT ( - ANN_CSQ_PLI_MT.out.vcf_ann, - ch_pedfile, - ch_reduced_penetrance, - ch_score_config_mt - ) - ch_versions = ch_versions.mix(RANK_VARIANTS_MT.out.versions) - - } // STEP 1.7: SMNCOPYNUMBERCALLER RENAME_BAM_FOR_SMNCALLER(ch_mapped.genome_marked_bam, "bam").output @@ -712,6 +716,20 @@ workflow RAREDISEASE { } } + + // + // VARIANT EVALUATION + // + if (params.run_rtgvcfeval) { + VARIANT_EVALUATION ( + CALL_SNV.out.genome_vcf_tabix, + ch_genome_fai, + ch_rtg_truthvcfs, + ch_sdf + ) + ch_versions = ch_versions.mix(VARIANT_EVALUATION.out.versions) + } + // // Collate and save software versions // From a27392daf7a83c6a78746171335e9225312b36f9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:47:01 +0200 Subject: [PATCH 1780/1921] add to nextflow.config --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index 66588359..5d4bda28 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,6 +39,7 @@ params { skip_mt_annotation = false skip_qualimap = false skip_repeat_analysis = false + skip_snv_calling = false skip_snv_annotation = false skip_sv_annotation = false skip_mt_subsample = false From e39c099469cd8e868d7d52d5f7a7bf1c1c2eb537 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:58:25 +0200 Subject: [PATCH 1781/1921] reorder --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 5d4bda28..03c81529 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,8 +39,8 @@ params { skip_mt_annotation = false skip_qualimap = false skip_repeat_analysis = false - skip_snv_calling = false skip_snv_annotation = false + skip_snv_calling = false skip_sv_annotation = false skip_mt_subsample = false skip_vcf2cytosure = true From 7cc4bda2072f1ea4441adc520ade74e98a860872 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:01:43 +0200 Subject: [PATCH 1782/1921] reorder sv bits --- nextflow.config | 1 + nextflow_schema.json | 5 + workflows/raredisease.nf | 257 +++++++++++++++++++++++---------------- 3 files changed, 160 insertions(+), 103 deletions(-) diff --git a/nextflow.config b/nextflow.config index 03c81529..9ab21daa 100644 --- a/nextflow.config +++ b/nextflow.config @@ -42,6 +42,7 @@ params { skip_snv_annotation = false skip_snv_calling = false skip_sv_annotation = false + skip_sv_calling = false skip_mt_subsample = false skip_vcf2cytosure = true skip_vep_filter = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 557b1ec2..8f1b9df8 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -588,6 +588,11 @@ "description": "Specifies whether or not to skip annotate structural variant subworkflow.", "fa_icon": "fas fa-toggle-on" }, + "skip_sv_calling": { + "type": "boolean", + "description": "Specifies whether or not to skip nuclear and mitochondrial SV calling and annotation.", + "fa_icon": "fas fa-toggle-on" + }, "skip_vcf2cytosure": { "type": "boolean", "default": true, diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 26c56682..06dd9a23 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -170,7 +170,9 @@ workflow RAREDISEASE { ch_samples = ch_samplesheet.map { meta, fastqs -> meta} ch_case_info = ch_samples.toList().map { CustomFunctions.createCaseChannel(it) } + // // Initialize file channels for PREPARE_REFERENCES subworkflow + // ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.empty() @@ -187,7 +189,9 @@ workflow RAREDISEASE { 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, @@ -200,7 +204,9 @@ workflow RAREDISEASE { ) .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() @@ -303,19 +309,31 @@ workflow RAREDISEASE { : Channel.empty() ch_versions = ch_versions.mix(ch_references.versions) + // // SV caller priority + // if (params.skip_germlinecnvcaller) { - ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) + if (params.analysis_type.equals("wgs")) { + ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) + } else { + ch_svcaller_priority = Channel.value(["manta"]) } else { - ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) + if (params.analysis_type.equals("wgs")) { + ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) + } else { + ch_svcaller_priority = Channel.value(["manta", "gcnvcaller"]) + } } - + // // Generate pedigree file + // ch_pedfile = CREATE_PEDIGREE_FILE(ch_samples.toList()).ped ch_versions = ch_versions.mix(CREATE_PEDIGREE_FILE.out.versions) + // // Read and store paths in the vep_plugin_files file + // if (params.vep_plugin_files) { ch_vep_extra_files_unsplit.splitCsv ( header:true ) .map { row -> @@ -330,7 +348,9 @@ workflow RAREDISEASE { .set {ch_vep_extra_files} } - // Read and store hgnc ids in a channel + // + // Dump all HGNC ids in a file + // ch_vep_filters_scout_fmt .mix (ch_vep_filters_std_fmt) .set {ch_vep_filters} @@ -339,13 +359,17 @@ workflow RAREDISEASE { .txt .set {ch_hgnc_ids} + // // Input QC + // if (!params.skip_fastqc) { FASTQC (ch_samplesheet) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) } - // CREATE CHROMOSOME BED AND INTERVALS + // + // Create chromosome bed and intervals for splitting and gathering operations + // SCATTER_GENOME ( ch_genome_dictionary, ch_genome_fai, @@ -551,73 +575,121 @@ workflow RAREDISEASE { /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CALL AND ANNOTATE NUCLEAR AND MITOCHONDRIAL SVs + CALL AND ANNOTATE NUCLEAR SVs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - CALL_STRUCTURAL_VARIANTS ( - ch_mapped.genome_marked_bam, - ch_mapped.genome_marked_bai, - ch_mapped.genome_bam_bai, - ch_mapped.mt_bam_bai, - ch_mapped.mtshift_bam_bai, - ch_genome_bwaindex, - ch_genome_fasta, - ch_genome_fai, - ch_mtshift_fasta, - ch_case_info, - ch_target_bed, - ch_genome_dictionary, - ch_svcaller_priority, - ch_readcount_intervals, - ch_ploidy_model, - ch_gcnvcaller_model - ) - ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) + if (!params.skip_sv_calling) { + CALL_STRUCTURAL_VARIANTS ( + ch_mapped.genome_marked_bam, + ch_mapped.genome_marked_bai, + ch_mapped.genome_bam_bai, + ch_mapped.mt_bam_bai, + ch_mapped.mtshift_bam_bai, + ch_genome_bwaindex, + ch_genome_fasta, + ch_genome_fai, + ch_mtshift_fasta, + ch_case_info, + ch_target_bed, + ch_genome_dictionary, + ch_svcaller_priority, + ch_readcount_intervals, + ch_ploidy_model, + ch_gcnvcaller_model + ) + ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) // // ANNOTATE STRUCTURAL VARIANTS // - if (!params.skip_sv_annotation) { - ANNOTATE_STRUCTURAL_VARIANTS ( - CALL_STRUCTURAL_VARIANTS.out.vcf, - ch_sv_dbs, - ch_sv_bedpedbs, - params.genome, - params.vep_cache_version, - ch_vep_cache, - ch_genome_fasta, - ch_genome_dictionary, - ch_vep_extra_files - ).set { ch_sv_annotate } - ch_versions = ch_versions.mix(ch_sv_annotate.versions) + if (!params.skip_sv_annotation) { + ANNOTATE_STRUCTURAL_VARIANTS ( + CALL_STRUCTURAL_VARIANTS.out.vcf, + ch_sv_dbs, + ch_sv_bedpedbs, + params.genome, + params.vep_cache_version, + ch_vep_cache, + ch_genome_fasta, + ch_genome_dictionary, + ch_vep_extra_files + ).set { ch_sv_annotate } + ch_versions = ch_versions.mix(ch_sv_annotate.versions) - GENERATE_CLINICAL_SET_SV( - ch_sv_annotate.vcf_ann, - ch_hgnc_ids - ) - ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SV.out.versions) + GENERATE_CLINICAL_SET_SV( + ch_sv_annotate.vcf_ann, + ch_hgnc_ids + ) + ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SV.out.versions) - ANN_CSQ_PLI_SV ( - GENERATE_CLINICAL_SET_SV.out.vcf, - ch_variant_consequences_sv - ) - ch_versions = ch_versions.mix(ANN_CSQ_PLI_SV.out.versions) + ANN_CSQ_PLI_SV ( + GENERATE_CLINICAL_SET_SV.out.vcf, + ch_variant_consequences_sv + ) + ch_versions = ch_versions.mix(ANN_CSQ_PLI_SV.out.versions) + + RANK_VARIANTS_SV ( + ANN_CSQ_PLI_SV.out.vcf_ann, + ch_pedfile, + ch_reduced_penetrance, + ch_score_config_sv + ) + ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) + } + } - RANK_VARIANTS_SV ( - ANN_CSQ_PLI_SV.out.vcf_ann, - ch_pedfile, - ch_reduced_penetrance, - ch_score_config_sv +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CALL AND ANNOTATE MOBILE ELEMENTS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + + if (!params.skip_me_calling || params.analysis_type.equals("wes")) { + CALL_MOBILE_ELEMENTS( + ch_mapped.genome_bam_bai, + ch_genome_fasta, + ch_genome_fai, + ch_me_references, + ch_case_info, + params.genome ) - ch_versions = ch_versions.mix(RANK_VARIANTS_SV.out.versions) + ch_versions = ch_versions.mix(CALL_MOBILE_ELEMENTS.out.versions) - } + if (!params.skip_me_annotation) { + ANNOTATE_MOBILE_ELEMENTS( + CALL_MOBILE_ELEMENTS.out.vcf, + ch_me_svdb_resources, + ch_genome_fasta, + ch_genome_dictionary, + ch_vep_cache, + params.genome, + params.vep_cache_version, + ch_vep_extra_files + ) + ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) + GENERATE_CLINICAL_SET_ME( + ANNOTATE_MOBILE_ELEMENTS.out.vcf, + ch_hgnc_ids + ) + ch_versions = ch_versions.mix( GENERATE_CLINICAL_SET_ME.out.versions ) + ANN_CSQ_PLI_ME( + GENERATE_CLINICAL_SET_ME.out.vcf, + ch_variant_consequences_sv + ) + ch_versions = ch_versions.mix( ANN_CSQ_PLI_ME.out.versions ) + + } + } +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SMNCOPYNUMBERCALLER +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ - // STEP 1.7: SMNCOPYNUMBERCALLER RENAME_BAM_FOR_SMNCALLER(ch_mapped.genome_marked_bam, "bam").output .collect{it} .toList() @@ -640,7 +712,11 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(RENAME_BAI_FOR_SMNCALLER.out.versions) ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) - // ped correspondence, sex check, ancestry check +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PEDDY +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ if (!params.skip_peddy) { PEDDY ( CALL_SNV.out.genome_vcf.join(CALL_SNV.out.genome_tabix, failOnMismatch:true, failOnDuplicate:true), @@ -649,7 +725,11 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(PEDDY.out.versions.first()) } - // Generate CGH files from sequencing data, turned off by default +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Generate CGH files from sequencing data +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ if ( !params.skip_vcf2cytosure && params.analysis_type != "wes" ) { GENERATE_CYTOSURE_FILES ( ch_sv_annotate.vcf_ann, @@ -661,7 +741,11 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(GENERATE_CYTOSURE_FILES.out.versions) } - // GENS +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + GENS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ if ( !params.skip_gens && params.analysis_type != "wes" ) { GENS ( ch_mapped.genome_bam_bai, @@ -678,48 +762,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(GENS.out.versions) } - if (!params.skip_me_calling) { - CALL_MOBILE_ELEMENTS( - ch_mapped.genome_bam_bai, - ch_genome_fasta, - ch_genome_fai, - ch_me_references, - ch_case_info, - params.genome - ) - ch_versions = ch_versions.mix(CALL_MOBILE_ELEMENTS.out.versions) - - if (!params.skip_me_annotation) { - ANNOTATE_MOBILE_ELEMENTS( - CALL_MOBILE_ELEMENTS.out.vcf, - ch_me_svdb_resources, - ch_genome_fasta, - ch_genome_dictionary, - ch_vep_cache, - params.genome, - params.vep_cache_version, - ch_vep_extra_files - ) - ch_versions = ch_versions.mix(ANNOTATE_MOBILE_ELEMENTS.out.versions) - - GENERATE_CLINICAL_SET_ME( - ANNOTATE_MOBILE_ELEMENTS.out.vcf, - ch_hgnc_ids - ) - ch_versions = ch_versions.mix( GENERATE_CLINICAL_SET_ME.out.versions ) - - ANN_CSQ_PLI_ME( - GENERATE_CLINICAL_SET_ME.out.vcf, - ch_variant_consequences_sv - ) - ch_versions = ch_versions.mix( ANN_CSQ_PLI_ME.out.versions ) - - } - } +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + VARIANT EVALUATION WITH RTGTOOLS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ - // - // VARIANT EVALUATION - // if (params.run_rtgvcfeval) { VARIANT_EVALUATION ( CALL_SNV.out.genome_vcf_tabix, @@ -730,9 +778,12 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(VARIANT_EVALUATION.out.versions) } - // - // Collate and save software versions - // +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + COLLECT SOFTWARE VERSIONS & MultiQC +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", From ee2a11d46c0f2987aa5cf7fa0ae1272801c194cd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:03:05 +0200 Subject: [PATCH 1783/1921] fix indents --- workflows/raredisease.nf | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 26c56682..fd2d759b 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -459,10 +459,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_SNV.out.versions) - // - // ANNOTATE GENOME SNVs - // - + // + // ANNOTATE GENOME SNVs + // if (!params.skip_snv_annotation) { ANNOTATE_GENOME_SNVS ( @@ -506,10 +505,9 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(RANK_VARIANTS_SNV.out.versions) } - // - // ANNOTATE MT SNVs - // - + // + // ANNOTATE MT SNVs + // if (!params.skip_mt_annotation && (params.run_mt_for_wes || params.analysis_type.equals("wgs"))) { ANNOTATE_MT_SNVS ( From 62206aed4105e7c839e793dc05bf4f7178699295 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:09:34 +0200 Subject: [PATCH 1784/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e998348..b30c3e33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` -- `readcount_intervals` parameter is now manadatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) +- `readcount_intervals` parameter is now mandatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) ### `Fixed` From d2e1aa71850817c080930966bf7556b0f91b787d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 22 Jun 2024 10:35:39 +0200 Subject: [PATCH 1785/1921] wes updates --- .../local/call_structural_variants.nf | 35 ++++++---- workflows/raredisease.nf | 65 +++++++++---------- 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 76f40af5..f85a1750 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -38,10 +38,17 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set{ manta_vcf } - CALL_SV_TIDDIT (ch_genome_bam_bai, ch_genome_fasta, ch_bwa_index, ch_case_info) - .vcf - .collect{it[1]} - .set { tiddit_vcf } + if (params.analysis_type.equals("wgs")) { + CALL_SV_TIDDIT (ch_genome_bam_bai, ch_genome_fasta, ch_bwa_index, ch_case_info) + .vcf + .collect{it[1]} + .set { tiddit_vcf } + + CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) + .vcf + .collect{it[1]} + .set { cnvnator_vcf } + } if (!params.skip_germlinecnvcaller) { CALL_SV_GERMLINECNVCALLER (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) @@ -52,11 +59,6 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) } - CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) - .vcf - .collect{it[1]} - .set { cnvnator_vcf } - if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) @@ -64,16 +66,25 @@ workflow CALL_STRUCTURAL_VARIANTS { //merge if (params.skip_germlinecnvcaller) { + if (params.analysis_type.equals("wgs")) { + tiddit_vcf + .combine(manta_vcf) + .combine(cnvnator_vcf) + .toList() + .set { vcf_list } + } else { + vcf_list = manta_vcf + } + } else if (params.analysis_type.equals("wgs")){ tiddit_vcf .combine(manta_vcf) + .combine(gcnvcaller_vcf) .combine(cnvnator_vcf) .toList() .set { vcf_list } } else { - tiddit_vcf - .combine(manta_vcf) + manta_vcf .combine(gcnvcaller_vcf) - .combine(cnvnator_vcf) .toList() .set { vcf_list } } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index be4bda04..8bce9e54 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -439,17 +439,15 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if (!params.skip_repeat_analysis) { - if ( params.analysis_type.equals("wgs") ) { - CALL_REPEAT_EXPANSIONS ( - ch_mapped.genome_bam_bai, - ch_variant_catalog, - ch_case_info, - ch_genome_fasta, - ch_genome_fai - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) - } + if (!params.skip_repeat_analysis && params.analysis_type.equals("wgs") ) { + CALL_REPEAT_EXPANSIONS ( + ch_mapped.genome_bam_bai, + ch_variant_catalog, + ch_case_info, + ch_genome_fasta, + ch_genome_fai + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) } /* @@ -643,7 +641,7 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if (!params.skip_me_calling || params.analysis_type.equals("wes")) { + if (!params.skip_me_calling && params.analysis_type.equals("wgs")) { CALL_MOBILE_ELEMENTS( ch_mapped.genome_bam_bai, ch_genome_fasta, @@ -688,28 +686,29 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - RENAME_BAM_FOR_SMNCALLER(ch_mapped.genome_marked_bam, "bam").output - .collect{it} - .toList() - .set { ch_bam_list } - - RENAME_BAI_FOR_SMNCALLER(ch_mapped.genome_marked_bai, "bam.bai").output - .collect{it} - .toList() - .set { ch_bai_list } + if ( params.analysis_type.equals("wgs") ) { + RENAME_BAM_FOR_SMNCALLER(ch_mapped.genome_marked_bam, "bam").output + .collect{it} + .toList() + .set { ch_bam_list } - ch_case_info - .combine(ch_bam_list) - .combine(ch_bai_list) - .set { ch_bams_bais } + RENAME_BAI_FOR_SMNCALLER(ch_mapped.genome_marked_bai, "bam.bai").output + .collect{it} + .toList() + .set { ch_bai_list } - SMNCOPYNUMBERCALLER ( - ch_bams_bais - ) - ch_versions = ch_versions.mix(RENAME_BAM_FOR_SMNCALLER.out.versions) - ch_versions = ch_versions.mix(RENAME_BAI_FOR_SMNCALLER.out.versions) - ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) + ch_case_info + .combine(ch_bam_list) + .combine(ch_bai_list) + .set { ch_bams_bais } + SMNCOPYNUMBERCALLER ( + ch_bams_bais + ) + ch_versions = ch_versions.mix(RENAME_BAM_FOR_SMNCALLER.out.versions) + ch_versions = ch_versions.mix(RENAME_BAI_FOR_SMNCALLER.out.versions) + ch_versions = ch_versions.mix(SMNCOPYNUMBERCALLER.out.versions) + } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PEDDY @@ -728,7 +727,7 @@ workflow RAREDISEASE { Generate CGH files from sequencing data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if ( !params.skip_vcf2cytosure && params.analysis_type != "wes" ) { + if ( !params.skip_vcf2cytosure && params.analysis_type.equals("wgs") ) { GENERATE_CYTOSURE_FILES ( ch_sv_annotate.vcf_ann, ch_sv_annotate.tbi, @@ -744,7 +743,7 @@ workflow RAREDISEASE { GENS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if ( !params.skip_gens && params.analysis_type != "wes" ) { + if ( !params.skip_gens && params.analysis_type.equals("wgs") ) { GENS ( ch_mapped.genome_bam_bai, CALL_SNV.out.genome_gvcf, From 4def4823f28cd1e1f98d5a25f48995e1e109d214 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:24:12 +0200 Subject: [PATCH 1786/1921] review suggestions --- docs/usage.md | 46 +++++++++++++++++++++++--------------------- nextflow_schema.json | 2 +- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 996d0e6a..a742d128 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -215,14 +215,16 @@ The mandatory and optional parameters for each category are tabulated below. ##### 6. Copy number variant calling -| Mandatory | Optional | -| ------------------------------ | ------------------------------- | -| ploidy_model1 | readcount_intervals3 | -| gcnvcaller_model1,2 | | +| Mandatory | Optional | +| --------------------------------- | -------- | +| ploidy_model1,4 | | +| gcnvcaller_model1,2,4 | | +| readcount_intervals3,4 | | 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 '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).
    +4 All these files can be generated using the germlinecnvcaller tool option in nf-core/createpanelrefs.
    ##### 7. SNV annotation & Ranking diff --git a/nextflow_schema.json b/nextflow_schema.json index 8f1b9df8..edd444a1 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -281,7 +281,7 @@ "fa_icon": "fas fa-file", "description": "Interval list file containing the intervals over which read counts are tabulated for CNV calling", "format": "file-path", - "help_text": "Generated by GATK4 preprocessintervals." + "help_text": "Generated by GATK4 preprocessintervals It needs to be the same as the intervals used to generate the ploidy and cnv models." }, "reduced_penetrance": { "type": "string", From 1ffcaa12e7a4b0330866460f17256936a0972727 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:27:51 +0200 Subject: [PATCH 1787/1921] review suggestions --- docs/usage.md | 46 +++++++++++++++++++++++--------------------- nextflow_schema.json | 2 +- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 996d0e6a..a742d128 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -215,14 +215,16 @@ The mandatory and optional parameters for each category are tabulated below. ##### 6. Copy number variant calling -| Mandatory | Optional | -| ------------------------------ | ------------------------------- | -| ploidy_model1 | readcount_intervals3 | -| gcnvcaller_model1,2 | | +| Mandatory | Optional | +| --------------------------------- | -------- | +| ploidy_model1,4 | | +| gcnvcaller_model1,2,4 | | +| readcount_intervals3,4 | | 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 '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).
    +4 All these files can be generated using the germlinecnvcaller tool option in nf-core/createpanelrefs.
    ##### 7. SNV annotation & Ranking diff --git a/nextflow_schema.json b/nextflow_schema.json index 7004ba9e..41cea99c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -281,7 +281,7 @@ "fa_icon": "fas fa-file", "description": "Interval list file containing the intervals over which read counts are tabulated for CNV calling", "format": "file-path", - "help_text": "Generated by GATK4 preprocessintervals." + "help_text": "Generated by GATK4 preprocessintervals. It needs to be the same as the intervals used to generate the ploidy and cnv models." }, "reduced_penetrance": { "type": "string", From ca4cdad1422ec206802b43d0c0a5ed331df4c44c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 10:37:25 +0200 Subject: [PATCH 1788/1921] prettier --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index a742d128..66d0b357 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From db743049cb5b5199c9ee355bbbed2fc4e0fa1bbe Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 11:10:35 +0200 Subject: [PATCH 1789/1921] update changelog --- CHANGELOG.md | 3 +++ workflows/raredisease.nf | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b30c3e33..755501b6 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` +- Two new parameters `skip_snv_calling` and `skip_repeat_analysis` to skip snv calling and repeat analysis respectively [#571](https://github.com/nf-core/raredisease/pull/571) - Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#570](https://github.com/nf-core/raredisease/pull/570) ### `Changed` @@ -24,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | ------------- | --------------------- | | | mbuffer_mem | | | samtools_sort_threads | +| | skip_repeat_analysis | +| | skip_snv_calling | ## 2.1.0 - Obelix [2024-05-29] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index fd2d759b..ca0b2514 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -23,7 +23,6 @@ def mandatoryParams = [ "intervals_wgs", "intervals_y", "platform", - "variant_catalog", "variant_caller" ] def missingParamsCount = 0 @@ -32,6 +31,14 @@ if (params.run_rtgvcfeval) { mandatoryParams += ["rtg_truthvcfs"] } +if (!params.skip_repeat_analysis) { + mandatoryParams += ["variant_catalog"] +} + +if (!params.skip_snv_calling) { + mandatoryParams += ["genome"] +} + if (!params.skip_snv_annotation) { mandatoryParams += ["genome", "vcfanno_resources", "vcfanno_toml", "vep_cache", "vep_cache_version", "gnomad_af", "score_config_snv", "variant_consequences_snv"] From 07ff9d326524cce122a96a5c1e677d03768472f1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:02:49 +0200 Subject: [PATCH 1790/1921] review suggestions --- workflows/raredisease.nf | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ca0b2514..9b8e132e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -422,19 +422,18 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if (!params.skip_repeat_analysis) { - if ( params.analysis_type.equals("wgs") ) { - CALL_REPEAT_EXPANSIONS ( - ch_mapped.genome_bam_bai, - ch_variant_catalog, - ch_case_info, - ch_genome_fasta, - ch_genome_fai - ) - ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) - } + if (!params.skip_repeat_analysis && params.analysis_type.equals("wgs") ) { + CALL_REPEAT_EXPANSIONS ( + ch_mapped.genome_bam_bai, + ch_variant_catalog, + ch_case_info, + ch_genome_fasta, + ch_genome_fai + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) } + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CALL AND ANNOTATE NUCLEAR AND MITOCHONDRIAL SNVs From 90fad322ea3eaacfe179d04962c2bc6e0d9df172 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:29:53 +0200 Subject: [PATCH 1791/1921] fix logic --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 9d37808b..ab2883d5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -649,7 +649,7 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if (!params.skip_me_calling || params.analysis_type.equals("wes")) { + if (!params.skip_me_calling && params.analysis_type.equals("wgs")) { CALL_MOBILE_ELEMENTS( ch_mapped.genome_bam_bai, ch_genome_fasta, From f1ab55d2d33ffc4e1bce24a4c74a83d2b5fcc28d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:31:32 +0200 Subject: [PATCH 1792/1921] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 755501b6..e0742170 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` +- A new parameter `skip_sv_calling` to skip sv calling workflow [#572](https://github.com/nf-core/raredisease/pull/572) - Two new parameters `skip_snv_calling` and `skip_repeat_analysis` to skip snv calling and repeat analysis respectively [#571](https://github.com/nf-core/raredisease/pull/571) - Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#570](https://github.com/nf-core/raredisease/pull/570) @@ -27,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | samtools_sort_threads | | | skip_repeat_analysis | | | skip_snv_calling | +| | skip_sv_calling | ## 2.1.0 - Obelix [2024-05-29] From 31e8f2edf47f7f087acb53ce45da6fe14438d4d9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:54:14 +0200 Subject: [PATCH 1793/1921] fix error --- workflows/raredisease.nf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ab2883d5..691d65b7 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -324,6 +324,7 @@ workflow RAREDISEASE { ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) } else { ch_svcaller_priority = Channel.value(["manta"]) + } } else { if (params.analysis_type.equals("wgs")) { ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller", "cnvnator"]) @@ -604,9 +605,9 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) - // - // ANNOTATE STRUCTURAL VARIANTS - // + // + // ANNOTATE STRUCTURAL VARIANTS + // if (!params.skip_sv_annotation) { ANNOTATE_STRUCTURAL_VARIANTS ( CALL_STRUCTURAL_VARIANTS.out.vcf, From 66f4e486ac15413b31e95bc7508ea09fafdc7e21 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:28:39 +0200 Subject: [PATCH 1794/1921] update call sv workflow --- subworkflows/local/call_structural_variants.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index f85a1750..e462e9d9 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -73,7 +73,9 @@ workflow CALL_STRUCTURAL_VARIANTS { .toList() .set { vcf_list } } else { - vcf_list = manta_vcf + manta_vcf + .toList() + .set { vcf_list } } } else if (params.analysis_type.equals("wgs")){ tiddit_vcf From 8e13411e2c89f4ac688e527ebb2e4f45747055c6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:32:46 +0200 Subject: [PATCH 1795/1921] fix error --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index a742d128..66d0b357 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From 0ccf23901676065e78f93d95945ee21a0dcfc405 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:43:09 +0200 Subject: [PATCH 1796/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0742170..196c5852 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` - `readcount_intervals` parameter is now mandatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) +- Turn off CNVnator, TIDDIT, SMNCopyNumberCaller, Gens, and Vcf2cytosure for targeted analysis [#573](https://github.com/nf-core/raredisease/pull/573) ### `Fixed` From 4d74bafd3ae83ce5a9849876c657a7f390bb21b5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:39:19 +0200 Subject: [PATCH 1797/1921] remove skip_eklipse --- .github/workflows/download_pipeline.yml | 8 -------- CHANGELOG.md | 2 ++ conf/test.config | 1 - conf/test_one_sample.config | 1 - nextflow.config | 1 - nextflow_schema.json | 5 ----- .../local/utils_nfcore_raredisease_pipeline/main.nf | 4 ++-- subworkflows/local/variant_calling/call_sv_MT.nf | 12 +++++------- 8 files changed, 9 insertions(+), 25 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index f24cc9ff..42badad9 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -69,11 +69,3 @@ jobs: - name: Inspect download run: tree ./${{ env.REPOTITLE_LOWERCASE }} - - - name: Run the downloaded pipeline (stub) - id: stub_run_pipeline - continue-on-error: true - env: - NXF_SINGULARITY_CACHEDIR: ./ - NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results diff --git a/CHANGELOG.md b/CHANGELOG.md index 196c5852..7a4687e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Remove several skip parameters that had been included in the pipeline to avoid failed CI tests [#574](https://github.com/nf-core/raredisease/pull/574) - `readcount_intervals` parameter is now mandatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) - Turn off CNVnator, TIDDIT, SMNCopyNumberCaller, Gens, and Vcf2cytosure for targeted analysis [#573](https://github.com/nf-core/raredisease/pull/573) @@ -30,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | skip_repeat_analysis | | | skip_snv_calling | | | skip_sv_calling | +| skip_eklipse | | ## 2.1.0 - Obelix [2024-05-29] diff --git a/conf/test.config b/conf/test.config index 85a2e404..7250fef2 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,7 +24,6 @@ params { mito_name = 'MT' // analysis params - skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 4f641aac..c2ec91f8 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -24,7 +24,6 @@ params { mito_name = 'MT' // analysis params - skip_eklipse = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI diff --git a/nextflow.config b/nextflow.config index 9ab21daa..4a155608 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,7 +27,6 @@ params { run_mt_for_wes = false run_rtgvcfeval = false save_mapped_as_cram = false - skip_eklipse = false skip_fastp = false skip_fastqc = false skip_gens = true diff --git a/nextflow_schema.json b/nextflow_schema.json index b0ef5f13..3c2213e7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -533,11 +533,6 @@ "description": "Specifies whether or not to skip CNV calling using GATK's GermlineCNVCaller", "fa_icon": "fas fa-toggle-on" }, - "skip_eklipse": { - "type": "boolean", - "description": "Specifies whether or not to skip eKLIPse.", - "fa_icon": "fas fa-toggle-on" - }, "skip_peddy": { "type": "boolean", "description": "Specifies whether or not to skip peddy.", diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 54ee0a08..0374459f 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -229,7 +229,7 @@ def toolCitationText() { "TIDDIT (Eisfeldt et al., 2017),", "Manta (Chen et al., 2016),", "GLnexus (Yun et al., 2021),", - params.skip_eklipse ? "" : "eKLIPse (Goudenge et al., 2019),", + "eKLIPse (Goudenge et al., 2019),", ] repeat_call_text = [ "ExpansionHunter (Dolzhenko et al., 2019),", @@ -338,7 +338,7 @@ def toolBibliographyText() { "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", "
  • Chen, X., Schulz-Trieglaff, O., Shaw, R., Barnes, B., Schlesinger, F., Källberg, M., Cox, A. J., Kruglyak, S., & Saunders, C. T. (2016). Manta: Rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics, 32(8), 1220–1222. https://doi.org/10.1093/bioinformatics/btv710
  • ", "
  • Yun, T., Li, H., Chang, P.-C., Lin, M. F., Carroll, A., & McLean, C. Y. (2021). Accurate, scalable cohort variant calls using DeepVariant and GLnexus. Bioinformatics, 36(24), 5582–5589. https://doi.org/10.1093/bioinformatics/btaa1081
  • ", - params.skip_eklipse ? "" : "
  • Goudenège, D., Bris, C., Hoffmann, V., Desquiret-Dumas, V., Jardel, C., Rucheton, B., Bannwarth, S., Paquis-Flucklinger, V., Lebre, A. S., Colin, E., Amati-Bonneau, P., Bonneau, D., Reynier, P., Lenaers, G., & Procaccio, V. (2019). eKLIPse: A sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genetics in Medicine, 21(6), 1407–1416. https://doi.org/10.1038/s41436-018-0350-8
  • ", + "
  • Goudenège, D., Bris, C., Hoffmann, V., Desquiret-Dumas, V., Jardel, C., Rucheton, B., Bannwarth, S., Paquis-Flucklinger, V., Lebre, A. S., Colin, E., Amati-Bonneau, P., Bonneau, D., Reynier, P., Lenaers, G., & Procaccio, V. (2019). eKLIPse: A sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genetics in Medicine, 21(6), 1407–1416. https://doi.org/10.1038/s41436-018-0350-8
  • ", ] repeat_call_text = [ "
  • Dolzhenko, E., Deshpande, V., Schlesinger, F., Krusche, P., Petrovski, R., Chen, S., Emig-Agius, D., Gross, A., Narzisi, G., Bowman, B., Scheffler, K., van Vugt, J. J. F. A., French, C., Sanchis-Juan, A., Ibáñez, K., Tucci, A., Lajoie, B. R., Veldink, J. H., Raymond, F. L., … Eberle, M. A. (2019). ExpansionHunter: A sequence-graph-based tool to analyze variation in short tandem repeat regions. Bioinformatics, 35(22), 4754–4756. https://doi.org/10.1093/bioinformatics/btz431
  • ", diff --git a/subworkflows/local/variant_calling/call_sv_MT.nf b/subworkflows/local/variant_calling/call_sv_MT.nf index 7ce39b42..74d82d8e 100644 --- a/subworkflows/local/variant_calling/call_sv_MT.nf +++ b/subworkflows/local/variant_calling/call_sv_MT.nf @@ -16,13 +16,11 @@ workflow CALL_SV_MT { ch_eklipse_genes = Channel.empty() ch_eklipse_circos = Channel.empty() - if (!params.skip_eklipse){ - EKLIPSE(ch_bam_bai,[]) - ch_eklipse_del = EKLIPSE.out.deletions - ch_eklipse_genes = EKLIPSE.out.genes - ch_eklipse_circos = EKLIPSE.out.circos - ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) - } + EKLIPSE(ch_bam_bai,[]) + ch_eklipse_del = EKLIPSE.out.deletions + ch_eklipse_genes = EKLIPSE.out.genes + ch_eklipse_circos = EKLIPSE.out.circos + ch_versions = ch_versions.mix(EKLIPSE.out.versions.first()) MT_DELETION(ch_bam_bai, ch_fasta) From a58d5ef3e50b8bb363ff3147786fbba374129786 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:51:27 +0200 Subject: [PATCH 1798/1921] remove skip_haplocheck --- CHANGELOG.md | 17 +++++++++-------- conf/test.config | 1 - conf/test_one_sample.config | 1 - nextflow.config | 1 - nextflow_schema.json | 5 ----- .../utils_nfcore_raredisease_pipeline/main.nf | 4 ++-- .../local/variant_calling/call_snv_MT.nf | 10 ++++------ 7 files changed, 15 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a4687e8..88ba11c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,14 +24,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Parameters -| Old parameter | New parameter | -| ------------- | --------------------- | -| | mbuffer_mem | -| | samtools_sort_threads | -| | skip_repeat_analysis | -| | skip_snv_calling | -| | skip_sv_calling | -| skip_eklipse | | +| Old parameter | New parameter | +| --------------- | --------------------- | +| | mbuffer_mem | +| | samtools_sort_threads | +| | skip_repeat_analysis | +| | skip_snv_calling | +| | skip_sv_calling | +| skip_eklipse | | +| skip_haplocheck | | ## 2.1.0 - Obelix [2024-05-29] diff --git a/conf/test.config b/conf/test.config index 7250fef2..48848f04 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,7 +26,6 @@ params { // analysis params skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true - skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index c2ec91f8..66a9adc6 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -26,7 +26,6 @@ params { // analysis params skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true - skip_haplocheck = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI diff --git a/nextflow.config b/nextflow.config index 4a155608..74d622ac 100644 --- a/nextflow.config +++ b/nextflow.config @@ -31,7 +31,6 @@ params { skip_fastqc = false skip_gens = true skip_germlinecnvcaller = false - skip_haplocheck = false skip_peddy = false skip_me_calling = false skip_me_annotation = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 3c2213e7..7e2ff0f4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -518,11 +518,6 @@ "description": "Specifies whether or not to skip trimming with fastp.", "fa_icon": "fas fa-toggle-on" }, - "skip_haplocheck": { - "type": "boolean", - "description": "Specifies whether or not to skip haplocheck.", - "fa_icon": "fas fa-toggle-on" - }, "skip_gens": { "type": "boolean", "description": "Specifies whether or not to skip gens preprocessing subworkflow.", diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 0374459f..6bd3aaa6 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -224,7 +224,7 @@ def toolCitationText() { variant_call_text = [ params.variant_caller.equals("deepvariant") ? "DeepVariant (Poplin et al., 2018)," : "", params.variant_caller.equals("sentieon") ? "Sentieon DNAscope (Freed et al., 2022)," : "", - params.skip_haplocheck ? "" : "Haplocheck (Weissensteiner et al., 2021),", + "Haplocheck (Weissensteiner et al., 2021),", "CNVnator (Abyzov et al., 2011),", "TIDDIT (Eisfeldt et al., 2017),", "Manta (Chen et al., 2016),", @@ -333,7 +333,7 @@ def toolBibliographyText() { variant_call_text = [ params.variant_caller.equals("deepvariant") ? "
  • Poplin, R., Chang, P.-C., Alexander, D., Schwartz, S., Colthurst, T., Ku, A., Newburger, D., Dijamco, J., Nguyen, N., Afshar, P. T., Gross, S. S., Dorfman, L., McLean, C. Y., & DePristo, M. A. (2018). A universal SNP and small-indel variant caller using deep neural networks. Nature Biotechnology, 36(10), 983–987. https://doi.org/10.1038/nbt.4235
  • " : "", params.variant_caller.equals("sentieon") ? "
  • Freed, D., Pan, R., Chen, H., Li, Z., Hu, J., & Aldana, R. (2022). DNAscope: High accuracy small variant calling using machine learning [Preprint]. Bioinformatics. https://doi.org/10.1101/2022.05.20.492556
  • " : "", - params.skip_haplocheck ? "" : "
  • Weissensteiner, H., Forer, L., Fendt, L., Kheirkhah, A., Salas, A., Kronenberg, F., & Schoenherr, S. (2021). Contamination detection in sequencing studies using the mitochondrial phylogeny. Genome Research, 31(2), 309–316. https://doi.org/10.1101/gr.256545.119
  • ", + "
  • Weissensteiner, H., Forer, L., Fendt, L., Kheirkhah, A., Salas, A., Kronenberg, F., & Schoenherr, S. (2021). Contamination detection in sequencing studies using the mitochondrial phylogeny. Genome Research, 31(2), 309–316. https://doi.org/10.1101/gr.256545.119
  • ", "
  • Abyzov, A., Urban, A. E., Snyder, M., & Gerstein, M. (2011). CNVnator: An approach to discover, genotype, and characterize typical and atypical CNVs from family and population genome sequencing. Genome Research, 21(6), 974–984. https://doi.org/10.1101/gr.114876.110
  • ", "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", "
  • Chen, X., Schulz-Trieglaff, O., Shaw, R., Barnes, B., Schlesinger, F., Källberg, M., Cox, A. J., Kruglyak, S., & Saunders, C. T. (2016). Manta: Rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics, 32(8), 1220–1222. https://doi.org/10.1093/bioinformatics/btv710
  • ", diff --git a/subworkflows/local/variant_calling/call_snv_MT.nf b/subworkflows/local/variant_calling/call_snv_MT.nf index b0a2fbae..17135d33 100644 --- a/subworkflows/local/variant_calling/call_snv_MT.nf +++ b/subworkflows/local/variant_calling/call_snv_MT.nf @@ -23,12 +23,10 @@ workflow CALL_SNV_MT { GATK4_MUTECT2_MT (ch_bam_bai_int, ch_fasta, ch_fai, ch_dict, [], [], [],[]) - if (!params.skip_haplocheck) { - HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf).set { ch_haplocheck } - ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) - ch_haplocheck_txt = HAPLOCHECK_MT.out.txt - ch_haplocheck_html = HAPLOCHECK_MT.out.html - } + HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf).set { ch_haplocheck } + ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) + ch_haplocheck_txt = HAPLOCHECK_MT.out.txt + ch_haplocheck_html = HAPLOCHECK_MT.out.html // Filter Mutect2 calls ch_mutect_vcf = GATK4_MUTECT2_MT.out.vcf.join(GATK4_MUTECT2_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) From cd583e4806dec50fad012ffe0bb3678f55210ded Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:01:00 +0200 Subject: [PATCH 1799/1921] remove skip_qualimap --- CHANGELOG.md | 1 + conf/modules/qc_bam.config | 6 ++---- conf/test.config | 1 - conf/test_one_sample.config | 1 - nextflow.config | 1 - nextflow_schema.json | 5 ----- subworkflows/local/qc_bam.nf | 6 ++---- 7 files changed, 5 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88ba11c2..f3416a3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | skip_sv_calling | | skip_eklipse | | | skip_haplocheck | | +| skip_qualimap | | ## 2.1.0 - Obelix [2024-05-29] diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 29cd3900..a2a17364 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -35,10 +35,8 @@ process { ext.prefix = { "${meta.id}_hsmetrics" } } - if (!params.skip_qualimap) { - withName: '.*QC_BAM:QUALIMAP_BAMQC' { - ext.prefix = { "${meta.id}_qualimap" } - } + withName: '.*QC_BAM:QUALIMAP_BAMQC' { + ext.prefix = { "${meta.id}_qualimap" } } withName: '.*QC_BAM:TIDDIT_COV' { diff --git a/conf/test.config b/conf/test.config index 48848f04..29ac1bd9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -26,7 +26,6 @@ params { // analysis params skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true - skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI skip_peddy = true diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 66a9adc6..ef4a1503 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -26,7 +26,6 @@ params { // analysis params skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true - skip_qualimap = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI skip_peddy = true diff --git a/nextflow.config b/nextflow.config index 74d622ac..f02888a1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -35,7 +35,6 @@ params { skip_me_calling = false skip_me_annotation = false skip_mt_annotation = false - skip_qualimap = false skip_repeat_analysis = false skip_snv_annotation = false skip_snv_calling = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 7e2ff0f4..c8cfe3f7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -533,11 +533,6 @@ "description": "Specifies whether or not to skip peddy.", "fa_icon": "fas fa-toggle-on" }, - "skip_qualimap": { - "type": "boolean", - "description": "Specifies whether or not to skip Qualimap.", - "fa_icon": "fas fa-toggle-on" - }, "skip_me_calling": { "type": "boolean", "description": "Specifies whether or not to skip calling mobile elements, and the subsequent annotation step.", diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 26c4fa75..2b08eebb 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -45,10 +45,8 @@ workflow QC_BAM { PICARD_COLLECTHSMETRICS (ch_hsmetrics_in, ch_genome_fasta, ch_genome_fai, [[],[]]) - if (!params.skip_qualimap) { - ch_qualimap = QUALIMAP_BAMQC (ch_bam, []).results - ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) - } + ch_qualimap = QUALIMAP_BAMQC (ch_bam, []).results + ch_versions = ch_versions.mix(QUALIMAP_BAMQC.out.versions.first()) TIDDIT_COV (ch_bam, [[],[]]) // 2nd pos. arg is req. only for cram input From 38edf8a5dc23dc89fbe67375e418d559e4c0658d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:03:56 +0200 Subject: [PATCH 1800/1921] remove skip_fastqc --- CHANGELOG.md | 1 + conf/test.config | 1 - conf/test_one_sample.config | 1 - nextflow.config | 1 - nextflow_schema.json | 5 ----- .../local/utils_nfcore_raredisease_pipeline/main.nf | 4 ++-- workflows/raredisease.nf | 10 +++------- 7 files changed, 6 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3416a3c..81d98c46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | skip_snv_calling | | | skip_sv_calling | | skip_eklipse | | +| skip_fastqc | | | skip_haplocheck | | | skip_qualimap | | diff --git a/conf/test.config b/conf/test.config index 29ac1bd9..439d4875 100644 --- a/conf/test.config +++ b/conf/test.config @@ -24,7 +24,6 @@ params { mito_name = 'MT' // analysis params - skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index ef4a1503..fc9b24cc 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -24,7 +24,6 @@ params { mito_name = 'MT' // analysis params - skip_fastqc = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip tool on Github CI skip_germlinecnvcaller = true skip_mt_annotation = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip annotation on Github CI skip_mt_subsample = System.getenv("GITHUB_ACTIONS").equals(null) ? false : true // skip subsample on Github CI diff --git a/nextflow.config b/nextflow.config index f02888a1..4e3ed9a0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -28,7 +28,6 @@ params { run_rtgvcfeval = false save_mapped_as_cram = false skip_fastp = false - skip_fastqc = false skip_gens = true skip_germlinecnvcaller = false skip_peddy = false diff --git a/nextflow_schema.json b/nextflow_schema.json index c8cfe3f7..222f123a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -508,11 +508,6 @@ "description": "Specifies whether to generate and publish alignment files as cram instead of bam", "fa_icon": "fas fa-toggle-on" }, - "skip_fastqc": { - "type": "boolean", - "description": "Specifies whether or not to skip FASTQC.", - "fa_icon": "fas fa-toggle-on" - }, "skip_fastp": { "type": "boolean", "description": "Specifies whether or not to skip trimming with fastp.", diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index 6bd3aaa6..c8dd5528 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -278,7 +278,7 @@ def toolCitationText() { "RetroSeq (Keane et al., 2013),", ] preprocessing_text = [ - params.skip_fastqc ? "" : "FastQC (Andrews 2010),", + "FastQC (Andrews 2010),", params.skip_fastp ? "" : "Fastp (Chen, 2023),", ] other_citation_text = [ @@ -389,7 +389,7 @@ def toolBibliographyText() { "
  • Keane, T. M., Wong, K., & Adams, D. J. (2013). RetroSeq: Transposable element discovery from next-generation sequencing data. Bioinformatics, 29(3), 389–390. https://doi.org/10.1093/bioinformatics/bts697
  • ", ] preprocessing_text = [ - params.skip_fastqc ? "" : "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
  • ", + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
  • ", params.skip_fastp ? "" : "
  • Chen, S. (2023). Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta, 2(2), e107. https://doi.org/10.1002/imt2.107
  • ", ] other_citation_text = [ diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8dff53ab..01212cc2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -370,10 +370,8 @@ workflow RAREDISEASE { // // Input QC // - if (!params.skip_fastqc) { - FASTQC (ch_samplesheet) - ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - } + FASTQC (ch_samplesheet) + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // // Create chromosome bed and intervals for splitting and gathering operations @@ -830,9 +828,7 @@ workflow RAREDISEASE { ) ) - if (!params.skip_fastqc) { - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - } + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.multiple_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.hs_metrics.map{it[1]}.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(QC_BAM.out.qualimap_results.map{it[1]}.collect().ifEmpty([])) From 391f8c9934fa5edc9425157d0d1c6b77709a1580 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 24 Jun 2024 18:07:34 +0200 Subject: [PATCH 1801/1921] add skip_smncopynumbercaller --- CHANGELOG.md | 26 ++++++++++++++------------ nextflow.config | 1 + nextflow_schema.json | 5 +++++ workflows/raredisease.nf | 5 ++++- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81d98c46..94d73091 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- A new parameter `skip_smncopynumbercaller` to skip smncopynumbercaller module[#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_sv_calling` to skip sv calling workflow [#572](https://github.com/nf-core/raredisease/pull/572) - Two new parameters `skip_snv_calling` and `skip_repeat_analysis` to skip snv calling and repeat analysis respectively [#571](https://github.com/nf-core/raredisease/pull/571) - Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#570](https://github.com/nf-core/raredisease/pull/570) ### `Changed` -- Remove several skip parameters that had been included in the pipeline to avoid failed CI tests [#574](https://github.com/nf-core/raredisease/pull/574) +- Remove several skip parameters that had been included in the pipeline to avoid failed CI tests (see parameters table below) [#574](https://github.com/nf-core/raredisease/pull/574) - `readcount_intervals` parameter is now mandatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) - Turn off CNVnator, TIDDIT, SMNCopyNumberCaller, Gens, and Vcf2cytosure for targeted analysis [#573](https://github.com/nf-core/raredisease/pull/573) @@ -24,17 +25,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Parameters -| Old parameter | New parameter | -| --------------- | --------------------- | -| | mbuffer_mem | -| | samtools_sort_threads | -| | skip_repeat_analysis | -| | skip_snv_calling | -| | skip_sv_calling | -| skip_eklipse | | -| skip_fastqc | | -| skip_haplocheck | | -| skip_qualimap | | +| Old parameter | New parameter | +| --------------- | ------------------------ | +| | mbuffer_mem | +| | samtools_sort_threads | +| | skip_repeat_analysis | +| | skip_snv_calling | +| | skip_sv_calling | +| skip_eklipse | | +| skip_fastqc | | +| skip_haplocheck | | +| skip_qualimap | | +| | skip_smncopynumbercaller | ## 2.1.0 - Obelix [2024-05-29] diff --git a/nextflow.config b/nextflow.config index 4e3ed9a0..1ec0f584 100644 --- a/nextflow.config +++ b/nextflow.config @@ -35,6 +35,7 @@ params { skip_me_annotation = false skip_mt_annotation = false skip_repeat_analysis = false + skip_smncopynumbercaller = false skip_snv_annotation = false skip_snv_calling = false skip_sv_annotation = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 222f123a..46e4bdbf 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -553,6 +553,11 @@ "description": "Specifies whether or not to skip calling and annotation of repeat expansions.", "fa_icon": "fas fa-toggle-on" }, + "skip_smncopynumbercaller": { + "type": "boolean", + "description": "Specifies whether or not to skip smncopynumbercaller.", + "fa_icon": "fas fa-toggle-on" + }, "skip_snv_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotate SNV subworkflow.", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 01212cc2..eb349c78 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -90,6 +90,9 @@ if (!params.skip_gens) { mandatoryParams += ["gens_gnomad_pos", "gens_interval_list", "gens_pon_female", "gens_pon_male"] } +if (!params.skip_smncopynumbercaller) { + mandatoryParams += ["genome"] +} for (param in mandatoryParams.unique()) { if (params[param] == null) { println("params." + param + " not set.") @@ -693,7 +696,7 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if ( params.analysis_type.equals("wgs") ) { + if ( params.analysis_type.equals("wgs") && !params.skip_smncopynumbercaller ) { RENAME_BAM_FOR_SMNCALLER(ch_mapped.genome_marked_bam, "bam").output .collect{it} .toList() From 937250d5f4cd16b247d0eb19e18d68965c4c6023 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Jun 2024 12:47:18 +0200 Subject: [PATCH 1802/1921] update module --- modules.json | 2 +- modules/nf-core/peddy/main.nf | 7 +- modules/nf-core/peddy/tests/main.nf.test | 35 +++++++ modules/nf-core/peddy/tests/main.nf.test.snap | 93 +++++++++++++++++++ modules/nf-core/peddy/tests/tags.yml | 2 + 5 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 modules/nf-core/peddy/tests/main.nf.test create mode 100644 modules/nf-core/peddy/tests/main.nf.test.snap create mode 100644 modules/nf-core/peddy/tests/tags.yml diff --git a/modules.json b/modules.json index e400f22d..96664577 100644 --- a/modules.json +++ b/modules.json @@ -304,7 +304,7 @@ }, "peddy": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "bb8c1e039f2c1d603e8a93665d0386d5c6ac8e5e", "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { diff --git a/modules/nf-core/peddy/main.nf b/modules/nf-core/peddy/main.nf index b6be28c6..0e533ec3 100644 --- a/modules/nf-core/peddy/main.nf +++ b/modules/nf-core/peddy/main.nf @@ -35,7 +35,7 @@ process PEDDY { cat <<-END_VERSIONS > versions.yml "${task.process}": - peddy: \$( peddy --version 2>&1 | sed 's/peddy, version //' ) + peddy: \$( peddy --version 2>&1 | tail -1 | sed 's/peddy, version //' ) END_VERSIONS """ @@ -49,6 +49,9 @@ process PEDDY { touch ${prefix}.peddy.ped touch ${prefix}.html - touch versions.yml + cat <<-END_VERSIONS > versions.yml + "${task.process}": + peddy: \$( peddy --version 2>&1 | tail -1 | sed 's/peddy, version //' ) + END_VERSIONS """ } diff --git a/modules/nf-core/peddy/tests/main.nf.test b/modules/nf-core/peddy/tests/main.nf.test new file mode 100644 index 00000000..892da6cf --- /dev/null +++ b/modules/nf-core/peddy/tests/main.nf.test @@ -0,0 +1,35 @@ +nextflow_process { + + name "Test Process PEDDY" + script "modules/nf-core/peddy/main.nf" + process "PEDDY" + + tag "modules" + tag "modules_nfcore" + tag "peddy" + + test("test - peddy - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.test_data['homo_sapiens']['genome']['justhusky_minimal_vcf_gz'], checkIfExists: true), + file(params.test_data['homo_sapiens']['genome']['justhusky_minimal_vcf_gz_tbi'], checkIfExists: true) + ] + input[1] = file(params.test_data['homo_sapiens']['genome']['justhusky_ped'], checkIfExists: true) + """ + } + } + + then { + assert process.success + assert snapshot(process.out).match() + } + + } + +} diff --git a/modules/nf-core/peddy/tests/main.nf.test.snap b/modules/nf-core/peddy/tests/main.nf.test.snap new file mode 100644 index 00000000..5de593f1 --- /dev/null +++ b/modules/nf-core/peddy/tests/main.nf.test.snap @@ -0,0 +1,93 @@ +{ + "test - peddy - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.vs.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.het_check.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ped_check.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sex_check.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.peddy.ped:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + + ], + "4": [ + "versions.yml:md5,d3587e67aded68bcf24c47542efe012f" + ], + "csv": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.het_check.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.ped_check.csv:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.sex_check.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.vs.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "ped": [ + [ + { + "id": "test", + "single_end": false + }, + "test.peddy.ped:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "png": [ + + ], + "versions": [ + "versions.yml:md5,d3587e67aded68bcf24c47542efe012f" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-25T09:28:05.418978589" + } +} \ No newline at end of file diff --git a/modules/nf-core/peddy/tests/tags.yml b/modules/nf-core/peddy/tests/tags.yml new file mode 100644 index 00000000..d8324a74 --- /dev/null +++ b/modules/nf-core/peddy/tests/tags.yml @@ -0,0 +1,2 @@ +mosdepth: + - "modules/nf-core/peddy/**" From 81010339b347febabde8f1fc29ba1c8708037c26 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:48:58 +0200 Subject: [PATCH 1803/1921] add skip for repeat annotation --- CHANGELOG.md | 5 ++- .../modules/annotate_repeat_expansions.config | 41 +++++++++++++++++++ conf/modules/call_repeat_expansions.config | 21 ---------- nextflow.config | 4 +- nextflow_schema.json | 9 +++- .../local/annotate_repeat_expansions.nf | 34 +++++++++++++++ subworkflows/local/call_repeat_expansions.nf | 20 +-------- workflows/raredisease.nf | 17 +++++++- 8 files changed, 106 insertions(+), 45 deletions(-) create mode 100644 conf/modules/annotate_repeat_expansions.config create mode 100644 subworkflows/local/annotate_repeat_expansions.nf diff --git a/CHANGELOG.md b/CHANGELOG.md index 94d73091..5ab10277 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` +- Two new parameters `skip_repeat_annotation` and `skip_repeat_calling` to skip calling and annotation of repeat expansions [#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_smncopynumbercaller` to skip smncopynumbercaller module[#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_sv_calling` to skip sv calling workflow [#572](https://github.com/nf-core/raredisease/pull/572) - Two new parameters `skip_snv_calling` and `skip_repeat_analysis` to skip snv calling and repeat analysis respectively [#571](https://github.com/nf-core/raredisease/pull/571) @@ -14,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Removed `skip_repeat_analysis` added in #571 [#574](https://github.com/nf-core/raredisease/pull/574) - Remove several skip parameters that had been included in the pipeline to avoid failed CI tests (see parameters table below) [#574](https://github.com/nf-core/raredisease/pull/574) - `readcount_intervals` parameter is now mandatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) - Turn off CNVnator, TIDDIT, SMNCopyNumberCaller, Gens, and Vcf2cytosure for targeted analysis [#573](https://github.com/nf-core/raredisease/pull/573) @@ -29,7 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | --------------- | ------------------------ | | | mbuffer_mem | | | samtools_sort_threads | -| | skip_repeat_analysis | +| | skip_repeat_calling | | | skip_snv_calling | | | skip_sv_calling | | skip_eklipse | | @@ -37,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | skip_haplocheck | | | skip_qualimap | | | | skip_smncopynumbercaller | +| | skip_repeat_annotation | ## 2.1.0 - Obelix [2024-05-29] diff --git a/conf/modules/annotate_repeat_expansions.config b/conf/modules/annotate_repeat_expansions.config new file mode 100644 index 00000000..c1d934ea --- /dev/null +++ b/conf/modules/annotate_repeat_expansions.config @@ -0,0 +1,41 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 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 +---------------------------------------------------------------------------------------- +*/ + +// +// Repeat expansion calling options +// + +process { + + withName: '.*ANNOTATE_REPEAT_EXPANSIONS:STRANGER' { + ext.prefix = { "${meta.id}_stranger" } + } + + withName: '.*ANNOTATE_REPEAT_EXPANSIONS:COMPRESS_STRANGER' { + ext.prefix = { "${meta.id}_repeat_expansion_stranger" } + ext.args = '--output-type z' + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } + + withName: '.*ANNOTATE_REPEAT_EXPANSIONS:INDEX_STRANGER' { + publishDir = [ + path: { "${params.outdir}/repeat_expansions" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, + ] + } +} diff --git a/conf/modules/call_repeat_expansions.config b/conf/modules/call_repeat_expansions.config index a3c140a0..fd6738ae 100644 --- a/conf/modules/call_repeat_expansions.config +++ b/conf/modules/call_repeat_expansions.config @@ -58,25 +58,4 @@ process { ext.args = {"--notag"} } - withName: '.*CALL_REPEAT_EXPANSIONS:STRANGER' { - ext.prefix = { "${meta.id}_stranger" } - } - - withName: '.*CALL_REPEAT_EXPANSIONS:COMPRESS_STRANGER' { - ext.prefix = { "${meta.id}_repeat_expansion_stranger" } - ext.args = '--output-type z' - publishDir = [ - path: { "${params.outdir}/repeat_expansions" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } - - withName: '.*CALL_REPEAT_EXPANSIONS:INDEX_STRANGER' { - publishDir = [ - path: { "${params.outdir}/repeat_expansions" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, - ] - } } diff --git a/nextflow.config b/nextflow.config index 1ec0f584..0c76f47e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -34,7 +34,8 @@ params { skip_me_calling = false skip_me_annotation = false skip_mt_annotation = false - skip_repeat_analysis = false + skip_repeat_annotation = false + skip_repeat_calling = false skip_smncopynumbercaller = false skip_snv_annotation = false skip_snv_calling = false @@ -316,6 +317,7 @@ includeConfig 'conf/modules/annotate_consequence_pli.config' includeConfig 'conf/modules/annotate_genome_snvs.config' includeConfig 'conf/modules/annotate_mt_snvs.config' includeConfig 'conf/modules/annotate_structural_variants.config' +includeConfig 'conf/modules/annotate_repeat_expansions.config' includeConfig 'conf/modules/call_repeat_expansions.config' includeConfig 'conf/modules/call_snv.config' includeConfig 'conf/modules/call_structural_variants.config' diff --git a/nextflow_schema.json b/nextflow_schema.json index 46e4bdbf..e8164492 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -548,9 +548,14 @@ "description": "Specifies whether or not to subsample mt alignment.", "fa_icon": "fas fa-toggle-on" }, - "skip_repeat_analysis": { + "skip_repeat_annotation": { "type": "boolean", - "description": "Specifies whether or not to skip calling and annotation of repeat expansions.", + "description": "Specifies whether or not to skip annotation of repeat expansions.", + "fa_icon": "fas fa-toggle-on" + }, + "skip_repeat_calling": { + "type": "boolean", + "description": "Specifies whether or not to skip calling of repeat expansions.", "fa_icon": "fas fa-toggle-on" }, "skip_smncopynumbercaller": { diff --git a/subworkflows/local/annotate_repeat_expansions.nf b/subworkflows/local/annotate_repeat_expansions.nf new file mode 100644 index 00000000..5f8b8ea0 --- /dev/null +++ b/subworkflows/local/annotate_repeat_expansions.nf @@ -0,0 +1,34 @@ +// +// Annotate repeat expansions +// + +include { BCFTOOLS_VIEW as COMPRESS_STRANGER } from '../../modules/nf-core/bcftools/view/main' +include { STRANGER } from '../../modules/nf-core/stranger/main' +include { TABIX_TABIX as INDEX_STRANGER } from '../../modules/nf-core/tabix/tabix/main' + +workflow ANNOTATE_REPEAT_EXPANSIONS { + take: + ch_variant_catalog // channel: [mandatory] [ path(variant_catalog.json) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + + main: + ch_versions = Channel.empty() + + // Annotate, compress and index + STRANGER ( ch_vcf, ch_variant_catalog ) + COMPRESS_STRANGER ( + STRANGER.out.vcf.map{ meta, vcf -> [meta, vcf, [] ]}, + [], [], [] + ) + INDEX_STRANGER ( COMPRESS_STRANGER.out.vcf ) + + ch_vcf_idx = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi, failOnMismatch:true, failOnDuplicate:true) + + ch_versions = ch_versions.mix(STRANGER.out.versions.first()) + ch_versions = ch_versions.mix(COMPRESS_STRANGER.out.versions.first()) + ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) + +emit: + vcf = ch_vcf_idx // channel: [ val(meta), path(vcf), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 130b7a5b..c45a92ff 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -4,14 +4,11 @@ include { BCFTOOLS_NORM as SPLIT_MULTIALLELICS_EXP } from '../../modules/nf-core/bcftools/norm/main' include { BCFTOOLS_REHEADER as BCFTOOLS_REHEADER_EXP } from '../../modules/nf-core/bcftools/reheader/main' -include { BCFTOOLS_VIEW as COMPRESS_STRANGER } from '../../modules/nf-core/bcftools/view/main' include { EXPANSIONHUNTER } from '../../modules/nf-core/expansionhunter/main' include { PICARD_RENAMESAMPLEINVCF as RENAMESAMPLE_EXP } from '../../modules/nf-core/picard/renamesampleinvcf/main' -include { STRANGER } from '../../modules/nf-core/stranger/main' include { SAMTOOLS_SORT } from '../../modules/nf-core/samtools/sort/main' include { SAMTOOLS_INDEX } from '../../modules/nf-core/samtools/index/main' include { SVDB_MERGE as SVDB_MERGE_REPEATS } from '../../modules/nf-core/svdb/merge/main' -include { TABIX_TABIX as INDEX_STRANGER } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_EXP_RENAME } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_REPEAT_EXPANSIONS { @@ -63,29 +60,16 @@ workflow CALL_REPEAT_EXPANSIONS { SVDB_MERGE_REPEATS ( ch_svdb_merge_input, [] ) - // Annotate, compress and index - STRANGER ( SVDB_MERGE_REPEATS.out.vcf, ch_variant_catalog ) - COMPRESS_STRANGER ( - STRANGER.out.vcf.map{ meta, vcf -> [meta, vcf, [] ]}, - [], [], [] - ) - INDEX_STRANGER ( COMPRESS_STRANGER.out.vcf ) - - ch_vcf_idx = COMPRESS_STRANGER.out.vcf.join(INDEX_STRANGER.out.tbi, failOnMismatch:true, failOnDuplicate:true) - ch_versions = ch_versions.mix(EXPANSIONHUNTER.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_REHEADER_EXP.out.versions.first()) ch_versions = ch_versions.mix(RENAMESAMPLE_EXP.out.versions.first() ) ch_versions = ch_versions.mix(TABIX_EXP_RENAME.out.versions.first()) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_EXP.out.versions.first()) ch_versions = ch_versions.mix(SVDB_MERGE_REPEATS.out.versions.first()) - ch_versions = ch_versions.mix(STRANGER.out.versions.first()) - ch_versions = ch_versions.mix(COMPRESS_STRANGER.out.versions.first()) - ch_versions = ch_versions.mix(INDEX_STRANGER.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_INDEX.out.versions.first()) emit: - vcf = ch_vcf_idx // channel: [ val(meta), path(vcf), path(tbi) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = SVDB_MERGE_REPEATS.out.vcf // channel: [ val(meta), path(vcf) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eb349c78..da7dd562 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -31,7 +31,11 @@ if (params.run_rtgvcfeval) { mandatoryParams += ["rtg_truthvcfs"] } -if (!params.skip_repeat_analysis) { +if (!params.skip_repeat_calling) { + mandatoryParams += ["variant_catalog"] +} + +if (!params.skip_repeat_annotation) { mandatoryParams += ["variant_catalog"] } @@ -141,6 +145,7 @@ include { ANNOTATE_CSQ_PLI as ANN_CSQ_PLI_SV } from '../subworkf include { ANNOTATE_GENOME_SNVS } from '../subworkflows/local/annotate_genome_snvs' include { ANNOTATE_MOBILE_ELEMENTS } from '../subworkflows/local/annotate_mobile_elements' include { ANNOTATE_MT_SNVS } from '../subworkflows/local/annotate_mt_snvs' +include { ANNOTATE_REPEAT_EXPANSIONS } from '../subworkflows/local/annotate_repeat_expansions' include { ANNOTATE_STRUCTURAL_VARIANTS } from '../subworkflows/local/annotate_structural_variants' include { CALL_MOBILE_ELEMENTS } from '../subworkflows/local/call_mobile_elements' include { CALL_REPEAT_EXPANSIONS } from '../subworkflows/local/call_repeat_expansions' @@ -448,7 +453,7 @@ workflow RAREDISEASE { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if (!params.skip_repeat_analysis && params.analysis_type.equals("wgs") ) { + if (!params.skip_repeat_calling && params.analysis_type.equals("wgs") ) { CALL_REPEAT_EXPANSIONS ( ch_mapped.genome_bam_bai, ch_variant_catalog, @@ -457,6 +462,14 @@ workflow RAREDISEASE { ch_genome_fai ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + + if (!params.skip_repeat_annotation) { + ANNOTATE_REPEAT_EXPANSIONS ( + ch_variant_catalog, + CALL_REPEAT_EXPANSIONS.out.vcf + ) + ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) + } } From 877a37b0d2518828aa689ccee0f71470911d48b3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jun 2024 16:19:06 +0200 Subject: [PATCH 1804/1921] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ab10277..05c3d729 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Stub crashes due to peddy reported in [#566](https://github.com/nf-core/raredisease/issues/566) [#576](https://github.com/nf-core/raredisease/pull/576] - Docker manifest error from gnu-wget container [#570](https://github.com/nf-core/raredisease/pull/570) - Citations for bwameme [#563](https://github.com/nf-core/raredisease/pull/563) From 65b35cf5e5335936d2d2c388d318d03796e635a1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jun 2024 22:02:17 +0200 Subject: [PATCH 1805/1921] update citations --- .../utils_nfcore_raredisease_pipeline/main.nf | 153 ++++++++++-------- 1 file changed, 88 insertions(+), 65 deletions(-) diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index c8dd5528..dd3e1812 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -203,10 +203,11 @@ def genomeExistsError() { def toolCitationText() { def align_text = [] - def variant_call_text = [] - def repeat_call_text = [] + def repeats_text = [] def snv_annotation_text = [] + def snv_calls_text = [] def sv_annotation_text = [] + def sv_calls_text = [] def mt_annotation_text = [] def qc_bam_text = [] def me_calls_text = [] @@ -215,55 +216,67 @@ def toolCitationText() { def other_citation_text = [] align_text = [ - params.aligner.equals("bwa") ? "BWA (Li, 2013)," :"", - params.aligner.equals("bwamem2") ? "BWA-MEM2 (Vasimuddin et al., 2019)," : "", - params.aligner.equals("bwameme") ? "BWA-MEME (Jung et al., 2022)," : "", + params.aligner.equals("bwa") ? "BWA (Li, 2013)," :"", + params.aligner.equals("bwamem2") ? "BWA-MEM2 (Vasimuddin et al., 2019)," : "", + params.aligner.equals("bwameme") ? "BWA-MEME (Jung et al., 2022)," : "", params.aligner.equals("sentieon") ? "Sentieon DNASeq (Kendig et al., 2019)," : "", - params.aligner.equals("sentieon") ? "Sentieon Tools (Freed et al., 2017)," : "" + params.aligner.equals("sentieon") ? "Sentieon Tools (Freed et al., 2017)," : "" ] - variant_call_text = [ - params.variant_caller.equals("deepvariant") ? "DeepVariant (Poplin et al., 2018)," : "", - params.variant_caller.equals("sentieon") ? "Sentieon DNAscope (Freed et al., 2022)," : "", - "Haplocheck (Weissensteiner et al., 2021),", - "CNVnator (Abyzov et al., 2011),", - "TIDDIT (Eisfeldt et al., 2017),", - "Manta (Chen et al., 2016),", - "GLnexus (Yun et al., 2021),", - "eKLIPse (Goudenge et al., 2019),", - ] - repeat_call_text = [ - "ExpansionHunter (Dolzhenko et al., 2019),", - "stranger (Nilsson & Magnusson, 2021)," + repeats_text = [ + (!params.skip_repeat_calling && params.analysis_type.equals("wgs")) ? "ExpansionHunter (Dolzhenko et al., 2019)," : "", + (!params.skip_repeat_annotation && params.analysis_type.equals("wgs")) ? "stranger (Nilsson & Magnusson, 2021)," : "" ] if (!params.skip_snv_annotation) { snv_annotation_text = [ "CADD (Rentzsch et al., 2019, 2021),", "Vcfanno (Pedersen et al., 2016),", "VEP (McLaren et al., 2016),", - "Genmod (Magnusson et al., 2018),", + "Genmod (Magnusson et al., 2018)," + ] + } + if (!params.skip_snv_calling) { + snv_calls_text = [ + params.variant_caller.equals("deepvariant") ? "DeepVariant (Poplin et al., 2018)," : "", + params.variant_caller.equals("sentieon") ? "Sentieon DNAscope (Freed et al., 2022)," : "", + params.run_mt_for_wes ? "Haplocheck (Weissensteiner et al., 2021)," : "", + "GLnexus (Yun et al., 2021)," ] } if (!params.skip_sv_annotation) { sv_annotation_text = [ "SVDB (Eisfeldt et al., 2017),", "VEP (McLaren et al., 2016),", - "Genmod (Magnusson et al., 2018),", + "Genmod (Magnusson et al., 2018)," + ] + } + if (!params.skip_sv_calling) { + sv_calls_text = [ + params.analysis_type.equals("wgs") ? "CNVnator (Abyzov et al., 2011)," : "", + params.analysis_type.equals("wgs") ? "TIDDIT (Eisfeldt et al., 2017)," : "", + "Manta (Chen et al., 2016),", + params.analysis_type.equals("wgs") ? "eKLIPse (Goudenge et al., 2019)," : "" ] } - if (!params.skip_mt_annotation) { + if (!params.skip_mt_annotation && (params.analysis_type.equals("wgs") || params.run_mt_for_wes)) { mt_annotation_text = [ "CADD (Rentzsch et al., 2019, 2021),", "VEP (McLaren et al., 2016),", "Vcfanno (Pedersen et al., 2016),", "Hmtnote (Preste et al., 2019),", "HaploGrep2 (Weissensteiner et al., 2016),", - "Genmod (Magnusson et al., 2018),", + "Genmod (Magnusson et al., 2018)," ] } - if (!params.skip_me_annotation) { + if (!params.skip_me_annotation && params.analysis_type.equals("wgs")) { me_annotation_text = [ "VEP (McLaren et al., 2016),", + "SVDB (Eisfeldt et al., 2017)," + ] + } + if (!params.skip_me_calling && params.analysis_type.equals("wgs")) { + me_calls_text = [ "SVDB (Eisfeldt et al., 2017),", + "RetroSeq (Keane et al., 2013)," ] } qc_bam_text = [ @@ -271,33 +284,30 @@ def toolCitationText() { "Qualimap (Okonechnikov et al., 2016),", "TIDDIT (Eisfeldt et al., 2017),", "UCSC Bigwig and Bigbed (Kent et al., 2010),", - "Mosdepth (Pedersen & Quinlan, 2018),", - ] - me_calls_text = [ - "SVDB (Eisfeldt et al., 2017),", - "RetroSeq (Keane et al., 2013),", + "Mosdepth (Pedersen & Quinlan, 2018)," ] preprocessing_text = [ "FastQC (Andrews 2010),", - params.skip_fastp ? "" : "Fastp (Chen, 2023),", + params.skip_fastp ? "" : "Fastp (Chen, 2023)," ] other_citation_text = [ "BCFtools (Danecek et al., 2021),", "GATK (McKenna et al., 2010),", "MultiQC (Ewels et al. 2016),", - params.skip_peddy ? "" : "Peddy (Pedersen & Quinlan, 2017),", + params.skip_peddy ? "" : "Peddy (Pedersen & Quinlan, 2017),", params.run_rtgvcfeval ? "RTG Tools (Cleary et al., 2015)," : "", "SAMtools (Li et al., 2009),", - "SMNCopyNumberCaller (Chen et al., 2020),", + (!params.skip_smncopynumbercaller && params.analysis_type.equals("wgs")) ? "SMNCopyNumberCaller (Chen et al., 2020)," : "", "Tabix (Li, 2011)", "." ] def concat_text = align_text + - variant_call_text + - repeat_call_text + + repeats_text + snv_annotation_text + + snv_calls_text + sv_annotation_text + + sv_calls_text + mt_annotation_text + qc_bam_text + me_calls_text + @@ -312,10 +322,11 @@ def toolCitationText() { def toolBibliographyText() { def align_text = [] - def variant_call_text = [] - def repeat_call_text = [] + def repeats_text = [] def snv_annotation_text = [] + def snv_calls_text = [] def sv_annotation_text = [] + def sv_calls_text = [] def mt_annotation_text = [] def qc_bam_text = [] def me_calls_text = [] @@ -330,19 +341,9 @@ def toolBibliographyText() { params.aligner.equals("sentieon") ? "
  • Kendig, K. I., Baheti, S., Bockol, M. A., Drucker, T. M., Hart, S. N., Heldenbrand, J. R., Hernaez, M., Hudson, M. E., Kalmbach, M. T., Klee, E. W., Mattson, N. R., Ross, C. A., Taschuk, M., Wieben, E. D., Wiepert, M., Wildman, D. E., & Mainzer, L. S. (2019). Sentieon DNASeq Variant Calling Workflow Demonstrates Strong Computational Performance and Accuracy. Frontiers in Genetics, 10, 736. https://doi.org/10.3389/fgene.2019.00736
  • " : "", params.aligner.equals("sentieon") ? "
  • Freed, D., Aldana, R., Weber, J. A., & Edwards, J. S. (2017). The Sentieon Genomics Tools—A fast and accurate solution to variant calling from next-generation sequence data (p. 115717). bioRxiv. https://doi.org/10.1101/115717
  • " : "" ] - variant_call_text = [ - params.variant_caller.equals("deepvariant") ? "
  • Poplin, R., Chang, P.-C., Alexander, D., Schwartz, S., Colthurst, T., Ku, A., Newburger, D., Dijamco, J., Nguyen, N., Afshar, P. T., Gross, S. S., Dorfman, L., McLean, C. Y., & DePristo, M. A. (2018). A universal SNP and small-indel variant caller using deep neural networks. Nature Biotechnology, 36(10), 983–987. https://doi.org/10.1038/nbt.4235
  • " : "", - params.variant_caller.equals("sentieon") ? "
  • Freed, D., Pan, R., Chen, H., Li, Z., Hu, J., & Aldana, R. (2022). DNAscope: High accuracy small variant calling using machine learning [Preprint]. Bioinformatics. https://doi.org/10.1101/2022.05.20.492556
  • " : "", - "
  • Weissensteiner, H., Forer, L., Fendt, L., Kheirkhah, A., Salas, A., Kronenberg, F., & Schoenherr, S. (2021). Contamination detection in sequencing studies using the mitochondrial phylogeny. Genome Research, 31(2), 309–316. https://doi.org/10.1101/gr.256545.119
  • ", - "
  • Abyzov, A., Urban, A. E., Snyder, M., & Gerstein, M. (2011). CNVnator: An approach to discover, genotype, and characterize typical and atypical CNVs from family and population genome sequencing. Genome Research, 21(6), 974–984. https://doi.org/10.1101/gr.114876.110
  • ", - "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", - "
  • Chen, X., Schulz-Trieglaff, O., Shaw, R., Barnes, B., Schlesinger, F., Källberg, M., Cox, A. J., Kruglyak, S., & Saunders, C. T. (2016). Manta: Rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics, 32(8), 1220–1222. https://doi.org/10.1093/bioinformatics/btv710
  • ", - "
  • Yun, T., Li, H., Chang, P.-C., Lin, M. F., Carroll, A., & McLean, C. Y. (2021). Accurate, scalable cohort variant calls using DeepVariant and GLnexus. Bioinformatics, 36(24), 5582–5589. https://doi.org/10.1093/bioinformatics/btaa1081
  • ", - "
  • Goudenège, D., Bris, C., Hoffmann, V., Desquiret-Dumas, V., Jardel, C., Rucheton, B., Bannwarth, S., Paquis-Flucklinger, V., Lebre, A. S., Colin, E., Amati-Bonneau, P., Bonneau, D., Reynier, P., Lenaers, G., & Procaccio, V. (2019). eKLIPse: A sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genetics in Medicine, 21(6), 1407–1416. https://doi.org/10.1038/s41436-018-0350-8
  • ", - ] - repeat_call_text = [ - "
  • Dolzhenko, E., Deshpande, V., Schlesinger, F., Krusche, P., Petrovski, R., Chen, S., Emig-Agius, D., Gross, A., Narzisi, G., Bowman, B., Scheffler, K., van Vugt, J. J. F. A., French, C., Sanchis-Juan, A., Ibáñez, K., Tucci, A., Lajoie, B. R., Veldink, J. H., Raymond, F. L., … Eberle, M. A. (2019). ExpansionHunter: A sequence-graph-based tool to analyze variation in short tandem repeat regions. Bioinformatics, 35(22), 4754–4756. https://doi.org/10.1093/bioinformatics/btz431
  • ", - "
  • Nilsson, D., & Magnusson, M. (2021). Moonso/stranger v0.7.1 (v0.7.1) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.4548873
  • " + repeats_text = [ + (!params.skip_repeat_calling && params.analysis_type.equals("wgs") ) ? "
  • Dolzhenko, E., Deshpande, V., Schlesinger, F., Krusche, P., Petrovski, R., Chen, S., Emig-Agius, D., Gross, A., Narzisi, G., Bowman, B., Scheffler, K., van Vugt, J. J. F. A., French, C., Sanchis-Juan, A., Ibáñez, K., Tucci, A., Lajoie, B. R., Veldink, J. H., Raymond, F. L., … Eberle, M. A. (2019). ExpansionHunter: A sequence-graph-based tool to analyze variation in short tandem repeat regions. Bioinformatics, 35(22), 4754–4756. https://doi.org/10.1093/bioinformatics/btz431
  • " : "", + (!params.skip_repeat_annotation && params.analysis_type.equals("wgs") ) ? "
  • Nilsson, D., & Magnusson, M. (2021). Moonso/stranger v0.7.1 (v0.7.1) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.4548873
  • " : "" ] if (!params.skip_snv_annotation) { snv_annotation_text = [ @@ -350,17 +351,35 @@ def toolBibliographyText() { "
  • Rentzsch, P., Witten, D., Cooper, G. M., Shendure, J., & Kircher, M. (2019). CADD: Predicting the deleteriousness of variants throughout the human genome. Nucleic Acids Research, 47(D1), D886–D894. https://doi.org/10.1093/nar/gky1016
  • ", "
  • Pedersen, B. S., Layer, R. M., & Quinlan, A. R. (2016). Vcfanno: Fast, flexible annotation of genetic variants. Genome Biology, 17(1), 118. https://doi.org/10.1186/s13059-016-0973-5
  • ", "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", - "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • ", + "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • " ] } + if (!params.skip_snv_calling) { + snv_calls_text = [ + params.variant_caller.equals("deepvariant") ? "
  • Poplin, R., Chang, P.-C., Alexander, D., Schwartz, S., Colthurst, T., Ku, A., Newburger, D., Dijamco, J., Nguyen, N., Afshar, P. T., Gross, S. S., Dorfman, L., McLean, C. Y., & DePristo, M. A. (2018). A universal SNP and small-indel variant caller using deep neural networks. Nature Biotechnology, 36(10), 983–987. https://doi.org/10.1038/nbt.4235
  • " : "", + params.variant_caller.equals("sentieon") ? "
  • Freed, D., Pan, R., Chen, H., Li, Z., Hu, J., & Aldana, R. (2022). DNAscope: High accuracy small variant calling using machine learning [Preprint]. Bioinformatics. https://doi.org/10.1101/2022.05.20.492556
  • " : "", + params.run_mt_for_wes ? "
  • Weissensteiner, H., Forer, L., Fendt, L., Kheirkhah, A., Salas, A., Kronenberg, F., & Schoenherr, S. (2021). Contamination detection in sequencing studies using the mitochondrial phylogeny. Genome Research, 31(2), 309–316. https://doi.org/10.1101/gr.256545.119
  • " : "", + "
  • Yun, T., Li, H., Chang, P.-C., Lin, M. F., Carroll, A., & McLean, C. Y. (2021). Accurate, scalable cohort variant calls using DeepVariant and GLnexus. Bioinformatics, 36(24), 5582–5589. https://doi.org/10.1093/bioinformatics/btaa1081
  • " + ] + } + if (!params.skip_sv_annotation) { sv_annotation_text = [ "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", - "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • ", + "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • " ] } - if (!params.skip_mt_annotation) { + if (!params.skip_sv_calling) { + sv_calls_text = [ + params.analysis_type.equals("wgs") ? "
  • Abyzov, A., Urban, A. E., Snyder, M., & Gerstein, M. (2011). CNVnator: An approach to discover, genotype, and characterize typical and atypical CNVs from family and population genome sequencing. Genome Research, 21(6), 974–984. https://doi.org/10.1101/gr.114876.110
  • " : "", + params.analysis_type.equals("wgs") ? "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • " : "", + "
  • Chen, X., Schulz-Trieglaff, O., Shaw, R., Barnes, B., Schlesinger, F., Källberg, M., Cox, A. J., Kruglyak, S., & Saunders, C. T. (2016). Manta: Rapid detection of structural variants and indels for germline and cancer sequencing applications. Bioinformatics, 32(8), 1220–1222. https://doi.org/10.1093/bioinformatics/btv710
  • ", + "
  • Goudenège, D., Bris, C., Hoffmann, V., Desquiret-Dumas, V., Jardel, C., Rucheton, B., Bannwarth, S., Paquis-Flucklinger, V., Lebre, A. S., Colin, E., Amati-Bonneau, P., Bonneau, D., Reynier, P., Lenaers, G., & Procaccio, V. (2019). eKLIPse: A sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genetics in Medicine, 21(6), 1407–1416. https://doi.org/10.1038/s41436-018-0350-8
  • " + ] + } + + if (!params.skip_mt_annotation && (params.analysis_type.equals("wgs") || params.run_mt_for_wes)) { mt_annotation_text = [ "
  • Rentzsch, P., Schubach, M., Shendure, J., & Kircher, M. (2021). CADD-Splice—Improving genome-wide variant effect prediction using deep learning-derived splice scores. Genome Medicine, 13(1), 31. https://doi.org/10.1186/s13073-021-00835-9
  • ", "
  • Rentzsch, P., Witten, D., Cooper, G. M., Shendure, J., & Kircher, M. (2019). CADD: Predicting the deleteriousness of variants throughout the human genome. Nucleic Acids Research, 47(D1), D886–D894. https://doi.org/10.1093/nar/gky1016
  • ", @@ -368,13 +387,19 @@ def toolBibliographyText() { "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", "
  • Preste, R., Clima, R., & Attimonelli, M. (2019). Human mitochondrial variant annotation with HmtNote [Preprint]. Bioinformatics. https://doi.org/10.1101/600619
  • ", "
  • Weissensteiner, H., Pacher, D., Kloss-Brandstätter, A., Forer, L., Specht, G., Bandelt, H.-J., Kronenberg, F., Salas, A., & Schönherr, S. (2016). HaploGrep 2: Mitochondrial haplogroup classification in the era of high-throughput sequencing. Nucleic Acids Research, 44(W1), W58–W63. https://doi.org/10.1093/nar/gkw233
  • ", - "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • ", + "
  • Magnusson, M., Hughes, T., Glabilloy, & Bitdeli Chef. (2018). genmod: Version 3.7.3 (3.7.3) [Computer software]. Zenodo. https://doi.org/10.5281/ZENODO.3841142
  • " ] } - if (!params.skip_me_annotation) { + if (!params.skip_me_annotation && params.analysis_type.equals("wgs")) { me_annotation_text = [ "
  • McLaren, W., Gil, L., Hunt, S. E., Riat, H. S., Ritchie, G. R. S., Thormann, A., Flicek, P., & Cunningham, F. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17(1), 122. https://doi.org/10.1186/s13059-016-0974-4
  • ", + "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • " + ] + } + if (!params.skip_me_calling && params.analysis_type.equals("wgs")) { + me_calls_text = [ "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", + "
  • Keane, T. M., Wong, K., & Adams, D. J. (2013). RetroSeq: Transposable element discovery from next-generation sequencing data. Bioinformatics, 29(3), 389–390. https://doi.org/10.1093/bioinformatics/bts697
  • " ] } qc_bam_text = [ @@ -382,32 +407,30 @@ def toolBibliographyText() { "
  • Okonechnikov, K., Conesa, A., & García-Alcalde, F. (2016). Qualimap 2: Advanced multi-sample quality control for high-throughput sequencing data. Bioinformatics, 32(2), 292–294. https://doi.org/10.1093/bioinformatics/btv566
  • ", "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", "
  • Kent, W. J., Zweig, A. S., Barber, G., Hinrichs, A. S., & Karolchik, D. (2010). BigWig and BigBed: Enabling browsing of large distributed datasets. Bioinformatics, 26(17), 2204–2207. https://doi.org/10.1093/bioinformatics/btq351
  • ", - "
  • Pedersen, B. S., & Quinlan, A. R. (2018). Mosdepth: Quick coverage calculation for genomes and exomes. Bioinformatics, 34(5), 867–868. https://doi.org/10.1093/bioinformatics/btx699
  • ", - ] - me_calls_text = [ - "
  • Eisfeldt, J., Vezzi, F., Olason, P., Nilsson, D., & Lindstrand, A. (2017). TIDDIT, an efficient and comprehensive structural variant caller for massive parallel sequencing data. F1000Research, 6, 664. https://doi.org/10.12688/f1000research.11168.2
  • ", - "
  • Keane, T. M., Wong, K., & Adams, D. J. (2013). RetroSeq: Transposable element discovery from next-generation sequencing data. Bioinformatics, 29(3), 389–390. https://doi.org/10.1093/bioinformatics/bts697
  • ", + "
  • Pedersen, B. S., & Quinlan, A. R. (2018). Mosdepth: Quick coverage calculation for genomes and exomes. Bioinformatics, 34(5), 867–868. https://doi.org/10.1093/bioinformatics/btx699
  • " ] preprocessing_text = [ "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
  • ", - params.skip_fastp ? "" : "
  • Chen, S. (2023). Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta, 2(2), e107. https://doi.org/10.1002/imt2.107
  • ", + params.skip_fastp ? "" : "
  • Chen, S. (2023). Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta, 2(2), e107. https://doi.org/10.1002/imt2.107
  • " ] + other_citation_text = [ "
  • Danecek, P., Bonfield, J. K., Liddle, J., Marshall, J., Ohan, V., Pollard, M. O., Whitwham, A., Keane, T., McCarthy, S. A., Davies, R. M., & Li, H. (2021). Twelve years of SAMtools and BCFtools. GigaScience, 10(2), giab008. https://doi.org/10.1093/gigascience/giab008
  • ", "
  • McKenna, A., Hanna, M., Banks, E., Sivachenko, A., Cibulskis, K., Kernytsky, A., Garimella, K., Altshuler, D., Gabriel, S., Daly, M., & DePristo, M. A. (2010). The Genome Analysis Toolkit: A MapReduce framework for analyzing next-generation DNA sequencing data. Genome Research, 20(9), 1297–1303. https://doi.org/10.1101/gr.107524.110
  • ", "
  • 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. https://doi.org/10.1093/bioinformatics/btw354
  • ", - params.skip_peddy ? "" : "
  • Pedersen, B. S., & Quinlan, A. R. (2017). Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy. The American Journal of Human Genetics, 100(3), 406–413. https://doi.org/10.1016/j.ajhg.2017.01.017
  • ", + params.skip_peddy ? "" : "
  • Pedersen, B. S., & Quinlan, A. R. (2017). Who’s Who? Detecting and Resolving Sample Anomalies in Human DNA Sequencing Studies with Peddy. The American Journal of Human Genetics, 100(3), 406–413. https://doi.org/10.1016/j.ajhg.2017.01.017
  • ", params.run_rtgvcfeval ? "
  • Cleary, J. G., Braithwaite, R., Gaastra, K., Hilbush, B. S., Inglis, S., Irvine, S. A., Jackson, A., Littin, R., Rathod, M., Ware, D., Zook, J. M., Trigg, L., & Vega, F. M. D. L. (2015). Comparing Variant Call Files for Performance Benchmarking of Next-Generation Sequencing Variant Calling Pipelines (p. 023754). bioRxiv. https://doi.org/10.1101/023754
  • " : "", "
  • Li, H., Handsaker, B., Wysoker, A., Fennell, T., Ruan, J., Homer, N., Marth, G., Abecasis, G., Durbin, R., & 1000 Genome Project Data Processing Subgroup. (2009). The Sequence Alignment/Map format and SAMtools. Bioinformatics, 25(16), 2078–2079. https://doi.org/10.1093/bioinformatics/btp352
  • ", - "
  • Chen, X., Sanchis-Juan, A., French, C. E., Connell, A. J., Delon, I., Kingsbury, Z., Chawla, A., Halpern, A. L., Taft, R. J., Bentley, D. R., Butchbach, M. E. R., Raymond, F. L., & Eberle, M. A. (2020). Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genetics in Medicine, 22(5), 945–953. https://doi.org/10.1038/s41436-020-0754-0
  • ", - "
  • Li, H. (2011). Tabix: Fast retrieval of sequence features from generic TAB-delimited files. Bioinformatics, 27(5), 718–719. https://doi.org/10.1093/bioinformatics/btq671
  • ", + (!params.skip_smncopynumbercaller && params.analysis_type.equals("wgs")) ? "
  • Chen, X., Sanchis-Juan, A., French, C. E., Connell, A. J., Delon, I., Kingsbury, Z., Chawla, A., Halpern, A. L., Taft, R. J., Bentley, D. R., Butchbach, M. E. R., Raymond, F. L., & Eberle, M. A. (2020). Spinal muscular atrophy diagnosis and carrier screening from genome sequencing data. Genetics in Medicine, 22(5), 945–953. https://doi.org/10.1038/s41436-020-0754-0
  • " : "", + "
  • Li, H. (2011). Tabix: Fast retrieval of sequence features from generic TAB-delimited files. Bioinformatics, 27(5), 718–719. https://doi.org/10.1093/bioinformatics/btq671
  • " ] def concat_text = align_text + - variant_call_text + - repeat_call_text + + repeats_text + snv_annotation_text + + snv_calls_text + sv_annotation_text + + sv_calls_text + mt_annotation_text + qc_bam_text + me_calls_text + From 7962dfdd82dae4b655b3f1c9e0a60eaf8809e473 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 26 Jun 2024 22:06:56 +0200 Subject: [PATCH 1806/1921] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05c3d729..11960733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Refactored tool citation list [#577](https://github.com/nf-core/raredisease/pull/577) - Removed `skip_repeat_analysis` added in #571 [#574](https://github.com/nf-core/raredisease/pull/574) - Remove several skip parameters that had been included in the pipeline to avoid failed CI tests (see parameters table below) [#574](https://github.com/nf-core/raredisease/pull/574) - `readcount_intervals` parameter is now mandatory for running germlinecnvcaller. [#570](https://github.com/nf-core/raredisease/pull/570) From 3cff43a324dc991de1bdaad8d63d59d647b50c41 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 1 Jul 2024 12:18:21 +0200 Subject: [PATCH 1807/1921] move versions into conditionals --- subworkflows/local/call_structural_variants.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index e462e9d9..65f2f9ff 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -43,11 +43,13 @@ workflow CALL_STRUCTURAL_VARIANTS { .vcf .collect{it[1]} .set { tiddit_vcf } + ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) CALL_SV_CNVNATOR (ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, ch_case_info) .vcf .collect{it[1]} .set { cnvnator_vcf } + ch_versions = ch_versions.mix(CALL_SV_CNVNATOR.out.versions) } if (!params.skip_germlinecnvcaller) { @@ -99,9 +101,7 @@ workflow CALL_STRUCTURAL_VARIANTS { TABIX_TABIX (SVDB_MERGE.out.vcf) - ch_versions = ch_versions.mix(CALL_SV_CNVNATOR.out.versions) 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(TABIX_TABIX.out.versions) ch_versions = ch_versions.mix(SVDB_MERGE.out.versions) From bcc23b2edfad4a92e5a21f0d0b064045af088bc8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 1 Jul 2024 12:27:12 +0200 Subject: [PATCH 1808/1921] CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11960733..baaa303b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Errors due to misplaced version statements [#578](https://github.com/nf-core/raredisease/pull/578) - Stub crashes due to peddy reported in [#566](https://github.com/nf-core/raredisease/issues/566) [#576](https://github.com/nf-core/raredisease/pull/576] - Docker manifest error from gnu-wget container [#570](https://github.com/nf-core/raredisease/pull/570) - Citations for bwameme [#563](https://github.com/nf-core/raredisease/pull/563) From a8dc0aab1356c83398d36d0ef3b2bac28fce1ff6 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 1 Jul 2024 17:33:36 +0200 Subject: [PATCH 1809/1921] make bcftools roh skippable for cases without affected samples --- conf/modules/annotate_genome_snvs.config | 3 ++- docs/output.md | 6 +++--- subworkflows/local/annotate_genome_snvs.nf | 18 ++++++++++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 60bcd259..17a623dd 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -18,6 +18,7 @@ process { withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_ROH' { + ext.when = { meta.probands.size()>0 } ext.args = { "--samples ${meta.probands.unique().first()} --skip-indels " } ext.prefix = { "${meta.id}_roh" } } @@ -31,7 +32,7 @@ process { } withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { - ext.prefix = { "${vcf.simpleName}_vcfanno" } + ext.prefix = { "${meta.prefix}_vcfanno" } } withName: '.*ANNOTATE_GENOME_SNVS:UPD_SITES' { diff --git a/docs/output.md b/docs/output.md index 376acce9..046f26d1 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter_vep](#filter_vep) + - [Filter\_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) @@ -387,8 +387,8 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e Output files - `annotate_snv/genome` - - `_rhocall_vcfanno_filter_.vcf.gz`: file containing bcftools roh, vcfanno, cadd and vep annotations. - - `_rhocall_vcfanno_filter_.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, cadd and vep annotations. + - `__filter_.vcf.gz`: file containing bcftools roh, vcfanno, cadd and vep annotations. + - `__filter_.vcf.gz.tbi`: index of the file containing bcftools roh, vcfanno, cadd and vep annotations.
    diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index e2f10a1e..8d8a5f0d 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -53,11 +53,21 @@ workflow ANNOTATE_GENOME_SNVS { ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) - ZIP_TABIX_ROHCALL.out.gz_tbi - .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} - .set { ch_vcf_in } + ch_vcf + .join(ZIP_TABIX_ROHCALL.out.gz_tbi, remainder: true) + .branch { it -> + noroh: it[3].equals(null) + return [it[0] + [prefix: it[0].id], it[1], it[2]] + roh: !(it[3].equals(null)) + return [it[0] + [prefix: it[0].id + "_rhocall"], it[3], it[4]] + } + .set { ch_for_mix } + + ch_for_mix.noroh.mix(ch_for_mix.roh) + .map { meta, vcf, tbi -> return [meta, vcf, tbi, []] } + .set { ch_vcfanno_in } - VCFANNO (ch_vcf_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) + VCFANNO (ch_vcfanno_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) VCFANNO.out.vcf .map {meta, vcf -> From f87c76ed333bdab31b9536994feff9e0fd5c19c4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:14:01 +0200 Subject: [PATCH 1810/1921] add warning message --- workflows/raredisease.nf | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index da7dd562..ee8d9dbd 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -541,8 +541,17 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SNV.out.versions) + ANN_CSQ_PLI_SNV.out.vcf_ann + .filter { it -> + if (it[0].probands.size()==0) { + log.warn("Skipping nuclear SNV ranking since no affected samples are detected in the case") + } + it[0].probands.size()>0 + } + .set {ch_ranksnv_nuclear_in} + RANK_VARIANTS_SNV ( - ANN_CSQ_PLI_SNV.out.vcf_ann, + ch_ranksnv_nuclear_in, ch_pedfile, ch_reduced_penetrance, ch_score_config_snv @@ -582,8 +591,17 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_MT.out.versions) + ANN_CSQ_PLI_MT.out.vcf_ann + .filter { it -> + if (it[0].probands.size()==0) { + log.warn("Skipping mitochondrial SNV ranking since no affected samples are detected in the case") + } + it[0].probands.size()>0 + } + .set {ch_ranksnv_mt_in} + RANK_VARIANTS_MT ( - ANN_CSQ_PLI_MT.out.vcf_ann, + ch_ranksnv_mt_in, ch_pedfile, ch_reduced_penetrance, ch_score_config_mt @@ -648,8 +666,17 @@ workflow RAREDISEASE { ) ch_versions = ch_versions.mix(ANN_CSQ_PLI_SV.out.versions) + ANN_CSQ_PLI_SV.out.vcf_ann + .filter { it -> + if (it[0].probands.size()==0) { + log.warn("Skipping SV ranking since no affected samples are detected in the case") + } + it[0].probands.size()>0 + } + .set {ch_ranksnv_sv_in} + RANK_VARIANTS_SV ( - ANN_CSQ_PLI_SV.out.vcf_ann, + ch_ranksnv_sv_in, ch_pedfile, ch_reduced_penetrance, ch_score_config_sv From 89f19954bb62848d34ab55aa63c00e092d2969a9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:19:54 +0200 Subject: [PATCH 1811/1921] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11960733..2257b5d2 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` +- Print warning messages if user intends to perform ranking when there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Two new parameters `skip_repeat_annotation` and `skip_repeat_calling` to skip calling and annotation of repeat expansions [#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_smncopynumbercaller` to skip smncopynumbercaller module[#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_sv_calling` to skip sv calling workflow [#572](https://github.com/nf-core/raredisease/pull/572) @@ -15,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Skip ROH calling with bcftools if there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Refactored tool citation list [#577](https://github.com/nf-core/raredisease/pull/577) - Removed `skip_repeat_analysis` added in #571 [#574](https://github.com/nf-core/raredisease/pull/574) - Remove several skip parameters that had been included in the pipeline to avoid failed CI tests (see parameters table below) [#574](https://github.com/nf-core/raredisease/pull/574) From cccad16767b9ee4b06838c52bdf61dfd55f7e520 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:34:36 +0200 Subject: [PATCH 1812/1921] prettier --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 046f26d1..508b115d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter\_vep](#filter_vep) + - [Filter_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) From ae446ecef95637cebcfaf5e0d1633405964bc42b Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Thu, 4 Jul 2024 12:04:46 +0200 Subject: [PATCH 1813/1921] adds channels to meme mt align --- subworkflows/local/align.nf | 8 ++++++-- subworkflows/local/alignment/align_MT.nf | 20 +++++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 2163767c..b2f91d27 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -100,7 +100,9 @@ workflow ALIGN { ch_genome_bwamemeindex, ch_genome_fasta, ch_genome_dictionary, - ch_genome_fai + ch_genome_fai, + val_mbuffer_mem, + val_sort_threads ) ALIGN_MT_SHIFT ( @@ -111,7 +113,9 @@ workflow ALIGN { ch_mtshift_bwamemeindex, ch_mtshift_fasta, ch_mtshift_dictionary, - ch_mtshift_fai + ch_mtshift_fai, + val_mbuffer_mem, + val_sort_threads ) ch_mt_marked_bam = ALIGN_MT.out.marked_bam diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index d2a9581d..14c65526 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -14,14 +14,16 @@ include { SAMTOOLS_SORT as SAMTOOLS_SORT_MT } fr workflow ALIGN_MT { take: - 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_bwamemeindex // channel: [mandatory for bwameme] [ 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_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_bwamemeindex // channel: [mandatory for bwameme] [ 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) ] + val_mbuffer_mem // integer: [mandatory] default: 3072 + val_sort_threads // integer: [mandatory] default: 4 main: ch_versions = Channel.empty() @@ -39,7 +41,7 @@ workflow ALIGN_MT { ch_align = BWA_MEM_MT.out.bam ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) } else if (params.aligner.equals("bwameme")) { - BWAMEME_MEM_MT (ch_fastq, ch_bwamemeindex, ch_fasta, true) + BWAMEME_MEM_MT (ch_fastq, ch_bwamemeindex, ch_fasta, true, val_mbuffer_mem, val_sort_threads) ch_align = BWAMEME_MEM_MT.out.bam ch_versions = ch_versions.mix(BWAMEME_MEM_MT.out.versions.first()) } From 11324e98b20edbb520567e7a934ff5c87a8bcc5c Mon Sep 17 00:00:00 2001 From: Eirini Liampa Date: Thu, 25 Jul 2024 14:49:05 +0200 Subject: [PATCH 1814/1921] fix: added publishDir mode in raredisease.config --- conf/modules/raredisease.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/modules/raredisease.config b/conf/modules/raredisease.config index 4499800d..5298800d 100644 --- a/conf/modules/raredisease.config +++ b/conf/modules/raredisease.config @@ -21,6 +21,7 @@ process { ext.args = '--quiet --dir ./' publishDir = [ path: { "${params.outdir}/fastqc/${meta.id}" }, + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -67,6 +68,7 @@ process { withName: '.*RAREDISEASE:CREATE_PEDIGREE_FILE' { publishDir = [ path: { "${params.outdir}/pedigree" }, + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } From 5f7deeb1ce70c9baa9286fecd2dab280669abe86 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Aug 2024 13:37:44 +0200 Subject: [PATCH 1815/1921] scatter count --- conf/modules/annotate_genome_snvs.config | 13 +-- conf/modules/scatter_genome.config | 2 +- nextflow.config | 1 + nextflow_schema.json | 6 ++ subworkflows/local/annotate_genome_snvs.nf | 102 +++++++++--------- subworkflows/local/annotate_mt_snvs.nf | 6 +- .../local/annotation/annotate_cadd.nf | 6 +- workflows/raredisease.nf | 1 + 8 files changed, 70 insertions(+), 67 deletions(-) diff --git a/conf/modules/annotate_genome_snvs.config b/conf/modules/annotate_genome_snvs.config index 17a623dd..fe8d807f 100644 --- a/conf/modules/annotate_genome_snvs.config +++ b/conf/modules/annotate_genome_snvs.config @@ -31,13 +31,18 @@ process { ext.prefix = { "${input.simpleName}" } } + withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { + ext.prefix = { "${vcf.simpleName}_${intervals.simpleName}" } + } + withName: '.*ANNOTATE_GENOME_SNVS:VCFANNO' { - ext.prefix = { "${meta.prefix}_vcfanno" } + ext.prefix = { "${meta.prefix}_vcfanno_${meta.scatterid}" } } withName: '.*ANNOTATE_GENOME_SNVS:UPD_SITES' { ext.prefix = { "${vcf.simpleName}_upd_sites" } ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} sites"} + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } } withName: '.*ANNOTATE_GENOME_SNVS:UPD_REGIONS' { @@ -74,14 +79,10 @@ process { } withName: '.*ANNOTATE_GENOME_SNVS:BCFTOOLS_VIEW' { - ext.prefix = { "${vcf.simpleName}_filter" } + ext.prefix = { "${meta.prefix}_filter_${meta.scatterid}" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } } - withName: '.*ANNOTATE_GENOME_SNVS:GATK4_SELECTVARIANTS' { - ext.prefix = { "${vcf.simpleName}_${intervals.simpleName}" } - } - withName: '.*ANNOTATE_GENOME_SNVS:ENSEMBLVEP_SNV' { ext.prefix = { "${meta.prefix}_vep_${meta.scatterid}" } ext.args = { [ diff --git a/conf/modules/scatter_genome.config b/conf/modules/scatter_genome.config index b2fe363a..07c3602e 100644 --- a/conf/modules/scatter_genome.config +++ b/conf/modules/scatter_genome.config @@ -21,7 +21,7 @@ process { } withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { - ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } + ext.args = { "--scatter-count ${params.scatter_count}" } ext.when = { !params.skip_snv_annotation } ext.prefix = { "${meta.id}_genome_intervals" } publishDir = [ diff --git a/nextflow.config b/nextflow.config index 0c76f47e..b7857df5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -27,6 +27,7 @@ params { run_mt_for_wes = false run_rtgvcfeval = false save_mapped_as_cram = false + scatter_count = 20 skip_fastp = false skip_gens = true skip_germlinecnvcaller = false diff --git a/nextflow_schema.json b/nextflow_schema.json index e8164492..81ef4683 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -508,6 +508,12 @@ "description": "Specifies whether to generate and publish alignment files as cram instead of bam", "fa_icon": "fas fa-toggle-on" }, + "scatter_count": { + "type": "integer", + "default": 20, + "description": "Number of intervals to split your genome into (used to parallelize annotations)", + "fa_icon": "fas fa-less-than" + }, "skip_fastp": { "type": "boolean", "description": "Specifies whether or not to skip trimming with fastp.", diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 8d8a5f0d..8de4a526 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -55,80 +55,55 @@ workflow ANNOTATE_GENOME_SNVS { ch_vcf .join(ZIP_TABIX_ROHCALL.out.gz_tbi, remainder: true) - .branch { it -> - noroh: it[3].equals(null) - return [it[0] + [prefix: it[0].id], it[1], it[2]] - roh: !(it[3].equals(null)) - return [it[0] + [prefix: it[0].id + "_rhocall"], it[3], it[4]] + .combine(ch_split_intervals) + .map { it -> + if (it[3].equals(null)) { + return [it[0] + [prefix: it[0].id, scatterid:it[4].baseName], it[1], it[2], it[4]] + } else { + return [it[0] + [prefix: it[0].id + "_rhocall", scatterid:it[5].baseName], it[3], it[4], it[5]] + } } - .set { ch_for_mix } + .set { ch_vcf_scatter_in } + + GATK4_SELECTVARIANTS (ch_vcf_scatter_in) - ch_for_mix.noroh.mix(ch_for_mix.roh) + GATK4_SELECTVARIANTS.out.vcf + .join(GATK4_SELECTVARIANTS.out.tbi) .map { meta, vcf, tbi -> return [meta, vcf, tbi, []] } .set { ch_vcfanno_in } VCFANNO (ch_vcfanno_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) - 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) - CHROMOGRAPH_SITES([[],[]], [[],[]], [[],[]], [[],[]], [[],[]], [[],[]], UPD_SITES.out.bed) - CHROMOGRAPH_REGIONS([[],[]], [[],[]], [[],[]], [[],[]], [[],[]], UPD_REGIONS.out.bed, [[],[]]) - ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) - //rhocall_viz - ANNOTATE_RHOCALLVIZ(ZIP_TABIX_VCFANNO.out.gz_tbi, ch_samples, ch_genome_chrsizes) - BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi, [], [], []) // filter on frequencies - TABIX_BCFTOOLS_VIEW (BCFTOOLS_VIEW.out.vcf) - - BCFTOOLS_VIEW.out.vcf - .join(TABIX_BCFTOOLS_VIEW.out.tbi, failOnMismatch:true, failOnDuplicate:true) - .collect() - .combine(ch_split_intervals) - .map { - meta, vcf, tbi, interval -> - return [meta + [scatterid:interval.baseName, prefix: vcf.simpleName], vcf, tbi, interval] - } - .set { ch_vcf_scatter_in } - - GATK4_SELECTVARIANTS (ch_vcf_scatter_in) - // Annotating with CADD if (params.cadd_resources != null) { + TABIX_BCFTOOLS_VIEW (BCFTOOLS_VIEW.out.vcf) + + BCFTOOLS_VIEW.out.vcf + .join(TABIX_BCFTOOLS_VIEW.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .set { ch_cadd_in } + ANNOTATE_CADD ( - GATK4_SELECTVARIANTS.out.vcf, - GATK4_SELECTVARIANTS.out.tbi, + ch_cadd_in, ch_cadd_header, ch_cadd_resources ) ch_cadd_vcf = ANNOTATE_CADD.out.vcf ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) + ch_versions = ch_versions.mix(TABIX_BCFTOOLS_VIEW.out.versions) } // If CADD is run, pick CADD output as input for VEP else pass selectvariants output to VEP. - GATK4_SELECTVARIANTS.out.vcf + BCFTOOLS_VIEW.out.vcf .join(ch_cadd_vcf, remainder: true) // If CADD is not run then the third element in this channel will be `null` .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,cadd.vcf], else [[meta],selvar.vcf,null] selvar: it[2].equals(null) - return [it[0], it[1]] + return [it[0] + [prefix: it[0].prefix + "_filter"], it[1]] cadd: !(it[2].equals(null)) - return [it[0] + [prefix: it[0].prefix + "_cadd"], it[2]] + return [it[0] + [prefix: it[0].prefix + "_filter_cadd"], it[2]] } .set { ch_for_mix } @@ -136,7 +111,6 @@ workflow ANNOTATE_GENOME_SNVS { .map { meta, vcf -> return [meta, vcf, []] } .set { ch_vep_in } - // Annotating with ensembl Vep ENSEMBLVEP_SNV( ch_vep_in, @@ -166,14 +140,37 @@ workflow ANNOTATE_GENOME_SNVS { BCFTOOLS_CONCAT (ch_concat_in) + BCFTOOLS_CONCAT.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, prefix: meta.prefix + "_vcfanno"] + 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) + CHROMOGRAPH_SITES([[],[]], [[],[]], [[],[]], [[],[]], [[],[]], [[],[]], UPD_SITES.out.bed) + CHROMOGRAPH_REGIONS([[],[]], [[],[]], [[],[]], [[],[]], [[],[]], UPD_REGIONS.out.bed, [[],[]]) + + BCFTOOLS_CONCAT.out.vcf .map { meta, vcf -> [meta - meta.subMap('prefix'), vcf] } .set { ch_concat_out } TABIX_BCFTOOLS_CONCAT (ch_concat_out) - ch_vep_ann = ch_concat_out - ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi + ch_vep_ann = ch_concat_out + ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi + ch_vep_ann_index = ch_concat_out.join(TABIX_BCFTOOLS_CONCAT.out.tbi) + //rhocall_viz + ANNOTATE_RHOCALLVIZ(ch_vep_ann_index, ch_samples, ch_genome_chrsizes) ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions) ch_versions = ch_versions.mix(RHOCALL_ANNOTATE.out.versions) @@ -185,13 +182,12 @@ workflow ANNOTATE_GENOME_SNVS { 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) ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions.first()) 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) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) - ch_versions = ch_versions.mix(ANNOTATE_RHOCALLVIZ.out.versions) + //ch_versions = ch_versions.mix(ANNOTATE_RHOCALLVIZ.out.versions) emit: vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 02554461..aab01ef6 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -19,6 +19,7 @@ workflow ANNOTATE_MT_SNVS { ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 @@ -47,7 +48,7 @@ workflow ANNOTATE_MT_SNVS { .map { meta, vcf, tbi -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, []]} .set { ch_in_vcfanno } - VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) + VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) ZIP_TABIX_VCFANNO_MT(VCFANNO_MT.out.vcf) ch_vcfanno_vcf = ZIP_TABIX_VCFANNO_MT.out.gz_tbi.map{meta, vcf, tbi -> return [meta, vcf]} @@ -56,8 +57,7 @@ workflow ANNOTATE_MT_SNVS { // Annotating with CADD if (params.cadd_resources != null) { ANNOTATE_CADD ( - ch_vcfanno_vcf, - ch_vcfanno_tbi, + ZIP_TABIX_VCFANNO_MT.out.gz_tbi, ch_cadd_header, ch_cadd_resources ) diff --git a/subworkflows/local/annotation/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf index e471dd21..12c596a7 100644 --- a/subworkflows/local/annotation/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -12,15 +12,14 @@ 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_vcf // channel: [mandatory] [ val(meta), path(vcfs), path(idx) ] ch_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(dir) ] main: ch_versions = Channel.empty() - BCFTOOLS_VIEW(ch_vcf.join(ch_index), [], [], []) + BCFTOOLS_VIEW(ch_vcf, [], [], []) TABIX_VIEW(BCFTOOLS_VIEW.out.vcf) @@ -29,7 +28,6 @@ workflow ANNOTATE_CADD { TABIX_CADD(CADD.out.tsv) ch_vcf - .join(ch_index) .join(CADD.out.tsv) .join(TABIX_CADD.out.tbi) .combine(ch_header) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ee8d9dbd..10a7e6ae 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -570,6 +570,7 @@ workflow RAREDISEASE { ch_cadd_header, ch_cadd_resources, ch_genome_fasta, + ch_vcfanno_lua, ch_vcfanno_resources, ch_vcfanno_toml, params.genome, From 8179ce9a5d4e47da99cf89380c30e8b5e5c9914e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:12:41 +0200 Subject: [PATCH 1816/1921] Changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8481d2da..adced3d8 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` +- A new parameter `scatter_count` to control how many interval files are created from a genome (used to parallelize annotations) [#585](https://github.com/nf-core/raredisease/pull/585) - Print warning messages if user intends to perform ranking when there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Two new parameters `skip_repeat_annotation` and `skip_repeat_calling` to skip calling and annotation of repeat expansions [#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_smncopynumbercaller` to skip smncopynumbercaller module[#574](https://github.com/nf-core/raredisease/pull/574) @@ -16,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Parallelized vcfanno [#585](https://github.com/nf-core/raredisease/pull/585) - Skip ROH calling with bcftools if there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Refactored tool citation list [#577](https://github.com/nf-core/raredisease/pull/577) - Removed `skip_repeat_analysis` added in #571 [#574](https://github.com/nf-core/raredisease/pull/574) @@ -45,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | skip_qualimap | | | | skip_smncopynumbercaller | | | skip_repeat_annotation | +| | scatter_count | ## 2.1.0 - Obelix [2024-05-29] From 8c452ff90392edca59b6d10d2f5e8c9183004941 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:51:58 +0200 Subject: [PATCH 1817/1921] Update annotate_genome_snvs.nf --- subworkflows/local/annotate_genome_snvs.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 8de4a526..8ae123f7 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -187,7 +187,7 @@ workflow ANNOTATE_GENOME_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(ANNOTATE_RHOCALLVIZ.out.versions) + ch_versions = ch_versions.mix(ANNOTATE_RHOCALLVIZ.out.versions) emit: vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] From 9546ba23c98a52903e1d9bf28250335f5e260416 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:48:32 +0200 Subject: [PATCH 1818/1921] fix [skip ci] --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 10a7e6ae..082dcc26 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -331,7 +331,7 @@ workflow RAREDISEASE { if (params.analysis_type.equals("wgs")) { ch_svcaller_priority = Channel.value(["tiddit", "manta", "cnvnator"]) } else { - ch_svcaller_priority = Channel.value(["manta"]) + ch_svcaller_priority = Channel.value([]) } } else { if (params.analysis_type.equals("wgs")) { From ec39dd1c1534ffbf565d5508db00f096bea55962 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:17:40 +0200 Subject: [PATCH 1819/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index adced3d8..642b1dd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Error in SVDB merge when only a single SV caller is run [#586](https://github.com/nf-core/raredisease/pull/586) - Errors due to misplaced version statements [#578](https://github.com/nf-core/raredisease/pull/578) - Stub crashes due to peddy reported in [#566](https://github.com/nf-core/raredisease/issues/566) [#576](https://github.com/nf-core/raredisease/pull/576] - Docker manifest error from gnu-wget container [#570](https://github.com/nf-core/raredisease/pull/570) From b175df13d99a0ab9d436e13d33f3f33efcd1c0ad Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 8 Aug 2024 08:14:00 +0200 Subject: [PATCH 1820/1921] update module --- modules.json | 2 +- modules/nf-core/deepvariant/README.md | 4 +- modules/nf-core/deepvariant/main.nf | 18 +- .../deepvariant/tests/main.nf.test.snap | 520 +++++++++--------- 4 files changed, 277 insertions(+), 267 deletions(-) diff --git a/modules.json b/modules.json index 96664577..9fe5ae84 100644 --- a/modules.json +++ b/modules.json @@ -113,7 +113,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "199ba086a259e1933d6e0ab7596e4a977bbd483a", + "git_sha": "ccf06a896339d2a4ed8594daa9f9adb827cb8189", "installed_by": ["modules"] }, "eklipse": { diff --git a/modules/nf-core/deepvariant/README.md b/modules/nf-core/deepvariant/README.md index ca112a7d..9d1ceb34 100644 --- a/modules/nf-core/deepvariant/README.md +++ b/modules/nf-core/deepvariant/README.md @@ -1,6 +1,8 @@ # Conda is not supported at the moment -The [bioconda](https://bioconda.github.io/recipes/deepvariant/README.html) recipe is not fully working as expected +The [bioconda](https://bioconda.github.io/recipes/deepvariant/README.html) recipe is not fully working as expected. + +See https://github.com/bioconda/bioconda-recipes/issues/30310 and https://github.com/nf-core/modules/issues/1754 for more information. Hence, we are using the docker container provided by the authors of the tool: diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index 507b6c11..a560cbe9 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -2,8 +2,10 @@ process DEEPVARIANT { tag "$meta.id" label 'process_high' - //Conda is not supported at the moment - container "nf-core/deepvariant:1.5.0" + // FIXME Conda is not supported at the moment + // BUG https://github.com/nf-core/modules/issues/1754 + // BUG https://github.com/bioconda/bioconda-recipes/issues/30310 + container "nf-core/deepvariant:1.6.1" input: tuple val(meta), path(input), path(index), path(intervals) @@ -29,6 +31,9 @@ process DEEPVARIANT { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def regions = intervals ? "--regions=${intervals}" : "" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' """ /opt/deepvariant/bin/run_deepvariant \\ @@ -38,12 +43,12 @@ process DEEPVARIANT { --output_gvcf=${prefix}.g.vcf.gz \\ ${args} \\ ${regions} \\ - --intermediate_results_dir=. \\ + --intermediate_results_dir=tmp \\ --num_shards=${task.cpus} cat <<-END_VERSIONS > versions.yml "${task.process}": - deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + deepvariant: $VERSION END_VERSIONS """ @@ -53,6 +58,9 @@ process DEEPVARIANT { error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." } prefix = task.ext.prefix ?: "${meta.id}" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' """ touch ${prefix}.vcf.gz touch ${prefix}.vcf.gz.tbi @@ -61,7 +69,7 @@ process DEEPVARIANT { cat <<-END_VERSIONS > versions.yml "${task.process}": - deepvariant: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + deepvariant: $VERSION END_VERSIONS """ } diff --git a/modules/nf-core/deepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/tests/main.nf.test.snap index 6ad76ae4..c49f7e4d 100644 --- a/modules/nf-core/deepvariant/tests/main.nf.test.snap +++ b/modules/nf-core/deepvariant/tests/main.nf.test.snap @@ -1,269 +1,269 @@ { - "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { - "content": [ - { - "0": [ - [ + "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { + "content": [ { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ] + } ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "4": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "versions": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-01T12:09:40.987117305" }, - "timestamp": "2024-03-20T13:54:42.757335334" - }, - "homo_sapiens - [bam, bai] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "4": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "vcf_tbi": [ - [ + "homo_sapiens - [bam, bai] - fasta - fai": { + "content": [ { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ] + } ], - "versions": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-01T12:08:47.058887374" }, - "timestamp": "2024-03-20T13:54:18.409489045" - }, - "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "1": [ - [ + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { + "content": [ { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ] + } ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "4": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ], - "gvcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz:md5,8d6ac08997bfd848a0a4d9d295e76952" - ] - ], - "gvcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.g.vcf.gz.tbi:md5,37e2d8f4cca0a21113cede608f54885a" - ] - ], - "vcf": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz:md5,7cba1516f7cf0888765d5ee8caf275f4" - ] - ], - "vcf_tbi": [ - [ - { - "id": "test", - "single_end": false - }, - "test_out.vcf.gz.tbi:md5,02a78562bc83520a51010a01fb06f217" - ] - ], - "versions": [ - "versions.yml:md5,4678f778b58276933b165fe3e84afc6a" - ] - } - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-20T13:54:30.523871801" - } -} + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-01T12:09:13.952808655" + } +} \ No newline at end of file From ec16d8d2b35f4fd8100422d57f01b71b208d7b61 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:09:42 +0200 Subject: [PATCH 1821/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 642b1dd5..c7e97c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Updated deepvariant to version 1.6.1 [#587](https://github.com/nf-core/raredisease/pull/587) - Parallelized vcfanno [#585](https://github.com/nf-core/raredisease/pull/585) - Skip ROH calling with bcftools if there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Refactored tool citation list [#577](https://github.com/nf-core/raredisease/pull/577) From 9542a38729465fa5b194a5a23a58f33619ba0315 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:42:10 +0200 Subject: [PATCH 1822/1921] add extra resource --- main.nf | 1 + nextflow_schema.json | 8 +++++ subworkflows/local/annotate_genome_snvs.nf | 5 +-- subworkflows/local/annotate_mt_snvs.nf | 9 ++++-- subworkflows/local/prepare_references.nf | 19 +++++++++--- workflows/raredisease.nf | 36 +++++++++++++--------- 6 files changed, 53 insertions(+), 25 deletions(-) diff --git a/main.nf b/main.nf index 838d75d7..96fced9c 100644 --- a/main.nf +++ b/main.nf @@ -58,6 +58,7 @@ params.variant_consequences_sv = getGenomeAttribute('variant_consequence params.vep_filters = getGenomeAttribute('vep_filters') params.vep_filters_scout_fmt = getGenomeAttribute('vep_filters_scout_fmt') params.vcf2cytosure_blacklist = getGenomeAttribute('vcf2cytosure_blacklist') +params.vcfanno_extra_resources = getGenomeAttribute('vcfanno_extra_resources') params.vcfanno_resources = getGenomeAttribute('vcfanno_resources') params.vcfanno_toml = getGenomeAttribute('vcfanno_toml') params.vcfanno_lua = getGenomeAttribute('vcfanno_lua') diff --git a/nextflow_schema.json b/nextflow_schema.json index 81ef4683..36905fab 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -402,6 +402,14 @@ "fa_icon": "fas fa-file", "description": "Path to vcf2cytosure blacklist file" }, + "vcfanno_extra_resources": { + "type": "string", + "exists": true, + "format": "file-path", + "description": "Path to a VCF file containing annotations.", + "help_text": "can be used to supply case-specific annotations in addition to those provided using --vcfanno_resources", + "fa_icon": "fas fa-file" + }, "vcfanno_resources": { "type": "string", "exists": true, diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 8ae123f7..c84828e6 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -28,7 +28,8 @@ workflow ANNOTATE_GENOME_SNVS { analysis_type // string: [mandatory] 'wgs' or 'wes' ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] - ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] + ch_vcfanno_extra // channel: [mandatory] [ path(resources & indices) ] + ch_vcfanno_resources // channel: [mandatory] [ path(resources & indices) ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 @@ -69,7 +70,7 @@ workflow ANNOTATE_GENOME_SNVS { GATK4_SELECTVARIANTS.out.vcf .join(GATK4_SELECTVARIANTS.out.tbi) - .map { meta, vcf, tbi -> return [meta, vcf, tbi, []] } + .combine(ch_vcfanno_extra) .set { ch_vcfanno_in } VCFANNO (ch_vcfanno_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index aab01ef6..f83aa69b 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -19,8 +19,9 @@ workflow ANNOTATE_MT_SNVS { ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] - ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] + ch_vcfanno_extra // channel: [mandatory] [ path(resources & indices) ] + ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] + ch_vcfanno_resources // channel: [mandatory] [ path(resources & indices) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] 107 @@ -45,7 +46,9 @@ workflow ANNOTATE_MT_SNVS { // Vcfanno ZIP_TABIX_HMTNOTE_MT.out.gz_tbi - .map { meta, vcf, tbi -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, []]} + .combine(ch_vcfanno_extra) + .map { meta, vcf, tbi, resources -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, resources]} + .dump (tag:'test') .set { ch_in_vcfanno } VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 7c7726b4..f7e1849f 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -22,6 +22,7 @@ include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_MT_SHIFT } from '../../modul include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_GENOME } from '../../modules/nf-core/sentieon/bwaindex/main' include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_MT_SHIFT } from '../../modules/nf-core/sentieon/bwaindex/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_BGZIPTABIX as TABIX_VCFANNOEXTRA } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' @@ -36,14 +37,16 @@ workflow PREPARE_REFERENCES { 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_vcfanno_extra_unprocessed // channel: [mandatory] [ val(meta), path(vcf) ] ch_vep_cache // channel: [mandatory for annotation] [ path(cache) ] main: - ch_versions = Channel.empty() - ch_tbi = Channel.empty() - ch_bgzip_tbi = Channel.empty() - ch_bwa = Channel.empty() - ch_sentieonbwa = Channel.empty() + ch_versions = Channel.empty() + ch_tbi = Channel.empty() + ch_bgzip_tbi = Channel.empty() + ch_bwa = Channel.empty() + ch_sentieonbwa = Channel.empty() + ch_vcfanno_extra = Channel.empty() // Genome indices SAMTOOLS_FAIDX_GENOME(ch_genome_fasta, [[],[]]) @@ -87,6 +90,10 @@ workflow PREPARE_REFERENCES { 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 } + TABIX_VCFANNOEXTRA(ch_vcfanno_extra_unprocessed) + .gz_tbi + .map { meta, vcf, tbi -> return [[vcf,tbi]] } + .set {ch_vcfanno_extra} // Generate bait and target intervals GATK_BILT(ch_target_bed, ch_dict).interval_list @@ -125,6 +132,7 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) ch_versions = ch_versions.mix(TABIX_PT.out.versions) ch_versions = ch_versions.mix(TABIX_PBT.out.versions) + ch_versions = ch_versions.mix(TABIX_VCFANNOEXTRA.out.versions) ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) ch_versions = ch_versions.mix(GATK_ILT.out.versions) @@ -153,6 +161,7 @@ workflow PREPARE_REFERENCES { 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) ] + vcfanno_extra = ch_vcfanno_extra.ifEmpty([[]]) // channel: [ path(intervals) ] 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) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 082dcc26..864eaf0c 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -188,21 +188,23 @@ workflow RAREDISEASE { // // Initialize file channels for PREPARE_REFERENCES subworkflow // - ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() - ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.empty() - ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).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([[],[]]) + ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() + ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.empty() + ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).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_vcfanno_extra_unprocessed = params.vcfanno_extra_resources ? Channel.fromPath(params.vcfanno_extra_resources).map { it -> [[id:it.baseName], it] }.collect() + : Channel.empty() + 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. @@ -215,6 +217,7 @@ workflow RAREDISEASE { ch_gnomad_af_tab, ch_dbsnp, ch_target_bed_unprocessed, + ch_vcfanno_extra_unprocessed, ch_vep_cache_unprocessed ) .set { ch_references } @@ -306,6 +309,7 @@ workflow RAREDISEASE { : Channel.value([]) ch_variant_consequences_sv = params.variant_consequences_sv ? Channel.fromPath(params.variant_consequences_sv).collect() : Channel.value([]) + ch_vcfanno_extra = ch_references.vcfanno_extra ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() : Channel.value([]) ch_vcf2cytosure_blacklist = params.vcf2cytosure_blacklist ? Channel.fromPath(params.vcf2cytosure_blacklist).collect() @@ -514,6 +518,7 @@ workflow RAREDISEASE { params.analysis_type, ch_cadd_header, ch_cadd_resources, + ch_vcfanno_extra, ch_vcfanno_resources, ch_vcfanno_lua, ch_vcfanno_toml, @@ -570,6 +575,7 @@ workflow RAREDISEASE { ch_cadd_header, ch_cadd_resources, ch_genome_fasta, + ch_vcfanno_extra, ch_vcfanno_lua, ch_vcfanno_resources, ch_vcfanno_toml, From 7f3e64863ff58b4504fdd8dfac5b4bab8fa99220 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:05:44 +0200 Subject: [PATCH 1823/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 642b1dd5..b3e7ad68 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` +- A new parameter `vcfanno_extra_resources` to pass an extra resource to vcfanno [#588](https://github.com/nf-core/raredisease/pull/588) - A new parameter `scatter_count` to control how many interval files are created from a genome (used to parallelize annotations) [#585](https://github.com/nf-core/raredisease/pull/585) - Print warning messages if user intends to perform ranking when there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Two new parameters `skip_repeat_annotation` and `skip_repeat_calling` to skip calling and annotation of repeat expansions [#574](https://github.com/nf-core/raredisease/pull/574) From 05707c025a4048dbfa89241b9fb197fb2cc22057 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:38:39 +0200 Subject: [PATCH 1824/1921] Update nextflow_schema.json Co-authored-by: Anders Jemt --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 36905fab..f2c79a4f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -407,7 +407,7 @@ "exists": true, "format": "file-path", "description": "Path to a VCF file containing annotations.", - "help_text": "can be used to supply case-specific annotations in addition to those provided using --vcfanno_resources", + "help_text": "Can be used to supply case-specific annotations in addition to those provided using --vcfanno_resources", "fa_icon": "fas fa-file" }, "vcfanno_resources": { From d1894b58c5e658a2f96d8ece20e3da88e4f45337 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:40:30 +0200 Subject: [PATCH 1825/1921] Update annotate_mt_snvs.nf --- subworkflows/local/annotate_mt_snvs.nf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index f83aa69b..bb5dca6b 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -19,9 +19,9 @@ workflow ANNOTATE_MT_SNVS { ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_vcfanno_extra // channel: [mandatory] [ path(resources & indices) ] + ch_vcfanno_extra // channel: [mandatory] [ [path(vcf),path(index).....] ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] - ch_vcfanno_resources // channel: [mandatory] [ path(resources & indices) ] + ch_vcfanno_resources // channel: [mandatory] [ [path(vcf),path(index),.....] ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] 107 @@ -48,7 +48,6 @@ workflow ANNOTATE_MT_SNVS { ZIP_TABIX_HMTNOTE_MT.out.gz_tbi .combine(ch_vcfanno_extra) .map { meta, vcf, tbi, resources -> return [meta + [prefix: meta.prefix + "_vcfanno"], vcf, tbi, resources]} - .dump (tag:'test') .set { ch_in_vcfanno } VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) From 5bd184a634cd1454a76ca01c29a84316704edade Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:41:54 +0200 Subject: [PATCH 1826/1921] Update prepare_references.nf --- subworkflows/local/prepare_references.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index f7e1849f..7f5eb05c 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -93,6 +93,7 @@ workflow PREPARE_REFERENCES { TABIX_VCFANNOEXTRA(ch_vcfanno_extra_unprocessed) .gz_tbi .map { meta, vcf, tbi -> return [[vcf,tbi]] } + .collect() .set {ch_vcfanno_extra} // Generate bait and target intervals From 6bbc9274482fc2fc0030db853ac3de32f5818ba4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:43:09 +0200 Subject: [PATCH 1827/1921] Update annotate_genome_snvs.nf --- subworkflows/local/annotate_genome_snvs.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index c84828e6..51d5a64c 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -28,8 +28,8 @@ workflow ANNOTATE_GENOME_SNVS { analysis_type // string: [mandatory] 'wgs' or 'wes' ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] - ch_vcfanno_extra // channel: [mandatory] [ path(resources & indices) ] - ch_vcfanno_resources // channel: [mandatory] [ path(resources & indices) ] + ch_vcfanno_extra // channel: [mandatory] [ [path(vcf),path(index)] ] + ch_vcfanno_resources // channel: [mandatory] [ [path(vcf),path(index),...] ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 From 99805a4862e95407ef2ed6eb8fe36552ffb77c3f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:43:58 +0200 Subject: [PATCH 1828/1921] Update prepare_references.nf --- subworkflows/local/prepare_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 7f5eb05c..2a6cbc0a 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -162,7 +162,7 @@ workflow PREPARE_REFERENCES { 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) ] - vcfanno_extra = ch_vcfanno_extra.ifEmpty([[]]) // channel: [ path(intervals) ] + vcfanno_extra = ch_vcfanno_extra.ifEmpty([[]]) // channel: [ path(intervals) ] 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) ] From 08302deb13e94588b9598bd213a42e3e3828467b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:32:08 +0200 Subject: [PATCH 1829/1921] Update prepare_references.nf --- subworkflows/local/prepare_references.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 2a6cbc0a..dd502db2 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -162,7 +162,7 @@ workflow PREPARE_REFERENCES { 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) ] - vcfanno_extra = ch_vcfanno_extra.ifEmpty([[]]) // channel: [ path(intervals) ] + vcfanno_extra = ch_vcfanno_extra.ifEmpty([[]]) // channel: [ [path(vcf), 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) ] From ad9a16fbecc50e6759a47bfcc6b0edca9613d244 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:15:46 +0200 Subject: [PATCH 1830/1921] add feature --- CHANGELOG.md | 2 ++ subworkflows/local/prepare_references.nf | 28 +++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 140d2a28..2c4667bd 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` +- A new functionality to pass gzipped resources to vcfanno_extra_resources [#589](https://github.com/nf-core/raredisease/pull/589) - A new parameter `vcfanno_extra_resources` to pass an extra resource to vcfanno [#588](https://github.com/nf-core/raredisease/pull/588) - A new parameter `scatter_count` to control how many interval files are created from a genome (used to parallelize annotations) [#585](https://github.com/nf-core/raredisease/pull/585) - Print warning messages if user intends to perform ranking when there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) @@ -51,6 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | skip_smncopynumbercaller | | | skip_repeat_annotation | | | scatter_count | +| | vcfanno_extra_resources | ## 2.1.0 - Obelix [2024-05-29] diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index dd502db2..4484bcd0 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -22,7 +22,8 @@ include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_MT_SHIFT } from '../../modul include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_GENOME } from '../../modules/nf-core/sentieon/bwaindex/main' include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_MT_SHIFT } from '../../modules/nf-core/sentieon/bwaindex/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' -include { TABIX_BGZIPTABIX as TABIX_VCFANNOEXTRA } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_BGZIPTABIX as TABIX_BGZIPINDEX_VCFANNOEXTRA } from '../../modules/nf-core/tabix/bgziptabix/main' +include { TABIX_TABIX as TABIX_VCFANNOEXTRA } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_DBSNP } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_GNOMAD_AF } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_PT } from '../../modules/nf-core/tabix/tabix/main' @@ -47,6 +48,8 @@ workflow PREPARE_REFERENCES { ch_bwa = Channel.empty() ch_sentieonbwa = Channel.empty() ch_vcfanno_extra = Channel.empty() + ch_vcfanno_bgzip = Channel.empty() + ch_vcfanno_index = Channel.empty() // Genome indices SAMTOOLS_FAIDX_GENOME(ch_genome_fasta, [[],[]]) @@ -90,12 +93,26 @@ workflow PREPARE_REFERENCES { 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 } - TABIX_VCFANNOEXTRA(ch_vcfanno_extra_unprocessed) - .gz_tbi + ch_vcfanno_extra_unprocessed + .branch { it -> + bgzipindex: !it[1].toString().endsWith(".gz") + index: it[1].toString().endsWith(".gz") + } + .set { ch_vcfanno_tabix_in } + + TABIX_VCFANNOEXTRA(ch_vcfanno_tabix_in.index).tbi + .join(ch_vcfanno_tabix_in.index) + .map { meta, tbi, vcf -> return [[vcf,tbi]]} + .set {ch_vcfanno_index} + + TABIX_BGZIPINDEX_VCFANNOEXTRA(ch_vcfanno_tabix_in.bgzipindex).gz_tbi .map { meta, vcf, tbi -> return [[vcf,tbi]] } - .collect() - .set {ch_vcfanno_extra} + .set {ch_vcfanno_bgzip} + Channel.empty() + .mix(ch_vcfanno_bgzip, ch_vcfanno_index) + .collect() + .set{ch_vcfanno_extra} // Generate bait and target intervals GATK_BILT(ch_target_bed, ch_dict).interval_list GATK_ILT(GATK_BILT.out.interval_list) @@ -133,6 +150,7 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(TABIX_GNOMAD_AF.out.versions) ch_versions = ch_versions.mix(TABIX_PT.out.versions) ch_versions = ch_versions.mix(TABIX_PBT.out.versions) + ch_versions = ch_versions.mix(TABIX_BGZIPINDEX_VCFANNOEXTRA.out.versions) ch_versions = ch_versions.mix(TABIX_VCFANNOEXTRA.out.versions) ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) ch_versions = ch_versions.mix(GATK_BILT.out.versions) From 6dd5f0a3befd94ee658ef1845011338065fe2f70 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:38:56 +0200 Subject: [PATCH 1831/1921] Corrects usage docs --- docs/usage.md | 65 ++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 66d0b357..259531ba 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -228,16 +228,17 @@ The mandatory and optional parameters for each category are tabulated below. ##### 7. SNV annotation & Ranking -| Mandatory | Optional | -| ------------------------------------ | --------------------------------------------- | -| genome1 | reduced_penetrance8 | -| vcfanno_resources2 | vcfanno_lua | -| vcfanno_toml3 | vep_filters/vep_filters_scout_fmt9 | -| vep_cache_version | cadd_resources10 | -| vep_cache4 | vep_plugin_files11 | -| gnomad_af5 | | -| score_config_snv6 | | -| variant_consequences_snv7 | | +| Mandatory | Optional | +| ------------------------------------ | ---------------------------------------------- | +| genome1 | reduced_penetrance9 | +| vcfanno_resources2 | vcfanno_lua | +| vcfanno_toml3 | vep_filters/vep_filters_scout_fmt10 | +| vep_cache_version | cadd_resources11 | +| vep_cache4 | | +| gnomad_af5 | | +| score_config_snv6 | | +| variant_consequences_snv7 | | +| vep_plugin_files8 | | 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).
    @@ -249,10 +250,10 @@ See example cache [here](https://raw.githubusercontent.com/nf-core/test-datasets no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/gnomad_reformated.tab.gz).
    6Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
    7File containing list of SO terms listed in the order of severity from most severe to lease severe for annotating genomic and mitochondrial SNVs. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/variant_consequences_v2.txt). You can learn more about these terms [here](https://grch37.ensembl.org/info/genome/variation/prediction/predicted_data.html). -8Used 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).
    -9 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). Not required if --skip_vep_filter is set to true.
    -10Path 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.
    -11A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
    +8A CSV file that describes the files used by VEP's named and custom plugins. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vep_files.csv).
    +9Used 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).
    +10 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). Not required if --skip_vep_filter is set to true.
    +11Path 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.
    :::note 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) (download files listed under the description: "All possible SNVs of GRCh3<7/8>/hg3<7/8>") From 0c5b700661186023c11db65f5e32658d11fc4b5b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:41:30 +0200 Subject: [PATCH 1832/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c4667bd..5d009cda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Update docs to show 'vep_plugin_files' as a mandatory parameter for SNV annotation [#594](https://github.com/nf-core/raredisease/issues/593) - Error in SVDB merge when only a single SV caller is run [#586](https://github.com/nf-core/raredisease/pull/586) - Errors due to misplaced version statements [#578](https://github.com/nf-core/raredisease/pull/578) - Stub crashes due to peddy reported in [#566](https://github.com/nf-core/raredisease/issues/566) [#576](https://github.com/nf-core/raredisease/pull/576] From 151e909a8d9516faf325150fc26bdc25aeda3292 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 13 Aug 2024 16:44:23 +0200 Subject: [PATCH 1833/1921] fix lint --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 259531ba..5a110ad1 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From f63d810e4ef8536f9e15cd648e337e27661f12e2 Mon Sep 17 00:00:00 2001 From: jemten Date: Wed, 14 Aug 2024 11:14:53 +0200 Subject: [PATCH 1834/1921] makes 0 an allowed value for sex --- CHANGELOG.md | 1 + assets/schema_input.json | 2 +- docs/usage.md | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c4667bd..35d0b5f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Allow `0` as a valid value for `sex` in the samplesheet [#595](https://github.com/nf-core/raredisease/pull/587) - Updated deepvariant to version 1.6.1 [#587](https://github.com/nf-core/raredisease/pull/587) - Parallelized vcfanno [#585](https://github.com/nf-core/raredisease/pull/585) - Skip ROH calling with bcftools if there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) diff --git a/assets/schema_input.json b/assets/schema_input.json index 38249daa..3dddc6a4 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -42,7 +42,7 @@ "sex": { "type": "string", "meta": ["sex"], - "enum": ["1", "2", "other"], + "enum": ["1", "2", "0", "other"], "errorMessage": "Sex must be provided and cannot contain spaces" }, "phenotype": { diff --git a/docs/usage.md b/docs/usage.md index 66d0b357..f3c2bf0f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -108,7 +108,7 @@ nf-core/raredisease will auto-detect whether a sample is single- or paired-end u | `lane` | Used to generate separate channels during the alignment step. | | `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `sex` | Sex (1=male; 2=female; other=unknown). | +| `sex` | Sex (1=male; 2=female; for unknown sex use 0 or other). | | `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | | `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | | `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | From 3185adefa80425bb51f71e755b1d0f5e35282560 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:44:31 +0200 Subject: [PATCH 1835/1921] change lane to string type --- assets/schema_input.json | 5 +- docs/usage.md | 58 +++++++++---------- .../alignment/align_bwa_bwamem2_bwameme.nf | 2 +- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 38249daa..14574166 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -15,8 +15,9 @@ "errorMessage": "Sample name must be provided and cannot contain spaces" }, "lane": { - "type": "number", - "meta": ["lane"] + "type": "string", + "meta": ["lane"], + "pattern": "^\\S+$" }, "fastq_1": { "type": "string", diff --git a/docs/usage.md b/docs/usage.md index 5a110ad1..405c9767 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -102,17 +102,17 @@ A samplesheet is used to pass the information about the sample(s), such as the p nf-core/raredisease will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The pedigree information in the samplesheet (sex and phenotype) should be provided as they would be for a [ped file](https://gatk.broadinstitute.org/hc/en-us/articles/360035531972-PED-Pedigree-format) (i.e. 1 for male, 2 for female, other for unknown). -| Fields | Description | -| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `lane` | Used to generate separate channels during the alignment step. | -| `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `sex` | Sex (1=male; 2=female; other=unknown). | -| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | -| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | -| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | -| `case_id` | Case ID, for the analysis used when generating a family VCF. | +| Fields | Description | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `lane` | Used to generate separate channels during the alignment step. It is of string type, and we recommend using a combination of flowcell and lane to distinguish between different runs of the same sample. | +| `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `sex` | Sex (1=male; 2=female; other=unknown). | +| `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | +| `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | +| `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | +| `case_id` | Case ID, for the analysis used when generating a family VCF. | It is also possible to include multiple runs of the same sample in a samplesheet. For example, when you have re-sequenced the same sample more than once to increase sequencing depth. In that case, the `sample` identifiers in the samplesheet have to be the same. The pipeline will align the raw read/read-pairs independently before merging the alignments belonging to the same sample. Below is an example for a trio with the proband sequenced across two lanes: diff --git a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf index 15d3db9a..0e10e6d5 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf @@ -68,7 +68,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_align .map{ meta, bam -> new_id = meta.sample - new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - meta.subMap('lane') + new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "_" + meta.lane + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - meta.subMap('lane') [groupKey(new_meta, new_meta.num_lanes), bam] } .groupTuple() From 35104b8af40fc528eb2ea6ba2be3d48c553b95b0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:46:50 +0200 Subject: [PATCH 1836/1921] lint --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 405c9767..f949a43b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From cbcb0550f2d67e0c2482813cbc0f81af93940ab8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:27:35 +0200 Subject: [PATCH 1837/1921] update usage --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 607aa779..550b0e6e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From 75a80652435a207864f38280885403ea8edc0060 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:17:17 +0200 Subject: [PATCH 1838/1921] update module --- modules.json | 2 +- modules/nf-core/deepvariant/main.nf | 3 + modules/nf-core/deepvariant/meta.yml | 9 ++ .../nf-core/deepvariant/tests/main.nf.test | 48 ++++++++++ .../deepvariant/tests/main.nf.test.snap | 91 ++++++++++++++++++- .../nextflow-non-autosomal-calling.config | 8 ++ 6 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config diff --git a/modules.json b/modules.json index 9fe5ae84..64ceca8d 100644 --- a/modules.json +++ b/modules.json @@ -113,7 +113,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "ccf06a896339d2a4ed8594daa9f9adb827cb8189", + "git_sha": "a7e8b8afd4fa82f20d745fa778bfdbf39c1f7efb", "installed_by": ["modules"] }, "eklipse": { diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index a560cbe9..8d3d0911 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -12,6 +12,7 @@ process DEEPVARIANT { tuple val(meta2), path(fasta) tuple val(meta3), path(fai) tuple val(meta4), path(gzi) + tuple val(meta5), path(par_bed) output: tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf @@ -31,6 +32,7 @@ process DEEPVARIANT { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def regions = intervals ? "--regions=${intervals}" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 // FIXME Revert this on next version bump def VERSION = '1.6.1' @@ -43,6 +45,7 @@ process DEEPVARIANT { --output_gvcf=${prefix}.g.vcf.gz \\ ${args} \\ ${regions} \\ + ${par_regions} \\ --intermediate_results_dir=tmp \\ --num_shards=${task.cpus} diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml index a50dc57d..2327dd5f 100644 --- a/modules/nf-core/deepvariant/meta.yml +++ b/modules/nf-core/deepvariant/meta.yml @@ -57,6 +57,15 @@ input: type: file description: GZI index of reference fasta file pattern: "*.gzi" + - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - par_bed: + type: file + description: BED file containing PAR regions + pattern: "*.bed" output: - meta: type: map diff --git a/modules/nf-core/deepvariant/tests/main.nf.test b/modules/nf-core/deepvariant/tests/main.nf.test index 91612c1e..17765233 100644 --- a/modules/nf-core/deepvariant/tests/main.nf.test +++ b/modules/nf-core/deepvariant/tests/main.nf.test @@ -31,6 +31,9 @@ nextflow_process { input[3] = [ [],[] ] + input[4] = [ + [],[] + ] """ } } @@ -66,6 +69,48 @@ nextflow_process { input[3] = [ [],[] ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed") { + config "./nextflow-non-autosomal-calling.config" + tag "test" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.blacklist_intervals.bed', checkIfExists: true) + ] """ } } @@ -102,6 +147,9 @@ nextflow_process { [ id:'genome'], file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) ] + input[4] = [ + [],[] + ] """ } } diff --git a/modules/nf-core/deepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/tests/main.nf.test.snap index c49f7e4d..04f87774 100644 --- a/modules/nf-core/deepvariant/tests/main.nf.test.snap +++ b/modules/nf-core/deepvariant/tests/main.nf.test.snap @@ -265,5 +265,94 @@ "nextflow": "24.04.2" }, "timestamp": "2024-07-01T12:09:13.952808655" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "4": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "versions": [ + "versions.yml:md5,efbdcb1ad96e0209b31bcafedd0017a8" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-23T14:29:24.939680679" } -} \ No newline at end of file +} diff --git a/modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config b/modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config new file mode 100644 index 00000000..4be8986b --- /dev/null +++ b/modules/nf-core/deepvariant/tests/nextflow-non-autosomal-calling.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT { + ext.args = '--model_type=WGS --haploid_contigs chr22' + ext.prefix = { "${meta.id}_out" } + } + +} From a6b13a1d5fee7fac23fc5ee6722be98bbc860471 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:36:49 +0200 Subject: [PATCH 1839/1921] update config --- conf/modules/call_snv_deepvariant.config | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/modules/call_snv_deepvariant.config b/conf/modules/call_snv_deepvariant.config index 02c2b384..348e95cc 100644 --- a/conf/modules/call_snv_deepvariant.config +++ b/conf/modules/call_snv_deepvariant.config @@ -22,7 +22,10 @@ process { } withName: '.*CALL_SNV_DEEPVARIANT:DEEPVARIANT' { - ext.args = { "--model_type=${params.analysis_type.toUpperCase()}" } + ext.args = { [ + "--model_type=${params.analysis_type.toUpperCase()}", + meta.sex == "1" ? params.genome == 'GRCh37' ? '--haploid_contigs="X,Y"' : '--haploid_contigs="chrX,chrY"' : '' + ].join(' ') } ext.prefix = { "${meta.id}_deepvar" } } From c18bd5fe588f7bfb88ca94c840c37fabcf0026a9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:54:58 +0200 Subject: [PATCH 1840/1921] add option to supply par bed --- main.nf | 1 + nextflow_schema.json | 8 ++++++++ subworkflows/local/call_snv.nf | 2 ++ .../local/variant_calling/call_snv_deepvariant.nf | 3 ++- workflows/raredisease.nf | 3 +++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/main.nf b/main.nf index 96fced9c..1e80e917 100644 --- a/main.nf +++ b/main.nf @@ -39,6 +39,7 @@ params.mobile_element_references = getGenomeAttribute('mobile_element_refe params.mobile_element_svdb_annotations = getGenomeAttribute('mobile_element_svdb_annotations') params.ml_model = getGenomeAttribute('ml_model') params.mt_fasta = getGenomeAttribute('mt_fasta') +params.par_bed = getGenomeAttribute('par_bed') params.ploidy_model = getGenomeAttribute('ploidy_model') params.reduced_penetrance = getGenomeAttribute('reduced_penetrance') params.readcount_intervals = getGenomeAttribute('readcount_intervals') diff --git a/nextflow_schema.json b/nextflow_schema.json index f2c79a4f..dc91e7a4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -267,6 +267,14 @@ "description": "Path to mitochondrial FASTA genome file.", "fa_icon": "fas fa-file" }, + "par_bed": { + "type": "string", + "exists": true, + "format": "path", + "fa_icon": "fas fa-file", + "pattern": "^\\S+\\.bed(\\.gz)?$", + "description": "Path to a BED file containing PAR regions (used by deepvariant)." + }, "ploidy_model": { "type": "string", "exists": true, diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 48bc500a..5d0b2ce9 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -28,6 +28,7 @@ workflow CALL_SNV { ch_dbsnp_tbi // channel: [optional] [ val(meta), path(tbi) ] ch_call_interval // channel: [mandatory] [ path(intervals) ] ch_ml_model // channel: [mandatory] [ path(model) ] + ch_par_bed // channel: [optional] [ val(meta), path(bed) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_foundin_header // channel: [mandatory] [ path(header) ] ch_pcr_indel_model // channel: [optional] [ val(sentieon_dnascope_pcr_indel_model) ] @@ -50,6 +51,7 @@ workflow CALL_SNV { ch_genome_bam_bai, ch_genome_fasta, ch_genome_fai, + ch_par_bed, ch_case_info, ch_foundin_header, ch_genome_chrsizes diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index c3477d67..3104ee67 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -16,6 +16,7 @@ workflow CALL_SNV_DEEPVARIANT { 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_par_bed // channel: [optional] [ val(meta), path(bed) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_foundin_header // channel: [mandatory] [ path(header) ] ch_genome_chrsizes // channel: [mandatory] [ path(chrsizes) ] @@ -28,7 +29,7 @@ workflow CALL_SNV_DEEPVARIANT { } .set { ch_deepvar_in } - DEEPVARIANT ( ch_deepvar_in, ch_genome_fasta, ch_genome_fai, [[],[]] ) + DEEPVARIANT ( ch_deepvar_in, ch_genome_fasta, ch_genome_fai, [[],[]], ch_par_bed ) DEEPVARIANT.out.gvcf .collect{it[1]} .toList() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 864eaf0c..0234272a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -279,6 +279,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_par_bed = params.par_bed ? Channel.fromPath(params.par_bed).map{ it -> [[id:'par_bed'], it] }.collect() + : Channel.value([[],[]]) ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.empty() ch_readcount_intervals = params.readcount_intervals ? Channel.fromPath(params.readcount_intervals).collect() @@ -502,6 +504,7 @@ workflow RAREDISEASE { ch_dbsnp_tbi, ch_call_interval, ch_ml_model, + ch_par_bed, ch_case_info, ch_foundin_header, Channel.value(params.sentieon_dnascope_pcr_indel_model) From 9ac6ddecfbb9ad6fff034865fcb9cc44c43a962c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:00:29 +0200 Subject: [PATCH 1841/1921] update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc93b90f..75aeb25c 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` +- A new parameter `par_bed` to pass a PAR bed files to deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) - A new functionality to pass gzipped resources to vcfanno_extra_resources [#589](https://github.com/nf-core/raredisease/pull/589) - A new parameter `vcfanno_extra_resources` to pass an extra resource to vcfanno [#588](https://github.com/nf-core/raredisease/pull/588) - A new parameter `scatter_count` to control how many interval files are created from a genome (used to parallelize annotations) [#585](https://github.com/nf-core/raredisease/pull/585) @@ -19,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Males' X and Y chromosomes will be treated as haploids during variant calling by deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) - Allow `0` as a valid value for `sex` in the samplesheet [#595](https://github.com/nf-core/raredisease/pull/587) - Updated deepvariant to version 1.6.1 [#587](https://github.com/nf-core/raredisease/pull/587) - Parallelized vcfanno [#585](https://github.com/nf-core/raredisease/pull/585) @@ -56,6 +58,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | scatter_count | | | vcfanno_extra_resources | +### Tool updates + +| Tool | Old version | New version | +| ----------- | ----------- | ----------- | +| Deepvariant | 1.5.0 | 1.6.1 | + ## 2.1.0 - Obelix [2024-05-29] ### `Added` From f99aa9e10cc5592a63f699aeca1af8e7deaf8451 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:03:22 +0200 Subject: [PATCH 1842/1921] update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc93b90f..72edfc62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` -- Allow `0` as a valid value for `sex` in the samplesheet [#595](https://github.com/nf-core/raredisease/pull/587) +- Acceptable type for lane field in the samplesheet from number to string [#597](https://github.com/nf-core/raredisease/pull/597) +- Allow `0` as a valid value for `sex` in the samplesheet [#595](https://github.com/nf-core/raredisease/pull/595) - Updated deepvariant to version 1.6.1 [#587](https://github.com/nf-core/raredisease/pull/587) - Parallelized vcfanno [#585](https://github.com/nf-core/raredisease/pull/585) - Skip ROH calling with bcftools if there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) From 57ce07820d8519da9dfd11e313183768cc8c86cf Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:25:58 +0200 Subject: [PATCH 1843/1921] update usage --- docs/usage.md | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 3e84295d..25ff6378 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -201,10 +201,12 @@ The mandatory and optional parameters for each category are tabulated below. | ml_model2 | known_dbsnp_tbi2 | | analysis_type3 | call_interval2 | | | known_dbsnp_tbi2 | +| | par_bed4 | 1Default variant caller is DeepVariant, but you have the option to use Sentieon as well.
    2These parameters are only used by Sentieon.
    3Default is WGS, but you have the option to choose WES as well.
    +4This parameter is only used by Deepvariant.
    ##### 5. Variant calling - Structural variants From 24b2b42df590fc3585fa4abe4ca51185d7613c7c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:55:04 +0200 Subject: [PATCH 1844/1921] lint --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 6d9af278..4bbff0b5 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From 06a136f7e4ee759fb83348f867b995058d12801a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:37:27 +0200 Subject: [PATCH 1845/1921] revert some changes --- CHANGELOG.md | 2 ++ config.config | 3 +++ nextflow.config | 1 + nextflow_schema.json | 7 +++++++ subworkflows/local/align.nf | 10 ++-------- subworkflows/local/alignment/align_MT.nf | 14 +++----------- 6 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 config.config diff --git a/CHANGELOG.md b/CHANGELOG.md index 75f0eee0..ce06d8f0 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` +- A new parameter `mt_aligner` to control which aligner is used to align reads to mitochondria - A new parameter `par_bed` to pass a PAR bed files to deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) - A new functionality to pass gzipped resources to vcfanno_extra_resources [#589](https://github.com/nf-core/raredisease/pull/589) - A new parameter `vcfanno_extra_resources` to pass an extra resource to vcfanno [#588](https://github.com/nf-core/raredisease/pull/588) @@ -46,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Old parameter | New parameter | | --------------- | ------------------------ | | | mbuffer_mem | +| | mt_aligner | | | samtools_sort_threads | | | skip_repeat_calling | | | skip_snv_calling | diff --git a/config.config b/config.config new file mode 100644 index 00000000..bcd0c0ba --- /dev/null +++ b/config.config @@ -0,0 +1,3 @@ +singularity { + runOptions = "--bind /home/ramprasad.neethiraj/tmp:/home/ramprasad.neethiraj/tmp" +} diff --git a/nextflow.config b/nextflow.config index b7857df5..db7a3967 100644 --- a/nextflow.config +++ b/nextflow.config @@ -53,6 +53,7 @@ params { // Alignment aligner = 'bwamem2' + mt_aligner = 'bwamem2' mbuffer_mem = 3072 samtools_sort_threads = 4 min_trimmed_length = 40 diff --git a/nextflow_schema.json b/nextflow_schema.json index dc91e7a4..bdfcb70b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -632,6 +632,13 @@ "fa_icon": "fas fa-align-center", "enum": ["bwa", "bwamem2", "bwameme", "sentieon"] }, + "mt_aligner": { + "type": "string", + "default": "bwamem2", + "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", + "fa_icon": "fas fa-align-center", + "enum": ["bwa", "bwamem2", "sentieon"] + }, "samtools_sort_threads": { "type": "integer", "default": 4, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index b2f91d27..5db1a573 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -97,12 +97,9 @@ workflow ALIGN { CONVERT_MT_BAM_TO_FASTQ.out.bam, ch_genome_bwaindex, ch_genome_bwamem2index, - ch_genome_bwamemeindex, ch_genome_fasta, ch_genome_dictionary, - ch_genome_fai, - val_mbuffer_mem, - val_sort_threads + ch_genome_fai ) ALIGN_MT_SHIFT ( @@ -110,12 +107,9 @@ workflow ALIGN { CONVERT_MT_BAM_TO_FASTQ.out.bam, ch_mtshift_bwaindex, ch_mtshift_bwamem2index, - ch_mtshift_bwamemeindex, ch_mtshift_fasta, ch_mtshift_dictionary, - ch_mtshift_fai, - val_mbuffer_mem, - val_sort_threads + ch_mtshift_fai ) ch_mt_marked_bam = ALIGN_MT.out.marked_bam diff --git a/subworkflows/local/alignment/align_MT.nf b/subworkflows/local/alignment/align_MT.nf index 14c65526..7a0c1d2c 100644 --- a/subworkflows/local/alignment/align_MT.nf +++ b/subworkflows/local/alignment/align_MT.nf @@ -5,7 +5,6 @@ include { BWA_MEM as BWA_MEM_MT } from '../../../modules/nf-core/bwa/mem/main' include { SENTIEON_BWAMEM as SENTIEON_BWAMEM_MT } from '../../../modules/nf-core/sentieon/bwamem/main' include { BWAMEM2_MEM as BWAMEM2_MEM_MT } from '../../../modules/nf-core/bwamem2/mem/main' -include { BWAMEME_MEM as BWAMEME_MEM_MT } from '../../../modules/nf-core/bwameme/mem/main' include { GATK4_MERGEBAMALIGNMENT as GATK4_MERGEBAMALIGNMENT_MT } from '../../../modules/nf-core/gatk4/mergebamalignment/main' include { PICARD_ADDORREPLACEREADGROUPS as PICARD_ADDORREPLACEREADGROUPS_MT } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' include { PICARD_MARKDUPLICATES as PICARD_MARKDUPLICATES_MT } from '../../../modules/nf-core/picard/markduplicates/main' @@ -18,32 +17,25 @@ workflow ALIGN_MT { 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_bwamemeindex // channel: [mandatory for bwameme] [ 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) ] - val_mbuffer_mem // integer: [mandatory] default: 3072 - val_sort_threads // integer: [mandatory] default: 4 main: ch_versions = Channel.empty() - if (params.aligner.equals("bwamem2")) { + if (params.mt_aligner.equals("bwamem2")) { BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, ch_fasta, true) ch_align = BWAMEM2_MEM_MT.out.bam ch_versions = ch_versions.mix(BWAMEM2_MEM_MT.out.versions.first()) - } else if (params.aligner.equals("sentieon")) { + } else if (params.mt_aligner.equals("sentieon")) { SENTIEON_BWAMEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, ch_fai ) ch_align = SENTIEON_BWAMEM_MT.out.bam_and_bai.map{ meta, bam, bai -> [meta, bam] } ch_versions = ch_versions.mix(SENTIEON_BWAMEM_MT.out.versions.first()) - } else if (params.aligner.equals("bwa")) { + } else if (params.mt_aligner.equals("bwa")) { BWA_MEM_MT ( ch_fastq, ch_bwaindex, ch_fasta, true ) ch_align = BWA_MEM_MT.out.bam ch_versions = ch_versions.mix(BWA_MEM_MT.out.versions.first()) - } else if (params.aligner.equals("bwameme")) { - BWAMEME_MEM_MT (ch_fastq, ch_bwamemeindex, ch_fasta, true, val_mbuffer_mem, val_sort_threads) - ch_align = BWAMEME_MEM_MT.out.bam - ch_versions = ch_versions.mix(BWAMEME_MEM_MT.out.versions.first()) } ch_align .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) From 0c8af9aab768a328f576127e3528bbdfae532ffb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:39:17 +0200 Subject: [PATCH 1846/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce06d8f0..6cb215dd 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` -- A new parameter `mt_aligner` to control which aligner is used to align reads to mitochondria +- A new parameter `mt_aligner` to control which aligner is used to align reads to mitochondria [#600](https://github.com/nf-core/raredisease/pull/600) - A new parameter `par_bed` to pass a PAR bed files to deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) - A new functionality to pass gzipped resources to vcfanno_extra_resources [#589](https://github.com/nf-core/raredisease/pull/589) - A new parameter `vcfanno_extra_resources` to pass an extra resource to vcfanno [#588](https://github.com/nf-core/raredisease/pull/588) From ceb1730027473a426f82a7a4d3f9a7b1b51ce1fe Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:42:57 +0200 Subject: [PATCH 1847/1921] remove config.config --- config.config | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 config.config diff --git a/config.config b/config.config deleted file mode 100644 index bcd0c0ba..00000000 --- a/config.config +++ /dev/null @@ -1,3 +0,0 @@ -singularity { - runOptions = "--bind /home/ramprasad.neethiraj/tmp:/home/ramprasad.neethiraj/tmp" -} From af3355227b1be890e2a2a731d562b028388831d7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Aug 2024 10:19:14 +0200 Subject: [PATCH 1848/1921] review suggestions --- CHANGELOG.md | 1 + conf/modules/align_MT.config | 12 ------------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cb215dd..1015ebb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- bwameme can no longer be used to align mitochondrial reads [#600](https://github.com/nf-core/raredisease/pull/600) - Males' X and Y chromosomes will be treated as haploids during variant calling by deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) - Acceptable type for lane field in the samplesheet from number to string [#597](https://github.com/nf-core/raredisease/pull/597) - Allow `0` as a valid value for `sex` in the samplesheet [#595](https://github.com/nf-core/raredisease/pull/595) diff --git a/conf/modules/align_MT.config b/conf/modules/align_MT.config index a616272b..3fdbdbaa 100644 --- a/conf/modules/align_MT.config +++ b/conf/modules/align_MT.config @@ -23,12 +23,6 @@ process { ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ALIGN_MT:BWAMEME_MEM_MT' { - ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } - ext.args2 = { "-T ./samtools_sort_tmp" } - ext.prefix = { "${meta.id}_sorted" } - } - withName: '.*ALIGN_MT:BWA_MEM_MT' { ext.args = { "-M -K 100000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } @@ -80,12 +74,6 @@ process { ext.prefix = { "${meta.id}_sorted_shifted" } } - withName: '.*ALIGN_MT_SHIFT:BWAMEME_MEM_MT' { - ext.args = { "-7 -M -K 100000000 -R ${meta.read_group}" } - ext.args2 = { "-T ./samtools_sort_tmp" } - ext.prefix = { "${meta.id}_sorted_shifted" } - } - withName: '.*ALIGN_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } ext.args2 = { "-T ./samtools_sort_tmp" } From 58cf12645f142ed68db3a060e85aa1d3a16f965b Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 20 Aug 2024 10:25:37 +0000 Subject: [PATCH 1849/1921] Updating Sentieon DNAscope ml-model to v1.1 in test-configs --- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- conf/test_sentieon.config | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index 439d4875..f0c503c9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -40,7 +40,7 @@ params { intervals_wgs = params.pipelines_testdata_base_path + 'raredisease/reference/target_wgs.interval_list' intervals_y = params.pipelines_testdata_base_path + 'raredisease/reference/targetY.interval_list' known_dbsnp = params.pipelines_testdata_base_path + 'raredisease/reference/dbsnp_-138-.vcf.gz' - ml_model = 'https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model' + ml_model = 'https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.1.model' mobile_element_references = params.pipelines_testdata_base_path + 'raredisease/reference/mobile_element_references.tsv' mobile_element_svdb_annotations = params.pipelines_testdata_base_path + 'raredisease/reference/svdb_querydb_files.csv' reduced_penetrance = params.pipelines_testdata_base_path + 'raredisease/reference/reduced_penetrance.tsv' diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index fc9b24cc..1aad988b 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -40,7 +40,7 @@ params { intervals_wgs = params.pipelines_testdata_base_path + 'raredisease/reference/target_wgs.interval_list' intervals_y = params.pipelines_testdata_base_path + 'raredisease/reference/targetY.interval_list' known_dbsnp = params.pipelines_testdata_base_path + 'raredisease/reference/dbsnp_-138-.vcf.gz' - ml_model = 'https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model' + ml_model = 'https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.1.model' mobile_element_references = params.pipelines_testdata_base_path + 'raredisease/reference/mobile_element_references.tsv' mobile_element_svdb_annotations = params.pipelines_testdata_base_path + 'raredisease/reference/svdb_querydb_files.csv' reduced_penetrance = params.pipelines_testdata_base_path + 'raredisease/reference/reduced_penetrance.tsv' diff --git a/conf/test_sentieon.config b/conf/test_sentieon.config index b440d47d..6776eb6a 100644 --- a/conf/test_sentieon.config +++ b/conf/test_sentieon.config @@ -38,7 +38,7 @@ 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" 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" + ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.1.model" mobile_element_references = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mobile_element_references.tsv" mobile_element_svdb_annotations = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/svdb_querydb_files.csv" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" From fbf2d4f693e47c993308f63c474a1ac8ac98a64f Mon Sep 17 00:00:00 2001 From: asp8200 Date: Tue, 20 Aug 2024 11:59:59 +0000 Subject: [PATCH 1850/1921] Updating changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1015ebb4..afc1ba15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Updated the model for Sentieon DNAScope to v1.1 [#601](https://github.com/nf-core/raredisease/pull/601) - bwameme can no longer be used to align mitochondrial reads [#600](https://github.com/nf-core/raredisease/pull/600) - Males' X and Y chromosomes will be treated as haploids during variant calling by deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) - Acceptable type for lane field in the samplesheet from number to string [#597](https://github.com/nf-core/raredisease/pull/597) From 97c0ef66600ded53ca465f4c0dd274d01b9ca240 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:34:11 +0200 Subject: [PATCH 1851/1921] first attempt --- subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf | 2 +- subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf index 0e10e6d5..15d3db9a 100644 --- a/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf +++ b/subworkflows/local/alignment/align_bwa_bwamem2_bwameme.nf @@ -68,7 +68,7 @@ workflow ALIGN_BWA_BWAMEM2_BWAMEME { ch_align .map{ meta, bam -> new_id = meta.sample - new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "_" + meta.lane + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - meta.subMap('lane') + new_meta = meta + [id:new_id, read_group:"\'@RG\\tID:" + new_id + "\\tPL:" + val_platform + "\\tSM:" + new_id + "\'"] - meta.subMap('lane') [groupKey(new_meta, new_meta.num_lanes), bam] } .groupTuple() diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index dd3e1812..bafaf7ce 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -90,7 +90,7 @@ workflow PIPELINE_INITIALISATION { .combine( ch_original_input ) .map { counts, meta, fastq1, fastq2 -> new_meta = meta + [num_lanes:counts[meta.id], - read_group:"\'@RG\\tID:"+ fastq1.toString().split('/')[-1] + "\\tPL:" + params.platform.toUpperCase() + "\\tSM:" + meta.id + "\'"] + read_group:"\'@RG\\tID:"+ fastq1.simpleName + "_" + meta.lane + "\\tPL:" + params.platform.toUpperCase() + "\\tSM:" + meta.id + "\'"] if (!fastq2) { return [ new_meta + [ single_end:true ], [ fastq1 ] ] } else { From f27d33e8aeb7f785eb1f2cf5270c14ac04370166 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:11:52 +0200 Subject: [PATCH 1852/1921] properly remove references to bwameme in mt subworkflows --- conf/modules/prepare_references.config | 11 +++-------- subworkflows/local/align.nf | 1 - subworkflows/local/prepare_references.nf | 4 ---- workflows/raredisease.nf | 2 -- 4 files changed, 3 insertions(+), 15 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 10fda4a3..6240f2cb 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -35,12 +35,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.aligner == "bwamem2"} - } - - withName: '.*PREPARE_REFERENCES:BWAMEME_INDEX_MT_SHIFT' { - ext.args = '-a meme' - ext.when = { !(params.analysis_type == "wes") && params.aligner == "bwameme"} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { @@ -48,11 +43,11 @@ process { } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.aligner == "sentieon"} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "sentieon"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.aligner == "bwa"} + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwa"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 5db1a573..29c7f5da 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -21,7 +21,6 @@ workflow ALIGN { ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mtshift_bwaindex // channel: [mandatory] [ val(meta), path(index) ] ch_mtshift_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] - ch_mtshift_bwamemeindex // channel: [mandatory] [ val(meta), path(index) ] ch_mtshift_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_mtshift_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 4484bcd0..73301f53 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -7,7 +7,6 @@ include { BWA_INDEX as BWA_INDEX_MT_SHIFT } from '../../modul include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_MT_SHIFT } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEME_INDEX as BWAMEME_INDEX_GENOME } from '../../modules/nf-core/bwameme/index/main' -include { BWAMEME_INDEX as BWAMEME_INDEX_MT_SHIFT } from '../../modules/nf-core/bwameme/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' @@ -73,7 +72,6 @@ workflow PREPARE_REFERENCES { // MT alignment indices BWAMEM2_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) - BWAMEME_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) BWA_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) SENTIEON_BWAINDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) ch_bwa_mtshift = Channel.empty().mix(SENTIEON_BWAINDEX_MT_SHIFT.out.index, BWA_INDEX_MT_SHIFT.out.index).collect() @@ -143,7 +141,6 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(GATK_SD_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(GATK_SHIFTFASTA.out.versions) - ch_versions = ch_versions.mix(BWAMEME_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(BWA_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_MT_SHIFT.out.versions) @@ -175,7 +172,6 @@ workflow PREPARE_REFERENCES { mtshift_dict = GATK_SHIFTFASTA.out.dict.collect() // channel: [ path(dict) ] mtshift_bwa_index = ch_bwa_mtshift // channel: [ val(meta), path(index) ] mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] - mtshift_bwameme_index = BWAMEME_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) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0234272a..10ef83b1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -274,7 +274,6 @@ workflow RAREDISEASE { 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_bwamemeindex = ch_references.mtshift_bwameme_index ch_mtshift_dictionary = ch_references.mtshift_dict ch_mtshift_fai = ch_references.mtshift_fai ch_mtshift_fasta = ch_references.mtshift_fasta @@ -415,7 +414,6 @@ workflow RAREDISEASE { ch_genome_dictionary, ch_mtshift_bwaindex, ch_mtshift_bwamem2index, - ch_mtshift_bwamemeindex, ch_mtshift_fasta, ch_mtshift_dictionary, ch_mtshift_fai, From 818f7af84c1868440162a6efa1284d8af2ca9405 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:42:35 +0200 Subject: [PATCH 1853/1921] issue when aligner and mt_aligner has different values --- conf/modules/prepare_references.config | 16 ++++++++-------- workflows/raredisease.nf | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 6240f2cb..25207856 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -26,7 +26,7 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_GENOME' { - ext.when = {!params.bwamem2 && params.aligner == "bwamem2"} + ext.when = {!params.bwamem2 && (params.aligner == "bwamem2" || params.mt_aligner == "bwamem2")} } withName: '.*PREPARE_REFERENCES:BWAMEME_INDEX_GENOME' { @@ -34,12 +34,16 @@ process { ext.when = {!params.bwameme && params.aligner == "bwameme"} } - withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwamem2"} + withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { + ext.when = {!params.bwa && (!(params.aligner == "sentieon") || params.mt_aligner == "bwa")} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { - ext.when = {!params.bwa && params.aligner == "sentieon"} + ext.when = {!params.bwa && (params.aligner == "sentieon" || params.mt_aligner == "sentieon")} + } + + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { + ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { @@ -50,10 +54,6 @@ process { ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwa"} } - withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { - ext.when = {!params.bwa && (!(params.aligner == "sentieon") || params.aligner == "bwa")} - } - withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { ext.when = {!params.fai} } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 10ef83b1..88425b42 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -191,7 +191,7 @@ workflow RAREDISEASE { ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.empty() - ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() + ch_genome_dict_unprocessed = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).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([[],[]]) @@ -212,7 +212,7 @@ workflow RAREDISEASE { PREPARE_REFERENCES ( ch_genome_fasta, ch_genome_fai, - ch_genome_dictionary, + ch_genome_dict_unprocessed, ch_mt_fasta, ch_gnomad_af_tab, ch_dbsnp, From 21becd6b820152cd8f4be8e3feab00f3e57e6659 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:12:43 +0200 Subject: [PATCH 1854/1921] updaet changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index afc1ba15..5f4adb3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` +- Issues that cropped up when `aligner` and `mt_aligner` were different [#605](https://github.com/nf-core/raredisease/pull/605) - Update docs to show 'vep_plugin_files' as a mandatory parameter for SNV annotation [#594](https://github.com/nf-core/raredisease/issues/593) - Error in SVDB merge when only a single SV caller is run [#586](https://github.com/nf-core/raredisease/pull/586) - Errors due to misplaced version statements [#578](https://github.com/nf-core/raredisease/pull/578) From ca688e5d174c4878b967f4f8011df87fd900ccd5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:52:41 +0200 Subject: [PATCH 1855/1921] Update raredisease.nf --- workflows/raredisease.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 88425b42..10ef83b1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -191,7 +191,7 @@ workflow RAREDISEASE { ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.empty() - ch_genome_dict_unprocessed = 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() : Channel.empty() ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.value([[],[]]) @@ -212,7 +212,7 @@ workflow RAREDISEASE { PREPARE_REFERENCES ( ch_genome_fasta, ch_genome_fai, - ch_genome_dict_unprocessed, + ch_genome_dictionary, ch_mt_fasta, ch_gnomad_af_tab, ch_dbsnp, From 67d4607f4aa6aafd5cd9a268e1b68a3180abea27 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:35:08 +0200 Subject: [PATCH 1856/1921] update cytosure conditional --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 10ef83b1..8dbfae62 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -785,7 +785,7 @@ workflow RAREDISEASE { Generate CGH files from sequencing data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if ( !params.skip_vcf2cytosure && params.analysis_type.equals("wgs") ) { + if ( !params.skip_vcf2cytosure && params.analysis_type.equals("wgs") && !params.skip_sv_calling) { GENERATE_CYTOSURE_FILES ( ch_sv_annotate.vcf_ann, ch_sv_annotate.tbi, From 40178f06204a6855446bde6717d727ae74709cbd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 30 Aug 2024 11:45:33 +0200 Subject: [PATCH 1857/1921] add csi option --- conf/modules/prepare_references.config | 4 ++++ subworkflows/local/prepare_references.nf | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 25207856..401513ab 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -100,6 +100,10 @@ process { ext.when = { !params.target_bed.equals(null) && !params.target_bed.endsWith(".gz") } } + withName: '.*PREPARE_REFERENCES:TABIX_BGZIPINDEX_VCFANNOEXTRA' { + ext.args2 = '-C' + } + withName: '.*PREPARE_REFERENCES:GATK_BILT' { ext.when = { !params.target_bed.equals(null) } ext.prefix = { "${meta.id}_target" } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 73301f53..8c39c614 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -103,8 +103,10 @@ workflow PREPARE_REFERENCES { .map { meta, tbi, vcf -> return [[vcf,tbi]]} .set {ch_vcfanno_index} - TABIX_BGZIPINDEX_VCFANNOEXTRA(ch_vcfanno_tabix_in.bgzipindex).gz_tbi - .map { meta, vcf, tbi -> return [[vcf,tbi]] } + TABIX_BGZIPINDEX_VCFANNOEXTRA(ch_vcfanno_tabix_in.bgzipindex) + Channel.empty() + .mix(TABIX_BGZIPINDEX_VCFANNOEXTRA.out.gz_tbi, TABIX_BGZIPINDEX_VCFANNOEXTRA.out.gz_csi) + .map { meta, vcf, index -> return [[vcf,index]] } .set {ch_vcfanno_bgzip} Channel.empty() From 6b7a8b3cea599e3ee03bb1acf63a7602c3461f38 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 30 Aug 2024 11:49:15 +0200 Subject: [PATCH 1858/1921] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f4adb3f..672c689b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Default index for vcfanno extra annotation files from tbi to csi [#606](https://github.com/nf-core/raredisease/pull/606) - Updated the model for Sentieon DNAScope to v1.1 [#601](https://github.com/nf-core/raredisease/pull/601) - bwameme can no longer be used to align mitochondrial reads [#600](https://github.com/nf-core/raredisease/pull/600) - Males' X and Y chromosomes will be treated as haploids during variant calling by deepvariant [#598](https://github.com/nf-core/raredisease/pull/598) From 68133d62ded606b869e96b1a74ab92ab398082a7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:35:05 +0200 Subject: [PATCH 1859/1921] tiny fix --- nextflow_schema.json | 9 ++++----- workflows/raredisease.nf | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index bdfcb70b..bf20ae91 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -485,9 +485,9 @@ "analysis_type": { "type": "string", "default": "wgs", - "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", + "description": "Specifies which analysis type for the pipeline- either 'wgs' or 'wes'. This changes resources consumed and tools used.", "fa_icon": "fas fa-align-center", - "enum": ["wgs", "wes", "mito"] + "enum": ["wgs", "wes"] }, "bwa_as_fallback": { "type": "boolean", @@ -498,9 +498,8 @@ "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"] + "description": "Specifies the platform on which the reads were sequenced.", + "fa_icon": "fas fa-align-center" }, "ngsbits_samplegender_method": { "type": "string", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8dbfae62..80e51572 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -785,7 +785,7 @@ workflow RAREDISEASE { Generate CGH files from sequencing data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - if ( !params.skip_vcf2cytosure && params.analysis_type.equals("wgs") && !params.skip_sv_calling) { + if ( !params.skip_vcf2cytosure && params.analysis_type.equals("wgs") && !params.skip_sv_calling && !params.skip_sv_annotation) { GENERATE_CYTOSURE_FILES ( ch_sv_annotate.vcf_ann, ch_sv_annotate.tbi, From 3af2b5288fa64913a85c42cda0423b63ffc03a03 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:58:54 +0200 Subject: [PATCH 1860/1921] add mito --- conf/modules/prepare_references.config | 10 ++--- nextflow_schema.json | 4 +- subworkflows/local/align.nf | 2 +- subworkflows/local/call_snv.nf | 4 +- .../local/call_structural_variants.nf | 45 +++++++++++-------- 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 401513ab..2793ec93 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -43,15 +43,15 @@ process { } withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwamem2"} + ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) && params.mt_aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "sentieon"} + ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) && params.mt_aligner == "sentieon"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) && params.mt_aligner == "bwa"} + ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) && params.mt_aligner == "bwa"} } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_GENOME' { @@ -68,7 +68,7 @@ process { } withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes) } + ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) } } withName: '.*PREPARE_REFERENCES:GATK_SD' { @@ -80,7 +80,7 @@ process { } withName: '.*PREPARE_REFERENCES:GATK_SD_MT_SHIFT' { - ext.when = { (params.analysis_type.equals("wgs") || params.run_mt_for_wes)} + ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes)} } withName: '.*PREPARE_REFERENCES:TABIX_DBSNP' { diff --git a/nextflow_schema.json b/nextflow_schema.json index bf20ae91..d8be0ddb 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -485,9 +485,9 @@ "analysis_type": { "type": "string", "default": "wgs", - "description": "Specifies which analysis type for the pipeline- either 'wgs' or 'wes'. This changes resources consumed and tools used.", + "description": "Specifies which analysis type for the pipeline- either 'wgs', 'wes' or 'mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-align-center", - "enum": ["wgs", "wes"] + "enum": ["wgs", "wes", "mito"] }, "bwa_as_fallback": { "type": "boolean", diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 29c7f5da..d08b1cb5 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -83,7 +83,7 @@ workflow ALIGN { // PREPARING READS FOR MT ALIGNMENT - if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { + if (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) { CONVERT_MT_BAM_TO_FASTQ ( ch_genome_bam_bai, ch_genome_fasta, diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 5d0b2ce9..23508848 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -46,7 +46,7 @@ workflow CALL_SNV { ch_sentieon_gvcf = Channel.empty() ch_sentieon_gtbi = Channel.empty() - if (params.variant_caller.equals("deepvariant")) { + if (params.variant_caller.equals("deepvariant") && !params.analysis_type.equals("mito")) { CALL_SNV_DEEPVARIANT ( // triggered only when params.variant_caller is set as deepvariant ch_genome_bam_bai, ch_genome_fasta, @@ -97,7 +97,7 @@ workflow CALL_SNV { ch_genome_tabix = GATK4_SELECTVARIANTS.out.tbi ch_genome_vcf_tabix = ch_genome_vcf.join(ch_genome_tabix, failOnMismatch:true, failOnDuplicate:true) - if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { + if (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) { CALL_SNV_MT( ch_mt_bam_bai, ch_genome_fasta, diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 65f2f9ff..aca78e79 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -32,11 +32,16 @@ workflow CALL_STRUCTURAL_VARIANTS { main: ch_versions = Channel.empty() + ch_merged_svs = Channel.empty() + ch_merged_tbi = Channel.empty() - CALL_SV_MANTA (ch_genome_bam, ch_genome_bai, ch_genome_fasta, ch_genome_fai, ch_case_info, ch_target_bed) - .diploid_sv_vcf - .collect{it[1]} - .set{ manta_vcf } + if (!params.analysis_type.equals("mito")) { + CALL_SV_MANTA (ch_genome_bam, ch_genome_bai, ch_genome_fasta, ch_genome_fai, ch_case_info, ch_target_bed) + .diploid_sv_vcf + .collect{it[1]} + .set{ manta_vcf } + ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) + } if (params.analysis_type.equals("wgs")) { CALL_SV_TIDDIT (ch_genome_bam_bai, ch_genome_fasta, ch_bwa_index, ch_case_info) @@ -61,7 +66,7 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) } - if (params.analysis_type.equals("wgs") || params.run_mt_for_wes) { + if (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) { CALL_SV_MT (ch_mt_bam_bai, ch_genome_fasta) ch_versions = ch_versions.mix(CALL_SV_MT.out.versions) } @@ -74,39 +79,41 @@ workflow CALL_STRUCTURAL_VARIANTS { .combine(cnvnator_vcf) .toList() .set { vcf_list } - } else { + } else if (!params.analysis_type.equals("mito")) { manta_vcf .toList() .set { vcf_list } } - } else if (params.analysis_type.equals("wgs")){ + } else if (params.analysis_type.equals("wgs")) { tiddit_vcf .combine(manta_vcf) .combine(gcnvcaller_vcf) .combine(cnvnator_vcf) .toList() .set { vcf_list } - } else { + } else if (!params.analysis_type.equals("mito")) { manta_vcf .combine(gcnvcaller_vcf) .toList() .set { vcf_list } } - ch_case_info - .combine(vcf_list) - .set { merge_input_vcfs } + if (!params.analysis_type.equals("mito")) { + ch_case_info + .combine(vcf_list) + .set { merge_input_vcfs } - SVDB_MERGE (merge_input_vcfs, ch_svcaller_priority) + SVDB_MERGE (merge_input_vcfs, ch_svcaller_priority) - TABIX_TABIX (SVDB_MERGE.out.vcf) - - ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) - ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) - ch_versions = ch_versions.mix(SVDB_MERGE.out.versions) + TABIX_TABIX (SVDB_MERGE.out.vcf) + ch_merged_svs = SVDB_MERGE.out.vcf + ch_merged_tbi = TABIX_TABIX.out.tbi + ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) + ch_versions = ch_versions.mix(SVDB_MERGE.out.versions) + } emit: - vcf = SVDB_MERGE.out.vcf // channel: [ val(meta), path(vcf)] - tbi = TABIX_TABIX.out.tbi // channel: [ val(meta), path(tbi)] + vcf = ch_merged_svs // channel: [ val(meta), path(vcf)] + tbi = ch_merged_tbi // channel: [ val(meta), path(tbi)] versions = ch_versions // channel: [ path(versions.yml) ] } From 7354184051881d80c3faca5e29398756d7bd873d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:06:39 +0200 Subject: [PATCH 1861/1921] bump version --- CHANGELOG.md | 2 +- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 672c689b..39309232 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). -## 2.2.0dev - Dogmatix [XXXX-XX-XX] +## 2.2.0 - Dogmatix [2024-09-13] ### `Added` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index b8bb11a1..964d29bf 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 db7a3967..b6a62bee 100644 --- a/nextflow.config +++ b/nextflow.config @@ -307,7 +307,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.2.0dev' + version = '2.2.0' doi = '' } From eb0fde7039adde9a2aa8f8ba925a582a1bd386c1 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:44:34 +0200 Subject: [PATCH 1862/1921] vep110-112 --- modules.json | 4 +- .../ensemblvep/filtervep/environment.yml | 4 +- modules/nf-core/ensemblvep/filtervep/main.nf | 5 +- .../ensemblvep/filtervep/tests/main.nf.test | 136 ++++++++++++++++++ .../filtervep/tests/main.nf.test.snap | 26 ++++ .../filtervep/tests/nextflow.config | 10 ++ .../ensemblvep/filtervep/tests/tab.gz.config | 24 ++++ .../ensemblvep/filtervep/tests/tags.yml | 2 + .../ensemblvep/filtervep/tests/vcf.config | 23 +++ .../nf-core/ensemblvep/vep/environment.yml | 4 +- modules/nf-core/ensemblvep/vep/main.nf | 14 +- .../nf-core/ensemblvep/vep/tests/main.nf.test | 40 ++++-- .../ensemblvep/vep/tests/main.nf.test.snap | 26 ++++ .../ensemblvep/vep/tests/nextflow.config | 11 +- 14 files changed, 291 insertions(+), 38 deletions(-) create mode 100644 modules/nf-core/ensemblvep/filtervep/tests/main.nf.test create mode 100644 modules/nf-core/ensemblvep/filtervep/tests/main.nf.test.snap create mode 100644 modules/nf-core/ensemblvep/filtervep/tests/nextflow.config create mode 100644 modules/nf-core/ensemblvep/filtervep/tests/tab.gz.config create mode 100644 modules/nf-core/ensemblvep/filtervep/tests/tags.yml create mode 100644 modules/nf-core/ensemblvep/filtervep/tests/vcf.config create mode 100644 modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap diff --git a/modules.json b/modules.json index 64ceca8d..cc525b80 100644 --- a/modules.json +++ b/modules.json @@ -123,12 +123,12 @@ }, "ensemblvep/filtervep": { "branch": "master", - "git_sha": "214d575774c172062924ad3564b4f66655600730", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", - "git_sha": "76a0696a60c41c57fc5f6040ac31b11ce5d4d8dd", + "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", "installed_by": ["modules"] }, "expansionhunter": { diff --git a/modules/nf-core/ensemblvep/filtervep/environment.yml b/modules/nf-core/ensemblvep/filtervep/environment.yml index d84dc89e..283a45bb 100644 --- a/modules/nf-core/ensemblvep/filtervep/environment.yml +++ b/modules/nf-core/ensemblvep/filtervep/environment.yml @@ -1,7 +1,5 @@ -name: ensemblvep_filtervep channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::ensembl-vep=110.0 + - bioconda::ensembl-vep=112.0 diff --git a/modules/nf-core/ensemblvep/filtervep/main.nf b/modules/nf-core/ensemblvep/filtervep/main.nf index 53abf772..a56bdb83 100644 --- a/modules/nf-core/ensemblvep/filtervep/main.nf +++ b/modules/nf-core/ensemblvep/filtervep/main.nf @@ -4,8 +4,8 @@ process ENSEMBLVEP_FILTERVEP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:110.0--pl5321h2a3209d_0' : - 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:112.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:112.0--pl5321h2a3209d_0' }" input: tuple val(meta), path(input) @@ -47,4 +47,3 @@ process ENSEMBLVEP_FILTERVEP { END_VERSIONS """ } - diff --git a/modules/nf-core/ensemblvep/filtervep/tests/main.nf.test b/modules/nf-core/ensemblvep/filtervep/tests/main.nf.test new file mode 100644 index 00000000..1852e2ab --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/tests/main.nf.test @@ -0,0 +1,136 @@ +nextflow_process { + + name "Test Process ENSEMBLVEP_FILTERVEP" + script "../main.nf" + process "ENSEMBLVEP_FILTERVEP" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "ensemblvep" + tag "ensemblvep/vep" + tag "ensemblvep/filtervep" + tag "ensemblvep/download" + + // Test for filtering VCF file + test("test_ensemblvep_filtervep_vcf") { + config "./vcf.config" + + setup { + run("ENSEMBLVEP_DOWNLOAD") { + script "../../download/main.nf" + + process { + """ + input[0] = Channel.of([ + [id:"112_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) + """ + } + } + run("ENSEMBLVEP_VEP") { + script "../../vep/main.nf" + + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), + [] + ]) + input[1] = params.vep_genome + input[2] = params.vep_species + input[3] = params.vep_cache_version + input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } + input[5] = Channel.value([ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[6] = [] + """ + } + } + } + + when { + process { + """ + input[0] = ENSEMBLVEP_VEP.out.vcf + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert path(process.out.output.get(0).get(1)).readLines().first().contains("##fileformat=VCFv4.2") } + ) + } + } + + // Test for filtering TAB file + test("test_ensemblvep_filtervep_tab_gz") { + config "./tab.gz.config" + + setup { + run("ENSEMBLVEP_DOWNLOAD") { + script "../../download/main.nf" + + process { + """ + input[0] = Channel.of([ + [id:"112_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) + """ + } + } + run("ENSEMBLVEP_VEP") { + script "../../vep/main.nf" + + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), + [] + ]) + input[1] = params.vep_genome + input[2] = params.vep_species + input[3] = params.vep_cache_version + input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } + input[5] = Channel.value([ + [id:"fasta"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[6] = [] + """ + } + } + } + + when { + process { + """ + input[0] = ENSEMBLVEP_VEP.out.tab + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert path(process.out.output.get(0).get(1)).readLines().first().contains("## ENSEMBL VARIANT EFFECT PREDICTOR v112.0") } + ) + } + } +} diff --git a/modules/nf-core/ensemblvep/filtervep/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/filtervep/tests/main.nf.test.snap new file mode 100644 index 00000000..ddaa1dc1 --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/tests/main.nf.test.snap @@ -0,0 +1,26 @@ +{ + "test_ensemblvep_filtervep_vcf": { + "content": [ + [ + "versions.yml:md5,4d3217834548bbe6784e102e9348461d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T13:38:25.18143" + }, + "test_ensemblvep_filtervep_tab_gz": { + "content": [ + [ + "versions.yml:md5,4d3217834548bbe6784e102e9348461d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T13:57:11.471669" + } +} \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/filtervep/tests/nextflow.config b/modules/nf-core/ensemblvep/filtervep/tests/nextflow.config new file mode 100644 index 00000000..aee2e62b --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/tests/nextflow.config @@ -0,0 +1,10 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/ +params { + vep_cache_version = "112" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" +} diff --git a/modules/nf-core/ensemblvep/filtervep/tests/tab.gz.config b/modules/nf-core/ensemblvep/filtervep/tests/tab.gz.config new file mode 100644 index 00000000..0aa5ea75 --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/tests/tab.gz.config @@ -0,0 +1,24 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/ + +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: ENSEMBLVEP_DOWNLOAD { + ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + } + + withName: ENSEMBLVEP_VEP { + ext.args = '--tab' + ext.prefix = { "${meta.id}_vep" } + } + + withName: ENSEMBLVEP_FILTERVEP { + ext.args = '--filter "Feature_type is Transcript"' + ext.suffix = "tab" + } +} diff --git a/modules/nf-core/ensemblvep/filtervep/tests/tags.yml b/modules/nf-core/ensemblvep/filtervep/tests/tags.yml new file mode 100644 index 00000000..b43bf40d --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/tests/tags.yml @@ -0,0 +1,2 @@ +ensemblvep/filtervep: + - "modules/nf-core/ensemblvep/filtervep/**" diff --git a/modules/nf-core/ensemblvep/filtervep/tests/vcf.config b/modules/nf-core/ensemblvep/filtervep/tests/vcf.config new file mode 100644 index 00000000..0b65fe5c --- /dev/null +++ b/modules/nf-core/ensemblvep/filtervep/tests/vcf.config @@ -0,0 +1,23 @@ +/* +======================================================================================== + Nextflow config file for running tests +======================================================================================== +*/ + +process { + + publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" } + + withName: ENSEMBLVEP_DOWNLOAD { + ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + } + + withName: ENSEMBLVEP_VEP { + ext.args = '--vcf' + ext.prefix = { "${meta.id}_vep" } + } + + withName: ENSEMBLVEP_FILTERVEP { + ext.args = '--filter "Feature_type is Transcript"' + } +} diff --git a/modules/nf-core/ensemblvep/vep/environment.yml b/modules/nf-core/ensemblvep/vep/environment.yml index 7a127746..283a45bb 100644 --- a/modules/nf-core/ensemblvep/vep/environment.yml +++ b/modules/nf-core/ensemblvep/vep/environment.yml @@ -1,7 +1,5 @@ -name: ensemblvep_vep channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::ensembl-vep=110.0 + - bioconda::ensembl-vep=112.0 diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index a7fc5ad1..5f33265b 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -4,8 +4,8 @@ process ENSEMBLVEP_VEP { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ensembl-vep:110.0--pl5321h2a3209d_0' : - 'biocontainers/ensembl-vep:110.0--pl5321h2a3209d_0' }" + 'https://depot.galaxyproject.org/singularity/ensembl-vep:112.0--pl5321h2a3209d_0' : + 'biocontainers/ensembl-vep:112.0--pl5321h2a3209d_0' }" input: tuple val(meta), path(vcf), path(custom_extra_files) @@ -20,7 +20,7 @@ process ENSEMBLVEP_VEP { tuple val(meta), path("*.vcf.gz") , optional:true, emit: vcf tuple val(meta), path("*.tab.gz") , optional:true, emit: tab tuple val(meta), path("*.json.gz") , optional:true, emit: json - path "*.summary.html" , optional:true, emit: report + path "*.html" , optional:true, emit: report path "versions.yml" , emit: versions when: @@ -57,10 +57,10 @@ process ENSEMBLVEP_VEP { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.vcf.gz - touch ${prefix}.tab.gz - touch ${prefix}.json.gz - touch ${prefix}.summary.html + echo "" | gzip > ${prefix}.vcf.gz + echo "" | gzip > ${prefix}.tab.gz + echo "" | gzip > ${prefix}.json.gz + touch ${prefix}_summary.html cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test b/modules/nf-core/ensemblvep/vep/tests/main.nf.test index f072dcab..e68fff3c 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test @@ -1,26 +1,31 @@ nextflow_process { name "Test Process ENSEMBLVEP_VEP" - script "modules/nf-core/ensemblvep/vep/main.nf" + script "../main.nf" process "ENSEMBLVEP_VEP" config "./nextflow.config" + tag "modules" tag "modules_nfcore" tag "ensemblvep" tag "ensemblvep/vep" tag "ensemblvep/download" - test("test_ensemblvep_vep_fasta_vcf") { - config "./vcf.config" setup { run("ENSEMBLVEP_DOWNLOAD") { script "../../download/main.nf" + process { """ - input[0] = Channel.of([[id:"${params.vep_cache_version}_${params.vep_genome}"], params.vep_genome, params.vep_species, params.vep_cache_version]) + input[0] = Channel.of([ + [id:"112_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) """ } } @@ -31,7 +36,7 @@ nextflow_process { """ input[0] = Channel.of([ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), [] ]) input[1] = params.vep_genome @@ -40,7 +45,7 @@ nextflow_process { input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } input[5] = Channel.value([ [id:"fasta"], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) input[6] = [] """ @@ -49,23 +54,29 @@ nextflow_process { then { assertAll( - {assert process.success}, - {assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2")} + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert path(process.out.vcf.get(0).get(1)).linesGzip.contains("##fileformat=VCFv4.2") } ) } } test("test_ensemblvep_vep_fasta_tab_gz") { - config "./tab.gz.config" setup { run("ENSEMBLVEP_DOWNLOAD") { script "../../download/main.nf" + process { """ - input[0] = Channel.of([[id:"${params.vep_cache_version}_${params.vep_genome}"], params.vep_genome, params.vep_species, params.vep_cache_version]) + input[0] = Channel.of([ + [id:"112_WBcel235"], + params.vep_genome, + params.vep_species, + params.vep_cache_version + ]) """ } } @@ -76,7 +87,7 @@ nextflow_process { """ input[0] = Channel.of([ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), [] ]) input[1] = params.vep_genome @@ -85,7 +96,7 @@ nextflow_process { input[4] = ENSEMBLVEP_DOWNLOAD.out.cache.map{ meta, cache -> [cache] } input[5] = Channel.value([ [id:"fasta"], - file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) input[6] = [] """ @@ -94,8 +105,9 @@ nextflow_process { then { assertAll( - {assert process.success}, - {assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v110.0")} + { assert process.success }, + { assert snapshot(process.out.versions).match() }, + { assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v112.0") } ) } } diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap new file mode 100644 index 00000000..1c4c0e4e --- /dev/null +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap @@ -0,0 +1,26 @@ +{ + "test_ensemblvep_vep_fasta_tab_gz": { + "content": [ + [ + "versions.yml:md5,d06f1eb60f534489026d682eb3aa5559" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T10:15:18.228927" + }, + "test_ensemblvep_vep_fasta_vcf": { + "content": [ + [ + "versions.yml:md5,d06f1eb60f534489026d682eb3aa5559" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-02T10:14:50.193861" + } +} \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/vep/tests/nextflow.config b/modules/nf-core/ensemblvep/vep/tests/nextflow.config index cfaef733..9aa48164 100644 --- a/modules/nf-core/ensemblvep/vep/tests/nextflow.config +++ b/modules/nf-core/ensemblvep/vep/tests/nextflow.config @@ -1,13 +1,12 @@ params { - vep_cache_version = "110" - vep_genome = "WBcel235" - vep_species = "caenorhabditis_elegans" + vep_cache_version = "112" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" } process { - withName: ENSEMBLVEP_DOWNLOAD { - ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + ext.args = '--AUTO c --CONVERT --NO_BIOPERL --NO_HTSLIB --NO_TEST --NO_UPDATE' + ext.prefix = { "${params.vep_cache_version}_${params.vep_genome}" } } - } From 0f41135bb9d6df32b46640d92eb27e544c3e0f16 Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:46:21 +0200 Subject: [PATCH 1863/1921] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39309232..79c1b7ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Update default vep container from v110-v112 [#609](https://github.com/nf-core/raredisease/pull/609) - Default index for vcfanno extra annotation files from tbi to csi [#606](https://github.com/nf-core/raredisease/pull/606) - Updated the model for Sentieon DNAScope to v1.1 [#601](https://github.com/nf-core/raredisease/pull/601) - bwameme can no longer be used to align mitochondrial reads [#600](https://github.com/nf-core/raredisease/pull/600) @@ -70,6 +71,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | Tool | Old version | New version | | ----------- | ----------- | ----------- | | Deepvariant | 1.5.0 | 1.6.1 | +| ensemblvep | 110 | 112 | ## 2.1.0 - Obelix [2024-05-29] From ef73852f01b44edf67b275e6e80f7bd8e0462f36 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:34:14 +0200 Subject: [PATCH 1864/1921] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79c1b7ca..0bf1e15b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,7 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Fixed` - Issues that cropped up when `aligner` and `mt_aligner` were different [#605](https://github.com/nf-core/raredisease/pull/605) -- Update docs to show 'vep_plugin_files' as a mandatory parameter for SNV annotation [#594](https://github.com/nf-core/raredisease/issues/593) +- Update docs to show 'vep_plugin_files' as a mandatory parameter for SNV annotation [#594](https://github.com/nf-core/raredisease/pull/594) - Error in SVDB merge when only a single SV caller is run [#586](https://github.com/nf-core/raredisease/pull/586) - Errors due to misplaced version statements [#578](https://github.com/nf-core/raredisease/pull/578) - Stub crashes due to peddy reported in [#566](https://github.com/nf-core/raredisease/issues/566) [#576](https://github.com/nf-core/raredisease/pull/576] From d540dc7359e90b8a983fe12e328c0a436b0ffe7a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:34:34 +0200 Subject: [PATCH 1865/1921] Apply suggestions from code review Co-authored-by: Felix Lenner <52530259+fellen31@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bf1e15b..dddb1aa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - A new parameter `scatter_count` to control how many interval files are created from a genome (used to parallelize annotations) [#585](https://github.com/nf-core/raredisease/pull/585) - Print warning messages if user intends to perform ranking when there are no affected samples [#579](https://github.com/nf-core/raredisease/pull/579) - Two new parameters `skip_repeat_annotation` and `skip_repeat_calling` to skip calling and annotation of repeat expansions [#574](https://github.com/nf-core/raredisease/pull/574) -- A new parameter `skip_smncopynumbercaller` to skip smncopynumbercaller module[#574](https://github.com/nf-core/raredisease/pull/574) +- A new parameter `skip_smncopynumbercaller` to skip smncopynumbercaller module [#574](https://github.com/nf-core/raredisease/pull/574) - A new parameter `skip_sv_calling` to skip sv calling workflow [#572](https://github.com/nf-core/raredisease/pull/572) - Two new parameters `skip_snv_calling` and `skip_repeat_analysis` to skip snv calling and repeat analysis respectively [#571](https://github.com/nf-core/raredisease/pull/571) - Two new parameters `mbuffer_mem` and `samtools_sort_threads` to control resources given to mbuffer and samtools sort in the bwameme module [#570](https://github.com/nf-core/raredisease/pull/570) From 8efb0d3d47b52811018fbf3931d821ed35692501 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:34:54 +0200 Subject: [PATCH 1866/1921] Update conf/modules/prepare_references.config Co-authored-by: Felix Lenner <52530259+fellen31@users.noreply.github.com> --- conf/modules/prepare_references.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 401513ab..025172fe 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -101,7 +101,7 @@ process { } withName: '.*PREPARE_REFERENCES:TABIX_BGZIPINDEX_VCFANNOEXTRA' { - ext.args2 = '-C' + ext.args2 = '--csi' } withName: '.*PREPARE_REFERENCES:GATK_BILT' { From 8d7d36ea147e7849f0f9cc9c0bbaf6af94d63f8a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:37:18 +0200 Subject: [PATCH 1867/1921] Update nextflow_schema.json --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index bf20ae91..3ccdc1f6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -627,14 +627,14 @@ "aligner": { "type": "string", "default": "bwamem2", - "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", + "description": "Specifies the alignment algorithm to use - available options are 'bwamem2', 'bwa', 'bwameme' and 'sentieon'.", "fa_icon": "fas fa-align-center", "enum": ["bwa", "bwamem2", "bwameme", "sentieon"] }, "mt_aligner": { "type": "string", "default": "bwamem2", - "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", + "description": "Specifies the alignment algorithm to use - available options are 'bwamem2', 'bwa' and 'sentieon'.", "fa_icon": "fas fa-align-center", "enum": ["bwa", "bwamem2", "sentieon"] }, From 56b6b48feda1d31bd6c7dc61ab3488eb5304ba49 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:38:01 +0200 Subject: [PATCH 1868/1921] Update docs/usage.md Co-authored-by: Felix Lenner <52530259+fellen31@users.noreply.github.com> --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 4bbff0b5..21e16565 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -108,7 +108,7 @@ nf-core/raredisease will auto-detect whether a sample is single- or paired-end u | `lane` | Used to generate separate channels during the alignment step. It is of string type, and we recommend using a combination of flowcell and lane to distinguish between different runs of the same sample. | | `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `sex` | Sex (1=male; 2=female; for unknown sex use 0 or other). | +| `sex` | Sex (1=male; 2=female; for unknown sex use 0 or 'other'). | | `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | | `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | | `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | From dc568ff3f706528a3425248df4e74ff815007973 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:38:08 +0200 Subject: [PATCH 1869/1921] Update docs/output.md Co-authored-by: Felix Lenner <52530259+fellen31@users.noreply.github.com> --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 508b115d..d7f608b7 100644 --- a/docs/output.md +++ b/docs/output.md @@ -101,7 +101,7 @@ 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 bwameme and bwa 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. +[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, bwameme and bwa 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 From 44385373246a674005f81a0faf3df5030abf33f0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:38:18 +0200 Subject: [PATCH 1870/1921] Update subworkflows/local/align.nf Co-authored-by: Felix Lenner <52530259+fellen31@users.noreply.github.com> --- subworkflows/local/align.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 29c7f5da..b332c84c 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -26,7 +26,7 @@ workflow ALIGN { ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] val_mbuffer_mem // integer: [mandatory] memory in megabytes val_platform // string: [mandatory] illumina or a different technology - val_sort_threads // integer: [mandatory] memory in megabytes + val_sort_threads // integer: [mandatory] number of sorting threads main: ch_bwamem2_bam = Channel.empty() From 7cec124e35a75e536846c55393300077d333df48 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:39:52 +0200 Subject: [PATCH 1871/1921] Update annotate_genome_snvs.nf --- subworkflows/local/annotate_genome_snvs.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_genome_snvs.nf b/subworkflows/local/annotate_genome_snvs.nf index 51d5a64c..396e2614 100644 --- a/subworkflows/local/annotate_genome_snvs.nf +++ b/subworkflows/local/annotate_genome_snvs.nf @@ -29,7 +29,7 @@ workflow ANNOTATE_GENOME_SNVS { ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_vcfanno_extra // channel: [mandatory] [ [path(vcf),path(index)] ] - ch_vcfanno_resources // channel: [mandatory] [ [path(vcf),path(index),...] ] + ch_vcfanno_resources // channel: [mandatory] [ [path(vcf1),path(index1),...,path(vcfn),path(indexn)] ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 From 36ab790f8d110584ea7ea2255576b276a782b1a0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:43:28 +0200 Subject: [PATCH 1872/1921] Update annotate_mt_snvs.nf --- subworkflows/local/annotate_mt_snvs.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index bb5dca6b..262e72c4 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -21,7 +21,7 @@ workflow ANNOTATE_MT_SNVS { ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_vcfanno_extra // channel: [mandatory] [ [path(vcf),path(index).....] ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] - ch_vcfanno_resources // channel: [mandatory] [ [path(vcf),path(index),.....] ] + ch_vcfanno_resources // channel: [mandatory] [ [path(vcf1),path(index1),...,path(vcfn),path(indexn)] ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] 107 From fbbd1eacf518e5bf38ae6700ffbb82351255e54d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:44:12 +0200 Subject: [PATCH 1873/1921] Update annotate_mt_snvs.nf --- subworkflows/local/annotate_mt_snvs.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_mt_snvs.nf b/subworkflows/local/annotate_mt_snvs.nf index 262e72c4..d2a82879 100644 --- a/subworkflows/local/annotate_mt_snvs.nf +++ b/subworkflows/local/annotate_mt_snvs.nf @@ -19,7 +19,7 @@ workflow ANNOTATE_MT_SNVS { ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_vcfanno_extra // channel: [mandatory] [ [path(vcf),path(index).....] ] + ch_vcfanno_extra // channel: [mandatory] [ [path(vcf),path(index)] ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_resources // channel: [mandatory] [ [path(vcf1),path(index1),...,path(vcfn),path(indexn)] ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] From fb77d3f84bb6b0d1440635fc268f03a696f2d45e Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:47:24 +0200 Subject: [PATCH 1874/1921] fix lint --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 21e16565..0304c46a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -108,7 +108,7 @@ nf-core/raredisease will auto-detect whether a sample is single- or paired-end u | `lane` | Used to generate separate channels during the alignment step. It is of string type, and we recommend using a combination of flowcell and lane to distinguish between different runs of the same sample. | | `fastq_1` | Absolute path to FASTQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Absolute path to FASTQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | -| `sex` | Sex (1=male; 2=female; for unknown sex use 0 or 'other'). | +| `sex` | Sex (1=male; 2=female; for unknown sex use 0 or 'other'). | | `phenotype` | Affected status of patient (0 = missing; 1=unaffected; 2=affected). | | `paternal_id` | Sample ID of the father, can be blank if the father isn't part of the analysis or for samples other than the proband. | | `maternal_id` | Sample ID of the mother, can be blank if the mother isn't part of the analysis or for samples other than the proband. | From a87672e117c90fa98fe1c7e199439d5e45533afa Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:38:32 +0200 Subject: [PATCH 1875/1921] annotate --- workflows/raredisease.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 80e51572..ab4223ad 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -568,7 +568,7 @@ workflow RAREDISEASE { // // ANNOTATE MT SNVs // - if (!params.skip_mt_annotation && (params.run_mt_for_wes || params.analysis_type.equals("wgs"))) { + if (!params.skip_mt_annotation && (params.run_mt_for_wes || params.analysis_type.matches("wgs|mito"))) { ANNOTATE_MT_SNVS ( CALL_SNV.out.mt_vcf, From 6dacbb6acf52aaef500f5cbda9bcba21a60862d3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:49:54 +0200 Subject: [PATCH 1876/1921] bumpversion --- CHANGELOG.md | 12 ++++++++++++ assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dddb1aa8..a1451e1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ 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). +## 2.3.0dev - Getafix [xxxx-xx-xx] + +### `Added` + +### `Changed` + +### `Fixed` + +### Parameters + +### Tool updates + ## 2.2.0 - Dogmatix [2024-09-13] ### `Added` diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 964d29bf..b8bb11a1 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 b6a62bee..33e4c551 100644 --- a/nextflow.config +++ b/nextflow.config @@ -307,7 +307,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '2.2.0' + version = '2.3.0dev' doi = '' } From 505c2b816842c6de891cce0824c918cfc4df2474 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:25:01 +0200 Subject: [PATCH 1877/1921] align mt reads to mt and not genome --- conf/modules/prepare_references.config | 10 +++---- subworkflows/local/align.nf | 17 +++++++----- subworkflows/local/call_snv.nf | 19 +++++++------ subworkflows/local/prepare_references.nf | 34 +++++++++++++++++------- workflows/raredisease.nf | 19 ++++++++++--- 5 files changed, 68 insertions(+), 31 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 2793ec93..fd0e40f1 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -42,15 +42,15 @@ process { ext.when = {!params.bwa && (params.aligner == "sentieon" || params.mt_aligner == "sentieon")} } - withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT.*' { ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) && params.mt_aligner == "bwamem2"} } - withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT.*' { ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) && params.mt_aligner == "sentieon"} } - withName: '.*PREPARE_REFERENCES:BWA_INDEX_MT_SHIFT' { + withName: '.*PREPARE_REFERENCES:BWA_INDEX_MT.*' { ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) && params.mt_aligner == "bwa"} } @@ -67,7 +67,7 @@ process { ext.when = {!params.mt_fasta} } - withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_MT_SHIFT' { + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_MT' { ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) } } @@ -79,7 +79,7 @@ process { ext.args = { "--interval-file-name ${meta.id}_mt" } } - withName: '.*PREPARE_REFERENCES:GATK_SD_MT_SHIFT' { + withName: '.*PREPARE_REFERENCES:GATK_SD_MT' { ext.when = { (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes)} } diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index d08b1cb5..82f77f31 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -19,11 +19,16 @@ workflow ALIGN { ch_genome_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] ch_genome_bwamemeindex // channel: [mandatory] [ val(meta), path(index) ] ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + ch_mt_bwaindex // channel: [mandatory] [ val(meta), path(index) ] + ch_mt_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] + ch_mt_dictionary // channel: [mandatory] [ val(meta), path(dict) ] + ch_mt_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_mt_fasta // channel: [mandatory] [ val(meta), path(fasta) ] 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_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_mtshift_fasta // channel: [mandatory] [ val(meta), path(fasta) ] val_mbuffer_mem // integer: [mandatory] memory in megabytes val_platform // string: [mandatory] illumina or a different technology val_sort_threads // integer: [mandatory] memory in megabytes @@ -94,11 +99,11 @@ workflow ALIGN { ALIGN_MT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, - ch_genome_bwaindex, - ch_genome_bwamem2index, - ch_genome_fasta, - ch_genome_dictionary, - ch_genome_fai + ch_mt_bwaindex, + ch_mt_bwamem2index, + ch_mt_fasta, + ch_mt_dictionary, + ch_mt_fai ) ALIGN_MT_SHIFT ( diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 23508848..8060e0cc 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -19,9 +19,12 @@ workflow CALL_SNV { ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_mt_intervals // channel: [optional] [ path(interval_list) ] - ch_mtshift_fasta // channel: [optional] [ val(meta), path(fasta) ] - ch_mtshift_fai // channel: [optional] [ val(meta), path(fai) ] + ch_mt_dictionary // channel: [optional] [ val(meta), path(dict) ] + ch_mt_fai // channel: [optional] [ val(meta), path(fai) ] + ch_mt_fasta // channel: [optional] [ val(meta), path(fasta) ] ch_mtshift_dictionary // channel: [optional] [ val(meta), path(dict) ] + ch_mtshift_fai // channel: [optional] [ val(meta), path(fai) ] + ch_mtshift_fasta // channel: [optional] [ val(meta), path(fasta) ] ch_mtshift_intervals // channel: [optional] [ path(interval_list) ] ch_mtshift_backchain // channel: [mandatory] [ val(meta), path(back_chain) ] ch_dbsnp // channel: [optional] [ val(meta), path(vcf) ] @@ -100,9 +103,9 @@ workflow CALL_SNV { if (params.analysis_type.matches("wgs|mito") || params.run_mt_for_wes) { CALL_SNV_MT( ch_mt_bam_bai, - ch_genome_fasta, - ch_genome_fai, - ch_genome_dictionary, + ch_mt_fasta, + ch_mt_fai, + ch_mt_dictionary, ch_mt_intervals ) @@ -117,9 +120,9 @@ workflow CALL_SNV { POSTPROCESS_MT_CALLS( CALL_SNV_MT.out.vcf, CALL_SNV_MT_SHIFT.out.vcf, - ch_genome_fasta, - ch_genome_dictionary, - ch_genome_fai, + ch_mt_fasta, + ch_mt_dictionary, + ch_mt_fai, ch_mtshift_backchain, ch_case_info, ch_foundin_header, diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 8c39c614..4af09860 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -3,22 +3,25 @@ // include { BWA_INDEX as BWA_INDEX_GENOME } from '../../modules/nf-core/bwa/index/main' +include { BWA_INDEX as BWA_INDEX_MT } from '../../modules/nf-core/bwa/index/main' include { BWA_INDEX as BWA_INDEX_MT_SHIFT } from '../../modules/nf-core/bwa/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_GENOME } from '../../modules/nf-core/bwamem2/index/main' +include { BWAMEM2_INDEX as BWAMEM2_INDEX_MT } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEM2_INDEX as BWAMEM2_INDEX_MT_SHIFT } from '../../modules/nf-core/bwamem2/index/main' include { BWAMEME_INDEX as BWAMEME_INDEX_GENOME } from '../../modules/nf-core/bwameme/index/main' include { CAT_CAT as CAT_CAT_BAIT } from '../../modules/nf-core/cat/cat/main' include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modules/nf-core/gatk4/bedtointervallist/main' 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_CREATESEQUENCEDICTIONARY as GATK_SD_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 { RTGTOOLS_FORMAT } from '../../modules/nf-core/rtgtools/format/main' 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_MT_SHIFT } from '../../modules/nf-core/samtools/faidx/main' +include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_MT } from '../../modules/nf-core/samtools/faidx/main' include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_GENOME } from '../../modules/nf-core/sentieon/bwaindex/main' +include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_MT } from '../../modules/nf-core/sentieon/bwaindex/main' include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_MT_SHIFT } from '../../modules/nf-core/sentieon/bwaindex/main' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as TABIX_BGZIPINDEX_VCFANNOEXTRA } from '../../modules/nf-core/tabix/bgziptabix/main' @@ -66,11 +69,16 @@ workflow PREPARE_REFERENCES { // MT genome indices SAMTOOLS_EXTRACT_MT(ch_genome_fasta, ch_fai) ch_mt_fasta_in = Channel.empty().mix(ch_mt_fasta, SAMTOOLS_EXTRACT_MT.out.fa).collect() - SAMTOOLS_FAIDX_MT_SHIFT(ch_mt_fasta_in, [[],[]]) - GATK_SD_MT_SHIFT(ch_mt_fasta_in) - GATK_SHIFTFASTA(ch_mt_fasta_in, SAMTOOLS_FAIDX_MT_SHIFT.out.fai, GATK_SD_MT_SHIFT.out.dict) + SAMTOOLS_FAIDX_MT(ch_mt_fasta_in, [[],[]]) + GATK_SD_MT(ch_mt_fasta_in) + GATK_SHIFTFASTA(ch_mt_fasta_in, SAMTOOLS_FAIDX_MT.out.fai, GATK_SD_MT.out.dict) // MT alignment indices + BWAMEM2_INDEX_MT(ch_mt_fasta_in) + BWA_INDEX_MT(ch_mt_fasta_in) + SENTIEON_BWAINDEX_MT(ch_mt_fasta_in) + ch_bwa_mt = Channel.empty().mix(SENTIEON_BWAINDEX_MT.out.index, BWA_INDEX_MT.out.index).collect() + BWAMEM2_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) BWA_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) SENTIEON_BWAINDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) @@ -140,9 +148,12 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(GATK_SD.out.versions) ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) ch_versions = ch_versions.mix(SAMTOOLS_EXTRACT_MT.out.versions) - ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_MT_SHIFT.out.versions) - ch_versions = ch_versions.mix(GATK_SD_MT_SHIFT.out.versions) + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_MT.out.versions) + ch_versions = ch_versions.mix(GATK_SD_MT.out.versions) ch_versions = ch_versions.mix(GATK_SHIFTFASTA.out.versions) + ch_versions = ch_versions.mix(BWAMEM2_INDEX_MT.out.versions) + ch_versions = ch_versions.mix(BWA_INDEX_MT.out.versions) + ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_MT.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(BWA_INDEX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_MT_SHIFT.out.versions) @@ -167,11 +178,16 @@ workflow PREPARE_REFERENCES { genome_dict = ch_dict // channel: [ val(meta), path(dict) ] sdf = RTGTOOLS_FORMAT.out.sdf // channel: [ val (meta), path(intervals) ] mt_intervals = ch_shiftfasta_mtintervals.intervals.collect() // channel: [ path(intervals) ] + mt_bwa_index = ch_bwa_mt // channel: [ val(meta), path(index) ] + mt_bwamem2_index = BWAMEM2_INDEX_MT.out.index.collect() // channel: [ val(meta), path(index) ] + mt_dict = GATK_SD_MT.out.dict.collect() // channel: [ val(meta), path(dict) ] + mt_fasta = ch_mt_fasta_in.collect() // channel: [ val(meta), path(fasta) ] + mt_fai = SAMTOOLS_FAIDX_MT.out.fai.collect() // channel: [ val(meta), path(fai) ] 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_dict = GATK_SHIFTFASTA.out.dict // channel: [ val(meta), path(dict) ] 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_fasta = GATK_SHIFTFASTA.out.shift_fa.collect() // channel: [ val(meta), path(fasta) ] mtshift_bwa_index = ch_bwa_mtshift // channel: [ val(meta), path(index) ] mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ab4223ad..c4fda9d1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -271,6 +271,11 @@ workflow RAREDISEASE { ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).map {it -> [[id:it[0].simpleName], it]}.collect() : Channel.value([[:],[]]) ch_mt_intervals = ch_references.mt_intervals + ch_mt_bwaindex = ch_references.mt_bwa_index + ch_mt_bwamem2index = ch_references.mt_bwamem2_index + ch_mt_dictionary = ch_references.mt_dict + ch_mt_fai = ch_references.mt_fai + ch_mt_fasta = ch_references.mt_fasta ch_mtshift_backchain = ch_references.mtshift_backchain ch_mtshift_bwaindex = ch_references.mtshift_bwa_index ch_mtshift_bwamem2index = ch_references.mtshift_bwamem2_index @@ -412,11 +417,16 @@ workflow RAREDISEASE { ch_genome_bwamem2index, ch_genome_bwamemeindex, ch_genome_dictionary, + ch_mt_bwaindex, + ch_mt_bwamem2index, + ch_mt_dictionary, + ch_mt_fai, + ch_mt_fasta, ch_mtshift_bwaindex, ch_mtshift_bwamem2index, - ch_mtshift_fasta, ch_mtshift_dictionary, ch_mtshift_fai, + ch_mtshift_fasta, params.mbuffer_mem, params.platform, params.samtools_sort_threads @@ -493,9 +503,12 @@ workflow RAREDISEASE { ch_genome_fai, ch_genome_dictionary, ch_mt_intervals, - ch_mtshift_fasta, - ch_mtshift_fai, + ch_mt_dictionary, + ch_mt_fai, + ch_mt_fasta, ch_mtshift_dictionary, + ch_mtshift_fai, + ch_mtshift_fasta, ch_mtshift_intervals, ch_mtshift_backchain, ch_dbsnp, From 9575a7f6f8efc21e870beecbb6774f0f290eb37e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:31:55 +0200 Subject: [PATCH 1878/1921] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1451e1c..b9fb7e17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- A new analysis option `mito` to call and annotate only mitochondrial variants [#608](https://github.com/nf-core/raredisease/pull/608) + ### `Changed` ### `Fixed` From 2bb4586481b10378be60801094edeee12727cdb2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:52:31 +0200 Subject: [PATCH 1879/1921] include filter --- conf/modules/generate_clinical_set.config | 8 +++++++- subworkflows/local/generate_clinical_set.nf | 15 ++++++++++++--- workflows/raredisease.nf | 9 ++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/conf/modules/generate_clinical_set.config b/conf/modules/generate_clinical_set.config index de4d1b27..cb183ad1 100644 --- a/conf/modules/generate_clinical_set.config +++ b/conf/modules/generate_clinical_set.config @@ -50,10 +50,16 @@ process { process { withName: '.*:GENERATE_CLINICAL_SET_MT:ENSEMBLVEP_FILTERVEP' { ext.when = !params.skip_vep_filter - ext.prefix = { "${meta.id}_mt_${meta.set}" } + ext.prefix = { "${meta.id}_mt_filtervep_${meta.set}" } ext.args = { "--filter \"HGNC_ID in ${feature_file}\"" } } + withName: '.*:GENERATE_CLINICAL_SET_MT:BCFTOOLS_FILTER' { + ext.when = !params.skip_vep_filter + ext.prefix = { "${meta.id}_mt_${meta.set}" } + ext.args = { "-Oz -i 'AF>0.05'" } + } + withName: '.*:GENERATE_CLINICAL_SET_MT:TABIX_BGZIP' { ext.when = !params.skip_vep_filter ext.prefix = { "${meta.id}_mt_${meta.set}" } diff --git a/subworkflows/local/generate_clinical_set.nf b/subworkflows/local/generate_clinical_set.nf index 3e71e6b0..e4b94d8c 100644 --- a/subworkflows/local/generate_clinical_set.nf +++ b/subworkflows/local/generate_clinical_set.nf @@ -5,11 +5,13 @@ include { ENSEMBLVEP_FILTERVEP } from '../../modules/nf-core/ensemblvep/filtervep' include { TABIX_BGZIP } from '../../modules/nf-core/tabix/bgzip' include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix' +include { BCFTOOLS_FILTER } from '../../modules/nf-core/bcftools/filter' workflow GENERATE_CLINICAL_SET { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] ch_hgnc_ids // channel: [mandatory] [ val(hgnc_ids) ] + val_ismt // value: if mitochondria, set to true main: ch_versions = Channel.empty() @@ -28,16 +30,23 @@ workflow GENERATE_CLINICAL_SET { .output .set { ch_filtervep_out } - TABIX_BGZIP( ch_filtervep_out ) + if (val_ismt) { + BCFTOOLS_FILTER (ch_filtervep_out) + ch_clinical = BCFTOOLS_FILTER.out.vcf + ch_versions = ch_versions.mix( BCFTOOLS_FILTER.out.versions ) + } else { + TABIX_BGZIP( ch_filtervep_out ) + ch_clinical = TABIX_BGZIP.out.output + ch_versions = ch_versions.mix( TABIX_BGZIP.out.versions ) + } ch_clin_research_vcf.research - .mix( TABIX_BGZIP.out.output ) + .mix( ch_clinical ) .set { ch_clin_research_split } TABIX_TABIX( ch_clin_research_split ) ch_versions = ch_versions.mix( ENSEMBLVEP_FILTERVEP.out.versions ) - ch_versions = ch_versions.mix( TABIX_BGZIP.out.versions ) ch_versions = ch_versions.mix( TABIX_TABIX.out.versions ) emit: diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index c4fda9d1..309f87d2 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -550,7 +550,8 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_SNV( ch_snv_annotate.vcf_ann, - ch_hgnc_ids + ch_hgnc_ids, + false ) ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SNV.out.versions) @@ -602,7 +603,8 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_MT( ch_mt_annotate.vcf_ann, - ch_hgnc_ids + ch_hgnc_ids, + true ) ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_MT.out.versions) @@ -677,7 +679,8 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_SV( ch_sv_annotate.vcf_ann, - ch_hgnc_ids + ch_hgnc_ids, + false ) ch_versions = ch_versions.mix(GENERATE_CLINICAL_SET_SV.out.versions) From 537de87ca4859e5a2e33d6954c379367193bc16d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:05:23 +0200 Subject: [PATCH 1880/1921] update usage docs --- docs/usage.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 0304c46a..70dbe8d4 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) @@ -205,7 +205,7 @@ The mandatory and optional parameters for each category are tabulated below. 1Default variant caller is DeepVariant, but you have the option to use Sentieon as well.
    2These parameters are only used by Sentieon.
    -3Default is WGS, but you have the option to choose WES as well.
    +3Default is `WGS`, but you have the option to choose `WES` and `mito` as well.
    4This parameter is only used by Deepvariant.
    ##### 5. Variant calling - Structural variants From 099a566443660e9b0fd33927ff640c77336d6af5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:20:07 +0200 Subject: [PATCH 1881/1921] prettier --- docs/usage.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 70dbe8d4..c67e488b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -10,24 +10,24 @@ Table of contents: - [Run nf-core/raredisease with test data](#run-nf-coreraredisease-with-test-data) - [Updating the pipeline](#updating-the-pipeline) - [Run nf-core/raredisease with your data](#run-nf-coreraredisease-with-your-data) - - [Samplesheet](#samplesheet) - - [Reference files and parameters](#reference-files-and-parameters) - - [1. Alignment](#1-alignment) - - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) - - [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. 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 annotation](#9-mitochondrial-annotation) - - [10. Mobile element calling](#10-mobile-element-calling) - - [11. Mobile element annotation](#11-mobile-element-annotation) - - [12. Variant evaluation](#12-variant-evaluation) - - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) - - [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) + - [Samplesheet](#samplesheet) + - [Reference files and parameters](#reference-files-and-parameters) + - [1. Alignment](#1-alignment) + - [2. QC stats from the alignment files](#2-qc-stats-from-the-alignment-files) + - [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. 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 annotation](#9-mitochondrial-annotation) + - [10. Mobile element calling](#10-mobile-element-calling) + - [11. Mobile element annotation](#11-mobile-element-annotation) + - [12. Variant evaluation](#12-variant-evaluation) + - [13. Prepare data for CNV visualisation in Gens](#13-prepare-data-for-cnv-visualisation-in-gens) + - [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) - [Best practices](#best-practices) - [Core Nextflow arguments](#core-nextflow-arguments) - [`-profile`](#-profile) From a57f931e76815c74b9e7ab9536dda2a39f113b18 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:42:07 +0200 Subject: [PATCH 1882/1921] update docs --- docs/output.md | 4 ++-- subworkflows/local/call_structural_variants.nf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index d7f608b7..53f9a274 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter_vep](#filter_vep) + - [Filter\_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) @@ -316,7 +316,7 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. Output files - `call_sv/genome` - - `_sv_merge.vcf.gz`: file containing the merged variant calls. + - `_sv_merge.vcf.gz`: file containing the merged variant calls. As of version 2.3.0, this file also contains mitochondrial structural variants. - `_sv_merge.vcf.gz.tbi`: index of the file containing the merged variant calls.
    diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index aca78e79..c7d251b9 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -113,7 +113,7 @@ workflow CALL_STRUCTURAL_VARIANTS { } emit: - vcf = ch_merged_svs // channel: [ val(meta), path(vcf)] + vcf = ch_merged_svs // channel: [ val(meta), path(vcf)] tbi = ch_merged_tbi // channel: [ val(meta), path(tbi)] - versions = ch_versions // channel: [ path(versions.yml) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 877cb317ed9f2380652deeaafef3d30393015b73 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:56:49 +0200 Subject: [PATCH 1883/1921] lint --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 53f9a274..1be5e4d5 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter\_vep](#filter_vep) + - [Filter_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) From c1ddf4c3e203a55bfb1b87d4d0239d70f77709c4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:23:02 +0200 Subject: [PATCH 1884/1921] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9fb7e17..b87230e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` +- Report only variants above 5% heteroplasmy in the clinical vcf file for mitochondria [#616](https://github.com/nf-core/raredisease/pull/616) + ### `Fixed` ### Parameters From 7d5e14e536c6412069cf790fe280cb7a4ee44fb5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:28:41 +0200 Subject: [PATCH 1885/1921] fix declaration error --- workflows/raredisease.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 309f87d2..88b75a3a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -741,7 +741,8 @@ workflow RAREDISEASE { GENERATE_CLINICAL_SET_ME( ANNOTATE_MOBILE_ELEMENTS.out.vcf, - ch_hgnc_ids + ch_hgnc_ids, + false ) ch_versions = ch_versions.mix( GENERATE_CLINICAL_SET_ME.out.versions ) From 2a505dfb2093c35ef1a5e8092b30f8898b14aab3 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Tue, 24 Sep 2024 17:14:58 +0200 Subject: [PATCH 1886/1921] allow vep 112 --- CHANGELOG.md | 1 + nextflow.config | 2 +- nextflow_schema.json | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9fb7e17..93c25a28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` ### `Fixed` +- Allow for VEP version 112 to be used and set it to default [#617](https://github.com/nf-core/raredisease/pull/617) ### Parameters diff --git a/nextflow.config b/nextflow.config index 33e4c551..3d0893b5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -66,7 +66,7 @@ params { variant_caller = 'deepvariant' // variant annotation - vep_cache_version = 110 + vep_cache_version = 112 // sentieon Defaults ml_model = '' diff --git a/nextflow_schema.json b/nextflow_schema.json index 4c4a1acf..06d94d0f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -742,10 +742,10 @@ }, "vep_cache_version": { "type": "integer", - "default": 110, + "default": 112, "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", "fa_icon": "fas fa-align-center", - "enum": [107, 110] + "enum": [107, 110, 112] } } }, From 1021df205fbf3db36f7e9575d2249b61fc2a4696 Mon Sep 17 00:00:00 2001 From: jemten Date: Tue, 24 Sep 2024 17:23:29 +0200 Subject: [PATCH 1887/1921] prettier --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93c25a28..b9670dda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Changed` ### `Fixed` + - Allow for VEP version 112 to be used and set it to default [#617](https://github.com/nf-core/raredisease/pull/617) ### Parameters From 69eb6a1ea50da6cb8555116f7307dab9f642aa67 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:54:17 +0200 Subject: [PATCH 1888/1921] update docs --- docs/output.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 1be5e4d5..1abe46b3 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter_vep](#filter_vep) + - [Filter\_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) @@ -529,7 +529,7 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files Output files - `rank_and_filter/` - - `_mt_ranked_clinical.vcf.gz`: file containing clinically relevant mitochondrial SNVs. + - `_mt_ranked_clinical.vcf.gz`: file containing clinically relevant mitochondrial SNVs, and only contains variants less than 5%VAF by default. - `_mt_ranked_clinical.vcf.gz.tbi`: index of the file containing clinically relevant mitochondrial SNVs. - `_mt_ranked_research.vcf.gz`: file containing mitochondrial SNV annotations with their rank scores. - `_mt_ranked_research.vcf.gz.tbi`: index of the file containing mitochondrial SNV annotations with their rank scores. From 931fc00ebe09db0961358467907784518a491393 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 24 Sep 2024 18:28:07 +0200 Subject: [PATCH 1889/1921] lint --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 1abe46b3..c96f5700 100644 --- a/docs/output.md +++ b/docs/output.md @@ -68,7 +68,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Hmtnote](#hmtnote) - [VEP](#vep-2) - [Filtering and ranking](#filtering-and-ranking) - - [Filter\_vep](#filter_vep) + - [Filter_vep](#filter_vep) - [GENMOD](#genmod) - [Mobile element analysis](#mobile-element-analysis) - [Calling mobile elements](#calling-mobile-elements) From d5094360ff4ea0d86adfc69deceb406f33242916 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:42:22 +0200 Subject: [PATCH 1890/1921] update README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 61bf27d0..557251b7 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ On release, automated continuous integration tests run the pipeline on a full-si **2. Alignment:** - [Bwa-mem2](https://github.com/bwa-mem2/bwa-mem2) +- [BWA-MEME](https://github.com/kaist-ina/BWA-MEME) - [BWA](https://github.com/lh3/bwa) - [Sentieon DNAseq](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/) From 953316b05ac6d22266b2985650a40152ddeeeed3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:56:20 +0200 Subject: [PATCH 1891/1921] update module --- modules.json | 2 +- .../nf-core/tabix/bgziptabix/environment.yml | 5 +- modules/nf-core/tabix/bgziptabix/main.nf | 11 +- modules/nf-core/tabix/bgziptabix/meta.yml | 70 ++++++----- .../tabix/bgziptabix/tests/main.nf.test | 35 +++++- .../tabix/bgziptabix/tests/main.nf.test.snap | 117 ++++++++++++++---- .../utils_nfcore_raredisease_pipeline/main.nf | 8 +- 7 files changed, 176 insertions(+), 72 deletions(-) diff --git a/modules.json b/modules.json index cc525b80..6434e3b7 100644 --- a/modules.json +++ b/modules.json @@ -469,7 +469,7 @@ }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", + "git_sha": "f448e846bdadd80fc8be31fbbc78d9f5b5131a45", "installed_by": ["modules"] }, "tabix/tabix": { diff --git a/modules/nf-core/tabix/bgziptabix/environment.yml b/modules/nf-core/tabix/bgziptabix/environment.yml index c4235872..017c259d 100644 --- a/modules/nf-core/tabix/bgziptabix/environment.yml +++ b/modules/nf-core/tabix/bgziptabix/environment.yml @@ -1,8 +1,7 @@ -name: tabix_bgziptabix channels: - conda-forge - bioconda - - defaults + dependencies: + - bioconda::htslib=1.20 - bioconda::tabix=1.11 - - bioconda::htslib=1.19.1 diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index bcdcf2a6..22f37a77 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -4,8 +4,8 @@ process TABIX_BGZIPTABIX { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/htslib:1.19.1--h81da01d_1' : - 'biocontainers/htslib:1.19.1--h81da01d_1' }" + 'https://depot.galaxyproject.org/singularity/htslib:1.20--h5efdd21_2' : + 'biocontainers/htslib:1.20--h5efdd21_2' }" input: tuple val(meta), path(input) @@ -24,7 +24,7 @@ process TABIX_BGZIPTABIX { def prefix = task.ext.prefix ?: "${meta.id}" """ bgzip --threads ${task.cpus} -c $args $input > ${prefix}.${input.getExtension()}.gz - tabix $args2 ${prefix}.${input.getExtension()}.gz + tabix --threads ${task.cpus} $args2 ${prefix}.${input.getExtension()}.gz cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -34,10 +34,11 @@ process TABIX_BGZIPTABIX { stub: def prefix = task.ext.prefix ?: "${meta.id}" + def args2 = task.ext.args2 ?: '' + def index = args2.contains("-C ") || args2.contains("--csi") ? "csi" : "tbi" """ echo "" | gzip > ${prefix}.${input.getExtension()}.gz - touch ${prefix}.${input.getExtension()}.gz.tbi - touch ${prefix}.${input.getExtension()}.gz.csi + touch ${prefix}.${input.getExtension()}.gz.${index} 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 438aba4d..806fbc12 100644 --- a/modules/nf-core/tabix/bgziptabix/meta.yml +++ b/modules/nf-core/tabix/bgziptabix/meta.yml @@ -13,38 +13,50 @@ tools: documentation: https://www.htslib.org/doc/tabix.1.html doi: 10.1093/bioinformatics/btq671 licence: ["MIT"] + identifier: biotools:tabix input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - tab: - type: file - description: TAB-delimited genome position file - pattern: "*.{bed,gff,sam,vcf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Sorted tab-delimited genome file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - gz: - type: file - description: Output compressed file - pattern: "*.{gz}" - - tbi: - type: file - description: tabix index file - pattern: "*.{gz.tbi}" - - csi: - type: file - description: tabix alternate index file - pattern: "*.{gz.csi}" + - gz_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: bgzipped tab-delimited genome file + pattern: "*.gz" + - "*.tbi": + type: file + description: tabix index file + pattern: "*.tbi" + - gz_csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.gz": + type: file + description: bgzipped tab-delimited genome file + pattern: "*.gz" + - "*.csi": + type: file + description: csi index file + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@DLBPointon" diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test index 87ea2c84..4d4130dc 100644 --- a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test @@ -17,7 +17,7 @@ nextflow_process { """ input[0] = [ [ id:'tbi_test' ], - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] ] """ } @@ -43,7 +43,7 @@ nextflow_process { """ input[0] = [ [ id:'csi_test' ], - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] ] """ } @@ -72,7 +72,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], - [ file(params.test_data['sarscov2']['genome']['test_bed'], checkIfExists: true) ] + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] ] """ } @@ -91,4 +91,33 @@ nextflow_process { } + test("sarscov2_bed_tbi_stub") { + config "./tabix_tbi.config" + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert snapshot( + file(process.out.gz_tbi[0][1]).name + ).match("tbi_stub") + } + ) + } + + } + } diff --git a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap index fcecb2e4..fb87799b 100644 --- a/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap +++ b/modules/nf-core/tabix/bgziptabix/tests/main.nf.test.snap @@ -8,14 +8,14 @@ "id": "tbi_test" }, "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "tbi_test.bed.gz.tbi:md5,24908545311cf2b7c803c41d716872c4" + "tbi_test.bed.gz.tbi:md5,ca06caf88b1e3c67d5fcba0a1460b52c" ] ], "1": [ ], "2": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ], "gz_csi": [ @@ -26,15 +26,19 @@ "id": "tbi_test" }, "tbi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "tbi_test.bed.gz.tbi:md5,24908545311cf2b7c803c41d716872c4" + "tbi_test.bed.gz.tbi:md5,ca06caf88b1e3c67d5fcba0a1460b52c" ] ], "versions": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ] } ], - "timestamp": "2024-02-19T14:50:51.513838" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:16.053817543" }, "sarscov2_bed_csi": { "content": [ @@ -48,11 +52,11 @@ "id": "csi_test" }, "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "csi_test.bed.gz.csi:md5,e06165ddd34640783728cb07f2558b43" + "csi_test.bed.gz.csi:md5,c9c0377de58fdc89672bb3005a0d69f5" ] ], "2": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ], "gz_csi": [ [ @@ -60,48 +64,109 @@ "id": "csi_test" }, "csi_test.bed.gz:md5,fe4053cf4de3aebbdfc3be2efb125a74", - "csi_test.bed.gz.csi:md5,e06165ddd34640783728cb07f2558b43" + "csi_test.bed.gz.csi:md5,c9c0377de58fdc89672bb3005a0d69f5" ] ], "gz_tbi": [ ], "versions": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ] } ], - "timestamp": "2024-02-19T14:51:00.513777" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-19T11:29:27.667745444" }, "csi_test": { "content": [ "csi_test.bed.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:51:00.548801" }, + "sarscov2_bed_tbi_stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ], + "gz_csi": [ + + ], + "gz_tbi": [ + [ + { + "id": "test" + }, + "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-25T14:45:18.533169949" + }, "csi_stub": { "content": [ "test.bed.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:51:09.218454" }, + "tbi_stub": { + "content": [ + "test.bed.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-25T14:45:18.550930179" + }, "tbi_test": { "content": [ "tbi_test.bed.gz" ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, "timestamp": "2024-02-19T14:50:51.579654" }, "sarscov2_bed_csi_stub": { "content": [ { "0": [ - [ - { - "id": "test" - }, - "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "1": [ [ @@ -113,7 +178,7 @@ ] ], "2": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ], "gz_csi": [ [ @@ -125,19 +190,17 @@ ] ], "gz_tbi": [ - [ - { - "id": "test" - }, - "test.bed.gz:md5,68b329da9893e34099c7d8ad5cb9c940", - "test.bed.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + ], "versions": [ - "versions.yml:md5,b4765e4d896ce4a4cdd6c896d12555fc" + "versions.yml:md5,736e7c3b16a3ac525253e5b5f5d8fdfa" ] } ], - "timestamp": "2024-02-19T14:51:09.164254" + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-25T14:44:19.786135972" } } \ No newline at end of file diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf index bafaf7ce..8048d491 100644 --- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf @@ -335,11 +335,11 @@ def toolBibliographyText() { def other_citation_text = [] align_text = [ - params.aligner.equals("bwa") ? "
  • Li, H. (2013). Aligning sequence reads, clone sequences and assembly contigs with BWA-MEM (arXiv:1303.3997). arXiv. http://arxiv.org/abs/1303.3997
  • " :"", - params.aligner.equals("bwamem2") ? "
  • Vasimuddin, Md., Misra, S., Li, H., & Aluru, S. (2019). Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), 314–324. https://doi.org/10.1109/IPDPS.2019.00041
  • " : "", + params.aligner.equals("bwa") || params.mt_aligner.equals("bwa") ? "
  • Li, H. (2013). Aligning sequence reads, clone sequences and assembly contigs with BWA-MEM (arXiv:1303.3997). arXiv. http://arxiv.org/abs/1303.3997
  • " :"", + params.aligner.equals("bwamem2") || params.mt_aligner.equals("bwamem2") ? "
  • Vasimuddin, Md., Misra, S., Li, H., & Aluru, S. (2019). Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), 314–324. https://doi.org/10.1109/IPDPS.2019.00041
  • " : "", params.aligner.equals("bwameme") ? "
  • Jung Y, Han D. BWA-MEME: BWA-MEM emulated with a machine learning approach. Bioinformatics. 2022;38(9):2404-2413. doi:10.1093/bioinformatics/btac137
  • " : "", - params.aligner.equals("sentieon") ? "
  • Kendig, K. I., Baheti, S., Bockol, M. A., Drucker, T. M., Hart, S. N., Heldenbrand, J. R., Hernaez, M., Hudson, M. E., Kalmbach, M. T., Klee, E. W., Mattson, N. R., Ross, C. A., Taschuk, M., Wieben, E. D., Wiepert, M., Wildman, D. E., & Mainzer, L. S. (2019). Sentieon DNASeq Variant Calling Workflow Demonstrates Strong Computational Performance and Accuracy. Frontiers in Genetics, 10, 736. https://doi.org/10.3389/fgene.2019.00736
  • " : "", - params.aligner.equals("sentieon") ? "
  • Freed, D., Aldana, R., Weber, J. A., & Edwards, J. S. (2017). The Sentieon Genomics Tools—A fast and accurate solution to variant calling from next-generation sequence data (p. 115717). bioRxiv. https://doi.org/10.1101/115717
  • " : "" + params.aligner.equals("sentieon") || params.mt_aligner.equals("sentieon") ? "
  • Kendig, K. I., Baheti, S., Bockol, M. A., Drucker, T. M., Hart, S. N., Heldenbrand, J. R., Hernaez, M., Hudson, M. E., Kalmbach, M. T., Klee, E. W., Mattson, N. R., Ross, C. A., Taschuk, M., Wieben, E. D., Wiepert, M., Wildman, D. E., & Mainzer, L. S. (2019). Sentieon DNASeq Variant Calling Workflow Demonstrates Strong Computational Performance and Accuracy. Frontiers in Genetics, 10, 736. https://doi.org/10.3389/fgene.2019.00736
  • " : "", + params.aligner.equals("sentieon") || params.mt_aligner.equals("sentieon")? "
  • Freed, D., Aldana, R., Weber, J. A., & Edwards, J. S. (2017). The Sentieon Genomics Tools—A fast and accurate solution to variant calling from next-generation sequence data (p. 115717). bioRxiv. https://doi.org/10.1101/115717
  • " : "" ] repeats_text = [ (!params.skip_repeat_calling && params.analysis_type.equals("wgs") ) ? "
  • Dolzhenko, E., Deshpande, V., Schlesinger, F., Krusche, P., Petrovski, R., Chen, S., Emig-Agius, D., Gross, A., Narzisi, G., Bowman, B., Scheffler, K., van Vugt, J. J. F. A., French, C., Sanchis-Juan, A., Ibáñez, K., Tucci, A., Lajoie, B. R., Veldink, J. H., Raymond, F. L., … Eberle, M. A. (2019). ExpansionHunter: A sequence-graph-based tool to analyze variation in short tandem repeat regions. Bioinformatics, 35(22), 4754–4756. https://doi.org/10.1093/bioinformatics/btz431
  • " : "", From 5e177a22dba3e5c9f2733816e681ace2fe674854 Mon Sep 17 00:00:00 2001 From: Anders Jemt Date: Wed, 25 Sep 2024 22:06:05 +0200 Subject: [PATCH 1892/1921] remove enum on vep cache version --- nextflow_schema.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 06d94d0f..4424272b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -744,8 +744,7 @@ "type": "integer", "default": 112, "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", - "fa_icon": "fas fa-align-center", - "enum": [107, 110, 112] + "fa_icon": "fas fa-align-center" } } }, From 64bea68580efac52ac2eca97ae5523e672b1e21d Mon Sep 17 00:00:00 2001 From: ramprasadn <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:09:44 +0200 Subject: [PATCH 1893/1921] update modules --- modules.json | 200 +-- .../nf-core/bcftools/annotate/environment.yml | 4 +- modules/nf-core/bcftools/annotate/main.nf | 21 +- modules/nf-core/bcftools/annotate/meta.yml | 87 +- .../bcftools/annotate/tests/bcf.config | 8 +- .../bcftools/annotate/tests/main.nf.test | 281 +++- .../bcftools/annotate/tests/main.nf.test.snap | 333 +++- .../bcftools/annotate/tests/vcf.config | 6 +- .../annotate/tests/vcf_gz_index.config | 4 + .../annotate/tests/vcf_gz_index_csi.config | 4 + .../annotate/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/concat/environment.yml | 4 +- modules/nf-core/bcftools/concat/main.nf | 21 +- modules/nf-core/bcftools/concat/meta.yml | 84 +- .../bcftools/concat/tests/main.nf.test | 253 ++- .../bcftools/concat/tests/main.nf.test.snap | 330 +++- .../bcftools/concat/tests/vcf_gz_index.config | 4 + .../concat/tests/vcf_gz_index_csi.config | 4 + .../concat/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/filter/environment.yml | 4 +- modules/nf-core/bcftools/filter/main.nf | 18 +- modules/nf-core/bcftools/filter/meta.yml | 63 +- .../bcftools/filter/tests/main.nf.test | 177 ++- .../bcftools/filter/tests/main.nf.test.snap | 318 +++- .../bcftools/filter/tests/vcf_gz_index.config | 4 + .../filter/tests/vcf_gz_index_csi.config | 4 + .../filter/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/merge/environment.yml | 4 +- modules/nf-core/bcftools/merge/main.nf | 26 +- modules/nf-core/bcftools/merge/meta.yml | 128 +- .../nf-core/bcftools/merge/tests/bcf.config | 3 + .../bcftools/merge/tests/bcf_gz.config | 3 + .../nf-core/bcftools/merge/tests/main.nf.test | 853 +++++++++++ .../bcftools/merge/tests/main.nf.test.snap | 607 ++++++++ .../bcftools/merge/tests/nextflow.config | 5 + .../bcftools/merge/tests/nextflow.gvcf.config | 5 + modules/nf-core/bcftools/merge/tests/tags.yml | 2 + .../nf-core/bcftools/merge/tests/vcf.config | 3 + .../bcftools/merge/tests/vcf_gz.config | 3 + .../bcftools/merge/tests/vcf_gz_index.config | 3 + .../merge/tests/vcf_gz_index_csi.config | 3 + .../merge/tests/vcf_gz_index_tbi.config | 3 + modules/nf-core/bcftools/norm/environment.yml | 4 +- modules/nf-core/bcftools/norm/main.nf | 22 +- modules/nf-core/bcftools/norm/meta.yml | 96 +- .../nf-core/bcftools/norm/tests/main.nf.test | 563 +++++++ .../bcftools/norm/tests/main.nf.test.snap | 758 +++++++++ .../bcftools/norm/tests/nextflow.bcf.config | 4 + .../norm/tests/nextflow.bcf_gz.config | 4 + .../bcftools/norm/tests/nextflow.config | 4 + .../bcftools/norm/tests/nextflow.vcf.config | 4 + .../norm/tests/nextflow.vcf_gz.config | 4 + modules/nf-core/bcftools/norm/tests/tags.yml | 2 + .../bcftools/norm/tests/vcf_gz_index.config | 4 + .../norm/tests/vcf_gz_index_csi.config | 4 + .../norm/tests/vcf_gz_index_tbi.config | 4 + .../nf-core/bcftools/reheader/environment.yml | 4 +- modules/nf-core/bcftools/reheader/main.nf | 15 +- modules/nf-core/bcftools/reheader/meta.yml | 89 +- .../bcftools/reheader/tests/main.nf.test | 233 ++- .../bcftools/reheader/tests/main.nf.test.snap | 345 ++++- .../reheader/tests/vcf_gz_index.config | 4 + .../reheader/tests/vcf_gz_index_csi.config | 4 + .../reheader/tests/vcf_gz_index_tbi.config | 5 + modules/nf-core/bcftools/roh/environment.yml | 4 +- modules/nf-core/bcftools/roh/main.nf | 4 +- modules/nf-core/bcftools/roh/meta.yml | 95 +- .../nf-core/bcftools/roh/tests/main.nf.test | 67 + .../bcftools/roh/tests/main.nf.test.snap | 68 + modules/nf-core/bcftools/sort/environment.yml | 4 +- modules/nf-core/bcftools/sort/main.nf | 17 +- modules/nf-core/bcftools/sort/meta.yml | 65 +- .../nf-core/bcftools/sort/tests/main.nf.test | 174 ++- .../bcftools/sort/tests/main.nf.test.snap | 298 +++- .../bcftools/sort/tests/vcf_gz_index.config | 4 + .../sort/tests/vcf_gz_index_csi.config | 4 + .../sort/tests/vcf_gz_index_tbi.config | 4 + modules/nf-core/bcftools/view/environment.yml | 4 +- modules/nf-core/bcftools/view/main.nf | 16 +- modules/nf-core/bcftools/view/meta.yml | 108 +- .../nf-core/bcftools/view/tests/main.nf.test | 217 ++- .../bcftools/view/tests/main.nf.test.snap | 300 +++- .../bcftools/view/tests/vcf_gz_index.config | 4 + .../view/tests/vcf_gz_index_csi.config | 4 + .../view/tests/vcf_gz_index_tbi.config | 4 + modules/nf-core/bwa/index/environment.yml | 2 - modules/nf-core/bwa/index/meta.yml | 43 +- modules/nf-core/bwa/mem/environment.yml | 6 +- modules/nf-core/bwa/mem/meta.yml | 113 +- modules/nf-core/bwa/mem/tests/main.nf.test | 139 +- .../nf-core/bwa/mem/tests/main.nf.test.snap | 203 ++- modules/nf-core/bwamem2/index/environment.yml | 2 - modules/nf-core/bwamem2/index/meta.yml | 41 +- modules/nf-core/bwamem2/mem/environment.yml | 6 +- modules/nf-core/bwamem2/mem/meta.yml | 137 +- .../nf-core/bwamem2/mem/tests/main.nf.test | 99 +- .../bwamem2/mem/tests/main.nf.test.snap | 108 +- modules/nf-core/bwameme/index/environment.yml | 2 - modules/nf-core/bwameme/index/meta.yml | 45 +- modules/nf-core/bwameme/mem/environment.yml | 2 - modules/nf-core/bwameme/mem/meta.yml | 151 +- .../nf-core/bwameme/mem/tests/main.nf.test | 105 +- .../bwameme/mem/tests/main.nf.test.snap | 257 ++-- modules/nf-core/cadd/environment.yml | 2 - modules/nf-core/cadd/meta.yml | 60 +- modules/nf-core/cat/cat/environment.yml | 2 - modules/nf-core/cat/cat/main.nf | 1 - modules/nf-core/cat/cat/meta.yml | 39 +- modules/nf-core/cat/cat/tests/main.nf.test | 27 +- .../nf-core/cat/cat/tests/main.nf.test.snap | 74 +- modules/nf-core/chromograph/environment.yml | 2 - modules/nf-core/chromograph/meta.yml | 150 +- .../nf-core/chromograph/tests/main.nf.test | 2 +- .../nf-core/cnvnator/cnvnator/environment.yml | 2 - modules/nf-core/cnvnator/cnvnator/meta.yml | 124 +- .../cnvnator/convert2vcf/environment.yml | 2 - modules/nf-core/cnvnator/convert2vcf/meta.yml | 50 +- .../nf-core/deepvariant/callvariants/main.nf | 58 + .../nf-core/deepvariant/callvariants/meta.yml | 48 + .../callvariants/tests/main.nf.test | 85 + .../callvariants/tests/main.nf.test.snap | 59 + .../callvariants/tests/nextflow.config | 11 + .../deepvariant/callvariants/tests/tags.yml | 2 + .../nf-core/deepvariant/makeexamples/main.nf | 66 + .../nf-core/deepvariant/makeexamples/meta.yml | 102 ++ .../makeexamples/tests/main.nf.test | 228 +++ .../makeexamples/tests/main.nf.test.snap | 134 ++ .../makeexamples/tests/nextflow.config | 6 + .../deepvariant/makeexamples/tests/tags.yml | 2 + .../deepvariant/postprocessvariants/main.nf | 77 + .../deepvariant/postprocessvariants/meta.yml | 113 ++ .../postprocessvariants/tests/main.nf.test | 118 ++ .../tests/main.nf.test.snap | 180 +++ .../postprocessvariants/tests/nextflow.config | 10 + .../postprocessvariants/tests/tags.yml | 2 + .../deepvariant/rundeepvariant/main.nf | 78 + .../deepvariant/rundeepvariant/meta.yml | 122 ++ .../rundeepvariant/tests/main.nf.test | 166 ++ .../rundeepvariant/tests/main.nf.test.snap | 358 +++++ .../tests/nextflow-intervals.config | 8 + .../nextflow-non-autosomal-calling.config | 8 + .../rundeepvariant/tests/nextflow.config | 8 + .../deepvariant/rundeepvariant/tests/tags.yml | 2 + modules/nf-core/eklipse/environment.yml | 2 - modules/nf-core/eklipse/meta.yml | 85 +- modules/nf-core/eklipse/tests/main.nf.test | 6 +- modules/nf-core/ensemblvep/filtervep/meta.yml | 52 +- modules/nf-core/ensemblvep/vep/meta.yml | 148 +- .../nf-core/expansionhunter/environment.yml | 3 - modules/nf-core/expansionhunter/meta.yml | 133 +- .../expansionhunter/tests/main.nf.test | 20 +- modules/nf-core/fastp/environment.yml | 2 - modules/nf-core/fastp/main.nf | 21 +- modules/nf-core/fastp/meta.yml | 134 +- modules/nf-core/fastp/tests/main.nf.test | 823 ++++------ modules/nf-core/fastp/tests/main.nf.test.snap | 1361 ++++++++++++++--- modules/nf-core/fastqc/environment.yml | 2 - modules/nf-core/fastqc/main.nf | 5 +- modules/nf-core/fastqc/meta.yml | 57 +- modules/nf-core/fastqc/tests/main.nf.test | 225 ++- .../nf-core/fastqc/tests/main.nf.test.snap | 370 ++++- .../gatk4/bedtointervallist/environment.yml | 2 - .../nf-core/gatk4/bedtointervallist/meta.yml | 59 +- .../gatk4/collectreadcounts/environment.yml | 2 - .../nf-core/gatk4/collectreadcounts/meta.yml | 136 +- .../collectreadcounts/tests/main.nf.test | 104 ++ .../collectreadcounts/tests/main.nf.test.snap | 97 ++ .../tests/nextflow.cram.config | 5 + .../tests/nextflow.hdf5.config | 5 + .../tests/nextflow.tsv.config | 5 + .../createsequencedictionary/environment.yml | 2 - .../gatk4/createsequencedictionary/meta.yml | 37 +- .../gatk4/denoisereadcounts/environment.yml | 2 - .../nf-core/gatk4/denoisereadcounts/meta.yml | 75 +- .../denoisereadcounts/tests/main.nf.test | 17 +- .../denoisereadcounts/tests/main.nf.test.snap | 7 +- .../determinegermlinecontigploidy/meta.yml | 112 +- .../gatk4/filtermutectcalls/environment.yml | 2 - .../nf-core/gatk4/filtermutectcalls/meta.yml | 162 +- .../nf-core/gatk4/germlinecnvcaller/meta.yml | 107 +- .../gatk4/intervallisttools/environment.yml | 2 - .../nf-core/gatk4/intervallisttools/meta.yml | 51 +- .../gatk4/mergebamalignment/environment.yml | 2 - .../nf-core/gatk4/mergebamalignment/meta.yml | 77 +- .../mergebamalignment/tests/main.nf.test | 73 + .../mergebamalignment/tests/main.nf.test.snap | 48 + .../nf-core/gatk4/mergevcfs/environment.yml | 2 - modules/nf-core/gatk4/mergevcfs/meta.yml | 66 +- modules/nf-core/gatk4/mutect2/environment.yml | 2 - modules/nf-core/gatk4/mutect2/meta.yml | 175 ++- .../nf-core/gatk4/mutect2/tests/main.nf.test | 124 +- .../postprocessgermlinecnvcalls/meta.yml | 104 +- .../nf-core/gatk4/printreads/environment.yml | 2 - modules/nf-core/gatk4/printreads/meta.yml | 131 +- .../gatk4/printreads/tests/main.nf.test | 95 ++ .../gatk4/printreads/tests/main.nf.test.snap | 40 + .../nf-core/gatk4/revertsam/environment.yml | 2 - modules/nf-core/gatk4/revertsam/meta.yml | 37 +- .../gatk4/revertsam/tests/main.nf.test | 59 + .../gatk4/revertsam/tests/main.nf.test.snap | 48 + .../nf-core/gatk4/samtofastq/environment.yml | 2 - modules/nf-core/gatk4/samtofastq/meta.yml | 37 +- .../gatk4/samtofastq/tests/main.nf.test | 88 ++ .../gatk4/samtofastq/tests/main.nf.test.snap | 66 + .../gatk4/selectvariants/environment.yml | 2 - modules/nf-core/gatk4/selectvariants/meta.yml | 73 +- .../gatk4/selectvariants/tests/main.nf.test | 10 +- .../nf-core/gatk4/shiftfasta/environment.yml | 2 - modules/nf-core/gatk4/shiftfasta/meta.yml | 151 +- .../gatk4/shiftfasta/tests/main.nf.test | 44 + .../gatk4/shiftfasta/tests/main.nf.test.snap | 133 ++ .../gatk4/shiftfasta/tests/nextflow.config | 5 + .../gatk4/splitintervals/environment.yml | 2 - modules/nf-core/gatk4/splitintervals/meta.yml | 98 +- .../gatk4/splitintervals/tests/main.nf.test | 109 ++ .../splitintervals/tests/main.nf.test.snap | 119 ++ .../splitintervals/tests/nextflow.config | 5 + .../gatk4/variantfiltration/environment.yml | 2 - .../nf-core/gatk4/variantfiltration/meta.yml | 110 +- .../nf-core/genmod/annotate/environment.yml | 2 - modules/nf-core/genmod/annotate/meta.yml | 45 +- .../genmod/annotate/tests/main.nf.test | 2 +- .../nf-core/genmod/compound/environment.yml | 2 - modules/nf-core/genmod/compound/meta.yml | 45 +- .../genmod/compound/tests/main.nf.test | 2 +- modules/nf-core/genmod/models/environment.yml | 2 - modules/nf-core/genmod/models/meta.yml | 60 +- .../nf-core/genmod/models/tests/main.nf.test | 4 +- modules/nf-core/genmod/score/environment.yml | 2 - modules/nf-core/genmod/score/meta.yml | 60 +- .../nf-core/genmod/score/tests/main.nf.test | 6 +- modules/nf-core/glnexus/environment.yml | 2 - modules/nf-core/glnexus/meta.yml | 43 +- modules/nf-core/haplocheck/environment.yml | 2 - modules/nf-core/haplocheck/meta.yml | 62 +- modules/nf-core/haplocheck/tests/main.nf.test | 56 + .../haplocheck/tests/main.nf.test.snap | 100 ++ .../haplogrep2/classify/environment.yml | 2 - modules/nf-core/haplogrep2/classify/meta.yml | 57 +- .../haplogrep2/classify/tests/main.nf.test | 59 + .../classify/tests/main.nf.test.snap | 72 + .../nf-core/hmtnote/annotate/environment.yml | 2 - modules/nf-core/hmtnote/annotate/meta.yml | 44 +- .../nf-core/manta/germline/environment.yml | 2 - modules/nf-core/manta/germline/meta.yml | 175 ++- modules/nf-core/mosdepth/environment.yml | 4 +- modules/nf-core/mosdepth/main.nf | 12 +- modules/nf-core/mosdepth/meta.yml | 214 ++- modules/nf-core/mosdepth/tests/main.nf.test | 66 +- .../nf-core/mosdepth/tests/main.nf.test.snap | 423 +++-- modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 14 +- modules/nf-core/multiqc/meta.yml | 78 +- modules/nf-core/multiqc/tests/main.nf.test | 8 + .../nf-core/multiqc/tests/main.nf.test.snap | 20 +- modules/nf-core/multiqc/tests/nextflow.config | 5 + .../ngsbits/samplegender/environment.yml | 2 - modules/nf-core/ngsbits/samplegender/meta.yml | 99 +- .../ngsbits/samplegender/tests/main.nf.test | 4 +- modules/nf-core/peddy/environment.yml | 2 - modules/nf-core/peddy/meta.yml | 100 +- modules/nf-core/peddy/tests/main.nf.test | 6 +- .../addorreplacereadgroups/environment.yml | 4 +- .../picard/addorreplacereadgroups/main.nf | 4 +- .../picard/addorreplacereadgroups/meta.yml | 105 +- .../tests/main.nf.test.snap | 20 +- .../picard/collecthsmetrics/environment.yml | 4 +- .../nf-core/picard/collecthsmetrics/main.nf | 6 +- .../nf-core/picard/collecthsmetrics/meta.yml | 128 +- .../collecthsmetrics/tests/main.nf.test | 191 +++ .../collecthsmetrics/tests/main.nf.test.snap | 478 ++++++ .../picard/collecthsmetrics/tests/tags.yml | 2 + .../collectmultiplemetrics/environment.yml | 4 +- .../picard/collectmultiplemetrics/main.nf | 4 +- .../picard/collectmultiplemetrics/meta.yml | 97 +- .../collectmultiplemetrics/tests/main.nf.test | 112 ++ .../tests/main.nf.test.snap | 80 + .../picard/collectwgsmetrics/environment.yml | 4 +- .../nf-core/picard/collectwgsmetrics/main.nf | 4 +- .../nf-core/picard/collectwgsmetrics/meta.yml | 97 +- .../collectwgsmetrics/tests/main.nf.test | 83 + .../collectwgsmetrics/tests/main.nf.test.snap | 28 + .../picard/liftovervcf/environment.yml | 4 +- modules/nf-core/picard/liftovervcf/main.nf | 8 +- modules/nf-core/picard/liftovervcf/meta.yml | 102 +- .../picard/liftovervcf/tests/main.nf.test | 84 + .../liftovervcf/tests/main.nf.test.snap | 30 + .../picard/liftovervcf/tests/nextflow.config | 3 + .../picard/markduplicates/environment.yml | 4 +- modules/nf-core/picard/markduplicates/main.nf | 4 +- .../nf-core/picard/markduplicates/meta.yml | 116 +- .../picard/markduplicates/tests/main.nf.test | 99 +- .../markduplicates/tests/main.nf.test.snap | 271 +++- .../picard/renamesampleinvcf/environment.yml | 4 +- .../nf-core/picard/renamesampleinvcf/main.nf | 4 +- .../nf-core/picard/renamesampleinvcf/meta.yml | 45 +- .../renamesampleinvcf/tests/main.nf.test | 38 + .../renamesampleinvcf/tests/main.nf.test.snap | 15 + .../nf-core/picard/sortvcf/environment.yml | 4 +- modules/nf-core/picard/sortvcf/main.nf | 4 +- modules/nf-core/picard/sortvcf/meta.yml | 84 +- .../nf-core/picard/sortvcf/tests/main.nf.test | 44 + .../picard/sortvcf/tests/main.nf.test.snap | 21 + .../nf-core/qualimap/bamqc/environment.yml | 2 - modules/nf-core/qualimap/bamqc/meta.yml | 51 +- .../nf-core/qualimap/bamqc/tests/main.nf.test | 34 +- .../qualimap/bamqc/tests/main.nf.test.snap | 161 +- .../nf-core/rhocall/annotate/environment.yml | 2 - modules/nf-core/rhocall/annotate/meta.yml | 79 +- modules/nf-core/rhocall/viz/environment.yml | 2 - modules/nf-core/rhocall/viz/meta.yml | 72 +- .../nf-core/rhocall/viz/tests/main.nf.test | 6 +- .../nf-core/rtgtools/format/environment.yml | 2 - modules/nf-core/rtgtools/format/meta.yml | 71 +- .../nf-core/rtgtools/vcfeval/environment.yml | 2 - modules/nf-core/rtgtools/vcfeval/meta.yml | 251 ++- .../nf-core/samtools/faidx/environment.yml | 10 +- modules/nf-core/samtools/faidx/main.nf | 4 +- modules/nf-core/samtools/faidx/meta.yml | 85 +- .../samtools/faidx/tests/main.nf.test.snap | 50 +- .../nf-core/samtools/index/environment.yml | 8 +- modules/nf-core/samtools/index/main.nf | 11 +- modules/nf-core/samtools/index/meta.yml | 68 +- .../nf-core/samtools/index/tests/main.nf.test | 87 +- .../samtools/index/tests/main.nf.test.snap | 264 +++- .../nf-core/samtools/merge/environment.yml | 8 +- modules/nf-core/samtools/merge/main.nf | 4 +- modules/nf-core/samtools/merge/meta.yml | 117 +- .../samtools/merge/tests/main.nf.test.snap | 32 +- modules/nf-core/samtools/sort/environment.yml | 8 +- modules/nf-core/samtools/sort/main.nf | 19 +- modules/nf-core/samtools/sort/meta.yml | 99 +- .../nf-core/samtools/sort/tests/main.nf.test | 52 +- .../samtools/sort/tests/main.nf.test.snap | 144 +- .../samtools/sort/tests/nextflow_cram.config | 8 + .../nf-core/samtools/stats/environment.yml | 8 +- modules/nf-core/samtools/stats/main.nf | 4 +- modules/nf-core/samtools/stats/meta.yml | 69 +- .../nf-core/samtools/stats/tests/main.nf.test | 60 +- .../samtools/stats/tests/main.nf.test.snap | 98 +- modules/nf-core/samtools/view/environment.yml | 8 +- modules/nf-core/samtools/view/main.nf | 44 +- modules/nf-core/samtools/view/meta.yml | 158 +- .../nf-core/samtools/view/tests/main.nf.test | 2 + .../samtools/view/tests/main.nf.test.snap | 88 +- .../smncopynumbercaller/environment.yml | 2 - modules/nf-core/smncopynumbercaller/meta.yml | 77 +- .../smncopynumbercaller/tests/main.nf.test | 59 + .../tests/main.nf.test.snap | 100 ++ .../smncopynumbercaller/tests/nextflow.config | 6 + modules/nf-core/stranger/environment.yml | 4 +- modules/nf-core/stranger/main.nf | 6 +- modules/nf-core/stranger/meta.yml | 66 +- modules/nf-core/stranger/tests/main.nf.test | 82 + .../nf-core/stranger/tests/main.nf.test.snap | 68 + .../nf-core/stranger/tests/nextflow.config | 5 + modules/nf-core/stranger/tests/tags.yml | 2 + modules/nf-core/svdb/merge/environment.yml | 8 +- modules/nf-core/svdb/merge/meta.yml | 52 +- modules/nf-core/svdb/query/environment.yml | 2 - modules/nf-core/svdb/query/meta.yml | 88 +- modules/nf-core/svdb/query/tests/main.nf.test | 4 +- modules/nf-core/tabix/bgzip/environment.yml | 5 +- modules/nf-core/tabix/bgzip/main.nf | 4 +- modules/nf-core/tabix/bgzip/meta.yml | 53 +- .../nf-core/tabix/bgzip/tests/main.nf.test | 8 +- .../tabix/bgzip/tests/main.nf.test.snap | 56 +- modules/nf-core/tabix/tabix/environment.yml | 5 +- modules/nf-core/tabix/tabix/main.nf | 11 +- modules/nf-core/tabix/tabix/meta.yml | 55 +- .../nf-core/tabix/tabix/tests/main.nf.test | 44 +- .../tabix/tabix/tests/main.nf.test.snap | 111 +- modules/nf-core/tiddit/cov/environment.yml | 2 - modules/nf-core/tiddit/cov/meta.yml | 77 +- modules/nf-core/tiddit/cov/tests/main.nf.test | 53 +- .../tiddit/cov/tests/main.nf.test.snap | 78 +- modules/nf-core/tiddit/sv/environment.yml | 2 - modules/nf-core/tiddit/sv/meta.yml | 99 +- .../nf-core/ucsc/wigtobigwig/environment.yml | 2 - modules/nf-core/ucsc/wigtobigwig/meta.yml | 45 +- .../ucsc/wigtobigwig/tests/main.nf.test | 59 + .../ucsc/wigtobigwig/tests/main.nf.test.snap | 72 + modules/nf-core/untar/environment.yml | 6 +- modules/nf-core/untar/main.nf | 29 +- modules/nf-core/untar/meta.yml | 43 +- modules/nf-core/untar/tests/main.nf.test | 44 +- modules/nf-core/untar/tests/main.nf.test.snap | 152 +- modules/nf-core/upd/environment.yml | 2 - modules/nf-core/upd/meta.yml | 48 +- modules/nf-core/upd/tests/main.nf.test | 57 + modules/nf-core/upd/tests/main.nf.test.snap | 72 + modules/nf-core/upd/tests/nextflow.config | 3 + modules/nf-core/vcf2cytosure/environment.yml | 2 - modules/nf-core/vcf2cytosure/meta.yml | 110 +- .../nf-core/vcf2cytosure/tests/main.nf.test | 8 +- modules/nf-core/vcfanno/environment.yml | 2 - modules/nf-core/vcfanno/meta.yml | 86 +- modules/nf-core/vcfanno/tests/main.nf.test | 22 +- 398 files changed, 21074 insertions(+), 6024 deletions(-) create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/concat/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/filter/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/filter/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/filter/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/merge/tests/bcf.config create mode 100644 modules/nf-core/bcftools/merge/tests/bcf_gz.config create mode 100644 modules/nf-core/bcftools/merge/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/merge/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/merge/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config create mode 100644 modules/nf-core/bcftools/merge/tests/tags.yml create mode 100644 modules/nf-core/bcftools/merge/tests/vcf.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/norm/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/norm/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/norm/tests/nextflow.bcf.config create mode 100644 modules/nf-core/bcftools/norm/tests/nextflow.bcf_gz.config create mode 100644 modules/nf-core/bcftools/norm/tests/nextflow.config create mode 100644 modules/nf-core/bcftools/norm/tests/nextflow.vcf.config create mode 100644 modules/nf-core/bcftools/norm/tests/nextflow.vcf_gz.config create mode 100644 modules/nf-core/bcftools/norm/tests/tags.yml create mode 100644 modules/nf-core/bcftools/norm/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/norm/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/norm/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/reheader/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/reheader/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/reheader/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/roh/tests/main.nf.test create mode 100644 modules/nf-core/bcftools/roh/tests/main.nf.test.snap create mode 100644 modules/nf-core/bcftools/sort/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/bcftools/view/tests/vcf_gz_index.config create mode 100644 modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config create mode 100644 modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config create mode 100644 modules/nf-core/deepvariant/callvariants/main.nf create mode 100644 modules/nf-core/deepvariant/callvariants/meta.yml create mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/callvariants/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/callvariants/tests/tags.yml create mode 100644 modules/nf-core/deepvariant/makeexamples/main.nf create mode 100644 modules/nf-core/deepvariant/makeexamples/meta.yml create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/makeexamples/tests/tags.yml create mode 100644 modules/nf-core/deepvariant/postprocessvariants/main.nf create mode 100644 modules/nf-core/deepvariant/postprocessvariants/meta.yml create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml create mode 100644 modules/nf-core/deepvariant/rundeepvariant/main.nf create mode 100644 modules/nf-core/deepvariant/rundeepvariant/meta.yml create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config create mode 100644 modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml create mode 100644 modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/collectreadcounts/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/collectreadcounts/tests/nextflow.cram.config create mode 100644 modules/nf-core/gatk4/collectreadcounts/tests/nextflow.hdf5.config create mode 100644 modules/nf-core/gatk4/collectreadcounts/tests/nextflow.tsv.config create mode 100644 modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/mergebamalignment/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/printreads/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/printreads/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/revertsam/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/revertsam/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/samtofastq/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/samtofastq/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/shiftfasta/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/shiftfasta/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/shiftfasta/tests/nextflow.config create mode 100644 modules/nf-core/gatk4/splitintervals/tests/main.nf.test create mode 100644 modules/nf-core/gatk4/splitintervals/tests/main.nf.test.snap create mode 100644 modules/nf-core/gatk4/splitintervals/tests/nextflow.config create mode 100644 modules/nf-core/haplocheck/tests/main.nf.test create mode 100644 modules/nf-core/haplocheck/tests/main.nf.test.snap create mode 100644 modules/nf-core/haplogrep2/classify/tests/main.nf.test create mode 100644 modules/nf-core/haplogrep2/classify/tests/main.nf.test.snap create mode 100644 modules/nf-core/multiqc/tests/nextflow.config create mode 100644 modules/nf-core/picard/collecthsmetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/collecthsmetrics/tests/tags.yml create mode 100644 modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test create mode 100644 modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/liftovervcf/tests/main.nf.test create mode 100644 modules/nf-core/picard/liftovervcf/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/liftovervcf/tests/nextflow.config create mode 100644 modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test create mode 100644 modules/nf-core/picard/renamesampleinvcf/tests/main.nf.test.snap create mode 100644 modules/nf-core/picard/sortvcf/tests/main.nf.test create mode 100644 modules/nf-core/picard/sortvcf/tests/main.nf.test.snap create mode 100644 modules/nf-core/samtools/sort/tests/nextflow_cram.config create mode 100644 modules/nf-core/smncopynumbercaller/tests/main.nf.test create mode 100644 modules/nf-core/smncopynumbercaller/tests/main.nf.test.snap create mode 100644 modules/nf-core/smncopynumbercaller/tests/nextflow.config create mode 100644 modules/nf-core/stranger/tests/main.nf.test create mode 100644 modules/nf-core/stranger/tests/main.nf.test.snap create mode 100644 modules/nf-core/stranger/tests/nextflow.config create mode 100644 modules/nf-core/stranger/tests/tags.yml create mode 100644 modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test create mode 100644 modules/nf-core/ucsc/wigtobigwig/tests/main.nf.test.snap create mode 100644 modules/nf-core/upd/tests/main.nf.test create mode 100644 modules/nf-core/upd/tests/main.nf.test.snap create mode 100644 modules/nf-core/upd/tests/nextflow.config diff --git a/modules.json b/modules.json index 6434e3b7..a6af5aa0 100644 --- a/modules.json +++ b/modules.json @@ -7,47 +7,47 @@ "nf-core": { "bcftools/annotate": { "branch": "master", - "git_sha": "2ad29c2aed06d815d9f68ad7ba20b3b1c574ce9c", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", - "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", + "git_sha": "d1e0ec7670fa77905a378627232566ce54c3c26d", "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", - "git_sha": "a3893076a76e91b3ff152faddf872f00778fb224", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", - "git_sha": "44096c08ffdbc694f5f92ae174ea0f7ba0f37e09", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/sort": { "branch": "master", - "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "1013101da4252623fd7acf19cc581bae91d4f839", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bedtools/genomecov": { @@ -57,58 +57,58 @@ }, "bwa/index": { "branch": "master", - "git_sha": "086fa66260595e123b0ea47a6512539b72a9afa3", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwa/mem": { "branch": "master", - "git_sha": "0c34b8159f62cde451c4ff249629c9d0a4f3f9c3", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", - "git_sha": "7081e04c18de9480948d34513a1c1e2d0fa9126d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", - "git_sha": "3afb95b2e15fc4a2347470255a7ef654f650c8ec", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwameme/index": { "branch": "master", - "git_sha": "79480293280ff4f10f30bdea1ddd903f223f8489", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "bwameme/mem": { "branch": "master", - "git_sha": "0aa157a00b54bcbe2c50be375cafd68d928e7f4d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cadd": { "branch": "master", - "git_sha": "cf3ed075695639b0a0924eb0901146df1996dc08", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "9437e6053dccf4aafa022bfd6e7e9de67e625af8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "chromograph": { "branch": "master", - "git_sha": "f05512229a501df5d67273bb7358c5f69667f40d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "cnvnator/cnvnator": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/cnvnator/cnvnator/cnvnator-cnvnator.diff" }, "cnvnator/convert2vcf": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "deepvariant": { @@ -116,290 +116,310 @@ "git_sha": "a7e8b8afd4fa82f20d745fa778bfdbf39c1f7efb", "installed_by": ["modules"] }, + "deepvariant/callvariants": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "deepvariant/makeexamples": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "deepvariant/postprocessvariants": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, + "deepvariant/rundeepvariant": { + "branch": "master", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", + "installed_by": ["modules"] + }, "eklipse": { "branch": "master", - "git_sha": "7f265c2db4b1394c9303a3eb51e25d8447767347", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ensemblvep/filtervep": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", - "git_sha": "06c8865e36741e05ad32ef70ab3fac127486af48", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", - "git_sha": "b42fec6f7c6e5d0716685cabb825ef6bf6e386b5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fastp": { "branch": "master", - "git_sha": "95cf5fe0194c7bf5cb0e3027a2eb7e7c89385080", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "fastqc": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "d3f215802f696f7993f25c759781d2db91232015", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/collectreadcounts": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "e6fe277739f5894711405af3e717b2470bd956b5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/denoisereadcounts": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", - "git_sha": "60a7dbae179bcfa24c10294cc9a07423a239c19a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "7d814815f638e1483995b24a23f5f23229036bbf", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "cf607b7749da0a8f5ca2a1e31233e13e3159e2fe", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "afb604624abcc2fc67a43d70a2de369a50d16105", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "194fca815cf594646e638fa5476acbcc296f1850", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "5fd04feb37b58caa6a54d41e38c80066bdf71056", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "cf607b7749da0a8f5ca2a1e31233e13e3159e2fe", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "d742e3143f2ccb8853c29b35cfcf50b5e5026980", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "00409369b2aff69bded4f0a9e7a80e17d933b426", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", - "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "1aba459a6f3528bee806403ae47bea304de26603", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "glnexus": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "haplocheck": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "hmtnote/annotate": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"], "patch": "modules/nf-core/hmtnote/annotate/hmtnote-annotate.diff" }, "manta/germline": { "branch": "master", - "git_sha": "ebc1733b77c702f19fe42076a5edfcbaa0d84f66", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "69e3eb17fb31b772b18f134d6e8f8b93ee980e65", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ngsbits/samplegender": { "branch": "master", - "git_sha": "023e119cfa102f319b6dcfd06abecf7f3c2b8df1", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "peddy": { "branch": "master", - "git_sha": "bb8c1e039f2c1d603e8a93665d0386d5c6ac8e5e", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "1943aa60f7490c3d6740e8872e6e69122ccc8087", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "1943aa60f7490c3d6740e8872e6e69122ccc8087", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", - "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "6b0e4fe14ca1b12e131f64608f0bbaf36fd11451", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rhocall/viz": { "branch": "master", - "git_sha": "1013101da4252623fd7acf19cc581bae91d4f839", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rtgtools/format": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "rtgtools/vcfeval": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "f153f1f10e1083c49935565844cccb7453021682", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "4352dbdb09ec40db71e9b172b97a01dcf5622c26", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "f4596fe0bdc096cf53ec4497e83defdb3a94ff62", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "samtools/view": { "branch": "master", - "git_sha": "0bd7d2333a88483aa0476acea172e9f5f6dd83bb", + "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208", "installed_by": ["modules"] }, "sentieon/bwaindex": { @@ -444,27 +464,27 @@ }, "smncopynumbercaller": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "stranger": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", - "git_sha": "ba3f3df395d2719dcef5c67189042a1dc555c701", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "svdb/query": { "branch": "master", - "git_sha": "2a35cf4643135d51284236bc2835ee8b810c971d", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "tabix/bgzip": { "branch": "master", - "git_sha": "09d3c8c29b31a2dfd610305b10550f0e1dbcd4a9", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "tabix/bgziptabix": { @@ -474,42 +494,42 @@ }, "tabix/tabix": { "branch": "master", - "git_sha": "9502adb23c0b97ed8e616bbbdfa73b4585aec9a1", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", - "git_sha": "ae07bd3d3e229ca82bd94531648736d44367a391", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", - "git_sha": "6af4979ee1a57c986102175d9e1bb7ab834f3ae8", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "upd": { "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "vcf2cytosure": { "branch": "master", - "git_sha": "8694793954175ddd3001ddfbc0e36782a674d8a7", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] }, "vcfanno": { "branch": "master", - "git_sha": "b558cd24f8751dcda51f957391f5f9cb83e28586", + "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1", "installed_by": ["modules"] } } diff --git a/modules/nf-core/bcftools/annotate/environment.yml b/modules/nf-core/bcftools/annotate/environment.yml index e0abc8d2..5c00b116 100644 --- a/modules/nf-core/bcftools/annotate/environment.yml +++ b/modules/nf-core/bcftools/annotate/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_annotate channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf index 64e7ec76..c3b8b196 100644 --- a/modules/nf-core/bcftools/annotate/main.nf +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -4,14 +4,17 @@ process BCFTOOLS_ANNOTATE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_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 + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true path "versions.yml" , emit: versions when: @@ -27,8 +30,12 @@ process BCFTOOLS_ANNOTATE { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + def index_command = !index ? "bcftools index $input" : '' + if ("$input" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" """ + $index_command + bcftools \\ annotate \\ $args \\ @@ -52,10 +59,16 @@ process BCFTOOLS_ANNOTATE { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" - + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/annotate/meta.yml b/modules/nf-core/bcftools/annotate/meta.yml index f3aa463b..5bfccd2b 100644 --- a/modules/nf-core/bcftools/annotate/meta.yml +++ b/modules/nf-core/bcftools/annotate/meta.yml @@ -13,41 +13,64 @@ tools: documentation: https://samtools.github.io/bcftools/bcftools.html#annotate doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - 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 + - - 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}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: Compressed annotated VCF file + pattern: "*{vcf,vcf.gz,bcf,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@projectoriented" - "@ramprasadn" diff --git a/modules/nf-core/bcftools/annotate/tests/bcf.config b/modules/nf-core/bcftools/annotate/tests/bcf.config index b8496b33..79d26779 100644 --- a/modules/nf-core/bcftools/annotate/tests/bcf.config +++ b/modules/nf-core/bcftools/annotate/tests/bcf.config @@ -1,6 +1,4 @@ process { - withName: 'BCFTOOLS_ANNOTATE' { - ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type u" - ext.prefix = { "${meta.id}_ann" } - } -} \ No newline at end of file + ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type u" + ext.prefix = { "${meta.id}_ann" } +} diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test b/modules/nf-core/bcftools/annotate/tests/main.nf.test index 9abf9475..3a5c4933 100644 --- a/modules/nf-core/bcftools/annotate/tests/main.nf.test +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test @@ -9,20 +9,21 @@ nextflow_process { tag "bcftools" tag "bcftools/annotate" - test("sarscov2 - [vcf, tbi, vcf2, tbi2, []] - vcf_output") { + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_output") { config "./vcf.config" when { process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz_tbi'], checkIfExists: true), - [] + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) ] + input[1] = [] """ } } @@ -33,34 +34,161 @@ nextflow_process { { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.versions - ).match("vcf") } + ).match() } ) } } + test("sarscov2 - [vcf, [], annotation, annotation_tbi], [] - vcf_output") { - test("sarscov2 - [vcf, [], [], [], header] - bcf_output") { - - config "./bcf.config" + config "./vcf.config" when { process { """ - vcf = Channel.of([ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [], - [], - [] - ]) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.versions + ).match() } + ) + } + + } + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index") { - header = Channel.of( - '##INFO=', - '##INFO=' - ) - .collectFile(name:"headers.vcf", newLine:true) + config "./vcf_gz_index.config" - input[0] = vcf.combine(header) + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - [vcf, [], annotation, annotation_tbi], header - bcf_output") { + + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = Channel.of( + '##INFO=', + '##INFO=' + ).collectFile(name:"headers.vcf", newLine:true) """ } } @@ -77,7 +205,7 @@ nextflow_process { } - test("sarscov2 - [vcf, tbi, vcf2, tbi2, []] - stub") { + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - stub") { config "./vcf.config" options "-stub" @@ -85,13 +213,103 @@ nextflow_process { when { process { """ - input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test2_vcf_gz_tbi'], checkIfExists: true), - [] + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match()}, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) ] + input[1] = [] """ } } @@ -99,10 +317,11 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match("stub") } + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } ) } } -} +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap index 72b06878..bac2224a 100644 --- a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap @@ -11,16 +11,16 @@ ] ], [ - "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-05-03T09:21:58.526449656" + "timestamp": "2024-06-12T16:39:33.331888" }, - "vcf": { + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index": { "content": [ [ [ @@ -32,16 +32,301 @@ ] ], [ - "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:07:59.658031137" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:09:05.096883418" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:08:10.581301219" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:08:43.975017625" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi" + ] + ], + [ + + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:08:21.354059092" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_output": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:07:37.788393317" + }, + "sarscov2 - [vcf, [], annotation, annotation_tbi], [] - vcf_output": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz" + ] + ], + [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.2" + }, + "timestamp": "2024-08-15T10:07:48.500746325" + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-05-02T16:47:47.127427579" + "timestamp": "2024-08-15T10:09:16.094918834" }, - "stub": { + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [] - vcf_gz_index - stub": { "content": [ { "0": [ @@ -54,7 +339,31 @@ ] ], "1": [ - "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + ], "vcf": [ [ @@ -66,14 +375,14 @@ ] ], "versions": [ - "versions.yml:md5,ea2b798edb5c1c0d46938f313a97a901" + "versions.yml:md5,ea53f98610d42597cf384ff1fa3eb204" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-05-02T16:43:43.707474961" + "timestamp": "2024-08-15T10:08:54.366358502" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/annotate/tests/vcf.config b/modules/nf-core/bcftools/annotate/tests/vcf.config index cb809f61..611868d5 100644 --- a/modules/nf-core/bcftools/annotate/tests/vcf.config +++ b/modules/nf-core/bcftools/annotate/tests/vcf.config @@ -1,6 +1,4 @@ process { - withName: 'BCFTOOLS_ANNOTATE' { - ext.prefix = { "${meta.id}_vcf" } - ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type z" - } + ext.args = "-x ID,INFO/DP,FORMAT/DP --output-type z" + ext.prefix = { "${meta.id}_vcf" } } diff --git a/modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config new file mode 100644 index 00000000..2fd9a225 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.args = "--output-type z --write-index --no-version" + ext.prefix = { "${meta.id}_vcf" } +} diff --git a/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..512c1dfb --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.args = "--output-type z --write-index=csi --no-version" + ext.prefix = { "${meta.id}_vcf" } +} diff --git a/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..7feb5ebb --- /dev/null +++ b/modules/nf-core/bcftools/annotate/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.args = "--output-type z --write-index=tbi --no-version" + ext.prefix = { "${meta.id}_vcf" } +} diff --git a/modules/nf-core/bcftools/concat/environment.yml b/modules/nf-core/bcftools/concat/environment.yml index ff0200df..5c00b116 100644 --- a/modules/nf-core/bcftools/concat/environment.yml +++ b/modules/nf-core/bcftools/concat/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_concat channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index d64640b3..a94b28d8 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -4,15 +4,17 @@ process BCFTOOLS_CONCAT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcfs), path(tbi) output: - tuple val(meta), path("*.gz"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf + tuple val(meta), path("${prefix}.vcf.gz.tbi"), emit: tbi, optional: true + tuple val(meta), path("${prefix}.vcf.gz.csi"), emit: csi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -20,7 +22,11 @@ process BCFTOOLS_CONCAT { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" + def tbi_names = tbi.findAll { file -> !(file instanceof List) }.collect { file -> file.name } + def create_input_index = vcfs.collect { vcf -> tbi_names.contains(vcf.name + ".tbi") ? "" : "tabix ${vcf}" }.join("\n ") """ + ${create_input_index} + bcftools concat \\ --output ${prefix}.vcf.gz \\ $args \\ @@ -34,9 +40,16 @@ process BCFTOOLS_CONCAT { """ stub: + def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_index = index.matches("csi|tbi") ? "touch ${prefix}.vcf.gz.${index}" : "" """ echo "" | gzip > ${prefix}.vcf.gz + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index 91cb54d5..d2565b28 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -13,36 +13,68 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcfs: - type: list - description: | - List containing 2 or more vcf files - e.g. [ 'file1.vcf', 'file2.vcf' ] - - tbi: - type: list - description: | - List containing 2 or more index files (optional) - e.g. [ 'file1.tbi', 'file2.tbi' ] + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: list + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbi: + type: list + description: | + List containing 2 or more index files (optional) + e.g. [ 'file1.tbi', 'file2.tbi' ] output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: VCF concatenated output file - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.{vcf.gz}" + - ${prefix}.vcf.gz: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.{vcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.tbi" + - ${prefix}.vcf.gz.tbi: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.csi" + - ${prefix}.vcf.gz.csi: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@nvnieuwk" diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test b/modules/nf-core/bcftools/concat/tests/main.nf.test index d5d9f787..cb4642b2 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test @@ -9,22 +9,23 @@ nextflow_process { tag "bcftools" tag "bcftools/concat" - config "./nextflow.config" - test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]") { + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]]") { + + config "./nextflow.config" when { process { """ - input[0] = [ + input[0] = [ [ id:'test3' ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) ] ] """ @@ -40,16 +41,130 @@ nextflow_process { } - test("sarscov2 - [[vcf1, vcf2], []]") { + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index") { + + config "./vcf_gz_index.config" when { process { """ - input[0] = [ + input[0] = [ [ id:'test3' ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + + test("homo_sapiens - [[vcf1, vcf2], []]") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) ], [] ] @@ -66,21 +181,23 @@ nextflow_process { } - test("sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub") { + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - stub") { + config "./nextflow.config" options "-stub" + when { process { """ - input[0] = [ + input[0] = [ [ id:'test3' ], // meta map [ - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) ], [ - file(params.test_data['homo_sapiens']['illumina']['test_genome_vcf_gz_tbi'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_haplotc_cnn_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) ] ] """ @@ -96,4 +213,104 @@ nextflow_process { } -} + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test3' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gatk/haplotypecaller_calls/test_haplotcaller.cnn.vcf.gz.tbi', checkIfExists: true) + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap index 90d3fc06..09e87cd3 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap @@ -1,5 +1,60 @@ { - "sarscov2 - [[vcf1, vcf2], []]": { + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-26T11:04:11.178539482" + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]]": { "content": [ { "0": [ @@ -11,7 +66,19 @@ ] ], "1": [ - "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -22,17 +89,134 @@ ] ], "versions": [ - "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-26T11:03:08.765639958" + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-26T11:03:21.607274757" + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-26T11:04:27.332133878" + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-03T13:22:49.766749302" + "timestamp": "2024-09-26T11:03:36.575719606" }, - "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]]": { + "homo_sapiens - [[vcf1, vcf2], []]": { "content": [ { "0": [ @@ -44,7 +228,19 @@ ] ], "1": [ - "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -55,17 +251,17 @@ ] ], "versions": [ - "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-03T13:22:41.119912312" + "timestamp": "2024-09-26T11:03:54.069826178" }, - "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { "content": [ { "0": [ @@ -77,7 +273,19 @@ ] ], "1": [ - "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -88,14 +296,100 @@ ] ], "versions": [ - "versions.yml:md5,24ae05eb858733b40fbd3f89743a6d09" + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-26T11:04:02.45346063" + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,5f6796c3ae109a1a5b87353954693f5a" + ] + ], + [ + + ], + [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-26T11:03:44.618596639" + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" + ], + "csi": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test3" + }, + "test3_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,c6e19f105510a46af1c5da9064e2e659" ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-03T13:22:59.90466392" + "timestamp": "2024-09-26T11:04:19.745768656" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/concat/tests/vcf_gz_index.config b/modules/nf-core/bcftools/concat/tests/vcf_gz_index.config new file mode 100644 index 00000000..7dd696ee --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..aebffb6f --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..b192ae7d --- /dev/null +++ b/modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/filter/environment.yml b/modules/nf-core/bcftools/filter/environment.yml index b2698757..5c00b116 100644 --- a/modules/nf-core/bcftools/filter/environment.yml +++ b/modules/nf-core/bcftools/filter/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_filter channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf index cc9a2361..8f92c51a 100644 --- a/modules/nf-core/bcftools/filter/main.nf +++ b/modules/nf-core/bcftools/filter/main.nf @@ -4,14 +4,16 @@ process BCFTOOLS_FILTER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcf) output: tuple val(meta), path("*.${extension}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true path "versions.yml" , emit: versions when: @@ -45,19 +47,23 @@ process BCFTOOLS_FILTER { stub: 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" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" if ("$vcf" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" - def create_file = extension.endsWith(".gz") ? "echo '' | gzip > ${prefix}.${extension}" : "touch ${prefix}.${extension}" - """ - ${create_file} + ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/filter/meta.yml b/modules/nf-core/bcftools/filter/meta.yml index deb93b13..8ac594fc 100644 --- a/modules/nf-core/bcftools/filter/meta.yml +++ b/modules/nf-core/bcftools/filter/meta.yml @@ -12,30 +12,53 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF input file - pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF input file + pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: VCF filtered output file - pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.${extension}": + type: file + description: VCF filtered output file + pattern: "*.{vcf,bcf,vcf.gz,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/bcftools/filter/tests/main.nf.test b/modules/nf-core/bcftools/filter/tests/main.nf.test index eaf100e8..646f37ad 100644 --- a/modules/nf-core/bcftools/filter/tests/main.nf.test +++ b/modules/nf-core/bcftools/filter/tests/main.nf.test @@ -9,10 +9,10 @@ nextflow_process { tag "bcftools" tag "bcftools/filter" - config "./nextflow.config" - test("sarscov2 - vcf") { + config "./nextflow.config" + when { process { """ @@ -33,8 +33,100 @@ nextflow_process { } + test("sarscov2 - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - vcf - bcf output") { + config "./nextflow.config" + when { process { """ @@ -57,6 +149,7 @@ nextflow_process { test("sarscov2 - vcf - stub") { + config "./nextflow.config" options "-stub" when { @@ -79,4 +172,82 @@ nextflow_process { } -} + test("sarscov2 - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [id:"vcf_test"], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/filter/tests/main.nf.test.snap b/modules/nf-core/bcftools/filter/tests/main.nf.test.snap index f8e17aa0..3d7605f2 100644 --- a/modules/nf-core/bcftools/filter/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/filter/tests/main.nf.test.snap @@ -1,4 +1,59 @@ { + "sarscov2 - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:59:08.235854993" + }, "vcf": { "content": [ { @@ -11,7 +66,19 @@ ] ], "1": [ - "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -22,15 +89,15 @@ ] ], "versions": [ - "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-27T16:57:32.940161987" + "timestamp": "2024-06-04T15:20:28.427974818" }, "bcf output": { "content": [ @@ -44,7 +111,19 @@ ] ], "1": [ - "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -55,15 +134,77 @@ ] ], "versions": [ - "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T15:20:34.049236749" + }, + "sarscov2 - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-03-27T16:45:14.586866398" + "timestamp": "2024-06-05T08:09:49.837854646" + }, + "sarscov2 - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:57:19.513365022" }, "vcf - stub": { "content": [ @@ -77,7 +218,19 @@ ] ], "1": [ - "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -88,14 +241,155 @@ ] ], "versions": [ - "versions.yml:md5,7dc77043f9afb848d942d47a7bc19f67" + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T15:29:55.846566153" + }, + "sarscov2 - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ], + "csi": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T15:59:37.636874258" + }, + "sarscov2 - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ], + "csi": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.02.0" + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:58:46.36278584" + }, + "sarscov2 - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + + ], + [ + [ + { + "id": "vcf_test" + }, + "vcf_test_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,9a336d1ee26b527d7a2bdbeead155f64" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-03-27T17:05:52.80837892" + "timestamp": "2024-06-05T13:57:34.748836577" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/filter/tests/vcf_gz_index.config b/modules/nf-core/bcftools/filter/tests/vcf_gz_index.config new file mode 100644 index 00000000..7dd696ee --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/filter/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/filter/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..aebffb6f --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/filter/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/filter/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..b192ae7d --- /dev/null +++ b/modules/nf-core/bcftools/filter/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/merge/environment.yml b/modules/nf-core/bcftools/merge/environment.yml index 55de7cd3..5c00b116 100644 --- a/modules/nf-core/bcftools/merge/environment.yml +++ b/modules/nf-core/bcftools/merge/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_merge channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index b85d3fec..facb14ea 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -4,26 +4,28 @@ process BCFTOOLS_MERGE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcfs), path(tbis) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) - path(bed) + tuple val(meta4), path(bed) output: - tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: merged_variants + tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: vcf + tuple val(meta), path("*.{csi,tbi}") , emit: index, optional: true path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def input = (vcfs.collect().size() > 1) ? vcfs.sort{ it.name } : vcfs def regions = bed ? "--regions-file $bed" : "" def extension = args.contains("--output-type b") || args.contains("-Ob") ? "bcf.gz" : args.contains("--output-type u") || args.contains("-Ou") ? "bcf" : @@ -37,7 +39,7 @@ process BCFTOOLS_MERGE { $regions \\ --threads $task.cpus \\ --output ${prefix}.${extension} \\ - $vcfs + $input cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -53,8 +55,16 @@ process BCFTOOLS_MERGE { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ - touch ${prefix}.${extension} + ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml index 87707140..2cf09a1d 100644 --- a/modules/nf-core/bcftools/merge/meta.yml +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -12,70 +12,78 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcfs: - type: file - description: | - List containing 2 or more vcf files - e.g. [ 'file1.vcf', 'file2.vcf' ] - - tbis: - type: file - description: | - List containing the tbi index files corresponding to the vcfs input files - e.g. [ 'file1.vcf.tbi', 'file2.vcf.tbi' ] - - meta2: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: "(Optional) The fasta reference file (only necessary for the `--gvcf FILE` parameter)" - pattern: "*.{fasta,fa}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fai: - type: file - description: "(Optional) The fasta reference file index (only necessary for the `--gvcf FILE` parameter)" - pattern: "*.fai" - - bed: - type: file - description: "(Optional) The bed regions to merge on" - pattern: "*.bed" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcfs: + type: file + description: | + List containing 2 or more vcf files + e.g. [ 'file1.vcf', 'file2.vcf' ] + - tbis: + type: file + description: | + List containing the tbi index files corresponding to the vcfs input files + e.g. [ 'file1.vcf.tbi', 'file2.vcf.tbi' ] + - - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: "(Optional) The fasta reference file (only necessary for the `--gvcf + FILE` parameter)" + pattern: "*.{fasta,fa}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: + type: file + description: "(Optional) The fasta reference file index (only necessary for + the `--gvcf FILE` parameter)" + pattern: "*.fai" + - - meta4: + type: map + description: | + Groovy Map containing bed information + e.g. [ id:'genome' ] + - bed: + type: file + description: "(Optional) The bed regions to merge on" + pattern: "*.bed" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf_gz: - type: file - description: VCF merged output file (bgzipped) => when `--output-type z` is used - pattern: "*.vcf.gz" - vcf: - type: file - description: VCF merged output file => when `--output-type v` is used - pattern: "*.vcf" - - bcf_gz: - type: file - description: BCF merged output file (bgzipped) => when `--output-type b` is used - pattern: "*.bcf.gz" - - bcf: - type: file - description: BCF merged output file => when `--output-type u` is used - pattern: "*.bcf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{bcf,vcf}{,.gz}": + type: file + description: merged output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{csi,tbi}": + type: file + description: index of merged output + pattern: "*.{csi,tbi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/bcftools/merge/tests/bcf.config b/modules/nf-core/bcftools/merge/tests/bcf.config new file mode 100644 index 00000000..4467d07d --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/bcf.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type u --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/bcf_gz.config b/modules/nf-core/bcftools/merge/tests/bcf_gz.config new file mode 100644 index 00000000..280de8db --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/bcf_gz.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type b --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test b/modules/nf-core/bcftools/merge/tests/main.nf.test new file mode 100644 index 00000000..3995fc1a --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test @@ -0,0 +1,853 @@ +nextflow_process { + + name "Test Process BCFTOOLS_MERGE" + script "../main.nf" + process "BCFTOOLS_MERGE" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/merge" + + test("sarscov2 - [vcf, tbi], [], [], []") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf output") { + + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output") { + + config "./vcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf output") { + + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, + { assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output") { + + config "./bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, + { assert snapshot( + file(process.out.vcf.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index") { + + config "./vcf_gz_index_csi.config" + + when { + + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.index.get(0).get(1)).name, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], bed") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output") { + + config "./nextflow.gvcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ] + input[2] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + ] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).vcf.variantsMD5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - one sample") { + + config "./nextflow.config" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot( + path(process.out.vcf.get(0).get(1)).md5, + process.out.versions, + ).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub") { + + options "-stub" + config "./vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub") { + + options "-stub" + config "./vcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub") { + + options "-stub" + config "./bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub") { + + options "-stub" + config "./bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("bcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub") { + + options "-stub" + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub") { + + options "-stub" + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("csi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub") { + + options "-stub" + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert process.out.index.get(0).get(1).endsWith("tbi") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], bed - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/bed/test.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub") { + + options "-stub" + config "./nextflow.gvcf.config" + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz.tbi', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test2.genome.vcf.gz.tbi', checkIfExists: true), + ] + ] + input[1] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + ] + input[2] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ] + ] + input[3] = [ + [ id:'test' ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf.gz") }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - one sample - stub") { + + options "-stub" + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz', checkIfExists: true) + ], + [ + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.vcf.gz.tbi', checkIfExists: true) + ] + ] + input[1] = [[],[]] + input[2] = [[],[]] + input[3] = [[],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.vcf.get(0).get(1).endsWith("vcf") }, + { assert snapshot(process.out).match() } + ) + } + + } +} diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap new file mode 100644 index 00000000..b3b62556 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap @@ -0,0 +1,607 @@ +{ + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.tbi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:34:16.977726522" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:34.532910365" + }, + "sarscov2 - [vcf, tbi], [], [], bed": { + "content": [ + "febdcfb851dcfc83d8248520830aef10", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:29:48.630057872" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:59.983157569" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf output": { + "content": [ + "57bb84274f336465d0a0946b532093b0", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:29:05.528412678" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:58:46.619657457" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:12.848227353" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:23:15.794389239" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:57:16.850641473" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:27.949031071" + }, + "sarscov2 - [vcf, tbi], [], [], bed - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:19.273064822" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf output": { + "content": [ + "test.bcf", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:38.567500859" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:47.356328326" + }, + "sarscov2 - [vcf, tbi], [], [], [] - one sample - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T15:13:18.708495878" + }, + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:56:45.706125286" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + "test.vcf.gz.csi", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:33:43.639646108" + }, + "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output": { + "content": [ + "645b7f7f9131bfe350a9ec3cf82c17fe", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:55:44.299812124" + }, + "sarscov2 - [vcf, tbi], [], [], [] - one sample": { + "content": [ + "2a374cf02f0c32cf607646167e7f153b", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T15:37:38.491844702" + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:17:28.188178904" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ], + "index": [ + [ + { + "id": "test" + }, + "test.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-05T13:18:06.430943593" + }, + "sarscov2 - [vcf, tbi], [], [], []": { + "content": [ + "e0de448dc8e712956a03ce68d79a0b3a", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T12:31:03.893007442" + }, + "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output": { + "content": [ + "test.bcf.gz", + [ + "versions.yml:md5,d2c0a30d9a4cc6df89a464ae82e0c38a" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-05T11:56:56.416361069" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.config b/modules/nf-core/bcftools/merge/tests/nextflow.config new file mode 100644 index 00000000..c3f0b715 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: BCFTOOLS_MERGE { + ext.args = '--force-samples --force-single --no-version' + } +} diff --git a/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config new file mode 100644 index 00000000..8c457b71 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/nextflow.gvcf.config @@ -0,0 +1,5 @@ +process { + withName: BCFTOOLS_MERGE { + ext.args = { "--force-samples --no-version --output-type z --gvcf $fasta" } + } +} diff --git a/modules/nf-core/bcftools/merge/tests/tags.yml b/modules/nf-core/bcftools/merge/tests/tags.yml new file mode 100644 index 00000000..1464d0c1 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/merge: + - "modules/nf-core/bcftools/merge/**" diff --git a/modules/nf-core/bcftools/merge/tests/vcf.config b/modules/nf-core/bcftools/merge/tests/vcf.config new file mode 100644 index 00000000..759222e5 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type v --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz.config b/modules/nf-core/bcftools/merge/tests/vcf_gz.config new file mode 100644 index 00000000..8b6ad8b4 --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz.config @@ -0,0 +1,3 @@ +process { + ext.args = '--output-type z --no-version' +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config new file mode 100644 index 00000000..9f1e9b1d --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..8308ee1a --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_csi.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..9be4075b --- /dev/null +++ b/modules/nf-core/bcftools/merge/tests/vcf_gz_index_tbi.config @@ -0,0 +1,3 @@ +process { + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/norm/environment.yml b/modules/nf-core/bcftools/norm/environment.yml index fe80e4e7..5c00b116 100644 --- a/modules/nf-core/bcftools/norm/environment.yml +++ b/modules/nf-core/bcftools/norm/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_norm channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index 47d3dab1..bd7a2501 100644 --- a/modules/nf-core/bcftools/norm/main.nf +++ b/modules/nf-core/bcftools/norm/main.nf @@ -4,16 +4,18 @@ process BCFTOOLS_NORM { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcf), path(tbi) tuple val(meta2), path(fasta) output: - tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,7 +32,7 @@ process BCFTOOLS_NORM { """ bcftools norm \\ --fasta-ref ${fasta} \\ - --output ${prefix}.${extension}\\ + --output ${prefix}.${extension} \\ $args \\ --threads $task.cpus \\ ${vcf} @@ -49,8 +51,16 @@ process BCFTOOLS_NORM { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf.gz" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ - touch ${prefix}.${extension} + ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/norm/meta.yml b/modules/nf-core/bcftools/norm/meta.yml index 1f3e1b62..b6edeb4a 100644 --- a/modules/nf-core/bcftools/norm/meta.yml +++ b/modules/nf-core/bcftools/norm/meta.yml @@ -13,46 +13,70 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - The vcf file to be normalized - e.g. 'file1.vcf' - pattern: "*.{vcf,vcf.gz}" - - tbi: - type: file - 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 - pattern: "*.{fasta,fa}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be normalized + e.g. 'file1.vcf' + pattern: "*.{vcf,vcf.gz}" + - tbi: + type: file + 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 + pattern: "*.{fasta,fa}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: One of uncompressed VCF (.vcf), compressed VCF (.vcf.gz), compressed BCF (.bcf.gz) or uncompressed BCF (.bcf) normalized output file - pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: One of uncompressed VCF (.vcf), compressed VCF (.vcf.gz), compressed + BCF (.bcf.gz) or uncompressed BCF (.bcf) normalized output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" - "@ramprasadn" diff --git a/modules/nf-core/bcftools/norm/tests/main.nf.test b/modules/nf-core/bcftools/norm/tests/main.nf.test new file mode 100644 index 00000000..dbc41502 --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/main.nf.test @@ -0,0 +1,563 @@ +nextflow_process { + + name "Test Process BCFTOOLS_NORM" + script "../main.nf" + process "BCFTOOLS_NORM" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/norm" + + test("sarscov2 - [ vcf, [] ], fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } } + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } } + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } } + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta") { + + config "./nextflow.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - vcf output") { + + config "./nextflow.vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - vcf_gz output") { + + config "./nextflow.vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - bcf output") { + + config "./nextflow.bcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - bcf_gz output") { + + config "./nextflow.bcf_gz.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - stub") { + + config "./nextflow.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta -stub") { + + config "./nextflow.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - vcf output -stub") { + + config "./nextflow.vcf.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - vcf_gz output - stub") { + + config "./nextflow.vcf.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - bcf output - stub") { + + config "./nextflow.bcf.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, tbi ], fasta - bcf_gz output - stub") { + + config "./nextflow.bcf_gz.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/norm/tests/main.nf.test.snap b/modules/nf-core/bcftools/norm/tests/main.nf.test.snap new file mode 100644 index 00000000..3be52116 --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/main.nf.test.snap @@ -0,0 +1,758 @@ +{ + "sarscov2 - [ vcf, tbi ], fasta - vcf_gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:38:42.639095032" + }, + "sarscov2 - [ vcf, [] ], fasta - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:38:05.448449893" + }, + "sarscov2 - [ vcf, tbi ], fasta - vcf output": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:37:12.741719961" + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:39:22.875147941" + }, + "sarscov2 - [ vcf, tbi ], fasta - vcf_gz output": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T08:15:23.38765384" + }, + "sarscov2 - [ vcf, [] ], fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:36:21.519977754" + }, + "sarscov2 - [ vcf, tbi ], fasta - vcf output -stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:38:27.8230994" + }, + "sarscov2 - [ vcf, tbi ], fasta - bcf_gz output": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.bcf:md5,f35545c26a788b5eb697d9c0490339d9" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.bcf:md5,f35545c26a788b5eb697d9c0490339d9" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:37:53.942403192" + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:56:05.3799488" + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + [ + + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:53:28.356741947" + }, + "sarscov2 - [ vcf, tbi ], fasta": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:36:58.39445154" + }, + "sarscov2 - [ vcf, tbi ], fasta -stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:38:16.259516142" + }, + "sarscov2 - [ vcf, tbi ], fasta - bcf_gz output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.bcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:39:10.503208929" + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T07:52:58.381931979" + }, + "sarscov2 - [ vcf, tbi ], fasta - bcf output - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.bcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:38:59.121377258" + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:56:16.404380471" + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,63e5adbaf3dd94550e9e3d7935dd28db" + ] + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi" + ] + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T13:53:09.808834237" + }, + "sarscov2 - [ vcf, tbi ], fasta - bcf output": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_norm.bcf.gz:md5,638c3c25bdd495c90ecbccb69ee77f07" + ] + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ], + "csi": [ + + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_norm.bcf.gz:md5,638c3c25bdd495c90ecbccb69ee77f07" + ] + ], + "versions": [ + "versions.yml:md5,ff760495922469e56d0fc3372773000d" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T14:37:42.141945244" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/norm/tests/nextflow.bcf.config b/modules/nf-core/bcftools/norm/tests/nextflow.bcf.config new file mode 100644 index 00000000..b79af868 --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/nextflow.bcf.config @@ -0,0 +1,4 @@ +process { + ext.args = '-m -any --output-type b --no-version' + ext.prefix = "test_norm" +} diff --git a/modules/nf-core/bcftools/norm/tests/nextflow.bcf_gz.config b/modules/nf-core/bcftools/norm/tests/nextflow.bcf_gz.config new file mode 100644 index 00000000..f36f397c --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/nextflow.bcf_gz.config @@ -0,0 +1,4 @@ +process { + ext.args = '-m -any --output-type u --no-version' + ext.prefix = "test_norm" +} diff --git a/modules/nf-core/bcftools/norm/tests/nextflow.config b/modules/nf-core/bcftools/norm/tests/nextflow.config new file mode 100644 index 00000000..510803b4 --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/nextflow.config @@ -0,0 +1,4 @@ +process { + ext.args = '-m -any --no-version' + ext.prefix = "test_norm" +} diff --git a/modules/nf-core/bcftools/norm/tests/nextflow.vcf.config b/modules/nf-core/bcftools/norm/tests/nextflow.vcf.config new file mode 100644 index 00000000..10bf93e3 --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/nextflow.vcf.config @@ -0,0 +1,4 @@ +process { + ext.args = '-m -any --output-type v --no-version' + ext.prefix = "test_norm" +} diff --git a/modules/nf-core/bcftools/norm/tests/nextflow.vcf_gz.config b/modules/nf-core/bcftools/norm/tests/nextflow.vcf_gz.config new file mode 100644 index 00000000..b31dd2de --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/nextflow.vcf_gz.config @@ -0,0 +1,4 @@ +process { + ext.args = '-m -any --output-type z ---no-version' + ext.prefix = "test_norm" +} diff --git a/modules/nf-core/bcftools/norm/tests/tags.yml b/modules/nf-core/bcftools/norm/tests/tags.yml new file mode 100644 index 00000000..f6f5e356 --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/tags.yml @@ -0,0 +1,2 @@ +bcftools/norm: + - "modules/nf-core/bcftools/norm/**" diff --git a/modules/nf-core/bcftools/norm/tests/vcf_gz_index.config b/modules/nf-core/bcftools/norm/tests/vcf_gz_index.config new file mode 100644 index 00000000..7dd696ee --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/norm/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/norm/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..aebffb6f --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/norm/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/norm/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..b192ae7d --- /dev/null +++ b/modules/nf-core/bcftools/norm/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bcftools/reheader/environment.yml b/modules/nf-core/bcftools/reheader/environment.yml index aab0dc92..5c00b116 100644 --- a/modules/nf-core/bcftools/reheader/environment.yml +++ b/modules/nf-core/bcftools/reheader/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_reheader channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/reheader/main.nf b/modules/nf-core/bcftools/reheader/main.nf index 82527167..9cf6d0d3 100644 --- a/modules/nf-core/bcftools/reheader/main.nf +++ b/modules/nf-core/bcftools/reheader/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_REHEADER { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcf), path(header), path(samples) @@ -13,6 +13,7 @@ process BCFTOOLS_REHEADER { output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.{csi,tbi}") , emit: index, optional: true path "versions.yml" , emit: versions when: @@ -59,8 +60,16 @@ process BCFTOOLS_REHEADER { args2.contains("--output-type z") || args2.contains("-Oz") ? "vcf.gz" : args2.contains("--output-type v") || args2.contains("-Ov") ? "vcf" : "vcf" + def index = args2.contains("--write-index=tbi") || args2.contains("-W=tbi") ? "tbi" : + args2.contains("--write-index=csi") || args2.contains("-W=csi") ? "csi" : + args2.contains("--write-index") || args2.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ - touch ${prefix}.${extension} + ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/reheader/meta.yml b/modules/nf-core/bcftools/reheader/meta.yml index 690d4ead..47e5344c 100644 --- a/modules/nf-core/bcftools/reheader/meta.yml +++ b/modules/nf-core/bcftools/reheader/meta.yml @@ -12,47 +12,60 @@ tools: documentation: http://samtools.github.io/bcftools/bcftools.html#reheader doi: 10.1093/gigascience/giab008 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF/BCF file - pattern: "*.{vcf.gz,vcf,bcf}" - - header: - type: file - description: New header to add to the VCF - pattern: "*.{header.txt}" - - samples: - type: file - description: File containing sample names to update (one sample per line) - pattern: "*.{samples.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 - pattern: "*.{fai}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF/BCF file + pattern: "*.{vcf.gz,vcf,bcf}" + - header: + type: file + description: New header to add to the VCF + pattern: "*.{header.txt}" + - samples: + type: file + description: File containing sample names to update (one sample per line) + pattern: "*.{samples.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 + pattern: "*.{fai}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - vcf: - type: file - description: VCF with updated header, bgzipped per default - pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: VCF with updated header, bgzipped per default + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - index: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{csi,tbi}": + type: file + description: Index of VCF with updated header + pattern: "*.{csi,tbi}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@bjohnnyd" - "@jemten" diff --git a/modules/nf-core/bcftools/reheader/tests/main.nf.test b/modules/nf-core/bcftools/reheader/tests/main.nf.test index f3200cb3..96c1b7b0 100644 --- a/modules/nf-core/bcftools/reheader/tests/main.nf.test +++ b/modules/nf-core/bcftools/reheader/tests/main.nf.test @@ -17,13 +17,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [], [] ] - input[1] = [ + input[1] = [ [ id:'genome' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] """ } @@ -47,13 +47,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [], [] ] - input[1] = [ + input[1] = [ [ id:'genome' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] """ } @@ -68,6 +68,111 @@ nextflow_process { } + test("sarscov2 - [vcf, [], []], fai - vcf.gz output - index") { + + config "./vcf_gz_index.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.index[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - vcf.gz output - csi index") { + + config "./vcf_gz_index_csi.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.index[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - vcf.gz output - tbi index") { + + config "./vcf_gz_index_tbi.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.index[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - [vcf, [], []], fai - bcf output") { config "./bcf.config" @@ -77,13 +182,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [], [] ] - input[1] = [ + input[1] = [ [ id:'genome' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] """ } @@ -107,11 +212,11 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true), [] ] - input[1] = [ + input[1] = [ [ id:'genome' ], // meta map [] ] @@ -137,15 +242,15 @@ nextflow_process { """ ch_no_samples = Channel.of([ [ id:'test', single_end:false ], - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [] ]) ch_samples = Channel.of(["samples.txt", "new_name"]) .collectFile(newLine:true) input[0] = ch_no_samples.combine(ch_samples) - input[1] = [ + input[1] = [ [ id:'genome' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] """ } @@ -170,13 +275,13 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), [], [] ] - input[1] = [ + input[1] = [ [ id:'genome' ], // meta map - file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ] """ } @@ -193,5 +298,97 @@ nextflow_process { } } + test("sarscov2 - [vcf, [], []], fai - vcf.gz output - index -stub") { + + options "-stub" + config "./vcf_gz_index.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - vcf.gz output - csi index -stub") { + + options "-stub" + config "./vcf_gz_index_csi.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("sarscov2 - [vcf, [], []], fai - vcf.gz output - tbi index -stub") { + + options "-stub" + config "./vcf_gz_index_tbi.config" + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + [], + [] + ] + input[1] = [ + [ id:'genome' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } } diff --git a/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap b/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap index 112736a1..87a3654a 100644 --- a/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/reheader/tests/main.nf.test.snap @@ -1,4 +1,140 @@ { + "sarscov2 - [vcf, [], []], fai - vcf.gz output - tbi index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T10:09:05.955833763" + }, + "sarscov2 - [vcf, [], []], fai - vcf.gz output - index -stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:52:41.444952182" + }, + "sarscov2 - [vcf, [], []], fai - vcf.gz output - tbi index -stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:53:04.314827944" + }, "sarscov2 - [vcf, [], []], fai - vcf output": { "content": [ { @@ -12,7 +148,13 @@ ] ], "1": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + ], "vcf": [ [ @@ -24,11 +166,15 @@ ] ], "versions": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" ] } ], - "timestamp": "2023-11-29T13:05:44.058376693" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:50:41.983008108" }, "sarscov2 - [vcf, [], []], fai - bcf output": { "content": [ @@ -39,11 +185,17 @@ "id": "test", "single_end": false }, - "tested.bcf.gz:md5,c31d9afd8614832c2a46d9a55682c97a" + "tested.bcf.gz:md5,c8a304c8d2892039201154153c8cd536" ] ], "1": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + ], "vcf": [ [ @@ -51,15 +203,19 @@ "id": "test", "single_end": false }, - "tested.bcf.gz:md5,c31d9afd8614832c2a46d9a55682c97a" + "tested.bcf.gz:md5,c8a304c8d2892039201154153c8cd536" ] ], "versions": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" ] } ], - "timestamp": "2023-11-29T13:06:03.793372514" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:51:43.072513252" }, "sarscov2 - [vcf, [], []], fai - vcf.gz output": { "content": [ @@ -70,11 +226,17 @@ "id": "test", "single_end": false }, - "tested.vcf.gz:md5,a1e45fe6d2b386fc2611766e5d2937ee" + "tested.vcf.gz:md5,8e722884ffb75155212a3fc053918766" ] ], "1": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + ], "vcf": [ [ @@ -82,24 +244,145 @@ "id": "test", "single_end": false }, - "tested.vcf.gz:md5,a1e45fe6d2b386fc2611766e5d2937ee" + "tested.vcf.gz:md5,8e722884ffb75155212a3fc053918766" ] ], "versions": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" ] } ], - "timestamp": "2023-11-29T13:05:53.954090441" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:50:53.055630152" + }, + "sarscov2 - [vcf, [], []], fai - vcf.gz output - index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T10:08:37.999924355" + }, + "sarscov2 - [vcf, [], []], fai - vcf.gz output - csi index -stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:52:52.512269206" }, "sarscov2 - [vcf, [], []], fai - stub": { "content": [ "tested.vcf", [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" ] ], - "timestamp": "2023-11-29T13:06:33.549685303" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:16:36.337112514" + }, + "sarscov2 - [vcf, [], []], fai - vcf.gz output - csi index": { + "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T10:08:55.434831174" }, "sarscov2 - [vcf, [], samples], fai": { "content": [ @@ -114,7 +397,13 @@ ] ], "1": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + ], "vcf": [ [ @@ -126,11 +415,15 @@ ] ], "versions": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" ] } ], - "timestamp": "2023-11-29T13:06:23.474745156" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:52:12.216002665" }, "sarscov2 - [vcf, header, []], []": { "content": [ @@ -145,7 +438,13 @@ ] ], "1": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + + ], + "2": [ + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" + ], + "index": [ + ], "vcf": [ [ @@ -157,10 +456,14 @@ ] ], "versions": [ - "versions.yml:md5,fbf8ac8da771b6295a47392003f983ce" + "versions.yml:md5,486e3d4ebc1dbf5c0a4dfaebae12ea34" ] } ], - "timestamp": "2023-11-29T13:06:13.841648691" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-09-03T09:51:54.062386022" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/reheader/tests/vcf_gz_index.config b/modules/nf-core/bcftools/reheader/tests/vcf_gz_index.config new file mode 100644 index 00000000..1e050ec7 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args2 = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/reheader/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/reheader/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..536e4b42 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args2 = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/reheader/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/reheader/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..91a80db7 --- /dev/null +++ b/modules/nf-core/bcftools/reheader/tests/vcf_gz_index_tbi.config @@ -0,0 +1,5 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args2 = "--output-type z --write-index=tbi --no-version" + +} diff --git a/modules/nf-core/bcftools/roh/environment.yml b/modules/nf-core/bcftools/roh/environment.yml index 7a9ee9bd..5c00b116 100644 --- a/modules/nf-core/bcftools/roh/environment.yml +++ b/modules/nf-core/bcftools/roh/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_roh channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf index 8e03e47d..ac96eef5 100644 --- a/modules/nf-core/bcftools/roh/main.nf +++ b/modules/nf-core/bcftools/roh/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_ROH { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/roh/meta.yml b/modules/nf-core/bcftools/roh/meta.yml index ee928a8f..032148fa 100644 --- a/modules/nf-core/bcftools/roh/meta.yml +++ b/modules/nf-core/bcftools/roh/meta.yml @@ -1,5 +1,6 @@ name: "bcftools_roh" -description: A program for detecting runs of homo/autozygosity. Only bi-allelic sites are considered. +description: A program for detecting runs of homo/autozygosity. Only bi-allelic sites + are considered. keywords: - roh - biallelic @@ -7,53 +8,65 @@ keywords: - autozygosity tools: - "roh": - description: "A program for detecting runs of homo/autozygosity. Only bi-allelic sites are considered." + description: "A program for detecting runs of homo/autozygosity. Only bi-allelic + sites are considered." homepage: https://www.htslib.org/ documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: VCF file - pattern: "*.{vcf,.vcf.gz}" - - af_file: - type: file - description: "Read allele frequencies from a tab-delimited file containing the columns: CHROM\tPOS\tREF,ALT\tAF." - - af_file_tbi: - type: file - description: "tbi index of af_file." - - genetic_map: - type: file - description: "Genetic map in the format required also by IMPUTE2." - - regions_file: - type: file - description: "Regions can be specified either on command line or in a VCF, BED, or tab-delimited file (the default)." - - samples_file: - type: file - description: "File of sample names to include or exclude if prefixed with '^'." - - targets_file: - type: file - description: "Targets can be specified either on command line or in a VCF, BED, or tab-delimited file (the default)." + - - 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}" + - tbi: + type: file + description: TBI file + patthern: "*.tbi" + - - af_file: + type: file + description: "Read allele frequencies from a tab-delimited file containing the + columns: CHROM\tPOS\tREF,ALT\tAF." + - af_file_tbi: + type: file + description: "tbi index of af_file." + - - genetic_map: + type: file + description: "Genetic map in the format required also by IMPUTE2." + - - regions_file: + type: file + description: "Regions can be specified either on command line or in a VCF, BED, + or tab-delimited file (the default)." + - - samples_file: + type: file + description: "File of sample names to include or exclude if prefixed with '^'." + - - targets_file: + type: file + description: "Targets can be specified either on command line or in a VCF, BED, + or tab-delimited file (the default)." 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" - roh: - type: file - description: Contains site-specific and/or per-region runs of homo/autozygosity calls. - pattern: "*.{roh}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.roh": + type: file + description: Contains site-specific and/or per-region runs of homo/autozygosity + calls. + pattern: "*.{roh}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/bcftools/roh/tests/main.nf.test b/modules/nf-core/bcftools/roh/tests/main.nf.test new file mode 100644 index 00000000..bb73b80c --- /dev/null +++ b/modules/nf-core/bcftools/roh/tests/main.nf.test @@ -0,0 +1,67 @@ + +nextflow_process { + + name "Test Process BCFTOOLS_ROH" + script "../main.nf" + process "BCFTOOLS_ROH" + + tag "modules" + tag "modules_nfcore" + tag "bcftools" + tag "bcftools/roh" + + test("test-bcftools-roh") { + + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [[],[]] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test-bcftools-roh-stub") { + options '-stub' + when { + process { + """ + input[0] = [ [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [[],[]] + input[2] = [] + input[3] = [] + input[4] = [] + input[5] = [] + + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/bcftools/roh/tests/main.nf.test.snap b/modules/nf-core/bcftools/roh/tests/main.nf.test.snap new file mode 100644 index 00000000..3b008a01 --- /dev/null +++ b/modules/nf-core/bcftools/roh/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "test-bcftools-roh": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.roh:md5,853de778be3030754be40e11be0aa557" + ] + ], + "1": [ + "versions.yml:md5,684b9cddcfaf57299e6e245b12b7d710" + ], + "roh": [ + [ + { + "id": "test" + }, + "test.roh:md5,853de778be3030754be40e11be0aa557" + ] + ], + "versions": [ + "versions.yml:md5,684b9cddcfaf57299e6e245b12b7d710" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T14:19:06.961553" + }, + "test-bcftools-roh-stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test.roh:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,684b9cddcfaf57299e6e245b12b7d710" + ], + "roh": [ + [ + { + "id": "test" + }, + "test.roh:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,684b9cddcfaf57299e6e245b12b7d710" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-26T14:19:11.161719" + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/environment.yml b/modules/nf-core/bcftools/sort/environment.yml index 89cf911d..5c00b116 100644 --- a/modules/nf-core/bcftools/sort/environment.yml +++ b/modules/nf-core/bcftools/sort/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_sort channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index 246148d6..7d4c9b8e 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -4,15 +4,17 @@ process BCFTOOLS_SORT { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcf) output: - tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}") , emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -49,9 +51,16 @@ process BCFTOOLS_SORT { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/sort/meta.yml b/modules/nf-core/bcftools/sort/meta.yml index 84747c6d..f7a6eff1 100644 --- a/modules/nf-core/bcftools/sort/meta.yml +++ b/modules/nf-core/bcftools/sort/meta.yml @@ -12,30 +12,53 @@ tools: tool_dev_url: https://github.com/samtools/bcftools doi: "10.1093/bioinformatics/btp352" licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: The VCF/BCF file to be sorted - pattern: "*.{vcf.gz,vcf,bcf}" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: The VCF/BCF file to be sorted + pattern: "*.{vcf.gz,vcf,bcf}" 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: Sorted VCF file - pattern: "*.{vcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: Sorted VCF file + pattern: "*.{vcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Gwennid" maintainers: diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test b/modules/nf-core/bcftools/sort/tests/main.nf.test index 8a496dda..b9bdd76a 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test @@ -15,7 +15,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] """ } @@ -30,6 +30,96 @@ nextflow_process { } + test("sarscov2 - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - vcf - stub") { options "-stub" when { @@ -37,7 +127,7 @@ nextflow_process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) ] """ } @@ -51,4 +141,82 @@ nextflow_process { } } -} + + test("sarscov2 - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap index 6200cc42..f38272cb 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap @@ -1,4 +1,59 @@ { + "sarscov2 - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:06:05.201680777" + }, "vcf": { "content": [ { @@ -11,7 +66,19 @@ ] ], "1": [ - "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -22,15 +89,187 @@ ] ], "versions": [ - "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:04:43.889971134" + }, + "sarscov2 - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:04:55.385964497" + }, + "sarscov2 - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:06.662818922" + }, + "sarscov2 - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:40.012912381" + }, + "sarscov2 - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.2" }, - "timestamp": "2024-05-02T16:55:21.237927554" + "timestamp": "2024-06-05T12:05:52.405673587" }, "sarscov2 - vcf - stub": { "content": [ @@ -44,7 +283,19 @@ ] ], "1": [ - "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ], + "csi": [ + + ], + "tbi": [ + ], "vcf": [ [ @@ -55,14 +306,45 @@ ] ], "versions": [ - "versions.yml:md5,622bd32d4ff0fac3360cd534ae0f0168" + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" ] } ], "meta": { "nf-test": "0.8.4", - "nextflow": "24.03.0" + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:05:29.117946461" + }, + "sarscov2 - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + + ], + [ + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,2c9f26ca356ef71199c3a7d1742974cb" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-05-03T12:32:50.506309198" + "timestamp": "2024-06-05T12:05:17.217274984" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/tests/vcf_gz_index.config b/modules/nf-core/bcftools/sort/tests/vcf_gz_index.config new file mode 100644 index 00000000..aacd1346 --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index" +} diff --git a/modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..640eb0ba --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi" +} diff --git a/modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..589a50c6 --- /dev/null +++ b/modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi" +} diff --git a/modules/nf-core/bcftools/view/environment.yml b/modules/nf-core/bcftools/view/environment.yml index 8937c6da..5c00b116 100644 --- a/modules/nf-core/bcftools/view/environment.yml +++ b/modules/nf-core/bcftools/view/environment.yml @@ -1,7 +1,5 @@ -name: bcftools_view channels: - conda-forge - bioconda - - defaults dependencies: - - bioconda::bcftools=1.18 + - bioconda::bcftools=1.20 diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index 5237adc8..7fe4303c 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -4,8 +4,8 @@ process BCFTOOLS_VIEW { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.18--h8b25389_0': - 'biocontainers/bcftools:1.18--h8b25389_0' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': + 'biocontainers/bcftools:1.20--h8b25389_0' }" input: tuple val(meta), path(vcf), path(index) @@ -15,6 +15,8 @@ process BCFTOOLS_VIEW { output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf + tuple val(meta), path("*.tbi") , emit: tbi, optional: true + tuple val(meta), path("*.csi") , emit: csi, optional: true path "versions.yml" , emit: versions when: @@ -55,8 +57,16 @@ process BCFTOOLS_VIEW { args.contains("--output-type z") || args.contains("-Oz") ? "vcf.gz" : args.contains("--output-type v") || args.contains("-Ov") ? "vcf" : "vcf" + def index = args.contains("--write-index=tbi") || args.contains("-W=tbi") ? "tbi" : + args.contains("--write-index=csi") || args.contains("-W=csi") ? "csi" : + args.contains("--write-index") || args.contains("-W") ? "csi" : + "" + def create_cmd = extension.endsWith(".gz") ? "echo '' | gzip >" : "touch" + def create_index = extension.endsWith(".gz") && index.matches("csi|tbi") ? "touch ${prefix}.${extension}.${index}" : "" + """ - touch ${prefix}.${extension} + ${create_cmd} ${prefix}.${extension} + ${create_index} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/view/meta.yml b/modules/nf-core/bcftools/view/meta.yml index 6baa34a6..aa7785f1 100644 --- a/modules/nf-core/bcftools/view/meta.yml +++ b/modules/nf-core/bcftools/view/meta.yml @@ -1,5 +1,6 @@ name: bcftools_view -description: View, subset and filter VCF or BCF files by position and filtering expression. Convert between VCF and BCF +description: View, subset and filter VCF or BCF files by position and filtering expression. + Convert between VCF and BCF keywords: - variant calling - view @@ -13,51 +14,74 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 licence: ["MIT"] + identifier: biotools:bcftools input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - The vcf file to be inspected. - e.g. 'file.vcf' - - index: - type: file - description: | - The tab index for the VCF file to be inspected. - e.g. 'file.tbi' - - regions: - type: file - description: | - Optionally, restrict the operation to regions listed in this file. - e.g. 'file.vcf' - - targets: - type: file - description: | - Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) - e.g. 'file.vcf' - - samples: - type: file - description: | - Optional, file of sample names to be included or excluded. - e.g. 'file.tsv' + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + The vcf file to be inspected. + e.g. 'file.vcf' + - index: + type: file + description: | + The tab index for the VCF file to be inspected. + e.g. 'file.tbi' + - - regions: + type: file + description: | + Optionally, restrict the operation to regions listed in this file. + e.g. 'file.vcf' + - - targets: + type: file + description: | + Optionally, restrict the operation to regions listed in this file (doesn't rely upon index files) + e.g. 'file.vcf' + - - samples: + type: file + description: | + Optional, file of sample names to be included or excluded. + e.g. 'file.tsv' output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - vcf: - type: file - description: VCF normalized output file - pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.{vcf,vcf.gz,bcf,bcf.gz}": + type: file + description: VCF normalized output file + pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" + - tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tbi": + type: file + description: Alternative VCF file index + pattern: "*.tbi" + - csi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Default VCF file index + pattern: "*.csi" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@abhi18av" maintainers: diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test b/modules/nf-core/bcftools/view/tests/main.nf.test index c285674c..1e60c50d 100644 --- a/modules/nf-core/bcftools/view/tests/main.nf.test +++ b/modules/nf-core/bcftools/view/tests/main.nf.test @@ -9,17 +9,17 @@ nextflow_process { tag "bcftools" tag "bcftools/view" - config "./nextflow.config" - test("sarscov2 - [vcf, tbi], [], [], []") { + config "./nextflow.config" + when { process { """ input[0] = [ [ id:'out', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) ] input[1] = [] input[2] = [] @@ -40,18 +40,122 @@ nextflow_process { } + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index") { + + config "./vcf_gz_index.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi") { + + config "./vcf_gz_index_csi.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi") { + + config "./vcf_gz_index_tbi.config" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.vcf, + process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.versions + ).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + test("sarscov2 - [vcf, tbi], vcf, tsv, []") { + config "./nextflow.config" + when { process { """ input[0] = [ [ id:'out', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) ] - input[1] = file(params.test_data['sarscov2']['illumina']['test3_vcf_gz'], checkIfExists: true) - input[2] = file(params.test_data['sarscov2']['illumina']['test2_vcf_targets_tsv_gz'], checkIfExists: true) + input[1] = file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test3.vcf.gz', checkIfExists: true) + input[2] = file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test2.targets.tsv.gz', checkIfExists: true) input[3] = [] """ } @@ -71,6 +175,7 @@ nextflow_process { test("sarscov2 - [vcf, tbi], [], [], [] - stub") { + config "./nextflow.config" options "-stub" when { @@ -78,8 +183,8 @@ nextflow_process { """ input[0] = [ [ id:'out', single_end:false ], // meta map - file(params.test_data['sarscov2']['illumina']['test_vcf_gz'], checkIfExists: true), - file(params.test_data['sarscov2']['illumina']['test_vcf_gz_tbi'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) ] input[1] = [] input[2] = [] @@ -100,4 +205,94 @@ nextflow_process { } -} + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub") { + + config "./vcf_gz_index.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi - stub") { + + config "./vcf_gz_index_csi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.csi[0][1].endsWith(".csi") } + ) + } + + } + + test("sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub") { + + config "./vcf_gz_index_tbi.config" + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'out', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/vcf/test.vcf.gz.tbi', checkIfExists: true) + ] + input[1] = [] + input[2] = [] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() }, + { assert process.out.tbi[0][1].endsWith(".tbi") } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap index b59be932..fec22e36 100644 --- a/modules/nf-core/bcftools/view/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -1,4 +1,214 @@ { + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:14:38.717458272" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi" + ] + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:13:44.760671384" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "tbi": [ + + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-04T16:06:21.669668533" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub": { + "content": [ + { + "0": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ], + "csi": [ + + ], + "tbi": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:14:53.026083914" + }, "sarscov2 - [vcf, tbi], vcf, tsv, []": { "content": [ [ @@ -11,19 +221,60 @@ ] ], [ - "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" + "versions.yml:md5,241125d00357804552689c37bbabe1f5" ] ], - "timestamp": "2024-02-05T17:12:20.799849895" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:14.663512924" }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { "content": [ "out.vcf", [ - "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" + "versions.yml:md5,241125d00357804552689c37bbabe1f5" ] ], - "timestamp": "2024-02-05T16:53:34.652746985" + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:19.723448323" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T08:24:36.358469315" }, "sarscov2 - [vcf, tbi], [], [], []": { "content": [ @@ -37,9 +288,46 @@ ] ], [ - "versions.yml:md5,106d119dde844ec7fee1cdd30828bcdc" + "versions.yml:md5,241125d00357804552689c37bbabe1f5" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-31T15:15:09.588867653" + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi": { + "content": [ + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" + ] + ], + [ + [ + { + "id": "out", + "single_end": false + }, + "out_vcf.vcf.gz.csi" + ] + ], + [ + + ], + [ + "versions.yml:md5,241125d00357804552689c37bbabe1f5" ] ], - "timestamp": "2024-02-05T17:12:14.247465409" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" + }, + "timestamp": "2024-06-05T12:13:33.834986869" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index.config new file mode 100644 index 00000000..7dd696ee --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index --no-version" +} diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config new file mode 100644 index 00000000..aebffb6f --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=csi --no-version" +} diff --git a/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config b/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config new file mode 100644 index 00000000..b192ae7d --- /dev/null +++ b/modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config @@ -0,0 +1,4 @@ +process { + ext.prefix = { "${meta.id}_vcf" } + ext.args = "--output-type z --write-index=tbi --no-version" +} diff --git a/modules/nf-core/bwa/index/environment.yml b/modules/nf-core/bwa/index/environment.yml index 126e0034..d8789a20 100644 --- a/modules/nf-core/bwa/index/environment.yml +++ b/modules/nf-core/bwa/index/environment.yml @@ -1,7 +1,5 @@ -name: bwa_index channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bwa=0.7.18 diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml index 4c7d30f3..4884bca2 100644 --- a/modules/nf-core/bwa/index/meta.yml +++ b/modules/nf-core/bwa/index/meta.yml @@ -11,32 +11,35 @@ tools: BWA is a software package for mapping DNA sequences against a large reference genome, such as the human genome. homepage: http://bio-bwa.sourceforge.net/ - documentation: http://www.htslib.org/doc/samtools.html + documentation: https://bio-bwa.sourceforge.net/bwa.shtml arxiv: arXiv:1303.3997 licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - index: - type: file - description: BWA genome index files - pattern: "*.{amb,ann,bwt,pac,sa}" + - meta: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - bwa: + type: file + description: BWA genome index files + pattern: "*.{amb,ann,bwt,pac,sa}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@maxulysse" diff --git a/modules/nf-core/bwa/mem/environment.yml b/modules/nf-core/bwa/mem/environment.yml index 3aa9f0cc..ef7b966c 100644 --- a/modules/nf-core/bwa/mem/environment.yml +++ b/modules/nf-core/bwa/mem/environment.yml @@ -1,10 +1,8 @@ -name: bwa_mem channels: - conda-forge - bioconda - - defaults + dependencies: - bwa=0.7.18 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.20 - htslib=1.20.0 + - samtools=1.20 diff --git a/modules/nf-core/bwa/mem/meta.yml b/modules/nf-core/bwa/mem/meta.yml index 1532c261..37467d29 100644 --- a/modules/nf-core/bwa/mem/meta.yml +++ b/modules/nf-core/bwa/mem/meta.yml @@ -14,58 +14,85 @@ tools: BWA is a software package for mapping DNA sequences against a large reference genome, such as the human genome. homepage: http://bio-bwa.sourceforge.net/ - documentation: http://www.htslib.org/doc/samtools.html + documentation: https://bio-bwa.sourceforge.net/bwa.shtml arxiv: arXiv:1303.3997 licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference information. - e.g. [ id:'test', single_end:false ] - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" - - fasta: - type: file - description: Reference genome in FASTA format - pattern: "*.{fasta,fa}" - - sort_bam: - type: boolean - description: use samtools sort (true) or samtools view (false) - pattern: "true or false" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference information. + e.g. [ id:'test', single_end:false ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}" + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fasta,fa}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" output: - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + - meta: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" - cram: - type: file - description: Output CRAM file containing read alignments - pattern: "*.{cram}" + - meta: + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" - csi: - type: file - description: Optional index file for BAM file - pattern: "*.{csi}" + - meta: + type: file + description: Optional index file for BAM file + pattern: "*.{csi}" + - "*.csi": + type: file + description: Optional index file for BAM file + pattern: "*.{csi}" - crai: - type: file - description: Optional index file for CRAM file - pattern: "*.{crai}" + - meta: + type: file + description: Optional index file for CRAM file + pattern: "*.{crai}" + - "*.crai": + type: file + description: Optional index file for CRAM file + pattern: "*.{crai}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@jeremy1805" diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test index 463b76f8..5de2c2f4 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test +++ b/modules/nf-core/bwa/mem/tests/main.nf.test @@ -9,21 +9,21 @@ nextflow_process { script "../main.nf" process "BWA_MEM" - test("Single-End") { - - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } + setup { + run("BWA_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = [ + [id: 'test'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + """ } } + } + + test("Single-End") { when { process { @@ -49,7 +49,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -59,20 +60,6 @@ nextflow_process { test("Single-End Sort") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -97,7 +84,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -107,20 +95,6 @@ nextflow_process { test("Paired-End") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -146,7 +120,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -156,20 +131,6 @@ nextflow_process { test("Paired-End Sort") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -195,7 +156,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -205,20 +167,6 @@ nextflow_process { test("Paired-End - no fasta") { - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } - when { process { """ @@ -244,7 +192,8 @@ nextflow_process { process.out.csi, process.out.crai, process.out.versions, - file(process.out.bam[0][1]).name + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5() ).match() } ) @@ -253,20 +202,9 @@ nextflow_process { } test("Single-end - stub") { + options "-stub" - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } + when { process { """ @@ -286,30 +224,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - file(process.out.csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } } test("Paired-end - stub") { + options "-stub" - setup { - run("BWA_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = [ - [id: 'test'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - """ - } - } - } + when { process { """ @@ -330,11 +253,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - file(process.out.csi[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } } diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap index 038ee7b7..2079ea22 100644 --- a/modules/nf-core/bwa/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap @@ -13,13 +13,14 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "b6d9cb250261a4c125413c5d867d87a7", + "798439cbd7fd81cbcc5078022dc5479d" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:44:32.953673185" + "timestamp": "2024-08-02T12:22:28.051598" }, "Single-End Sort": { "content": [ @@ -35,13 +36,14 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "848434ae4b79cfdcb2281c60b33663ce", + "94fcf617f5b994584c4e8d4044e16b4f" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:44:45.27066093" + "timestamp": "2024-08-02T12:22:39.671154" }, "Paired-End": { "content": [ @@ -57,13 +59,14 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "5b34d31be84478761f789e3e2e805e31", + "57aeef88ed701a8ebc8e2f0a381b2a6" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:44:57.706852274" + "timestamp": "2024-08-02T12:22:51.919479" }, "Paired-End Sort": { "content": [ @@ -79,27 +82,91 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "69003376d9a8952622d8587b39c3eaae", + "af8628d9df18b2d3d4f6fd47ef2bb872" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:45:10.376505036" + "timestamp": "2024-08-02T12:23:00.833562" }, "Single-end - stub": { "content": [ - "test.bam", - "test.csi", - [ - "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ], + "bam": [ + [ + { + "id": "test", + "single_end": true + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + [ + { + "id": "test", + "single_end": true + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": true + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:46:07.182072398" + "timestamp": "2024-08-02T12:31:29.46282" }, "Paired-End - no fasta": { "content": [ @@ -115,26 +182,90 @@ [ "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" ], - "test.bam" + "5b34d31be84478761f789e3e2e805e31", + "57aeef88ed701a8ebc8e2f0a381b2a6" ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:45:53.813076501" + "timestamp": "2024-08-02T12:23:09.942545" }, "Paired-end - stub": { "content": [ - "test.bam", - "test.csi", - [ - "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + [ + { + "id": "test", + "single_end": false + }, + "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,478b816fbd37871f5e8c617833d51d80" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-20T08:46:18.412916364" + "timestamp": "2024-08-02T12:31:37.757037" } } \ No newline at end of file diff --git a/modules/nf-core/bwamem2/index/environment.yml b/modules/nf-core/bwamem2/index/environment.yml index 26b43917..15cee238 100644 --- a/modules/nf-core/bwamem2/index/environment.yml +++ b/modules/nf-core/bwamem2/index/environment.yml @@ -1,7 +1,5 @@ -name: bwamem2_index channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::bwa-mem2=2.2.1 diff --git a/modules/nf-core/bwamem2/index/meta.yml b/modules/nf-core/bwamem2/index/meta.yml index c14a1092..74f54ef0 100644 --- a/modules/nf-core/bwamem2/index/meta.yml +++ b/modules/nf-core/bwamem2/index/meta.yml @@ -13,29 +13,32 @@ tools: homepage: https://github.com/bwa-mem2/bwa-mem2 documentation: https://github.com/bwa-mem2/bwa-mem2#usage licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fasta: - type: file - description: Input genome fasta file + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - index: - type: file - description: BWA genome index files - pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bwamem2: + type: file + description: BWA genome index files + pattern: "*.{0123,amb,ann,bwt.2bit.64,pac}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" maintainers: diff --git a/modules/nf-core/bwamem2/mem/environment.yml b/modules/nf-core/bwamem2/mem/environment.yml index cbf06d39..7e0b5a34 100644 --- a/modules/nf-core/bwamem2/mem/environment.yml +++ b/modules/nf-core/bwamem2/mem/environment.yml @@ -1,10 +1,8 @@ -name: bwamem2_mem channels: - conda-forge - bioconda - - defaults + dependencies: - bwa-mem2=2.2.1 - # renovate: datasource=conda depName=bioconda/samtools - - samtools=1.19.2 - htslib=1.19.1 + - samtools=1.19.2 diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml index 931f7129..c6333ca1 100644 --- a/modules/nf-core/bwamem2/mem/meta.yml +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -17,69 +17,96 @@ tools: documentation: http://www.htslib.org/doc/samtools.html arxiv: arXiv:1303.3997 licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference/index information - e.g. [ id:'test' ] - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference genome in FASTA format - pattern: "*.{fa,fasta,fna}" - - sort_bam: - type: boolean - description: use samtools sort (true) or samtools view (false) - pattern: "true or false" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - sam: - type: file - description: Output SAM file containing read alignments - pattern: "*.{sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" - cram: - type: file - description: Output CRAM file containing read alignments - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" - crai: - type: file - description: Index file for CRAM file - pattern: "*.{crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" - csi: - type: file - description: Index file for BAM file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for BAM file + pattern: "*.{csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@matthdsm" diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test index 5e67f70b..9e0ab14a 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -10,21 +10,21 @@ nextflow_process { tag "bwamem2/mem" tag "bwamem2/index" - test("sarscov2 - fastq, index, fasta, false") { - - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } + setup { + run("BWAMEM2_INDEX") { + script "../../index/main.nf" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ } } + } + + test("sarscov2 - fastq, index, fasta, false") { when { process { @@ -44,7 +44,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -54,20 +55,6 @@ nextflow_process { test("sarscov2 - fastq, index, fasta, true") { - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -86,7 +73,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -96,20 +84,6 @@ nextflow_process { test("sarscov2 - [fastq1, fastq2], index, fasta, false") { - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -131,7 +105,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -141,20 +116,6 @@ nextflow_process { test("sarscov2 - [fastq1, fastq2], index, fasta, true") { - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -176,7 +137,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -188,20 +150,6 @@ nextflow_process { options "-stub" - setup { - run("BWAMEM2_INDEX") { - script "../../index/main.nf" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -222,10 +170,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap index 9fb1e69d..69bc3612 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -1,67 +1,129 @@ { "sarscov2 - [fastq1, fastq2], index, fasta, false": { "content": [ - "test.bam", + "eefa0f44493fd0504e734efd2f1f4a9e", + "57aeef88ed701a8ebc8e2f0a381b2a6", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:13:18.890289958" + "timestamp": "2024-08-02T12:23:37.929675" }, "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { "content": [ - "test.bam", - [ - "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" - ] + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" + ] + } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:45:51.821633029" + "timestamp": "2024-08-02T12:12:06.693567" }, "sarscov2 - [fastq1, fastq2], index, fasta, true": { "content": [ - "test.bam", + "7aba324f82d5b4e926a5dd7b46029cb4", + "af8628d9df18b2d3d4f6fd47ef2bb872", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:13:36.458291078" + "timestamp": "2024-08-02T12:23:53.488374" }, "sarscov2 - fastq, index, fasta, false": { "content": [ - "test.bam", + "bc02b41697b3a8f1021b02becec24052", + "798439cbd7fd81cbcc5078022dc5479d", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:12:44.084654507" + "timestamp": "2024-08-02T12:23:05.644682" }, "sarscov2 - fastq, index, fasta, true": { "content": [ - "test.bam", + "e41d67320815d29ba5f6e9d1ae21902a", + "94fcf617f5b994584c4e8d4044e16b4f", [ "versions.yml:md5,1c1a9566f189ec077b5179bbf453c51a" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-03-19T13:13:01.763341681" + "timestamp": "2024-08-02T12:23:21.837763" } } \ No newline at end of file diff --git a/modules/nf-core/bwameme/index/environment.yml b/modules/nf-core/bwameme/index/environment.yml index 5d76ea18..f209d62e 100644 --- a/modules/nf-core/bwameme/index/environment.yml +++ b/modules/nf-core/bwameme/index/environment.yml @@ -1,7 +1,5 @@ -name: "bwameme_index" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::bwa-meme=1.0.6" diff --git a/modules/nf-core/bwameme/index/meta.yml b/modules/nf-core/bwameme/index/meta.yml index 2db1d3a8..e0cb04a6 100644 --- a/modules/nf-core/bwameme/index/meta.yml +++ b/modules/nf-core/bwameme/index/meta.yml @@ -12,32 +12,33 @@ tools: documentation: https://github.com/kaist-ina/BWA-MEME#getting-started doi: "10.1093/bioinformatics/btac137" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - fasta: - type: file - description: Input genome fasta file - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - fasta: + type: file + description: Input genome fasta file output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - index: - type: file - description: BWA-MEME genome index files - pattern: "*.{0123,amb,ann,pac,pos_packed,suffixarray_uint64,suffixarray_uint64_L0_PARAMETERS,suffixarray_uint64_L1_PARAMETERS,suffixarray_uint64_L2_PARAMETERS}" - + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - bwameme: + type: file + description: BWA-MEME genome index files + pattern: "*.{0123,amb,ann,pac,pos_packed,suffixarray_uint64,suffixarray_uint64_L0_PARAMETERS,suffixarray_uint64_L1_PARAMETERS,suffixarray_uint64_L2_PARAMETERS}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/bwameme/mem/environment.yml b/modules/nf-core/bwameme/mem/environment.yml index 388eedd2..cad79440 100644 --- a/modules/nf-core/bwameme/mem/environment.yml +++ b/modules/nf-core/bwameme/mem/environment.yml @@ -1,10 +1,8 @@ --- # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json -name: "bwameme_mem" channels: - conda-forge - bioconda - - defaults dependencies: - "bioconda::bwa-meme=1.0.6" - "bioconda::mbuffer=20160228" diff --git a/modules/nf-core/bwameme/mem/meta.yml b/modules/nf-core/bwameme/mem/meta.yml index e5d28db2..070aefeb 100644 --- a/modules/nf-core/bwameme/mem/meta.yml +++ b/modules/nf-core/bwameme/mem/meta.yml @@ -18,78 +18,103 @@ tools: documentation: https://github.com/kaist-ina/BWA-MEME#getting-started doi: "10.1093/bioinformatics/btac137" licence: ["MIT"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - meta2: - type: map - description: | - Groovy Map containing reference/index information - e.g. [ id:'test' ] - - index: - type: file - description: BWA genome index files - pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" - - meta3: - type: map - description: | - Groovy Map containing reference information - e.g. [ id:'genome' ] - - fasta: - type: file - description: Reference genome in FASTA format - pattern: "*.{fa,fasta,fna}" - - sort_bam: - type: boolean - description: use samtools sort (true) or samtools view (false) - pattern: "true or false" - - mbuffer: - type: integer - description: memory for mbuffer in megabytes (default 3072) - - sort_threads: - type: integer - description: number of threads to used during samtools sort (default 2). - + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - - meta2: + type: map + description: | + Groovy Map containing reference/index information + e.g. [ id:'test' ] + - index: + type: file + description: BWA genome index files + pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome in FASTA format + pattern: "*.{fa,fasta,fna}" + - - sort_bam: + type: boolean + description: use samtools sort (true) or samtools view (false) + pattern: "true or false" + - - mbuffer: + type: integer + description: memory for mbuffer in megabytes (default 3072) + - - samtools_threads: + type: integer + description: number of threads for samtools (default 2) output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - sam: - type: file - description: Output SAM file containing read alignments - pattern: "*.{sam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.sam": + type: file + description: Output SAM file containing read alignments + pattern: "*.{sam}" - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.bam": + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" - cram: - type: file - description: Output CRAM file containing read alignments - pattern: "*.{cram}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.cram": + type: file + description: Output CRAM file containing read alignments + pattern: "*.{cram}" - crai: - type: file - description: Index file for CRAM file - pattern: "*.{crai}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.crai": + type: file + description: Index file for CRAM file + pattern: "*.{crai}" - csi: - type: file - description: Index file for BAM file - pattern: "*.{csi}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.csi": + type: file + description: Index file for BAM file + pattern: "*.{csi}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test b/modules/nf-core/bwameme/mem/tests/main.nf.test index 8175f58a..6d93fd6e 100644 --- a/modules/nf-core/bwameme/mem/tests/main.nf.test +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test @@ -11,22 +11,22 @@ nextflow_process { tag "bwameme/index" config "./nextflow.config" - test("sarscov2 - fastq, index, fasta, false, 0, 4") { - - setup { - run("BWAMEME_INDEX") { - script "../../index/main.nf" - config "./nextflow.config" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } + setup { + run("BWAMEME_INDEX") { + script "../../index/main.nf" + config "./nextflow.config" + process { + """ + input[0] = Channel.of([ + [:], // meta map + [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] + ]) + """ } } + } + + test("sarscov2 - fastq, index, fasta, false, 0, 4") { when { process { @@ -48,7 +48,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -58,21 +59,6 @@ nextflow_process { test("sarscov2 - fastq, index, fasta, true, 2048, 4") { - setup { - run("BWAMEME_INDEX") { - script "../../index/main.nf" - config "./nextflow.config" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -93,7 +79,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -103,21 +90,6 @@ nextflow_process { test("sarscov2 - [fastq1, fastq2], index, fasta, false, 0, 4") { - setup { - run("BWAMEME_INDEX") { - script "../../index/main.nf" - config "./nextflow.config" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -141,7 +113,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -151,21 +124,6 @@ nextflow_process { test("sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, ''") { - setup { - run("BWAMEME_INDEX") { - script "../../index/main.nf" - config "./nextflow.config" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -189,7 +147,8 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.bam[0][1]).name, + bam(process.out.bam[0][1]).getHeaderMD5(), + bam(process.out.bam[0][1]).getReadsMD5(), process.out.versions ).match() } ) @@ -201,21 +160,6 @@ nextflow_process { options "-stub" - setup { - run("BWAMEME_INDEX") { - script "../../index/main.nf" - config "./nextflow.config" - process { - """ - input[0] = Channel.of([ - [:], // meta map - [file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)] - ]) - """ - } - } - } - when { process { """ @@ -238,10 +182,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot( - file(process.out.bam[0][1]).name, - process.out.versions - ).match() } + { assert snapshot(process.out).match() } ) } diff --git a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap index 55235959..bc845155 100644 --- a/modules/nf-core/bwameme/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwameme/mem/tests/main.nf.test.snap @@ -1,210 +1,129 @@ { "sarscov2 - [fastq1, fastq2], index, fasta, false, 0, 4": { "content": [ - "test.bam", + "640e6a53bedb535837cc35cc1c145dcb", + "57aeef88ed701a8ebc8e2f0a381b2a6", [ "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-20T16:07:51.065498711" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, false": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-15T20:04:31.962017214" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, 4": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-20T16:08:18.378362535" + "timestamp": "2024-08-02T12:25:03.99184" }, "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, ''": { "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-20T16:25:43.613918051" - }, - "sarscov2 - fastq, index, fasta, false": { - "content": [ - "test.bam", + "7af5d6b93d3f8bd4f53d4f9ace7ee981", + "af8628d9df18b2d3d4f6fd47ef2bb872", [ "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-15T20:00:05.782384898" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048 - stub": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-18T10:17:40.514767321" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-18T10:17:31.035368735" + "timestamp": "2024-08-02T12:26:17.237557" }, "sarscov2 - fastq, index, fasta, true, 2048, 4": { "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-20T16:07:24.071789902" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-15T19:28:46.895668666" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, false, 0": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-18T10:17:08.497131484" - }, - "sarscov2 - fastq, index, fasta, false, 0": { - "content": [ - "test.bam", + "4ccda5ce5d3b09b697786589b3753825", + "94fcf617f5b994584c4e8d4044e16b4f", [ "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-18T10:16:23.45126091" - }, - "sarscov2 - [fastq1, fastq2], index, fasta, true": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-15T20:44:56.510177191" - }, - "sarscov2 - fastq, index, fasta, true, 2048": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-18T10:16:46.541148031" - }, - "sarscov2 - fastq, index, fasta, true": { - "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-05-15T20:44:05.2657749" + "timestamp": "2024-08-02T12:24:07.289865" }, "sarscov2 - fastq, index, fasta, false, 0, 4": { "content": [ - "test.bam", + "a58fa4a997be7d13a3dc62c9c9eb83d2", + "798439cbd7fd81cbcc5078022dc5479d", [ "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" + "nf-test": "0.9.0", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-20T16:06:58.802149967" + "timestamp": "2024-08-02T12:23:17.201419" }, "sarscov2 - [fastq1, fastq2], index, fasta, true, 2048, 4 - stub": { "content": [ - "test.bam", - [ - "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-20T16:08:28.453969552" + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ], + "bam": [ + [ + { + "id": "test", + "single_end": false + }, + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "crai": [ + + ], + "cram": [ + + ], + "csi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "sam": [ + + ], + "versions": [ + "versions.yml:md5,700d57071f430eb29b3c67d0a199eb95" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-02T12:31:46.777111" } } \ No newline at end of file diff --git a/modules/nf-core/cadd/environment.yml b/modules/nf-core/cadd/environment.yml index 26f170e9..4477e16e 100644 --- a/modules/nf-core/cadd/environment.yml +++ b/modules/nf-core/cadd/environment.yml @@ -1,8 +1,6 @@ -name: cadd channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cadd-scripts=1.6.post1 - conda-forge::conda=4.14.0 diff --git a/modules/nf-core/cadd/meta.yml b/modules/nf-core/cadd/meta.yml index 230ed9c0..751bea45 100644 --- a/modules/nf-core/cadd/meta.yml +++ b/modules/nf-core/cadd/meta.yml @@ -1,5 +1,6 @@ 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. +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 @@ -13,36 +14,39 @@ tools: doi: "10.1093/nar/gky1016" licence: - Restricted. Free for non-commercial users. + identifier: biotools:cadd_phred 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}" + - - 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}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.tsv.gz": + type: file + description: Annotated tsv file + pattern: "*.{tsv,tsv.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml index 17a04ef2..9b01c865 100644 --- a/modules/nf-core/cat/cat/environment.yml +++ b/modules/nf-core/cat/cat/environment.yml @@ -1,7 +1,5 @@ -name: cat_cat channels: - conda-forge - bioconda - - defaults dependencies: - conda-forge::pigz=2.3.4 diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index adbdbd7b..2862c64c 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -76,4 +76,3 @@ def getFileSuffix(filename) { def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/ return match ? match[0][1] : filename.substring(filename.lastIndexOf('.')) } - diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml index 00a8db0b..81778a06 100644 --- a/modules/nf-core/cat/cat/meta.yml +++ b/modules/nf-core/cat/cat/meta.yml @@ -9,25 +9,32 @@ tools: description: Just concatenation documentation: https://man7.org/linux/man-pages/man1/cat.1.html licence: ["GPL-3.0-or-later"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - files_in: - type: file - description: List of compressed / uncompressed files - pattern: "*" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - files_in: + type: file + description: List of compressed / uncompressed files + pattern: "*" output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - file_out: - type: file - description: Concatenated file. Will be gzipped if file_out ends with ".gz" - pattern: "${file_out}" + - meta: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - ${prefix}: + type: file + description: Concatenated file. Will be gzipped if file_out ends with ".gz" + pattern: "${file_out}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@erikrikarddaniel" - "@FriederikeHanssen" diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test index fcee2d19..9cb16178 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test +++ b/modules/nf-core/cat/cat/tests/main.nf.test @@ -29,7 +29,8 @@ nextflow_process { then { assertAll( { assert !process.success }, - { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") } + { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") }, + { assert snapshot(process.out.versions).match() } ) } } @@ -83,8 +84,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_zipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_zipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -142,8 +147,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } @@ -170,8 +179,12 @@ nextflow_process { def lines = path(process.out.file_out.get(0).get(1)).linesGzip assertAll( { assert process.success }, - { assert snapshot(lines[0..5]).match("test_cat_one_file_unzipped_zipped_lines") }, - { assert snapshot(lines.size()).match("test_cat_one_file_unzipped_zipped_size")} + { assert snapshot( + lines[0..5], + lines.size(), + process.out.versions + ).match() + } ) } } diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap index 423571ba..b7623ee6 100644 --- a/modules/nf-core/cat/cat/tests/main.nf.test.snap +++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap @@ -1,10 +1,4 @@ { - "test_cat_unzipped_zipped_size": { - "content": [ - 375 - ], - "timestamp": "2023-10-16T14:33:08.049445686" - }, "test_cat_unzipped_unzipped": { "content": [ { @@ -34,6 +28,10 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:18.500464399" }, "test_cat_zipped_unzipped": { @@ -65,9 +63,13 @@ ] } ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, "timestamp": "2023-10-16T14:32:49.642741302" }, - "test_cat_zipped_zipped_lines": { + "test_cat_zipped_zipped": { "content": [ [ "MT192765.1\tGenbank\ttranscript\t259\t29667\t.\t+\t.\tID=unknown_transcript_1;geneID=orf1ab;gene_name=orf1ab", @@ -76,11 +78,31 @@ "MT192765.1\tGenbank\tCDS\t13461\t21548\t.\t+\t0\tParent=unknown_transcript_1;exception=\"ribosomal slippage\";gbkey=CDS;gene=orf1ab;note=\"pp1ab;translated=by -1 ribosomal frameshift\";product=\"orf1ab polyprotein\";protein_id=QIK50426.1", "MT192765.1\tGenbank\tCDS\t21556\t25377\t.\t+\t0\tParent=unknown_transcript_1;gbkey=CDS;gene=S;note=\"structural protein\";product=\"surface glycoprotein\";protein_id=QIK50427.1", "MT192765.1\tGenbank\tgene\t21556\t25377\t.\t+\t.\tParent=unknown_transcript_1" + ], + 78, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" + ] + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:46.802978" + }, + "test_cat_name_conflict": { + "content": [ + [ + ] ], - "timestamp": "2023-10-16T14:32:33.629048645" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:29.45394" }, - "test_cat_unzipped_zipped_lines": { + "test_cat_one_file_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -89,11 +111,19 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 374, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:08.038830506" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:52:02.774016" }, - "test_cat_one_file_unzipped_zipped_lines": { + "test_cat_unzipped_zipped": { "content": [ [ ">MT192765.1 Severe acute respiratory syndrome coronavirus 2 isolate SARS-CoV-2/human/USA/PC00101P/2020, complete genome", @@ -102,20 +132,16 @@ "TAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTTGTCCGG", "GTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTT", "ACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAG" + ], + 375, + [ + "versions.yml:md5,115ed6177ebcff24eb99d503fa5ef894" ] ], - "timestamp": "2023-10-16T14:33:21.39642399" - }, - "test_cat_zipped_zipped_size": { - "content": [ - 78 - ], - "timestamp": "2023-10-16T14:32:33.641869244" - }, - "test_cat_one_file_unzipped_zipped_size": { - "content": [ - 374 - ], - "timestamp": "2023-10-16T14:33:21.4094373" + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.3" + }, + "timestamp": "2024-07-22T11:51:57.581523" } } \ No newline at end of file diff --git a/modules/nf-core/chromograph/environment.yml b/modules/nf-core/chromograph/environment.yml index 4fe69462..47881b1f 100644 --- a/modules/nf-core/chromograph/environment.yml +++ b/modules/nf-core/chromograph/environment.yml @@ -1,7 +1,5 @@ -name: chromograph channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::chromograph=1.3.1 diff --git a/modules/nf-core/chromograph/meta.yml b/modules/nf-core/chromograph/meta.yml index 6540d9f0..4a986dbb 100644 --- a/modules/nf-core/chromograph/meta.yml +++ b/modules/nf-core/chromograph/meta.yml @@ -1,7 +1,7 @@ ---- # 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. +description: Chromograph is a python package to create PNG images from genetics data + such as BED and WIG files. keywords: - chromosome_visualization - bed @@ -9,83 +9,87 @@ keywords: - png tools: - "chromograph": - description: "Chromograph is a python package to create PNG images from genetics data such as BED and WIG files." + 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"] + identifier: "" input: - - meta: - type: map - 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 - - 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 + - - 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 + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - coverage: + type: file + description: Wig file containing the coverage information + - - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - exome: + type: file + description: Bed file containing the coverage for exome. + - - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fracsnp: + type: file + description: Wig file containing the fraction of homozygous SNPs + - - meta5: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ideogram: + type: file + description: | + Bed file containing information necessary for ideogram plots. + Format ['chrom', 'start', 'end', 'name', 'gStain'] + - - meta6: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - regions: + type: file + description: Bed file containing UPD regions + - - meta7: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - 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" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}: + type: file + description: Directory containing the plots in png format + pattern: "*.png" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/chromograph/tests/main.nf.test b/modules/nf-core/chromograph/tests/main.nf.test index caba8829..8643afe3 100644 --- a/modules/nf-core/chromograph/tests/main.nf.test +++ b/modules/nf-core/chromograph/tests/main.nf.test @@ -20,7 +20,7 @@ nextflow_process { input[5] = [[:],[]] input[6] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['genome']['updsites_bed'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/updsites.bed', checkIfExists: true) ] """ } diff --git a/modules/nf-core/cnvnator/cnvnator/environment.yml b/modules/nf-core/cnvnator/cnvnator/environment.yml index 8b7ecaef..9cd8ebf3 100644 --- a/modules/nf-core/cnvnator/cnvnator/environment.yml +++ b/modules/nf-core/cnvnator/cnvnator/environment.yml @@ -1,7 +1,5 @@ -name: cnvnator_cnvnator channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvnator=0.4.1 diff --git a/modules/nf-core/cnvnator/cnvnator/meta.yml b/modules/nf-core/cnvnator/cnvnator/meta.yml index 2afbacde..7ad6b406 100644 --- a/modules/nf-core/cnvnator/cnvnator/meta.yml +++ b/modules/nf-core/cnvnator/cnvnator/meta.yml @@ -1,5 +1,6 @@ name: "cnvnator_cnvnator" -description: CNVnator is a command line tool for CNV/CNA analysis from depth-of-coverage by mapped reads. +description: CNVnator is a command line tool for CNV/CNA analysis from depth-of-coverage + by mapped reads. keywords: - cnvnator - cnv @@ -10,66 +11,75 @@ tools: homepage: "https://github.com/abyzovlab/CNVnator" documentation: "https://github.com/abyzovlab/CNVnator/blob/master/README.md" tool_dev_url: "https://github.com/abyzovlab/CNVnator" - licence: "['MIT']" + licence: ["MIT"] + identifier: biotools:cnvnator input: - - meta: - type: map - 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 reference information - e.g. `[ id:'test' ]` - - meta4: - type: map - description: | - Groovy Map containing reference information - e.g. `[ id:'test' ]` - - bam: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.bam" - - bai: - type: file - description: Sorted BAM/CRAM/SAM file - pattern: "*.bam" - - root: - type: file - description: ROOT file - pattern: "*.root" - - fasta: - type: file - description: Path to a directory containing fasta files or a fasta file - pattern: "*.fa" - - fai: - type: file - description: Path to a fasta file index - pattern: "*.fai" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.bam" + - bai: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.bam" + - - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - root: + type: file + description: ROOT file + pattern: "*.root" + - - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fasta: + type: file + description: Path to a directory containing fasta files or a fasta file + pattern: "*.fa" + - - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. `[ id:'test' ]` + - fai: + type: file + description: Path to a fasta file index + pattern: "*.fai" output: - - 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" - root: - type: file - description: A ROOT file - pattern: "*.root" + - output_meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}.root: + type: file + description: A ROOT file + pattern: "*.root" - tab: - type: file - description: A tab file containing cnvnator calls - pattern: "*.tab" + - output_meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - ${prefix}.tab: + type: file + description: A tab file containing cnvnator calls + pattern: "*.tab" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/cnvnator/convert2vcf/environment.yml b/modules/nf-core/cnvnator/convert2vcf/environment.yml index d324fb04..9cd8ebf3 100644 --- a/modules/nf-core/cnvnator/convert2vcf/environment.yml +++ b/modules/nf-core/cnvnator/convert2vcf/environment.yml @@ -1,7 +1,5 @@ -name: cnvnator_convert2vcf channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::cnvnator=0.4.1 diff --git a/modules/nf-core/cnvnator/convert2vcf/meta.yml b/modules/nf-core/cnvnator/convert2vcf/meta.yml index 8e8c8006..3d686c2f 100644 --- a/modules/nf-core/cnvnator/convert2vcf/meta.yml +++ b/modules/nf-core/cnvnator/convert2vcf/meta.yml @@ -1,5 +1,6 @@ name: "cnvnator_convert2vcf" -description: convert2vcf.pl is command line tool to convert CNVnator calls to vcf format. +description: convert2vcf.pl is command line tool to convert CNVnator calls to vcf + format. keywords: - cnvnator - cnv @@ -10,31 +11,34 @@ tools: homepage: "https://github.com/abyzovlab/CNVnator" documentation: "https://github.com/abyzovlab/CNVnator/blob/master/README.md" tool_dev_url: "https://github.com/abyzovlab/CNVnator" - licence: "['MIT']" + licence: ["MIT"] + identifier: biotools:cnvnator input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - calls: - type: file - description: A tab file containing CNVnator calls - pattern: "*.tab" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - calls: + type: file + description: A tab file containing CNVnator calls + pattern: "*.tab" 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: CNVnator calls in vcf format - pattern: "*.vcf" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.vcf": + type: file + description: CNVnator calls in vcf format + pattern: "*.vcf" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/deepvariant/callvariants/main.nf b/modules/nf-core/deepvariant/callvariants/main.nf new file mode 100644 index 00000000..668b51ae --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/main.nf @@ -0,0 +1,58 @@ + +process DEEPVARIANT_CALLVARIANTS { + tag "$meta.id" + label 'process_high' + + //Conda is not supported at the moment + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(make_examples_tfrecords) + + output: + tuple val(meta), path("${prefix}.call-*-of-*.tfrecord.gz"), emit: call_variants_tfrecords + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + + def matcher = make_examples_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ + if (!matcher.matches()) { + throw new IllegalArgumentException("tfrecord baseName '" + make_examples_tfrecords[0].baseName + "' doesn't match the expected pattern") + } + def examples_tfrecord_name = matcher[0][1] + def shardCount = matcher[0][2] + // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz + def examples_tfrecords_logical_name = "${examples_tfrecord_name}@${shardCount}.gz" + + """ + /opt/deepvariant/bin/call_variants \\ + ${args} \\ + --outfile "${prefix}.call.tfrecord.gz" \\ + --examples "${examples_tfrecords_logical_name}" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.call-00000-of-00001.tfrecord.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/callvariants/meta.yml b/modules/nf-core/deepvariant/callvariants/meta.yml new file mode 100644 index 00000000..4507192c --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/meta.yml @@ -0,0 +1,48 @@ +name: deepvariant_callvariants +description: Call variants from the examples produced by make_examples +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 + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - make_examples_tfrecords: + type: file + description: The actual sharded input files, from DEEPVARIANT_MAKEEXAMPLES process + pattern: "*.gz" +output: + - call_variants_tfrecords: + - meta: + type: list + description: | + Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. + - ${prefix}.call-*-of-*.tfrecord.gz: + type: list + description: | + Each output contains: unique ID string from input channel, meta, tfrecord file with variant calls. + - versions: + - versions.yml: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" + - "@fa2k" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test new file mode 100644 index 00000000..72f04b51 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test @@ -0,0 +1,85 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_CALLVARIANTS" + script "../main.nf" + config "./nextflow.config" + process "DEEPVARIANT_CALLVARIANTS" + + tag "deepvariant/makeexamples" + tag "deepvariant/callvariants" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - wgs") { + setup { + run("DEEPVARIANT_MAKEEXAMPLES") { + script "../../makeexamples/main.nf" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + } + when { + process { + """ + input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.call_variants_tfrecords.get(0).get(0) == [ id:'test', single_end:false ] }, + // The tfrecord binary representation is not stable, but we check the name of the output. + { assert snapshot(file(process.out.call_variants_tfrecords.get(0).get(1)).name).match("homo_sapiens-wgs-call_variants_tfrecords-filenames")}, + { assert snapshot(process.out.versions).match("versions") }, + ) + } + } + + test("homo_sapiens - wgs - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta + [] // No input paths are needed in stub mode + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap new file mode 100644 index 00000000..8f04ede7 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap @@ -0,0 +1,59 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:38:47.927241" + }, + "homo_sapiens-wgs-call_variants_tfrecords-filenames": { + "content": [ + "test.call-00000-of-00001.tfrecord.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T17:04:33.276938" + }, + "homo_sapiens - wgs - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" + ], + "call_variants_tfrecords": [ + [ + { + "id": "test", + "single_end": false + }, + "test.call-00000-of-00001.tfrecord.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,5ff99ffba1e56e4e919d3dfc2d0f3cbb" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-13T21:07:17.335788301" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config new file mode 100644 index 00000000..590aa060 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config @@ -0,0 +1,11 @@ +process { + withName: "DEEPVARIANT_CALLVARIANTS" { + ext.args = '--checkpoint "/opt/models/wgs"' + cpus = 2 // Keep CPUs fixed so the number of output files is reproducible + } +} +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--channels "insert_size"' + } +} diff --git a/modules/nf-core/deepvariant/callvariants/tests/tags.yml b/modules/nf-core/deepvariant/callvariants/tests/tags.yml new file mode 100644 index 00000000..02e63f50 --- /dev/null +++ b/modules/nf-core/deepvariant/callvariants/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/callvariants: + - modules/nf-core/deepvariant/callvariants/** diff --git a/modules/nf-core/deepvariant/makeexamples/main.nf b/modules/nf-core/deepvariant/makeexamples/main.nf new file mode 100644 index 00000000..022d0bf2 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/main.nf @@ -0,0 +1,66 @@ +process DEEPVARIANT_MAKEEXAMPLES { + tag "$meta.id" + label 'process_high' + + //Conda is not supported at the moment + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(input), path(index), path(intervals) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(gzi) + tuple val(meta5), path(par_bed) + + output: + tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}"), emit: examples + tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), emit: gvcf + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def regions = intervals ? "--regions ${intervals}" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + + """ + seq 0 ${task.cpus - 1} | parallel -q --halt 2 --line-buffer /opt/deepvariant/bin/make_examples \\ + --mode calling \\ + --ref "${fasta}" \\ + --reads "${input}" \\ + --examples "./${prefix}.examples.tfrecord@${task.cpus}.gz" \\ + --gvcf "./${prefix}.gvcf.tfrecord@${task.cpus}.gz" \\ + ${regions} \\ + ${par_regions} \\ + ${args} \\ + --task {} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ + + stub: + prefix = task.ext.prefix ?: "${meta.id}" + """ + printf -v SHARD_COUNT "%04d" ${task.cpus} + for i in \$( seq -f "%04g" 0 ${task.cpus-1} ) + do + touch ${prefix}.examples.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz{,.example_info.json} + touch ${prefix}.gvcf.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz + done + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_makeexamples: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/makeexamples/meta.yml b/modules/nf-core/deepvariant/makeexamples/meta.yml new file mode 100644 index 00000000..6fb9f1b8 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/meta.yml @@ -0,0 +1,102 @@ +name: deepvariant_makeexamples +description: Transforms the input alignments to a format suitable for the deep neural + network variant caller +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 + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.bam/cram" + - index: + type: file + description: Index of BAM/CRAM file + pattern: "*.bai/crai" + - intervals: + 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 + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + pattern: "*.gzi" + - par_bed: + type: file + description: BED file containing PAR regions + pattern: "*.bed" +output: + - examples: + - meta: + type: list + description: | + Tuple containing sample metadata and examples that can be used for calling + - ${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}: + type: list + description: | + Tuple containing sample metadata and examples that can be used for calling + - gvcf: + - meta: + type: list + description: | + Tuple containing sample metadata and the GVCF data in tfrecord format + - ${prefix}.gvcf.tfrecord-*-of-*.gz: + type: list + description: | + Tuple containing sample metadata and the GVCF data in tfrecord format + - versions: + - versions.yml: + type: file + description: File containing the DeepVariant software version + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" + - "@fa2k" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test new file mode 100644 index 00000000..d46dbe6d --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test @@ -0,0 +1,228 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_MAKEEXAMPLES" + script "../main.nf" + config "./nextflow.config" + process "DEEPVARIANT_MAKEEXAMPLES" + + tag "deepvariant/makeexamples" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - [bam, bai] - fasta - fai") { + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + // Test string values and versions. The tfrecords contents are not stable, but we check the names. + { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file name list + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test1-exaamples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf file name list + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test1-gvcf-filenames")}, + { assert snapshot(process.out.versions).match("test1-versions") }, + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, + // The test is always run with 2 cpus + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file names + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test2-examples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf tfrecord file names + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test2-gvcf-filenames")}, + { assert snapshot(process.out.versions).match("test2-versions") }, + ) + } + } + + test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + + { assert process.out.examples.get(0).get(0) == [ id:'test', single_end:false ] }, + // The test is always run with 2 cpus + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file name list + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test3-examples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf file name list + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test3-gvcf-filenames")}, + { assert snapshot(process.out.versions).match("test3-versions") }, + ) + } + } + + test("stub") { + + options "-stub" + + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert process.out.examples.get(0).get(1).size() == 4 }, + { assert snapshot( // Check examples (tfrecord / json) file name list + file(process.out.examples.get(0).get(1).get(0)).name, + file(process.out.examples.get(0).get(1).get(1)).name, + file(process.out.examples.get(0).get(1).get(2)).name, + file(process.out.examples.get(0).get(1).get(3)).name, + ).match("test4-examples-filenames")}, + + { assert process.out.gvcf.get(0).get(0) == [ id:'test', single_end:false ] }, + { assert process.out.gvcf.get(0).get(1).size() == 2 }, + { assert snapshot( // Check gvcf file name list + file(process.out.gvcf.get(0).get(1).get(0)).name, + file(process.out.gvcf.get(0).get(1).get(1)).name, + ).match("test4-gvcf-filenames")}, + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap new file mode 100644 index 00000000..24182c54 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap @@ -0,0 +1,134 @@ +{ + "test1-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:09:47.885995" + }, + "test2-examples-filenames": { + "content": [ + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:02.757227" + }, + "test2-versions": { + "content": [ + [ + "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:39:28.960959" + }, + "test4-examples-filenames": { + "content": [ + "test.examples.tfrecord-0000-of-0002.tfrecord.gz", + "test.examples.tfrecord-0000-of-0002.tfrecord.gz.example_info.json", + "test.examples.tfrecord-0001-of-0002.tfrecord.gz", + "test.examples.tfrecord-0001-of-0002.tfrecord.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:27.41698" + }, + "test1-versions": { + "content": [ + [ + "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:39:13.57526" + }, + "test3-examples-filenames": { + "content": [ + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:17.705948" + }, + "test2-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:02.765863" + }, + "test4-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-0000-of-0002.tfrecord.gz", + "test.gvcf.tfrecord-0001-of-0002.tfrecord.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:27.423442" + }, + "test3-versions": { + "content": [ + [ + "versions.yml:md5,842dca9323f25aa3cfd67789d18e7e33" + ] + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:39:44.83616" + }, + "test1-exaamples-filenames": { + "content": [ + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:09:47.874585" + }, + "test3-gvcf-filenames": { + "content": [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-09-04T16:10:17.714443" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config new file mode 100644 index 00000000..5f071fcb --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config @@ -0,0 +1,6 @@ +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--channels "insert_size"' + cpus = 2 // The number of output files is determined by cpus - keep it the same for tests + } +} diff --git a/modules/nf-core/deepvariant/makeexamples/tests/tags.yml b/modules/nf-core/deepvariant/makeexamples/tests/tags.yml new file mode 100644 index 00000000..6a13da09 --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/makeexamples: + - modules/nf-core/deepvariant/makeexamples/** diff --git a/modules/nf-core/deepvariant/postprocessvariants/main.nf b/modules/nf-core/deepvariant/postprocessvariants/main.nf new file mode 100644 index 00000000..90e8563d --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/main.nf @@ -0,0 +1,77 @@ +process DEEPVARIANT_POSTPROCESSVARIANTS { + tag "$meta.id" + label 'process_medium' + + //Conda is not supported at the moment + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords) + 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}.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 + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + + def variant_calls_tfrecord_name = variant_calls_tfrecord_files[0].name.replaceFirst(/-\d{5}-of-\d{5}/, "") + + def gvcf_matcher = gvcf_tfrecords[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/ + if (!gvcf_matcher.matches()) { + throw new IllegalArgumentException("tfrecord baseName '" + gvcf_tfrecords[0].baseName + "' doesn't match the expected pattern") + } + def gvcf_tfrecord_name = gvcf_matcher[0][1] + def gvcf_shardCount = gvcf_matcher[0][2] + // Reconstruct the logical name - ${tfrecord_name}.examples.tfrecord@${task.cpus}.gz + def gvcf_tfrecords_logical_name = "${gvcf_tfrecord_name}@${gvcf_shardCount}.gz" + + """ + /opt/deepvariant/bin/postprocess_variants \\ + ${args} \\ + --ref "${fasta}" \\ + --infile "${variant_calls_tfrecord_name}" \\ + --outfile "${prefix}.vcf.gz" \\ + --nonvariant_site_tfrecord_path "${gvcf_tfrecords_logical_name}" \\ + --gvcf_outfile "${prefix}.g.vcf.gz" \\ + --cpus $task.cpus + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_postprocessvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + prefix = task.ext.prefix ?: "${meta.id}" + """ + echo "" | gzip > ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi + echo "" | gzip > ${prefix}.g.vcf.gz + touch ${prefix}.g.vcf.gz.tbi + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant_callvariants: \$(echo \$(/opt/deepvariant/bin/run_deepvariant --version) | sed 's/^.*version //; s/ .*\$//' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/meta.yml b/modules/nf-core/deepvariant/postprocessvariants/meta.yml new file mode 100644 index 00000000..132a5263 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/meta.yml @@ -0,0 +1,113 @@ +name: deepvariant_postprocessvariants +description: DeepVariant is an analysis pipeline that uses a deep neural network to + call genetic variants from next-generation DNA sequencing data +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 + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - variant_calls_tfrecord_files: + type: file + description: | + One or more data files containing variant calls from DEEPVARIANT_CALLVARIANTS + pattern: "*.tfrecord.gz" + - gvcf_tfrecords: + type: file + description: | + Sharded tfrecord file from DEEPVARIANT_MAKEEXAMPLES with the coverage information used for GVCF output + pattern: "*.gz" + - - 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 + pattern: "*.gzi" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - vcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz.tbi: + type: file + description: Index for VCF + pattern: "*.vcf.gz.tbi" + - gvcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - gvcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz.tbi: + type: file + description: Index for GVCF + pattern: "*.g.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software version + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" + - "@fa2k" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test new file mode 100644 index 00000000..e4e9b557 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test @@ -0,0 +1,118 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_POSTPROCESSVARIANTS" + script "../main.nf" + process "DEEPVARIANT_POSTPROCESSVARIANTS" + config "./nextflow.config" + + tag "deepvariant/makeexamples" + tag "deepvariant/callvariants" + tag "deepvariant/postprocessvariants" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - wgs") { + setup { + run("DEEPVARIANT_MAKEEXAMPLES") { + script "../../makeexamples/main.nf" + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + run("DEEPVARIANT_CALLVARIANTS") { + script "../../callvariants/main.nf" + process { + """ + input[0] = DEEPVARIANT_MAKEEXAMPLES.out.examples + """ + } + } + } + when { + process { + """ + input[0] = DEEPVARIANT_CALLVARIANTS.out.call_variants_tfrecords.join( + DEEPVARIANT_MAKEEXAMPLES.out.gvcf, + failOnMismatch: true + ) + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - wgs - stub") { + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], + [], + [], + [], + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match("stub") } + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap new file mode 100644 index 00000000..5a29c624 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap @@ -0,0 +1,180 @@ +{ + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,37f0e454a6983de82f7a93eb39849985" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:40:38.231189" + }, + "homo_sapiens - wgs": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,b1d5ddb90c4a59a1a3fdace9dcc8445c" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-09T16:46:15.793662" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config new file mode 100644 index 00000000..070b4892 --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config @@ -0,0 +1,10 @@ +process { + withName: "DEEPVARIANT_CALLVARIANTS" { + ext.args = '--checkpoint "/opt/models/wgs"' + } +} +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--channels "insert_size"' + } +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml b/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml new file mode 100644 index 00000000..d26188cd --- /dev/null +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/postprocessvariants: + - modules/nf-core/deepvariant/postprocessvariants/** diff --git a/modules/nf-core/deepvariant/rundeepvariant/main.nf b/modules/nf-core/deepvariant/rundeepvariant/main.nf new file mode 100644 index 00000000..7f99c53f --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/main.nf @@ -0,0 +1,78 @@ +process DEEPVARIANT_RUNDEEPVARIANT { + tag "$meta.id" + label 'process_high' + + // FIXME Conda is not supported at the moment + // BUG https://github.com/nf-core/modules/issues/1754 + // BUG https://github.com/bioconda/bioconda-recipes/issues/30310 + container "nf-core/deepvariant:1.6.1" + + input: + tuple val(meta), path(input), path(index), path(intervals) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(gzi) + tuple val(meta5), path(par_bed) + + output: + 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 + + script: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def regions = intervals ? "--regions=${intervals}" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' + + """ + /opt/deepvariant/bin/run_deepvariant \\ + --ref=${fasta} \\ + --reads=${input} \\ + --output_vcf=${prefix}.vcf.gz \\ + --output_gvcf=${prefix}.g.vcf.gz \\ + ${args} \\ + ${regions} \\ + ${par_regions} \\ + --intermediate_results_dir=tmp \\ + --num_shards=${task.cpus} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + deepvariant: $VERSION + END_VERSIONS + """ + + stub: + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + prefix = task.ext.prefix ?: "${meta.id}" + // WARN https://github.com/nf-core/modules/pull/5801#issuecomment-2194293755 + // FIXME Revert this on next version bump + def VERSION = '1.6.1' + """ + 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}": + deepvariant: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/meta.yml b/modules/nf-core/deepvariant/rundeepvariant/meta.yml new file mode 100644 index 00000000..29b45ff9 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/meta.yml @@ -0,0 +1,122 @@ +name: deepvariant_rundeepvariant +description: DeepVariant is an analysis pipeline that uses a deep neural network to + call genetic variants from next-generation DNA sequencing data +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 + homepage: https://github.com/google/deepvariant + documentation: https://github.com/google/deepvariant + tool_dev_url: https://github.com/google/deepvariant + doi: "10.1038/nbt.4235" + licence: ["BSD-3-clause"] + identifier: biotools:deepvariant +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM file + pattern: "*.bam/cram" + - index: + type: file + description: Index of BAM/CRAM file + pattern: "*.bai/crai" + - intervals: + type: file + description: file containing intervals + - - 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 + pattern: "*.gzi" + - - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - par_bed: + type: file + description: BED file containing PAR regions + pattern: "*.bed" +output: + - vcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz: + type: file + description: Compressed VCF file + pattern: "*.vcf.gz" + - vcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.vcf.gz.tbi: + type: file + description: Tabix index file of compressed VCF + pattern: "*.vcf.gz.tbi" + - gvcf: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz: + type: file + description: Compressed GVCF file + pattern: "*.g.vcf.gz" + - gvcf_tbi: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ${prefix}.g.vcf.gz.tbi: + type: file + description: Tabix index file of compressed GVCF + pattern: "*.g.vcf.gz.tbi" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@abhi18av" + - "@ramprasadn" +maintainers: + - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test new file mode 100644 index 00000000..0790fb81 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test @@ -0,0 +1,166 @@ +nextflow_process { + + name "Test Process DEEPVARIANT_RUNDEEPVARIANT" + script "../main.nf" + process "DEEPVARIANT_RUNDEEPVARIANT" + + tag "deepvariant/rundeepvariant" + tag "deepvariant" + tag "modules" + tag "modules_nfcore" + + test("homo_sapiens - [bam, bai] - fasta - fai") { + when { + config "./nextflow.config" + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai") { + config "./nextflow-intervals.config" + + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed") { + config "./nextflow-non-autosomal-calling.config" + tag "test" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.blacklist_intervals.bed', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai") { + when { + config "./nextflow.config" + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true) + ] + input[3] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) + ] + input[4] = [ + [],[] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap new file mode 100644 index 00000000..1ec351ee --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/main.nf.test.snap @@ -0,0 +1,358 @@ +{ + "homo_sapiens - [bam, bai] - fasta_gz - fasta_gz_fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:36:27.325363" + }, + "homo_sapiens - [bam, bai] - fasta - fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:34:41.779153" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,0a629e1745926cfcedf4b169046a921a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,49503913c28ec70a6f4aa52f6b357b4d" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,8b8ab4a675f01e437aa72e1438a717d0" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0000833138104e87b05eaa906821eb21" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:35:16.993129" + }, + "homo_sapiens - [cram, crai, genome_bed] - fasta - fai - par_bed": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "4": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ], + "gvcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz:md5,4fcaa9a8b55730d191382160c2b5bb0a" + ] + ], + "gvcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.g.vcf.gz.tbi:md5,f468e846904733b3231ecf00ef7cd4a2" + ] + ], + "vcf": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz:md5,d2e26d65dbbcea9b087ed191b5c9841c" + ] + ], + "vcf_tbi": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.vcf.gz.tbi:md5,0801296d0356415bbf1ef8deb4ec84c3" + ] + ], + "versions": [ + "versions.yml:md5,a251d8d9f5e8b737d8298eead96c0890" + ] + } + ], + "meta": { + "nf-test": "0.9.0", + "nextflow": "24.04.4" + }, + "timestamp": "2024-08-29T11:35:52.23093" + } +} \ No newline at end of file diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config new file mode 100644 index 00000000..78d8d598 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-intervals.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=WGS ' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config new file mode 100644 index 00000000..6d265292 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow-non-autosomal-calling.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=WGS --haploid_contigs chr22' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config new file mode 100644 index 00000000..77e355ca --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/nextflow.config @@ -0,0 +1,8 @@ +process { + + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = ' --regions=\"chr22:0-40001\" --model_type=WGS ' + ext.prefix = { "${meta.id}_out" } + } + +} diff --git a/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml new file mode 100644 index 00000000..958b8e41 --- /dev/null +++ b/modules/nf-core/deepvariant/rundeepvariant/tests/tags.yml @@ -0,0 +1,2 @@ +deepvariant/rundeepvariant: + - modules/nf-core/deepvariant/rundeepvariant/** diff --git a/modules/nf-core/eklipse/environment.yml b/modules/nf-core/eklipse/environment.yml index e3300709..b638fba1 100644 --- a/modules/nf-core/eklipse/environment.yml +++ b/modules/nf-core/eklipse/environment.yml @@ -1,7 +1,5 @@ -name: eklipse channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::eklipse=1.8 diff --git a/modules/nf-core/eklipse/meta.yml b/modules/nf-core/eklipse/meta.yml index 0f5e88a8..cf319195 100644 --- a/modules/nf-core/eklipse/meta.yml +++ b/modules/nf-core/eklipse/meta.yml @@ -1,4 +1,3 @@ ---- # 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. @@ -17,42 +16,62 @@ tools: 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+)"] + identifier: "" 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}" - - 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 - pattern: "*.{gb}" + - - 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}" + - 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 + 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}" + - deletions: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*deletions.csv": + type: file + description: csv file with deletion information + pattern: "*deletions.csv" + - genes: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*genes.csv": + type: file + description: csv file with gene information + pattern: "*genes.csv" - circos: - type: file - description: png file with circos plot of mt - pattern: "*.{png}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.png": + type: file + description: png file with circos plot of mt + pattern: "*.{png}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@Lucpen" maintainers: diff --git a/modules/nf-core/eklipse/tests/main.nf.test b/modules/nf-core/eklipse/tests/main.nf.test index 73cf1188..fb0be6d4 100644 --- a/modules/nf-core/eklipse/tests/main.nf.test +++ b/modules/nf-core/eklipse/tests/main.nf.test @@ -14,10 +14,10 @@ nextflow_process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_illumina_mt_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_illumina_mt_bam_bai'], checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test_illumina_mt.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test_illumina_mt.bam.bai', checkIfExists: true) ] - input[1] = [ file(params.test_data['homo_sapiens']['genome']['genome_mt_gb'], checkIfExists: true) ] + input[1] = [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.NC_012920_1.gb', checkIfExists: true) ] """ } } diff --git a/modules/nf-core/ensemblvep/filtervep/meta.yml b/modules/nf-core/ensemblvep/filtervep/meta.yml index bde3aa16..a73e3b7a 100644 --- a/modules/nf-core/ensemblvep/filtervep/meta.yml +++ b/modules/nf-core/ensemblvep/filtervep/meta.yml @@ -13,33 +13,37 @@ tools: homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', single_end:false ]` - - input: - type: file - description: VCF/TAB file annotated with vep - pattern: "*.{vcf,tab,tsv,txt}" - - feature_file: - type: file - description: File containing features on separate lines. To be used with --filter option. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - input: + type: file + description: VCF/TAB file annotated with vep + pattern: "*.{vcf,tab,tsv,txt}" + - - feature_file: + type: file + description: File containing features on separate lines. To be used with --filter + option. 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" - output: - type: file - description: VCF/TAB file - pattern: "*.{vcf,tab,txt,tsv}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test', single_end:false ]` + - "*.${extension}": + type: file + description: VCF/TAB file + pattern: "*.{vcf,tab,txt,tsv}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@ramprasadn" maintainers: diff --git a/modules/nf-core/ensemblvep/vep/meta.yml b/modules/nf-core/ensemblvep/vep/meta.yml index d8ff8d14..9288a938 100644 --- a/modules/nf-core/ensemblvep/vep/meta.yml +++ b/modules/nf-core/ensemblvep/vep/meta.yml @@ -1,5 +1,6 @@ name: ensemblvep_vep -description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled through `task.ext.args`. +description: Ensembl Variant Effect Predictor (VEP). The output-file-format is controlled + through `task.ext.args`. keywords: - annotation - vcf @@ -13,75 +14,96 @@ tools: homepage: https://www.ensembl.org/info/docs/tools/vep/index.html documentation: https://www.ensembl.org/info/docs/tools/vep/script/index.html licence: ["Apache-2.0"] + identifier: "" input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - vcf: - type: file - description: | - vcf to annotate - - custom_extra_files: - type: file - description: | - extra sample-specific files to be used with the `--custom` flag to be configured with ext.args - (optional) - - genome: - type: string - description: | - which genome to annotate with - - species: - type: string - description: | - which species to annotate with - - cache_version: - type: integer - description: | - which version of the cache to annotate with - - cache: - type: file - description: | - path to VEP cache (optional) - - meta2: - type: map - description: | - Groovy Map containing fasta reference information - e.g. [ id:'test' ] - - fasta: - type: file - description: | - reference FASTA file (optional) - pattern: "*.{fasta,fa}" - - extra_files: - type: file - description: | - path to file(s) needed for plugins (optional) + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: | + vcf to annotate + - custom_extra_files: + type: file + description: | + extra sample-specific files to be used with the `--custom` flag to be configured with ext.args + (optional) + - - genome: + type: string + description: | + which genome to annotate with + - - species: + type: string + description: | + which species to annotate with + - - cache_version: + type: integer + description: | + which version of the cache to annotate with + - - cache: + type: file + description: | + path to VEP cache (optional) + - - meta2: + type: map + description: | + Groovy Map containing fasta reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: | + reference FASTA file (optional) + pattern: "*.{fasta,fa}" + - - extra_files: + type: file + description: | + path to file(s) needed for plugins (optional) output: - vcf: - type: file - description: | - annotated vcf (optional) - pattern: "*.ann.vcf.gz" + - meta: + type: file + description: | + annotated vcf (optional) + pattern: "*.ann.vcf.gz" + - "*.vcf.gz": + type: file + description: | + annotated vcf (optional) + pattern: "*.ann.vcf.gz" - tab: - type: file - description: | - tab file with annotated variants (optional) - pattern: "*.ann.tab.gz" + - meta: + type: file + description: | + tab file with annotated variants (optional) + pattern: "*.ann.tab.gz" + - "*.tab.gz": + type: file + description: | + tab file with annotated variants (optional) + pattern: "*.ann.tab.gz" - json: - type: file - description: | - json file with annotated variants (optional) - pattern: "*.ann.json.gz" + - meta: + type: file + description: | + json file with annotated variants (optional) + pattern: "*.ann.json.gz" + - "*.json.gz": + type: file + description: | + json file with annotated variants (optional) + pattern: "*.ann.json.gz" - report: - type: file - description: VEP report file - pattern: "*.html" + - "*.html": + type: file + description: VEP report file + pattern: "*.html" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@maxulysse" - "@matthdsm" diff --git a/modules/nf-core/expansionhunter/environment.yml b/modules/nf-core/expansionhunter/environment.yml index 90a3bfff..07db4374 100644 --- a/modules/nf-core/expansionhunter/environment.yml +++ b/modules/nf-core/expansionhunter/environment.yml @@ -1,9 +1,6 @@ -name: expansionhunter - channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::expansionhunter=5.0.0 diff --git a/modules/nf-core/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml index 698529dc..4d55fe26 100644 --- a/modules/nf-core/expansionhunter/meta.yml +++ b/modules/nf-core/expansionhunter/meta.yml @@ -14,69 +14,84 @@ tools: documentation: https://github.com/Illumina/ExpansionHunter/blob/master/docs/01_Introduction.md doi: "10.1093/bioinformatics/btz431" licence: ["Apache-2.0"] + identifier: biotools:ExpansionHunter input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - - bai: - type: file - description: Index of BAM/CRAM file - pattern: "*.{bai,crai}" - - 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_fai: - 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 - pattern: "*.json" + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - bai: + type: file + description: Index of BAM/CRAM file + pattern: "*.{bai,crai}" + - - 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_fai: + 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 + pattern: "*.json" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', gender:'female' ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - bam: - type: file - description: BAM/CRAM file - pattern: "*.{bam,cram}" - vcf: - type: file - description: VCF with repeat expansions - pattern: "*.vcf.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', gender:'female' ] + - "*.vcf.gz": + type: file + description: VCF with repeat expansions + pattern: "*.vcf.gz" - json: - type: file - description: JSON with repeat expansions - pattern: "*.json.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', gender:'female' ] + - "*.json.gz": + type: file + description: JSON with repeat expansions + pattern: "*.json.gz" + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', gender:'female' ] + - "*_realigned.bam": + type: file + description: BAM/CRAM file + pattern: "*.{bam,cram}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@jemten" maintainers: diff --git a/modules/nf-core/expansionhunter/tests/main.nf.test b/modules/nf-core/expansionhunter/tests/main.nf.test index ef15e133..40c0f236 100644 --- a/modules/nf-core/expansionhunter/tests/main.nf.test +++ b/modules/nf-core/expansionhunter/tests/main.nf.test @@ -13,12 +13,12 @@ nextflow_process { process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), ] - input[1] = [[id:'fasta'],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - input[2] = [[id:'fasta_fai'],file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)] - input[3] = [[id:'catalogue'],file(params.test_data['homo_sapiens']['genome']['repeat_expansions'], checkIfExists: true)] + input[1] = [[id:'fasta'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'fasta_fai'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'catalogue'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/loci/repeat_expansions.json', checkIfExists: true)] """ } } @@ -40,12 +40,12 @@ nextflow_process { process { """ input[0] = [ [ id:'test' ], // meta map - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true), - file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), ] - input[1] = [[id:'fasta'],file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)] - input[2] = [[id:'fasta_fai'],file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)] - input[3] = [[id:'catalogue'],file(params.test_data['homo_sapiens']['genome']['repeat_expansions'], checkIfExists: true)] + input[1] = [[id:'fasta'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)] + input[2] = [[id:'fasta_fai'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)] + input[3] = [[id:'catalogue'],file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/loci/repeat_expansions.json', checkIfExists: true)] """ } } diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fastp/environment.yml index 70389e66..26d4aca5 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fastp/environment.yml @@ -1,7 +1,5 @@ -name: fastp channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastp=0.23.4 diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf index 4fc19b74..e1b9f565 100644 --- a/modules/nf-core/fastp/main.nf +++ b/modules/nf-core/fastp/main.nf @@ -10,6 +10,7 @@ process FASTP { input: tuple val(meta), path(reads) path adapter_fasta + val discard_trimmed_pass val save_trimmed_fail val save_merged @@ -18,9 +19,9 @@ process FASTP { tuple val(meta), path('*.json') , emit: json tuple val(meta), path('*.html') , emit: html tuple val(meta), path('*.log') , emit: log - path "versions.yml" , emit: versions tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -30,6 +31,8 @@ process FASTP { def prefix = task.ext.prefix ?: "${meta.id}" def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : "" def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : '' + def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" ) + def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz" // Added soft-links to original fastqs for consistent naming in MultiQC // Use single ended for interleaved. Add --interleaved_in in config. if ( task.ext.args?.contains('--interleaved_in') ) { @@ -59,7 +62,7 @@ process FASTP { fastp \\ --in1 ${prefix}.fastq.gz \\ - --out1 ${prefix}.fastp.fastq.gz \\ + $out_fq1 \\ --thread $task.cpus \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ @@ -81,8 +84,8 @@ process FASTP { fastp \\ --in1 ${prefix}_1.fastq.gz \\ --in2 ${prefix}_2.fastq.gz \\ - --out1 ${prefix}_1.fastp.fastq.gz \\ - --out2 ${prefix}_2.fastp.fastq.gz \\ + $out_fq1 \\ + $out_fq2 \\ --json ${prefix}.fastp.json \\ --html ${prefix}.fastp.html \\ $adapter_list \\ @@ -103,14 +106,16 @@ process FASTP { stub: def prefix = task.ext.prefix ?: "${meta.id}" def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = is_single_output ? "${prefix}.fastp.fastq.gz" : "${prefix}_1.fastp.fastq.gz ${prefix}_2.fastp.fastq.gz" - def touch_merged = (!is_single_output && save_merged) ? "touch ${prefix}.merged.fastq.gz" : "" + def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz" + def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : "" + def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz" """ - touch $touch_reads + $touch_reads + $touch_fail_fastq + $touch_merged touch "${prefix}.fastp.json" touch "${prefix}.fastp.html" touch "${prefix}.fastp.log" - $touch_merged cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml index c22a16ab..159404d0 100644 --- a/modules/nf-core/fastp/meta.yml +++ b/modules/nf-core/fastp/meta.yml @@ -11,62 +11,100 @@ tools: documentation: https://github.com/OpenGene/fastp doi: 10.1093/bioinformatics/bty560 licence: ["MIT"] + identifier: biotools:fastp input: - - meta: - type: map - description: | - Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. If you wish to run interleaved paired-end data, supply as single-end data - but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. - - adapter_fasta: - type: file - description: File in FASTA format containing possible adapters to remove. - pattern: "*.{fasta,fna,fas,fa}" - - save_trimmed_fail: - type: boolean - description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` - - save_merged: - type: boolean - description: Specify true to save all merged reads to the a file ending in `*.merged.fastq.gz` + - - meta: + type: map + description: | + Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. If you wish to run interleaved paired-end data, supply as single-end data + but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. + - - adapter_fasta: + type: file + description: File in FASTA format containing possible adapters to remove. + pattern: "*.{fasta,fna,fas,fa}" + - - discard_trimmed_pass: + type: boolean + description: Specify true to not write any reads that pass trimming thresholds. + | This can be used to use fastp for the output report only. + - - save_trimmed_fail: + type: boolean + description: Specify true to save files that failed to pass trimming thresholds + ending in `*.fail.fastq.gz` + - - save_merged: + type: boolean + description: Specify true to save all merged reads to a file ending in `*.merged.fastq.gz` output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - reads: - type: file - description: The trimmed/modified/unmerged fastq reads - pattern: "*fastp.fastq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fastp.fastq.gz": + type: file + description: The trimmed/modified/unmerged fastq reads + pattern: "*fastp.fastq.gz" - json: - type: file - description: Results in JSON format - pattern: "*.json" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.json": + type: file + description: Results in JSON format + pattern: "*.json" - html: - type: file - description: Results in HTML format - pattern: "*.html" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: Results in HTML format + pattern: "*.html" - log: - type: file - description: fastq log file - pattern: "*.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.log": + type: file + description: fastq log file + pattern: "*.log" - reads_fail: - type: file - description: Reads the failed the preprocessing - pattern: "*fail.fastq.gz" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.fail.fastq.gz": + type: file + description: Reads the failed the preprocessing + pattern: "*fail.fastq.gz" - reads_merged: - type: file - description: Reads that were successfully merged - pattern: "*.{merged.fastq.gz}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.merged.fastq.gz": + type: file + description: Reads that were successfully merged + pattern: "*.{merged.fastq.gz}" + - versions: + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test index 6f1f4897..30dbb8aa 100644 --- a/modules/nf-core/fastp/tests/main.nf.test +++ b/modules/nf-core/fastp/tests/main.nf.test @@ -10,221 +10,290 @@ nextflow_process { test("test_fastp_single_end") { when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:
    12.922000 K (92.984097%)", - "single end (151 cycles)" ] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end") } + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("test_fastp_single_end-stub") { - - options '-stub' + test("test_fastp_paired_end") { when { - params { - outdir = "$outputDir" - } + process { """ adapter_fasta = [] + save_trimmed_pass = true save_trimmed_fail = false save_merged = false input[0] = Channel.of([ - [ id:'test', single_end:true ], - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + test("fastp test_fastp_interleaved") { + + config './nextflow.interleaved.config' + when { + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ + } + } + + then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end_stub") } + { assert path(process.out.html.get(0).get(1)).getText().contains("paired end (151 cycles + 151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert process.out.reads_fail == [] }, + { assert process.out.reads_merged == [] }, + { assert snapshot( + process.out.reads, + process.out.json, + process.out.versions).match() } ) } } - test("test_fastp_paired_end") { + test("test_fastp_single_end_trim_fail") { when { - params { - outdir = "$outputDir" + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_trim_fail") { + + config './nextflow.save_failed.config' + when { process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] + ]) + input[1] = [] + input[2] = false + input[3] = true + input[4] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 162") }, + { assert snapshot( + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.json, + process.out.versions).match() } + ) + } + } + + test("test_fastp_paired_end_merged") { + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 198'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end") } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total reads: 75") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() }, ) } } - test("test_fastp_paired_end-stub") { - - options '-stub' + test("test_fastp_paired_end_merged_adapterlist") { when { - params { - outdir = "$outputDir" + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] + ]) + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true + """ } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("
    ") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads_fail, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + + test("test_fastp_single_end_qc_only") { + + when { process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } + ) + } + } + test("test_fastp_paired_end_qc_only") { + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } @@ -232,114 +301,99 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end-stub") } + { assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") }, + { assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") }, + { assert snapshot( + process.out.json, + process.out.reads, + process.out.reads, + process.out.reads_fail, + process.out.reads_fail, + process.out.reads_merged, + process.out.reads_merged, + process.out.versions).match() } ) } } - test("fastp test_fastp_interleaved") { + test("test_fastp_single_end - stub") { + + options "-stub" - config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" + + process { + """ + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = false + input[3] = false + input[4] = false + """ } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end - stub") { + + options "-stub" + + when { + process { """ adapter_fasta = [] + save_trimmed_pass = true save_trimmed_fail = false save_merged = false input[0] = Channel.of([ - [ id:'test', single_end:true ], // meta map - [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] + [ id:'test', single_end:false ], // meta map + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } then { - def html_text = [ "Q20 bases:
    25.719000 K (93.033098%)", - "paired end (151 cycles + 151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 162"] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("fastp test_fastp_interleaved_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved") } + { assert snapshot(process.out).match() } ) } } - test("fastp test_fastp_interleaved-stub") { + test("fastp - stub test_fastp_interleaved") { - options '-stub' + options "-stub" config './nextflow.interleaved.config' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = false """ } } @@ -347,277 +401,112 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved-stub") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_single_end_trim_fail") { + test("test_fastp_single_end_trim_fail - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" - } + process { """ - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:true ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { failed_read_lines.each { failed_read_line -> - { assert path(process.out.reads_fail.get(0).get(1)).linesGzip.contains(failed_read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_trim_fail_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_single_end_trim_fail") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_trim_fail") { + test("test_fastp_paired_end_trim_fail - stub") { + + options "-stub" config './nextflow.save_failed.config' when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = true - save_merged = false - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = true + input[4] = false """ } } then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 162'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { failed_read2_lines.each { failed_read2_line -> - { assert path(process.out.reads_fail.get(0).get(1).get(2)).linesGzip.contains(failed_read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_trim_fail") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged") { + test("test_fastp_paired_end_merged - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = false + input[3] = false + input[4] = true """ } } then { - def html_text = [ "
    "] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683'] - def read1_lines = [ "@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged-stub") { + test("test_fastp_paired_end_merged_adapterlist - stub") { - options '-stub' + options "-stub" when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = [] - save_trimmed_fail = false - save_merged = true - input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) + input[2] = false + input[3] = false + input[4] = true """ } } @@ -625,101 +514,63 @@ nextflow_process { then { assertAll( { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_stub") } + { assert snapshot(process.out).match() } ) } } - test("test_fastp_paired_end_merged_adapterlist") { + test("test_fastp_single_end_qc_only - stub") { + + options "-stub" when { - params { - outdir = "$outputDir" - } process { """ - adapter_fasta = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - save_trimmed_fail = false - save_merged = true + input[0] = Channel.of([ + [ id:'test', single_end:true ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ] + ]) + input[1] = [] + input[2] = true + input[3] = false + input[4] = false + """ + } + } + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("test_fastp_paired_end_qc_only - stub") { + + options "-stub" + + when { + process { + """ input[0] = Channel.of([ [ id:'test', single_end:false ], // meta map [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ] ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged + input[1] = [] + input[2] = true + input[3] = false + input[4] = false """ } } then { - def html_text = [ "
    "] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683',"--adapter_fasta"] - def read1_lines = ["@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_adapterlist") } + { assert snapshot(process.out).match() } ) } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap index 3e876288..54be7e45 100644 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ b/modules/nf-core/fastp/tests/main.nf.test.snap @@ -1,55 +1,178 @@ { - "fastp test_fastp_interleaved_json": { + "test_fastp_single_end_qc_only - stub": { "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] - ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:19:15.063001" + "timestamp": "2024-07-05T14:31:10.841098" }, - "test_fastp_paired_end_merged-for_stub_match": { + "test_fastp_paired_end": { "content": [ [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39" + ] + ] + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:10:13.467574" + "timestamp": "2024-07-05T13:43:28.665779" }, - "versions_interleaved": { + "test_fastp_paired_end_merged_adapterlist": { "content": [ + [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:24.615634793" + "timestamp": "2024-07-05T13:44:18.210375" }, - "test_fastp_single_end_json": { + "test_fastp_single_end_qc_only": { "content": [ [ [ @@ -57,274 +180,1152 @@ "id": "test", "single_end": true }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a" ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:18:43.526412" - }, - "versions_paired_end": { - "content": [ + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:42.333545689" + "timestamp": "2024-07-05T13:44:27.380974" }, - "test_fastp_paired_end_match": { + "test_fastp_paired_end_trim_fail": { "content": [ [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:03:06.431833729" - }, - "test_fastp_interleaved-_match": { - "content": [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7", + "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a" + ] + ] + ], [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:19:15.111894" - }, - "test_fastp_paired_end_merged_match": { - "content": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366", + "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6", + "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995" + ] + ] + ], + [ + + ], [ [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:08:44.496251446" - }, - "versions_single_end_stub": { - "content": [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:55:27.354051299" + "timestamp": "2024-07-05T13:43:58.749589" }, - "versions_interleaved-stub": { + "fastp - stub test_fastp_interleaved": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:46.535528418" + "timestamp": "2024-07-05T13:50:00.270029" }, - "versions_single_end_trim_fail": { + "test_fastp_single_end - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:03.724591407" + "timestamp": "2024-07-05T13:49:42.502789" }, - "test_fastp_paired_end-for_stub_match": { + "test_fastp_paired_end_merged_adapterlist - stub": { "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:07:15.398827" + "timestamp": "2024-07-05T13:54:53.458252" }, - "versions_paired_end-stub": { + "test_fastp_paired_end_merged - stub": { "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:56:06.50017282" + "timestamp": "2024-07-05T13:50:27.689379" }, - "versions_single_end": { + "test_fastp_paired_end_merged": { "content": [ [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:55:07.67921647" - }, - "versions_paired_end_merged_stub": { - "content": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc" + ] + ], + [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672", + "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba" + ] + ] + ], + [ + + ], + [ + [ + { + "id": "test", + "single_end": false + }, + "test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:47.350653154" + "timestamp": "2024-07-05T13:44:08.68476" }, - "test_fastp_interleaved-for_stub_match": { + "test_fastp_paired_end - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:06.127974" + "timestamp": "2024-07-05T13:49:51.679221" }, - "versions_paired_end_trim_fail": { + "test_fastp_single_end": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:18.140484878" + "timestamp": "2024-07-05T13:43:18.834322" }, - "test_fastp_single_end-for_stub_match": { + "test_fastp_single_end_trim_fail - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:06:00.244202" + "timestamp": "2024-07-05T14:05:36.898142" }, - "test_fastp_single_end-_match": { + "test_fastp_paired_end_trim_fail - stub": { "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_fail": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-03-18T16:18:43.580336" + "timestamp": "2024-07-05T14:05:49.212847" }, - "versions_paired_end_merged_adapterlist": { + "fastp test_fastp_interleaved": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" + ] + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T12:05:37.845370554" + "timestamp": "2024-07-05T13:43:38.910832" }, - "versions_paired_end_merged": { + "test_fastp_single_end_trim_fail": { "content": [ + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd" + ] + ], + [ + + ], [ "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" }, - "timestamp": "2024-02-01T11:59:32.860543858" + "timestamp": "2024-07-05T13:43:48.22378" }, - "test_fastp_single_end_trim_fail_json": { + "test_fastp_paired_end_qc_only": { "content": [ [ [ { "id": "test", - "single_end": true + "single_end": false }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" + "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df" ] + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" ] ], "meta": { "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nextflow": "24.04.2" + }, + "timestamp": "2024-07-05T13:44:36.334938" + }, + "test_fastp_paired_end_qc_only - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ], + "html": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.json:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "log": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fastp.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "reads": [ + + ], + "reads_fail": [ + + ], + "reads_merged": [ + + ], + "versions": [ + "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "24.04.2" }, - "timestamp": "2024-01-17T18:08:41.942317" + "timestamp": "2024-07-05T14:31:27.096468" } } \ No newline at end of file diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml index 1787b38a..691d4c76 100644 --- a/modules/nf-core/fastqc/environment.yml +++ b/modules/nf-core/fastqc/environment.yml @@ -1,7 +1,5 @@ -name: fastqc channels: - conda-forge - bioconda - - defaults dependencies: - bioconda::fastqc=0.12.1 diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index d79f1c86..d8989f48 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -26,7 +26,10 @@ process FASTQC { def rename_to = old_new_pairs*.join(' ').join(' ') def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ') - def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') + // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory) + // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222 + // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label + def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB') / task.cpus // FastQC memory value allowed range (100 - 10000) def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb) diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml index ee5507e0..4827da7a 100644 --- a/modules/nf-core/fastqc/meta.yml +++ b/modules/nf-core/fastqc/meta.yml @@ -16,35 +16,44 @@ tools: homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ licence: ["GPL-2.0-only"] + identifier: biotools:fastqc input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.html": + type: file + description: FastQC report + pattern: "*_{fastqc.html}" - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - "*.zip": + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" - versions: - type: file - description: File containing software versions - pattern: "versions.yml" + - versions.yml: + type: file + description: File containing software versions + pattern: "versions.yml" authors: - "@drpatelh" - "@grst" diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test index 70edae4d..e9d79a07 100644 --- a/modules/nf-core/fastqc/tests/main.nf.test +++ b/modules/nf-core/fastqc/tests/main.nf.test @@ -23,17 +23,14 @@ nextflow_process { then { assertAll ( - { assert process.success }, - - // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it. - // looks like this:
    Mon 2 Oct 2023
    test.gz
    - // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039 - - { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" }, - { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" }, - { assert path(process.out.html[0][1]).text.contains("
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls
    File typeConventional base calls

    jx_Ry)!8|d-JebNGaGDW1#(O_I4hx;bM}V(| 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%0DMRcN%I3ej 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
    Ny@#;ub(G0pgS20!Drf=pqZi>HaJYFB*OTOOgj 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 + + +raredisease nf- core/ diff --git a/docs/images/raredisease_metromap_dark.pdf b/docs/images/raredisease_metromap_dark.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7dbd15eef380612d64c2315d1c8c056ec74f469f GIT binary patch literal 38296 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 T0Yl5!+|ty7OI6j?-;E0Ze|kl< literal 0 HcmV?d00001 diff --git a/docs/images/raredisease_metromap_dark.png b/docs/images/raredisease_metromap_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d7bb26c719e79d5cfa9e8f75d62d101cef1560 GIT binary patch literal 263779 zcmeEtgdw z#CPz0eBZy}yRP4Ljd9M*IcM*+*Shz;*1AvFOI3N28?-k-AP|Ydi|6Vf5Pl;FgfmZo z2b^j5I{pa!L+JQI#|Z=?ZMpsf?r_L^3!J>;EUWGO+QGuv&E$hQ$j!}-+sfX?$;`yj zoZI1pW%9N-EeLcMr11QihI`89jEB3yo5ri%W6?X471_{tuYy@ZU3XYRS#GH4;q4aW zg|ZMl_!fE&Vz+pJdqYE%@Uc4s`7??`!{_8LQ=SEq5<^&iqUuB4%^8(4WG3&6Y#ete z@Nrqi<=jcy^OaD84@eXpN?0ky?N4mf{~TwNjb&5#_mc(78=l2|@xK$p2EnNR9c6*L z2lW1T$ZvedQ|W()c#mWp{@#d9VbI@vmFs_pw57z2_x^VXO~|PJ?^D^VkdF@%{&z^C z{eKSytnq*5{o@k<|2mR7`zP^zAAZ2=t)P_c_pSWK?*1nN>>NLdd$Br_Vib%YIO02+ z#wP5nkNv!!E#fD;#(%;jYvi`a5h+>{eHYDvRySrx_shb!ey3Gl-$6H?^WR{~a{VMu zNBkCPiVjfF_5Hr(e&-ARBV5-PgL@w@3)O+24k}h&82JAuwklw!yro>cO$O*jLX52O zEwpBO@zt+5;LBn7-*BubsIK(6BzhWS$%NNLGz<-4vpQYBtQ{z*Lf z<>EvHOF!v5H~05bE4#Ar3o;BR+9G{g62rZ>`H$qIH`mwD)(rlO7$qXI@J5moM&72a zflT1n%nIE+P(OPy*C!Z1Bz|ngdB@21EbfU_j3p1d)#;ee>q=l?SyBJH{-G>961oh^ zgvr2ODd?hdxG?t>x{o1#-_B4IpGhG*2v{M^5{5nd?s{#bl4Zqz(WuelwudH>KIu8p zxRd$749v{G9@hOye2Vzw&ItK=9CESh>heWwLfYy@!L{iTk$-Jrs8ofoj_%%q?y&Tu zZfvR?UVKlxXLXvv(l3dlPozJ6R5qxOE@k7A8gw(i#zEaUUO@$HJ>K=>W7+c6ZhKTw zVjK$Wx^iEV{2*JD^74X;6E?6bbOYZA-Z;7a63-Cl@}I1wsk18U>uYSx{zc5JNYxli z2S`*lt>!F|w~aaH9!tM3h#s}QmyHxamcR`B<6!%772Y3=Mju^2$?Gq+R=j$+XG?}o zL}FY+s3BNjuvJw)jbwNzh&aKyph9=}H`}$h3>7joY2&x!knGBfz zD`^zIF|Q*fhS-q?BZR(d%z+7K>33Bb+>?T(6`7nwLuB%b&#v*BAN2XG9&|l);6{a? z#IYQh5|;i;o63b9&^EXUIt=v!h7iogb!8NrU?Fw>w$-b3j_qW^3&A z1gt=g+5dVLUTm8k6Gx!WkZ!Q8$?ZaL z6G_UKtfle75@}!v>e282-bC<)ESv;z!f9Zoes5#QU}Xxrm*#*;^*wk2mjO{%U3|AE zk?FI=HaJX4@PMO1$)H&Wy5n&+uIhuujemgo3}5ezTRXJZQv=*k3$UvV8f^R!Q^m%` z^Ulql%8|HKCN_b|PE0Uxoe`x66=Sy&(X(stOeZ`sk4=z53H@hK4o?3Y6cC}rUx*vP z!hV%QZm$e7d=%<864htw>ltf`I?G39v6Hj}$k&Z;%CDc;Wck+_NG9B1BFGg0GG>1P zQQkyVLpq+@S*}(scFB(ZU`&t6j_(KuP~co>WB^;x^w8ki7)GUywf`Br;5%9PJ){rv z7Bb3?vksUC5&Bs=?u)pJbML9$n5THeP)TAoB%xheGdyeQHTGQgdi!4&DE@ax9>mM< zEVl#2R_KFPAXDJiT5z?&y*T7U5$PAabC;zuHZCEke8t7yUX{&@!4I}# zO*kj^fEQQLtt%nJkwO4C&gk(xzc$F#Uy7lgrZl*h=FbUxkG#^`Iv{-tb?mS{KF2+| zU&=aCwagiP6>dGX&!^F{7vGU)UvK{e{gKg+0=Px2Ai-Z=vd+T}>IVTJI8`vSn>r;q zJMlxp5)uuvEE=V~fS?(TwPP$ZW_G(_Qs58(e74JeT_cMf@838b=83In00~pkkb39N z9+Rb~7w)o02HeuyJ`}dz2Jow*kV7T8z zyosx?zc_)=INtPiim}vsZKvX^1pK-~fg0A8BN$q3^QCx-o zT1(>fu4@Hd`MVz+=4ASdqSIYr#}5h+-K+zEgBtr+`P4V#MS%MZeA0mc=fzyZTZQO< z9XZDh0s!tgKd>+2gYICAkiH7KlEMnz-IE4>i~vY-0-N*X%7`K`L0U&^>@_F~K6lU` z>(vR|*Pg|jRfym5H6>2is*M)nXWeHc9s0UKOUPQ!< z*6e+H`sl~%%Zas#gu#mookCy|{7-wplHeZvOOj2%fhGzKoOm&*Ed79ud^r@l-Joe( z3!>M~N%FEvD3L9{myQ!r65cQMMC_&ohzNFNhka+|XAnq-`lrvYRLc4@a7Vm!&U{}# z1E}}gLu7qtc{O+z0>_~`_VKu0V7xyz^WV}asZ(aiLrKXP9hO9$-h7m-y4#ixa~BEd9X%NW3xT9x25x0P8vI z7yrk&d4FMf-7PtBK8!hVAG%wStJ~6Zw6aX?VKq-`=0;OhC%lY{A1v|oO_$f zXxoBt-UM*KlX5XT_-wz*}bx{}$ zMn?wVM@IB^UlEFb0H)yu(74Tm`+&U^HUP{v@b3rfy|lBu3XU>pn`BkyGY9hYLJW12pJS0*AXA_BKg;m+O<0gAZNU`+b2J z`ESAji6K=Tf#lw|s$I>m<>>8}VlW;e=%D+9u8jbHaD%!XyD`xHBZ~I15!v~O z3k)Zph`3S6G`uhQq;7Kb*Vl}niT><_-maLeS}jsBU(*??Z*xelIQcsSQ^Pr40`dA>#fmj(8k(EksXomb2{*Fp9<8$ zoh*47OH=btXLP&%RS*wPvZ078W^u}4XX@7oL*?sZ+NuWEHcOd2?}R0jm8aRkpoW|H zc&3Dq-U?MFw|BjZQ+|`tONtxwFVlyA?D~Ndj~1V2+UQmxDiZKy&Zz_8^t%7CNi5qT zSY{`(^^?v*dzHq|Am(5n|N8vaFp}K<)Twwcd^LD7l*u+}qK1c0|F(>k{ZIs<)I$NG zw8!s$rK%m(<&w0ZhqZ*vQYvJv+2iA_j6SPkS7(4$}> zr#f1#xqhf9096l+g)z>+m&a}r*Qf9#Wp=>DYv&U3zX!bqDVu1}I_Nz4tEv%mvyw9% zbAt}+FZ?@Nm9O1SF22>pbUZ!R%`SGm%DJ=9?=VYiKo`7xC(`+|W%L!Ttb1UtCP*-W55TXK1m*Llw)>6vv%zvoW*jgok8B@BG6P`)H5%Up`F5P0_id zgI&v6i;M%p4eOycQnIbbhj^b%Tf+!-unPqCZt!M(@KCeD;0M%xd2kGfFZeeILA@#7 z;Gxr!-~#LAj8~j$juYUi9Bo^<^4Zb6+U}FNE@lkcyaCb|NE6g{=*Jq!7T25N#5BfI z2x6o-_#tGf;@Y7HlW082o_6O%`|W%QiZ;U8q?wcBh&Q8CZN7+srIvB1!K3>$<6%x3|{cYh*>0mpWQ)Bi(*MJkVuuUo|)!*Ve z=4CU zL8clnc5{}ih5Dibje-*f)z))*eDmuCt_Mq3&(hxqRn-mAlY}Tg+S_aaB4jYZ?t1xg z$p7S(>D;=H4+BWD&t#eI?>QM;W$o=U=gwS)px|!4@DRQ+rqef})DSM_(M<|zck2PG z>PsVse#D!gJM~TZK}qtfs$|QZ6asN87wId7v7T}mt zlO6)ABUP(WePYG3a_b8TKaS$8z93?^rBUSgJYQ_s)@LS0{+W0H@&=lRuL7l?u{4*n zc8lA?YTdqMr}wn7K+~Eu+Xi+V3vvqGrA0H|J+e1fj~2#pAEWJa@$d>d#b?s6hD&Y- zo=wiF1tQ~-l12A0czMK#Dci2`-dXJVwpfIZ$L46;{e31cSl<U8-%&MXc*jnz6lDkV?91Q6@^$O_wo-R#052+Msmwn6Z4hCycdQ@3Cj6MWb(Q3iO zYoA1asHfd0%o{o`NnTQbQ$-RJ#uwa7o|oGisq&|k-a+cIL-$>ygl ztmak>KD0t^TmYHP7r1g4u5YB}^l~U-cctNSVz8RpNVvY1ePygrc0RE0@eW9cr=(D- zbS_J(xn@s$<6!29VAyta16Ofl#aQ$bdP(4@qlKsKyIvenO?Nt8*^0^7rYhSc$wW1J zm(THpjQ)z%e!c!n6T-yU@a?eR)T3#3oc|Df3mCrLz%rBfORFC4{)pAhx}?$Nv$}*| z1AWCd`S}dArrEwrCCAg=9WjWq4^}GLE~#zdJWZWp?C{QbEkgyH4L{m@k&F^aI^`C- zwf#Q!hZ)u0?z^wYD*LR@M+@&G0-sTc`e672g>Ne!rW)YCXKSszEM<5wLOzdCmH$K> zJTS2KIpgu8_LtQg4r+PzPH9ANZ5g{^^C(-973C%;N5%(tERrtW zVvnKv$WUeQ3~&dAKk#iAn~*F@XLk7mKfa1?_vDJ)tQxu#Z)%{D>tKOkDcwmf5u4}z za-4aXdYydJrTyv&t8ah#RrYOs2nTey?db}cu3RuEppJLMG2OzB+O~gTU@$1gUr}X+ z1fry&>EY~>t5R)#h{Og_8=@O`e0Yv${jLhP{f;IqMb0rT9w&1lBFEECS|Zh31HEpu z7M;uWS6*G^g{a$gbt_uw8 zjwg@8Hw5+hR-9&cYt8bw{`R;PGF+vh3RZ>Hq>yjp-6z+%VX~gtOVnIh?A6os*aEG= z@rXSTpLrWk{24kTSiz}ebG7N-6WZBZ(lx@*U7_~h?$eJs{z}2GKc*Z=BCc~!%uq@k z<=I~RzGAJKEL5jn@9Pt49KFR{LS-A_|NIIslto)Na>ph&EmY)7hgl znJ!j2I(!d0dsDE-g`O3CBwe9(%+nVc;bX30UVqXH12h~(7y1Vql0+_flah&~g<;5h zhXF~k!9&Z2lds$xySmB~1ycl%H%D(c1PzviZZfc{J?p${$e&~1I-98MaBiHq+_yi# z-?)oRN>C(CQ6)aU`QX_!;fb!5Nw?nEZFeZKgdNHtdZv2B9g=ph6pGj_QF+o~)ZpD- z%vyg%`Fq{aH{T+TTmQ(tgqr2Bl%-z|#H7=*Mpu8+ou>gXSv;}=j<7Wd`rV7jhMrYl zmz(S!=;jD*V+L1$F_2sC(GoO(U1=+~3L!gUI}PPZFd^i_+!X0-b)BX0?M%1Tva{>8 zwrj9;XaZ{s+DscxRY>~2ifCY{;Zqm2@64LG+WghnqMC*kb{vldFqJ3BouZZS`8Ek} z(e0lO$rcgKF^Ws$!9xyyS(#X1JFo8kve99roF0R`c&gbE~d$-TUsBv=tMqk++G`I|c^nUW@pf$v5vj z%X`H6#+vH6uF>6LNi3#=+b4_t=#(pdRdKb^)MsVQVGA-4qoKDSnLcT0&xc{b@H)!J zCQu&@c;7?MAl=cC$kHkgA*Q-> z$!bJ^RKVHk+yEwrKGbOLV})hdEi~hZ-&jOC#8ynVwTEmhDIql(=pDem)A8V7u6*qC zKoaBGvlA(f}wsw+g1U|%rcm2+6H+MejO#&zKL$(eW=K`ao*V?PD;tOoU{I zMZYF#n0-DbYNU}DyzS)AbX}n=?we4MD8VO9r)_Ay6sVnS1DObjdhPz_Yd9+$+$a2Q;kV<%S&jL zcU@;C$8O93y82{ymb1d{XfR28->Ctr&LM{mZ!TC>>8cHERMtL$Zei;aE_t^YLUz0C zG=0__d^Yq>JESguAM)j>nC&fg71E2n?R&KCn=yp<5*oYJ3nU_0@HxdD-%`xHK`^PV z=<1@bFs13Ozy(HzvZd+{#{Kd`-B-0ADi8PW)L(wTX>*_A=lkag&*u%8gL#UzQI4P? zI(GS=ni)T>o^yPzkw};?*0_2^f4DkZRcE{TMoMqzO_7XR>M<{-D+eIwGBv!dC-nef zcOVw07g zHIZj4`0k`IN@BOQP9V?od{=8{veN3Jup=J0IO~YG5j$`$PG(jtHt&CyJ?Cvq#3H5r zd)l)-^r4&h@j9OIjL>R@7&Ro0N-Yf&kVM{0LBIt20tKSv6DXdhmh-9N+m#n7wWgh) zzOqI)dMT)lf(INY80-wFS2o!yr0F6SQ8+BBTbOSMP8VuIsr)%0Jb!d(f)@9;6@QlB}@NJ zG=|aM!SKld+Nxac`BP0Rg?xeM|6^qp4 zJ4iU7)m+r!8nF|t!iPhA)3TOwE)k0A4nWRnhrDg98Joa<=q7Pt-d53WSJmu$PG+jT zvr~^7SlT4T0^pK@C)eYHZC0SfApEw+B@(|Xs85L_gWqH|Yr;+NU_Pbge!mC7xZ7F} zp%HP612kTJu|iRWAme84Ym#nKx(|~LX$Q+@tKmE;Gt;11ebK_*Ci0dY8Dh&K?WV;t zUZ13qOZO<@edo9(O}RNnp6O#da=g} z-9iUyZ(==vd*%D8`L+Fm0+k_%(N3~K*wpp^KbSz`=e*HVB{`&P@b|Emjw?qGD# zQpqLa$LB-Azghs4bs@riH6x@>yj@ez?y$g&NYl2$FYpgl`v*?ySCJ&UqC)@Ox&0)+ zk}G~iCZGS|PZDIhdXfGZz(30O_Z!AOmIP7nJa%4-XfFw(>1S_GG$n9*0~yL|T_ay6 zKc#kD`u;WYs{Y-wz231V15m@UpX4_?7m~R*P5j=3csKE7-Gg>vx1K}!=}~?&Z+WlN zCMxd&bI%2QY<+0cD3zq&*CvvNXi!w{@nzZ=NSSA^h?7$cCAWi*szj2l)gtQ~SwD$y z#0(@`cOOQp**sIjpv0q-`n1V{WJBNAbktB8%5eB0lp*Lc~_ zFr!8N^V6UII=M|Bb?w+yo1Z?(l;6J0c-3+w>b?I;rn!DbGf{c+%w-3c8^@4vbwe@R z#qJG{0$mW$uL9fWoH?8`BcqUI8ugj_dW#dj7uxVF)UNH+${ipS4HqY>VeEO5s~)0` zU`$9Amzy95r$yv!gG>9#M%bJ+af8wB$>55Si|z4@n^7*`eO2#6*VSk)kHbH;m|-|) zqgNMzHdE7%t;~S+b&zzdbMkz9#UN~u_UY>&brk?s_{RL^I8}y}Is}yA61nUvj7~EY z_{6%jeb6erZPvi*KpMA*n1^60ig}&SG&j-Je0xTf!#xg3sFU8Dgl8-EqDu*F66zg5 z8qwacuq$K3vLa6dp0i*P!#i>GS7PmfHsMWII=2UMS|=r|G4U_;<$9TJ!@k`XW;ikM z8~d#Vcp~V8qmllsSa2mrW7ctFOK4IK{5o75s4R3N8pX9N`#`8!C9^RQI~9-<0j2NN z?Ynl(JWK`v;RL+&T_Qe_t?FBmK&G3VW5MccZHkKlF!viHjr~{JMxWA7+E(m!55m_O zswq!JyqYnXma$tW1jr6S2FXh;o(A!&9hGjQiKV$289K&>lU_YyM3BT(@6k=iO$!IZ z-37J_9o%%%%LY@R&JwSyG#lP3ffuAcgIDVoz;@VF0`2w>15$v3t#KfDE^upbPfTJg zfnLP9e)F3L`FcRVkpSaSAZ28M90N|?9dX3kqs{D?ip0r!@Kiyhpd+yFM2GotQo`2- zvVt)07$^04Wk~uAWczb#_0sluBzQAQGeF2pm^_ggCtT=+|(*Xi-$vI2a?( z*kzt*Flv<#GV6%SE-QNRwmLvMK=p#qG{fnfB;8jHH(T8A#w)92p-y ztk!hlz$t@%v9~xu$ zAIPB?O$1x<(9l*#rR@9LPp+$3&|%e?xpi3=)@Z`kk~iztWY$2Md_MRy;Vaa!WMiqQ z1^$y$_T5{6T?!u_v3q6YkN|yR669AT+Me{c^6|%wIDfl(_pKXfMzlhK!`O0kdjTjOxp0v@&r?5A=+3agN2q%Y=gWtoS zFBJ}V>}Q0kr@kFFl3f}_v|>iM1naj3#v-R9*VkL)skAuW_lGfEbomsHz4Tk(+Fwzd zG1=L&4)#OjR}R|JQ7X_SSB1or0xdyVpy{kM_yOpH9U`Bj*Ii*kAfVX_aG@vp!N$2D z_Tx7*v7>5JH?}za)xcNjb)T^0=r~z8pzrARd$eckhQ5Wok8A+?0En3jYITxE`2&}& zMw8PB1NqV5ItRRY%Tb3c%>FY@4*6>3uVY&wFN8E^dwCGqXZvj%T8v)(UZ|E!>`p(A z?{2v2&ehpivub|Dy4w)zM({<2#bAn#gu%wydVX#}bBvLF?sZQrA3v~6VRBZ$mOnuy z`J`RDAcce;EUxgM#9RNOZt00DgHD)09KoEh@%xCmD)M=+{L3C^!)%W@9huzo;{0SM zKW5|;%Ae&xk;#!P-rcrkZGYL-d3Mi<{XRkfL5=fM5($OXu-$aU-R5{B>^iXKw4A;qkQ+u}uxdB+J_4o^AWJ?h zWO7IyIq6f6C@G?U7s*VBnN1~jb9>l2Bq~Y)(eVr3kcF$@<+$wb$s(CxQ!uQ5NS>s2 zslY$#BpI`~n~If{!pLKQ${tudCHOZ>C;IXfLz{p$nAU{>KoX45!kT(zrFhl%tvvb# zQUL~Lg6>U?*kwSIqD8dL59K6A?n;76pjD8BdsZHb^}GFK#y=oO zC@+WY`kgoZ(M|I`Px{}k4{J$iP2GsNR)Bcb^^pK#jLbay-HQ8`fLbJ_sX!hehqQUb zjb6y>YK(-Cs4vBr8)Z~L23HuLm{O0`Qv{p|#1zJdVp5!AW?{mIvp9NcY3h}T3RSlL zG9sLtK@uS+qA%?VyRWMSsxtXGUn8+MTY`|TILj1wptiVk?Ago9uSIRdn*QcoZy~ui zb!g3M1aOXmwV}=)hev}t3$BFmgKbY)F}aEl7=)Y$H=EsDjnvi@R~hE=Cx@0@Dx?o7 zflf%Ck)hN%`&LVZ02z&H;a71t3(Lee7TZ-e5!tGY(xJ^IB3nl!_GuVZ>AsN}oRneT zpibR(mHcAS(+7^gGDqugo%_8q=$h6MJ2V2}7jq%)^nM&Ep`ob}Bg7GaIKpU@S5-@T z=K>Jf7_g5y^ShE@ghY+* z#%}Dk22leIU8eB*~gdYHSwTVU< zz?@)>dA@#Qm8em=^id*LM#dz%zVH}UooKrx$a&6f4*4dzI&V9y^BIlS(X9`GK&4y(yR`^4ic&Fw&MK0LEnJbU`iI>@6p3KVan~>V4ZY zzIM(K;_wk;4@n#z6H3)_`q{`6y|vm-%CDSsTximvb`Eqk7pTKVFp_w_Os41Be>+%c!QPi^Eep@U)d%?fP!5V7|b8 zrLqqWKwbU62_x~B3nslB@lw-);YP{k2K!S~(NVzVx@qXe;Mt)A{p)Um7Xpm1O5^OI?wWhsM+VbYiYx)O)fPRTN+)32MkBTGCe&@ZKJz zn^Vy3gFOis7o&S2TJx4AwVCgb#Zk_ZGXdzheCsS<$S;;O((`H;E#Ueo21M3`d-`;j zK>sTr=!Zz4nDuaPv!h7jfE0<%3tre*M+?yR!@l%;Xn|<|&6m_S`X(g|sQWE{x1S25Dq(NJ5MMu+%#CCJnM_3Kz@LBfJQ*rBe zR!!M=w}#!yFWe~AIaxsN`n>uhe}eT7)F&HS5izz%B4?Nb2?N-BzmBDr(cbT^wHn{O zHG4X}`fCo!50POu)MIWCBj2$~;+xAA$aep5k?)kIa)fsbv*bSnu*S=z(U3X^d;;{B}tJ#jIzy7frkiBprJ49xQTVC1JJ$KIxd2GfnzPC#xn-B4^+98JhnZ~7Ym z7%!apNjSwP=0KN8OZ`|uK|orWRp%oYWUaK2Rz&3v^$uUx6zBjHsAB+VHP2k^3Eh{(iQKu0SVt{egb(YVp z-mO4+@AsazvP=G+APsgTySR$nD7gxG zI(Y9jUCG0dkn+$uB``d!)d=t8xlNEyVlRy!ck32Q{1tV)3?oD~`{wZ-Q4iFP z=ez)^q|ec7I2oQ)c6v z`J9q25Xy9^YOk(JE%Uederr=_jR4k`v+X?()`F$Lr`X; z?|a~b@#J+wRl5KgH3ZBm1B5-QN$Cw@o#3*Z%*(4EJiFEIzQKbbj}Zt)F=MLVGhMz) z6w`b$*bV?aQMfpk4fBW>zXn(_20(L`H6x$`K$Zj!M#%AJ7nx)7)e+GMZGEG8=kW{m3va zEl^9y`BwujvaH)u`NV|H5NFOT=9dv)DYf&BkEeR@2ez=Y%fkr}r2g%q3@sNr6Y%fTN8}xsQPn_ZkL7^+Tb=yBCGkV{{ zaFY~o@B)9YmmW?}I%hMWQ(PD-h(Z=Mu5ruGmdJ#i=?3-d`?N6l)10L{>8HoUm7v;65HtQ_}RI5o83un7ni=}(A9 zG)J*u>WT|Szrqr+(!73i4K4Sb=arGpW`F=)*8?b75q%P`r#<0!^abeVws8beo~sru z=EwG*CL4d<2T_eaf>Kqrlj7wg#e3ex_IoKIo@bT|Fu>E|fGgwIp~VIs4^HLK;Q;mQ zMMNb6NpFR3-E7W=fW-!N+KDyWxe$5Ap+Nw9zl0C4qz98XLZ9XK);eIUoQ~Pr%OTlr zGUJ8nH{{#Yg=5HFq3fZ$S<5gaK{l5T3?1H~s);*K8tg`tjOb87HdRp6P+N3N zYJ>pIXoGYe)CdnX@MD)!LyP7xnkLO~YVGN2o=X!OiMuR(#BG0cAIL*WDz@h8KLHBJ z&sj@kpv-(%W)FaYM{loPOXkk1B+RZ<4rljQ00L0YzT(aW2=<=J5C}26s_&5WQ-c{hv8{u&Sg4rb>4X2WK zUr{wJO37N=Y>rejWDSYWz8qjaCEg!Zf$zUm8x6^_+YuLyvu;e>V!O*mSMKgt7;!3cMWa zkCsP_+*;^h8L9gFj~SY~M(qGIyPBYukn7kO*JWH|EA}zs92=OI+D5cU_4Y4W;Oo-m zDoi!->O#MS=5J9V8=ue&=_MwgH(_jt@z8G9CE&N@MAzRo_bMVTO}$+oCau;WDa4qJD_OD$}5uQeqe*`-0mAQ z0Df(>I05#NZ~)|+AMPo1kG(Y5^}+iGQVld%oUSx;P=i#@?d1hR>509YJIe>H$HY}D z&02ni+)e`?Mv)FW!i@q-5QILu?qr?|Ze#^^sUma3FK=9@lH0=IZ8E-y!ms?6nhuhm zCI10d%qlj)FDYxuC$>TyLWA2t_zv)&FThUy5YPr5IK*G%K*YZ%M8i>d*Y9miKA1o? z5a~j_LXajn2|=A?tjzZu55M1ubgK$ZG7C{n^08Fw75Hy|kzXiH-uSko5%GI@bT4_6 zqA@|tP<{^o714X?{F~bV&AP=@gCR+!O$hNfi?|=dq;$%?_wDA6?;i%f9hRw~Z>f7ub zksv0NOZT@HT;WV6br&^i!!*6g6S%&29KVjICEKXaSwiKA`ng zZD(R&bV@i9a#Fn3BH|@GHRh=sV_6Ly12=Q;*{%TaFw&oGB>}t+5^7y@VUM;#PXQhW z$hiwDaPa1C1|=a(LGy=K(@ZPwO^SFuIXTslN#1f3Mka5gXGxNhXw0D)+6oX>TnW;kKaE@f5dIA zdr;*vQ(25V#!VIb5~us)3jJ+5Q>`pAwm2_ezZ9`;njwNGw+8k-7~x2}eT&Bm!C3gQ zPYIK|n~8yYHt#v1sS)i@%RutnYEBMeJ{>+|+m)oY1wAa&wufSvy;{me{YMRVXsJLb zHFDDy?T8aiIsDaROHRY*2Jg=2IHT=RuQ{fOIZtvr@N4o-nMXOXlwr-4Hi-@2(XrJ@ z4JLJR{rKNBjnDkuUxs2x%vuc)jaBZZ=5%yk2h*T z*kk_mhrDiA%(&*#&2hY`4@c+AH&J&kZ*2Of9#1jVlkf8PlZ|rBrOwejHICa)v$Vb9 z8n`2T*MO3ym%@(*Yxs?*3UdDCQQPmE4$xfdd$JZEeSMZsf80ha@*$OwGP+&ROb$Ow ziOhI$FipRj*a7jV;?d#x-A4bDn`qv2Y0gvSk}B198WD`ahqPs+Gy)YW?wyto5rKrY2+o9%D4``R-S}KtAW~ z7z^rAOJFZ9pmQ6b)pE~{dL*DDZ>zTS+z?);L^D6PGxZnkSSFm*86tfZW=q;6aE>+~(7oX}o-=fW<^T?YEW8Tfui3UvzpsX|^(05{4)Z+sk=$ ze15l(6F+I;^chKSwE_OrppO;R75~(}A!jWaZ(hudTE!uWGlihA<+&d=tg=E6wjkVh zX7T3WJzYABwaC=Vu>?HXte-=98N!OK6Fi z9`X#?49l#H&3((7K;?NW*>+YWI{K>(_f|q~NFIw~agSz%6WJDhJr)PDup4 zH{bAkPZrs>uLuLa_vcdqSMn^$aBa!$-FT_%gCk8J!TTP%65y@^ye!k1G{U)3;fy+- zC-f1$-+fDqQXM1NP7nP?%UWlmY>5-FU>=X}OmBEN+up~+$ajcvw>o?pC~`k|oVJJJ zuHp00&wS_XI&gQZkuQO>`t+O~M^mCY@GlR3juRUzMR@$8IU+yGneiY(ZPmFo*jk&L ztyJ@*mI)hb8mL=7=iwcpIl|pc2S7qPf{87AN<$txd_hgZfGOhQh){ZdyT z&tRg$ExA6byie!F{+oWt6bIi_QXxI{cx}ARH!UhgAuV0?uR;`FaZmL8>}`IS!Btwi zc1vJlx{ki~gbg{abS71uS`V%xag@aU##F(HFyd`F(N|g^E~ns3%Dd;rZ}#O&e!JWo zFys`u^PqpcX>vb63se!C3w8rvK}e%?9k1?8J$C!3`614>eK_#z?+!^7#>%JxMf=S7 z26fI;A;jX>!xiB%C)O%DWc=FcR-fmBuC3A@J}htrpT}%AchuC9ilH$6eD|st&Ln=D z!HXA@qq%nnJ+eBkdEu>{I2^gO`A*+7_p8Kt7hw*4+| z#C9khGdu6FXMf)nQkOpu{%x}$eCG@RyAwd%_ImVyy<8S8;$8pX@6*wnIYiRX;C#xE#h4?TD)?_$| zOTDnV*I~SpkOrAf#=b~>rG-c6X9kHm-Cjlr~VoHa)%E< zFEkINJat}C<64OG8r+qnY^TRp7HT~QPO9=7_&Le&XhCP!WZ zy;O7dSkL!pT}Ndj#NvCA=tV#7K)k7t61?p`GkTIUlZ74cqUB#W-tri; zZn6~gh)i}s>LE}3?RC2Z7^Nz5zOC$SJ;-s1)%-w&7D&etyPC$YGfi6=s*Lrsoj>UC zr(ASXtt$_%hz+QS9kaP74|4a#;5piU#-JeBN>xyZhp(f^QDx~pL9nWGA4fl#Dw11! zre{AOd~7AqZD#zEor(q}Q}pI1mXqR>nQ2R5pA(_O-*8QFNmTN*{Gn!Po2*7CGDh=+ z$&3-F?}1{_W0Cv2iGU@+6zvwDUOH2TRtIKKW3qWoSPa!Y)K_BH(hzo!Qsp$bA}kD# zZ?$_zqupqp(6xy33b}BuKlU;An12)DK56U=f3)^WLuMPB#GU!1bbDZYvej^E{<1F(Z2@iGrZ}qR8(q~)9r$w zPvl(H6#7l=lyX%0(^AO!#qR%nPj6{J$u)i^yQ)&Ju%sz%Jo z*Y!Zmwfs?gxtT`Bj7CF02n*f;C%gOdLiOzG=o~%T=Zxf-)IvGF{8nVVF&%)gkRTQw z*bf-7p>Rl#Z;;_U4c6RC)9uP>FKZy&WW2c4%YDw*7@_hjZSM5PS2)wVyJ0F8(1>u+ zigV=y`aT>|`y9%;A-r#6Ys$tq9PhY-m6$;NWb5Br7;&n=cye}qKcX7HLQ^v0#UJb^ z!I>WQ9(8{7)-^!6wbbpkLTPphN~z39TQj$8dWy@w|FZl}mGbYN3SiEy?O<6d^S*Ja z0ZQh}cjW!F?nFOuB7`*wEWUi1Xg3z5{+UvRu2Jv_@6M@YdsQhXnxLGzyH-DS)Dh}L zVakr_! z_<_QozvMmsXy=b8-3OvDQA5*Gj5N1b!ao%;k>caOQW=Y_Sp25jwUz0b>;PsLbnGO0 z>QsIt3NcHn12ajC+K;or-Yt7}!`PEW?rU9=RJ`3)=0S@f-Z~)${IcRVv*OR=H1|Z% zO;qqBdD=8slWK)82`;{n*FWj?n%`?n>H+E_%C4w+MJ0TbCd#LIgfjVDoN;QN7O*J? ztl6Z)UB4v$wr*E3(yw#ygaWY$0PEBjyrV5dJbf5~4MigSV?Q7+^Ue%N3&I4|dUvm0 zo{tm#DxC=f*W6>U6 zTbB03bNhVaedi>61^-wcd(_?(G6}8EGk%TExz8;`f;|=ZLgV&9o^ztC?DRml%b=8U zdd7bi${-=Ns_t+b2}i<^?)_xTZ&R8mONq!KeuZNSCXMm5Q&*+ZuY{?8FzNbG{HT_8 zlzs+K(EON@@Fb}p{}N;R4l5h(wN&VC?0Q$B*zf@_udXpE?ooTFQ`pz?2ot8e{J~e8 z-1(Q5ZnF*}ku?dcmjf*(4Mlt0I4%Ct%sub38c;Tvy(L#HrSNr>Y{7o|?PtabxUFw+#;Cku|lc%ulwr<}UuqOr~7pWLg)L*{E zd#iKm6vT@wa;{n36N-{#%#CjV=stf{z)39v;-BUJGY$?-=M*H%2s8LMT{5J*5MV8 z{S!w!aY>5lr!r)+V91S}9t zEq&&f^fhvvwPx*BiDq%>)L^1AvnQT$jX{bI&>J-`Iltyr?}%;|tq~%h_mjapr|(p1 zNivDW&KE~mFZ@6Cxsd`#w1v z&#jD3RnhHwT^0@=4C^t0Gfh)$iQ%|Yp5To$U~3z3QUDu$k5Tfa@R{atdnI;gbfU?Vl1Hg1 z-V$b((pYQX1-{bc?4u5gTo!r-To#$trcfQvZYy7z#@fms9 zF!2WI&K!>?2I}znDtb)YEt=xA*WU&eh?ZlLeupCWtPBM+V{Vs>R5!xSOn zQ}#V14U%CxjbPfkDA~B;3BT&EqA#9*7-1EDF^ueuV!&z}qQpy zUv2MRU;;{(-=K6+k4l!gGr5=tX`qkD2Gc?^kk)S9!2NzGMG(D0PSeKwc4tImJ9F6o zA`teXiA^eMcIZ^Z5xmpG+b~GD9myDI%6!@TaSwegD2?~Y?q!V5kOpT+iP}6UztCr{ z2jzoiTs*cB%N(C#MdLFQHLadLB)?UN2_{M*W?wsP+qXZ@LRQZ13~6k$3cdUBK|68< zHe5RTg&3{Ml;sGf5T933O}==Gr{f3Th0{&slYAuTs7mCrn4Y5P@K%TX#D!r!7=to@ z#{+B}N;hZ6YDhV)tQotoA39PfJF5Zv-%fv+P;@YW^yVp4B>otRCW7$Of1v2oCw)$E zARg+I#1KVRokQZ?J8sSEiVn`PQMFPwWloC`4G8gL>>D5*W$Snr3o*JCEtVeQ?0G^Q zab6qX@uR5d7wBLB%KodA3(akqSy%WagyxnUBlil~Lw!rT!b#{zd)+x%>rH??Qp~h4 zezM=1ifkn;tKCK4-i%w<4dF()qsePOUKL;HT>h*IjJZiCUAy>u0R1TJZHfJSER?s2 z$IjAqX#5!Lbo}54>x~%6`6;=6jAV_|Ts|jpb_Z|Apn$D$mF8zg|^Eso$Xj8^(s93h%_afP`j2ZiqbS82&8&x z53cREg&j6^>d?(Otkt*3j!$d9-W1#ni1KPvM9vz*^`Tst#}Ba1R#voX8TC6r7YoL z8`P(4f^3H&hdO3L@1QKQt9`;SExdLCtYSLY4y;)vQ^x;o-#S1Y57y^KQ(2eZ*oC;U zMc`hjF1+pC$5+9|tq(sd>SRpy>FIsbyWd%#UE|FefumXhTR#$t>`;<}+K@N<8jkhv z0gyoIoOhhAvkT4GBi|;+*-p)E>s=9uns@5vHF^P_a%0zsT229Q;x}bt69?tFo@cRQ zX^6TX%xbkqQv?1xj++|_uGwru-%+(P@O+&RP0tHvA-#t{LP5)@R|t{AHhEcv1e%}@g<3P0Allx*{f_U3U#JMk zXb4PF!7na-@N2Shj3qW$676e=a?-lz0+Z{2hsWn zmmAEhfk#dJz(OF!^DBKCtxJBkjOk@l;d@Uz0{QAhDxr&?EG0IsCCimYy%8@ZE zT+(Yp?TKqoy$}DlAG?n`0}E-F9nxABUpB|WY)xcGkjK_WMJmD3_jES8q0hwdJ#$^| zgsCL2JIY&8Fr7;4evQxqI|5?DET$NX3}~v_KWML*XjSKG4ZQe0w^o&@O|OE(UrsK#Y+#}6fB%?NvHZmq&W z4CCWXJe%pBv~l`jvhhpHfI1=S&AF3|YC$oeOiGp!c$r*%pwf2leP-S3z(JapZeEmB zH}rZ%eEbqA(e6q#rOFjk?mR$|?dyolfa39v71{U4o?G4ms`pNPP2YYxoR4^oiG#YY> z_Wa18Ff1s~5B@AE>?Gs5p7eyXj@#%-$`Q0G=o{37DI|aFR0Tcp%3A1Zu%o7Uz8e=t zBd^GeJ#Fic3yhnf$PnfF;91%>TFPYQyWl`LLng zR*M<-Mhc6RE&XqI3bcz7@OTsHMtp4+ZF&zdW;4^4`J;YQr!MrBETCD)SrL^nKLmyO zQ9r>;<6&kODU$oLv|D&BUJVk_3}4->^^GJG<**HQgl zNXG+I381t@p|ogat?h1~6U^l*ZE}hfuo~U>SO*>gq&Xmxj0F{yJ4=;yLO=c4aOblW zm}(i=|2_|b@0_;b`Z-e{0|G(k0DI6oIpO=m8jJ)z(iP`GfwTRyjwH77#L%j21?yVh z47P-|MijF8U8Yt_Jr1ueBkefOG^#o{%=wcy&-GPd632XL=xF(L>osep-qcp(qW2#> z+uvr>-?|T4>A1~0hlG|=gxDa106OEVO6#r5m91U6?rmtM!gYfdsD-i zV@+UjrO{GXZ1}Y{Fmr@y`iodo!9-3KPpWdF>HTX|pOfl!3w26-kaO|z3+uCEg9=p$ zVVgN(+*{q4INJu^pNLTHn6od+0{`Fj|M++P*C9>*a6lNlV+o;sf?!tB3bfjci$QP~ z94A_z=?k(-=IdU1GU=?2iUGa!o^2<4tjrMe9#LdJv6cB>UF^3opi?vIx6*&oD**7e zC8;N6iZF?1ir9)@xB+m`@BE?@0hh7uRvxvy$?>n!{7A#>Xr)FNEE-YITv;FT;Kt{i z#qWBc9+9#@SLaMV?57?a;nHbaHJTBfgp@X#=!Rk5Fv@K=quviAon&?3;G>AWTZ1%a zhQFNt02*PDoZ<=L5s5>M%W6qGv_^X6H7q+@AuNMCRf1$hQJ_{dg{;~OS?1Jz5L{}j zwb(EvcKP;kaCgR4TMrFKwn7xm=kvYN942_<{6xWTM!fm)ahEIOW{a#!MT3*8ndGAR zCoDMY7)|TGeJ;m!lEZX26i-2W_9@B00#;%WH}!MeJ>9%{BSgBKqHLtMm?oqaiTfN( zfdSyuxr9I`?@#!C<-N0viV@oDc6LPtj%h?0Su5pQt z;Dd2IJG{46OpF&d&_LXR8irdd?Flcoeyw?Ga zKe(p(SSVo83k;&OZ!nN>-{SIH-iE{F1r$bXnoZyQJpjE_L{MOAmw>yDL#LeJbwOV}f^zitAXy5z(Ol2PnshQ8Y9eb(AEb+)fK`fMo*z z?Wl8tJ%$uhvBkFAx^9M+Ya8?5DsDVsU%a?|4pE zhl4!{i=R_9Sb+O}9j}mKn%!)|m*w){+ngEPLVB7lp$C14pT#_F2&NJwy1(oA`(umx z^XZv~ahq^CEQ4AoqsS9Oy65eU;Dl?qFz38Gdmet*aF4f9uQPJ1fToAHNzE5t&JNca zfiqoRaJ(tGa*26Pxz=Seji+eymp9%mS>{2h8}+sUES}3bSXJOO7^PcJ4oDo9Ocl*Y@F7oC)4xt|sWz=g0=nX>}10BNr`6zD_8Sdy&LmFU%MnU(dv|1fNo(S}ulZ~ye_gl3 z!~f5wX#7L|QE#)-8BleF3V%A6oV+T##G@=>ncg{S5S1FZRjMSa86JCI%w4McH*L%% z-~AO)N^|a$rO+i_dGzdYM#$F74p9=3#abVq^5icS=;=5AVk44a%}R-jeh3|$y2 z59xS7T?TvY?JHGM2XA$@D)?;}B6fG-odpjPbH&869%H6Q5;Cs+ZQtMG zZLy-Sz`M2Va&tOlFT+ObaNsI+THxfuhBc1xwL64cJ_EJ?f#rom)s~gTeQ(S05RwP) zVnMce(gE;yzcr2wlkUI-teT0?EYr~Qv)J{Kd$8K~p5=POhqG~8^d33T{nLC^2(W~i zF$NM^?cU}xXk6H*>O_@t&u*>>jqSD5hnJ2+9U-m=A3%7wn651AguBp57~3ID{j1KQn-kaUCCjaHioR4RT-aN{+Ow49&DcC` z>sZ^kd|_KQ5xd)j!M9C}$gV>cee2g050Xr&8gcO7scJo+Dx6}4}Dd;shKdca^4kHBP3Q9 zbsu%LqUrH`w>$9CM9O*Ur&!dm^6ssaaI!8xQWyHro$!V5#fqQ7*!{gxXzT+)vu9No zBL?^MLb=1yvsr_aXEEFTS?dt(cn5H8_TEvY4seqAu@55~?xuvMD{ApTduZ#m2O#k{ zf$Zd_s4QOo!3hoO-3yBrEU4P3HyAItoi`<+EbGgd1}9;9=oSWFiJERM&oZfO?b>*g zcr!0q?tb(J+2-c9XLaH+Ac=T4Yf^UcZZ{J2SQ=+wZx1j_ahp&UliWl-WQkfeshGi!!PB%tTk`vE^lpca>ya%d1CSQ{S z86my6Fu)_Ay}e>3%fu*WrAX(;a8kE- zP>)DJ>-C2}V-o64p_(a3p6SPh9bBu3bPgP4en}3zE3#9)e@E{ zA_0Y-o=ur_x*Mqo82;cZW2gu^W}X)k`cfX0cFEWEcTLl!DlB{GzbPxEGF4n&-5sPc z8RhQjB^;i`O+Se6GV{<{6hZwV-Q!Fl6bn?1tsw5v_WuHA7zY;qF`Dh!<46K;!Iq}= zB}u;vfE`wsnKtixsT5Q9Y4DI=-PMAS_Hm*5dPHxVK`-qE6q|X+Vz(xmg=6CggBqQN-F?Opsex5R%2G=W~o+b6C^{%0YP%^-bllsl!vaNsl``wJOn$ z;MgLm%g4e_%sh%i25I-Qx|!H}&Xo^i17Lv1SVl{MLRSD&v8NRIwLHJ=%Y&hVy>Q|8 zzTbTZ_Uq3czyfY^1l*BQzhH6ufCT}2;|)4`RRGz$3fMBKGSOol-rj30&Kmd<8wni4 z8r_I%tDfM^8(v@3^-VuBkJbON7S(M^eMPBis*7eIsnctd|~bjF-QkPftR<&xz#R2bS_7NkbOKcrzse8G^v zd-3J|(gP-|)_I-%3ryGroN-cLLJFyh5c3Iz*a`_-hhs{;i>6IKv!1T+uh96UkB{nd zt}0=vWZxHVDZO2^dQkvT?o=P^ntCAh?{JSx5_1#ts+*>K%jZ|Wr!`V=DL$xpC$B3x z9_O@_I44wIA?F?zqL~vs&^C8xnj?jUf@KQ+XzU<&zJ2=fb=(9_~oUuYeMg6 zGgVjPXcw(4wD~*Lx|yd{XGq_FAN;B=pmsP9F?^q5LF6fVKw#F6VQEt%C9$@$Tj8PZ zaW}FFhK)`CqPnP;&O*>9YX`8W4gGkVi~@6U1|R$R`O5)E_G?ullRX&t(M4&&JP*p@ z|IGp zlcP(ZJD>~m?$TfKiVz-s=Wp_gzI@R=pa?v0D%mN&yZ5~ss-tA1UTv21J2gBZB#f3x zH~?15D_NMETZ_}p?JgZ3$^!%Vd&4zj=;&=`(Yr=?2rOvfEc2P^|KqGWz27C-vv-eM zLsH*q0$DRnK7ma{CII^2v^cNbmOYr_u(+q@cjeV+%qz(tQVJguWU8hwAanuFD?_OF zyQ%c@BWXd3lWAkJ-`KE#9J!M0D^^4WQ})bJ(PYTfG&@JjIWB`8NJ3cMF4c`)a1^N4I*<7-F?=dNBFUSL(`y6!g7nm znIq{RS8pZwy7njo{r*+P(YUL^AE(33h<`^|2OwNjLR^Z~Qf5Xn55wCDaWt_kM1m4E z3=7GUMM<7X)@NBM8xSe>2TrO@RqKWHUX3BX-QgyDlzikTx*sB23yhzCk`Vy%OH(t| z{~-Eb)&41SnsO}FjYT@j=7+FbKXhLGE9?*FT^L)aR(N@aNEIHt;fZC62*#fN6&t4# zGLZMo_aO0=aE-WhW8CoGak>rgFxh!2_f>tQL7jPHg@X@6^3x*0dudWGIXmPHY<>0J zQ0`n7d~%*`waEFh)t8m33z6%JOmXQAw|cUommsYcM!jZ6y(J+pFfLz;u%JeQKd5eW zcrQ@=MLFt-SE)=s_88O-YiyS!&os@IY9d@iki&f&XKGf#nLr}#$|g4vkl9C^JAh|U zVLZPuPm?I%_BP66NFD$39_qs*5kLdr0-|pt>^-Tcb?O)s)FXGvs@;RVg9WPeYtzzu z!x_*53kJ06{j7UxdXf0Bw93AD_WWWOB!S0{CLO6Sv?{0>@1-P3vNzWE3+B&3|Z0+v$l zi%3cW(WWcL*}9KB-1iO;KJ-)VLS@#+=XmxW3@(08&Wkbd4IwQM6D6}=M9aLnYuSeb zj{WlTDqMD4(PuAQfg|ZpR1x`IU#|8Xgkkqkf4J@R>bs^Ug^vj=<(d_8Vl38X%FLFO zqi-y^C}YU_QGcVTsvRaCz3%BBH@44nXCv3uk&D#RR*-(wB|5r(>{g=1m7cN1ksyDn zu*9IT0^HI0@6uNb6wUS0GmAv5&Bssmlm99V%f6wf60K2mRlP7|C@{5B>A{Zuq%7b^ zFUsaiWk8yqHN1F2j?u&XUadPT#Z$mna|HVU7oDw66j2o$z-#%fp#UIXKto}uBQ^F4 zG`_?Eafzs>m>RMSK!D)5HY+h#lI@<^efVCYtBiv$B9bvCa; z5A%R&%r8N)2pqZQy#(^dT9@KZZPjznQU8qlfuf1#MI+d&E4cH`)KROm{@%2W$)w{) z#gzP_8J`t9{!u4Bo%Qzklm=6SZ0`w)EZCvFanGrwoBB>Qy-3ODW=vhJ5p7O~5B5sA;&97yVWz;BfTXdzPckVpFasfO64`NQL+S%&6NN-AUAav>~T+ z_kHn`^f`q|xPmA_N5HKIp_3d+%LU0Yco9kD;i*oPK?r@N&D%uN_*fy|TBrGw$o0ae zu0_azh;|!Tq)eFg`Q@PZt1&zJWWAjiFQKL;FQH>!^I=mv!0gA7sxG#MO~Kjh;bfIV z?q>fEj-d=Vq^xBG6d|S|)8ce@SbEEoQCn-{Q!MA72(g3-1TyERK$a#hL!^bxO^<%m z6NOYthI&l%X9nXB;`KOygU7di0Qu4oMQiL0>}_ozdt@$fN>;NT7zOpnhE{kUoak8F z0is1odvO^-3ZY4H@@7&Dv$3*(VSe&vGSUH3(|iU%B@Xd;0RoM3_1~ZN*}fAh)*!d% zN0#IjQ{qaFwh)(7-)l8tc5gF~^VVw{t_jZXO~XoVUaK02t(W_ns$NIa;s}OH4)t$} zym*}O&l+W%nF`=M$L%ei$pT_D=XrC}^Oi6VBem9}XOHDK6q`l88lUOw2jc@J3h2QD z4Lr~x{N00MJAcPRjkmT5KI!J%pAH5>w_98nUyUW?l3U{|e?Y8(zZftViUCjKO#TGn z^oPWLdU+|YRw&yYOPAs)_946-@X2SHg|)`JUIG#Drlf$<~u-2tnw7m&LYU*A5*8WwDBp*O(M)AIQqsKARR!LTe zgTX-5sO`BpSbv)Uihl`&Qh-cvV-B=gAAcJE`bU0x3#|e9OmXr|-PIf5j{uo`Gf6G# zczH?d&3ncUQ{E$nd7W0W=*yBctB9s>IqnS?=FBeT>Q%EddrAmfusY`oudF)ITq9!sj<_rar3ZcSh+F-s{4W%b#3QW{wq!V&_n@a3Ho1XcE4ajT;tR7`b7QO*8zoRNVB$fsQDO0;NC{iyCdKAv{}lhWB5hheaM)JM8~|F$=f2Yn>ouvSg1;3&6h#V4K4Sr%Wk~Xp;QX-cZ z2US4#Q_h(7FDwje!bUZ`M>Whi^scu}UFW?~!3azAx8rRSr62`>Bx z{iBsx=+D^=nWR&-UjK7HoP>Cz)oXUX1H{40`0XNOg8(RAU*lgTmx<(?j(`k!wPqiZ zHc+(TNX~kcx&J4^vvQGZ@z?3WPJNfBeHk;vPR*NH23?8aJ6KB*)G<+gxGB%wcgrHW z4JJbQsvG*G>4jY2RMBbVKcR`8FJT*h$~wtv+B(Td7XMmH|E)i~oHXtCOh`nL$~-Z3 z7q7dqs=%bWfFF>->?1j1a0DMGOgY(|5#8X#PC|QQfd}aW(JC#qKoVJsAY#DcsDSkBWe_waIO_)Ei<%0g8fG-po=_Si zo6E4E!mk^En!w;jUj7yfdf<80IGQ^WbHk;0Lj3x=T<^5@{_l0J#-Tp}o64X1>c@G? z=XHa}G`17d-r=l^WVMBhi;iY&^G95H zHbB65J8egpv(@{Ii-vwpI%_WZ0Wzm(+xst3$1;KSm~yl?^XCJ9PWa52p~n{>+QuI9 zcrxQb%QFo&ez)mEArZH&0Y#1GR;~p^M2|l6<2^37{?Mte+Le7pT)}%!r$?tDu5GZ? zqMjf3b?y#tMO6k*xO}g}M}L0j7`FSy;#N(y@nu?3eC1rEZRAx=YR5<5b}1_?{;gQ! zR6uGL(TH^JJ-5bM4#pl`60ef8gVLj(Mgt^{$EbInu*VUsb9jLJCpcV9WRCPDbn=>7N zSp28kFrRRqY#bo64T3UzY82;#gNj$m1i0!(v6_mFG@Vm-JasKxVEUD>Z2&9kEQ4kW z5c;_6!DU_EyD0>HIdg;QB`cmbje8mG84;H*-+Bq4y2&(HRD{lxUI_Y-?AFmho{o4%n&rJU#(3G#>1&cj6bI@x z#!b9%2+8nM5|#11=!nY!3?jgndiY7gsF$iLQJQcbKc+en7|&8=dD}z@#FevK8K!T` zNh}DJOLPaPHv?WlP$t*%o$Y)N9QPNZ6H;b?3$^CdOgy$U9@7CF&mUb&vi0ASH;I}E zveS>HnfC^^p=YuoGC zH9<;OAkUDb|7oW-$hc>c_5U5(qBXYmCFD7x@9q>^Tm_O4ZF|22=AAYm9CoGv>@gNN zwe$?0dY}zlFVDfKw|_J^VP)5h;nLIn(i%7k)OGZ$1T!CymzuEb*Ss>To%H=pa8AfW zfm36QqlGXAn5W<_7m>Q_N$=+Jdcb5;a4#+dco_;n^{Gk(qk=;c5c{y6&y3(txfavG zfW-*<8F};g{RXnKOOc@47V7%Aw{ruj_mO6~!13r2tZPRG1<+CGHy@y3P#AMG@Eo1` zj4Li7E|F#DfM)R?O=REj3eI$b9J`i5X<&AMkT75sIe@wF;h+xza8baOl4bQZHKR8@ zzibLrGraZlcp8q)8}L&l<+bY3uU50i*iLmF3ksHe&geg>cqm{9fN>Bks$^4<;|YGP zBRK6dMbNEhlt4#Sh|M@{A%_6Sz7n_*+&y2f*VhVkUfZrkoBjSibMYS-0GB7)GHh^^ zHa$E56prYnjqdwytf6-;q*R9}xHYD$cZMX)pr=}uOdjdxpMccM&dSx_leocOvP_H7 zEm_WFN$au3Hf4?uHI2s-9qa&6AiK?mQCt|$=vI#>CJ?rGBD|Tt%RQ{+E~l8^HNbgI z!kkvBe0+iN#=u~=ucR#QNiFCTQv&AfGCnXU-Pd;8lZDewN z_-QnbHz$yIR|SmRj7pt5zg{pzjq2V$ zG#3pUUliw}izXxoCL|b5_V*u*g^I09J&)(ecow&{^7`?C=Y<-qCuW3K_&lxUjo%S&KF?fAQH=T4v->+~GfG4?FQV{0%*_2)=|oyxp@5nOsbqbIv~}rpW^` zJw6fDxw4_H+^af2G%Ow{{|$x=1H^L;FoFBcisSAGoN+Z5=f@C8aPrt948s@jXm#j2 zcNYPiJyD&;^dIz90+faPtaCb7lu7|kd_l>C=J1asyFHl8f61G%}r)ft#)B4 z7R+fIxIP9F44p^&{A!54(jlwkTAlg%i?B%Xz-(lcX|dbgBfFnm z$XV7AX{s_31w4)F#6~HPR6ih57!o9>$P9GKpEIgk-~LuIaWzJOdEHt7CA6@L`I}Ij=#YQnPsmVpPi>43}lI!yuG2r z)+vtR2xqxN%hg32&8jUMHz=uIxKG-Co{N){}{mUMF?g%a# zHKk%jE8Z|}%c!|?Ru^<>o%2Q*YcXwlZSxfvff)sI*uW|Alvm9EImI^=vEF^8h%B#h z6OKH?{WR`FeNs-jw%ci1`o=$^c=2*@b5mG`V%-uW*I?XvAWInI-z||YlVJz#^N)@e z#BgV~TWROnK|HDLpf6*~S5vL^7yN7~Lu^v0By?L93qcWe$(1?a9;L99S0eJ zC-lWnOx5N!MGfIh{4B*soLK)W`BH4_GmIvlQZELkWxL>)a(vmQL9+3tI^r?jA*y6e z5GSbJW20;S>HSkvSSh}D`x87a5D{}Djl-86#Sj)0QiG&1kIfV?mplP7=G~RE7quu&opP^*65-nhTArkfmtUQ$miyIEN2sTh zY#%7$VeYn9vN@*#eJKyVd<|Ilzsd_Cf`ej3BHEmvUi?%%(9$lgV-n)T_m{qYvN&Av zK)#bj9#N^1YseZk?)l$%t`ZPSM?v=JLOgStzP|#3iXZApDeyqdDTU^ zGHl%BL*dR@7A&%miI0Qe*^yKy~+XU`<@bE(3 zWH5_k>QE+E_}CReHhJEdc`eVI)5cNuf zB&=dn(^6sLL2S5hk&WFO!*rTA*jZo!b4&*nS?GxNgmdR`eqZBoqHVPDqKKPCz?%}E zz|qj`y!lS$CV$NxTi6CqEhOPKej7YLuv#W|xbQ24jWvbqsQt-$F!5%6jrs&1FU`Eb z$NX!`w&y~SKK3{W{|lL=^3Ib~9EGik`xDJ+Y!1v_ikB8k8hdg1BsTqWtV^ta}*#v{Z{^=?9zemO(TI0@G>QouYpKW{OYgqB9ER9usoerr2 z$)#K1i!L@v-3VvHO;6!wTmPWb6qX4GzBL4#vQs$p$s-BijdPgU>#MlPaIZ*}kUV`4#q%aD8@$LJul zfA2xiiBE&1S=o*O4>&!cy^FI2hzCO(gwLVl_F(JQ0#tJf>`#)!RGxK3h;)w)0b}xz zm@M%LGvvqNMYl%3Ry)LVKu;W9h}gPD{ocMRM>xN+3c{Ggdh(-e)Cg#&f^H5)#VUoy zZjsl~CzS+P+;Hx*k=0_{NiM~f`I0Duju9vmO!jNW@{QADd=Wg*T^9Bk4Jo7X*s8*Z zwsF28*MyECu*1SM#6(C~N01es21$q5;0_PUC1tALN!8YMf4!vPd+y7b+u?9dgIeOZ z{;>_q@9h7?@{zwX{`yRO^{dU0NRi*elL;rQR&Agd)Mc8-ko}fnWTt{~lI#{U3@SZV zZoWRjqYav#qSgc{Z_r19_3_lRGamEYh8~Um-PKOgUQu4Z8wYJ#&y56~7{=E!KwiDS zPmL<;85g<3ne%lQn@^S(j(yY1Xw#t}5myb``#|6yv+%p&h$^9jSI_X%E zWRcc%cOsb1FBmn&fW7*30;gIU?ChKeY@gykO+<1ZQ=e}7UsAO7StT6#`aW z*#_WQA=2TBm(i_hHsZ4SSbWFs? zsW|}?A;F2L><`r8g&hJUHt;QCc_k08@y)=WaSMx+M##y^i1<45pHS((6AJ zNBv*j(vdLuCYkr>UJ*@PY;b@}TdV-ySNhYm6u)yOa2QQ8Wet^dE6oKtJJa}zOQbbf zGP}uO8I2~?gi~YI*ofuuOeI4-I&SLkdVPcM>92Ms-GZw)%r8y-_gHB^qIpp^H(gND zUv3cn#>*f3W|heP>)}^>jd0q85QST*i@#2mqse-Ud<6WP`M(a6au8~SWDwsD9TNE} z1Ad-(<{G%aTWJS8Kk3<|7L_`c`WM!c4M~6I-MhBW^HyK8)T^imdUW+_N2R=3xl;wF z7J8w)aap~hiWmMa^m)R6vjF83k^efQ!RKE@tOLB;piP83=_kCpOhqPN8nkJzMGQ&& z7}YAl>z*GmblbIc46lkucfOf=cu{8TN)s3pV3|hw4c;@P3Y`WrnQaPGClS!NaXN2#XV1r3Nd`5d#?SKT1EsdE zI67X>sdIIfr7diFAHUj69MEbp@BQM`AXY38 zB)f~RHgZM_4$DsNcrK1s>&3hVhgpw$OmXAqt{hm#jnPBJcRx^$Ox&mTrPQ6SGpM1~ z7f*?J|K2Ry#!YVuL2sLrfcFCB418ti{Zi~;o6XR1=S)I&woQ3uVjBoWg9^qkuqoHA z^W){6zP+$-wvM6 zeD6M{NI%k|{KZC;_JnVjzWmL`seXN?A_>n^a{@W~fi->W?#nq;r3Q&gGUeG_mUPOO z*4^jkCWAWFy>ASlHx(V_)4!E0IU6P?y0FpR-5SS8-MIU;_&OPa934J;ocOEfoq;z# zhIZ=#EBB^R!QVbN?vhwAAb1T|+Ky+`?BV&`7z2JfiFPF0WGG{;DH}2=B360W6avhc zKLL)FfYFBMgSd=SL$R%VpWE|39P*bbpYKl3-%T8-W^E2*Y}&H-e}B`plTTkx;PyrJ zX6U+PztoU@_|k5e_8wIzM~FzcMOMYnbu7LkuimD~iGWdWg{IF;XH>4R%7#kyitfT{ z&+sB1hL5NR-gvFJ!?Eetuw7xvMn4*#`%K(`>qMTH;+vu^cMV%PyYBUlY+p96>Y0@L z(*#94o{R?KTyL|9U2`1^7B$BmeJ!Q-0Mz3y6PUxB4Gz-H=-&IrG^=sF4R}0cXB4|+ zyVScL2GV6;_*q^PUg5#s6o`Fx=m^yMIQa?Hm{RpO7i9y#5oabJ(cDjHN- zR2C{F>6ycOQCjn1<_3N=iNp$a`hD_fMxLIu7Ep$mwWII~XCPjaMTQt71s1Q7P@kVg zE=x?rl$0Is;%P6&eFA4!pLw00*tW&|cxzgNWJ%O;3~SX=d)x-mIwrV^P2C`mNNjTr zX+-oLBmKc)ng~skLGy1mz!!Yo-_?gE!+2lMnBr6Fi`OZ95EaqDn5MueG0=U z^fkQ(=JWzv>N2kpiEU#jVw8c_(Iq*6vGsc~&teIu?k)xf-R4E_TVr5-LGmEq=e-uv zz#HOc(IP0t-v+>i?1t&FP2A=L&$=k{nekqYejBU#bfiGL08=fz;&y~zokt%%SxbssefZ%>HvO|XC+umG z(BEd@;FVa-#(#>In~=3B;UBa?enV>S*gi9p!KJQta*GJxU2|s@z47!B#oo6e{{Zez z;JdFFeC}iq)RpGs4hrOQyvmvPcOK88nfJgjDzby`>)S64`7ssD2ZcqV^y)x^ofN9t18Wmi)9z$^b@CoYQ)IiE2N5?w@+>7eWVU)-;6Zc}f*?Y*-) zZ!oWRV%Up$jv)cCdu7DAl#R~wGHJQDVTLx>0_F1cVB9gyweU;vI#6Z#{Nf&iMnPsw z{dnLndckfR9N^1}Vd~gtKLX$Y#meb}m)ng&pst5se;g18hxs6w5Flliaoevp8>?UwKG{+(xHp1J4vG>$y4I@fs5ms7xc0H1@&Sa&&Y3N|_acZEqOjEm758PN zV?PW@Y@_YNAw^bXv1_~ar<}M;Pr6;nZg&@l#{dPUXo@CdoV{7sdw3yH(eSjbDUF&q z(@Q>hUewJxpf6z0C1q#A2=jitqFFM(Y|64y_1ktE(f0jMth973#m2sWFnd`H_fuS- zlFq-$#1rOWk6CEkYbnL%y&9LsUkUdNCR6KQa!m>ORAM@4egn1be?~E;*Pgf^7h>q_9M$#WNvB1v^X+oko4_HUacV

    jx_Ry)!8|d-JebNGaGDW1#(O_I4hx;bM}V(| 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%0DMRcN%I3ej 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
    Ny@#;ub(G0pgS20!Drf=pqZi>HaJYFB*OTOOgj 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 o$Lu1h%`tl*DBQOSi6N%pAzVoxZZisnHkm&rr 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 Q-?^;%e=q5y%~uHm0L1YDc>n+a literal 0 HcmV?d00001 diff --git a/testdata_sarek/rd_tiny.csv b/testdata_sarek/rd_tiny.csv new file mode 100644 index 00000000..74505e48 --- /dev/null +++ b/testdata_sarek/rd_tiny.csv @@ -0,0 +1,12 @@ +sample,fastq_1,fastq_2 +1234N,testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz +9876T,testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz +9876T,testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz +9876T,testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz +9877R,testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz +9877R,testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz +9877R,testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/testdata_sarek/rd_tiny.csv.old b/testdata_sarek/rd_tiny.csv.old new file mode 100644 index 00000000..c53c0a3b --- /dev/null +++ b/testdata_sarek/rd_tiny.csv.old @@ -0,0 +1,14 @@ +sample,fastq_1,fastq_2 +1234N,//testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz +1234N,//testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz +1234N,//testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz +1234N,//testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz +1234N,//testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,//testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz +1234N,//testdata_sarek/dummy/normal/dummy_n_R1_xxx.fastq.gz,//testdata_sarek/dummy/normal/dummy_n_R2_xxx.fastq.gz +9876T,//testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz +9876T,//testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz +9876T,//testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz +9876T,//testdata_sarek/dummy/tumor/dummy_t_R1_xxx.fastq.gz,//testdata_sarek/dummy/tumor/dummy_t_R2_xxx.fastq.gz +9877R,//testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz +9877R,//testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz +9877R,//testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz,//testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/testdata_sarek/rd_tiny.csv~ b/testdata_sarek/rd_tiny.csv~ new file mode 100644 index 00000000..4127c094 --- /dev/null +++ b/testdata_sarek/rd_tiny.csv~ @@ -0,0 +1,14 @@ +sample,fastq_1,fastq_2 +1234N,testdata_sarek/normal/tiny_n_L001_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L001_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L002_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L002_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L004_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L004_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L007_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L007_R2_xxx.fastq.gz +1234N,testdata_sarek/normal/tiny_n_L008_R1_xxx.fastq.gz,testdata_sarek/normal/tiny_n_L008_R2_xxx.fastq.gz +1234N,testdata_sarek/dummy/normal/dummy_n_R1_xxx.fastq.gz,testdata_sarek/dummy/normal/dummy_n_R2_xxx.fastq.gz +9876T,testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L001_R2_xxx.fastq.gz +9876T,testdata_sarek/tumor/tiny_t_L002_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L002_R2_xxx.fastq.gz +9876T,testdata_sarek/tumor/tiny_t_L003_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L003_R2_xxx.fastq.gz +9876T,testdata_sarek/dummy/tumor/dummy_t_R1_xxx.fastq.gz,testdata_sarek/dummy/tumor/dummy_t_R2_xxx.fastq.gz +9877R,testdata_sarek/tumor/tiny_t_L005_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L005_R2_xxx.fastq.gz +9877R,testdata_sarek/tumor/tiny_t_L006_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L006_R2_xxx.fastq.gz +9877R,testdata_sarek/tumor/tiny_t_L007_R1_xxx.fastq.gz,testdata_sarek/tumor/tiny_t_L007_R2_xxx.fastq.gz diff --git a/testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz b/testdata_sarek/tumor/tiny_t_L001_R1_xxx.fastq.gz new file mode 100644 index 0000000000000000000000000000000000000000..305cb53553530f9d778f1d756c97bba958cfabef GIT binary patch literal 27427 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